<?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>60439</bug_id>
          
          <creation_ts>2011-05-07 10:23:12 -0700</creation_ts>
          <short_desc>[Texmap][Qt] Upstream texture-mapper changes from Qt&apos;s WebKit2 branch</short_desc>
          <delta_ts>2011-09-26 09:39:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>68808</dependson>
          <blocked>47068</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>benjamin</cc>
    
    <cc>eric</cc>
    
    <cc>kenneth</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>400085</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-07 10:23:12 -0700</bug_when>
    <thetext>Over the last few months several fixes were made to TextureMapper in a branch, including performance improvements, better integration API, internal animation support and more.
This is an attempt to upstream all these changes.

The staging branch is at https://gitorious.org/~ostapru/webkit/sls-webkit, branch merge-contd</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400156</commentid>
    <comment_count>1</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-07 19:06:05 -0700</bug_when>
    <thetext>I&apos;ve divided the patches to 10:
1. Changes to TextureMapperPlatformLayer API
2. Changes to TextureMapper API
3. Build changes
4. Allow 3D by default
5. Qt backend
6. media player fixes
7. WebGL fixes
8. GL backend
9. The &quot;meaty&quot; changes to TextureMapperNode
10. Glue layer (PageClientQt and friends).

If more granularity is needed, I can try though it&apos;s kind of hard to separate the code into pieces like that. In any case, the history is available in the webkit/qtwebkit-webkit2-dev branch on gitorious so we wouldn&apos;t gain much from splitting it more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400157</commentid>
    <comment_count>2</comment_count>
      <attachid>92707</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-07 19:07:07 -0700</bug_when>
    <thetext>Created attachment 92707
Patch 1: TextureMapperPlatformLayer API changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400158</commentid>
    <comment_count>3</comment_count>
      <attachid>92708</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-07 19:07:34 -0700</bug_when>
    <thetext>Created attachment 92708
Patch 2: TextureMapper API changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400159</commentid>
    <comment_count>4</comment_count>
      <attachid>92709</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-07 19:08:10 -0700</bug_when>
    <thetext>Created attachment 92709
Patch 3: pro/pri files build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400160</commentid>
    <comment_count>5</comment_count>
      <attachid>92710</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-07 19:09:22 -0700</bug_when>
    <thetext>Created attachment 92710
Patch 4: Enable 3D in the build scripts and settings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400161</commentid>
    <comment_count>6</comment_count>
      <attachid>92711</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-07 19:10:22 -0700</bug_when>
    <thetext>Created attachment 92711
Patch 5: Qt backend changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400162</commentid>
    <comment_count>7</comment_count>
      <attachid>92712</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-07 19:11:14 -0700</bug_when>
    <thetext>Created attachment 92712
Patch 6: Media player changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400163</commentid>
    <comment_count>8</comment_count>
      <attachid>92713</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-07 19:11:41 -0700</bug_when>
    <thetext>Created attachment 92713
Patch 7: WebGL changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400164</commentid>
    <comment_count>9</comment_count>
      <attachid>92714</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-07 19:12:11 -0700</bug_when>
    <thetext>Created attachment 92714
Patch 8: GL backend</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400165</commentid>
    <comment_count>10</comment_count>
      <attachid>92715</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-07 19:13:09 -0700</bug_when>
    <thetext>Created attachment 92715
Patch 9: TextureMapperNode refactoring (the big patch)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400166</commentid>
    <comment_count>11</comment_count>
      <attachid>92716</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-07 19:13:38 -0700</bug_when>
    <thetext>Created attachment 92716
Patch 10: Glue layer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400167</commentid>
    <comment_count>12</comment_count>
      <attachid>92708</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-05-07 19:17:01 -0700</bug_when>
    <thetext>Comment on attachment 92708
Patch 2: TextureMapper API changes

Attachment 92708 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8653103</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400168</commentid>
    <comment_count>13</comment_count>
      <attachid>92711</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-05-07 19:25:07 -0700</bug_when>
    <thetext>Comment on attachment 92711
Patch 5: Qt backend changes

Attachment 92711 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8640116</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400169</commentid>
    <comment_count>14</comment_count>
      <attachid>92717</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-07 19:28:12 -0700</bug_when>
    <thetext>Created attachment 92717
Patch 2: TextureMapper API changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400170</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-07 19:31:19 -0700</bug_when>
    <thetext>Attachment 92717 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/WebKit/qt/WebCoreSupport/PageClientQt.cpp:33:  &quot;TextureMapperQt.h&quot; already included at Source/WebKit/qt/WebCoreSupport/PageClientQt.cpp:24  [build/include] [4]
Total errors found: 1 in 3 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>400171</commentid>
    <comment_count>16</comment_count>
      <attachid>92714</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-05-07 19:32:35 -0700</bug_when>
    <thetext>Comment on attachment 92714
Patch 8: GL backend

Attachment 92714 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8655112</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400172</commentid>
    <comment_count>17</comment_count>
      <attachid>92716</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-05-07 19:38:28 -0700</bug_when>
    <thetext>Comment on attachment 92716
Patch 10: Glue layer

Attachment 92716 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8645092</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400173</commentid>
    <comment_count>18</comment_count>
      <attachid>92718</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-07 19:38:49 -0700</bug_when>
    <thetext>Created attachment 92718
Patch 10: Glue layer

The failed patches are due to a non-protected incude inside PageClientQt. That&apos;s rectified in Patch 10.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400174</commentid>
    <comment_count>19</comment_count>
      <attachid>92717</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-05-07 19:42:38 -0700</bug_when>
    <thetext>Comment on attachment 92717
Patch 2: TextureMapper API changes

Attachment 92717 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8645095</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400178</commentid>
    <comment_count>20</comment_count>
      <attachid>92718</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-05-07 19:48:35 -0700</bug_when>
    <thetext>Comment on attachment 92718
Patch 10: Glue layer

Attachment 92718 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8653113</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400185</commentid>
    <comment_count>21</comment_count>
      <attachid>92720</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-07 19:52:25 -0700</bug_when>
    <thetext>Created attachment 92720
Patch 10: Glue layer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400188</commentid>
    <comment_count>22</comment_count>
      <attachid>92720</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-05-07 20:01:17 -0700</bug_when>
    <thetext>Comment on attachment 92720
Patch 10: Glue layer

Attachment 92720 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8660112</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400189</commentid>
    <comment_count>23</comment_count>
      <attachid>92721</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-07 20:05:13 -0700</bug_when>
    <thetext>Created attachment 92721
Patch 10: Glue layer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400190</commentid>
    <comment_count>24</comment_count>
      <attachid>92722</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-07 20:16:43 -0700</bug_when>
    <thetext>Created attachment 92722
Patch 4: Enable 3D in the build scripts and settings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400227</commentid>
    <comment_count>25</comment_count>
      <attachid>92707</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-05-08 04:33:05 -0700</bug_when>
    <thetext>Comment on attachment 92707
Patch 1: TextureMapperPlatformLayer API changes

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

&gt; Source/WebCore/platform/graphics/GraphicsLayer.h:56
&gt; -typedef TextureMapperPlatformLayer PlatformLayer;
&gt; +typedef const TextureMapperPlatformLayer PlatformLayer;

So what is someone does &quot;const PlatformLayer&quot;? Wouldn&apos;t it be better to leave out the const?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400228</commentid>
    <comment_count>26</comment_count>
      <attachid>92708</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-05-08 04:37:42 -0700</bug_when>
    <thetext>Comment on attachment 92708
Patch 2: TextureMapper API changes

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        1. an entry/exit point for painting (beginPaint/endPaint)

An*

&gt; Source/WebCore/platform/graphics/texmap/TextureMapper.h:97
&gt; +    virtual void drawTexture(const BitmapTexture&amp;, const FloatRect&amp; target, const TransformationMatrix&amp; modelViewMatrix = TransformationMatrix(), float opacity = 1.0f, const BitmapTexture* maskTexture = 0) = 0;

im not sure that the modelView adds value, it actually just make it more confusing to me

&gt; Source/WebCore/platform/graphics/texmap/TextureMapper.h:108
&gt; +    void setViewportSize(const IntSize&amp; s) { m_viewportSize = s; }

I think writing size makes more sense</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400229</commentid>
    <comment_count>27</comment_count>
      <attachid>92722</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-05-08 04:40:47 -0700</bug_when>
    <thetext>Comment on attachment 92722
Patch 4: Enable 3D in the build scripts and settings

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

&gt; Source/WebKit/qt/Api/qwebsettings.cpp:177
&gt; +        settings-&gt;setAcceleratedCompositingFor3DTransformsEnabled(true);
&gt; +        settings-&gt;setAcceleratedCompositingForAnimationEnabled(true);
&gt; +        settings-&gt;setAcceleratedCompositingForVideoEnabled(true);

why true, and not value?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400231</commentid>
    <comment_count>28</comment_count>
      <attachid>92711</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-05-08 04:46:54 -0700</bug_when>
    <thetext>Comment on attachment 92711
Patch 5: Qt backend changes

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

&gt; Source/WebCore/platform/graphics/qt/TextureMapperQt.cpp:103
&gt;       QPainter* painter = m_currentSurface ? &amp;m_currentSurface-&gt;m_painter : m_painter;

You are using this in different places? make an inline private method for it?

&gt; Source/WebCore/platform/graphics/qt/TextureMapperQt.cpp:113
&gt; +    QPainter* painter = m_currentSurface ? &amp;m_currentSurface-&gt;m_painter : m_painter;

like here

&gt; Source/WebCore/platform/graphics/qt/TextureMapperQt.cpp:119
&gt; +    return IntSize(m_painter-&gt;device()-&gt;width(), m_painter-&gt;device()-&gt;height());

What if there is a currentSurface?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400232</commentid>
    <comment_count>29</comment_count>
      <attachid>92712</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-05-08 04:49:04 -0700</bug_when>
    <thetext>Comment on attachment 92712
Patch 6: Media player changes

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

r+ if you fix my comments

&gt; Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp:615
&gt; +void MediaPlayerPrivateQt::paintToTextureMapper(TextureMapper* textureMapper,
&gt; +                           const FloatRect&amp; targetRect,
&gt; +                           const TransformationMatrix&amp; matrix,
&gt; +                           float opacity,
&gt; +                           BitmapTexture*) const

Please put on one line before committing!

&gt; Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.h:115
&gt; +    virtual void paintToTextureMapper(TextureMapper*,
&gt; +                       const FloatRect&amp; targetRect,
&gt; +                       const TransformationMatrix&amp;,
&gt; +                       float opacity,
&gt; +                       BitmapTexture* mask) const;

One line please</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400234</commentid>
    <comment_count>30</comment_count>
      <attachid>92713</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-05-08 04:55:21 -0700</bug_when>
    <thetext>Comment on attachment 92713
Patch 7: WebGL changes

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

How useful is this fallback path?

&gt; Source/WebCore/ChangeLog:11
&gt; +        No new tests. Tests in LayoutTests/compositing cover this.

compositing? webgl tests are there?

&gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:182
&gt; +    virtual void paintToTextureMapper(TextureMapper*,
&gt; +                       const FloatRect&amp; target,
&gt; +                       const TransformationMatrix&amp;,
&gt; +                       float opacity,
&gt; +                       BitmapTexture* mask) const;

one line please</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400237</commentid>
    <comment_count>31</comment_count>
      <attachid>92721</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-05-08 05:43:08 -0700</bug_when>
    <thetext>Comment on attachment 92721
Patch 10: Glue layer

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

&gt; Source/WebKit/qt/WebCoreSupport/PageClientQt.cpp:69
&gt; +        if (m_frame-&gt;d)

Does the frame not always have a private? You dont test for this elsewhere

&gt; Source/WebKit/qt/WebCoreSupport/PageClientQt.cpp:293
&gt; +        textureMapperNodeClient = new TextureMapperNodeClientQt(page-&gt;mainFrame(), layer);

Can&apos;t we use an OwnPtr?

&gt; Source/WebKit/qt/WebCoreSupport/PageClientQt.cpp:305
&gt; +    delete textureMapperNodeClient;
&gt; +    textureMapperNodeClient = 0;

OwnPtr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400243</commentid>
    <comment_count>32</comment_count>
      <attachid>92714</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-05-08 09:15:32 -0700</bug_when>
    <thetext>Comment on attachment 92714
Patch 8: GL backend

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

Already mostly reviewed in person with No&apos;am at the WebKit contributors meeting

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:169
&gt; +        GLuint findOrCreate(ImageUid image, bool&amp; found)

I would use ImageUID imageID or similar

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:346
&gt; -&quot;                   gl_FragColor = vec4(color.rgb * Opacity, color.a * Opacity);    \n&quot;
&gt; +&quot;                   gl_FragColor = vec4(color.rgba * Opacity);    \n&quot;

For consistency reasons you should add more spaces before the \n

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:420
&gt; +    drawTexture(textureGL.id(), textureGL.isOpaque(), textureGL.relativeSize(), targetRect, matrix, opacity, mask, false);

What is false here? pls make that clear /* flip */

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperGL.h:91
&gt; +typedef uint64_t ImageUid;

I think ImageUID would be a better type</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400244</commentid>
    <comment_count>33</comment_count>
      <attachid>92715</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-05-08 09:21:13 -0700</bug_when>
    <thetext>Comment on attachment 92715
Patch 9: TextureMapperNode refactoring (the big patch)

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

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.h:133
&gt; +    void setOpacity(float o) { m_opacity = o; }

I prefer value over o

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.h:184
&gt; +        TransformationMatrix target, replica, forDescendants, local, base, perspective;

We normally would declare these on separate lines

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.h:321
&gt; +inline void deleteOwnedPtr(TextureMapperNode* ptr)
&gt; +{
&gt; +    delete ptr;
&gt; +}

Huh? why is this necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400250</commentid>
    <comment_count>34</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-08 09:50:29 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapper.h:97
&gt; &gt; +    virtual void drawTexture(const BitmapTexture&amp;, const FloatRect&amp; target, const TransformationMatrix&amp; modelViewMatrix = TransformationMatrix(), float opacity = 1.0f, const BitmapTexture* maskTexture = 0) = 0;
&gt; 
&gt; im not sure that the modelView adds value, it actually just make it more confusing to me
Otherwise it&apos;s a check-webkit-style error. Apparently check-webkit-style doesn&apos;t like TransformationMatrix&amp; matrix = TransformationMatrix(). But I can put it in and declare it a false positieve.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400251</commentid>
    <comment_count>35</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-08 09:51:09 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.h:321
&gt; &gt; +inline void deleteOwnedPtr(TextureMapperNode* ptr)
&gt; &gt; +{
&gt; &gt; +    delete ptr;
&gt; &gt; +}
&gt; 
&gt; Huh? why is this necessary?
Oops... Not necessary. Will remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400252</commentid>
    <comment_count>36</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-08 09:51:52 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 92721 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92721&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/qt/WebCoreSupport/PageClientQt.cpp:69
&gt; &gt; +        if (m_frame-&gt;d)
Fair enough
 
&gt; Does the frame not always have a private? You dont test for this elsewhere
&gt; 
&gt; &gt; Source/WebKit/qt/WebCoreSupport/PageClientQt.cpp:293
&gt; &gt; +        textureMapperNodeClient = new TextureMapperNodeClientQt(page-&gt;mainFrame(), layer);
&gt; 
&gt; Can&apos;t we use an OwnPtr?
OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400257</commentid>
    <comment_count>37</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-08 10:26:33 -0700</bug_when>
    <thetext>&gt; &gt; +    return IntSize(m_painter-&gt;device()-&gt;width(), m_painter-&gt;device()-&gt;height());
&gt; 
&gt; What if there is a currentSurface?
This is the size that&apos;s used to decide what size a new surface should be. It&apos;s not affected by the existence of a current surface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400260</commentid>
    <comment_count>38</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-08 10:37:51 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 92713 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92713&amp;action=review
&gt; 
&gt; How useful is this fallback path?
It shows WebGL inside CSS when we&apos;re in a QWebView. This is copied from the non-textureMapper version.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        No new tests. Tests in LayoutTests/compositing cover this.
&gt; 
&gt; compositing? webgl tests are there?
Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400270</commentid>
    <comment_count>39</comment_count>
      <attachid>92740</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-08 12:49:01 -0700</bug_when>
    <thetext>Created attachment 92740
Patch 9: TextureMapperNode refactoring (the big patch)

Fixed Kenneth&apos;s prior comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400272</commentid>
    <comment_count>40</comment_count>
      <attachid>92741</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-08 12:50:14 -0700</bug_when>
    <thetext>Created attachment 92741
Patch 10: Glue layer

Fixed based on Kenneth&apos;s comments (mainly moved TextureMapperNodeClientQt to an OwnPtr)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400277</commentid>
    <comment_count>41</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-08 12:52:53 -0700</bug_when>
    <thetext>Attachment 92741 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/WebKit/qt/WebCoreSupport/PageClientQt.h:49:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/PageClientQt.h:49:  The parameter name &quot;layer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/WebCoreSupport/PageClientQt.h:51:  The parameter name &quot;textureMapper&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 9 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>400281</commentid>
    <comment_count>42</comment_count>
      <attachid>92742</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-08 12:58:34 -0700</bug_when>
    <thetext>Created attachment 92742
Patch 10: Glue layer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400319</commentid>
    <comment_count>43</comment_count>
      <attachid>92753</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-08 19:20:57 -0700</bug_when>
    <thetext>Created attachment 92753
Patch 4: Enable 3D in the build scripts and settings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400320</commentid>
    <comment_count>44</comment_count>
      <attachid>92754</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-08 19:28:30 -0700</bug_when>
    <thetext>Created attachment 92754
Patch 4: Enable 3D in the build scripts and settings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400386</commentid>
    <comment_count>45</comment_count>
      <attachid>92742</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-05-09 01:10:48 -0700</bug_when>
    <thetext>Comment on attachment 92742
Patch 10: Glue layer

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

&gt; Source/WebKit/qt/WebCoreSupport/PageClientQt.h:50
&gt; +    void scroll(float dx, float dy);

scrollBy ?

&gt; Source/WebKit/qt/WebCoreSupport/PageClientQt.h:52
&gt; +    virtual ~TextureMapperNodeClientQt();

Why not place it next to the ctor?

&gt; Source/WebKit/qt/WebCoreSupport/PageClientQt.h:57
&gt; +protected:

Are you inheriting from this class?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400392</commentid>
    <comment_count>46</comment_count>
      <attachid>92740</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-05-09 01:43:40 -0700</bug_when>
    <thetext>Comment on attachment 92740
Patch 9: TextureMapperNode refactoring (the big patch)

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

&gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.h:82
&gt; +    virtual bool addAnimation(const KeyframeValueList&amp;, const IntSize&amp; /*boxSize*/, const Animation*, const String&amp; /*keyframesName*/, double /*timeOffset*/);

No need to do /*boxSize*/, just write boxSize

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:68
&gt; +    void markTextureUsage(BitmapTexture* texture)

mark usage? shouldnt it have a bool then? what about markTextureUsed ?

So this method finds the texture, removes it and prepends it? I guess we need to find a better name for the method

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:162
&gt; +#if TEXTURE_MAPPER_MINIMAL_COMPUTATIONS

would we add all this TEXTURE_MAPPER_MINIMAL_COMPUTATIONS in a separate patch?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:270
&gt; +static const float gTileDimension = 1024.0;

Maybe add to the top? in an empty namespace?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400961</commentid>
    <comment_count>47</comment_count>
      <attachid>92900</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-09 18:16:10 -0700</bug_when>
    <thetext>Created attachment 92900
92740: Patch 9: TextureMapperNode refactoring (the big patch)

Divided patch 9 to 4 patches:
- the main patch
- animations
- minimal-computations
- cache</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400964</commentid>
    <comment_count>48</comment_count>
      <attachid>92902</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-09 18:20:21 -0700</bug_when>
    <thetext>Created attachment 92902
Patch: build fix for plugins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401012</commentid>
    <comment_count>49</comment_count>
      <attachid>92911</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-09 20:01:57 -0700</bug_when>
    <thetext>Created attachment 92911
Patch: add accelerated animation support to TextureMapper

This is the animation portion of the original patch (9)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401109</commentid>
    <comment_count>50</comment_count>
      <attachid>92911</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-05-10 02:33:43 -0700</bug_when>
    <thetext>Comment on attachment 92911
Patch: add accelerated animation support to TextureMapper

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

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:674
&gt; +void TextureMapperNode::syncCompositingStateInternal(GraphicsLayerTextureMapper* graphicsLayer, bool traverseDescendants, TextureMapper* textureMapper)

wouldn&apos;t it makes sense to have the traverseDescentants after the textureMapper?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:682
&gt; +        m_state.maskLayer-&gt;syncCompositingStateInternal(toGraphicsLayerTextureMapper(graphicsLayer-&gt;maskLayer()), false, textureMapper);

I dislike the Internal part... then it is better to find a more proper name

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:684
&gt; +        if (m_state.maskLayer-&gt;m_size.isEmpty())
&gt; +            m_state.maskLayer-&gt;m_size = m_size;

why only when it is empty? comment?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:688
&gt; +        m_state.replicaLayer-&gt;syncCompositingStateInternal(toGraphicsLayerTextureMapper(graphicsLayer-&gt;replicaLayer()), false, textureMapper);

can the false be replaced by an enum?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:692
&gt; +    bool visibleRectDirty = true;

IsDirty

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:843
&gt; +        return;

why not just break; ?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.h:66
&gt; +    static PassRefPtr&lt;TextureMapperAnimation&gt; create(const KeyframeValueList&amp; values) { return adoptRef(new TextureMapperAnimation(values)); }

I would put that one at the top.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401200</commentid>
    <comment_count>51</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-10 07:57:03 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:674
&gt; &gt; +void TextureMapperNode::syncCompositingStateInternal(GraphicsLayerTextureMapper* graphicsLayer, bool traverseDescendants, TextureMapper* textureMapper)
&gt; 
&gt; wouldn&apos;t it makes sense to have the traverseDescentants after the textureMapper?
OK

&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:682
&gt; &gt; +        m_state.maskLayer-&gt;syncCompositingStateInternal(toGraphicsLayerTextureMapper(graphicsLayer-&gt;maskLayer()), false, textureMapper);
&gt; 
&gt; I dislike the Internal part... then it is better to find a more proper name
Actually it seems unnecessary now. I should put everything into syncCompositing state.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:684
&gt; &gt; +        if (m_state.maskLayer-&gt;m_size.isEmpty())
&gt; &gt; +            m_state.maskLayer-&gt;m_size = m_size;
&gt; 
&gt; why only when it is empty? comment?
It&apos;s a default. Sometimes the mask layer has its own size. Will add a comment.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:688
&gt; &gt; +        m_state.replicaLayer-&gt;syncCompositingStateInternal(toGraphicsLayerTextureMapper(graphicsLayer-&gt;replicaLayer()), false, textureMapper);
&gt; 
&gt; can the false be replaced by an enum?
Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401547</commentid>
    <comment_count>52</comment_count>
      <attachid>93021</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-10 15:10:18 -0700</bug_when>
    <thetext>Created attachment 93021
Patch 9: TextureMapperNode refactoring

Fixed more of Kenneth&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401874</commentid>
    <comment_count>53</comment_count>
      <attachid>93021</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-05-11 02:43:05 -0700</bug_when>
    <thetext>Comment on attachment 93021
Patch 9: TextureMapperNode refactoring

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

Great stuff, nice to finally get our delta upstreamed

&gt; Source/WebCore/ChangeLog:14
&gt; +        1. Support the new TextureMapperPlatformLayer for media &amp; WebGL.
&gt; +        2. Use a pool for intermediate surfaces, to avoid constant allocating/freeing of textures.
&gt; +        3. Divide computation operations to different smaller functions.
&gt; +        4. Get rid of scissor/clip layers, use transformed clip instead.
&gt; +        5. Allow tiling for big layers.

In the future it would be nice with these as separate patches, but as we have gone thru these patches together in real life, I accept it this time :-)

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:395
&gt; +        if (m_state.replicaLayer &amp;&amp; !options.isSurface)
&gt; +            m_currentContent.media-&gt;paintToTextureMapper(options.textureMapper, targetRect,
&gt; +                                                         TransformationMatrix(m_transforms.target).multiply(m_state.replicaLayer-&gt;m_transforms.local),
&gt; +                                                         opacity * m_state.replicaLayer-&gt;m_opacity,
&gt; +                                                         replicaMaskTexture ? replicaMaskTexture.get() : maskTexture.get());

That if needs braces</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402256</commentid>
    <comment_count>54</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-11 14:03:28 -0700</bug_when>
    <thetext>Committed r86264: &lt;http://trac.webkit.org/changeset/86264&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402260</commentid>
    <comment_count>55</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-11 14:06:23 -0700</bug_when>
    <thetext>Committed r86265: &lt;http://trac.webkit.org/changeset/86265&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402263</commentid>
    <comment_count>56</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-11 14:09:57 -0700</bug_when>
    <thetext>Committed r86266: &lt;http://trac.webkit.org/changeset/86266&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402269</commentid>
    <comment_count>57</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-11 14:13:15 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/86265 might have broken Qt Linux Release minimal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402272</commentid>
    <comment_count>58</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-11 14:14:52 -0700</bug_when>
    <thetext>Committed r86268: &lt;http://trac.webkit.org/changeset/86268&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402276</commentid>
    <comment_count>59</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-11 14:18:25 -0700</bug_when>
    <thetext>Committed r86269: &lt;http://trac.webkit.org/changeset/86269&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402324</commentid>
    <comment_count>60</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-11 15:11:32 -0700</bug_when>
    <thetext>Committed r86276: &lt;http://trac.webkit.org/changeset/86276&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402337</commentid>
    <comment_count>61</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-11 15:23:25 -0700</bug_when>
    <thetext>(In reply to comment #57)
&gt; http://trac.webkit.org/changeset/86265 might have broken Qt Linux Release minimal

Fixed later on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444666</commentid>
    <comment_count>62</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-01 05:25:30 -0700</bug_when>
    <thetext>(In reply to comment #60)
&gt; Committed r86276: &lt;http://trac.webkit.org/changeset/86276&gt;

In this commit, was there a review for 
&quot;Patch 12/12: Enable accelerated animations in texture-mapper. The entire interpolation&quot;? I don&apos;t see it.


The following is changed without explanation and I don&apos;t see it in the comments:
-GL_CMD(glTexSubImage2D(GL_TEXTURE_2D, 0, m_dirtyRect.x(), m_dirtyRect.y(), m_dirtyRect.width(), m_dirtyRect.height(), GL_RGBA, GL_UNSIGNED_BYTE, m_buffer-&gt;data())) 
+GL_CMD(glTexSubImage2D(GL_TEXTURE_2D, 0, m_dirtyRect.x(), m_dirtyRect.y(), m_dirtyRect.width(), m_dirtyRect.height(), GL_BGRA, GL_UNSIGNED_BYTE, m_buffer-&gt;data())) 


The annoying part being GL_BGRA does not exist on OpenGL ES (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexImage2D.xml) so this does not compile on ARM anymore.

The use of the format BGRA is kind of mysterious since the buffer is a RGBA32PremultimpliedBuffer.
The format + the fact that the original data is premultiplied makes BitmapTextureGL::endPaint() pretty mysterious without explanations :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444690</commentid>
    <comment_count>63</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-08-01 07:54:17 -0700</bug_when>
    <thetext>(In reply to comment #62)
&gt; (In reply to comment #60)
&gt; &gt; Committed r86276: &lt;http://trac.webkit.org/changeset/86276&gt;
&gt; 
&gt; In this commit, was there a review for 
&gt; &quot;Patch 12/12: Enable accelerated animations in texture-mapper. The entire interpolation&quot;? I don&apos;t see it.
Some of this was reviewed offline.

&gt; 
&gt; 
&gt; The following is changed without explanation and I don&apos;t see it in the comments:
&gt; -GL_CMD(glTexSubImage2D(GL_TEXTURE_2D, 0, m_dirtyRect.x(), m_dirtyRect.y(), m_dirtyRect.width(), m_dirtyRect.height(), GL_RGBA, GL_UNSIGNED_BYTE, m_buffer-&gt;data())) 
&gt; +GL_CMD(glTexSubImage2D(GL_TEXTURE_2D, 0, m_dirtyRect.x(), m_dirtyRect.y(), m_dirtyRect.width(), m_dirtyRect.height(), GL_BGRA, GL_UNSIGNED_BYTE, m_buffer-&gt;data())) 
&gt; 
&gt; 
&gt; The annoying part being GL_BGRA does not exist on OpenGL ES (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexImage2D.xml) so this does not compile on ARM anymore.
&gt; 
&gt; The use of the format BGRA is kind of mysterious since the buffer is a RGBA32PremultimpliedBuffer.
&gt; The format + the fact that the original data is premultiplied makes BitmapTextureGL::endPaint() pretty mysterious without explanations :)

We need to add a software based RGBA-&gt;BGRA for platforms that don&apos;t support it, or put it in the shader.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444706</commentid>
    <comment_count>64</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-08-01 08:45:36 -0700</bug_when>
    <thetext>Added bug https://bugs.webkit.org/show_bug.cgi?id=65473 to track the BGRA issue.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92707</attachid>
            <date>2011-05-07 19:07:07 -0700</date>
            <delta_ts>2011-05-08 04:33:05 -0700</delta_ts>
            <desc>Patch 1: TextureMapperPlatformLayer API changes</desc>
            <filename>0001-Change-the-TextureMapperPlatformLayer-API-to-allow-a.patch</filename>
            <type>text/plain</type>
            <size>4462</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSA3MjM5NzMxMzkwOWMxYjI1MGYwYjEwNTcyYzA0Y2VmNWYwYWNkODM0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgpEYXRlOiBTYXQsIDcgTWF5IDIwMTEgMTU6MTQ6NDIgLTA3MDAKU3ViamVjdDogW1BBVENI
IDAxLzEwXSBDaGFuZ2UgdGhlIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIEFQSSB0byBhbGxv
dyBhIDNELWNvbnRleHQgb3IgYSBtZWRpYQogcGxheWVyIHRvIGRlY2lkZSBob3cgdG8gcGFpbnQg
aW50byB0aGUgVGV4dHVyZU1hcHBlciwgcmF0aGVyIHRoYW4gbWFuZGF0ZSBzcGVjaWZpYyB0eXBl
cyBvZiBwbGF0Zm9ybSBsYXllcnMuCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAxNiArKysrKysKIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaCAgIHwgICAgNiArLS0KIC4uLi9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCAgIHwgICA0OSArKy0tLS0tLS0tLS0t
LS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCA0OSBkZWxldGlvbnMo
LSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggNGEwODk4Yi4uZmFhNmUxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE5IEBACisyMDExLTA1LTA3ICBOb2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lh
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
VGV4bWFwXSBVcHN0cmVhbSB0ZXh0dXJlLW1hcHBlciBjaGFuZ2VzIGZyb20gUXQncyBXZWJLaXQy
IGJyYW5jaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjA0MzkKKworICAgICAgICBQYXRjaCAxLzEwOiBDaGFuZ2UgdGhlIFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyIEFQSSB0byBhbGxvdyBhIDNELWNvbnRleHQgb3IgYQorICAgICAgICBtZWRpYSBw
bGF5ZXIgdG8gZGVjaWRlIGhvdyB0byBwYWludCBpbnRvIHRoZSBUZXh0dXJlTWFwcGVyLCByYXRo
ZXIgdGhhbiBtYW5kYXRlIHNwZWNpZmljCisgICAgICAgIHR5cGVzIG9mIHBsYXRmb3JtIGxheWVy
cy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3RzIGluIExheW91dFRlc3RzL2NvbXBvc2l0
aW5nIGNvdmVyIHRoaXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyLmg6CisKIDIwMTEtMDUtMDYgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsaWNlIExpdS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAppbmRleCAyMTFlOTliLi43YTU2ZjI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5oCkBAIC00MCwxMCArNDAsNiBAQAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotI2luY2x1ZGUg
InRleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgotI2VuZGlmCi0KICNpZiBQTEFU
Rk9STShNQUMpCiAjaWZkZWYgX19PQkpDX18KIEBjbGFzcyBDQUxheWVyOwpAQCAtNTcsNyArNTMs
NyBAQCB0eXBlZGVmIHN0cnVjdCBfQ0FDRkxheWVyIFBsYXRmb3JtTGF5ZXI7CiAjaWYgVVNFKFRF
WFRVUkVfTUFQUEVSKQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXI7Ci10eXBlZGVmIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIFBsYXRmb3Jt
TGF5ZXI7Cit0eXBlZGVmIGNvbnN0IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIFBsYXRmb3Jt
TGF5ZXI7CiB9OwogI2Vsc2UKIFFUX0JFR0lOX05BTUVTUEFDRQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXIuaAppbmRleCBkMmQ2NDZhLi4xYjI5MjkwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaApAQCAtMjAsNTggKzIwLDE5IEBACiAjaWZuZGVm
IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyX2gKICNkZWZpbmUgVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJfaAogCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0Nv
bnRleHQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgSW50U2l6ZTsKIGNsYXNzIFRleHR1cmVNYXBw
ZXI7Ci1jbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKLQotCi0vLyBHbHVlIGxheWVyIHRvIGNv
bm5lY3QgdGhlIHRleG1hcCBsYXllciB0byB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgY29udGFpbmVy
LgotY2xhc3MgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IH5UZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQoKSB7fQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c0Rpc3BsYXkoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChj
b25zdCBJbnRSZWN0JiByZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNpemVDaGFuZ2Vk
KGNvbnN0IEludFNpemUmKSA9IDA7Ci0gICAgdmlydHVhbCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJl
TWFwcGVyKCkgPSAwOwotfTsKK2NsYXNzIEJpdG1hcFRleHR1cmU7CiAKIGNsYXNzIFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyIHsKIHB1YmxpYzoKLSAgICBlbnVtIFR5cGUgewotICAgICAgICBD
b250ZW50TGF5ZXIsCi0gICAgICAgIE1lZGlhTGF5ZXIKLSAgICB9OwotCi0gICAgdmlydHVhbCBU
eXBlIGxheWVyVHlwZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllcigpIHt9Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyQ29udGVudExheWVyIDog
cHVibGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIHsKLXB1YmxpYzoKLSAgICBzdHJ1Y3Qg
UGFpbnRPcHRpb25zIHsKLSAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdDsKLSAgICAgICAgSW50
UmVjdCB0YXJnZXRSZWN0OwotICAgICAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZTsKLSAgICAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwotICAgICAgICBmbG9hdCBvcGFjaXR5Owot
ICAgIH07Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGxhdGZvcm1MYXllckNsaWVudChUZXh0dXJl
TWFwcGVyTGF5ZXJDbGllbnQqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFRleHR1cmVN
YXBwZXIqLCBjb25zdCBQYWludE9wdGlvbnMmKSB7fQotICAgIHZpcnR1YWwgSW50U2l6ZSBzaXpl
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgVHlwZSBsYXllclR5cGUoKSBjb25zdCB7IHJldHVy
biBDb250ZW50TGF5ZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIo
VGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtb2RlbFZpZXdNYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBmbG9hdCBvcGFj
aXR5ID0gMS4wLCBCaXRtYXBUZXh0dXJlKiBtYXNrID0gMCkgY29uc3QgPSAwOwogfTsKIAotY2xh
c3MgVGV4dHVyZU1hcHBlck1lZGlhTGF5ZXIgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQq
KSA9IDA7Ci0gICAgdmlydHVhbCBUeXBlIGxheWVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIE1lZGlh
TGF5ZXI7IH0KIH07CiAKLX0KLQogI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
X2gKLS0gCjEuNy4zLjMKCg==
</data>
<flag name="review"
          id="85719"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92708</attachid>
            <date>2011-05-07 19:07:34 -0700</date>
            <delta_ts>2011-05-08 04:37:42 -0700</delta_ts>
            <desc>Patch 2: TextureMapper API changes</desc>
            <filename>0002-Add-a-few-functions-to-the-TextureMapper-API-allowin.patch</filename>
            <type>text/plain</type>
            <size>6848</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSBlMWNmMzAzODQ2MDU4ZDE5YmFhMWIxMjgwYzYzYjNlYjU1ODg4ZWUzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgpEYXRlOiBTYXQsIDcgTWF5IDIwMTEgMTU6MjE6MjYgLTA3MDAKU3ViamVjdDogW1BBVENI
IDAyLzEwXSBBZGQgYSBmZXcgZnVuY3Rpb25zIHRvIHRoZSBUZXh0dXJlTWFwcGVyIEFQSSwgYWxs
b3dpbmc6CiAgICAgICAgIDEuIGFuIGVudHJ5L2V4aXQgcG9pbnQgZm9yIHBhaW50aW5nIChiZWdp
blBhaW50L2VuZFBhaW50KQogICAgICAgICAyLiBDbGlwcGluZyB3aXRoIGEgbWF0cml4LCBzaW5j
ZSB3ZSB1c2Ugc3RlbmNpbCBpbnN0ZWFkIG9mIHNjaXNzb3JzCiAgICAgICAgIDMuIERyYXcgYSB0
ZXh0dXJlIGRpcmVjdGx5IHdpdGggYW4gSUQKICAgICAgICAgNC4gUmVtb3ZlIG9mZnNldCwgc2lu
Y2Ugd2UncmUgdXNpbmcgcmVhbCB0aWxpbmcKICAgICAgICAgNS4gbnVtYmVyT2ZCeXRlcyBjYWxj
dWxhdGlvbiBmb3IgdGV4dHVyZXMsIGZvciBtZW1vcnkgbWFuYWdlbWVudAoKLS0tCiBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjkgKysrKysr
KysrKysrKysrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCAg
ICAgICB8ICAgMzcgKysrKysrKysrKystLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA1MCBpbnNl
cnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmFhNmUxZS4uN2VjNDFm
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDM1IEBACiAgICAgICAgIFtUZXhtYXBdIFVwc3RyZWFt
IHRleHR1cmUtbWFwcGVyIGNoYW5nZXMgZnJvbSBRdCdzIFdlYktpdDIgYnJhbmNoCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDQzOQogCisgICAgICAg
IE5vIG5ldyB0ZXN0cy4gVGVzdHMgaW4gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcgY292ZXIgdGhp
cy4KKworICAgICAgICBQYXRjaCAyLzEwOiBBZGQgYSBmZXcgZnVuY3Rpb25zIHRvIHRoZSBUZXh0
dXJlTWFwcGVyIEFQSSwgYWxsb3dpbmc6CisgICAgICAgIDEuIGFuIGVudHJ5L2V4aXQgcG9pbnQg
Zm9yIHBhaW50aW5nIChiZWdpblBhaW50L2VuZFBhaW50KQorICAgICAgICAyLiBDbGlwcGluZyB3
aXRoIGEgbWF0cml4LCBzaW5jZSB3ZSB1c2Ugc3RlbmNpbCBpbnN0ZWFkIG9mIHNjaXNzb3JzCisg
ICAgICAgIDMuIERyYXcgYSB0ZXh0dXJlIGRpcmVjdGx5IHdpdGggYW4gSUQKKyAgICAgICAgNC4g
UmVtb3ZlIG9mZnNldCwgc2luY2Ugd2UncmUgdXNpbmcgcmVhbCB0aWxpbmcKKyAgICAgICAgNS4g
bnVtYmVyT2ZCeXRlcyBjYWxjdWxhdGlvbiBmb3IgdGV4dHVyZXMsIGZvciBtZW1vcnkgbWFuYWdl
bWVudAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OmRlc3Ryb3kpOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6YnBwKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRl
eHR1cmU6Om51bWJlck9mQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6
dmlld3BvcnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6OnNldFZpZXdw
b3J0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjphbGxvd1BhcnRpYWxV
cGRhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6OmlzT3BlbkdMQmFja2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6OnNldFRyYW5zZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlcjo6YmVnaW5QYWludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyOjplbmRQYWludGluZyk6CisKKzIwMTEtMDUtMDcgIE5vYW0gUm9zZW50aGFsICA8
bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFVwc3RyZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5n
ZXMgZnJvbSBRdCdzIFdlYktpdDIgYnJhbmNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MDQzOQorCiAgICAgICAgIFBhdGNoIDEvMTA6IENoYW5nZSB0
aGUgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIgQVBJIHRvIGFsbG93IGEgM0QtY29udGV4dCBv
ciBhCiAgICAgICAgIG1lZGlhIHBsYXllciB0byBkZWNpZGUgaG93IHRvIHBhaW50IGludG8gdGhl
IFRleHR1cmVNYXBwZXIsIHJhdGhlciB0aGFuIG1hbmRhdGUgc3BlY2lmaWMKICAgICAgICAgdHlw
ZXMgb2YgcGxhdGZvcm0gbGF5ZXJzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKaW5kZXggOGU0NmUzYy4uZTRhOTcx
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlci5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUgIlRyYW5zZm9y
bWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAgLTQ3LDEw
ICs0OCwxMSBAQCBjbGFzcyBCaXRtYXBUZXh0dXJlICA6IHB1YmxpYyBSZWZDb3VudGVkPEJpdG1h
cFRleHR1cmU+IHsKIHB1YmxpYzoKICAgICBCaXRtYXBUZXh0dXJlKCkgOiBtX2xvY2tDb3VudCgw
KSB7fQogICAgIHZpcnR1YWwgfkJpdG1hcFRleHR1cmUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
ZGVzdHJveSgpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGFsbG93T2ZmbGluZVRleHR1cmVVcGxv
YWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkg
PSAwOwogICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
aW50IGJwcCgpIGNvbnN0IHsgcmV0dXJuIDMyOyB9CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQo
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0KGNvbnN0IEludFNpemUmIHNpemUs
IGJvb2wgb3BhcXVlID0gZmFsc2UpCiAgICAgewpAQCAtNzUsMTYgKzc3LDEyIEBAIHB1YmxpYzoK
ICAgICBpbmxpbmUgdm9pZCB1bmxvY2soKSB7IC0tbV9sb2NrQ291bnQ7IH0KICAgICBpbmxpbmUg
Ym9vbCBpc0xvY2tlZCgpIHsgcmV0dXJuIG1fbG9ja0NvdW50OyB9CiAgICAgaW5saW5lIEludFNp
emUgY29udGVudFNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRTaXplOyB9Ci0gICAgaW5s
aW5lIHZvaWQgc2V0T2Zmc2V0KGNvbnN0IEludFBvaW50JiBvKSB7IG1fb2Zmc2V0ID0gbzsgfQot
ICAgIGlubGluZSBJbnRQb2ludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQor
ICAgIGlubGluZSBpbnQgbnVtYmVyT2ZCeXRlcygpIGNvbnN0IHsgcmV0dXJuIHNpemUoKS53aWR0
aCgpICogc2l6ZSgpLmhlaWdodCgpICogYnBwKCkgPj4gMzsgfQogCiBwcm90ZWN0ZWQ6Ci0KLXBy
aXZhdGU6CiAgICAgaW50IG1fbG9ja0NvdW50OwogICAgIEludFNpemUgbV9jb250ZW50U2l6ZTsK
ICAgICBib29sIG1faXNPcGFxdWU7Ci0gICAgSW50UG9pbnQgbV9vZmZzZXQ7CiB9OwogCiAvLyBB
ICJjb250ZXh0IiBjbGFzcyB1c2VkIHRvIGVuY2Fwc3VsYXRlIGFjY2VsZXJhdGVkIHRleHR1cmUg
bWFwcGluZyBmdW5jdGlvbnM6IGkuZS4gZHJhd2luZyBhIHRleHR1cmUKQEAgLTk2LDI4ICs5NCwz
MyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gY3JlYXRl
KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0ID0gMCk7CiAgICAgdmlydHVhbCB+VGV4
dHVyZU1hcHBlcigpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJp
dG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGZsb2F0IG9w
YWNpdHkgPSAxLjBmLCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSA9IDApID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgZmxvYXQgb3BhY2l0eSA9IDEuMGYsIGNv
bnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlID0gMCkgPSAwOwogCiAgICAgLy8gbWFrZXMg
YSBzdXJmYWNlIHRoZSB0YXJnZXQgZm9yIHRoZSBmb2xsb3dpbmcgZHJhd1RleHR1cmUgY2FsbHMu
CiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJlJiB0
ZXh0dXJlLCBjb25zdCBJbnRTaXplJiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpCi0gICAgewotICAg
ICAgICBVTlVTRURfUEFSQU0odmlzaWJsZVJlY3QpOwotICAgICAgICBkcmF3VGV4dHVyZSh0ZXh0
dXJlLCBJbnRSZWN0KDAsIDAsIHRleHR1cmUuY29udGVudFNpemUoKS53aWR0aCgpLCB0ZXh0dXJl
LmNvbnRlbnRTaXplKCkuaGVpZ2h0KCkpLCBtYXRyaXgsIG9wYWNpdHksIDApOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KikgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIHNldENsaXAoY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCopID0gMDsKKyAgICB2
aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9h
dFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuZENsaXAoKSA9IDA7CiAgICAgdmlydHVh
bCBib29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKSA9IDA7CisgICAgSW50U2l6ZSB2
aWV3cG9ydFNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0U2l6ZTsgfQorICAgIHZvaWQg
c2V0Vmlld3BvcnRTaXplKGNvbnN0IEludFNpemUmIHMpIHsgbV92aWV3cG9ydFNpemUgPSBzOyB9
CiAKICAgICB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1
YWxpdHkgcXVhbGl0eSkgeyBtX2ludGVycG9sYXRpb25RdWFsaXR5ID0gcXVhbGl0eTsgfQogICAg
IHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpIHsgbV90
ZXh0RHJhd2luZ01vZGUgPSBtb2RlOyB9CiAKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcnBvbGF0aW9uUXVh
bGl0eTsgfQogICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdGV4dERyYXdpbmdNb2RlOyB9CisgICAgdmlydHVhbCBib29sIGFsbG93UGFy
dGlhbFVwZGF0ZXMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
c09wZW5HTEJhY2tlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2b2lkIHNldFRy
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fdHJhbnNmb3Jt
ID0gbWF0cml4OyB9CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV90cmFuc2Zvcm07IH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblBhaW50aW5n
KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50aW5nKCkgeyB9CiAKLSAgICB2b2lkIHNl
dFZpZXdwb3J0U2l6ZShjb25zdCBJbnRTaXplJik7CiAKIHByb3RlY3RlZDoKICAgICBUZXh0dXJl
TWFwcGVyKCkKQEAgLTEyOCw2ICsxMzEsOCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIElu
dGVycG9sYXRpb25RdWFsaXR5IG1faW50ZXJwb2xhdGlvblF1YWxpdHk7CiAgICAgVGV4dERyYXdp
bmdNb2RlRmxhZ3MgbV90ZXh0RHJhd2luZ01vZGU7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bV90cmFuc2Zvcm07CisgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKIH07CiAKIH07Ci0tIAox
LjcuMy4zCgo=
</data>
<flag name="review"
          id="85732"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92709</attachid>
            <date>2011-05-07 19:08:10 -0700</date>
            <delta_ts>2011-05-08 04:39:06 -0700</delta_ts>
            <desc>Patch 3: pro/pri files build fixes</desc>
            <filename>0003-TextureMapper-shouldn-t-depend-on-OpenGL-but-rather-.patch</filename>
            <type>text/plain</type>
            <size>2635</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSBhNDlmN2JlNWE5YjQyNDcyYjc2N2IzMzMzNjM1YWIyMDZiODdjZDJiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgpEYXRlOiBTYXQsIDcgTWF5IDIwMTEgMTU6MjU6NTEgLTA3MDAKU3ViamVjdDogW1BBVENI
IDAzLzEwXSBUZXh0dXJlTWFwcGVyIHNob3VsZG4ndCBkZXBlbmQgb24gT3BlbkdMLCBidXQgcmF0
aGVyIG9ubHkgYWxsb3cgdGhlIEdMCiBiYWNrZW5kIHdoZW4gT3BlbkdMIGlzIHByZXNlbnQuCgot
LS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgIHwgICAxNSArKysrKysrKysrKysrKysKIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpIHwgICAgOSArKysrKysrKy0KIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJvIHwgICAgMSAtCiAzIGZpbGVzIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKyks
IDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdlYzQxZmIuLjNhZDkwZmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTUsNiArNSwyMSBAQAogICAgICAgICBbVGV4bWFwXSBVcHN0cmVhbSB0ZXh0dXJlLW1h
cHBlciBjaGFuZ2VzIGZyb20gUXQncyBXZWJLaXQyIGJyYW5jaAogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA0MzkKIAorICAgICAgICBObyBuZXcgdGVz
dHMuIFRoaXMgaXMgYSBidWlsZCBmaXguCisKKyAgICAgICAgUGF0Y2ggMy8xMDogVGV4dHVyZU1h
cHBlciBzaG91bGRuJ3QgZGVwZW5kIG9uIE9wZW5HTCwgYnV0IHJhdGhlciBvbmx5IGFsbG93IHRo
ZSBHTCBiYWNrZW5kIHdoZW4KKyAgICAgICAgT3BlbkdMIGlzIHByZXNlbnQuCisKKyAgICAgICAg
KiBXZWJDb3JlLnByaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKworMjAxMS0wNS0wNyAgTm9h
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1RleG1hcF0gVXBzdHJlYW0gdGV4dHVy
ZS1tYXBwZXIgY2hhbmdlcyBmcm9tIFF0J3MgV2ViS2l0MiBicmFuY2gKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNDM5CisKICAgICAgICAgTm8gbmV3
IHRlc3RzLiBUZXN0cyBpbiBMYXlvdXRUZXN0cy9jb21wb3NpdGluZyBjb3ZlciB0aGlzLgogCiAg
ICAgICAgIFBhdGNoIDIvMTA6IEFkZCBhIGZldyBmdW5jdGlvbnMgdG8gdGhlIFRleHR1cmVNYXBw
ZXIgQVBJLCBhbGxvd2luZzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKaW5kZXggNjNlMzcyYy4uNzExYjk5NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5wcmkKQEAgLTI2OSwxMyArMjY5LDIwIEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9WSURFTz0xKSB7CiAgICAgfQogfQogCi1jb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9
MSl8Y29udGFpbnMoQ09ORklHLCB0ZXhtYXApIHsKK2NvbnRhaW5zKERFRklORVMsIEVOQUJMRV9X
RUJHTD0xKSB7CiAgICAgIWNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsKSB7CiAgICAgICAgIGVy
cm9yKCAiVGhpcyBjb25maWd1cmF0aW9uIG5lZWRzIGFuIE9wZW5HTCBlbmFibGVkIFF0LiBZb3Vy
IFF0IGlzIG1pc3NpbmcgT3BlbkdMLiIpCiAgICAgfQogICAgIFFUICo9IG9wZW5nbAogfQogCitj
b250YWlucyhDT05GSUcsIHRleG1hcCkgeworICAgIERFRklORVMgKz0gV1RGX1VTRV9URVhUVVJF
X01BUFBFUj0xCisgICAgY29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2wpIHsKKyAgICAgICAgUVQg
Kj0gb3BlbmdsCisgICAgfQorfQorCiAhQ09ORklHKHdlYmtpdC1kZWJ1Zyk6Q09ORklHKFFURElS
X2J1aWxkKSB7CiAgICAgIyBSZW1vdmUgdGhlIGZvbGxvd2luZyAyIGxpbmVzIGlmIHlvdSB3YW50
IGRlYnVnIGluZm9ybWF0aW9uIGluIFdlYkNvcmUKICAgICBDT05GSUcgLT0gc2VwYXJhdGVfZGVi
dWdfaW5mbwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBkNmZiMjUxLi5kOGE4YzZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
bwpAQCAtMzQ3OCw3ICszNDc4LDYgQEAgd2luMzI6IXdpbjMyLWcrKyo6Y29udGFpbnMoUU1BS0Vf
SE9TVC5hcmNoLCB4ODZfNjQpOnsKIH0KIAogY29udGFpbnMoQ09ORklHLCB0ZXhtYXApIHsKLSAg
ICBERUZJTkVTICs9IFdURl9VU0VfVEVYVFVSRV9NQVBQRVI9MQogICAgIEhFQURFUlMgKz0gXAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaCBcCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIFwK
LS0gCjEuNy4zLjMKCg==
</data>
<flag name="review"
          id="85721"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92710</attachid>
            <date>2011-05-07 19:09:22 -0700</date>
            <delta_ts>2011-05-07 20:16:43 -0700</delta_ts>
            <desc>Patch 4: Enable 3D in the build scripts and settings</desc>
            <filename>0004-Enable-3D-rendering-by-default-for-Qt.patch</filename>
            <type>text/plain</type>
            <size>3793</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSBlOGViYzE3MWRhMmE2YWJkNjdmNjRhZTc4YTJiNTcxNjc5MDlhYzJlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgpEYXRlOiBTYXQsIDcgTWF5IDIwMTEgMTU6MzA6MzMgLTA3MDAKU3ViamVjdDogW1BBVENI
IDA0LzEwXSBFbmFibGUgM0QgcmVuZGVyaW5nIGJ5IGRlZmF1bHQgZm9yIFF0CgotLS0KIFNvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAgfCAgICA3ICsrKysrKy0KIFNvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nICAgICAgICAgICAgfCAgIDEzICsrKysrKysrKysrKysKIFRvb2xz
L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICsrKysrKysrKysrCiBUb29s
cy9TY3JpcHRzL2J1aWxkLXdlYmtpdCAgICAgICAgICAgIHwgICAgMiArLQogNCBmaWxlcyBjaGFu
Z2VkLCAzMSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2Vic2V0dGluZ3MuY3BwCmluZGV4IDM2MDY3NjQuLmY0MWE1YmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYnNldHRpbmdzLmNwcApAQCAtMTcyLDEzICsxNzIsMTggQEAgdm9pZCBRV2ViU2V0dGlu
Z3NQcml2YXRlOjphcHBseSgpCiAgICAgICAgIHZhbHVlID0gYXR0cmlidXRlcy52YWx1ZShRV2Vi
U2V0dGluZ3M6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwtPmF0dHJpYnV0ZXMudmFsdWUoUVdlYlNldHRp
bmdzOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCkpOwogCi0gICAgICAgIHNldHRpbmdz
LT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh2YWx1ZSk7CisgICAgICAgIHNldHRp
bmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yM0RUcmFuc2Zvcm1zRW5hYmxlZCh0cnVl
KTsKKyAgICAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmltYXRp
b25FbmFibGVkKHRydWUpOworICAgICAgICBzZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0ZvclZpZGVvRW5hYmxlZCh0cnVlKTsKICNlbmRpZgogI2lmIEVOQUJMRShXRUJHTCkKICAg
ICAgICAgdmFsdWUgPSBhdHRyaWJ1dGVzLnZhbHVlKFFXZWJTZXR0aW5nczo6V2ViR0xFbmFibGVk
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLT5hdHRyaWJ1dGVzLnZh
bHVlKFFXZWJTZXR0aW5nczo6V2ViR0xFbmFibGVkKSk7CiAKICAgICAgICAgc2V0dGluZ3MtPnNl
dFdlYkdMRW5hYmxlZCh2YWx1ZSk7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
ICAgICAgICBzZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckNhbnZhc0VuYWJs
ZWQodHJ1ZSk7CisjZW5kaWYKICNlbmRpZgogCiAgICAgICAgIHZhbHVlID0gYXR0cmlidXRlcy52
YWx1ZShRV2ViU2V0dGluZ3M6Okh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZCwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cK
aW5kZXggMDI0YWMyMy4uNzU2MzRlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAor
MjAxMS0wNS0wNyAgTm9hbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1RleG1hcF0g
VXBzdHJlYW0gdGV4dHVyZS1tYXBwZXIgY2hhbmdlcyBmcm9tIFF0J3MgV2ViS2l0MiBicmFuY2gK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNDM5CisK
KyAgICAgICAgUGF0Y2ggNC8xMDogUGVyIGNoYW5nZXMgdG8gc2V0dGluZ3MgdG8gYWxsb3cgYmV0
dGVyIGdyYW51bGFyaXR5IGZvciBhY2NlbGVyYXRlZAorICAgICAgICBjb21wb3NpdGluZyBjaG9p
Y2VzLCB3ZSBuZWVkIHRvIHNldCB0aG9zZSBvcHRpb25zIGZvciBRdC4KKworICAgICAgICAqIEFw
aS9xd2Vic2V0dGluZ3MuY3BwOgorICAgICAgICAoUVdlYlNldHRpbmdzUHJpdmF0ZTo6YXBwbHkp
OgorCiAyMDExLTA1LTA2ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODA3ZmE3ZC4uM2UxMTgwNyAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisy
MDExLTA1LTA3ICBOb2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVGV4bWFwXSBV
cHN0cmVhbSB0ZXh0dXJlLW1hcHBlciBjaGFuZ2VzIGZyb20gUXQncyBXZWJLaXQyIGJyYW5jaAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA0MzkKKwor
ICAgICAgICBQYXRjaCA0LzEwOiBRdCBzaG91bGQgYnVpbGQgM0QgcmVuZGVyaW5nIGJ5IGRlZmF1
bHQuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDoKKwogMjAxMS0wNS0wNiAgRGF2
aWQgR3JvZ2FuICA8ZGdyb2dhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdCBiL1Rv
b2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CmluZGV4IGMyMjI3MmEuLjE1ZDYzZjMgMTAwNzU1Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CisrKyBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQt
d2Via2l0CkBAIC0xMzEsNyArMTMxLDcgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgICAgZGVmaW5l
ID0+ICJFTkFCTEVfV0VCR0wiLCBkZWZhdWx0ID0+IChpc0FwcGxlTWFjV2ViS2l0KCkgJiYgIWlz
VGlnZXIoKSAmJiAhaXNMZW9wYXJkKCkpLCB2YWx1ZSA9PiBcJHRocmVlRENhbnZhc1N1cHBvcnQg
fSwKIAogICAgIHsgb3B0aW9uID0+ICIzZC1yZW5kZXJpbmciLCBkZXNjID0+ICJUb2dnbGUgM0Qg
cmVuZGVyaW5nIHN1cHBvcnQiLAotICAgICAgZGVmaW5lID0+ICJFTkFCTEVfM0RfUkVOREVSSU5H
IiwgZGVmYXVsdCA9PiAoaXNBcHBsZU1hY1dlYktpdCgpICYmICFpc1RpZ2VyKCkpLCB2YWx1ZSA9
PiBcJHRocmVlRFJlbmRlcmluZ1N1cHBvcnQgfSwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFXzNE
X1JFTkRFUklORyIsIGRlZmF1bHQgPT4gKGlzQXBwbGVNYWNXZWJLaXQoKSAmJiAhaXNUaWdlcigp
KSB8fCBpc1F0KCksIHZhbHVlID0+IFwkdGhyZWVEUmVuZGVyaW5nU3VwcG9ydCB9LAogCiAgICAg
eyBvcHRpb24gPT4gImFjY2VsZXJhdGVkLTJkLWNhbnZhcyIsIGRlc2MgPT4gIlRvZ2dsZSBhY2Nl
bGVyYXRlZCAyRCBjYW52YXMgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9BQ0NF
TEVSQVRFRF8yRF9DQU5WQVMiLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkYWNjZWxlcmF0ZWQy
ZENhbnZhc1N1cHBvcnQgfSwKLS0gCjEuNy4zLjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92711</attachid>
            <date>2011-05-07 19:10:22 -0700</date>
            <delta_ts>2011-05-08 04:46:53 -0700</delta_ts>
            <desc>Patch 5: Qt backend changes</desc>
            <filename>0005-mplement-the-new-TextureMapper-functions-for-the-Qt-.patch</filename>
            <type>text/plain</type>
            <size>7441</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSAyOTZhNzI0MzY3ZjhiZTk4MWUyZmMwMGNjMTk1YmU0Mzc5YTVmODYwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgpEYXRlOiBTYXQsIDcgTWF5IDIwMTEgMTU6MzM6MzkgLTA3MDAKU3ViamVjdDogW1BBVENI
IDA1LzEwXSBtcGxlbWVudCB0aGUgbmV3IFRleHR1cmVNYXBwZXIgZnVuY3Rpb25zIGZvciB0aGUg
UXQgYmFja2VuZC4KIFRoaXMgYWxsb3cgbm9uLXJlY3Rhbmd1bGFyIGNsaXBwaW5nLCBzb21lIHN0
dWIgZnVuY3Rpb25zLCBhbmQgZ2V0dGluZyBhIHVuaXF1ZQogaWQgZm9yIGFuIGltYWdlLgoKLS0t
CiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MjYgKysrKysrKysrKysrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0
LmNwcCAgICAgICB8ICAgNDQgKysrKysrKysrKysrKysrKysrLS0KIC4uLi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oIHwgICAxMSArKysrLQogMyBmaWxlcyBj
aGFuZ2VkLCA3NCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAz
YWQ5MGZhLi4wNDkxNDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC01LDYgKzUsMzIgQEAKICAgICAgICAgW1Rl
eG1hcF0gVXBzdHJlYW0gdGV4dHVyZS1tYXBwZXIgY2hhbmdlcyBmcm9tIFF0J3MgV2ViS2l0MiBi
cmFuY2gKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYw
NDM5CiAKKyAgICAgICAgUGF0Y2ggNS8xMDogSW1wbGVtZW50IHRoZSBuZXcgVGV4dHVyZU1hcHBl
ciBmdW5jdGlvbnMgZm9yIHRoZSBRdCBiYWNrZW5kLgorICAgICAgICBUaGlzIGFsbG93IG5vbi1y
ZWN0YW5ndWxhciBjbGlwcGluZywgc29tZSBzdHViIGZ1bmN0aW9ucywgYW5kIGdldHRpbmcgYSB1
bmlxdWUKKyAgICAgICAgaWQgZm9yIGFuIGltYWdlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
VGVzdHMgaW4gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcgY292ZXIgdGhpcy4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyUXQ6OmJlZ2luQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyUXQ6OmVuZENsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0
Ojp2aWV3cG9ydFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0OjpzZXRH
cmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0OjpncmFw
aGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0OjpkcmF3VGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUXQ6OmJlZ2luUGFpbnRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclF0OjplbmRQYWludGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlclF0OjpiZWdpblBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OnVpZEZvckltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaDoKKworMjAxMS0wNS0wNyAgTm9hbSBSb3NlbnRoYWwg
IDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW1RleG1hcF0gVXBzdHJlYW0gdGV4dHVyZS1tYXBwZXIgY2hh
bmdlcyBmcm9tIFF0J3MgV2ViS2l0MiBicmFuY2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNDM5CisKICAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlz
IGlzIGEgYnVpbGQgZml4LgogCiAgICAgICAgIFBhdGNoIDMvMTA6IFRleHR1cmVNYXBwZXIgc2hv
dWxkbid0IGRlcGVuZCBvbiBPcGVuR0wsIGJ1dCByYXRoZXIgb25seSBhbGxvdyB0aGUgR0wgYmFj
a2VuZCB3aGVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9UZXh0dXJlTWFwcGVyUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvVGV4dHVyZU1hcHBlclF0LmNwcAppbmRleCA2ZmRkN2RmLi43MDM0ZGNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJR
dC5jcHAKQEAgLTk4LDEyICs5OCwyOCBAQCB2b2lkIEJpdG1hcFRleHR1cmVRdDo6dW5wYWNrKCkK
ICAgICBtX2ltYWdlID0gUUltYWdlKCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlclF0OjpzZXRD
bGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFRleHR1cmVNYXBwZXJRdDo6YmVnaW5DbGlw
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKICAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBtX2N1cnJlbnRTdXJmYWNlID8gJm1fY3Vy
cmVudFN1cmZhY2UtPm1fcGFpbnRlciA6IG1fcGFpbnRlcjsKKyAgICAgcGFpbnRlci0+c2F2ZSgp
OworICAgICBRVHJhbnNmb3JtIHByZXZUcmFuc2Zvcm0gPSBwYWludGVyLT50cmFuc2Zvcm0oKTsK
KyAgICAgcGFpbnRlci0+c2V0VHJhbnNmb3JtKG1hdHJpeCwgZmFsc2UpOwogICAgICBwYWludGVy
LT5zZXRDbGlwUmVjdChyZWN0KTsKKyAgICAgcGFpbnRlci0+c2V0VHJhbnNmb3JtKHByZXZUcmFu
c2Zvcm0sIGZhbHNlKTsKIH0KIAordm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmVuZENsaXAoKQorewor
ICAgIFFQYWludGVyKiBwYWludGVyID0gbV9jdXJyZW50U3VyZmFjZSA/ICZtX2N1cnJlbnRTdXJm
YWNlLT5tX3BhaW50ZXIgOiBtX3BhaW50ZXI7CisgICAgcGFpbnRlci0+cmVzdG9yZSgpOworfQor
CitJbnRTaXplIFRleHR1cmVNYXBwZXJRdDo6dmlld3BvcnRTaXplKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gSW50U2l6ZShtX3BhaW50ZXItPmRldmljZSgpLT53aWR0aCgpLCBtX3BhaW50ZXItPmRl
dmljZSgpLT5oZWlnaHQoKSk7Cit9CisKKwogVGV4dHVyZU1hcHBlclF0OjpUZXh0dXJlTWFwcGVy
UXQoKQogICAgIDogbV9jdXJyZW50U3VyZmFjZSgwKQogewpAQCAtMTExLDEwICsxMjcsMTYgQEAg
VGV4dHVyZU1hcHBlclF0OjpUZXh0dXJlTWFwcGVyUXQoKQogCiB2b2lkIFRleHR1cmVNYXBwZXJR
dDo6c2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKIHsKKyAgICBt
X2NvbnRleHQgPSBjb250ZXh0OwogICAgIG1fcGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOwogICAgIGluaXRpYWxpemUobV9wYWludGVyKTsKIH0KIAorR3JhcGhpY3NDb250ZXh0
KiBUZXh0dXJlTWFwcGVyUXQ6OmdyYXBoaWNzQ29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fY29u
dGV4dDsKK30KKwogdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmJpbmRTdXJmYWNlKEJpdG1hcFRleHR1
cmUqIHN1cmZhY2UpCiB7CiAgICAgaWYgKG1fY3VycmVudFN1cmZhY2UgPT0gc3VyZmFjZSkKQEAg
LTEzMiw3ICsxNTQsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJRdDo6YmluZFN1cmZhY2UoQml0bWFw
VGV4dHVyZSogc3VyZmFjZSkKIH0KIAogCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6ZHJhd1RleHR1
cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29u
c3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCit2b2lkIFRleHR1cmVNYXBwZXJRdDo6ZHJh
d1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFj
aXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKIHsKICAgICBjb25zdCBCaXRt
YXBUZXh0dXJlUXQmIHRleHR1cmVRdCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVR
dCY+KHRleHR1cmUpOwogICAgIFFQYWludGVyKiBwYWludGVyID0gbV9wYWludGVyOwpAQCAtMTU3
LDcgKzE3OSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlclF0OjpkcmF3VGV4dHVyZShjb25zdCBCaXRt
YXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0CiAgICAgY29uc3QgUVRyYW5zZm9y
bSBwcmV2VHJhbnNmb3JtID0gcGFpbnRlci0+dHJhbnNmb3JtKCk7CiAgICAgcGFpbnRlci0+c2V0
T3BhY2l0eShvcGFjaXR5KTsKICAgICBwYWludGVyLT5zZXRUcmFuc2Zvcm0obWF0cml4LCB0cnVl
KTsKLSAgICBwYWludGVyLT5kcmF3UGl4bWFwKHRhcmdldFJlY3QsIHBpeG1hcCwgdGV4dHVyZVF0
LnNvdXJjZVJlY3QoKSk7CisgICAgcGFpbnRlci0+ZHJhd1BpeG1hcCh0YXJnZXRSZWN0LCBwaXht
YXAsIEZsb2F0UmVjdCh0ZXh0dXJlUXQuc291cmNlUmVjdCgpKSk7CiAgICAgcGFpbnRlci0+c2V0
VHJhbnNmb3JtKHByZXZUcmFuc2Zvcm0pOwogICAgIHBhaW50ZXItPnNldE9wYWNpdHkocHJldk9w
YWNpdHkpOwogfQpAQCAtMTgyLDEzICsyMDQsMjMgQEAgQml0bWFwVGV4dHVyZVF0OjpCaXRtYXBU
ZXh0dXJlUXQoKQogCiB9CiAKK3ZvaWQgVGV4dHVyZU1hcHBlclF0OjpiZWdpblBhaW50aW5nKCkK
K3sKKyAgICBtX3BhaW50ZXItPnNhdmUoKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmVu
ZFBhaW50aW5nKCkKK3sKKyAgICBtX3BhaW50ZXItPnJlc3RvcmUoKTsKK30KKwogI2lmZGVmIFFU
X09QRU5HTF9MSUIKIGNsYXNzIFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyUXQgOiBwdWJsaWMg
UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCBv
cGFxdWUpCiAgICAgewogICAgICAgICAvLyBtX2ltYWdlIGlzIG9ubHkgdXNpbmcgZHVyaW5nIHBh
aW50LCBpdCdzIHNhZmUgdG8gb3ZlcnJpZGUgaXQuCi0gICAgICAgIG1faW1hZ2UgPSBRSW1hZ2Uo
cmVjdC5zaXplKCkud2lkdGgoKSwgcmVjdC5zaXplKCkuaGVpZ2h0KCksIFFJbWFnZTo6Rm9ybWF0
X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKKyAgICAgICAgbV9pbWFnZSA9IFFJbWFnZShyZWN0LnNp
emUoKS53aWR0aCgpLCByZWN0LnNpemUoKS5oZWlnaHQoKSwgb3BhcXVlID8gUUltYWdlOjpGb3Jt
YXRfUkdCMzIgOiBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7CiAgICAgICAg
IGlmICghb3BhcXVlKQogICAgICAgICAgICAgbV9pbWFnZS5maWxsKDApOwogICAgICAgICBtX3Bh
aW50ZXIuYmVnaW4oJm1faW1hZ2UpOwpAQCAtMjEwLDUgKzI0Miw5IEBAIFBhc3NSZWZQdHI8UkdC
QTMyUHJlbXVsdGltcGxpZWRCdWZmZXI+IFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyOjpjcmVh
dGUoKQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgUkdCQTMyUHJlbXVsdGltcGxpZWRCdWZmZXJR
dCgpKTsKIH0KIAordWludDY0X3QgdWlkRm9ySW1hZ2UoSW1hZ2UqIGltYWdlKQoreworICAgIHJl
dHVybiBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKS0+c2VyaWFsTnVtYmVyKCk7
Cit9CiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oCmluZGV4IGUxN2I5NjguLjJkNTNjYTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJR
dC5oCkBAIC01MywxMiArNTMsMTcgQEAgY2xhc3MgVGV4dHVyZU1hcHBlclF0IDogcHVibGljIFRl
eHR1cmVNYXBwZXIgewogcHVibGljOgogICAgIFRleHR1cmVNYXBwZXJRdCgpOwogCi0gICAgdmly
dHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0
IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgs
IGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFj
aXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CiAgICAgdmlydHVhbCB2b2lk
IGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRDbGlwKGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2
b2lkIGVuZENsaXAoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBo
aWNzQ29udGV4dCopOworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRl
eHQoKTsKICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0
ZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIEludFNpemUgdmlld3BvcnRTaXplKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kUGFp
bnRpbmcoKTsKIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoUVBhaW50ZXIqIHBhaW50ZXIp
CiAgICAgewpAQCAtNjYsOSArNzEsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIFBh
c3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gY3JlYXRlKCkgeyByZXR1cm4gbmV3IFRleHR1cmVNYXBw
ZXJRdDsgfQotCiBwcml2YXRlOgogICAgIFFQYWludGVyKiBtX3BhaW50ZXI7CisgICAgR3JhcGhp
Y3NDb250ZXh0KiBtX2NvbnRleHQ7CiAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmVRdD4gbV9jdXJy
ZW50U3VyZmFjZTsKIH07CiAKLS0gCjEuNy4zLjMKCg==
</data>
<flag name="review"
          id="85723"
          type_id="1"
          status="+"
          setter="kenneth"
    />
    <flag name="commit-queue"
          id="85730"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92712</attachid>
            <date>2011-05-07 19:11:14 -0700</date>
            <delta_ts>2011-05-08 04:49:04 -0700</delta_ts>
            <desc>Patch 6: Media player changes</desc>
            <filename>0006-Allow-the-Qt-media-player-implementation-to-paint-in.patch</filename>
            <type>text/plain</type>
            <size>7356</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSAxNzRmY2I2MmNhZjdlZWMyYjcyMjI3ZGUxM2NiNGUzMjEwZjk1YzQyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgpEYXRlOiBTYXQsIDcgTWF5IDIwMTEgMTU6Mzc6MTMgLTA3MDAKU3ViamVjdDogW1BBVENI
IDA2LzEwXSBBbGxvdyB0aGUgUXQgbWVkaWEgcGxheWVyIGltcGxlbWVudGF0aW9uIHRvIHBhaW50
IGludG8gYSBUZXh0dXJlTWFwcGVyLCB0byBhbGxvdyB2aWRlb3MgdG8gYmUgY29tcG9zaXRlZC4K
Ci0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDE5ICsrKysrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0
ZVF0LmNwcCAgfCAgIDY4ICsrKysrLS0tLS0tLS0tLS0tLS0tCiAuLi4vcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCAgICB8ICAgMjQgKysrKystLQogMyBmaWxlcyBj
aGFuZ2VkLCA1MiBpbnNlcnRpb25zKCspLCA1OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDQ5MTQ3ZC4uZWMxMTU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDI1IEBACiAgICAgICAgIFtU
ZXhtYXBdIFVwc3RyZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5nZXMgZnJvbSBRdCdzIFdlYktpdDIg
YnJhbmNoCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
MDQzOQogCisgICAgICAgIFBhdGNoIDYvMTA6IEFsbG93IHRoZSBRdCBtZWRpYSBwbGF5ZXIgaW1w
bGVtZW50YXRpb24gdG8gcGFpbnQgaW50byBhIFRleHR1cmVNYXBwZXIsCisgICAgICAgIHRvIGFs
bG93IHZpZGVvcyB0byBiZSBjb21wb3NpdGVkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGVz
dHMgaW4gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcgY292ZXIgdGhpcy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVF0OjpyZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZVF0OjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVF0OjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRdDo6cGxhdGZvcm1M
YXllcik6CisKKzIwMTEtMDUtMDcgIE5vYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtUZXhtYXBdIFVwc3RyZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5nZXMgZnJvbSBRdCdzIFdlYktp
dDIgYnJhbmNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02MDQzOQorCiAgICAgICAgIFBhdGNoIDUvMTA6IEltcGxlbWVudCB0aGUgbmV3IFRleHR1cmVN
YXBwZXIgZnVuY3Rpb25zIGZvciB0aGUgUXQgYmFja2VuZC4KICAgICAgICAgVGhpcyBhbGxvdyBu
b24tcmVjdGFuZ3VsYXIgY2xpcHBpbmcsIHNvbWUgc3R1YiBmdW5jdGlvbnMsIGFuZCBnZXR0aW5n
IGEgdW5pcXVlCiAgICAgICAgIGlkIGZvciBhbiBpbWFnZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNw
cAppbmRleCBlN2VmZGY5Li45MWEzZWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCkBAIC0y
Miw2ICsyMiw3IEBACiAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiSFRNTE1l
ZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKICNpbmNsdWRlICJO
ZXR3b3JraW5nQ29udGV4dC5oIgpAQCAtNTAsOCArNTEsOCBAQAogI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCi0jaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllci5oIgorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyLmgiCiAjZW5kaWYKIAogdXNp
bmcgbmFtZXNwYWNlIFdURjsKQEAgLTYwMyw1OCArNjA0LDIzIEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUXQ6OnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnJlcGFpbnQoKQogewogICAgIG1fd2Vi
Q29yZVBsYXllci0+cmVwYWludCgpOwotfQogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0KLWNsYXNzIFRleHR1cmVNYXBwZXJWaWRlb0xh
eWVyUXQgOiBwdWJsaWMgdmlydHVhbCBUZXh0dXJlTWFwcGVyTWVkaWFMYXllciB7Ci1wdWJsaWM6
Ci0gICAgVGV4dHVyZU1hcHBlclZpZGVvTGF5ZXJRdChRR3JhcGhpY3NWaWRlb0l0ZW0qIHZpZGVv
SXRlbSkKLSAgICAgICAgOiBtX3ZpZGVvSXRlbSh2aWRlb0l0ZW0pCi0gICAgewotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KFRleHR1cmVNYXBwZXJMYXll
ckNsaWVudCogY2xpZW50KQotICAgIHsKLSAgICAgICAgbV9jbGllbnQgPSBjbGllbnQ7Ci0gICAg
fQotCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLSAg
ICB7Ci0gICAgICAgIGlmICghbV92aWRlb0l0ZW0pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgUVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVtIG9wdDsKLSAgICAgICAgb3B0LmV4cG9zZWRS
ZWN0ID0gbV92aWRlb0l0ZW0uZGF0YSgpLT5zY2VuZUJvdW5kaW5nUmVjdCgpOwotICAgICAgICBv
cHQucmVjdCA9IG9wdC5leHBvc2VkUmVjdC50b1JlY3QoKTsKLSAgICAgICAgbV92aWRlb0l0ZW0u
ZGF0YSgpLT5wYWludChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgJm9wdCk7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fdmlkZW9JdGVtID8gSW50U2l6ZShtX3ZpZGVvSXRlbS5kYXRhKCktPnNpemUoKS53aWR0aCgp
LCBtX3ZpZGVvSXRlbS5kYXRhKCktPnNpemUoKS5oZWlnaHQoKSkgOiBJbnRTaXplKCk7Ci0gICAg
fQotCi0gICAgUVdlYWtQb2ludGVyPFFHcmFwaGljc1ZpZGVvSXRlbT4gbV92aWRlb0l0ZW07Ci0g
ICAgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50KiBtX2NsaWVudDsKLX07Ci0KLQotdm9pZCBNZWRp
YVBsYXllclByaXZhdGVRdDo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKQotewot
ICAgIE1lZGlhUGxheWVyQ2xpZW50KiBjbGllbnQgPSBtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxh
eWVyQ2xpZW50KCk7Ci0gICAgYm9vbCBjb21wb3NpdGVkID0gY2xpZW50LT5tZWRpYVBsYXllclJl
bmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQobV93ZWJDb3JlUGxheWVyKTsKLSAgICBpZiAoY29tcG9z
aXRlZCA9PSBtX2NvbXBvc2l0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29tcG9zaXRl
ZCA9IGNvbXBvc2l0ZWQ7Ci0gICAgaWYgKGNvbXBvc2l0ZWQpCi0gICAgICAgIG1fcGxhdGZvcm1M
YXllciA9IG5ldyBUZXh0dXJlTWFwcGVyVmlkZW9MYXllclF0KG1fdmlkZW9JdGVtKTsKIH0KIAot
UGxhdGZvcm1MYXllciogTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnBsYXRmb3JtTGF5ZXIoKSBjb25z
dAotewotICAgIHJldHVybiBtX2NvbXBvc2l0ZWQgPyBtX3BsYXRmb3JtTGF5ZXIuZ2V0KCkgOiAw
OworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVS
KQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlciogdGV4dHVyZU1hcHBlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBvcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0bWFwVGV4dHVy
ZSopIGNvbnN0Cit7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHRleHR1cmVN
YXBwZXItPmdyYXBoaWNzQ29udGV4dCgpOworICAgICAgICBRUGFpbnRlciogcGFpbnRlciA9IGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgICAgICBwYWludGVyLT5zYXZlKCk7CisgICAg
ICAgIHBhaW50ZXItPnNldFRyYW5zZm9ybShtYXRyaXgpOworICAgICAgICBwYWludGVyLT5zZXRP
cGFjaXR5KG9wYWNpdHkpOworICAgICAgICBtX3ZpZGVvU2NlbmUtPnJlbmRlcihwYWludGVyLCBR
UmVjdEYodGFyZ2V0UmVjdCksIG1fdmlkZW9JdGVtLT5zY2VuZUJvdW5kaW5nUmVjdCgpKTsKKyAg
ICAgICAgcGFpbnRlci0+cmVzdG9yZSgpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5o
CmluZGV4IGM2Mzk4YzkuLjJkZGM4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaApAQCAtMzEsMTEg
KzMxLDE3IEBAIGNsYXNzIFFHcmFwaGljc1ZpZGVvSXRlbTsKIGNsYXNzIFFHcmFwaGljc1NjZW5l
OwogUVRfRU5EX05BTUVTUEFDRQogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlci5oIgorI2VuZGlmCiAKLWNsYXNzIFRleHR1cmVNYXBwZXJNZWRpYUxheWVyOwor
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBNZWRpYVBsYXllclByaXZhdGVRdCA6IHB1Ymxp
YyBRT2JqZWN0LCBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKK2NsYXNzIE1l
ZGlhUGxheWVyUHJpdmF0ZVF0IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBNZWRpYVBsYXllclBy
aXZhdGVJbnRlcmZhY2UKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShU
RVhUVVJFX01BUFBFUikKKyAgICAgICAgLCBwdWJsaWMgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXIKKyNlbmRpZgorewogCiAgICAgUV9PQkpFQ1QKIApAQCAtOTksOSArMTA1LDE0IEBAIHB1Ymxp
YzoKICAgICAvLyB3aGV0aGVyIGFjY2VsZXJhdGVkIHJlbmRlcmluZyBpcyBzdXBwb3J0ZWQgYnkg
dGhlIG1lZGlhIGVuZ2luZSBmb3IgdGhlIGN1cnJlbnQgbWVkaWEuCiAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAg
ICAgLy8gY2FsbGVkIHdoZW4gdGhlIHJlbmRlcmluZyBzeXN0ZW0gZmxpcHMgdGhlIGludG8gb3Ig
b3V0IG9mIGFjY2VsZXJhdGVkIHJlbmRlcmluZyBtb2RlLgotICAgIHZpcnR1YWwgdm9pZCBhY2Nl
bGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCBhY2NlbGVy
YXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpIHsgfQogICAgIC8vIHJldHVybnMgYW4gb2JqZWN0
IHRoYXQgY2FuIGJlIGRpcmVjdGx5IGNvbXBvc2l0ZWQgdmlhIEdyYXBoaWNzTGF5ZXJRdCAoZXNz
ZW50aWFsbHkgYSBRR3JhcGhpY3NJdGVtKikKLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllcio+KHRoaXMpOyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFw
cGVyKFRleHR1cmVNYXBwZXIqLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJl
Y3QmIHRhcmdldFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiwKKyAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3BhY2l0eSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgQml0bWFwVGV4dHVyZSogbWFzaykgY29uc3Q7CiAjZWxzZQogICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNo
YW5nZWQoKSB7IH0KQEAgLTEzOCw5ICsxNDksNiBAQCBwcml2YXRlOgogICAgIFFNZWRpYVBsYXll
ckNvbnRyb2wqIG1fbWVkaWFQbGF5ZXJDb250cm9sOwogICAgIFFHcmFwaGljc1ZpZGVvSXRlbSog
bV92aWRlb0l0ZW07CiAgICAgUUdyYXBoaWNzU2NlbmUqIG1fdmlkZW9TY2VuZTsKLSNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICBPd25Q
dHI8VGV4dHVyZU1hcHBlck1lZGlhTGF5ZXI+IG1fcGxhdGZvcm1MYXllcjsKLSNlbmRpZgogCiAg
ICAgbXV0YWJsZSBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOwogICAg
IG11dGFibGUgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwotLSAKMS43LjMu
MwoK
</data>
<flag name="review"
          id="85724"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92713</attachid>
            <date>2011-05-07 19:11:41 -0700</date>
            <delta_ts>2011-05-08 04:55:21 -0700</delta_ts>
            <desc>Patch 7: WebGL changes</desc>
            <filename>0007-Allow-a-3D-context-WebGL-to-paint-itself-into-a-Text.patch</filename>
            <type>text/plain</type>
            <size>6889</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSBjNjg2ZGU2OGYwMzczMjk4ZTM1OTVjZGE1MWFlMGQ5ZTJkMTY5ZGVjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgpEYXRlOiBTYXQsIDcgTWF5IDIwMTEgMTg6MjA6MzEgLTA3MDAKU3ViamVjdDogW1BBVENI
IDA3LzEwXSBBbGxvdyBhIDNELWNvbnRleHQgKFdlYkdMKSB0byBwYWludCBpdHNlbGYgaW50byBh
IFRleHR1cmVNYXBwZXIuIFRoaXMgYWxsb3dzIHVzaW5nIGEgV2ViR0wgY2FudmFzIHdpdGggQ1NT
LgoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgMTcgKysrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNE
UXQuY3BwICAgfCAgIDg5ICsrKysrKysrKysrKysrKysrKy0tCiAyIGZpbGVzIGNoYW5nZWQsIDEw
MCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYzExNTRjLi45
ZGU1ZDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC01LDYgKzUsMjMgQEAKICAgICAgICAgW1RleG1hcF0gVXBz
dHJlYW0gdGV4dHVyZS1tYXBwZXIgY2hhbmdlcyBmcm9tIFF0J3MgV2ViS2l0MiBicmFuY2gKICAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNDM5CiAKKyAg
ICAgICAgUGF0Y2ggNy8xMDogQWxsb3cgYSAzRC1jb250ZXh0IChXZWJHTCkgdG8gcGFpbnQgaXRz
ZWxmIGludG8gYSBUZXh0dXJlTWFwcGVyLgorICAgICAgICBUaGlzIGFsbG93cyB1c2luZyBhIFdl
YkdMIGNhbnZhcyB3aXRoIENTUy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3RzIGluIExh
eW91dFRlc3RzL2NvbXBvc2l0aW5nIGNvdmVyIHRoaXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJvdW5kaW5nUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludCk6CisKKzIwMTEt
MDUtMDcgIE5vYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFVwc3Ry
ZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5nZXMgZnJvbSBRdCdzIFdlYktpdDIgYnJhbmNoCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDQzOQorCiAgICAg
ICAgIFBhdGNoIDYvMTA6IEFsbG93IHRoZSBRdCBtZWRpYSBwbGF5ZXIgaW1wbGVtZW50YXRpb24g
dG8gcGFpbnQgaW50byBhIFRleHR1cmVNYXBwZXIsCiAgICAgICAgIHRvIGFsbG93IHZpZGVvcyB0
byBiZSBjb21wb3NpdGVkLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCmluZGV4IGU1OGYwNjEuLjE0
ZTIyYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dDNEUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCkBAIC0zOCw2ICszOCwxMCBAQAogI2luY2x1
ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQor
I2luY2x1ZGUgPG9wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaD4KKyNlbmRpZgorCiAjaWYgRU5BQkxF
KFdFQkdMKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNTMsNyArMTU3LDE1IEBAIHR5cGVk
ZWYgdm9pZCAoQVBJRU5UUlkqIGdsVmVydGV4QXR0cmliNGZUeXBlKSAoR0x1aW50LCBjb25zdCBH
TGZsb2F0LCBjb25zdCBHTGZsCiB0eXBlZGVmIHZvaWQgKEFQSUVOVFJZKiBnbFZlcnRleEF0dHJp
YjRmdlR5cGUpIChHTHVpbnQsIGNvbnN0IEdMZmxvYXQqKTsKIHR5cGVkZWYgdm9pZCAoQVBJRU5U
UlkqIGdsVmVydGV4QXR0cmliUG9pbnRlclR5cGUpIChHTHVpbnQsIEdMaW50LCBHTGVudW0sIEdM
Ym9vbGVhbiwgR0xzaXplaSwgY29uc3QgR0x2b2lkKik7CiAKLWNsYXNzIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwgOiBwdWJsaWMgUUdyYXBoaWNzT2JqZWN0IHsKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWwKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSKQorICAgICAgICA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllcgorI2Vsc2UKKyAgICAgICAgOiBwdWJsaWMgUUdyYXBoaWNzT2JqZWN0CisjZW5kaWYKKyNl
bmRpZgorewogcHVibGljOgogICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpOwogICAg
IH5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCk7CkBAIC0xNjIsNiArMTc0LDE0IEBAIHB1Ymxp
YzoKIAogICAgIFFHTFdpZGdldCogZ2V0Vmlld3BvcnRHTFdpZGdldCgpOwogICAgIHZvaWQgcmVz
aGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4
dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiwKKyAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3BhY2l0eSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgQml0bWFwVGV4dHVyZSogbWFzaykgY29uc3Q7CisjZW5kaWYK
KwogICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVPcHRpb25HcmFwaGljc0l0
ZW0qLCBRV2lkZ2V0Kik7CiAgICAgUVJlY3RGIGJvdW5kaW5nUmVjdCgpIGNvbnN0OwogCkBAIC01
MzIsNiArNTUyLDY1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVzaGFwZShp
bnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZ2xGbHVzaCgpOwogfQogCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRl
eHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykg
Y29uc3QKK3sKKyAgICBpZiAodGV4dHVyZU1hcHBlci0+aXNPcGVuR0xCYWNrZWQoKSkgeworICAg
ICAgICBUZXh0dXJlTWFwcGVyR0wqIHRleG1hcEdMID0gc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBl
ckdMKj4odGV4dHVyZU1hcHBlcik7CisgICAgICAgIHRleG1hcEdMLT5kcmF3VGV4dHVyZShtX3Rl
eHR1cmUsICFtX2F0dHJzLmFscGhhLCBGbG9hdFNpemUoMSwgMSksIHRhcmdldFJlY3QsIG1hdHJp
eCwgb3BhY2l0eSwgbWFzaywgdHJ1ZSAvKiBmbGlwICovKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHRleHR1cmVNYXBwZXItPmdyYXBo
aWNzQ29udGV4dCgpOworICAgIFFQYWludGVyKiBwYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCk7CisgICAgcGFpbnRlci0+c2F2ZSgpOworICAgIHBhaW50ZXItPnNldFRyYW5zZm9y
bShtYXRyaXgpOworICAgIHBhaW50ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7CisKKyAgICAvLyBB
bHRlcm5hdGl2ZWx5IHJlYWQgcGl4ZWxzIHRvIGEgbWVtb3J5IGJ1ZmZlci4KKyAgICBRSW1hZ2Ug
b2Zmc2NyZWVuSW1hZ2UobV9ib3VuZGluZ1JlY3Qud2lkdGgoKSwgbV9ib3VuZGluZ1JlY3QuaGVp
Z2h0KCksIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CisgICAgcXVpbnQzMiogaW1hZ2VQaXhlbHMg
PSByZWludGVycHJldF9jYXN0PHF1aW50MzIqPihvZmZzY3JlZW5JbWFnZS5iaXRzKCkpOworCisg
ICAgbV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKKyAgICBiaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2NhbnZhc0Zibyk7CisgICAgZ2xSZWFkUGl4ZWxz
KC8qIHggKi8gMCwgLyogeSAqLyAwLCBtX2JvdW5kaW5nUmVjdC53aWR0aCgpLCBtX2JvdW5kaW5n
UmVjdC5oZWlnaHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCBpbWFnZVBpeGVscyk7CisKKyAgICBiaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2N1cnJlbnRGYm8pOworCisgICAgLy8gT3Bl
bkdMIGdpdmVzIHVzIEFCR1Igb24gMzIgYml0cywgYW5kIHdpdGggdGhlIG9yaWdpbiBhdCB0aGUg
Ym90dG9tIGxlZnQKKyAgICAvLyBXZSBuZWVkIFJHQjMyIG9yIEFSR0IzMl9QTSwgd2l0aCB0aGUg
b3JpZ2luIGF0IHRoZSB0b3AgbGVmdC4KKyAgICBxdWludDMyKiBwaXhlbHNTcmMgPSBpbWFnZVBp
eGVsczsKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihtX2JvdW5kaW5n
UmVjdC5oZWlnaHQoKSk7CisgICAgY29uc3QgaW50IHdpZHRoID0gc3RhdGljX2Nhc3Q8aW50Piht
X2JvdW5kaW5nUmVjdC53aWR0aCgpKTsKKyAgICBjb25zdCBpbnQgaGFsZkhlaWdodCA9IGhlaWdo
dCAvIDI7CisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGFsZkhlaWdodDsgKytyb3cpIHsK
KyAgICAgICAgY29uc3QgaW50IHRhcmdldElkeCA9IChoZWlnaHQgLSAxIC0gcm93KSAqIHdpZHRo
OworICAgICAgICBxdWludDMyKiBwaXhlbHNEc3QgPSBpbWFnZVBpeGVscyArIHRhcmdldElkeDsK
KyAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgd2lkdGg7ICsrY29sdW1uKSB7
CisgICAgICAgICAgICBxdWludDMyIHRlbXBQaXhlbCA9ICpwaXhlbHNTcmM7CisgICAgICAgICAg
ICAqcGl4ZWxzU3JjID0gc3dhcEJnclRvUmdiKCpwaXhlbHNEc3QpOworICAgICAgICAgICAgKnBp
eGVsc0RzdCA9IHN3YXBCZ3JUb1JnYih0ZW1wUGl4ZWwpOworICAgICAgICAgICAgKytwaXhlbHNT
cmM7CisgICAgICAgICAgICArK3BpeGVsc0RzdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAo
c3RhdGljX2Nhc3Q8aW50PihoZWlnaHQpICUgMikgeworICAgICAgICBmb3IgKGludCBjb2x1bW4g
PSAwOyBjb2x1bW4gPCB3aWR0aDsgKytjb2x1bW4pIHsKKyAgICAgICAgICAgICpwaXhlbHNTcmMg
PSBzd2FwQmdyVG9SZ2IoKnBpeGVsc1NyYyk7CisgICAgICAgICAgICArK3BpeGVsc1NyYzsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHBhaW50ZXItPmRyYXdJbWFnZSh0YXJnZXRSZWN0LCBvZmZz
Y3JlZW5JbWFnZSk7CisgICAgcGFpbnRlci0+cmVzdG9yZSgpOworfQorI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKworUVJlY3RGIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OmJvdW5kaW5nUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYm91bmRpbmdSZWN0Owor
fQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50KFFQYWludGVyKiBwYWlu
dGVyLCBjb25zdCBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZW0qIG9wdGlvbiwgUVdpZGdldCogd2lk
Z2V0KQogewogICAgIFFfVU5VU0VEKHdpZGdldCk7CkBAIC01NzksMTIgKzY1OCw4IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0
IFFTdHlsZU9wdGlvbkdyYXBoCiAgICAgICAgICAgICArK3BpeGVsc1NyYzsKICAgICAgICAgfQog
ICAgIH0KLSAgICBwYWludGVyLT5kcmF3SW1hZ2UoLyogeCAqLyAwLCAvKiB5ICovIDAsIG9mZnNj
cmVlbkltYWdlKTsKLX0KIAotUVJlY3RGIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJvdW5k
aW5nUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYm91bmRpbmdSZWN0OworICAgIHBhaW50
ZXItPmRyYXdJbWFnZSgvKiB4ICovIDAsIC8qIHkgKi8gMCwgb2Zmc2NyZWVuSW1hZ2UpOwogfQog
CiB2b2lkKiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRQcm9jQWRkcmVzcyhjb25zdCBT
dHJpbmcmIHByb2MpCkBAIC02MzQsMTAgKzcwOSwxMiBAQCBQbGF0Zm9ybTNET2JqZWN0IEdyYXBo
aWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAogICAgIHJldHVybiBtX2ludGVy
bmFsLT5tX3RleHR1cmU7CiB9CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBQ
bGF0Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1faW50ZXJuYWwuZ2V0KCk7CiB9CisjZW5kaWYKIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKLS0gCjEuNy4zLjMKCg==
</data>
<flag name="review"
          id="85725"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92714</attachid>
            <date>2011-05-07 19:12:11 -0700</date>
            <delta_ts>2011-05-08 09:15:32 -0700</delta_ts>
            <desc>Patch 8: GL backend</desc>
            <filename>0008-Changes-to-the-GL-backend-of-TextureMapper.-The-code.patch</filename>
            <type>text/plain</type>
            <size>39397</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSAzMTUzYWYyNzY0ZDYyZTFhM2E4MDY0ZDU1ZDc3YmExNjUzNGI0NGExIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgpEYXRlOiBTYXQsIDcgTWF5IDIwMTEgMTg6Mjk6NDIgLTA3MDAKU3ViamVjdDogW1BBVENI
IDA4LzEwXSBDaGFuZ2VzIHRvIHRoZSBHTCBiYWNrZW5kIG9mIFRleHR1cmVNYXBwZXIuIFRoZSBj
b2RlIGZvciB0aGVzZSBjaGFuZ2VzIGlzCiBpbnRlcnR3aW5lZCBzbyBpdCB3YXMgaGFyZCB0byBz
ZXBhcmF0ZSB0aGVtIHRvIGRpZmZlcmVudCBwYXRjaGVzLgogVGhpcyBpcyB0aGUgc3VtbWFyeSBv
ZiB3aGF0IHRoZSBjaGFuZ2VzIGRvOgoKICAgICAgICAxLiBVc2Ugc3RlbmNpbCBmb3IgY2xpcHBp
bmcgaW5zdGVhZCBvZiBzY2lzc29ycywgcmVmYWN0b3IgYmVnaW5DbGlwLwogICAgICAgICAgIGVu
ZENsaXAgZnVuY3Rpb25zIHRvIGFjY29tb2RhdGUgdGhhdC4KICAgICAgICAyLiBHZXQgcmlkIG9m
IHRoZSAiVGFyZ2V0IiBwcm9ncmFtIHdoaWNoIGZvcmNlZCBhbiBpbnRlcm1lZGlhdGUKICAgICAg
ICAgICBmcmFtZWJ1ZmZlciBmb3IgYW55IGNvbnRlbnQuIEluc3RlYWQsIHdlIHVwbG9hZCB0aGUg
dGV4dHVyZSB3aXRoIEJHUkEgICAgICAgICAgIGZyb20gdGhlIHN0YXJ0LiBQb3J0cyBvdGhlciB0
aGFuIFF0IGNhbiBvcHRpbWl6ZSB0aGlzIGZvciB0aGVpcgogICAgICAgICAgIG5lZWRzLgogICAg
ICAgIDMuIFVzZSBnbEdldEF0dHJpYkxvY2F0aW9uIGluc3RlYWQgb2YgZ2xCaW5kQXR0cmliTG9j
YXRpb247CiAgICAgICAgICAgT24gc29tZSBwbGF0Zm9ybXMgd2UgbWlnaHQgYmUgcG9sbHV0aW5n
IHRoZSBHTCBjb250ZXh0IG90aGVyd2lzZS4KICAgICAgICA0LiBVc2UgaW1hZ2UgVUlEcyAoY2Fj
aGUta2V5IGluIFF0KSBpbnN0ZWFkIG9mIGltYWdlIHBvaW50ZXJzLgogICAgICAgICAgIFRoaXMg
aXMgaW1wb3J0YW50IGZvciBpbWFnZXMgdGhhdCBjaGFuZ2UgdGhlaXIgaW50ZXJuYWwgY29udGVu
dC4KICAgICAgICA1LiBBbGxvdyBwYWNraW5nIGFuZCB1bnBhY2tpbmcuIFRoaXMgaXMgY3VycmVu
dGx5IGEgc3R1YiwgZm9yIGZ1dHVyZQogICAgICAgICAgIG1lbW9yeSBvcHRpbWl6YXRpb25zLgog
ICAgICAgIDYuIFB1dCBzb21lIG9mIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlIGhlcmUgKGJlZ2lu
UGFpbnRpbmcvZW5kUGFpbnRpbmcpLgogICAgICAgIDcuIEFsbG93IHBhaW50aW5nIGEgdGV4dHVy
ZSB2aWEgYW4gSUQgaW5zdGVhZCBvZiBhIEJpdG1hcFRleHR1cmUgZGF0YQogICAgICAgICAgIHR5
cGU7IFRoaXMgaXMgZm9yIFdlYkdMLgogICAgICAgIDguIEdldCByaWQgb2YgbWFrZUNvbnRleHRD
dXJyZW50IC8gb2J0YWluQ3VycmVudENvbnRleHQuCiAgICAgICAgICAgV2Ugb25seSB1c2UgdGV4
dHVyZS1tYXBwZXIgd2hlbiB0aGUgY29udGV4dCBpcyBjdXJyZW50LgotLS0KIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2NCArKysKIC4uLi9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcCAgIHwgIDQyMyArKysr
KysrKysrKy0tLS0tLS0tLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFw
cGVyR0wuaCAgICAgfCAgIDI3ICstCiAzIGZpbGVzIGNoYW5nZWQsIDMxNCBpbnNlcnRpb25zKCsp
LCAyMDAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDlkZTVkNDMuLjhhMjEyZWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTUsNiArNSw3MCBAQAogICAgICAgICBbVGV4bWFwXSBVcHN0cmVhbSB0ZXh0dXJl
LW1hcHBlciBjaGFuZ2VzIGZyb20gUXQncyBXZWJLaXQyIGJyYW5jaAogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA0MzkKIAorICAgICAgICBQYXRjaCA4
LzEwOiBDaGFuZ2VzIHRvIHRoZSBHTCBiYWNrZW5kIG9mIFRleHR1cmVNYXBwZXIuIFRoZSBjb2Rl
IGZvciB0aGVzZSBjaGFuZ2VzIGlzIGludGVydHdpbmVkIHNvIGl0IHdhcyBoYXJkIHRvIHNlcGFy
YXRlCisgICAgICAgIHRoZW0gdG8gZGlmZmVyZW50IHBhdGNoZXMuIFRoaXMgaXMgdGhlIHN1bW1h
cnkgb2Ygd2hhdCB0aGUgY2hhbmdlcyBkbzoKKworICAgICAgICAxLiBVc2Ugc3RlbmNpbCBmb3Ig
Y2xpcHBpbmcgaW5zdGVhZCBvZiBzY2lzc29ycywgcmVmYWN0b3IgYmVnaW5DbGlwL2VuZENsaXAg
ZnVuY3Rpb25zIHRvCisgICAgICAgICAgIGFjY29tb2RhdGUgdGhhdC4KKyAgICAgICAgMi4gR2V0
IHJpZCBvZiB0aGUgIlRhcmdldCIgcHJvZ3JhbSB3aGljaCBmb3JjZWQgYW4gaW50ZXJtZWRpYXRl
IGZyYW1lYnVmZmVyIGZvciBhbnkgY29udGVudC4gSW5zdGVhZCwKKyAgICAgICAgICAgd2UgdXBs
b2FkIHRoZSB0ZXh0dXJlIHdpdGggQkdSQSBmcm9tIHRoZSBzdGFydC4gUG9ydHMgb3RoZXIgdGhh
biBRdCBjYW4gb3B0aW1pemUgdGhpcyBmb3IgdGhlaXIgbmVlZHMuCisgICAgICAgIDMuIFVzZSBn
bEdldEF0dHJpYkxvY2F0aW9uIGluc3RlYWQgb2YgZ2xCaW5kQXR0cmliTG9jYXRpb247IE9uIHNv
bWUgcGxhdGZvcm1zIHdlIG1pZ2h0IGJlIHBvbGx1dGluZyB0aGUKKyAgICAgICAgICAgR0wgY29u
dGV4dCBvdGhlcndpc2UuCisgICAgICAgIDQuIFVzZSBpbWFnZSBVSURzIChjYWNoZS1rZXkgaW4g
UXQpIGluc3RlYWQgb2YgaW1hZ2UgcG9pbnRlcnMuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbWFn
ZXMgdGhhdCBjaGFuZ2UgdGhlaXIKKyAgICAgICAgICAgaW50ZXJuYWwgY29udGVudC4KKyAgICAg
ICAgNS4gQWxsb3cgcGFja2luZyBhbmQgdW5wYWNraW5nLiBUaGlzIGlzIGN1cnJlbnRseSBhIHN0
dWIsIGZvciBmdXR1cmUgbWVtb3J5IG9wdGltaXphdGlvbnMuCisgICAgICAgIDYuIFB1dCBzb21l
IG9mIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlIGhlcmUgKGJlZ2luUGFpbnRpbmcvZW5kUGFpbnRp
bmcpLgorICAgICAgICA3LiBBbGxvdyBwYWludGluZyBhIHRleHR1cmUgdmlhIGFuIElEIGluc3Rl
YWQgb2YgYSBCaXRtYXBUZXh0dXJlIGRhdGEgdHlwZS4KKyAgICAgICAgOC4gR2V0IHJpZCBvZiBt
YWtlQ29udGV4dEN1cnJlbnQgLyBvYnRhaW5DdXJyZW50Q29udGV4dC4gV2Ugb25seSB1c2UgdGV4
dHVyZS1tYXBwZXIgd2hlbiB0aGUgY29udGV4dCBpcyBjdXJyZW50LgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4gVGVzdHMgaW4gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcgY292ZXIgdGhpcy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZGVidWdHTENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMRGF0YTo6R2xvYmFsR0xEYXRhOjpjcmVhdGVTaGFkZXJQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6Okdsb2JhbEdMRGF0YTo6R2xvYmFs
R0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OkRpcmVjdGx5
Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeTo6ZmluZE9yQ3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OkRpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9y
eTo6ZGVyZWYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6RGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0b3J5Ojp+RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBv
c2l0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlRleHR1cmVN
YXBwZXJHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjppZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmlzT3BhcXVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6cmVsYXRpdmVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFRleHR1cmVHTDo6c2V0VGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlR0w6OnBhY2spOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdM
Ojp1bnBhY2spOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjppc1BhY2tlZCk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OkJpdG1hcFRleHR1cmVHTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmluaXRpYWxpemVTaGFkZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmVnaW5QYWludGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
VGV4dHVyZUdMOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmVu
ZFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNU
b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVByb2plY3Rpb25NYXRyaXgpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpiaW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFRleHR1cmVHTDo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyR0w6On5UZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckdMOjpiaW5kU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJl
Z2luQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmVuZENsaXApOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmg6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmFsbG93U3VyZmFjZUZvclJvb3QpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpzZXRHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpncmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMOjppc09wZW5HTEJhY2tlZCk6CisKKzIwMTEtMDUtMDcgIE5vYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXhtYXBdIFVwc3RyZWFtIHRleHR1cmUtbWFwcGVy
IGNoYW5nZXMgZnJvbSBRdCdzIFdlYktpdDIgYnJhbmNoCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDQzOQorCiAgICAgICAgIFBhdGNoIDcvMTA6IEFs
bG93IGEgM0QtY29udGV4dCAoV2ViR0wpIHRvIHBhaW50IGl0c2VsZiBpbnRvIGEgVGV4dHVyZU1h
cHBlci4KICAgICAgICAgVGhpcyBhbGxvd3MgdXNpbmcgYSBXZWJHTCBjYW52YXMgd2l0aCBDU1Mu
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9U
ZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggY2Y4NTI0MS4uZWNjYjdkYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJH
TC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1
cmVNYXBwZXJHTC5jcHAKQEAgLTE4LDYgKzE4LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCisKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgpAQCAtMjksMTMgKzMwLDEwIEBACiAKICNpZiBkZWZpbmVkKFRFWE1BUF9PUEVO
R0xfRVNfMikKICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQu
aD4KICNlbGlmIE9TKE1BQ19PU19YKQotI2luY2x1ZGUgPEFHTC9hZ2wuaD4KICNpbmNsdWRlIDxn
bC5oPgogI2Vsc2UKLSNpZiBPUyhVTklYKQotI2luY2x1ZGUgPEdML2dseC5oPgotI2VuZGlmCiAj
aW5jbHVkZSA8R0wvZ2wuaD4KICNlbmRpZgogCkBAIC02Nyw4ICs2NSwxNSBAQCBleHRlcm4gIkMi
IHsKICAgICB2b2lkIGdsR2VuQnVmZmVycyhHTHNpemVpLCBHTHVpbnQqKTsKICAgICB2b2lkIGds
QnVmZmVyRGF0YShHTGVudW0sIEdMc2l6ZWlwdHIsIGNvbnN0IEdMdm9pZCosIEdMZW51bSk7CiAg
ICAgdm9pZCBnbEJ1ZmZlclN1YkRhdGEoR0xlbnVtLCBHTHNpemVpcHRyLCBHTHNpemVpcHRyLCBj
b25zdCBHTHZvaWQqKTsKLSAgICB2b2lkIGdsR2V0UHJvZ3JhbUluZm9Mb2coR0x1aW50IHByb2dy
YW0sIEdMc2l6ZWksIEdMc2l6ZWkqLCBHTGNoYXIqKTsKLQorICAgIHZvaWQgZ2xHZXRQcm9ncmFt
SW5mb0xvZyhHTHVpbnQsIEdMc2l6ZWksIEdMc2l6ZWkqLCBHTGNoYXIqKTsKKyAgICB2b2lkIGds
R2V0U2hhZGVySW5mb0xvZyhHTHVpbnQsIEdMc2l6ZWksIEdMc2l6ZWkqLCBHTGNoYXIqKTsKKyAg
ICB2b2lkIGdsR2VuUmVuZGVyYnVmZmVycyhHTHNpemVpIG4sIEdMdWludCogaWRzKTsKKyAgICB2
b2lkIGdsRGVsZXRlUmVuZGVyYnVmZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogaWRzKTsK
KyAgICB2b2lkIGdsQmluZFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaWQpOwor
ICAgIHZvaWQgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZvaWQgZ2xG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudFBv
aW50LCBHTGVudW0gcmVuZGVyYnVmZmVyVGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVySWQpOwor
ICAgIEdMZW51bSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xlbnVtIHRhcmdldCk7CisgICAg
R0xpbnQgZ2xHZXRBdHRyaWJMb2NhdGlvbihHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBu
YW1lKTsKICNpZiAhT1MoTUFDX09TX1gpCiAgICAgR0xpbnQgZ2xHZXRVbmlmb3JtTG9jYXRpb24o
R0x1aW50LCBjb25zdCBHTGNoYXIqKTsKICAgICBHTGludCBnbEJpbmRBdHRyaWJMb2NhdGlvbihH
THVpbnQsIEdMdWludCwgY29uc3QgR0xjaGFyKik7CkBAIC04NCw2ICs4OSw3IEBAIGlubGluZSBz
dGF0aWMgdm9pZCBkZWJ1Z0dMQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kLCBpbnQgbGluZSkK
ICAgICBpZiAoIWVycikKICAgICAgICAgcmV0dXJuOwogICAgIFdURlJlcG9ydEVycm9yKF9fRklM
RV9fLCBsaW5lLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAiW1RleHR1cmVNYXBwZXIgR0xdIENvbW1h
bmQgZmFpbGVkOiAlcyAoJXgpXG4iLCBjb21tYW5kLCBlcnIpOworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCiAjZGVmaW5lIERFQlVHX0dMX0NPTU1BTkRTCkBAIC05NCwxNCArMTAwLDEz
IEBAIGlubGluZSBzdGF0aWMgdm9pZCBkZWJ1Z0dMQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5k
LCBpbnQgbGluZSkKICNkZWZpbmUgR0xfQ01EKHgpIHgKICNlbmRpZgogCi1zdGF0aWMgY29uc3Qg
R0x1aW50IGdJblZlcnRleEF0dHJpYnV0ZUluZGV4ID0gMDsKLQogc3RydWN0IFRleHR1cmVNYXBw
ZXJHTERhdGEgewotICAgIHN0YXRpYyBzdHJ1Y3QgU2hhZGVySW5mbyB7CisgICAgc3RhdGljIHN0
cnVjdCBHbG9iYWxHTERhdGEgewogICAgICAgICBlbnVtIFNoYWRlclByb2dyYW1JbmRleCB7Cisg
ICAgICAgICAgICBOb1Byb2dyYW0gPSAtMSwKICAgICAgICAgICAgIFNpbXBsZVByb2dyYW0sCiAg
ICAgICAgICAgICBPcGFjaXR5QW5kTWFza1Byb2dyYW0sCi0gICAgICAgICAgICBUYXJnZXRQcm9n
cmFtLAorICAgICAgICAgICAgQ2xpcFByb2dyYW0sCiAKICAgICAgICAgICAgIFByb2dyYW1Db3Vu
dAogICAgICAgICB9OwpAQCAtMTE5LDYgKzEyNCw3IEBAIHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xE
YXRhIHsKIAogICAgICAgICBzdHJ1Y3QgUHJvZ3JhbUluZm8gewogICAgICAgICAgICAgR0x1aW50
IGlkOworICAgICAgICAgICAgR0x1aW50IHZlcnRleEF0dHJpYjsKICAgICAgICAgICAgIEdMaW50
IHZhcnNbVmFyaWFibGVDb3VudF07CiAgICAgICAgIH07CiAKQEAgLTEzOCwzMSArMTQ0LDMxIEBA
IHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKICAgICAgICAgICAgIEdMX0NNRChnbENvbXBp
bGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpKQogICAgICAgICAgICAgR0xfQ01EKGdsQXR0YWNoU2hh
ZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKSkKICAgICAgICAgICAgIEdMX0NNRChnbEF0dGFj
aFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKSkKLSAgICAgICAgICAgIEdMX0NNRChn
bEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsIGdJblZlcnRleEF0dHJpYnV0ZUluZGV4LCAi
SW5WZXJ0ZXgiKSkKICAgICAgICAgICAgIEdMX0NNRChnbExpbmtQcm9ncmFtKHByb2dyYW1JRCkp
CisgICAgICAgICAgICBwcm9ncmFtc1tpbmRleF0udmVydGV4QXR0cmliID0gZ2xHZXRBdHRyaWJM
b2NhdGlvbihwcm9ncmFtSUQsICJJblZlcnRleCIpOwogICAgICAgICAgICAgcHJvZ3JhbXNbaW5k
ZXhdLmlkID0gcHJvZ3JhbUlEOwotI2lmZGVmIFBSSU5UX1BST0dSQU1fSU5GT19MT0cKLSAgICAg
ICAgICAgIGNoYXIgaW5mb0xvZ1sxMDI0XTsKLSAgICAgICAgICAgIGludCBsZW47Ci0gICAgICAg
ICAgICBHTF9DTUQoZ2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtSUQsIDEwMjQsICZsZW4sIGlu
Zm9Mb2cpKTsKLSAgICAgICAgICAgIExPRyhHcmFwaGljcywgIkNvbXBpbGVkIHByb2dyYW0gZm9y
IHRleHR1cmUgbWFwcGVyLiBMb2c6ICVzXG4iLCBpbmZvTG9nKTsKLSNlbmRpZgogICAgICAgICB9
CiAKICAgICAgICAgUHJvZ3JhbUluZm8gcHJvZ3JhbXNbUHJvZ3JhbUNvdW50XTsKIAotICAgIH0g
c2hhZGVySW5mbzsKKyAgICAgICAgaW50IHN0ZW5jaWxJbmRleDsKKworICAgICAgICBHbG9iYWxH
TERhdGEoKQorICAgICAgICAgICAgOiBzdGVuY2lsSW5kZXgoMSkKKyAgICAgICAgeyB9CisgICAg
fSBnbG9iYWxHTERhdGE7CiAKICAgICBzdHJ1Y3QgRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBv
c2l0b3J5IHsKICAgICAgICAgc3RydWN0IEVudHJ5IHsKICAgICAgICAgICAgIEdMdWludCB0ZXh0
dXJlOwogICAgICAgICAgICAgaW50IHJlZkNvdW50OwogICAgICAgICB9OwotICAgICAgICBIYXNo
TWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRyeT4gaW1hZ2VUb1RleHR1cmU7CisgICAgICAgIHR5cGVk
ZWYgSGFzaE1hcDxJbWFnZVVpZCwgRW50cnk+IEltYWdlVGV4dHVyZU1hcDsKKyAgICAgICAgSW1h
Z2VUZXh0dXJlTWFwIGltYWdlVG9UZXh0dXJlOwogCi0gICAgICAgIEdMdWludCBmaW5kT3JDcmVh
dGUoTmF0aXZlSW1hZ2VQdHIgaW1hZ2UsIGJvb2wmIGZvdW5kKQorICAgICAgICBHTHVpbnQgZmlu
ZE9yQ3JlYXRlKEltYWdlVWlkIGltYWdlLCBib29sJiBmb3VuZCkKICAgICAgICAgewotICAgICAg
ICAgICAgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50cnk+OjppdGVyYXRvciBpdCA9IGltYWdl
VG9UZXh0dXJlLmZpbmQoaW1hZ2UpOworICAgICAgICAgICAgSW1hZ2VUZXh0dXJlTWFwOjppdGVy
YXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmZpbmQoaW1hZ2UpOwogICAgICAgICAgICAgZm91bmQg
PSBmYWxzZTsKICAgICAgICAgICAgIGlmIChpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQoKSkgewog
ICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQucmVmQ291bnQrKzsKQEAgLTE3Niw5ICsxODIsOSBA
QCBzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAgICAgICAgICAgICByZXR1cm4gZW50cnku
dGV4dHVyZTsKICAgICAgICAgfQogCi0gICAgICAgIGJvb2wgZGVyZWYoTmF0aXZlSW1hZ2VQdHIg
aW1hZ2UpCisgICAgICAgIGJvb2wgZGVyZWYoSW1hZ2VVaWQgaW1hZ2UpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBp
bWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsKKyAgICAgICAgICAgIEhhc2hNYXA8SW1hZ2VVaWQs
IEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsKICAgICAg
ICAgICAgIGlmIChpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQoKSkgewogICAgICAgICAgICAgICAg
IGlmIChpdC0+c2Vjb25kLnJlZkNvdW50IDwgMikgewogICAgICAgICAgICAgICAgICAgICBpbWFn
ZVRvVGV4dHVyZS5yZW1vdmUoaXQpOwpAQCAtMTk0LDcgKzIwMCw3IEBAIHN0cnVjdCBUZXh0dXJl
TWFwcGVyR0xEYXRhIHsKIAogICAgICAgICB+RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZXBvc2l0
b3J5KCkKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChIYXNoTWFwPE5hdGl2ZUltYWdlUHRy
LCBFbnRyeT46Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuYmVnaW4oKTsgaXQgIT0gaW1h
Z2VUb1RleHR1cmUuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGZvciAoSW1hZ2VUZXh0dXJl
TWFwOjppdGVyYXRvciBpdCA9IGltYWdlVG9UZXh0dXJlLmJlZ2luKCk7IGl0ICE9IGltYWdlVG9U
ZXh0dXJlLmVuZCgpOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgR0x1aW50IHRleHR1cmUgPSBp
dC0+c2Vjb25kLnRleHR1cmU7CiAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUpCiAgICAgICAg
ICAgICAgICAgICAgIEdMX0NNRChnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKSk7CkBAIC0y
MDQsMjEgKzIxMCwxNSBAQCBzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAgICAgfSBkaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZXM7CiAKICAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKCkKLSAgICAg
ICAgOiBjdXJyZW50UHJvZ3JhbShUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpUYXJn
ZXRQcm9ncmFtKQorICAgICAgICA6IGN1cnJlbnRQcm9ncmFtKFRleHR1cmVNYXBwZXJHTERhdGE6
Okdsb2JhbEdMRGF0YTo6Tm9Qcm9ncmFtKQogICAgIHsgfQogCiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggcHJvamVjdGlvbk1hdHJpeDsKICAgICBpbnQgY3VycmVudFByb2dyYW07Ci0KLSNpZiBP
UyhNQUNfT1NfWCkKLSAgICBBR0xDb250ZXh0IGFnbENvbnRleHQ7Ci0jZWxpZiBPUyhVTklYKQot
ICAgIERyYXdhYmxlIGdseERyYXdhYmxlOwotICAgIEdMWENvbnRleHQgZ2x4Q29udGV4dDsKLSNl
bmRpZgorICAgIGludCBwcmV2aW91c1Byb2dyYW07CiB9OwogCi1UZXh0dXJlTWFwcGVyR0xEYXRh
OjpTaGFkZXJJbmZvIFRleHR1cmVNYXBwZXJHTERhdGE6OnNoYWRlckluZm87CitUZXh0dXJlTWFw
cGVyR0xEYXRhOjpHbG9iYWxHTERhdGEgVGV4dHVyZU1hcHBlckdMRGF0YTo6Z2xvYmFsR0xEYXRh
OwogCiBjbGFzcyBCaXRtYXBUZXh0dXJlR0wgOiBwdWJsaWMgQml0bWFwVGV4dHVyZSB7CiBwdWJs
aWM6CkBAIC0yMjYsMjggKzIyNiw1NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRTaXplIHNp
emUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCByZXNldChjb25zdCBJbnRTaXplJiwgYm9vbCBvcGFxdWUpOworICAgIHZvaWQgYmlu
ZCgpOwogICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29u
c3QgSW50UmVjdCYgZGlydHlSZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7CiAgICAgfkJpdG1hcFRl
eHR1cmVHTCgpIHsgZGVzdHJveSgpOyB9CisgICAgdmlydHVhbCB1aW50MzJfdCBpZCgpIGNvbnN0
IHsgcmV0dXJuIG1faWQ7IH0KKyAgICBpbmxpbmUgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fb3BhcXVlOyB9CisgICAgaW5saW5lIEZsb2F0U2l6ZSByZWxhdGl2ZVNpemUoKSBjb25z
dCB7IHJldHVybiBtX3JlbGF0aXZlU2l6ZTsgfQorICAgIHZvaWQgc2V0VGV4dHVyZU1hcHBlcihU
ZXh0dXJlTWFwcGVyR0wqIHRleG1hcCkgeyBtX3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7IH0KKwor
ICAgIHZvaWQgcGFjaygpCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGN1cnJlbnRseSBhIHN0
dWIuCisgICAgICAgIGlmIChpc1BhY2tlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBtX2lzUGFja2VkID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHVucGFjaygpCisgICAgewor
ICAgICAgICAvLyBUaGlzIGlzIGN1cnJlbnRseSBhIHN0dWIuCisgICAgICAgIGlmICghaXNQYWNr
ZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9pc1BhY2tlZCA9IGZhbHNlOwor
ICAgIH0KKworICAgIGJvb2wgaXNQYWNrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1faXNQYWNrZWQ7CisgICAgfQogCiBwcml2YXRlOgogICAgIEdMdWludCBtX2lkOwotICAgIE5h
dGl2ZUltYWdlUHRyIG1faW1hZ2U7CisgICAgSW1hZ2VVaWQgbV9pbWFnZVVpZDsKICAgICBGbG9h
dFNpemUgbV9yZWxhdGl2ZVNpemU7CiAgICAgYm9vbCBtX29wYXF1ZTsKICAgICBJbnRTaXplIG1f
dGV4dHVyZVNpemU7CiAgICAgUmVmUHRyPFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyPiBtX2J1
ZmZlcjsKICAgICBJbnRSZWN0IG1fZGlydHlSZWN0OwogICAgIEdMdWludCBtX2ZibzsKKyAgICBH
THVpbnQgbV9yYm87CiAgICAgSW50U2l6ZSBtX2FjdHVhbFNpemU7CiAgICAgYm9vbCBtX3N1cmZh
Y2VOZWVkc1Jlc2V0OworICAgIGJvb2wgbV9pc1BhY2tlZDsKICAgICBUZXh0dXJlTWFwcGVyR0wq
IG1fdGV4dHVyZU1hcHBlcjsKICAgICBCaXRtYXBUZXh0dXJlR0woKQogICAgICAgICA6IG1faWQo
MCkKLSAgICAgICAgLCBtX2ltYWdlKDApCisgICAgICAgICwgbV9pbWFnZVVpZCgwKQogICAgICAg
ICAsIG1fb3BhcXVlKGZhbHNlKQogICAgICAgICAsIG1fZmJvKDApCisgICAgICAgICwgbV9yYm8o
MCkKICAgICAgICAgLCBtX3N1cmZhY2VOZWVkc1Jlc2V0KHRydWUpCiAgICAgICAgICwgbV90ZXh0
dXJlTWFwcGVyKDApCiAgICAgewpAQCAtMjU3LDE3ICsyODYsMjAgQEAgcHJpdmF0ZToKIH07CiAK
ICNkZWZpbmUgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FUSU9OKHByb2csIHZhcikgXAotICAg
IGlmIChUZXh0dXJlTWFwcGVyR0xEYXRhOjpzaGFkZXJJbmZvLmdldFVuaWZvcm1Mb2NhdGlvbihU
ZXh0dXJlTWFwcGVyR0xEYXRhOjpzaGFkZXJJbmZvLnByb2cjI1Byb2dyYW0sIFRleHR1cmVNYXBw
ZXJHTERhdGE6OnNoYWRlckluZm8udmFyIyNWYXJpYWJsZSwgI3ZhcikgPCAwKSBcCisgICAgaWYg
KFRleHR1cmVNYXBwZXJHTERhdGE6Omdsb2JhbEdMRGF0YS5nZXRVbmlmb3JtTG9jYXRpb24oVGV4
dHVyZU1hcHBlckdMRGF0YTo6Z2xvYmFsR0xEYXRhLnByb2cjI1Byb2dyYW0sIFRleHR1cmVNYXBw
ZXJHTERhdGE6Omdsb2JhbEdMRGF0YS52YXIjI1ZhcmlhYmxlLCAjdmFyKSA8IDApIFwKICAgICAg
ICAgICAgIExPR19FUlJPUigiQ291bGRuJ3QgZmluZCB2YXJpYWJsZSAiI3ZhciIgaW4gcHJvZ3Jh
bSAiI3Byb2ciXG4iKTsKIAogI2RlZmluZSBURVhNQVBfQlVJTERfU0hBREVSKHByb2dyYW0pIFwK
LSAgICBUZXh0dXJlTWFwcGVyR0xEYXRhOjpzaGFkZXJJbmZvLmNyZWF0ZVNoYWRlclByb2dyYW0o
dmVydGV4U2hhZGVyU291cmNlIyNwcm9ncmFtLCBmcmFnbWVudFNoYWRlclNvdXJjZSMjcHJvZ3Jh
bSwgVGV4dHVyZU1hcHBlckdMRGF0YTo6c2hhZGVySW5mby5wcm9ncmFtIyNQcm9ncmFtKTsKKyAg
ICBUZXh0dXJlTWFwcGVyR0xEYXRhOjpnbG9iYWxHTERhdGEuY3JlYXRlU2hhZGVyUHJvZ3JhbSh2
ZXJ0ZXhTaGFkZXJTb3VyY2UjI3Byb2dyYW0sIGZyYWdtZW50U2hhZGVyU291cmNlIyNwcm9ncmFt
LCBUZXh0dXJlTWFwcGVyR0xEYXRhOjpnbG9iYWxHTERhdGEucHJvZ3JhbSMjUHJvZ3JhbSk7CiAK
IFRleHR1cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkKICAgICA6IG1fZGF0YShuZXcgVGV4
dHVyZU1hcHBlckdMRGF0YSkKIHsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmluaXRpYWxp
emVTaGFkZXJzKCkKK3sKICAgICBzdGF0aWMgYm9vbCBzaGFkZXJzQ29tcGlsZWQgPSBmYWxzZTsK
LSAgICBvYnRhaW5DdXJyZW50Q29udGV4dCgpOwogICAgIGlmIChzaGFkZXJzQ29tcGlsZWQpCiAg
ICAgICAgIHJldHVybjsKICAgICBzaGFkZXJzQ29tcGlsZWQgPSB0cnVlOwpAQCAtMzExLDcgKzM0
Myw3IEBAIFRleHR1cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkKICIgICAgICAgICAgICAg
ICB2b2lkIG1haW4odm9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxuIgogIiAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAiICAgICAg
ICAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChTb3VyY2VUZXh0dXJlLCBP
dXRUZXhDb29yZFNvdXJjZSk7ICBcbiIKLSIgICAgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9y
ID0gdmVjNChjb2xvci5yZ2IgKiBPcGFjaXR5LCBjb2xvci5hICogT3BhY2l0eSk7ICAgIFxuIgor
IiAgICAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYmEgKiBPcGFj
aXR5KTsgICAgXG4iCiAiICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CiAKICAgICBjb25z
dCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUgPQpAQCAtMzI1LDIyICszNTcsMTggQEAg
VGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0woKQogIiAgICAgICAgICAgICAgICAgICBn
bF9Qb3NpdGlvbiA9IEluTWF0cml4ICogSW5WZXJ0ZXg7ICAgICAgICAgICAgICAgICAgICAgIFxu
IgogIiAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIjsKIAotICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hh
ZGVyU291cmNlVGFyZ2V0ID0KLSAgICAgICAgICAgIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05T
Ci0iICAgICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgU291cmNlVGV4dHVyZTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotIiAgICAgICAgICAgICAg
IHVuaWZvcm0gbG93cCBmbG9hdCBPcGFjaXR5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcbiIKLSIgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZl
YzIgT3V0VGV4Q29vcmRTb3VyY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCi0iICAgICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotIiAgICAgICAg
ICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKLSIgICAgICAgICAgICAgICAgICAgbG93cCB2
ZWM0IGNvbG9yID0gdGV4dHVyZTJEKFNvdXJjZVRleHR1cmUsIE91dFRleENvb3JkU291cmNlKTsg
ICAgICAgICAgXG4iCi0iICAgICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29s
b3IuYmdyICogT3BhY2l0eSwgY29sb3IuYSAqIE9wYWNpdHkpOyAgICAgICAgICAgIFxuIgotIiAg
ICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisgICAgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2VDbGlwID0KKyIgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkg
eyBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCk7IH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICI7CisKKyAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2VDbGlwID0KKyIgICAgICAgICAgICAgICB1bmlmb3JtIG1hdDQgSW5NYXRyaXg7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICBhdHRyaWJ1
dGUgdmVjNCBJblZlcnRleDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIK
KyIgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkgeyBnbF9Qb3NpdGlvbiA9IEluTWF0cml4
ICogSW5WZXJ0ZXg7IH0gICAgICAiOwogCi0gICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291
cmNlVGFyZ2V0ID0gdmVydGV4U2hhZGVyU291cmNlU2ltcGxlOwogCiAgICAgVEVYTUFQX0JVSUxE
X1NIQURFUihTaW1wbGUpCiAgICAgVEVYTUFQX0JVSUxEX1NIQURFUihPcGFjaXR5QW5kTWFzaykK
LSAgICBURVhNQVBfQlVJTERfU0hBREVSKFRhcmdldCkKKyAgICBURVhNQVBfQlVJTERfU0hBREVS
KENsaXApCiAKICAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9DQVRJT04oT3BhY2l0eUFuZE1h
c2ssIEluTWF0cml4KQogICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihPcGFjaXR5
QW5kTWFzaywgSW5Tb3VyY2VNYXRyaXgpCkBAIC0zNTQsNDEgKzM4Miw2MSBAQCBUZXh0dXJlTWFw
cGVyR0w6OlRleHR1cmVNYXBwZXJHTCgpCiAgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FU
SU9OKFNpbXBsZSwgU291cmNlVGV4dHVyZSkKICAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9D
QVRJT04oU2ltcGxlLCBPcGFjaXR5KQogCi0gICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FU
SU9OKFRhcmdldCwgSW5Tb3VyY2VNYXRyaXgpCi0gICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xP
Q0FUSU9OKFRhcmdldCwgSW5NYXRyaXgpCi0gICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xPQ0FU
SU9OKFRhcmdldCwgU291cmNlVGV4dHVyZSkKLSAgICBURVhNQVBfR0VUX1NIQURFUl9WQVJfTE9D
QVRJT04oVGFyZ2V0LCBPcGFjaXR5KQorICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElP
TihDbGlwLCBJbk1hdHJpeCkKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRp
bmcoKQoreworI2lmIFBMQVRGT1JNKFFUKQorICAgIGdsR2V0SW50ZWdlcnYoR0xfQ1VSUkVOVF9Q
Uk9HUkFNLCAmbV9kYXRhLT5wcmV2aW91c1Byb2dyYW0pOworICAgIFFQYWludGVyKiBwYWludGVy
ID0gbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBwYWludGVyLT5zYXZlKCk7Cisg
ICAgcGFpbnRlci0+YmVnaW5OYXRpdmVQYWludGluZygpOworICAgIGdsQ2xlYXJTdGVuY2lsKDAp
OworICAgIGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklUKTsKKyAgICBiaW5kU3VyZmFjZSgw
KTsKKyNlbmRpZgorICAgIGluaXRpYWxpemVTaGFkZXJzKCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1h
cHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJ
bnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkK
K3ZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRQYWludGluZygpCit7CisjaWYgUExBVEZPUk0oUVQp
CisgICAgZ2xDbGVhclN0ZW5jaWwoMSk7CisgICAgZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9C
SVQpOworICAgIFFQYWludGVyKiBwYWludGVyID0gbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKKyAgICBnbFVzZVByb2dyYW0obV9kYXRhLT5wcmV2aW91c1Byb2dyYW0pOworICAgIHBhaW50
ZXItPmVuZE5hdGl2ZVBhaW50aW5nKCk7CisgICAgcGFpbnRlci0+cmVzdG9yZSgpOworI2VuZGlm
Cit9CisKKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRl
eHR1cmUmIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVy
ZSogbWFzaykKIHsKICAgICBpZiAoIXRleHR1cmUuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47
Ci0KICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wmIHRleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNv
bnN0IEJpdG1hcFRleHR1cmVHTCY+KHRleHR1cmUpOworICAgIGRyYXdUZXh0dXJlKHRleHR1cmVH
TC5pZCgpLCB0ZXh0dXJlR0wuaXNPcGFxdWUoKSwgdGV4dHVyZUdMLnJlbGF0aXZlU2l6ZSgpLCB0
YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHksIG1hc2ssIGZhbHNlKTsKK30KIAotICAgIFRleHR1
cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OlNoYWRlclByb2dyYW1JbmRleCBwcm9ncmFtOwor
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIGJvb2wg
b3BhcXVlLCBjb25zdCBGbG9hdFNpemUmIHJlbGF0aXZlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBm
bG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgYm9vbCBmbGlw
KQoreworICAgIFRleHR1cmVNYXBwZXJHTERhdGE6Okdsb2JhbEdMRGF0YTo6U2hhZGVyUHJvZ3Jh
bUluZGV4IHByb2dyYW07CiAgICAgaWYgKG1hc2tUZXh0dXJlKQotICAgICAgICBwcm9ncmFtID0g
VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6T3BhY2l0eUFuZE1hc2tQcm9ncmFtOwor
ICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlckdMRGF0YTo6R2xvYmFsR0xEYXRhOjpPcGFj
aXR5QW5kTWFza1Byb2dyYW07CiAgICAgZWxzZQotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1h
cHBlckdMRGF0YTo6U2hhZGVySW5mbzo6U2ltcGxlUHJvZ3JhbTsKLQotICAgIGNvbnN0IFRleHR1
cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OlByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbyA9IGRh
dGEoKS5zaGFkZXJJbmZvLnByb2dyYW1zW3Byb2dyYW1dOwotICAgIGlmIChkYXRhKCkuY3VycmVu
dFByb2dyYW0gIT0gcHJvZ3JhbSkgewotICAgICAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dy
YW1JbmZvLmlkKSkKLSAgICAgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGdJ
blZlcnRleEF0dHJpYnV0ZUluZGV4KSkKLSAgICAgICAgZGF0YSgpLmN1cnJlbnRQcm9ncmFtID0g
cHJvZ3JhbTsKLSAgICAgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZ0luVmVy
dGV4QXR0cmlidXRlSW5kZXgpKQotICAgIH0KLQotICAgIEdMX0NNRChnbERpc2FibGUoR0xfREVQ
VEhfVEVTVCkpCi0gICAgR0xfQ01EKGdsRGlzYWJsZShHTF9TVEVOQ0lMX1RFU1QpKQorICAgICAg
ICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlckdMRGF0YTo6R2xvYmFsR0xEYXRhOjpTaW1wbGVQcm9n
cmFtOwogCisgICAgY29uc3QgVGV4dHVyZU1hcHBlckdMRGF0YTo6R2xvYmFsR0xEYXRhOjpQcm9n
cmFtSW5mbyYgcHJvZ3JhbUluZm8gPSBkYXRhKCkuZ2xvYmFsR0xEYXRhLnByb2dyYW1zW3Byb2dy
YW1dOworICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbUluZm8uaWQpKQorICAgIGRhdGEo
KS5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07CisgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0
cmliQXJyYXkocHJvZ3JhbUluZm8udmVydGV4QXR0cmliKSkKICAgICBHTF9DTUQoZ2xBY3RpdmVU
ZXh0dXJlKEdMX1RFWFRVUkUwKSkKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCB0ZXh0dXJlR0wubV9pZCkpCisgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgdGV4dHVyZSkpCiAgICAgR0xfQ01EKGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIs
IDApKQogICAgIGNvbnN0IEdMZmxvYXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAw
LCAxfTsKLSAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGdJblZlcnRleEF0dHJpYnV0
ZUluZGV4LCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSkKKyAgICBHTF9DTUQo
Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW1JbmZvLnZlcnRleEF0dHJpYiwgMiwgR0xfRkxP
QVQsIEdMX0ZBTFNFLCAwLCB1bml0UmVjdCkpCiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
YXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCkubXVs
dGlwbHkobW9kZWxWaWV3TWF0cml4KS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgKICAg
ICAgICAgICAgIHRhcmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKQEAgLTQwMiwzNiArNDUwLDM5
IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJl
JiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0CiAgICAgICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4
Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKICAgICAgICAgbWF0cml4Lm00MSgp
LCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgpCiAgICAgfTsKLSAgICBj
b25zdCBHTGZsb2F0IG00c3JjW10gPSB7dGV4dHVyZUdMLm1fcmVsYXRpdmVTaXplLndpZHRoKCks
IDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgdGV4dHVy
ZUdMLm1fcmVsYXRpdmVTaXplLmhlaWdodCgpLCAwLCAwLAorICAgIGNvbnN0IEdMZmxvYXQgbTRz
cmNbXSA9IHtyZWxhdGl2ZVNpemUud2lkdGgoKSwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCByZWxhdGl2ZVNpemUuaGVpZ2h0KCkgKiAoZmxpcCA/IC0x
IDogMSksIDAsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwg
MSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxfTsK
LSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1h
cHBlckdMRGF0YTo6U2hhZGVySW5mbzo6SW5NYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBt
NCkpCi0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleHR1
cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OkluU291cmNlTWF0cml4VmFyaWFibGVdLCAxLCBH
TF9GQUxTRSwgbTRzcmMpKQotICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtSW5mby52YXJz
W1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OlNvdXJjZVRleHR1cmVWYXJpYWJsZV0s
IDApKQotICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBw
ZXJHTERhdGE6OlNoYWRlckluZm86Ok9wYWNpdHlWYXJpYWJsZV0sIG9wYWNpdHkpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGZsaXAgPyByZWxhdGl2ZVNpemUuaGVp
Z2h0KCkgOiAwLCAwLCAxfTsKKworICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3Jh
bUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpHbG9iYWxHTERhdGE6OkluTWF0cml4VmFy
aWFibGVdLCAxLCBHTF9GQUxTRSwgbTQpKQorICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYo
cHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpHbG9iYWxHTERhdGE6OkluU291
cmNlTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTRzcmMpKQorICAgIEdMX0NNRChnbFVu
aWZvcm0xaShwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTERhdGE6Okdsb2JhbEdMRGF0
YTo6U291cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkpCisgICAgR0xfQ01EKGdsVW5pZm9ybTFmKHBy
b2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6R2xvYmFsR0xEYXRhOjpPcGFjaXR5
VmFyaWFibGVdLCBvcGFjaXR5KSkKIAogICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVy
ZS0+aXNWYWxpZCgpKSB7CiAgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1
cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsK
ICAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSkpCi0gICAgICAgIEdM
X0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPm1faWQpKQot
ICAgICAgICBjb25zdCBHTGZsb2F0IG00bWFza1tdID0ge21hc2tUZXh0dXJlR0wtPm1fcmVsYXRp
dmVTaXplLndpZHRoKCksIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsIG1hc2tUZXh0dXJlR0wtPm1fcmVsYXRpdmVTaXplLmhlaWdodCgpLCAwLCAw
LAorICAgICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtYXNrVGV4dHVy
ZUdMLT5pZCgpKSkKKyAgICAgICAgY29uc3QgR0xmbG9hdCBtNG1hc2tbXSA9IHttYXNrVGV4dHVy
ZUdMLT5yZWxhdGl2ZVNpemUoKS53aWR0aCgpLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCBtYXNrVGV4dHVyZUdMLT5yZWxhdGl2ZVNpemUoKS5o
ZWlnaHQoKSwgMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgMCwgMSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg
MCwgMCwgMX07Ci0gICAgICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8u
dmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpJbk1hc2tNYXRyaXhWYXJpYWJs
ZV0sIDEsIEdMX0ZBTFNFLCBtNG1hc2spKTsKLSAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHBy
b2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6TWFza1RleHR1
cmVWYXJpYWJsZV0sIDEpKQorICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dy
YW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6R2xvYmFsR0xEYXRhOjpJbk1hc2tNYXRy
aXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNG1hc2spKTsKKyAgICAgICAgR0xfQ01EKGdsVW5p
Zm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6R2xvYmFsR0xEYXRh
OjpNYXNrVGV4dHVyZVZhcmlhYmxlXSwgMSkpCiAgICAgICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1
cmUoR0xfVEVYVFVSRTApKQogICAgIH0KIAotICAgIGlmICh0ZXh0dXJlR0wubV9vcGFxdWUgJiYg
b3BhY2l0eSA+IDAuOTkgJiYgIW1hc2tUZXh0dXJlKQorICAgIGlmIChvcGFxdWUgJiYgb3BhY2l0
eSA+IDAuOTkgJiYgIW1hc2tUZXh0dXJlKQogICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX0JM
RU5EKSkKICAgICBlbHNlIHsKICAgICAgICAgR0xfQ01EKGdsQmxlbmRGdW5jKEdMX09ORSwgR0xf
T05FX01JTlVTX1NSQ19BTFBIQSkpCiAgICAgICAgIEdMX0NNRChnbEVuYWJsZShHTF9CTEVORCkp
CiAgICAgfQogCisgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKSkKICAgICBHTF9D
TUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpCisgICAgR0xfQ01EKGdsRGlz
YWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZlcnRleEF0dHJpYikpCiB9CiAKIGNv
bnN0IGNoYXIqIFRleHR1cmVNYXBwZXJHTDo6dHlwZSgpIGNvbnN0CkBAIC00NDIsNyArNDkzLDcg
QEAgY29uc3QgY2hhciogVGV4dHVyZU1hcHBlckdMOjp0eXBlKCkgY29uc3QKIHZvaWQgQml0bWFw
VGV4dHVyZUdMOjpyZXNldChjb25zdCBJbnRTaXplJiBuZXdTaXplLCBib29sIG9wYXF1ZSkKIHsK
ICAgICBCaXRtYXBUZXh0dXJlOjpyZXNldChuZXdTaXplLCBvcGFxdWUpOwotICAgIG1faW1hZ2Ug
PSAwOworICAgIG1faW1hZ2VVaWQgPSAwOwogICAgIEludFNpemUgbmV3VGV4dHVyZVNpemUgPSBu
ZXh0UG93ZXJPZlR3byhuZXdTaXplKTsKICAgICBib29sIGp1c3RDcmVhdGVkID0gZmFsc2U7CiAg
ICAgaWYgKCFtX2lkKSB7CkBAIC00NzgsMjggKzUyOSwyOCBAQCB2b2lkIEJpdG1hcFRleHR1cmVH
TDo6ZW5kUGFpbnQoKQogICAgICAgICByZXR1cm47CiAgICAgbV9idWZmZXItPmVuZFBhaW50KCk7
CiAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpCi0gICAgR0xf
Q01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2RpcnR5UmVjdC54KCksIG1f
ZGlydHlSZWN0LnkoKSwgbV9kaXJ0eVJlY3Qud2lkdGgoKSwgbV9kaXJ0eVJlY3QuaGVpZ2h0KCks
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIG1fYnVmZmVyLT5kYXRhKCkpKQorICAgIEdMX0NN
RChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9kaXJ0eVJlY3QueCgpLCBtX2Rp
cnR5UmVjdC55KCksIG1fZGlydHlSZWN0LndpZHRoKCksIG1fZGlydHlSZWN0LmhlaWdodCgpLCBH
TF9CR1JBLCBHTF9VTlNJR05FRF9CWVRFLCBtX2J1ZmZlci0+ZGF0YSgpKSkKICAgICBtX2J1ZmZl
ci5jbGVhcigpOwogfQogCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6c2V0Q29udGVudHNUb0ltYWdl
KEltYWdlKiBpbWFnZSkKIHsKLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSA9IGltYWdl
ID8gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgOiAwOwotICAgIGlmICghaW1h
Z2UgfHwgIW5hdGl2ZUltYWdlKSB7Ci0gICAgICAgIGlmIChtX2ltYWdlKQorICAgIEltYWdlVWlk
IHVpZCA9IGltYWdlID8gdWlkRm9ySW1hZ2UoaW1hZ2UpIDogMDsKKyAgICBpZiAoIWltYWdlIHx8
ICF1aWQpIHsKKyAgICAgICAgaWYgKG1faW1hZ2VVaWQpCiAgICAgICAgICAgICBkZXN0cm95KCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobmF0aXZlSW1hZ2UgPT0gbV9pbWFn
ZSkKKyAgICBpZiAodWlkID09IG1faW1hZ2VVaWQpCiAgICAgICAgIHJldHVybjsKICAgICBib29s
IGZvdW5kID0gZmFsc2U7Ci0gICAgR0x1aW50IG5ld1RleHR1cmVJRCA9IG1fdGV4dHVyZU1hcHBl
ci0+ZGF0YSgpLmRpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5maW5kT3JDcmVhdGUobmF0aXZlSW1h
Z2UsIGZvdW5kKTsKKyAgICBHTHVpbnQgbmV3VGV4dHVyZUlEID0gbV90ZXh0dXJlTWFwcGVyLT5k
YXRhKCkuZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmRPckNyZWF0ZSh1aWQsIGZvdW5kKTsK
ICAgICBpZiAobmV3VGV4dHVyZUlEICE9IG1faWQpIHsKKyAgICAgICAgbV9pbWFnZVVpZCA9IHVp
ZDsKICAgICAgICAgZGVzdHJveSgpOwogICAgICAgICBtX2lkID0gbmV3VGV4dHVyZUlEOwogICAg
ICAgICByZXNldChpbWFnZS0+c2l6ZSgpLCBmYWxzZSk7Ci0gICAgICAgIG1faW1hZ2UgPSBuYXRp
dmVJbWFnZTsKICAgICAgICAgaWYgKCFmb3VuZCkgewogICAgICAgICAgICAgR3JhcGhpY3NDb250
ZXh0IGNvbnRleHQoYmVnaW5QYWludChJbnRSZWN0KDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgo
KSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpKTsKICAgICAgICAgICAgIGNvbnRleHQuZHJhd0lt
YWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgwLCAwKSwgQ29tcG9zaXRl
Q29weSk7CkBAIC01MDgsMTMgKzU1OSw2NCBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6c2V0Q29u
dGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKICAgICB9CiB9CiAKK3N0YXRpYyBpbmxpbmUgVHJh
bnNmb3JtYXRpb25NYXRyaXggY3JlYXRlUHJvamVjdGlvbk1hdHJpeChjb25zdCBJbnRTaXplJiBz
aXplLCBib29sIGZsaXApCit7CisgICAgY29uc3QgZmxvYXQgbmVhciA9IDk5OTk5OTk7CisgICAg
Y29uc3QgZmxvYXQgZmFyID0gLTk5OTk5OworCisgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0
cml4KDIuMCAvIGZsb2F0KHNpemUud2lkdGgoKSksIDAsIDAsIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsIChmbGlwID8gLTIuMCA6IDIuMCkgLyBmbG9hdChzaXplLmhlaWdo
dCgpKSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgLTIuZiAv
IChmYXIgLSBuZWFyKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIGZs
aXAgPyAxIDogLTEsIC0oZmFyICsgbmVhcikgLyAoZmFyIC0gbmVhciksIDEpOworfQorCit2b2lk
IEJpdG1hcFRleHR1cmVHTDo6YmluZCgpCit7CisgICAgaW50JiBzdGVuY2lsSW5kZXggPSBUZXh0
dXJlTWFwcGVyR0xEYXRhOjpnbG9iYWxHTERhdGEuc3RlbmNpbEluZGV4OworICAgIGlmIChtX3N1
cmZhY2VOZWVkc1Jlc2V0IHx8ICFtX2ZibykgeworICAgICAgICBpZiAoIW1fZmJvKQorICAgICAg
ICAgICAgR0xfQ01EKGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2ZibykpCisgICAgICAgIGlmICgh
bV9yYm8pCisgICAgICAgICAgICBHTF9DTUQoZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3Jibykp
OworICAgICAgICBHTF9DTUQoZ2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9y
Ym8pKQorI2lmZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgorICAgICAgICBHTF9DTUQoZ2xSZW5kZXJi
dWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfU1RFTkNJTF9JTkRFWDgsIG1fdGV4dHVy
ZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpCisjZWxzZQorICAgICAgICBH
TF9DTUQoZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfREVQVEhfU1RF
TkNJTCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKSkKKyNl
bmRpZgorICAgICAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1f
ZmJvKSkKKyAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCkpCisg
ICAgICAgIEdMX0NNRChnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCAwKSkKKyAg
ICAgICAgR0xfQ01EKGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NP
TE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBpZCgpLCAwKSkKKyAgICAgICAgR0xfQ01E
KGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRU
QUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX3JibykpCisjaWYgQ1BVKFg4NikKKyAgICAgICAg
R0xfQ01EKGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRI
X0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9yYm8pKTsKKyNlbmRpZgorICAgICAgICBH
TF9DTUQoZ2xDbGVhckNvbG9yKDAsIDAsIDAsIDApKQorICAgICAgICBHTF9DTUQoZ2xDbGVhclN0
ZW5jaWwoc3RlbmNpbEluZGV4IC0gMSkpCisgICAgICAgIEdMX0NNRChnbENsZWFyKEdMX1NURU5D
SUxfQlVGRkVSX0JJVCB8IEdMX0NPTE9SX0JVRkZFUl9CSVQgfCBHTF9ERVBUSF9CVUZGRVJfQklU
KSkKKyAgICAgICAgbV9zdXJmYWNlTmVlZHNSZXNldCA9IGZhbHNlOworICAgIH0gZWxzZQorICAg
ICAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKSkKKwor
ICAgIGdsU3RlbmNpbE9wKEdMX0tFRVAsIEdMX0tFRVAsIEdMX0tFRVApOworICAgIGdsU3RlbmNp
bEZ1bmMoc3RlbmNpbEluZGV4ID4gMSA/IEdMX0dFUVVBTCA6IEdMX0FMV0FZUywgc3RlbmNpbElu
ZGV4IC0gMSwgc3RlbmNpbEluZGV4IC0gMSk7CisgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwg
c2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpCisgICAgbV90ZXh0dXJlTWFwcGVyLT5k
YXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgoc2l6ZSgpLCBm
YWxzZSk7CisgICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7Cit9CisKIHZvaWQgQml0bWFw
VGV4dHVyZUdMOjpkZXN0cm95KCkKIHsKLSAgICBpZiAobV9pZCAmJiAoIW1faW1hZ2UgfHwgIW1f
dGV4dHVyZU1hcHBlci0+ZGF0YSgpLmRpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5kZXJlZihtX2lt
YWdlKSkpCisgICAgaWYgKG1faWQgJiYgKCFtX2ltYWdlVWlkIHx8ICFtX3RleHR1cmVNYXBwZXIt
PmRhdGEoKS5kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZGVyZWYobV9pbWFnZVVpZCkpKQogICAg
ICAgICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9pZCkpCisKICAgICBpZiAobV9mYm8p
CiAgICAgICAgIEdMX0NNRChnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pKQogCisgICAg
aWYgKG1fcmJvKQorICAgICAgICBHTF9DTUQoZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX3Ji
bykpCisKICAgICBtX2ZibyA9IDA7CiAgICAgbV9pZCA9IDA7CiAgICAgbV90ZXh0dXJlU2l6ZSA9
IEludFNpemUoKTsKQEAgLTUzMSw4OCArNjMzLDQyIEBAIEludFNpemUgQml0bWFwVGV4dHVyZUdM
OjpzaXplKCkgY29uc3QKICAgICByZXR1cm4gbV90ZXh0dXJlU2l6ZTsKIH0KIAotc3RhdGljIGlu
bGluZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KGNvbnN0IElu
dFNpemUmIHNpemUsIGJvb2wgZmxpcCkKLXsKLSAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRy
aXgoMi4wIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgKGZsaXAgPyAtMi4wIDogMi4wKSAvIGZsb2F0KHNpemUuaGVpZ2h0
KCkpLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAtMC4wMDAw
MDEsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBmbGlwID8gMSA6IC0x
LCAwLCAxKTsKLX0KLQogVGV4dHVyZU1hcHBlckdMOjp+VGV4dHVyZU1hcHBlckdMKCkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBkZWxldGUgbV9kYXRhOwogfQogCi1ib29sIFRl
eHR1cmVNYXBwZXJHTDo6bWFrZUNvbnRleHRDdXJyZW50KCkKLXsKLSNpZiBPUyhNQUNfT1NfWCkK
LSAgICByZXR1cm4gYWdsU2V0Q3VycmVudENvbnRleHQoZGF0YSgpLmFnbENvbnRleHQpOwotI2Vs
aWYgT1MoVU5JWCkKLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gWE9wZW5EaXNwbGF5KDApOwotICAg
IGlmICghZGlzcGxheSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBnbFhNYWtl
Q3VycmVudChkaXNwbGF5LCBkYXRhKCkuZ2x4RHJhd2FibGUsIGRhdGEoKS5nbHhDb250ZXh0KTsK
LSNlbmRpZgotfQotCi12b2lkIFRleHR1cmVNYXBwZXJHTDo6b2J0YWluQ3VycmVudENvbnRleHQo
KQotewotI2lmIE9TKE1BQ19PU19YKQotICAgIGRhdGEoKS5hZ2xDb250ZXh0ID0gYWdsR2V0Q3Vy
cmVudENvbnRleHQoKTsKLSNlbGlmIE9TKFVOSVgpCi0gICAgZGF0YSgpLmdseERyYXdhYmxlID0g
Z2xYR2V0Q3VycmVudERyYXdhYmxlKCk7Ci0gICAgZGF0YSgpLmdseENvbnRleHQgPSBnbFhHZXRD
dXJyZW50Q29udGV4dCgpOwotI2VuZGlmCi19Ci0KIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiaW5k
U3VyZmFjZShCaXRtYXBUZXh0dXJlICpzdXJmYWNlUG9pbnRlcikKIHsKICAgICBCaXRtYXBUZXh0
dXJlR0wqIHN1cmZhY2UgPSBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlR0wqPihzdXJmYWNlUG9p
bnRlcik7CiAKLSAgICBpZiAoIXN1cmZhY2UpCisgICAgaWYgKCFzdXJmYWNlKSB7CisgICAgICAg
IEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCkpCisgICAgICAgIGRh
dGEoKS5wcm9qZWN0aW9uTWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeCh2aWV3cG9ydFNp
emUoKSwgdHJ1ZSkubXVsdGlwbHkodHJhbnNmb3JtKCkpOworICAgICAgICBHTF9DTUQoZ2xTdGVu
Y2lsRnVuYyhkYXRhKCkuZ2xvYmFsR0xEYXRhLnN0ZW5jaWxJbmRleCA+IDEgPyBHTF9FUVVBTCA6
IEdMX0FMV0FZUywgZGF0YSgpLmdsb2JhbEdMRGF0YS5zdGVuY2lsSW5kZXggLSAxLCBkYXRhKCku
Z2xvYmFsR0xEYXRhLnN0ZW5jaWxJbmRleCAtIDEpKQorICAgICAgICBHTF9DTUQoZ2xTdGVuY2ls
T3AoR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUCkpCisgICAgICAgIEdMX0NNRChnbFZpZXdwb3J0
KDAsIDAsIHZpZXdwb3J0U2l6ZSgpLndpZHRoKCksIHZpZXdwb3J0U2l6ZSgpLmhlaWdodCgpKSkK
ICAgICAgICAgcmV0dXJuOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gY3Jl
YXRlUHJvamVjdGlvbk1hdHJpeChzdXJmYWNlLT5zaXplKCksIGZhbHNlKTsKLSAgICBtYXRyaXgu
dHJhbnNsYXRlKC1zdXJmYWNlLT5vZmZzZXQoKS54KCksIC1zdXJmYWNlLT5vZmZzZXQoKS55KCkp
OwotCi0gICAgaWYgKHN1cmZhY2UtPm1fc3VyZmFjZU5lZWRzUmVzZXQgfHwgIXN1cmZhY2UtPm1f
ZmJvKSB7Ci0gICAgICAgIGlmICghc3VyZmFjZS0+bV9mYm8pCi0gICAgICAgICAgICBHTF9DTUQo
Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJnN1cmZhY2UtPm1fZmJvKSkKLSAgICAgICAgR0xfQ01EKGds
QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBzdXJmYWNlLT5tX2ZibykpCi0gICAgICAg
IEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApKQotICAgICAgICBHTF9DTUQo
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVO
VDAsIEdMX1RFWFRVUkVfMkQsIHN1cmZhY2UtPm1faWQsIDApKQotICAgICAgICBHTF9DTUQoZ2xD
bGVhckNvbG9yKDAsIDAsIDAsIDApKQotICAgICAgICBHTF9DTUQoZ2xDbGVhcihHTF9DT0xPUl9C
VUZGRVJfQklUKSkKLSAgICAgICAgc3VyZmFjZS0+bV9zdXJmYWNlTmVlZHNSZXNldCA9IGZhbHNl
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFN
RUJVRkZFUiwgc3VyZmFjZS0+bV9mYm8pKQogICAgIH0KIAotICAgIEdMX0NNRChnbFZpZXdwb3J0
KDAsIDAsIHN1cmZhY2UtPnNpemUoKS53aWR0aCgpLCBzdXJmYWNlLT5zaXplKCkuaGVpZ2h0KCkp
KQotICAgIGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4ID0gbWF0cml4OwotfQotCi12b2lkIFRleHR1
cmVNYXBwZXJHTDo6c2V0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEdMX0NNRChn
bFNjaXNzb3IocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
KQotICAgIEdMX0NNRChnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpKQorICAgIHN1cmZhY2UtPmJp
bmQoKTsKIH0KIAotCi12b2lkIFRleHR1cmVNYXBwZXJHTDo6cGFpbnRUb1RhcmdldChjb25zdCBC
aXRtYXBUZXh0dXJlJiBhU3VyZmFjZSwgY29uc3QgSW50U2l6ZSYgc3VyZmFjZVNpemUsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIGNvbnN0IElu
dFJlY3QmIHZpc2libGVSZWN0KQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldFJlY3QpCiB7Ci0gICAgY29uc3QgQml0bWFwVGV4dHVyZUdMJiBzdXJmYWNlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oYVN1cmZhY2UpOworICAgIFRleHR1cmVN
YXBwZXJHTERhdGE6Okdsb2JhbEdMRGF0YTo6U2hhZGVyUHJvZ3JhbUluZGV4IHByb2dyYW0gPSBU
ZXh0dXJlTWFwcGVyR0xEYXRhOjpHbG9iYWxHTERhdGE6OkNsaXBQcm9ncmFtOworICAgIGNvbnN0
IFRleHR1cmVNYXBwZXJHTERhdGE6Okdsb2JhbEdMRGF0YTo6UHJvZ3JhbUluZm8mIHByb2dyYW1J
bmZvID0gZGF0YSgpLmdsb2JhbEdMRGF0YS5wcm9ncmFtc1twcm9ncmFtXTsKKyAgICBHTF9DTUQo
Z2xVc2VQcm9ncmFtKHByb2dyYW1JbmZvLmlkKSkKKyAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShwcm9ncmFtSW5mby52ZXJ0ZXhBdHRyaWIpKQorICAgIGNvbnN0IEdMZmxvYXQg
dW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKKyAgICBHTF9DTUQoZ2xWZXJ0
ZXhBdHRyaWJQb2ludGVyKHByb2dyYW1JbmZvLnZlcnRleEF0dHJpYiwgMiwgR0xfRkxPQVQsIEdM
X0ZBTFNFLCAwLCB1bml0UmVjdCkpCiAKLSAgICAvLyBDcmVhdGUgdGhlIG1vZGVsLXZpZXctcHJv
amVjdGlvbiBtYXRyaXggdG8gZGlzcGxheSBvbiBzY3JlZW4uCi0gICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeChzdXJmYWNlU2l6ZSwgdHJ1ZSku
bXVsdGlwbHkodHJhbnNmb3JtKS5tdWx0aXBseSgKLSAgICAgICAgICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1cmZhY2UubV9hY3R1YWxTaXpl
LndpZHRoKCksIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAwLCBzdXJmYWNlLm1f
YWN0dWFsU2l6ZS5oZWlnaHQoKSwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAs
IDEsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdXJmYWNlLm9mZnNldCgpLngoKSwgc3Vy
ZmFjZS5vZmZzZXQoKS55KCksIDAsIDEpCi0gICAgICAgICAgICApOworICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9u
TWF0cml4KQorICAgICAgICAgICAgLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkKKyAgICAgICAg
ICAgIC5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCh0YXJnZXRSZWN0LndpZHRoKCksIDAs
IDAsIDAsCisgICAgICAgICAgICAgICAgMCwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKKyAg
ICAgICAgICAgICAgICAwLCAwLCAxLCAwLAorICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgp
LCB0YXJnZXRSZWN0LnkoKSwgMCwgMSkpOwogCiAgICAgY29uc3QgR0xmbG9hdCBtNFtdID0gewog
ICAgICAgICBtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwgbWF0cml4Lm0xMygpLCBtYXRyaXgu
bTE0KCksCkBAIC02MjEsNDIgKzY3NywyOSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6cGFpbnRU
b1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJlJiBhU3VyZmFjZSwgY29uc3QgSW50U2l6ZQogICAg
ICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgbWF0cml4Lm00MygpLCBtYXRyaXgubTQ0
KCkKICAgICB9OwogCi0gICAgY29uc3QgR0xmbG9hdCBtNHNyY1tdID0ge3N1cmZhY2UubV9yZWxh
dGl2ZVNpemUud2lkdGgoKSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCBzdXJmYWNlLm1fcmVsYXRpdmVTaXplLmhlaWdodCgpLCAwLCAwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMX07Ci0KLSAgICAvLyBXZSBhbHJlYWR5
IGJsZW5kZWQgdGhlIGFscGhhIGluOyB0aGUgcmVzdWx0IGlzIHByZW11bHRpcGxpZWQuCi0gICAg
R0xfQ01EKGdsVXNlUHJvZ3JhbShkYXRhKCkuc2hhZGVySW5mby5wcm9ncmFtc1tUZXh0dXJlTWFw
cGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpUYXJnZXRQcm9ncmFtXS5pZCkpCi0gICAgR0xfQ01EKGds
QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKSkKLSAgICBHTF9DTUQoZ2xWaWV3cG9y
dCgwLCAwLCBzdXJmYWNlU2l6ZS53aWR0aCgpLCBzdXJmYWNlU2l6ZS5oZWlnaHQoKSkpCi0gICAg
R0xfQ01EKGdsRGlzYWJsZShHTF9TVEVOQ0lMX1RFU1QpKQotICAgIGNvbnN0IFRleHR1cmVNYXBw
ZXJHTERhdGE6OlNoYWRlckluZm86OlByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbyA9IGRhdGEoKS5z
aGFkZXJJbmZvLnByb2dyYW1zW1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OlRhcmdl
dFByb2dyYW1dOwotICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtSW5mby52YXJzW1RleHR1
cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86Ok9wYWNpdHlWYXJpYWJsZV0sIG9wYWNpdHkpKQot
ICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKQotICAgIEdMX0NNRChnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN1cmZhY2UubV9pZCkpCi0gICAgR0xfQ01EKGdsVW5p
Zm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6
U291cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkpCi0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0
cmliQXJyYXkoZ0luVmVydGV4QXR0cmlidXRlSW5kZXgpKQotICAgIEdMX0NNRChnbFVuaWZvcm1N
YXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZv
OjpJbk1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KSkKLSAgICBHTF9DTUQoZ2xVbmlm
b3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVy
SW5mbzo6SW5Tb3VyY2VNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNHNyYykpCi0gICAg
R0xfQ01EKGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQotICAgIGNvbnN0IEdMZmxv
YXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKLSAgICBHTF9DTUQoZ2xW
ZXJ0ZXhBdHRyaWJQb2ludGVyKGdJblZlcnRleEF0dHJpYnV0ZUluZGV4LCAyLCBHTF9GTE9BVCwg
R0xfRkFMU0UsIDAsIHVuaXRSZWN0KSkKLSAgICBHTF9DTUQoZ2xCbGVuZEZ1bmMoR0xfT05FLCBH
TF9PTkVfTUlOVVNfU1JDX0FMUEhBKSkKLSAgICBHTF9DTUQoZ2xFbmFibGUoR0xfQkxFTkQpKQot
ICAgIHNldENsaXAodmlzaWJsZVJlY3QpOworICAgIGludCYgc3RlbmNpbEluZGV4ID0gZGF0YSgp
Lmdsb2JhbEdMRGF0YS5zdGVuY2lsSW5kZXg7CiAKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4
NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6R2xvYmFsR0xEYXRhOjpJ
bk1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KSkKKyAgICBHTF9DTUQoZ2xFbmFibGUo
R0xfU1RFTkNJTF9URVNUKSkKKyAgICBHTF9DTUQoZ2xTdGVuY2lsRnVuYyhHTF9ORVZFUiwgc3Rl
bmNpbEluZGV4LCBzdGVuY2lsSW5kZXgpKQorICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9SRVBM
QUNFLCBHTF9SRVBMQUNFLCBHTF9SRVBMQUNFKSkKKyAgICBHTF9DTUQoZ2xTdGVuY2lsTWFzaygw
eGZmICYgfihzdGVuY2lsSW5kZXggLSAxKSkpCiAgICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9U
UklBTkdMRV9GQU4sIDAsIDQpKQotICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eSgwKSkKLSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKDApKQotICAgIEdMX0NNRChnbEJpbmRCdWZm
ZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSkKLSAgICBkYXRhKCkuY3VycmVudFByb2dyYW0gPSBUZXh0
dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpUYXJnZXRQcm9ncmFtOworICAgIEdMX0NNRChn
bFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9LRUVQLCBHTF9LRUVQKSkKKyAgICBzdGVuY2lsSW5kZXgg
PDw9IDE7CisgICAgZ2xTdGVuY2lsRnVuYyhzdGVuY2lsSW5kZXggPiAxID8gR0xfRVFVQUwgOiBH
TF9BTFdBWVMsIHN0ZW5jaWxJbmRleCAtIDEsIHN0ZW5jaWxJbmRleCAtIDEpOworfQorCit2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZW5kQ2xpcCgpCit7CisgICAgZGF0YSgpLmdsb2JhbEdMRGF0YS5z
dGVuY2lsSW5kZXggPj49IDE7CisgICAgZ2xTdGVuY2lsRnVuYyhkYXRhKCkuZ2xvYmFsR0xEYXRh
LnN0ZW5jaWxJbmRleCA+IDEgPyBHTF9FUVVBTCA6IEdMX0FMV0FZUywgZGF0YSgpLmdsb2JhbEdM
RGF0YS5zdGVuY2lsSW5kZXggLSAxLCBkYXRhKCkuZ2xvYmFsR0xEYXRhLnN0ZW5jaWxJbmRleCAt
IDEpOwogfQogCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJHTDo6Y3Jl
YXRlVGV4dHVyZSgpCiB7CiAgICAgQml0bWFwVGV4dHVyZUdMKiB0ZXh0dXJlID0gbmV3IEJpdG1h
cFRleHR1cmVHTCgpOwotICAgIHRleHR1cmUtPm1fdGV4dHVyZU1hcHBlciA9IHRoaXM7CisgICAg
dGV4dHVyZS0+c2V0VGV4dHVyZU1hcHBlcih0aGlzKTsKICAgICByZXR1cm4gYWRvcHRSZWYodGV4
dHVyZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCA5MmM1MTk4Li5jMjUyYmZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1h
cHBlckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5oCkBAIC0zMCw2ICszMCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIFRleHR1cmVNYXBwZXJHTERhdGE7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiAKIC8v
IEFuIE9wZW5HTC1FUzIgaW1wbGVtZW50YXRpb24gb2YgVGV4dHVyZU1hcHBlci4KIGNsYXNzIFRl
eHR1cmVNYXBwZXJHTCA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyIHsKQEAgLTM4LDIzICszOSwyNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckdMKCk7CiAKICAgICAvLyByZWlt
cHMgZnJvbSBUZXh0dXJlTWFwcGVyCi0gICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0
IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJl
KiBtYXNrVGV4dHVyZSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1h
cFRleHR1cmUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYs
IGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgYm9vbCBvcGFxdWUsIGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIGJv
b2wgZmxpcCk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1
cmZhY2UpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDbGlwKGNvbnN0IEludFJlY3QmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRUb1RhcmdldChjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgSW50
U2l6ZSYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3Qg
SW50UmVjdCYgdmlzaWJsZVJlY3QpOwotICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JS
b290KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZW5kQ2xpcCgpOworICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogdHlwZSgp
IGNvbnN0OwotICAgIHZvaWQgb2J0YWluQ3VycmVudENvbnRleHQoKTsKLSAgICBib29sIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXJHTD4g
Y3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgVGV4dHVyZU1hcHBlckdMOwotICAg
IH0KKyAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyR0w+IGNyZWF0ZSgpIHsgcmV0
dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyR0wpOyB9CisgICAgdm9pZCBiZWdpblBhaW50
aW5nKCk7CisgICAgdm9pZCBlbmRQYWludGluZygpOworICAgIHZvaWQgc2V0R3JhcGhpY3NDb250
ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgeyBtX2NvbnRleHQgPSBjb250ZXh0OyB9Cisg
ICAgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNPcGVuR0xCYWNrZWQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CiAKIHByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplU2hhZGVycygpOwogICAgIGlubGlu
ZSBUZXh0dXJlTWFwcGVyR0xEYXRhJiBkYXRhKCkgeyByZXR1cm4gKm1fZGF0YTsgfQogICAgIFRl
eHR1cmVNYXBwZXJHTERhdGEqIG1fZGF0YTsKKyAgICBHcmFwaGljc0NvbnRleHQqIG1fY29udGV4
dDsKICAgICBmcmllbmQgY2xhc3MgQml0bWFwVGV4dHVyZUdMOwogfTsKIApAQCAtODQsNiArODgs
OSBAQCBzdGF0aWMgaW5saW5lIEludFNpemUgbmV4dFBvd2VyT2ZUd28oY29uc3QgSW50U2l6ZSYg
c2l6ZSkKICAgICByZXR1cm4gSW50U2l6ZShuZXh0UG93ZXJPZlR3byhzaXplLndpZHRoKCkpLCBu
ZXh0UG93ZXJPZlR3byhzaXplLmhlaWdodCgpKSk7CiB9CiAKK3R5cGVkZWYgdWludDY0X3QgSW1h
Z2VVaWQ7CitJbWFnZVVpZCB1aWRGb3JJbWFnZShJbWFnZSopOworCiB9OwogCiAjZW5kaWYKLS0g
CjEuNy4zLjMKCg==
</data>
<flag name="review"
          id="85726"
          type_id="1"
          status="+"
          setter="kenneth"
    />
    <flag name="commit-queue"
          id="85733"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92715</attachid>
            <date>2011-05-07 19:13:09 -0700</date>
            <delta_ts>2011-05-08 12:49:01 -0700</delta_ts>
            <desc>Patch 9: TextureMapperNode refactoring (the big patch)</desc>
            <filename>0009-Refactor-TextureMapperNode-for-performance-readabili.patch</filename>
            <type>text/plain</type>
            <size>103636</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSA2ZTVmMGUwNjRjNDNhYWRiMDgyYjNjNTc4NjQxY2MxY2QxYjNlYWFiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgpEYXRlOiBTYXQsIDcgTWF5IDIwMTEgMTg6NDc6MjMgLTA3MDAKU3ViamVjdDogW1BBVENI
IDA5LzEwXSBSZWZhY3RvciBUZXh0dXJlTWFwcGVyTm9kZSBmb3IgcGVyZm9ybWFuY2UsIHJlYWRh
YmlsaXR5IGFuZCBhY2N1cmFjeS4KICAgICAgQ2hhbmdlcyBpbmNsdWRlOgogICAgICAxLiBhbmlt
YXRpb25zIGFyZSBpbXBsZW1lbnRlZCBpbnNpZGUgVGV4dHVyZU1hcHBlck5vZGUsIHRvIGF2b2lk
IGZhbGxpbmcKICAgICAgICAgYmFjayB0byBBbmltYXRpb25Db250cm9sbGVyLgogICAgICAyLiBT
dXBwb3J0IHRoZSBuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIgZm9yIG1lZGlhICYgV2Vi
R0wuCiAgICAgIDMuIFVzZSBhIHBvb2wgZm9yIGludGVybWVkaWF0ZSBzdXJmYWNlcywgdG8gYXZv
aWQgY29uc3RhbnQgYWxsb2NhdGluZy8KICAgICAgICAgICAgZnJlZWluZyBvZiB0ZXh0dXJzLgog
ICAgICA0LiBQYWNrL3VucGFjayB0ZXh0dXJlcyBpbnN0ZWFkIG9mIGRlc3Ryb3lpbmcgdGhlbS4K
ICAgICAgNS4gRmFjdG9yICJkaXJ0eUZsYWdzIiB0byBrbm93IHdoYXQgd2UgZ2VvbWV0cnkgdmFs
dWVzIG5lZWQgb3IgZG9uJ3QgbmVlZAogICAgICAgICB0byBjb21wdXRlLgogICAgICA2LiBEaXZp
ZGUgY29tcHV0YXRpb24gb3BlcmF0aW9ucyB0byBkaWZmZXJlbnQgc21hbGxlciBmdW5jdGlvbnMu
CiAgICAgIDcuIEdldCByaWQgb2Ygc2Npc3Nvci9jbGlwIGxheWVycywgdXNlIHRyYW5zZm9ybWVk
IGNsaXAgaW5zdGVhZC4KICAgICAgOC4gQWxsb3cgdGlsaW5nIGZvciBiaWcgbGF5ZXJzLgogICAg
ICA5LiBNYWtlIHRoZSByZWZsZWN0aW9uL21hc2sgY29kZSBtb3JlIHJlYWRhYmxlIGJ5IGRpdmlk
aW5nIGl0IHRvIGZ1bmN0aW9ucy4KCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgMTE1ICsrCiAuLi4vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCB8ICAxMDEgKy0KIC4uLi9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCAgIHwgICAxNyArLQogLi4uL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgfCAxNTAwICsrKysrKysrKysrKy0t
LS0tLS0tCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgg
ICB8ICAyNDggKysrLS0KIDUgZmlsZXMgY2hhbmdlZCwgMTI4MSBpbnNlcnRpb25zKCspLCA3MDAg
ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDhhMjEyZWQuLmM3MTdhMmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTIsNiArMiwxMjEgQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
IAorICAgICAgICBbVGV4bWFwXVtRdF0gVXBzdHJlYW0gdGV4dHVyZS1tYXBwZXIgY2hhbmdlcyBm
cm9tIFF0J3MgV2ViS2l0MiBicmFuY2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYwNDM5CisKKyAgICAgICAgUGF0Y2ggOS8xMDogUmVmYWN0b3IgVGV4
dHVyZU1hcHBlck5vZGUgZm9yIHBlcmZvcm1hbmNlLCByZWFkYWJpbGl0eSBhbmQgYWNjdXJhY3ku
CisgICAgICAgIENoYW5nZXMgaW5jbHVkZToKKyAgICAgICAgMS4gYW5pbWF0aW9ucyBhcmUgaW1w
bGVtZW50ZWQgaW5zaWRlIFRleHR1cmVNYXBwZXJOb2RlLCB0byBhdm9pZCBmYWxsaW5nIGJhY2sg
dG8gQW5pbWF0aW9uQ29udHJvbGxlci4KKyAgICAgICAgMi4gU3VwcG9ydCB0aGUgbmV3IFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyIGZvciBtZWRpYSAmIFdlYkdMLgorICAgICAgICAzLiBVc2Ug
YSBwb29sIGZvciBpbnRlcm1lZGlhdGUgc3VyZmFjZXMsIHRvIGF2b2lkIGNvbnN0YW50IGFsbG9j
YXRpbmcvZnJlZWluZyBvZiB0ZXh0dXJzLgorICAgICAgICA0LiBQYWNrL3VucGFjayB0ZXh0dXJl
cyBpbnN0ZWFkIG9mIGRlc3Ryb3lpbmcgdGhlbS4KKyAgICAgICAgNS4gRmFjdG9yICJkaXJ0eUZs
YWdzIiB0byBrbm93IHdoYXQgd2UgZ2VvbWV0cnkgdmFsdWVzIG5lZWQgb3IgZG9uJ3QgbmVlZCB0
byBjb21wdXRlLgorICAgICAgICA2LiBEaXZpZGUgY29tcHV0YXRpb24gb3BlcmF0aW9ucyB0byBk
aWZmZXJlbnQgc21hbGxlciBmdW5jdGlvbnMuCisgICAgICAgIDcuIEdldCByaWQgb2Ygc2Npc3Nv
ci9jbGlwIGxheWVycywgdXNlIHRyYW5zZm9ybWVkIGNsaXAgaW5zdGVhZC4KKyAgICAgICAgOC4g
QWxsb3cgdGlsaW5nIGZvciBiaWcgbGF5ZXJzLgorICAgICAgICA5LiBNYWtlIHRoZSByZWZsZWN0
aW9uL21hc2sgY29kZSBtb3JlIHJlYWRhYmxlIGJ5IGRpdmlkaW5nIGl0IHRvIGZ1bmN0aW9ucy4K
KworCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGVzdHMgaW4gTGF5b3V0VGVzdHMvY29tcG9zaXRp
bmcgY292ZXIgdGhpcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheUluUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29u
dGVudHNUb01lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnBhdXNlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpyZW1vdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
OjpzZXRDb250ZW50c05lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6bm9kZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTdXJmYWNlTWFuYWdlcjo6Z2V0SW50ZXJtZWRpYXRlU3VyZmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXI6OnJlbGVhc2VJbnRl
cm1lZGlhdGVTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTdXJmYWNl
TWFuYWdlcjo6bWFya1RleHR1cmVVc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU3VyZmFjZU1hbmFnZXI6OnB1cmdlVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlclN1cmZhY2VNYW5hZ2VyOjpUZXh0dXJlR3VhcmQ6OlRleHR1cmVHdWFyZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXI6OlRleHR1cmVHdWFy
ZDo6flRleHR1cmVHdWFyZCk6CisgICAgICAgIChXZWJDb3JlOjp0b1RleHR1cmVNYXBwZXJOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpyb290TGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldFRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVBlcnNwZWN0aXZlVHJhbnNmb3Jt
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvdW50RGVz
Y2VuZGFudHNXaXRoQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZTo6Y29tcHV0ZU92ZXJsYXBzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6OmNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMb2NhbFRyYW5zZm9ybUlmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpkaWRDaGFuZ2VQYXJlbnRUcmFu
c2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmRpZENoYW5nZVNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmRpZENoYW5nZVRhcmdl
dFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZGlkQ2hh
bmdlUGVyc3BlY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6Om5l
ZWRzVG9Db21wdXRlQm91bmRpbmdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJOb2RlOjpjb21wdXRlQWxsVHJhbnNmb3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyTm9kZTo6Y29tcHV0ZUJvdW5kaW5nUmVjdEZyb21Sb290SWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVUaWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVZpc2libGVSZWN0SWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJOb2RlOjp0YXJnZXRSZWN0Rm9yVGlsZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzb3J0QnlaT3JkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZkFuZENoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpwYWludFJlZmxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50UmVjdXJzaXZlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnJlc2V0RGVzY2VuZGFudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRTY2FsZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0VmlzaWJsZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjppbnZhbGlkYXRlT3ZlcmxhcHMpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2Vs
Zik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZGVzY2VuZGFudHNPclNl
bGZIYXZlUnVubmluZ0FuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplZEFu
aW1hdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjphcHBs
eU9wYWNpdHlBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c29sdmVFcHNpbG9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpzb2x2ZVN0ZXBzRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlUaW1pbmdG
dW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6YXBwbHlUcmFu
c2Zvcm1BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmFw
cGx5QW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6
OmFwcGx5QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpo
YXNSdW5uaW5nT3BhY2l0eUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTm9kZTo6aGFzUnVubmluZ1RyYW5zZm9ybUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0FuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMYXN0TW9kaWZpZWRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvcHlUaW1pbmdGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3Jl
Ojpjb3B5QW5pbWF0aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFu
aW1hdGlvbjo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyUGFpbnRPcHRpb25zOjpUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6VGV4dHVyZU1hcHBlck5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGU6OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6OnNldFRleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6Om1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp0
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpUcmFuc2Zvcm1E
YXRhOjpUcmFuc2Zvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2Rl
OjpEaXJ0eUZsYWdzOjpEaXJ0eUZsYWdzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJOb2RlOjppbnZhbGlkYXRlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlOjppbnZhbGlkYXRlTG9jYWxUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OmludmFsaWRhdGVQZXJzcGVjdGl2ZVRyYW5zZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6aW52YWxpZGF0ZVZpc2libGVSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjppbnZhbGlkYXRlUmVwbGljYVRy
YW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6dGFyZ2V0UmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZW50aXJlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29udGVudFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OlN0YXRlOjpTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpkZWxldGVPd25lZFB0cik6CisKKzIwMTEtMDUtMDcgIE5vYW0gUm9zZW50aGFsICA8
bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCiAgICAgICAgIFtUZXhtYXBdIFVwc3RyZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5n
ZXMgZnJvbSBRdCdzIFdlYktpdDIgYnJhbmNoCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MDQzOQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyLmNwcAppbmRleCBiYmExMDllLi4wOTExNzY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5ZXJD
bGllbnQqIGNsaWUKICAgICA6IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQogICAgICwgbV9ub2RlKGFk
b3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyTm9kZSgpKSkKICAgICAsIG1fY2hhbmdlTWFzaygwKQor
ICAgICwgbV9hbmltYXRpb25TdGFydGVkVGltZXIodGhpcywgJkdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjphbmltYXRpb25TdGFydGVkVGltZXJGaXJlZCkKIHsKIH0KIApAQCAtNzAsNyArNzEs
NyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXlJblJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGlmIChtX3BlbmRpbmdDb250ZW50Lm5l
ZWRzRGlzcGxheSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcGVuZGluZ0NvbnRlbnQubmVlZHNE
aXNwbGF5UmVjdC51bml0ZShJbnRSZWN0KHJlY3QpKTsKKyAgICBtX3BlbmRpbmdDb250ZW50Lm5l
ZWRzRGlzcGxheVJlY3QudW5pdGUocmVjdCk7CiAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBw
ZXJOb2RlOjpEaXNwbGF5Q2hhbmdlKTsKIH0KIApAQCAtMzE5LDM2ICszMjAsMTIgQEAgdm9pZCBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFn
ZSkKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOwogfQogCi0v
KiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKLSovCi12b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpzZXRDb250ZW50c0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17
Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50Q2hhbmdlKTsKLSAg
ICBtX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID0gVGV4dHVyZU1hcHBlck5vZGU6OkNvbG9y
Q29udGVudFR5cGU7Ci0gICAgbV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xv
cjsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c0JhY2tncm91bmRDb2xvcihjb2xvcik7
Ci19Ci0KLQotdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb01l
ZGlhKFBsYXRmb3JtTGF5ZXIqIG1lZGlhKQordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6c2V0Q29udGVudHNUb01lZGlhKGNvbnN0IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBt
ZWRpYSkKIHsKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvTWVkaWEobWVkaWEpOwog
ICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudENoYW5nZSk7CiAgICAg
bV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9IG1lZGlhID8gVGV4dHVyZU1hcHBlck5vZGU6
Ok1lZGlhQ29udGVudFR5cGUgOiBUZXh0dXJlTWFwcGVyTm9kZTo6SFRNTENvbnRlbnRUeXBlOwot
ICAgIGlmIChtZWRpYSkKLSAgICAgICAgbV9wZW5kaW5nQ29udGVudC5tZWRpYSA9IHN0YXRpY19j
YXN0PFRleHR1cmVNYXBwZXJNZWRpYUxheWVyKj4obWVkaWEpOwotICAgIGVsc2UKLSAgICAgICAg
bV9wZW5kaW5nQ29udGVudC5tZWRpYSA9IDA7Ci19Ci0KLS8qIFxyZWltcCAoR3JhcGhpY3NMYXll
ci5oKQotKi8KLXZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzT3Jp
ZW50YXRpb24oQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIG9yaWVudGF0aW9uKQot
ewotICAgIGlmIChjb250ZW50c09yaWVudGF0aW9uKCkgPT0gb3JpZW50YXRpb24pCi0gICAgICAg
IHJldHVybjsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRzT3Jp
ZW50YXRpb25DaGFuZ2UpOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3JpZW50YXRp
b24ob3JpZW50YXRpb24pOworICAgIG1fcGVuZGluZ0NvbnRlbnQubWVkaWEgPSBtZWRpYTsKIH0K
IAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0zNjUsMTEgKzM0Miw3OSBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpCiAgICAg
bV9ub2RlLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSh0aGlzLCB0cnVlKTsKIH0KIAorYm9vbCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiog
YW5pbSwgY29uc3QgU3RyaW5nJiBrZXlmcmFtZXNOYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sK
KyAgICBBU1NFUlQoIWtleWZyYW1lc05hbWUuaXNFbXB0eSgpKTsKKworICAgIGlmICghYW5pbSB8
fCBhbmltLT5pc0VtcHR5T3JaZXJvRHVyYXRpb24oKSB8fCB2YWx1ZUxpc3Quc2l6ZSgpIDwgMiB8
fCAodmFsdWVMaXN0LnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bSAmJiB2YWx1ZUxpc3QucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmlt
YXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIC8vIFRoZSBzYW1lIGFuaW1hdGlvbiBuYW1l
IGNhbiBiZSB1c2VkIGZvciB0d28gYW5pbWF0aW9ucyB3aXRoIGRpZmZlcmVudCBwcm9wZXJ0aWVz
LgorICAgICAgICBpZiAobV9hbmltYXRpb25zW2ldLT5uYW1lICE9IGtleWZyYW1lc05hbWUgfHwg
bV9hbmltYXRpb25zW2ldLT5rZXlmcmFtZXMucHJvcGVydHkoKSAhPSB2YWx1ZUxpc3QucHJvcGVy
dHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIFdlIGFscmVhZHkgaGF2
ZSBhIGNvcHkgb2YgdGhpcyBhbmltYXRpb24sIHRoYXQgbWVhbnMgdGhhdCB3ZSdyZSByZXN1bWlu
ZyBpdCByYXRoZXIgdGhhbiBhZGRpbmcgaXQuCisgICAgICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uPiYgYW5pbWF0aW9uID0gbV9hbmltYXRpb25zW2ldOworICAgICAgICBhbmltYXRp
b24tPmFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKGFuaW0pOworICAgICAgICBhbmltYXRp
b24tPnBhdXNlZCA9IGZhbHNlOworICAgICAgICBhbmltYXRpb24tPnN0YXJ0VGltZSA9IFdURjo6
Y3VycmVudFRpbWUoKSAtIHRpbWVPZmZzZXQ7CisgICAgICAgIG5vdGlmeUNoYW5nZShUZXh0dXJl
TWFwcGVyTm9kZTo6QW5pbWF0aW9uQ2hhbmdlKTsKKyAgICAgICAgbV9hbmltYXRpb25TdGFydGVk
VGltZXIuc3RhcnRPbmVTaG90KDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gYW5pbWF0aW9uID0gVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbjo6Y3JlYXRlKHZhbHVlTGlzdCk7CisgICAgYW5pbWF0aW9uLT5ib3hTaXplID0g
Ym94U2l6ZTsKKyAgICBhbmltYXRpb24tPm5hbWUgPSBrZXlmcmFtZXNOYW1lOworICAgIGFuaW1h
dGlvbi0+YW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoYW5pbSk7CisgICAgYW5pbWF0aW9u
LT5wYXVzZWQgPSBmYWxzZTsKKyAgICBhbmltYXRpb24tPnN0YXJ0VGltZSA9IFdURjo6Y3VycmVu
dFRpbWUoKSAtIHRpbWVPZmZzZXQ7CisKKyAgICBpZiAodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0g
QW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkgeworICAgICAgICBib29sIGhhc0JpZ1Jv
dGF0aW9uOyAvLyBOb3QgdXNlZCwgYnV0IHJlcXVpcmVkIGFzIGEgcG9pbnRlciBwYXJhbWV0ZXIg
Zm9yIHRoZSBmdW5jdGlvbi4KKyAgICAgICAgZmV0Y2hUcmFuc2Zvcm1PcGVyYXRpb25MaXN0KHZh
bHVlTGlzdCwgYW5pbWF0aW9uLT5mdW5jdGlvbkxpc3QsIGFuaW1hdGlvbi0+bGlzdHNNYXRjaCwg
aGFzQmlnUm90YXRpb24pOworICAgIH0KKworICAgIG1fYW5pbWF0aW9ucy5hcHBlbmQoYW5pbWF0
aW9uKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkFuaW1hdGlvbkNoYW5n
ZSk7CisgICAgbV9hbmltYXRpb25TdGFydGVkVGltZXIuc3RhcnRPbmVTaG90KDApOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnBhdXNl
QW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS0+bmFtZSAhPSBhbmltYXRpb25OYW1lKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fYW5pbWF0aW9uc1tpXS0+cGF1c2VkID0g
dHJ1ZTsKKyAgICAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpBbmltYXRpb25D
aGFuZ2UpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cmVt
b3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKK3sKKyAgICBmb3IgKGlu
dCBpID0gbV9hbmltYXRpb25zLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIC8v
IFRoZSBzYW1lIGFuaW1hdGlvbiBuYW1lIGNhbiBiZSB1c2VkIGZvciB0d28gYW5pbWF0aW9ucyB3
aXRoIGRpZmZlcmVudCBwcm9wZXJ0aWVzLiBXZSBzaG91bGQgcmVtb3ZlIGJvdGguCisgICAgICAg
IGlmIChtX2FuaW1hdGlvbnNbaV0tPm5hbWUgIT0gYW5pbWF0aW9uTmFtZSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBtX2FuaW1hdGlvbnMucmVtb3ZlKGkpOworICAgICAgICBub3Rp
ZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkFuaW1hdGlvbkNoYW5nZSk7CisgICAgfQorfQor
CisKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQogKi8KIFBsYXRmb3JtTGF5ZXIqIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9ub2RlLmdldCgpOworICAgIHJldHVybiBub2RlKCktPm1lZGlhKCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRp
bWVyPEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPiopCit7CisgICAgY2xpZW50KCktPm5vdGlm
eUFuaW1hdGlvblN0YXJ0ZWQodGhpcywgLyogRE9NIHRpbWUgKi8gV1RGOjpjdXJyZW50VGltZSgp
KTsKIH0KIAogUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUo
R3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuaAppbmRleCBkY2Y0OTM4Li5kMmJlMGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuaApAQCAtNDUsNiArNDUsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBy
ZWltcHMgZnJvbSBHcmFwaGljc0xheWVyLmgKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNw
bGF5KCk7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkgeyBzZXRO
ZWVkc0Rpc3BsYXkoKTsgfTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0
KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQoR3JhcGhpY3NM
YXllciogbGF5ZXIpOwogICAgIHZpcnR1YWwgYm9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8
R3JhcGhpY3NMYXllcio+Jik7CkBAIC03MiwyOSArNzMsMzEgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVh
bCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRD
b250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
ZW50c0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOwotI2lmIEVOQUJMRShXRUJHTCkKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0dyYXBoaWNzQ29udGV4dDNEKGNvbnN0IEdyYXBo
aWNzQ29udGV4dDNEKik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEdyYXBoaWNzQ29udGV4dDNETmVl
ZHNEaXNwbGF5KCk7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNPcmllbnRh
dGlvbihDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gb3JpZW50YXRpb24pOworICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIGNhbnZhcykg
eyBzZXRDb250ZW50c1RvTWVkaWEoY2FudmFzKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29t
cG9zaXRpbmdTdGF0ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZv
clRoaXNMYXllck9ubHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcm
IG5hbWUpOwogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
OwogCi0gICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYsIGNvbnN0IEludFNpemUmIC8qYm94U2l6ZSovLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBT
dHJpbmcmIC8qa2V5ZnJhbWVzTmFtZSovLCBkb3VibGUgLyp0aW1lT2Zmc2V0Ki8pIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZh
bHVlTGlzdCYsIGNvbnN0IEludFNpemUmIC8qYm94U2l6ZSovLCBjb25zdCBBbmltYXRpb24qLCBj
b25zdCBTdHJpbmcmIC8qa2V5ZnJhbWVzTmFtZSovLCBkb3VibGUgLyp0aW1lT2Zmc2V0Ki8pOwor
ICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9u
TmFtZSovLCBkb3VibGUgLyp0aW1lT2Zmc2V0Ki8pOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVB
bmltYXRpb24oY29uc3QgU3RyaW5nJiAvKmFuaW1hdGlvbk5hbWUqLyk7CiAKICAgICB2b2lkIG5v
dGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hhbmdlTWFzayBjaGFuZ2VNYXNrKTsKICAg
ICBpbmxpbmUgVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnREYXRhJiBwZW5kaW5nQ29udGVudCgp
IHsgcmV0dXJuIG1fcGVuZGluZ0NvbnRlbnQ7IH0KICAgICBpbmxpbmUgaW50IGNoYW5nZU1hc2so
KSBjb25zdCB7IHJldHVybiBtX2NoYW5nZU1hc2s7IH0KICAgICB2b2lkIGRpZFN5bmNocm9uaXpl
KCk7CiAKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9k
ZS5nZXQoKTsgfQorCiBwcml2YXRlOgogICAgIE93blB0cjxUZXh0dXJlTWFwcGVyTm9kZT4gbV9u
b2RlOwogICAgIGJvb2wgbV9zeW5jUXVldWVkOwogICAgIGludCBtX2NoYW5nZU1hc2s7CiAgICAg
VGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnREYXRhIG1fcGVuZGluZ0NvbnRlbnQ7CisgICAgVmVj
dG9yPFJlZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiA+IG1fYW5pbWF0aW9uczsKKyAgICB2
b2lkIGFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyPiopOworICAgIFRpbWVyPEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPiBtX2FuaW1h
dGlvblN0YXJ0ZWRUaW1lcjsKIH07CiAKIGlubGluZSBzdGF0aWMgR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIqIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoR3JhcGhpY3NMYXllciogbGF5
ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcAppbmRleCBiZjUzZTYxLi44ZGIwODU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKQEAgLTIwLDc0MiArMjAsNzg2IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKIAorI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKwogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgVGV4dHVyZU1hcHBlckNhY2hl
IHsKKyNpZm5kZWYgVEVYVFVSRV9NQVBQRVJfTUlOSU1BTF9DT01QVVRBVElPTlMKKyNkZWZpbmUg
VEVYVFVSRV9NQVBQRVJfTUlOSU1BTF9DT01QVVRBVElPTlMgMQorI2VuZGlmCisKK2NsYXNzIFRl
eHR1cmVNYXBwZXJTdXJmYWNlTWFuYWdlciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBtYXJrKEJpdG1h
cFRleHR1cmUqIHRleHR1cmUpOworICAgIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXI7Cisg
ICAgVmVjdG9yPFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IHN1cmZhY2VzOworICAgIFZlY3RvcjxS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gPiB0ZXh0dXJlczsKKyAgICBJbnRTaXplIHZpZXdwb3J0U2l6
ZTsKIAotICAgIGNsYXNzIEVudHJ5IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFJlZlB0cjxCaXRt
YXBUZXh0dXJlPiB0ZXh0dXJlOwotICAgICAgICBFbnRyeSgpIDogcHJldmlvdXNDb3N0KDApIHsg
fQotICAgICAgICBpbmxpbmUgaW50IGNvbXB1dGVDb3N0KCkgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKCkgfHwgdGV4dHVyZS0+
aXNQYWNrZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGNvbnN0
IEludFNpemUgdGV4dHVyZVNpemUgPSB0ZXh0dXJlLT5zaXplKCk7Ci0gICAgICAgICAgICAvLyBB
biBpbWFnZSdzIGNvc3QgaW4gYnl0ZXMgaXMgd2lkdGggKiBoZWlnaHQgKiBieXRlcyBwZXIgcGl4
ZWwgKDQpLgotICAgICAgICAgICAgcmV0dXJuIHRleHR1cmVTaXplLndpZHRoKCkgKiB0ZXh0dXJl
U2l6ZS5oZWlnaHQoKSAqIDQ7CisgICAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBnZXRJbnRl
cm1lZGlhdGVTdXJmYWNlKCkKKyAgICB7CisgICAgICAgIEludFNpemUgbmV3Vmlld3BvcnRTaXpl
ID0gdGV4dHVyZU1hcHBlci0+dmlld3BvcnRTaXplKCk7CisgICAgICAgIGlmIChuZXdWaWV3cG9y
dFNpemUgIT0gdmlld3BvcnRTaXplKSB7CisgICAgICAgICAgICB2aWV3cG9ydFNpemUgPSBuZXdW
aWV3cG9ydFNpemU7CisgICAgICAgICAgICBzdXJmYWNlcy5jbGVhcigpOwogICAgICAgICB9Ci0g
ICAgICAgIEVudHJ5KEJpdG1hcFRleHR1cmUqIG5ld1RleHR1cmUpCi0gICAgICAgICAgICA6IHRl
eHR1cmUobmV3VGV4dHVyZSkKLSAgICAgICAgeworICAgICAgICBpZiAoc3VyZmFjZXMuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbmV3U3VyZmFjZSA9IHRl
eHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgICAgIG5ld1N1cmZhY2UtPnJl
c2V0KHZpZXdwb3J0U2l6ZSwgZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIG5ld1N1cmZhY2Uu
Z2V0KCk7CiAgICAgICAgIH0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEVudHJ5JiBv
dGhlcikgY29uc3QgeyByZXR1cm4gdGV4dHVyZSA9PSBvdGhlci50ZXh0dXJlOyB9Ci0gICAgICAg
IGludCBwcmV2aW91c0Nvc3Q7Ci0gICAgfTsKKyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+
IHN1cmZhY2UgPSBzdXJmYWNlcy5sYXN0KCk7CisgICAgICAgIHN1cmZhY2UtPnJlc2V0KHZpZXdw
b3J0U2l6ZSwgZmFsc2UpOworICAgICAgICBzdXJmYWNlcy5yZW1vdmVMYXN0KCk7CisgICAgICAg
IHN1cmZhY2UtPmxvY2soKTsKKyAgICAgICAgcmV0dXJuIHN1cmZhY2UuZ2V0KCk7CisgICAgfQog
Ci0gICAgVGV4dHVyZU1hcHBlckNhY2hlKCkKLSAgICAgICAgOiBtX3RvdGFsQ29zdCgwKQorICAg
IHZvaWQgcmVsZWFzZUludGVybWVkaWF0ZVN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSkK
ICAgICB7CisgICAgICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgc3VyZmFjZXMuYXBwZW5kKHN1cmZhY2UpOworICAgICAgICBzdXJmYWNlLT51bmxvY2soKTsK
KyAgICAgICAgbWFya1RleHR1cmVVc2FnZShzdXJmYWNlKTsKICAgICB9CiAKLSAgICB2b2lkIHB1
cmdlKCk7Ci0gICAgVmVjdG9yPEVudHJ5PiBtX2RhdGE7Ci0gICAgaW50IG1fdG90YWxDb3N0Owot
I2lmbmRlZiBURVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMKLSNkZWZpbmUgVEVYTUFQX1RFWFRVUkVf
Q0FDSEVfS0JTIDI0ICogMTAyNAotI2VuZGlmCi0gICAgc3RhdGljIGNvbnN0IGludCBNYXhDb3N0
ID0gVEVYTUFQX1RFWFRVUkVfQ0FDSEVfS0JTICogMTAyNDsKLSAgICBzdGF0aWMgY29uc3QgaW50
IFB1cmdlQW1vdW50ID0gTWF4Q29zdCAvIDQ7Ci19OworICAgIHZvaWQgbWFya1RleHR1cmVVc2Fn
ZShCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0ZXh0dXJlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKHRleHR1cmVz
W2ldLmdldCgpID09IHRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlcy5yZW1vdmUo
aSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAor
ICAgICAgICB0ZXh0dXJlcy5wcmVwZW5kKHRleHR1cmUpOworICAgIH0KIAotdm9pZCBUZXh0dXJl
TWFwcGVyQ2FjaGU6OnB1cmdlKCkKLXsKLSAgICBjb25zdCBpbnQgc2l6ZSA9IG1fZGF0YS5zaXpl
KCk7CisgICAgc3RhdGljIGNvbnN0IGludCBnVGV4dHVyZUJ5dGVTaXplTGltaXQgPSAxNiAqIDEw
MjQgKiAxMDI0OworICAgIHN0YXRpYyBjb25zdCBpbnQgZ1RleHR1cmVCeXRlU2l6ZUFmdGVyUHVy
Z2UgPSBnVGV4dHVyZUJ5dGVTaXplTGltaXQgKiAwLjg7CisgICAgdm9pZCBwdXJnZVRleHR1cmVz
KCkKKyAgICB7CisgICAgICAgIGludCB0b3RhbENvc3QgPSAwOworICAgICAgICBmb3IgKGludCBp
ID0gdGV4dHVyZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlmICh0
ZXh0dXJlc1tpXS0+aGFzT25lUmVmKCkpIHsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlcy5yZW1v
dmUoaSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAKLSAgICBp
ZiAobV90b3RhbENvc3QgPD0gVGV4dHVyZU1hcHBlckNhY2hlOjpNYXhDb3N0KQotICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBpZiAoIXRleHR1cmVzW2ldLT5pc1BhY2tlZCgpKQorICAgICAg
ICAgICAgICAgIHRvdGFsQ29zdCArPSB0ZXh0dXJlc1tpXS0+bnVtYmVyT2ZCeXRlcygpOworICAg
ICAgICB9CisgICAgICAgIGlmICh0b3RhbENvc3QgPD0gZ1RleHR1cmVCeXRlU2l6ZUxpbWl0KQor
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSB0aGUgcmln
aHQgY291bnQuIEl0IG1pZ2h0IGJlIGluYWNjdXJhdGUgaWYgY29udGVudCBjaGFuZ2VkIHNpemUu
Ci0gICAgLy8gV2Ugb25seSBkbyB0aGlzIHdoZW4gd2UncmUgYWN0dWFsbHkgcmVhZHkgdG8gcHVy
Z2UuCi0gICAgbV90b3RhbENvc3QgPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQotICAgICAgICBtX3RvdGFsQ29zdCArPSBtX2RhdGFbaV0uY29tcHV0ZUNvc3QoKTsKKyAg
ICAgICAgZm9yIChpbnQgaSA9IHRleHR1cmVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Cisg
ICAgICAgICAgICBpZiAodGV4dHVyZXNbaV0tPmlzTG9ja2VkKCkgfHwgdGV4dHVyZXNbaV0tPmlz
UGFja2VkKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICBmb3IgKGludCBpID0g
c2l6ZS0xOyBpID49IDAgJiYgbV90b3RhbENvc3QgPiBUZXh0dXJlTWFwcGVyQ2FjaGU6Ok1heENv
c3QgLSBUZXh0dXJlTWFwcGVyQ2FjaGU6OlB1cmdlQW1vdW50OyAtLWkpIHsKLSAgICAgICAgRW50
cnkmIGVudHJ5ID0gbV9kYXRhW2ldOwotICAgICAgICBpZiAoZW50cnkudGV4dHVyZS0+aXNMb2Nr
ZWQoKSB8fCAhZW50cnkudGV4dHVyZS0+aXNWYWxpZCgpIHx8IGVudHJ5LnRleHR1cmUtPmlzUGFj
a2VkKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV90b3RhbENvc3QgLT0gZW50
cnkucHJldmlvdXNDb3N0OwotICAgICAgICBlbnRyeS50ZXh0dXJlLT5wYWNrKCk7Ci0gICAgICAg
IG1fZGF0YS5yZW1vdmUoaSk7CisgICAgICAgICAgICB0b3RhbENvc3QgLT0gdGV4dHVyZXNbaV0t
Pm51bWJlck9mQnl0ZXMoKTsKKyAgICAgICAgICAgIHRleHR1cmVzW2ldLT5wYWNrKCk7CisKKyAg
ICAgICAgICAgIGlmICh0b3RhbENvc3QgPD0gZ1RleHR1cmVCeXRlU2l6ZUFmdGVyUHVyZ2UpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQotfQogCi12b2lkIFRleHR1
cmVNYXBwZXJDYWNoZTo6bWFyayhCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKQotewotICAgIGlmICgh
dGV4dHVyZSB8fCAhdGV4dHVyZS0+aXNWYWxpZCgpKQotICAgICAgICByZXR1cm47CisgICAgY2xh
c3MgVGV4dHVyZUd1YXJkIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRleHR1cmVHdWFyZChCaXRt
YXBUZXh0dXJlKiB0ZXh0dXJlLCBUZXh0dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXIqIG1hbmFnZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtYW5hZ2VyKTsKIAotICAgIEVudHJ5IGVu
dHJ5KHRleHR1cmUpOwotICAgIHNpemVfdCBpbmRleCA9IG1fZGF0YS5maW5kKGVudHJ5KTsKLSAg
ICBpZiAoIWluZGV4KQotICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoIXRleHR1cmUp
CisgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHByZXZpb3VzQ29zdCA9IDA7Cisg
ICAgICAgICAgICB0aGlzLT50ZXh0dXJlID0gdGV4dHVyZTsKKyAgICAgICAgICAgIHRleHR1cmUt
PmxvY2soKTsKKyAgICAgICAgICAgIG1hbmFnZXItPm1hcmtUZXh0dXJlVXNhZ2UodGV4dHVyZSk7
CisgICAgICAgIH0KIAotICAgIGlmIChpbmRleCA8IG1fZGF0YS5zaXplKCkpIHsKLSAgICAgICAg
cHJldmlvdXNDb3N0ID0gbV9kYXRhW2luZGV4XS5wcmV2aW91c0Nvc3Q7Ci0gICAgICAgIG1fZGF0
YS5yZW1vdmUoaW5kZXgpOwotICAgIH0KLSAgICBjb25zdCBpbnQgY29zdCA9IGVudHJ5LmNvbXB1
dGVDb3N0KCk7Ci0gICAgbV90b3RhbENvc3QgLT0gcHJldmlvdXNDb3N0OwotICAgIG1fdG90YWxD
b3N0ICs9IChlbnRyeS5wcmV2aW91c0Nvc3QgPSBjb3N0KTsKLSAgICBtX2RhdGEucHJlcGVuZChl
bnRyeSk7Ci19CisgICAgICAgIH5UZXh0dXJlR3VhcmQoKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAodGV4dHVyZSkKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT51bmxvY2soKTsKKyAgICAg
ICAgfQogCi1jbGFzcyBUZXh0dXJlTWFwcGVyQ2FjaGVMb2NrIHsKLXB1YmxpYzoKLSAgICBUZXh0
dXJlTWFwcGVyQ2FjaGVMb2NrKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpIDogbV90ZXh0dXJlKHRl
eHR1cmUpCi0gICAgewotICAgICAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICAgICAgbV90ZXh0
dXJlLT5sb2NrKCk7Ci0gICAgfQotICAgIH5UZXh0dXJlTWFwcGVyQ2FjaGVMb2NrKCkKLSAgICB7
Ci0gICAgICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgICAgICBtX3RleHR1cmUtPnVubG9jaygp
OwotICAgIH0KKyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmU7CisgICAgfTsK
IAotcHJpdmF0ZToKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbV90ZXh0dXJlOwogfTsKIAot
Ci1UZXh0dXJlTWFwcGVyQ2FjaGUqIFRleHR1cmVNYXBwZXJOb2RlOjpjYWNoZSgpCitUZXh0dXJl
TWFwcGVyTm9kZSogdG9UZXh0dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVyKiBsYXllcikKIHsK
LSAgICBUZXh0dXJlTWFwcGVyTm9kZSogcm9vdCA9IHJvb3RMYXllcigpOwotICAgIGlmICghcm9v
dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFyb290LT5tX2NhY2hlKQotICAgICAgICBy
b290LT5tX2NhY2hlID0gbmV3IFRleHR1cmVNYXBwZXJDYWNoZTsKLSAgICByZXR1cm4gcm9vdC0+
bV9jYWNoZTsKKyAgICByZXR1cm4gbGF5ZXIgPyB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
KGxheWVyKS0+bm9kZSgpIDogMDsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KEludFJlY3QgcmVjdCkKK1RleHR1cmVNYXBwZXJOb2RlKiBUZXh0dXJl
TWFwcGVyTm9kZTo6cm9vdExheWVyKCkKIHsKLSAgICBpZiAobV9wbGF0Zm9ybUNsaWVudCkgewot
ICAgICAgICBpZiAobV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpIHsKLSAgICAgICAgICAg
IG1fcGxhdGZvcm1DbGllbnQtPnNldE5lZWRzRGlzcGxheSgpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIHJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fcGxhdGZvcm1DbGllbnQtPnNldE5lZWRz
RGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
bV9wYXJlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFyZW50LT5zZXROZWVkc0Rpc3Bs
YXlJblJlY3QocmVjdCk7CisgICAgaWYgKG1fZWZmZWN0VGFyZ2V0KQorICAgICAgICByZXR1cm4g
bV9lZmZlY3RUYXJnZXQtPnJvb3RMYXllcigpOworICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAg
cmV0dXJuIG1fcGFyZW50LT5yb290TGF5ZXIoKTsKKyAgICByZXR1cm4gdGhpczsKIH0KIAotdm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0TmVlZHNEaXNwbGF5KCkKK3ZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQog
ewotICAgIGlmIChtX2VmZmVjdFRhcmdldCkKLSAgICAgICAgbV9lZmZlY3RUYXJnZXQtPnNldE5l
ZWRzRGlzcGxheSgpOwotICAgIGlmIChtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0Lmlz
RW1wdHkoKSkKKyAgICBpZiAobV90cmFuc2Zvcm1zLmJhc2UgPT0gbWF0cml4KQogICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKG1fc3RhdGUuZHJhd3NDb250ZW50IHx8IG1fY3VycmVudENvbnRlbnQu
Y29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRUeXBlKQotICAgICAgICBzZXROZWVkc0Rpc3BsYXlJ
blJlY3QobV90cmFuc2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVjdCk7Ci19CiAKLXZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OnNldFBsYXRmb3JtTGF5ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xp
ZW50KiBjbGllbnQpCi17Ci0gICAgbV9wbGF0Zm9ybUNsaWVudCA9IGNsaWVudDsKKyAgICBtX3Ry
YW5zZm9ybXMuYmFzZSA9IG1hdHJpeDsKKyAgICBpbnZhbGlkYXRlTG9jYWxUcmFuc2Zvcm0oKTsK
IH0KIAotaW50IFRleHR1cmVNYXBwZXJOb2RlOjpjb21wYXJlR3JhcGhpY3NMYXllcnNaVmFsdWUo
Y29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNv
bXB1dGVQZXJzcGVjdGl2ZVRyYW5zZm9ybUlmTmVlZGVkKCkKIHsKLSAgICB0eXBlZGVmIGNvbnN0
IFRleHR1cmVNYXBwZXJOb2RlKiBOb2RlUHRyOwotICAgIGNvbnN0IE5vZGVQdHIqIG5vZGVBID0g
c3RhdGljX2Nhc3Q8Y29uc3QgTm9kZVB0cio+KGEpOwotICAgIGNvbnN0IE5vZGVQdHIqIG5vZGVC
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgTm9kZVB0cio+KGIpOwotICAgIHJldHVybiBpbnQoKCgqbm9k
ZUEpLT5tX3RyYW5zZm9ybXMuY2VudGVyWiAtICgqbm9kZUIpLT5tX3RyYW5zZm9ybXMuY2VudGVy
WikgKiAxMDAwKTsKLX0KKyAgICBpZiAobV9jaGlsZHJlbi5pc0VtcHR5KCkgfHwgbV9zdGF0ZS5j
aGlsZHJlblRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCisgICAgICAgIHJldHVybjsKIAotdm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZTo6c29ydEJ5Wk9yZGVyKFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSog
PiYgYXJyYXksIGludCBmaXJzdCwgaW50IGxhc3QpCi17Ci0gICAgcXNvcnQoYXJyYXkuZGF0YSgp
LCBhcnJheS5zaXplKCksIHNpemVvZihUZXh0dXJlTWFwcGVyTm9kZSopLCBUZXh0dXJlTWFwcGVy
Tm9kZTo6Y29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKTsKLX0KKyNpZiBURVhUVVJFX01BUFBF
Ul9NSU5JTUFMX0NPTVBVVEFUSU9OUworICAgIGlmICghbV9kaXJ0eUZsYWdzLnBlcnNwZWN0aXZl
VHJhbnNmb3JtKQorICAgICAgICByZXR1cm47CisjZW5kaWYKIAotYm9vbCBUZXh0dXJlTWFwcGVy
Tm9kZTo6aGFzU3VyZmFjZURlc2NlbmRhbnRzKCkgY29uc3QKLXsKLSAgICBpZiAobV9sYXllclR5
cGUgPT0gQ2xpcExheWVyIHx8IG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyIHx8IG1f
c3RhdGUucmVwbGljYUxheWVyKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjb25zdCBGbG9h
dFBvaW50IGNlbnRlclBvaW50ID0gRmxvYXRQb2ludChtX3NpemUud2lkdGgoKSAvIDIsIG1fc2l6
ZS5oZWlnaHQoKSAvIDIpOworICAgIG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZSA9IFRyYW5zZm9y
bWF0aW9uTWF0cml4KCkKKyAgICAgICAgICAgIC50cmFuc2xhdGUoY2VudGVyUG9pbnQueCgpLCBj
ZW50ZXJQb2ludC55KCkpCisgICAgICAgICAgICAubXVsdGlwbHkobV9zdGF0ZS5jaGlsZHJlblRy
YW5zZm9ybSkKKyAgICAgICAgICAgIC50cmFuc2xhdGUoLWNlbnRlclBvaW50LngoKSwgLWNlbnRl
clBvaW50LnkoKSk7CiAKLSAgICBjb25zdCBpbnQgc2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChUZXh0dXJl
TWFwcGVyTm9kZSogY2hpbGQgPSBtX2NoaWxkcmVuW2ldKSB7Ci0gICAgICAgICAgICBpZiAoY2hp
bGQtPmhhc1N1cmZhY2VEZXNjZW5kYW50cygpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyNpZiBURVhUVVJFX01BUFBF
Ul9NSU5JTUFMX0NPTVBVVEFUSU9OUworICAgIG1fZGlydHlGbGFncy5wZXJzcGVjdGl2ZVRyYW5z
Zm9ybSA9IGZhbHNlOworICAgIG1fZGlydHlGbGFncy50cmFuc2Zvcm0gPSB0cnVlOworI2VuZGlm
CiB9CiAKIGludCBUZXh0dXJlTWFwcGVyTm9kZTo6Y291bnREZXNjZW5kYW50c1dpdGhDb250ZW50
KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fc3RhdGUudmlzaWJsZSB8fCBtX3N0YXRlLm9wYWNpdHkg
PCAwLjAwMSkKKyAgICBpZiAoIW1fc3RhdGUudmlzaWJsZSB8fCBtX29wYWNpdHkgPCAwLjAxIHx8
ICghbV9zaXplLndpZHRoKCkgJiYgIW1fc2l6ZS5oZWlnaHQoKSAmJiBtX3N0YXRlLm1hc2tzVG9C
b3VuZHMpKQogICAgICAgICByZXR1cm4gMDsKKyAgICBpbnQgY291bnQgPSAobV9zaXplLndpZHRo
KCkgJiYgbV9zaXplLmhlaWdodCgpICYmIChtX3N0YXRlLmRyYXdzQ29udGVudCB8fCBtX2N1cnJl
bnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhUTUxDb250ZW50VHlwZSkpID8gMSA6IDA7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBj
b3VudCArPSBtX2NoaWxkcmVuW2ldLT5jb3VudERlc2NlbmRhbnRzV2l0aENvbnRlbnQoKTsKIAot
ICAgIGludCBkZXNjZW5kYW50c1dpdGhDb250ZW50ID0gKG1fc3RhdGUuZHJhd3NDb250ZW50IHx8
IG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRUeXBlKSA/IDEgOiAw
OwotCi0gICAgY29uc3QgaW50IHNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUq
IGNoaWxkID0gbV9jaGlsZHJlbltpXSkKLSAgICAgICAgICAgIGRlc2NlbmRhbnRzV2l0aENvbnRl
bnQgKz0gY2hpbGQtPmNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpOwotICAgIH0KLQotICAg
IHJldHVybiBkZXNjZW5kYW50c1dpdGhDb250ZW50OwotfQotCi1UZXh0dXJlTWFwcGVyTm9kZSog
VGV4dHVyZU1hcHBlck5vZGU6OnRvVGV4dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NMYXllciogbGF5
ZXIpCi17Ci0gICAgcmV0dXJuIGxheWVyID8gc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlck5vZGUq
PihsYXllci0+cGxhdGZvcm1MYXllcigpKSA6IDA7CisgICAgcmV0dXJuIGNvdW50OwogfQogCi12
b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlTGF5ZXJUeXBlKCkKK3ZvaWQgVGV4dHVyZU1h
cHBlck5vZGU6OmNvbXB1dGVPdmVybGFwc0lmTmVlZGVkKCkKIHsKLSAgICBjb25zdCBib29sIHNl
bGZIYXNDb250ZW50ID0gbV9zdGF0ZS5kcmF3c0NvbnRlbnQgfHwgKG1fY3VycmVudENvbnRlbnQu
Y29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRUeXBlKTsKLSAgICBjb25zdCBib29sIGhhc0Rlc2Nl
bmRhbnRzV2l0aENvbnRlbnQgPSBtX3N0YXRlLmRlc2NlbmRhbnRzV2l0aENvbnRlbnQgLSAoc2Vs
Zkhhc0NvbnRlbnQgPyAxIDogMCk7Ci0gICAgY29uc3QgYm9vbCBoYXNUcmFuc3BhcmVuY3kgPSBt
X3N0YXRlLm9wYWNpdHkgPCAwLjk5IHx8IG1fc3RhdGUubWFza0xheWVyOwotICAgIGNvbnN0IGJv
b2wgaGFzUmVwbGljYSA9IG1fc3RhdGUucmVwbGljYUxheWVyOworI2lmIFRFWFRVUkVfTUFQUEVS
X01JTklNQUxfQ09NUFVUQVRJT05TCisgICAgaWYgKCFtX2RpcnR5RmxhZ3Mub3ZlcmxhcHMpCisg
ICAgICAgIHJldHVybjsKKyNlbmRpZgogCi0gICAgLy8gIERlZmF1bHRMYXllcjogZHJhd3MgaXRz
ZWxmIGFuZCBpdHMgY2hpbGRyZW4gZGlyZWN0bHkgdG8gdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIu
Ci0gICAgLy8gICAgICAgICAgICAgICAgYW55IGxheWVyIHRoYXQgZG9lc24ndCBjb25mb3JtIHRv
IHRoZSBvdGhlciBydWxlcyBpcyBhIERlZmF1bHRMYXllci4KLSAgICBtX2xheWVyVHlwZSA9IERl
ZmF1bHRMYXllcjsKKyAgICBtX3N0YXRlLm1pZ2h0SGF2ZU92ZXJsYXBzID0gY291bnREZXNjZW5k
YW50c1dpdGhDb250ZW50KCkgPiAxOwogCi0gICAgLy8gIFJvb3RMYXllcjogdGhlIHRvcCBsZXZl
bC4gRHJhd3MgdG8gYSBmcmFtZWJ1ZmZlciwgYW5kIHRoZSB0YXJnZXQgdGV4dHVyZSBkcmF3cyBp
bnRvIHRoZSB2aWV3cG9ydC4KLSAgICAvLyAgICAgICAgICAgIG9ubHkgb25lIGxheWVyIGlzIHRo
ZSByb290IGxheWVyLgotICAgIGlmICghbV9wYXJlbnQgJiYgIW1fZWZmZWN0VGFyZ2V0KSB7Ci0g
ICAgICAgIG1fbGF5ZXJUeXBlID0gUm9vdExheWVyOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
I2lmIFRFWFRVUkVfTUFQUEVSX01JTklNQUxfQ09NUFVUQVRJT05TCisgICAgbV9kaXJ0eUZsYWdz
Lm92ZXJsYXBzID0gZmFsc2U7CisjZW5kaWYKK30KIAotICAgIC8vIEEgbGF5ZXIgd2l0aCBubyBj
b250ZW50cyBpcyBhbHdheXMgYSBkZWZhdWx0IGxheWVyLgotICAgIGlmICghbV9zdGF0ZS5kZXNj
ZW5kYW50c1dpdGhDb250ZW50KQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVJlcGxp
Y2FUcmFuc2Zvcm1JZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX3N0YXRlLnJlcGxpY2FMYXllcikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gIENsaXBMYXllcjogY3JlYXRlcyBhIG5ldyBmcmFt
ZWJ1ZmZlciwgdGhlIHNpemUgb2YgdGhlIGxheWVyLCBhbmQgdGhlbiBwYWludHMgaXQgdG8gdGhl
IGVuY2xvc2luZyBCaXRtYXBUZXh0dXJlIHdpdGggdGhlIGxheWVyJ3MgdHJhbnNmb3JtL29wYWNp
dHkuCi0gICAgLy8gICAgICAgICAgICAgIEEgY2xpcCBsYXllciBpcyBhIGxheWVyIHRoYXQgbWFz
a3MgdG8gYm91bmRzLCBkb2Vzbid0IHByZXNlcnZlIDNELCBoYXMgY2hpbGRyZW4sIGFuZCBoYXMg
YSB0cmFuc3BhcmVuY3kvbWFzayBvciBhIG5vbi1yZWN0YW5ndWxhciB0cmFuc2Zvcm0uCi0gICAg
aWYgKGhhc0Rlc2NlbmRhbnRzV2l0aENvbnRlbnQgJiYgbV9zdGF0ZS5tYXNrTGF5ZXIpIHsKLSAg
ICAgICAgbV9sYXllclR5cGUgPSBDbGlwTGF5ZXI7CisjaWYgVEVYVFVSRV9NQVBQRVJfTUlOSU1B
TF9DT01QVVRBVElPTlMKKyAgICAgaWYgKCFtX2RpcnR5RmxhZ3MucmVwbGljYVRyYW5zZm9ybSkK
ICAgICAgICAgcmV0dXJuOwotICAgIH0KKyNlbmRpZgogCi0gICAgLy8gIFNjaXNzb3JMYXllcjog
ZHJhd3MgdG8gdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIsIGFuZCBhcHBsaWVzIGFuIGV4dHJhIHNj
aXNzb3IgYmVmb3JlIGRyYXdpbmcgaXRzIGNoaWxkcmVuLgotICAgIC8vICAgICAgICAgICAgICAg
IEEgc2Npc3NvciBsYXllciBpcyBhIGxheWVyIHdpdGggY2hpbGRyZW4gdGhhdCBtYXNrcyB0byBi
b3VuZHMsIGlzIG5vdCBhIHRyYW5zcGFyZW5jeSBsYXllciwgYW5kIGhhcyBhIHJlY3Rhbmd1bGFy
IGNsaXAuCi0gICAgaWYgKG1fc3RhdGUubWFza3NUb0JvdW5kcyAmJiBoYXNEZXNjZW5kYW50c1dp
dGhDb250ZW50KSB7Ci0gICAgICAgIGlmIChoYXNUcmFuc3BhcmVuY3kgfHwgIW1fc3RhdGUudHJh
bnNmb3JtLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkgfHwgbV9wYXJlbnQtPm1fc3RhdGUucHJl
c2VydmVzM0QpCi0gICAgICAgICAgICBtX2xheWVyVHlwZSA9IENsaXBMYXllcjsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9sYXllclR5cGUgPSBTY2lzc29yTGF5ZXI7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgIG1fdHJhbnNmb3Jtcy5yZXBsaWNhID0KKyAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXgobV90cmFuc2Zvcm1zLnRhcmdldCkKKyAgICAgICAgICAgIC5tdWx0aXBs
eShtX3N0YXRlLnJlcGxpY2FMYXllci0+bV90cmFuc2Zvcm1zLmxvY2FsKQorICAgICAgICAgICAg
Lm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KG1fdHJhbnNmb3Jtcy50YXJnZXQpLmludmVy
c2UoKSk7CiAKLSAgICAvLyAgVHJhbnNwYXJlbmN5TGF5ZXI6IGNyZWF0ZXMgYSBuZXcgZnJhbWVi
dWZmZXIgaWRldGljYWwgaW4gc2l6ZSB0byB0aGUgY3VycmVudCBmcmFtZWJ1ZmZlci4gVGhlbiBk
cmF3cyB0aGUgZmIncyB0ZXh0dXJlIHRvIHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyIHdpdGggaWRl
bnRpdHkgdHJhbnNmb3JtLgotICAgIC8vICAgICAgICAgICAgICAgICAgICAgVXNlZCBmb3IgbGF5
ZXJzIHdpdGggY2hpbGRyZW4gYW5kIHRyYW5zcGFyZW5jeS9tYXNrIHRoYXQgcHJlc2VydmUgM0Qg
b3IgZG9uJ3QgbWFzayB0byBib3VuZHMuCi0gICAgaWYgKChoYXNSZXBsaWNhICYmIGhhc0Rlc2Nl
bmRhbnRzV2l0aENvbnRlbnQpIHx8IChoYXNSZXBsaWNhICYmIGhhc1RyYW5zcGFyZW5jeSkgfHwg
KGhhc1RyYW5zcGFyZW5jeSAmJiBtX3N0YXRlLmRlc2NlbmRhbnRzV2l0aENvbnRlbnQgPiAxKSkK
LSAgICAgICAgbV9sYXllclR5cGUgPSBUcmFuc3BhcmVuY3lMYXllcjsKKyNpZiBURVhUVVJFX01B
UFBFUl9NSU5JTUFMX0NPTVBVVEFUSU9OUworICAgIG1fZGlydHlGbGFncy5yZXBsaWNhVHJhbnNm
b3JtID0gZmFsc2U7CisjZW5kaWYKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6aW5pdGlh
bGl6ZVRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK3ZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMb2NhbFRyYW5zZm9ybUlmTmVlZGVkKCkKIHsKLSAgICBp
ZiAobV90ZXh0dXJlKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zdXJmYWNlID0gdGV4dHVyZU1h
cHBlci0+Y3JlYXRlVGV4dHVyZSgpOwotICAgIG1fcmVwbGljYVN1cmZhY2UgPSB0ZXh0dXJlTWFw
cGVyLT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAgbV90ZXh0dXJlID0gdGV4dHVyZU1hcHBlci0+Y3Jl
YXRlVGV4dHVyZSgpOwotICAgIGNhY2hlKCktPm1hcmsobV90ZXh0dXJlLmdldCgpKTsKKyNpZiBU
RVhUVVJFX01BUFBFUl9NSU5JTUFMX0NPTVBVVEFUSU9OUworICAgIGlmICghbV9kaXJ0eUZsYWdz
LmxvY2FsVHJhbnNmb3JtKQorICAgICAgIHJldHVybjsKKyNlbmRpZgorCisgICAgZmxvYXQgb3Jp
Z2luWCA9IG1fc3RhdGUuYW5jaG9yUG9pbnQueCgpICogbV9zaXplLndpZHRoKCk7CisgICAgZmxv
YXQgb3JpZ2luWSA9IG1fc3RhdGUuYW5jaG9yUG9pbnQueSgpICogbV9zaXplLmhlaWdodCgpOwor
ICAgIG1fdHJhbnNmb3Jtcy5sb2NhbCA9CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCkK
KyAgICAgICAgLnRyYW5zbGF0ZTNkKG9yaWdpblggKyBtX3N0YXRlLnBvcy54KCksIG9yaWdpblkg
KyBtX3N0YXRlLnBvcy55KCksIG1fc3RhdGUuYW5jaG9yUG9pbnQueigpICkKKyAgICAgICAgLm11
bHRpcGx5KG1fdHJhbnNmb3Jtcy5iYXNlKQorICAgICAgICAudHJhbnNsYXRlM2QoLW9yaWdpblgs
IC1vcmlnaW5ZLCAtbV9zdGF0ZS5hbmNob3JQb2ludC56KCkpOworCisjaWYgVEVYVFVSRV9NQVBQ
RVJfTUlOSU1BTF9DT01QVVRBVElPTlMKKyAgICBtX2RpcnR5RmxhZ3MubG9jYWxUcmFuc2Zvcm0g
PSBmYWxzZTsKKyAgICBtX2RpcnR5RmxhZ3MudHJhbnNmb3JtID0gdHJ1ZTsKKyNlbmRpZgogfQog
Ci1UZXh0dXJlTWFwcGVyTm9kZTo6VGV4dHVyZU1hcHBlck5vZGUoKQotICAgIDogbV9sYXllclR5
cGUoRGVmYXVsdExheWVyKQotICAgICwgbV9zdXJmYWNlKDApCi0gICAgLCBtX3BhcmVudCgwKQot
ICAgICwgbV9lZmZlY3RUYXJnZXQoMCkKLSAgICAsIG1fcGxhdGZvcm1DbGllbnQoMCkKLSAgICAs
IG1fY2FjaGUoMCkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmRpZENoYW5nZVBhcmVudFRyYW5z
Zm9ybSgpCiB7CisjaWYgVEVYVFVSRV9NQVBQRVJfTUlOSU1BTF9DT01QVVRBVElPTlMKKyAgICBt
X2RpcnR5RmxhZ3MudHJhbnNmb3JtID0gdHJ1ZTsKKyNlbmRpZgogfQogCi1UZXh0dXJlTWFwcGVy
Tm9kZSogVGV4dHVyZU1hcHBlck5vZGU6OnJvb3RMYXllcigpCit2b2lkIFRleHR1cmVNYXBwZXJO
b2RlOjpkaWRDaGFuZ2VTaXplKCkKIHsKLSAgICBpZiAobV9lZmZlY3RUYXJnZXQpCi0gICAgICAg
IHJldHVybiBtX2VmZmVjdFRhcmdldC0+cm9vdExheWVyKCk7Ci0gICAgaWYgKG1fcGFyZW50KQot
ICAgICAgICByZXR1cm4gbV9wYXJlbnQtPnJvb3RMYXllcigpOwotICAgIHJldHVybiB0aGlzOwor
ICAgIGludmFsaWRhdGVMb2NhbFRyYW5zZm9ybSgpOworICAgIGludmFsaWRhdGVQZXJzcGVjdGl2
ZVRyYW5zZm9ybSgpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjppbnZhbGlkYXRlVHJh
bnNmb3JtKCkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmRpZENoYW5nZVRhcmdldFRyYW5zZm9y
bSgpCiB7Ci0gICAgbV90cmFuc2Zvcm1zLmRpcnR5ID0gdHJ1ZTsKLSAgICBpZiAobV9sYXllclR5
cGUgIT0gQ2xpcExheWVyKQotICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKLSAgICBpZiAo
bV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCi0gICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5pbnZh
bGlkYXRlVHJhbnNmb3JtKCk7Ci0gICAgY29uc3QgaW50IHNpemUgPSBtX2NoaWxkcmVuLnNpemUo
KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAoVGV4
dHVyZU1hcHBlck5vZGUqIGxheWVyID0gbV9jaGlsZHJlbltpXSkKLSAgICAgICAgICAgIGxheWVy
LT5pbnZhbGlkYXRlVHJhbnNmb3JtKCk7Ci0gICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgbV9jaGlsZHJlbltpXS0+ZGlkQ2hh
bmdlUGFyZW50VHJhbnNmb3JtKCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1
dGVMb2NhbFRyYW5zZm9ybSgpCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpkaWRDaGFuZ2VQZXJz
cGVjdGl2ZSgpCiB7Ci0gICAgaWYgKCFtX3RyYW5zZm9ybXMubG9jYWxEaXJ0eSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGNvbnN0IGZsb2F0IG9yaWdpblggPSBtX3N0YXRlLmFuY2hvclBvaW50Lngo
KSAqIG1fc2l6ZS53aWR0aCgpOwotICAgIGNvbnN0IGZsb2F0IG9yaWdpblkgPSBtX3N0YXRlLmFu
Y2hvclBvaW50LnkoKSAqIG1fc2l6ZS5oZWlnaHQoKTsKLSAgICBtX3RyYW5zZm9ybXMubG9jYWwg
PQotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCi0gICAgICAgIC50cmFuc2xhdGUzZChv
cmlnaW5YICsgbV9zdGF0ZS5wb3MueCgpLCBvcmlnaW5ZICsgbV9zdGF0ZS5wb3MueSgpLCBtX3N0
YXRlLmFuY2hvclBvaW50LnooKSkKLSAgICAgICAgLm11bHRpcGx5KG1fc3RhdGUudHJhbnNmb3Jt
KQotICAgICAgICAudHJhbnNsYXRlM2QoLW9yaWdpblgsIC1vcmlnaW5ZLCAtbV9zdGF0ZS5hbmNo
b3JQb2ludC56KCkpOwotICAgIG1fdHJhbnNmb3Jtcy5sb2NhbERpcnR5ID0gZmFsc2U7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBt
X2NoaWxkcmVuW2ldLT5kaWRDaGFuZ2VQYXJlbnRUcmFuc2Zvcm0oKTsKIH0KIAotdm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6ZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNzYXJ5KCkKK3N0YXRpYyBjb25z
dCBmbG9hdCBnVGlsZURpbWVuc2lvbiA9IDEwMjQuMDsKKworYm9vbCBUZXh0dXJlTWFwcGVyTm9k
ZTo6bmVlZHNUb0NvbXB1dGVCb3VuZGluZ1JlY3QoKSBjb25zdAogewotICAgIGlmIChtX3N0YXRl
LnByZXNlcnZlczNEKQotICAgICAgICByZXR1cm47CisgICAgaWYgKG1fc2l6ZS53aWR0aCgpID4g
Z1RpbGVEaW1lbnNpb24gfHwgbV9zaXplLmhlaWdodCgpID4gZ1RpbGVEaW1lbnNpb24pCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGlmICghbV9zdGF0ZS5tYXNrc1RvQm91bmRzKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTEz
KDApOwotICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMjMoMCk7Ci0gICAgbV90
cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0zMSgwKTsKLSAgICBtX3RyYW5zZm9ybXMuZm9y
RGVzY2VuZGFudHMuc2V0TTMyKDApOwotICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5z
ZXRNMzMoMSk7Ci0gICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0zNCgwKTsKLSAg
ICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTQzKDApOwotfQorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1fY2hp
bGRyZW5baV0tPm5lZWRzVG9Db21wdXRlQm91bmRpbmdSZWN0KCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKIAotSW50U2l6ZSBUZXh0dXJlTWFwcGVyTm9kZTo6bmVhcmVzdFN1cmZhY2VTaXpl
KCkgY29uc3QKLXsKLSAgICBpZiAobV9sYXllclR5cGUgPT0gQ2xpcExheWVyIHx8IG1fbGF5ZXJU
eXBlID09IFJvb3RMYXllcikKLSAgICAgICAgcmV0dXJuIG1fc3VyZmFjZSAmJiAhbV9zdXJmYWNl
LT5zaXplKCkuaXNFbXB0eSgpID8gbV9zdXJmYWNlLT5zaXplKCkgOiBtX3NpemU7Ci0gICAgcmV0
dXJuIG1fcGFyZW50LT5uZWFyZXN0U3VyZmFjZVNpemUoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtKCkKK3Zv
aWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVBbGxUcmFuc2Zvcm1zKCkKIHsKLSAgICBpZiAo
IW1fc3RhdGUucmVwbGljYUxheWVyKQorICAgIGlmIChtX3NpemUuaXNFbXB0eSgpICYmIG1fc3Rh
dGUubWFza3NUb0JvdW5kcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9uZWFyZXN0U3VyZmFj
ZVNpemUgPSBuZWFyZXN0U3VyZmFjZVNpemUoKTsKKyAgICBjb21wdXRlTG9jYWxUcmFuc2Zvcm1J
Zk5lZWRlZCgpOworICAgIGNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtSWZOZWVkZWQoKTsKKyAgICBj
b21wdXRlUGVyc3BlY3RpdmVUcmFuc2Zvcm1JZk5lZWRlZCgpOwogCi0gICAgaWYgKG1fbGF5ZXJU
eXBlICE9IFRyYW5zcGFyZW5jeUxheWVyKSB7Ci0gICAgICAgIG1fdHJhbnNmb3Jtcy5yZXBsaWNh
ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobV90cmFuc2Zvcm1zLnRhcmdldCkubXVsdGlwbHkobV9z
dGF0ZS5yZXBsaWNhTGF5ZXItPm1fdHJhbnNmb3Jtcy5sb2NhbCk7CisjaWYgVEVYVFVSRV9NQVBQ
RVJfTUlOSU1BTF9DT01QVVRBVElPTlMKKyAgICBpZiAoIW1fZGlydHlGbGFncy50cmFuc2Zvcm0p
CisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCisgICAgbV90cmFuc2Zvcm1zLnRhcmdldCA9IFRy
YW5zZm9ybWF0aW9uTWF0cml4KG1fcGFyZW50ID8gbV9wYXJlbnQtPm1fdHJhbnNmb3Jtcy5mb3JE
ZXNjZW5kYW50cyA6IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpLm11bHRpcGx5KG1fdHJhbnNmb3Jt
cy5sb2NhbCk7CisKKyNpZiBURVhUVVJFX01BUFBFUl9NSU5JTUFMX0NPTVBVVEFUSU9OUworICAg
IGlmIChtX2VmZmVjdFRhcmdldCkgeworICAgICAgICBtX2VmZmVjdFRhcmdldC0+bV9kaXJ0eUZs
YWdzLnJlcGxpY2FUcmFuc2Zvcm0gPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQorI2Vu
ZGlmCiAKLSAgICBjb25zdCBmbG9hdCBvcmlnaW5YID0gbV90cmFuc2Zvcm1zLnRhcmdldC5tNDEo
KTsKLSAgICBjb25zdCBmbG9hdCBvcmlnaW5ZID0gbV90cmFuc2Zvcm1zLnRhcmdldC5tNDIoKTsK
LSAgICBtX3RyYW5zZm9ybXMucmVwbGljYSA9Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpCi0gICAgICAgICAgICAgICAgLnRyYW5zbGF0ZShvcmlnaW5YLCBvcmlnaW5ZKQotICAg
ICAgICAgICAgICAgIC5tdWx0aXBseShtX3N0YXRlLnJlcGxpY2FMYXllci0+bV90cmFuc2Zvcm1z
LmxvY2FsKQotICAgICAgICAgICAgICAgIC50cmFuc2xhdGUoLW9yaWdpblgsIC1vcmlnaW5ZKTsK
LX0KKyAgICBtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0ID0gRmxvYXRSZWN0KG1fdHJh
bnNmb3Jtcy50YXJnZXQubWFwUmVjdCh0YXJnZXRSZWN0KCkpKTsKIAotdm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6Y29tcHV0ZVRyYW5zZm9ybWF0aW9ucygpCi17Ci0gICAgaWYgKCFtX3RyYW5zZm9y
bXMuZGlydHkpCisgICAgbV9zdGF0ZS52aXNpYmxlID0gbV9zdGF0ZS5iYWNrZmFjZVZpc2liaWxp
dHkgfHwgbV90cmFuc2Zvcm1zLnRhcmdldC5pbnZlcnNlKCkubTMzKCkgPj0gMDsKKyAgICBpZiAo
IW1fc3RhdGUudmlzaWJsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV90cmFuc2Zvcm1zLmRp
cnR5ID0gZmFsc2U7Ci0gICAgaWYgKChtX3NpemUuaXNFbXB0eSgpICYmIG1fc3RhdGUubWFza3NU
b0JvdW5kcykpCisgICAgLy8gVGhpcyB0cmFuc2Zvcm0gaXMgb25seSBhcHBsaWVkIGlmIHVzaW5n
IGEgdHdvLXBhc3MgZm9yIHRoZSByZXBsaWNhLCBiZWNhdXNlIHRoZSB0cmFuc2Zvcm0gbmVlZHMg
dG8gYmUgYWRqdXN0ZWQgdG8gdGhlIHNpemUgb2YgdGhlIGludGVybWVkaWF0ZSBzdXJmYWNlLCBp
bnN0ZWFmIG9mIHRoZSBzaXplIG9mIHRoZSBjb250ZW50IGxheWVyLgorICAgIGlmIChtX3BhcmVu
dCAmJiBtX3BhcmVudC0+bV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKKyAgICAgICAgbV90cmFuc2Zvcm1z
LmNlbnRlclogPSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFBvaW50KEZsb2F0UG9pbnQzRChtX3Np
emUud2lkdGgoKSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIsIDApKS56KCk7CisKKyAgICBpZiAo
IW1fY2hpbGRyZW4uc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBUZXh0dXJlTWFwcGVy
Tm9kZSogcGFyZW50ID0gbV9wYXJlbnQ7Ci0gICAgY29tcHV0ZUxvY2FsVHJhbnNmb3JtKCk7Cisg
ICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzID0gbV90cmFuc2Zvcm1zLnRhcmdldDsKKwor
ICAgIGlmICghbV9zdGF0ZS5wcmVzZXJ2ZXMzRCkgeworICAgICAgICBtX3RyYW5zZm9ybXMuZm9y
RGVzY2VuZGFudHMgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgKKyAgICAgICAgICAgICAgICAgICAg
bV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLm0xMSgpLCBtX3RyYW5zZm9ybXMuZm9yRGVzY2Vu
ZGFudHMubTEyKCksIDAsIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5tMTQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLm0yMSgpLCBtX3RyYW5z
Zm9ybXMuZm9yRGVzY2VuZGFudHMubTIyKCksIDAsIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50
cy5tMjQoKSwKKyAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKKyAgICAgICAgICAgICAg
ICAgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLm00MSgpLCBtX3RyYW5zZm9ybXMuZm9y
RGVzY2VuZGFudHMubTQyKCksIDAsIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5tNDQoKSk7
CisgICAgfQogCi0gICAgbV90cmFuc2Zvcm1zLnRhcmdldCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4
KHBhcmVudCA/IHBhcmVudC0+bV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzIDogVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKSkubXVsdGlwbHkobV90cmFuc2Zvcm1zLmxvY2FsKTsKLSAgICBtX3RyYW5z
Zm9ybXMuZm9yRGVzY2VuZGFudHMgPSAobV9sYXllclR5cGUgPT0gQ2xpcExheWVyID8gVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSA6IG1fdHJhbnNmb3Jtcy50YXJnZXQpOworICAgIG1fdHJhbnNmb3Jt
cy5mb3JEZXNjZW5kYW50cy5tdWx0aXBseShtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmUpOwogCi0g
ICAgaWYgKG1fZWZmZWN0VGFyZ2V0KQorI2lmIFRFWFRVUkVfTUFQUEVSX01JTklNQUxfQ09NUFVU
QVRJT05TCisgICAgbV9kaXJ0eUZsYWdzLnZpc2libGVSZWN0ID0gdHJ1ZTsKKyAgICBtX2RpcnR5
RmxhZ3MudHJhbnNmb3JtID0gZmFsc2U7CisgICAgbV9kaXJ0eUZsYWdzLnJlcGxpY2FUcmFuc2Zv
cm0gPSB0cnVlOworI2VuZGlmCisKKyAgICBkaWRDaGFuZ2VUYXJnZXRUcmFuc2Zvcm0oKTsKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZUJvdW5kaW5nUmVjdEZyb21Sb290SWZO
ZWVkZWQoKQoreworICAgIGlmICghbmVlZHNUb0NvbXB1dGVCb3VuZGluZ1JlY3QoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmICghbV9wYXJlbnQpIHsKKyAgICAgICAgbV90cmFuc2Zvcm1zLmJv
dW5kaW5nUmVjdEZyb21Sb290ID0gbV90cmFuc2Zvcm1zLmJvdW5kaW5nUmVjdEZyb21Sb290Rm9y
RGVzY2VuZGFudHMgPSBJbnRSZWN0KDAsIDAsIC0xLCAtMSk7CiAgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgICBtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0ID0gSW50UmVjdChtX3Ry
YW5zZm9ybXMudGFyZ2V0Lm1hcFJlY3QoZW50aXJlUmVjdCgpKSk7Ci0gICAgaWYgKG1fc3RhdGUu
cmVwbGljYUxheWVyKQotICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+Y29tcHV0ZVRyYW5z
Zm9ybWF0aW9ucygpOworICAgIGNvbnN0IEZsb2F0UmVjdCB0YXJnZXRSZWN0SW5Sb290Q29vcmRp
bmF0ZXMgPSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFJlY3QodGFyZ2V0UmVjdCgpKTsKIAotICAg
IGZsYXR0ZW5UbzJEU3BhY2VJZk5lY2Vzc2FyeSgpOworICAgIGNvbnN0IEZsb2F0UmVjdCBwYXJl
bnRCb3VuZGluZ1JlY3QgPSBtX3BhcmVudC0+bV90cmFuc2Zvcm1zLmJvdW5kaW5nUmVjdEZyb21S
b290Rm9yRGVzY2VuZGFudHM7CisgICAgaWYgKHBhcmVudEJvdW5kaW5nUmVjdC53aWR0aCgpIDwg
MCkKKyAgICAgICAgbV90cmFuc2Zvcm1zLmJvdW5kaW5nUmVjdEZyb21Sb290ID0gdGFyZ2V0UmVj
dEluUm9vdENvb3JkaW5hdGVzOworICAgIGVsc2UgeworICAgICAgICBtX3RyYW5zZm9ybXMuYm91
bmRpbmdSZWN0RnJvbVJvb3RGb3JEZXNjZW5kYW50cyA9IG1fdHJhbnNmb3Jtcy5ib3VuZGluZ1Jl
Y3RGcm9tUm9vdCA9IHBhcmVudEJvdW5kaW5nUmVjdDsKKyAgICAgICAgbV90cmFuc2Zvcm1zLmJv
dW5kaW5nUmVjdEZyb21Sb290LmludGVyc2VjdCh0YXJnZXRSZWN0SW5Sb290Q29vcmRpbmF0ZXMp
OworICAgIH0KKyAgICBpZiAobV9zdGF0ZS5tYXNrc1RvQm91bmRzKQorICAgICAgICBtX3RyYW5z
Zm9ybXMuYm91bmRpbmdSZWN0RnJvbVJvb3RGb3JEZXNjZW5kYW50cy5pbnRlcnNlY3QobV90cmFu
c2Zvcm1zLmJvdW5kaW5nUmVjdEZyb21Sb290KTsKK30KIAotICAgIGlmICghbV9zdGF0ZS5iYWNr
ZmFjZVZpc2liaWxpdHkgJiYgbV90cmFuc2Zvcm1zLnRhcmdldC5pbnZlcnNlKCkubTMzKCkgPCAw
KSB7Ci0gICAgICAgIG1fc3RhdGUudmlzaWJsZSA9IGZhbHNlOwordm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6Y29tcHV0ZVRpbGVzKCkKK3sKKyAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50
VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgJiYgIW1fc3RhdGUuZHJhd3NDb250ZW50KSB7CisgICAg
ICAgIG1fdGlsZXMuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX3N0YXRl
LnZpc2libGUgPSB0cnVlOworICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRpbGVzVG9BZGQ7CisgICAg
VmVjdG9yPGludD4gdGlsZXNUb1JlbW92ZTsKKyAgICBjb25zdCBpbnQgVGlsZUVyYXNlVGhyZXNo
b2xkID0gNjsKKyAgICBGbG9hdFNpemUgc2l6ZSA9IGNvbnRlbnRTaXplKCk7CisgICAgRmxvYXRS
ZWN0IGNvbnRlbnRSZWN0KDAsIDAsIHNpemUud2lkdGgoKSAqIG1fc3RhdGUuY29udGVudFNjYWxl
LCBzaXplLmhlaWdodCgpICogbV9zdGF0ZS5jb250ZW50U2NhbGUpOworCisgICAgZm9yIChmbG9h
dCB5ID0gMDsgeSA8IGNvbnRlbnRSZWN0LmhlaWdodCgpOyB5ICs9IGdUaWxlRGltZW5zaW9uKSB7
CisgICAgICAgIGZvciAoZmxvYXQgeCA9IDA7IHggPCBjb250ZW50UmVjdC53aWR0aCgpOyB4ICs9
IGdUaWxlRGltZW5zaW9uKSB7CisgICAgICAgICAgICBGbG9hdFJlY3QgdGlsZVJlY3QoeCwgeSwg
Z1RpbGVEaW1lbnNpb24sIGdUaWxlRGltZW5zaW9uKTsKKyAgICAgICAgICAgIHRpbGVSZWN0Lmlu
dGVyc2VjdChjb250ZW50UmVjdCk7CisgICAgICAgICAgICBGbG9hdFJlY3QgdGlsZVJlY3RJblJv
b3RDb29yZGluYXRlcyA9IHRpbGVSZWN0OworICAgICAgICAgICAgdGlsZVJlY3RJblJvb3RDb29y
ZGluYXRlcy5zY2FsZSgxLjAgLyBtX3N0YXRlLmNvbnRlbnRTY2FsZSk7CisgICAgICAgICAgICB0
aWxlUmVjdEluUm9vdENvb3JkaW5hdGVzID0gbV90cmFuc2Zvcm1zLnRhcmdldC5tYXBSZWN0KHRp
bGVSZWN0SW5Sb290Q29vcmRpbmF0ZXMpOworICAgICAgICAgICAgc3RhdGljIGJvb2wgc0Rpc2Nh
cmRIaWRkZW5UaWxlcyA9IGZhbHNlOworICAgICAgICAgICAgLy8gRklYTUU6IGRpc2NhcmQgaGlk
ZGVuIHRpbGVzLgorICAgICAgICAgICAgaWYgKCFzRGlzY2FyZEhpZGRlblRpbGVzIHx8ICFuZWVk
c1RvQ29tcHV0ZUJvdW5kaW5nUmVjdCgpIHx8IHRpbGVSZWN0SW5Sb290Q29vcmRpbmF0ZXMuaW50
ZXJzZWN0cyhtX3N0YXRlLnZpc2libGVSZWN0KSkKKyAgICAgICAgICAgICAgICB0aWxlc1RvQWRk
LmFwcGVuZCh0aWxlUmVjdCk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBpZiAocGFyZW50ICYm
IHBhcmVudC0+bV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKLSAgICAgICAgbV90cmFuc2Zvcm1zLmNlbnRl
clogPSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFBvaW50KEZsb2F0UG9pbnQzRChtX3NpemUud2lk
dGgoKSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIsIDApKS56KCk7CisgICAgZm9yIChpbnQgaSA9
IG1fdGlsZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgY29uc3QgRmxvYXRS
ZWN0IG9sZFRpbGUgPSBtX3RpbGVzW2ldLnJlY3Q7CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxz
ZTsKIAotICAgIGlmICghbV9jaGlsZHJlbi5zaXplKCkpCisgICAgICAgIGZvciAoaW50IGogPSB0
aWxlc1RvQWRkLnNpemUoKSAtIDE7IGogPj0gMDsgLS1qKSB7CisgICAgICAgICAgICBjb25zdCBG
bG9hdFJlY3QgbmV3VGlsZSA9IHRpbGVzVG9BZGRbal07CisgICAgICAgICAgICBpZiAob2xkVGls
ZSAhPSBuZXdUaWxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBm
b3VuZCA9IHRydWU7CisgICAgICAgICAgICB0aWxlc1RvQWRkLnJlbW92ZShqKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAg
IHRpbGVzVG9SZW1vdmUuYXBwZW5kKGkpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdGlsZXNUb0FkZC5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIXRpbGVzVG9SZW1v
dmUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBUaWxlJiB0aWxlID0gbV90aWxlc1t0aWxlc1Rv
UmVtb3ZlWzBdXTsKKyAgICAgICAgICAgIHRpbGVzVG9SZW1vdmUucmVtb3ZlKDApOworICAgICAg
ICAgICAgdGlsZS5yZWN0ID0gdGlsZXNUb0FkZFtpXTsKKyAgICAgICAgICAgIHRpbGUubmVlZHNS
ZXNldCA9IHRydWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IFRpbGUgdGlsZTsKKyAgICAgICAgdGlsZS5yZWN0ID0gdGlsZXNUb0FkZFtpXTsKKyAgICAgICAg
dGlsZS5uZWVkc1Jlc2V0ID0gdHJ1ZTsKKyAgICAgICAgbV90aWxlcy5hcHBlbmQodGlsZSk7Cisg
ICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlc1RvUmVtb3ZlLnNpemUoKSAm
JiBtX3RpbGVzLnNpemUoKSA+IFRpbGVFcmFzZVRocmVzaG9sZDsgKytpKQorICAgICAgICBtX3Rp
bGVzLnJlbW92ZSh0aWxlc1RvUmVtb3ZlW2ldKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6Y29tcHV0ZVZpc2libGVSZWN0SWZOZWVkZWQoKQoreworICAgIGlmICghbmVlZHNUb0NvbXB1
dGVCb3VuZGluZ1JlY3QoKSkKICAgICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVjdCByb290Vmlz
aWJsZVJlY3Q7CisgICAgaWYgKCFtX3BhcmVudCkKKyAgICAgICAgcm9vdFZpc2libGVSZWN0ID0g
bV9zdGF0ZS5yb290VmlzaWJsZVJlY3Q7CisgICAgZWxzZSBpZiAobV9wYXJlbnQpCisgICAgICAg
IHJvb3RWaXNpYmxlUmVjdCA9IG1fcGFyZW50LT5tX3N0YXRlLnJvb3RWaXNpYmxlUmVjdDsKIAot
ICAgIGlmIChtX3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyNpZiBURVhU
VVJFX01BUFBFUl9NSU5JTUFMX0NPTVBVVEFUSU9OUworICAgIGlmICghbV9kaXJ0eUZsYWdzLnZp
c2libGVSZWN0ICYmIG1fc3RhdGUucm9vdFZpc2libGVSZWN0ID09IHJvb3RWaXNpYmxlUmVjdCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgRmxvYXRQb2ludCBjZW50ZXJQb2ludCA9IEZs
b2F0UG9pbnQobV9zaXplLndpZHRoKCkgLyAyLCBtX3NpemUuaGVpZ2h0KCkgLyAyKTsKLSAgICBp
ZiAobV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlRGlydHkpCi0gICAgICAgIG1fdHJhbnNmb3Jtcy5w
ZXJzcGVjdGl2ZSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkKLSAgICAgICAgICAgIC50cmFuc2xh
dGUoY2VudGVyUG9pbnQueCgpLCBjZW50ZXJQb2ludC55KCkpCi0gICAgICAgICAgICAubXVsdGlw
bHkobV9zdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSkKLSAgICAgICAgICAgIC50cmFuc2xhdGUoLWNl
bnRlclBvaW50LngoKSwgLWNlbnRlclBvaW50LnkoKSk7Ci0gICAgbV90cmFuc2Zvcm1zLnBlcnNw
ZWN0aXZlRGlydHkgPSBmYWxzZTsKLSAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMubXVs
dGlwbHkobV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlKTsKKyAgICBtX2RpcnR5RmxhZ3MudmlzaWJs
ZVJlY3QgPSBmYWxzZTsKKyNlbmRpZgorCisgICAgbV9zdGF0ZS5yb290VmlzaWJsZVJlY3QgPSBy
b290VmlzaWJsZVJlY3Q7CisgICAgbV9zdGF0ZS52aXNpYmxlUmVjdCA9IG1fc3RhdGUucm9vdFZp
c2libGVSZWN0OworICAgIG1fc3RhdGUudmlzaWJsZVJlY3QuaW50ZXJzZWN0KG1fdHJhbnNmb3Jt
cy5ib3VuZGluZ1JlY3RGcm9tUm9vdCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnVw
bG9hZFRleHR1cmVGcm9tQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25z
dCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgR3JhcGhpY3NMYXllciogbGF5ZXIpCit2b2lkIFRleHR1
cmVNYXBwZXJOb2RlOjpyZW5kZXJDb250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIs
IEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpIHx8ICFs
YXllcikgewotICAgICAgICBtX3RleHR1cmUtPmRlc3Ryb3koKTsKKyAgICBpZiAobV9zaXplLmlz
RW1wdHkoKSB8fCAhbGF5ZXIgfHwgKCFtX3N0YXRlLmRyYXdzQ29udGVudCAmJiBtX2N1cnJlbnRD
b250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSkpIHsKKyAgICAgICAgbV90aWxl
cy5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fY3VycmVudENv
bnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkgewotICAgICAgICBp
ZiAobV9jdXJyZW50Q29udGVudC5pbWFnZSkKLSAgICAgICAgICAgIG1fdGV4dHVyZS0+c2V0Q29u
dGVudHNUb0ltYWdlKG1fY3VycmVudENvbnRlbnQuaW1hZ2UuZ2V0KCkpOworICAgIGlmICghdGV4
dHVyZU1hcHBlcikKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGlmIChtX2N1cnJlbnRD
b250ZW50LmNvbnRlbnRUeXBlID09IE1lZGlhQ29udGVudFR5cGUpIHsKLSAgICAgICAgaWYgKCFt
X2N1cnJlbnRDb250ZW50Lm1lZGlhKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3Rl
eHR1cmUtPnJlc2V0KG1fc2l6ZSwgdHJ1ZSk7Ci0gICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0KiBwbGF0Zm9ybUNvbnRleHQgPSBtX3RleHR1cmUtPmJlZ2luUGFpbnRNZWRpYSgpOwotICAg
ICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChwbGF0Zm9ybUNvbnRleHQpOwotICAgICAgICBt
X2N1cnJlbnRDb250ZW50Lm1lZGlhLT5wYWludCgmY29udGV4dCk7Ci0gICAgICAgIG1fdGV4dHVy
ZS0+ZW5kUGFpbnQoKTsKKyAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBN
ZWRpYUNvbnRlbnRUeXBlKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgY29uc3QgYm9v
bCBuZWVkc1Jlc2V0ID0gKG1fdGV4dHVyZS0+Y29udGVudFNpemUoKSAhPSBtX3NpemUpIHx8ICFt
X3RleHR1cmUtPmlzVmFsaWQoKTsKLSAgICBpZiAoKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5
cGUgIT0gSFRNTENvbnRlbnRUeXBlKQotICAgICAgICB8fCAoIW1fY3VycmVudENvbnRlbnQubmVl
ZHNEaXNwbGF5ICYmIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC5pc0VtcHR5KCkg
JiYgIW5lZWRzUmVzZXQpKQotICAgICAgICByZXR1cm47CisgICAgLy8gRklYTUU6IEFkZCBkaXJl
Y3RseSBjb21wb3NpdGVkIGltYWdlcy4KKyAgICBGbG9hdFJlY3QgZGlydHlSZWN0ID0gbV9jdXJy
ZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPyBlbnRpcmVSZWN0KCkgOiBtX2N1cnJlbnRDb250ZW50
Lm5lZWRzRGlzcGxheVJlY3Q7CisgICAgZGlydHlSZWN0LnNjYWxlKG1fc3RhdGUuY29udGVudFNj
YWxlKTsKKworICAgIGZvciAoc2l6ZV90IHRpbGVJbmRleCA9IDA7IHRpbGVJbmRleCA8IG1fdGls
ZXMuc2l6ZSgpOyArK3RpbGVJbmRleCkgeworICAgICAgICBUaWxlJiB0aWxlID0gbV90aWxlc1t0
aWxlSW5kZXhdOworICAgICAgICBGbG9hdFJlY3QgcmVjdCA9IGRpcnR5UmVjdDsKKyAgICAgICAg
aWYgKCF0aWxlLnRleHR1cmUpCisgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSB0ZXh0dXJlTWFw
cGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiYgdGV4
dHVyZSA9IHRpbGUudGV4dHVyZTsKKyAgICAgICAgSW50U2l6ZSB0aWxlU2l6ZSA9IGVuY2xvc2lu
Z0ludFJlY3QodGlsZS5yZWN0KS5zaXplKCk7CisKKyAgICAgICAgaWYgKHRpbGUubmVlZHNSZXNl
dCB8fCB0ZXh0dXJlLT5jb250ZW50U2l6ZSgpICE9IHRpbGVTaXplIHx8ICF0ZXh0dXJlLT5pc1Zh
bGlkKCkpIHsKKyAgICAgICAgICAgIHRpbGUubmVlZHNSZXNldCA9IGZhbHNlOworICAgICAgICAg
ICAgdGV4dHVyZS0+cmVzZXQodGlsZVNpemUsIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUg
PT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSA/IGZhbHNlIDogbV9zdGF0ZS5jb250ZW50c09wYXF1
ZSk7CisgICAgICAgICAgICByZWN0ID0gdGlsZS5yZWN0OworICAgICAgICB9CiAKLSAgICBJbnRS
ZWN0IGRpcnR5UmVjdCA9IEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWln
aHQoKSk7Ci0gICAgaWYgKCFuZWVkc1Jlc2V0ICYmICFtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlz
cGxheSkKLSAgICAgICAgZGlydHlSZWN0LmludGVyc2VjdChtX2N1cnJlbnRDb250ZW50Lm5lZWRz
RGlzcGxheVJlY3QpOworICAgICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdCh0aWxlLnJlY3QpOworICAgICAgICBjb250ZW50UmVjdC5pbnRlcnNlY3QoZW5jbG9zaW5n
SW50UmVjdChyZWN0KSk7CisgICAgICAgIGlmIChjb250ZW50UmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgIGlmIChuZWVkc1Jlc2V0KQotICAgICAgICBtX3RleHR1
cmUtPnJlc2V0KG1fc2l6ZSwgbV9zdGF0ZS5jb250ZW50c09wYXF1ZSk7CisgICAgICAgIEZsb2F0
UmVjdCBjb250ZW50UmVjdEluVGlsZUNvb3JkaW5hdGVzID0gY29udGVudFJlY3Q7CisgICAgICAg
IEZsb2F0UG9pbnQgb2Zmc2V0KC10aWxlLnJlY3QueCgpLCAtdGlsZS5yZWN0LnkoKSk7CisgICAg
ICAgIGNvbnRlbnRSZWN0SW5UaWxlQ29vcmRpbmF0ZXMubW92ZShvZmZzZXQueCgpLCBvZmZzZXQu
eSgpKTsKIAotICAgIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQobV90ZXh0dXJl
LT5iZWdpblBhaW50KGRpcnR5UmVjdCkpOwotICAgICAgICBpZiAodGV4dHVyZU1hcHBlcikgewor
ICAgICAgICB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCh0ZXh0dXJlLT5i
ZWdpblBhaW50KGVuY2xvc2luZ0ludFJlY3QoY29udGVudFJlY3RJblRpbGVDb29yZGluYXRlcykp
KTsKICAgICAgICAgICAgIGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSh0ZXh0
dXJlTWFwcGVyLT5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpOwogICAgICAgICAgICAgY29u
dGV4dC5zZXRUZXh0RHJhd2luZ01vZGUodGV4dHVyZU1hcHBlci0+dGV4dERyYXdpbmdNb2RlKCkp
OworICAgICAgICAgICAgY29udGV4dC50cmFuc2xhdGUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7
CisgICAgICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZShtX3N0YXRlLmNvbnRlbnRTY2Fs
ZSwgbV9zdGF0ZS5jb250ZW50U2NhbGUpKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBzY2FsZWRD
b250ZW50UmVjdChjb250ZW50UmVjdCk7CisgICAgICAgICAgICBzY2FsZWRDb250ZW50UmVjdC5z
Y2FsZSgxLjAgLyBtX3N0YXRlLmNvbnRlbnRTY2FsZSk7CisgICAgICAgICAgICBpZiAobV9jdXJy
ZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlKQorICAgICAg
ICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1fY3VycmVudENvbnRlbnQuaW1hZ2UuZ2V0KCks
IENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDAsIDApKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBsYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4
dCwgZW5jbG9zaW5nSW50UmVjdChzY2FsZWRDb250ZW50UmVjdCkpOworICAgICAgICAgICAgdGV4
dHVyZS0+ZW5kUGFpbnQoKTsKICAgICAgICAgfQotICAgICAgICBsYXllci0+cGFpbnRHcmFwaGlj
c0xheWVyQ29udGVudHMoY29udGV4dCwgZGlydHlSZWN0KTsKICAgICB9Ci0gICAgbV90ZXh0dXJl
LT5lbmRQYWludCgpOworCiAgICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBmYWxz
ZTsKKyAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QgPSBJbnRSZWN0KCk7CiB9
CiAKLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQoVGV4dHVyZU1hcHBlciogdGV4dHVy
ZU1hcHBlciwgY29uc3QgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6UGFpbnRPcHRpb25zJiBv
cHRpb25zKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQoKQogewotICAgIEFTU0VSVCht
X2xheWVyVHlwZSA9PSBSb290TGF5ZXIpOwogICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBUZXhtYXBQYWludE9wdGlvbnMgb3B0OwotICAgIG9wdC5vcGFj
aXR5ID0gMTsKLSAgICBvcHQucm9vdExheWVyID0gdGhpczsKLSAgICBvcHQuc2Npc3NvclJlY3Qg
PSBvcHRpb25zLnRhcmdldFJlY3Q7Ci0gICAgb3B0LnZpc2libGVSZWN0ID0gb3B0aW9ucy52aXNp
YmxlUmVjdDsKLSAgICBvcHQudGV4dHVyZU1hcHBlciA9IHRleHR1cmVNYXBwZXI7Ci0gICAgb3B0
LnN1cmZhY2UgPSAwOwotICAgIG9wdC5jYWNoZSA9IG1fY2FjaGU7CisgICAgaWYgKCFtX3N1cmZh
Y2VNYW5hZ2VyKQorICAgICAgICBtX3N1cmZhY2VNYW5hZ2VyID0gbmV3IFRleHR1cmVNYXBwZXJT
dXJmYWNlTWFuYWdlcjsKKyAgICBtX3N1cmZhY2VNYW5hZ2VyLT50ZXh0dXJlTWFwcGVyID0gbV90
ZXh0dXJlTWFwcGVyOworICAgIFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMgb3B0OworICAgIG9w
dC5zdXJmYWNlTWFuYWdlciA9IG1fc3VyZmFjZU1hbmFnZXI7CisgICAgb3B0LnRleHR1cmVNYXBw
ZXIgPSBtX3RleHR1cmVNYXBwZXI7CisgICAgb3B0LnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNl
KDApOwogICAgIHBhaW50UmVjdXJzaXZlKG9wdCk7CisgICAgbV9zdXJmYWNlTWFuYWdlci0+cHVy
Z2VUZXh0dXJlcygpOworfQogCi0gICAgaWYgKHRleHR1cmVNYXBwZXItPmFsbG93U3VyZmFjZUZv
clJvb3QoKSB8fCBtX3N0YXRlLmhhc1N1cmZhY2VEZXNjZW5kYW50cykgewotICAgICAgICB0ZXh0
dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKLSAgICAgICAgdGV4dHVyZU1hcHBlci0+cGFpbnRU
b1RhcmdldCgqbV9zdXJmYWNlLmdldCgpLCBvcHRpb25zLnZpZXdwb3J0U2l6ZSwgb3B0aW9ucy50
cmFuc2Zvcm0sIG9wdGlvbnMub3BhY2l0eSAqIG1fc3RhdGUub3BhY2l0eSwgb3B0aW9ucy50YXJn
ZXRSZWN0KTsKLSAgICB9Ci0gICAgbV9jYWNoZS0+cHVyZ2UoKTsKK0Zsb2F0UmVjdCBUZXh0dXJl
TWFwcGVyTm9kZTo6dGFyZ2V0UmVjdEZvclRpbGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmxv
YXRSZWN0KAorICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpICsgKHRpbGVSZWN0LngoKSAt
IHRhcmdldFJlY3QueCgpKSAvIG1fc3RhdGUuY29udGVudFNjYWxlLAorICAgICAgICAgICAgICAg
IHRhcmdldFJlY3QueSgpICsgKHRpbGVSZWN0LnkoKSAtIHRhcmdldFJlY3QueSgpKSAvIG1fc3Rh
dGUuY29udGVudFNjYWxlLAorICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCkgLyBtX3N0
YXRlLmNvbnRlbnRTY2FsZSwKKyAgICAgICAgICAgICAgICB0aWxlUmVjdC5oZWlnaHQoKSAvIG1f
c3RhdGUuY29udGVudFNjYWxlKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRT
ZWxmKGNvbnN0IFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OnBhaW50U2VsZihjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvcHRpb25z
KQogewogICAgIGlmIChtX3NpemUuaXNFbXB0eSgpIHx8ICghbV9zdGF0ZS5kcmF3c0NvbnRlbnQg
JiYgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUpKQogICAg
ICAgICByZXR1cm47CiAKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFza1RleHR1cmU7CiAg
ICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHJlcGxpY2FNYXNrVGV4dHVyZTsKLSAgICBtX3RleHR1
cmUtPnVucGFjaygpOwogCi0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1hc2tUZXh0dXJlID0g
bV9zdGF0ZS5tYXNrTGF5ZXIgPyBtX3N0YXRlLm1hc2tMYXllci0+bV90ZXh0dXJlIDogMDsKKyAg
ICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpCisgICAgICAgIG1hc2tUZXh0dXJlID0gbV9zdGF0ZS5t
YXNrTGF5ZXItPnRleHR1cmUoKTsKICAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIgJiYgbV9z
dGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVyKQotICAgICAgICByZXBsaWNhTWFz
a1RleHR1cmUgPSBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXItPm1fdGV4
dHVyZTsKLQotICAgIGlmIChtYXNrVGV4dHVyZSkKLSAgICAgICAgbWFza1RleHR1cmUtPnVucGFj
aygpOworICAgICAgICByZXBsaWNhTWFza1RleHR1cmUgPSBtX3N0YXRlLnJlcGxpY2FMYXllci0+
bV9zdGF0ZS5tYXNrTGF5ZXItPnRleHR1cmUoKTsKIAotICAgIGlmIChyZXBsaWNhTWFza1RleHR1
cmUpCi0gICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZS0+dW5wYWNrKCk7CisgICAgVGV4dHVyZU1h
cHBlclN1cmZhY2VNYW5hZ2VyOjpUZXh0dXJlR3VhcmQgdXNlTWFza1RleHR1cmUobWFza1RleHR1
cmUuZ2V0KCksIG9wdGlvbnMuc3VyZmFjZU1hbmFnZXIpOworICAgIFRleHR1cmVNYXBwZXJTdXJm
YWNlTWFuYWdlcjo6VGV4dHVyZUd1YXJkIHVzZVJlcGxpY2FNYXNrVGV4dHVyZShyZXBsaWNhTWFz
a1RleHR1cmUuZ2V0KCksIG9wdGlvbnMuc3VyZmFjZU1hbmFnZXIpOwogCiAgICAgY29uc3QgZmxv
YXQgb3BhY2l0eSA9IG9wdGlvbnMuaXNTdXJmYWNlID8gMSA6IG9wdGlvbnMub3BhY2l0eTsKIAot
ICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiAhb3B0aW9ucy5pc1N1cmZhY2UpCi0gICAg
ICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKm1fdGV4dHVyZS5nZXQoKSwg
cmVwbGljYVJlY3QoKSwgbV90cmFuc2Zvcm1zLnJlcGxpY2EsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgb3BhY2l0eSAqIG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm9wYWNpdHksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJlID8gcmVwbGljYU1hc2tU
ZXh0dXJlLmdldCgpIDogbWFza1RleHR1cmUuZ2V0KCkpOworICAgIGNvbnN0IEZsb2F0UmVjdCB0
YXJnZXRSZWN0ID0gdGhpcy0+dGFyZ2V0UmVjdCgpOworCisgICAgaWYgKG1fY3VycmVudENvbnRl
bnQuY29udGVudFR5cGUgPT0gTWVkaWFDb250ZW50VHlwZSAmJiBtX2N1cnJlbnRDb250ZW50Lm1l
ZGlhKSB7CisgICAgICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiAhb3B0aW9ucy5pc1N1
cmZhY2UpCisgICAgICAgICAgICBtX2N1cnJlbnRDb250ZW50Lm1lZGlhLT5wYWludFRvVGV4dHVy
ZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIsIHRhcmdldFJlY3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeChtX3RyYW5zZm9ybXMudGFyZ2V0KS5tdWx0aXBseShtX3N0YXRlLnJlcGxpY2FMYXll
ci0+bV90cmFuc2Zvcm1zLmxvY2FsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHkgKiBtX3N0YXRlLnJlcGxpY2FMYXllci0+
bV9vcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJlID8gcmVwbGljYU1hc2tUZXh0dXJlLmdldCgp
IDogbWFza1RleHR1cmUuZ2V0KCkpOworICAgICAgICBtX2N1cnJlbnRDb250ZW50Lm1lZGlhLT5w
YWludFRvVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIsIHRhcmdldFJlY3QsIG1f
dHJhbnNmb3Jtcy50YXJnZXQsIG9wYWNpdHksIG9wdGlvbnMuaXNTdXJmYWNlID8gMCA6IG1hc2tU
ZXh0dXJlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGNvbnN0IEludFJl
Y3QgcmVjdCA9IG1fbGF5ZXJUeXBlID09IENsaXBMYXllciA/IGVudGlyZVJlY3QoKSA6IHRhcmdl
dFJlY3QoKTsKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBtX2xh
eWVyVHlwZSA9PSBDbGlwTGF5ZXIgPyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIDogbV90cmFuc2Zv
cm1zLnRhcmdldDsKLSAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCptX3Rl
eHR1cmUuZ2V0KCksIHJlY3QsIHRyYW5zZm9ybSwgb3BhY2l0eSwgb3B0aW9ucy5pc1N1cmZhY2Ug
PyAwIDogbWFza1RleHR1cmUuZ2V0KCkpOwotICAgIG9wdGlvbnMuY2FjaGUtPm1hcmsobV90ZXh0
dXJlLmdldCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGlsZXMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgQml0bWFwVGV4dHVyZSogdGV4dHVyZSA9IG1fdGlsZXNbaV0udGV4dHVy
ZS5nZXQoKTsKKyAgICAgICAgVGV4dHVyZU1hcHBlclN1cmZhY2VNYW5hZ2VyOjpUZXh0dXJlR3Vh
cmQgdXNlVGV4dHVyZSh0ZXh0dXJlLCBvcHRpb25zLnN1cmZhY2VNYW5hZ2VyKTsKKyAgICAgICAg
aWYgKG1fc3RhdGUucmVwbGljYUxheWVyICYmICFvcHRpb25zLmlzU3VyZmFjZSkgeworICAgICAg
ICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqdGV4dHVyZSwgdGFyZ2V0
UmVjdEZvclRpbGVSZWN0KHRhcmdldFJlY3QsIG1fdGlsZXNbaV0ucmVjdCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KG1fdHJhbnNmb3Jtcy50YXJn
ZXQpLm11bHRpcGx5KG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3RyYW5zZm9ybXMubG9jYWwpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5ICogbV9zdGF0ZS5yZXBsaWNhTGF5
ZXItPm1fb3BhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGljYU1hc2tU
ZXh0dXJlID8gcmVwbGljYU1hc2tUZXh0dXJlLmdldCgpIDogbWFza1RleHR1cmUuZ2V0KCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgY29uc3QgRmxvYXRSZWN0IHJlY3QgPSB0YXJnZXRSZWN0Rm9y
VGlsZVJlY3QodGFyZ2V0UmVjdCwgbV90aWxlc1tpXS5yZWN0KTsKKyAgICAgICAgb3B0aW9ucy50
ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqdGV4dHVyZSwgcmVjdCwgbV90cmFuc2Zvcm1zLnRh
cmdldCwgb3BhY2l0eSwgb3B0aW9ucy5pc1N1cmZhY2UgPyAwIDogbWFza1RleHR1cmUuZ2V0KCkp
OworICAgIH0KIH0KIAotYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRSZXBsaWNhKGNvbnN0
IFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9ucykKK2ludCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29t
cGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiB7
Ci0gICAgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSA9ICptX3N1cmZhY2UuZ2V0KCk7Ci0gICAgVGV4
dHVyZU1hcHBlck5vZGUqIHJlcGxpY2EgPSBtX3N0YXRlLnJlcGxpY2FMYXllcjsKLSAgICBSZWZQ
dHI8Qml0bWFwVGV4dHVyZT4gbWFza1RleHR1cmU7Ci0gICAgaWYgKFRleHR1cmVNYXBwZXJOb2Rl
KiBtYXNrID0gbV9zdGF0ZS5tYXNrTGF5ZXIpCi0gICAgICAgIG1hc2tUZXh0dXJlID0gbWFzay0+
bV90ZXh0dXJlOwotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiByZXBsaWNhTWFza1RleHR1cmU7
Ci0gICAgaWYgKCFyZXBsaWNhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAocmVw
bGljYSAmJiByZXBsaWNhLT5tX3N0YXRlLm1hc2tMYXllcikKLSAgICAgICAgcmVwbGljYU1hc2tU
ZXh0dXJlID0gcmVwbGljYS0+bV9zdGF0ZS5tYXNrTGF5ZXItPm1fdGV4dHVyZTsKLQotICAgIGlm
IChyZXBsaWNhTWFza1RleHR1cmUpCi0gICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZS0+dW5wYWNr
KCk7Ci0gICAgQVNTRVJUKG1fcmVwbGljYVN1cmZhY2UpOwotICAgIG1fcmVwbGljYVN1cmZhY2Ut
PnJlc2V0KG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgpKTsKLSAgICBtX3JlcGxpY2FTdXJmYWNlLT5z
ZXRPZmZzZXQob3B0aW9ucy5zdXJmYWNlLT5vZmZzZXQoKSk7Ci0gICAgb3B0aW9ucy5jYWNoZS0+
bWFyayhtX3JlcGxpY2FTdXJmYWNlLmdldCgpKTsKLSAgICBvcHRpb25zLnRleHR1cmVNYXBwZXIt
PmJpbmRTdXJmYWNlKG1fcmVwbGljYVN1cmZhY2UuZ2V0KCkpOwotICAgIG9wdGlvbnMudGV4dHVy
ZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwgcmVwbGljYVJlY3QoKSwgbV90cmFuc2Zvcm1z
LnJlcGxpY2EsIHJlcGxpY2EtPm1fc3RhdGUub3BhY2l0eSwgcmVwbGljYU1hc2tUZXh0dXJlID8g
cmVwbGljYU1hc2tUZXh0dXJlLmdldCgpIDogbWFza1RleHR1cmUuZ2V0KCkpOwotICAgIG9wdGlv
bnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwgSW50UmVjdChJbnRQb2ludCgw
LCAwKSwgb3B0aW9ucy5zdXJmYWNlLT5zaXplKCkpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCAx
LjBmLCBtYXNrVGV4dHVyZS5nZXQoKSk7Ci0gICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5k
U3VyZmFjZShvcHRpb25zLnN1cmZhY2UpOwotICAgIG9wdGlvbnMuY2FjaGUtPm1hcmsob3B0aW9u
cy5zdXJmYWNlKTsKLSAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCptX3Jl
cGxpY2FTdXJmYWNlLmdldCgpLCBJbnRSZWN0KEludFBvaW50KDAsIDApLCBvcHRpb25zLnN1cmZh
Y2UtPnNpemUoKSksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIG9wdGlvbnMub3BhY2l0eSwgMCk7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIGNvbnN0KiBub2RlQSA9
IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJOb2RlKiBjb25zdCo+KGEpOworICAgIFRleHR1cmVN
YXBwZXJOb2RlKiBjb25zdCogbm9kZUIgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyTm9kZSog
Y29uc3QqPihiKTsKKyAgICByZXR1cm4gaW50KCgoKm5vZGVBKS0+bV90cmFuc2Zvcm1zLmNlbnRl
clogLSAoKm5vZGVCKS0+bV90cmFuc2Zvcm1zLmNlbnRlclopICogMTAwMCk7CiB9CiAKLXZvaWQg
VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U3VyZmFjZShjb25zdCBUZXhtYXBQYWludE9wdGlvbnMm
IG9wdGlvbnMpCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzb3J0QnlaT3JkZXIoVmVjdG9yPFRl
eHR1cmVNYXBwZXJOb2RlKiA+JiBhcnJheSwgaW50IGZpcnN0LCBpbnQgbGFzdCkKIHsKLSAgICBp
ZiAobV9sYXllclR5cGUgPT0gUm9vdExheWVyIHx8IG1fbGF5ZXJUeXBlID09IERlZmF1bHRMYXll
ciB8fCBtX2xheWVyVHlwZSA9PSBTY2lzc29yTGF5ZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBx
c29ydChhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgc2l6ZW9mKFRleHR1cmVNYXBwZXJOb2Rl
KiksIGNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZSk7Cit9CiAKLSAgICBSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gbWFza1RleHR1cmU7Ci0gICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBtYXNrID0g
bV9zdGF0ZS5tYXNrTGF5ZXIpCi0gICAgICAgIG1hc2tUZXh0dXJlID0gbWFzay0+bV90ZXh0dXJl
Owordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmQW5kQ2hpbGRyZW4oY29uc3QgVGV4
dHVyZU1hcHBlclBhaW50T3B0aW9ucyYgb3B0aW9ucywgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9u
cyYgb3B0aW9uc0ZvckRlc2NlbmRhbnRzKQoreworICAgIGJvb2wgaGFzQ2xpcCA9IG1fc3RhdGUu
bWFza3NUb0JvdW5kcyAmJiAhbV9jaGlsZHJlbi5pc0VtcHR5KCk7CisgICAgaWYgKGhhc0NsaXAp
CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKG1fdHJhbnNmb3Jtcy5m
b3JEZXNjZW5kYW50cywgRmxvYXRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVp
Z2h0KCkpKTsKIAotICAgIEFTU0VSVChtX3N1cmZhY2UpOwotICAgIEJpdG1hcFRleHR1cmUmIHRl
eHR1cmUgPSAqbV9zdXJmYWNlLmdldCgpOwotICAgIGlmIChtYXNrVGV4dHVyZSkKLSAgICAgICAg
bWFza1RleHR1cmUtPnVucGFjaygpOwotICAgIHRleHR1cmUudW5wYWNrKCk7CisgICAgcGFpbnRT
ZWxmKG9wdGlvbnMpOwogCi0gICAgaWYgKHBhaW50UmVwbGljYShvcHRpb25zKSkKLSAgICAgICAg
cmV0dXJuOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkK
KyAgICAgICAgbV9jaGlsZHJlbltpXS0+cGFpbnRSZWN1cnNpdmUob3B0aW9uc0ZvckRlc2NlbmRh
bnRzKTsKIAotICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uob3B0aW9ucy5z
dXJmYWNlKTsKLSAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKHRleHR1cmUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5j
eUxheWVyID8gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgb3B0aW9ucy5zdXJmYWNlLT5zaXplKCkp
IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UmVjdCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllciA/IFRy
YW5zZm9ybWF0aW9uTWF0cml4KCkgOiBtX3RyYW5zZm9ybXMudGFyZ2V0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcHRpb25zLm9wYWNpdHksIG1hc2tUZXh0dXJlLmdldCgpKTsKLSAg
ICBvcHRpb25zLmNhY2hlLT5tYXJrKCZ0ZXh0dXJlKTsKKyAgICBpZiAoaGFzQ2xpcCkKKyAgICAg
ICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5lbmRDbGlwKCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1h
cHBlck5vZGU6OnBhaW50U2VsZkFuZENoaWxkcmVuKGNvbnN0IFRleG1hcFBhaW50T3B0aW9ucyYg
b3B0aW9ucywgVGV4bWFwUGFpbnRPcHRpb25zJiBvcHRpb25zRm9yRGVzY2VuZGFudHMpCitib29s
IFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFJlZmxlY3Rpb24oY29uc3QgVGV4dHVyZU1hcHBlclBh
aW50T3B0aW9ucyYgb3B0aW9ucywgQml0bWFwVGV4dHVyZSogY29udGVudFN1cmZhY2UpCiB7Ci0g
ICAgYm9vbCBkaWRQYWludFNlbGYgPSBmYWxzZTsKLSAgICBpZiAoIW1fc3RhdGUucHJlc2VydmVz
M0QgfHwgbV9jaGlsZHJlbi5pc0VtcHR5KCkpIHsKLSAgICAgICAgcGFpbnRTZWxmKG9wdGlvbnMp
OwotICAgICAgICBkaWRQYWludFNlbGYgPSB0cnVlOwotICAgIH0KKyAgICBpZiAoIW1fc3RhdGUu
cmVwbGljYUxheWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9jaGlsZHJl
bi5pc0VtcHR5KCkgJiYgIW9wdGlvbnMuaXNTdXJmYWNlKQotICAgICAgICByZXR1cm47CisgICAg
UmVmUHRyPEJpdG1hcFRleHR1cmU+IHN1cmZhY2UoY29udGVudFN1cmZhY2UpOworICAgIFJlZlB0
cjxCaXRtYXBUZXh0dXJlPiBtYXNrU3VyZmFjZTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
cmVwbGljYU1hc2tTdXJmYWNlOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiByZXBsaWNhTWFz
a1RleHR1cmU7CiAKLSAgICBpZiAobV9sYXllclR5cGUgPT0gU2Npc3NvckxheWVyKQotICAgICAg
ICBvcHRpb25zRm9yRGVzY2VuZGFudHMuc2Npc3NvclJlY3QuaW50ZXJzZWN0KG1fdHJhbnNmb3Jt
cy50YXJnZXQubWFwUmVjdChJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVp
Z2h0KCkpKSk7CisgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiByZXBsaWNhTWFzayA9IG1fc3Rh
dGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllcikKKyAgICAgICAgcmVwbGljYU1hc2tU
ZXh0dXJlID0gcmVwbGljYU1hc2stPnRleHR1cmUoKTsKIAotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSog
bGF5ZXIgPSBtX2NoaWxkcmVuW2ldOwotICAgICAgICBpZiAoIWxheWVyKQotICAgICAgICAgICAg
Y29udGludWU7CisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1hc2tUZXh0dXJlOworICAgIGlm
IChUZXh0dXJlTWFwcGVyTm9kZSogbWFzayA9IG1fc3RhdGUubWFza0xheWVyKQorICAgICAgICBt
YXNrVGV4dHVyZSA9IG1hc2stPnRleHR1cmUoKTsKKworICAgIFRleHR1cmVNYXBwZXJTdXJmYWNl
TWFuYWdlcjo6VGV4dHVyZUd1YXJkIHVzZU1hc2tUZXh0dXJlKG1hc2tUZXh0dXJlLmdldCgpLCBv
cHRpb25zLnN1cmZhY2VNYW5hZ2VyKTsKKyAgICBUZXh0dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXI6
OlRleHR1cmVHdWFyZCB1c2VSZXBsaWNhTWFza1RleHR1cmUocmVwbGljYU1hc2tUZXh0dXJlLmdl
dCgpLCBvcHRpb25zLnN1cmZhY2VNYW5hZ2VyKTsKKworICAgIGNvbnN0IEludFNpemUgdmlld3Bv
cnRTaXplID0gb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT52aWV3cG9ydFNpemUoKTsKKyAgICBjb25z
dCBib29sIHVzZUludGVybWVkaWF0ZUJ1ZmZlckZvclJlcGxpY2EgPSBtX3N0YXRlLnJlcGxpY2FM
YXllciAmJiBvcHRpb25zLm9wYWNpdHkgPCAwLjk5OworICAgIGNvbnN0IGJvb2wgdXNlSW50ZXJt
ZWRpYXRlQnVmZmVyRm9yTWFzayA9IG1hc2tUZXh0dXJlICYmIHJlcGxpY2FNYXNrVGV4dHVyZTsK
KyAgICBjb25zdCBGbG9hdFJlY3Qgdmlld3BvcnRSZWN0KDAsIDAsIHZpZXdwb3J0U2l6ZS53aWR0
aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpOworCisgICAgLy8gVGhlIG1hc2sgaGFzIHRvIGJl
IGFkanVzdGVkIHRvIHRhcmdldCBjb29yZGluYXRlcy4KKyAgICBpZiAobWFza1RleHR1cmUpIHsK
KyAgICAgICAgbWFza1N1cmZhY2UgPSBvcHRpb25zLnN1cmZhY2VNYW5hZ2VyLT5nZXRJbnRlcm1l
ZGlhdGVTdXJmYWNlKCk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZh
Y2UobWFza1N1cmZhY2UuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRy
YXdUZXh0dXJlKCptYXNrVGV4dHVyZS5nZXQoKSwgZW50aXJlUmVjdCgpLCBtX3RyYW5zZm9ybXMu
dGFyZ2V0LCAxLCAwKTsKKyAgICAgICAgbWFza1RleHR1cmUgPSBtYXNrU3VyZmFjZTsKKyAgICB9
CiAKLSAgICAgICAgaWYgKCFkaWRQYWludFNlbGYgJiYgbGF5ZXItPm1fdHJhbnNmb3Jtcy5jZW50
ZXJaID49IDApIHsKLSAgICAgICAgICAgIHBhaW50U2VsZihvcHRpb25zKTsKLSAgICAgICAgICAg
IGRpZFBhaW50U2VsZiA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgbGF5ZXItPnBhaW50UmVj
dXJzaXZlKG9wdGlvbnNGb3JEZXNjZW5kYW50cyk7Ci0gICAgICAgIGlmIChvcHRpb25zLmlzU3Vy
ZmFjZSkgewotICAgICAgICAgICAgQVNTRVJUKG1fc3VyZmFjZSk7Ci0gICAgICAgICAgICBvcHRp
b25zLmNhY2hlLT5tYXJrKG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgICAgICAgICBvcHRpb25zLnRl
eHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgICAgIH0KKyAg
ICAvLyBUaGUgcmVwbGljYSdzIG1hc2sgaGFzIHRvIGJlIGFkanVzdGVkIHRvIHRhcmdldCBjb29y
ZGluYXRlcy4KKyAgICBpZiAocmVwbGljYU1hc2tUZXh0dXJlKSB7CisgICAgICAgIHJlcGxpY2FN
YXNrU3VyZmFjZSA9IG9wdGlvbnMuc3VyZmFjZU1hbmFnZXItPmdldEludGVybWVkaWF0ZVN1cmZh
Y2UoKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShyZXBsaWNh
TWFza1N1cmZhY2UuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdU
ZXh0dXJlKCpyZXBsaWNhTWFza1RleHR1cmUuZ2V0KCksIGVudGlyZVJlY3QoKSwgbV90cmFuc2Zv
cm1zLnRhcmdldCwgMSwgMCk7CisgICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZSA9IHJlcGxpY2FN
YXNrU3VyZmFjZTsKKyAgICB9CisKKyAgICAvLyBXZSBtaWdodCBuZWVkIHRvIGFwcGx5IHRoZSBt
YXNrIG9mIHRoZSBjb250ZW50IGxheWVyIGJlZm9yZSB3ZSBkcmF3IHRoZSByZWZsZWN0aW9uLCBh
cyB0aGVyZSBtaWdodCBiZSB5ZXQgYW5vdGhlciBtYXNrIGZvciB0aGUgcmVmbGVjdGlvbiBpdHNl
bGYuCisgICAgaWYgKHVzZUludGVybWVkaWF0ZUJ1ZmZlckZvck1hc2spIHsKKyAgICAgICAgUmVm
UHRyPEJpdG1hcFRleHR1cmU+IG1hc2tTdXJmYWNlID0gb3B0aW9ucy5zdXJmYWNlTWFuYWdlci0+
Z2V0SW50ZXJtZWRpYXRlU3VyZmFjZSgpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXIt
PmJpbmRTdXJmYWNlKG1hc2tTdXJmYWNlLmdldCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJl
TWFwcGVyLT5kcmF3VGV4dHVyZSgqc3VyZmFjZS5nZXQoKSwgdmlld3BvcnRSZWN0LCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpLCAxLCBtYXNrVGV4dHVyZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMu
c3VyZmFjZU1hbmFnZXItPnJlbGVhc2VJbnRlcm1lZGlhdGVTdXJmYWNlKHN1cmZhY2UuZ2V0KCkp
OworICAgICAgICBzdXJmYWNlID0gbWFza1N1cmZhY2U7CisgICAgICAgIG1hc2tUZXh0dXJlLmNs
ZWFyKCk7CiAgICAgfQotICAgIGlmICghZGlkUGFpbnRTZWxmKSB7Ci0gICAgICAgIHBhaW50U2Vs
ZihvcHRpb25zKTsKLSAgICAgICAgZGlkUGFpbnRTZWxmID0gdHJ1ZTsKKworICAgIC8vIFdlIGJs
ZW5kIHRoZSBsYXllciBhbmQgaXRzIHJlcGxpY2EgaW4gYW4gaW50ZXJtZWRpYXRlIGJ1ZmZlciBi
ZWZvcmUgYmxlbmRpbmcgaW50byB0aGUgdGFyZ2V0IHN1cmZhY2UuCisgICAgaWYgKHVzZUludGVy
bWVkaWF0ZUJ1ZmZlckZvclJlcGxpY2EpIHsKKyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+
IHJlcGxpY2FTdXJmYWNlID0gb3B0aW9ucy5zdXJmYWNlTWFuYWdlci0+Z2V0SW50ZXJtZWRpYXRl
U3VyZmFjZSgpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKHJl
cGxpY2FTdXJmYWNlLmdldCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3
VGV4dHVyZSgqc3VyZmFjZS5nZXQoKSwgdmlld3BvcnRSZWN0LCBtX3RyYW5zZm9ybXMucmVwbGlj
YSwgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fb3BhY2l0eSwgcmVwbGljYU1hc2tUZXh0dXJlLmdl
dCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqc3VyZmFj
ZS5nZXQoKSwgdmlld3BvcnRSZWN0LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCAxLCBtYXNrVGV4
dHVyZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMuc3VyZmFjZU1hbmFnZXItPnJlbGVhc2VJbnRl
cm1lZGlhdGVTdXJmYWNlKHN1cmZhY2UuZ2V0KCkpOworICAgICAgICBzdXJmYWNlID0gcmVwbGlj
YVN1cmZhY2U7CiAgICAgfQorCisgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFj
ZShvcHRpb25zLnN1cmZhY2UpOworCisgICAgLy8gRHJhdyB0aGUgcmVmbGVjdGlvbi4KKyAgICBp
ZiAoIXVzZUludGVybWVkaWF0ZUJ1ZmZlckZvclJlcGxpY2EpCisgICAgICAgIG9wdGlvbnMudGV4
dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKnN1cmZhY2UuZ2V0KCksIHZpZXdwb3J0UmVjdCwgbV90
cmFuc2Zvcm1zLnJlcGxpY2EsIG1fc3RhdGUucmVwbGljYUxheWVyLT5tX29wYWNpdHksIHJlcGxp
Y2FNYXNrVGV4dHVyZS5nZXQoKSk7CisKKyAgICAvLyBEcmF3IHRoZSBvcmlnaW5hbC4KKyAgICBv
cHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCpzdXJmYWNlLmdldCgpLCB2aWV3cG9y
dFJlY3QsIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIG9wdGlvbnMub3BhY2l0eSwgbWFza1RleHR1
cmUuZ2V0KCkpOworCisgICAgb3B0aW9ucy5zdXJmYWNlTWFuYWdlci0+cmVsZWFzZUludGVybWVk
aWF0ZVN1cmZhY2UobWFza1N1cmZhY2UuZ2V0KCkpOworICAgIG9wdGlvbnMuc3VyZmFjZU1hbmFn
ZXItPnJlbGVhc2VJbnRlcm1lZGlhdGVTdXJmYWNlKHJlcGxpY2FNYXNrU3VyZmFjZS5nZXQoKSk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRS
ZWN1cnNpdmUoVGV4bWFwUGFpbnRPcHRpb25zIG9wdGlvbnMpCit2b2lkIFRleHR1cmVNYXBwZXJO
b2RlOjpwYWludFJlY3Vyc2l2ZShUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zIG9wdGlvbnMpCiB7
Ci0gICAgYm9vbCBpc0RpcnR5ID0gbV9zdGF0ZS5kaXJ0eTsKLSAgICBtX3N0YXRlLmRpcnR5ID0g
ZmFsc2U7Ci0KICAgICBpZiAoKG1fc2l6ZS5pc0VtcHR5KCkgJiYgKG1fc3RhdGUubWFza3NUb0Jv
dW5kcwotICAgICAgICB8fCBtX2NoaWxkcmVuLmlzRW1wdHkoKSkpIHx8ICFtX3N0YXRlLnZpc2li
bGUgfHwgb3B0aW9ucy5vcGFjaXR5IDwgMC4wMSB8fCBtX3N0YXRlLm9wYWNpdHkgPCAwLjAxKQor
ICAgICAgICB8fCBtX2NoaWxkcmVuLmlzRW1wdHkoKSkpIHx8ICFtX3N0YXRlLnZpc2libGUgfHwg
b3B0aW9ucy5vcGFjaXR5IDwgMC4wMSB8fCBtX29wYWNpdHkgPCAwLjAxKQogICAgICAgICByZXR1
cm47CiAKLSAgICBjb21wdXRlUmVwbGljYVRyYW5zZm9ybSgpOworICAgIG9wdGlvbnMub3BhY2l0
eSAqPSBtX29wYWNpdHk7CisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHN1cmZhY2U7CisgICAg
Y29uc3QgYm9vbCBuZWVkc1R3b1Bhc3MgPSAoKG1fc3RhdGUucmVwbGljYUxheWVyIHx8IG1fc3Rh
dGUubWFza0xheWVyKSAmJiAhbV9jaGlsZHJlbi5pc0VtcHR5KCkpIHx8IChtX29wYWNpdHkgPCAw
Ljk5ICYmIG1fc3RhdGUubWlnaHRIYXZlT3ZlcmxhcHMpIHx8IChtX29wYWNpdHkgPCAwLjk5ICYm
IG1fc3RhdGUucmVwbGljYUxheWVyKTsKKyAgICBjb25zdCBJbnRTaXplIHZpZXdwb3J0U2l6ZSA9
IG9wdGlvbnMudGV4dHVyZU1hcHBlci0+dmlld3BvcnRTaXplKCk7CisgICAgb3B0aW9ucy5pc1N1
cmZhY2UgPSBmYWxzZTsKIAotICAgIGlmIChtX3N0YXRlLm1hc2tMYXllcikKLSAgICAgICAgbV9z
dGF0ZS5tYXNrTGF5ZXItPm1fc3RhdGUuZGlydHkgPSBmYWxzZTsKKyAgICBUZXh0dXJlTWFwcGVy
UGFpbnRPcHRpb25zIG9wdGlvbnNGb3JEZXNjZW5kYW50cyhvcHRpb25zKTsKIAotICAgIGlmICht
X3N0YXRlLnJlcGxpY2FMYXllcikgewotICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9z
dGF0ZS5kaXJ0eSA9IGZhbHNlOwotICAgICAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1f
c3RhdGUubWFza0xheWVyKQotICAgICAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3Rh
dGUubWFza0xheWVyLT5tX3N0YXRlLmRpcnR5ID0gZmFsc2U7CisgICAgaWYgKCFuZWVkc1R3b1Bh
c3MpIHsKKyAgICAgICAgcGFpbnRTZWxmQW5kQ2hpbGRyZW4ob3B0aW9ucywgb3B0aW9uc0ZvckRl
c2NlbmRhbnRzKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IGJvb2wgaXNT
dXJmYWNlID0gKG1fbGF5ZXJUeXBlID09IENsaXBMYXllcgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgKG1fbGF5ZXJUeXBlID09IFJvb3RMYXllcgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiAob3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5hbGxvd1N1cmZh
Y2VGb3JSb290KCkgfHwgbV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIEZsb2F0UmVjdCB2aWV3cG9ydFJlY3QoMCwg
MCwgdmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSk7CiAKLSAgICBj
b25zdCBJbnRSZWN0IGJvdW5kaW5nUmVjdGZyb21OZWFyZXN0U3VyZmFjZSA9IG1fdHJhbnNmb3Jt
cy50YXJnZXRCb3VuZGluZ1JlY3Q7CisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1hc2tTdXJm
YWNlOwogCi0gICAgb3B0aW9ucy5vcGFjaXR5ICo9IG1fc3RhdGUub3BhY2l0eTsKLQotICAgIFRl
eG1hcFBhaW50T3B0aW9ucyBvcHRpb25zRm9yRGVzY2VuZGFudHMob3B0aW9ucyk7Ci0gICAgb3B0
aW9uc0ZvckRlc2NlbmRhbnRzLm9wYWNpdHkgPSBpc1N1cmZhY2UgPyAxIDogb3B0aW9ucy5vcGFj
aXR5OwotICAgIG9wdGlvbnMuaXNTdXJmYWNlID0gaXNTdXJmYWNlOwotCi0gICAgaWYgKG1fbGF5
ZXJUeXBlID09IENsaXBMYXllcikgewotICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMudmlz
aWJsZVJlY3QgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLnRyYW5zbGF0ZSgtYm91bmRpbmdSZWN0
ZnJvbU5lYXJlc3RTdXJmYWNlLngoKSwgLWJvdW5kaW5nUmVjdGZyb21OZWFyZXN0U3VyZmFjZS55
KCkpLm1hcFJlY3Qob3B0aW9ucy52aXNpYmxlUmVjdCk7Ci0gICAgICAgIG9wdGlvbnNGb3JEZXNj
ZW5kYW50cy5zY2lzc29yUmVjdCA9IEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6
ZS5oZWlnaHQoKSk7CisgICAgLy8gVGhlIG1hc2sgaGFzIHRvIGJlIGFkanVzdGVkIHRvIHRhcmdl
dCBjb29yZGluYXRlcy4KKyAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpIHsKKyAgICAgICAgbWFz
a1N1cmZhY2UgPSBvcHRpb25zLnN1cmZhY2VNYW5hZ2VyLT5nZXRJbnRlcm1lZGlhdGVTdXJmYWNl
KCk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UobWFza1N1cmZh
Y2UuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCpt
X3N0YXRlLm1hc2tMYXllci0+dGV4dHVyZSgpLCBlbnRpcmVSZWN0KCksIG1fdHJhbnNmb3Jtcy50
YXJnZXQsIDEuMCwgMCk7CiAgICAgfQogCi0gICAgaWYgKG1fbGF5ZXJUeXBlID09IFNjaXNzb3JM
YXllcikKLSAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0LmludGVyc2Vj
dChtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0KTsKLSAgICBvcHRpb25zLnRleHR1cmVN
YXBwZXItPnNldENsaXAob3B0aW9uc0ZvckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0KTsKLQotICAg
IFRleHR1cmVNYXBwZXJDYWNoZUxvY2sobV90ZXh0dXJlLmdldCgpKTsKLSAgICBUZXh0dXJlTWFw
cGVyQ2FjaGVMb2NrKG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgVGV4dHVyZU1hcHBlckNhY2hlTG9j
ayhtX3JlcGxpY2FTdXJmYWNlLmdldCgpKTsKKyAgICBzdXJmYWNlID0gb3B0aW9ucy5zdXJmYWNl
TWFuYWdlci0+Z2V0SW50ZXJtZWRpYXRlU3VyZmFjZSgpOworICAgIG9wdGlvbnNGb3JEZXNjZW5k
YW50cy5zdXJmYWNlID0gc3VyZmFjZS5nZXQoKTsKKyAgICBvcHRpb25zLmlzU3VyZmFjZSA9IHRy
dWU7CisgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLm9wYWNpdHkgPSAxOworICAgIG9wdGlvbnMu
dGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uoc3VyZmFjZS5nZXQoKSk7CiAKLSAgICBvcHRpb25z
LmNhY2hlLT5wdXJnZSgpOworICAgIHBhaW50U2VsZkFuZENoaWxkcmVuKG9wdGlvbnMsIG9wdGlv
bnNGb3JEZXNjZW5kYW50cyk7CiAKLSAgICBpZiAoaXNTdXJmYWNlKSB7Ci0gICAgICAgIEFTU0VS
VChtX3N1cmZhY2UpOwotICAgICAgICBpZiAoIW1fc3VyZmFjZS0+aXNWYWxpZCgpKQotICAgICAg
ICAgICAgaXNEaXJ0eSA9IHRydWU7Ci0gICAgICAgIGlmIChtX3N0YXRlLnRpbGVkKSB7Ci0gICAg
ICAgICAgICBtX3N1cmZhY2UtPnJlc2V0KG9wdGlvbnMudmlzaWJsZVJlY3Quc2l6ZSgpKTsKLSAg
ICAgICAgICAgIG1fc3VyZmFjZS0+c2V0T2Zmc2V0KG9wdGlvbnMudmlzaWJsZVJlY3QubG9jYXRp
b24oKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNEaXJ0eSkKLSAgICAgICAgICAgIG1fc3VyZmFj
ZS0+cmVzZXQobV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBvcHRpb25zLnN1cmZh
Y2UtPnNpemUoKSA6IG1fc2l6ZSk7Ci0gICAgICAgIG9wdGlvbnMuY2FjaGUtPm1hcmsobV9zdXJm
YWNlLmdldCgpKTsKLSAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSht
X3N1cmZhY2UuZ2V0KCkpOwotICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMuc3VyZmFjZSA9
IG1fc3VyZmFjZS5nZXQoKTsKLSAgICB9IGVsc2UgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAgbV9z
dXJmYWNlLT5kZXN0cm95KCk7Ci0KLSAgICBpZiAoaXNEaXJ0eSB8fCAhaXNTdXJmYWNlIHx8IG1f
c3RhdGUudGlsZWQgfHwgIW1fc3VyZmFjZS0+aXNWYWxpZCgpKQotICAgICAgICBwYWludFNlbGZB
bmRDaGlsZHJlbihvcHRpb25zLCBvcHRpb25zRm9yRGVzY2VuZGFudHMpOworICAgIGlmICghcGFp
bnRSZWZsZWN0aW9uKG9wdGlvbnMsIHN1cmZhY2UuZ2V0KCkpKSB7CisgICAgICAgIG9wdGlvbnMu
dGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uob3B0aW9ucy5zdXJmYWNlKTsKKyAgICAgICAgb3B0
aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqc3VyZmFjZS5nZXQoKSwgdmlld3BvcnRS
ZWN0LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBvcHRpb25zLm9wYWNpdHksIDApOworICAgIH0K
IAotICAgIHBhaW50U3VyZmFjZShvcHRpb25zKTsKKyAgICBvcHRpb25zLnN1cmZhY2VNYW5hZ2Vy
LT5yZWxlYXNlSW50ZXJtZWRpYXRlU3VyZmFjZShzdXJmYWNlLmdldCgpKTsKKyAgICBvcHRpb25z
LnN1cmZhY2VNYW5hZ2VyLT5yZWxlYXNlSW50ZXJtZWRpYXRlU3VyZmFjZShtYXNrU3VyZmFjZS5n
ZXQoKSk7CiB9CiAKIFRleHR1cmVNYXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5vZGUoKQogewot
ICAgIHNldE5lZWRzRGlzcGxheSgpOwotICAgIHsKLSAgICAgICAgY29uc3QgaW50IGNoaWxkcmVu
U2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gY2hpbGRyZW5T
aXplLTE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9jaGlsZHJlbltpXS0+
bV9wYXJlbnQgPT0gdGhpcyk7Ci0gICAgICAgICAgICBtX2NoaWxkcmVuW2ldLT5tX3BhcmVudCA9
IDA7Ci0gICAgICAgIH0KLSAgICB9CisgICAgZm9yIChpbnQgaSA9IG1fY2hpbGRyZW4uc2l6ZSgp
IC0gMTsgaSA+PSAwOyAtLWkpCisgICAgICAgIG1fY2hpbGRyZW5baV0tPm1fcGFyZW50ID0gMDsK
KwogICAgIGlmIChtX3BhcmVudCkKICAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVtb3Zl
KG1fcGFyZW50LT5tX2NoaWxkcmVuLmZpbmQodGhpcykpOwotICAgIGlmIChtX2NhY2hlKQotICAg
ICAgICBkZWxldGUgbV9jYWNoZTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGVyZm9y
bVBvc3RTeW5jT3BlcmF0aW9ucygpCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpyZXNldERlc2Nl
bmRhbnRzKCkKIHsKLSAgICBjb25zdCBMYXllclR5cGUgcHJldkxheWVyVHlwZSA9IG1fbGF5ZXJU
eXBlOwotICAgIGNvbXB1dGVMYXllclR5cGUoKTsKLSAgICBpZiAocHJldkxheWVyVHlwZSAhPSBt
X2xheWVyVHlwZSkKLSAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IHRydWU7Ci0gICAgaWYgKG1fdHJh
bnNmb3Jtcy5kaXJ0eSkKLSAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3RpbGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX3RpbGVzW2ldLm5l
ZWRzUmVzZXQgPSB0cnVlOwogCi0gICAgY29tcHV0ZVRyYW5zZm9ybWF0aW9ucygpOwotICAgIGlm
IChtX3N0YXRlLm1hc2tMYXllciAmJiAhbV9zdGF0ZS5kaXJ0eSkKLSAgICAgICAgbV9zdGF0ZS5k
aXJ0eSA9IG1fc3RhdGUubWFza0xheWVyLT5tX3N0YXRlLmRpcnR5OwotICAgIGlmIChtX3N0YXRl
LnJlcGxpY2FMYXllciAmJiAhbV9zdGF0ZS5kaXJ0eSkKLSAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9
IG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLmRpcnR5OworICAgIGlmIChtX3BhcmVudCkK
KyAgICAgICAgbV9zdGF0ZS5jb250ZW50U2NhbGUgPSBtX3BhcmVudC0+bV9zdGF0ZS5jb250ZW50
U2NhbGU7CiAKLSAgICBjb25zdCBpbnQgc2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGlm
IChtX3N0YXRlLm1hc2tMYXllcikKKyAgICAgICAgbV9zdGF0ZS5tYXNrTGF5ZXItPnJlc2V0RGVz
Y2VuZGFudHMoKTsKIAotICAgIGZvciAoaW50IGkgPSBzaXplIC0gMTsgaSA+PSAwOyAtLWkpIHsK
LSAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIGxheWVyID0gbV9jaGlsZHJlbltpXTsKKyAgICBp
ZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5y
ZXNldERlc2NlbmRhbnRzKCk7CiAKLSAgICAgICAgbGF5ZXItPnBlcmZvcm1Qb3N0U3luY09wZXJh
dGlvbnMoKTsKLSAgICAgICAgaWYgKCFtX3N0YXRlLmRpcnR5KQotICAgICAgICAgICAgbV9zdGF0
ZS5kaXJ0eSA9IGxheWVyLT5tX3N0YXRlLmRpcnR5OworICAgIGZvciAoaW50IGkgPSBtX2NoaWxk
cmVuLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIFRleHR1cmVNYXBwZXJOb2Rl
KiBub2RlID0gbV9jaGlsZHJlbltpXTsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIG5vZGUtPnJlc2V0RGVzY2VuZGFudHMoKTsKICAgICB9Ci0gICAg
bV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMgPSBoYXNTdXJmYWNlRGVzY2VuZGFudHMoKTsK
LSAgICBpZiAobV9zdGF0ZS5kaXJ0eSkKLSAgICAgICAgbV9zdGF0ZS5kZXNjZW5kYW50c1dpdGhD
b250ZW50ID0gY291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCk7Cit9CiAKLSAgICBpZiAobV9z
dGF0ZS5wcmVzZXJ2ZXMzRCkKLSAgICAgICAgc29ydEJ5Wk9yZGVyKG1fY2hpbGRyZW4sIDAsIHNp
emUpOwotICAgIGlmIChtX3N0YXRlLmRpcnR5KQotICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsK
K3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRTY2FsZShmbG9hdCBzY2FsZSkKK3sK
KyAgICBpZiAobV9zdGF0ZS5jb250ZW50U2NhbGUgPT0gc2NhbGUpCisgICAgICAgIHJldHVybjsK
KyAgICBtX3N0YXRlLmNvbnRlbnRTY2FsZSA9IHNjYWxlOworICAgIHJlc2V0RGVzY2VuZGFudHMo
KTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0VmlzaWJsZVJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBtX3N0YXRlLnJvb3RWaXNpYmxlUmVjdCA9IG1fc3RhdGUudmlz
aWJsZVJlY3QgPSByZWN0OworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9z
aXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgVGV4
dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgYm9vbCB0cmF2ZXJzZURlc2NlbmRhbnRzKQorewor
ICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJuYWwoZ3JhcGhpY3NMYXllciwgdHJhdmVyc2VE
ZXNjZW5kYW50cywgdGV4dHVyZU1hcHBlcik7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6
OnN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGlj
c0xheWVyLCBib29sIHJlY3Vyc2UpCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9z
aXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgYm9v
bCB0cmF2ZXJzZURlc2NlbmRhbnRzKQogewotICAgIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBw
ZXIgPSByb290TGF5ZXIoKS0+bV9wbGF0Zm9ybUNsaWVudC0+dGV4dHVyZU1hcHBlcigpOwotICAg
IHN5bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJuYWwoZ3JhcGhpY3NMYXllciwgcmVjdXJzZSwgdGV4
dHVyZU1hcHBlcik7Ci0gICAgcGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpOworICAgIHN5bmND
b21wb3NpdGluZ1N0YXRlKGdyYXBoaWNzTGF5ZXIsIHJvb3RMYXllcigpLT5tX3RleHR1cmVNYXBw
ZXIsIHRyYXZlcnNlRGVzY2VuZGFudHMpOwogfQogCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpp
bnZhbGlkYXRlT3ZlcmxhcHMoKQoreworI2lmIFRFWFRVUkVfTUFQUEVSX01JTklNQUxfQ09NUFVU
QVRJT05TCisgICAgbV9kaXJ0eUZsYWdzLm92ZXJsYXBzID0gdHJ1ZTsKKyAgICBpZiAobV9wYXJl
bnQpCisgICAgICAgIG1fcGFyZW50LT5pbnZhbGlkYXRlT3ZlcmxhcHMoKTsKKyNlbmRpZgorfQor
CisKIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgVGV4dHVyZU1hcHBlciogdGV4
dHVyZU1hcHBlcikKIHsKLSAgICBjb25zdCBpbnQgY2hhbmdlTWFzayA9IGdyYXBoaWNzTGF5ZXIt
PmNoYW5nZU1hc2soKTsKLSAgICBpbml0aWFsaXplVGV4dHVyZU1hcHBlcih0ZXh0dXJlTWFwcGVy
KTsKKyAgICBpbnQgY2hhbmdlTWFzayA9IGdyYXBoaWNzTGF5ZXItPmNoYW5nZU1hc2soKTsKICAg
ICBjb25zdCBUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudERhdGEmIHBlbmRpbmdDb250ZW50ID0g
Z3JhcGhpY3NMYXllci0+cGVuZGluZ0NvbnRlbnQoKTsKLSAgICBpZiAoY2hhbmdlTWFzayA9PSBO
b0NoYW5nZXMgJiYgcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC5pc0VtcHR5KCkgJiYg
IXBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSkKKyAgICBpZiAoY2hhbmdlTWFzayA9PSBOb0No
YW5nZXMgJiYgZ3JhcGhpY3NMYXllci0+bV9hbmltYXRpb25zLmlzRW1wdHkoKSAmJiBwZW5kaW5n
Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0LmlzRW1wdHkoKSAmJiAhcGVuZGluZ0NvbnRlbnQubmVl
ZHNEaXNwbGF5KQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXROZWVkc0Rpc3BsYXkoKTsKLSAg
ICBpZiAobV9wYXJlbnQpCi0gICAgICAgIG1fcGFyZW50LT5tX3N0YXRlLmRpcnR5ID0gdHJ1ZTsK
LQogICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlw
ZSAmJiAoY2hhbmdlTWFzayAmIFBhcmVudENoYW5nZSkpIHsKLSAgICAgICAgLy8gVGhlIFdlYkNv
cmUgY29tcG9zaXRvciBtYW5hZ2VzIGl0ZW0gb3duZXJzaGlwLiBXZSBoYXZlIHRvIG1ha2Ugc3Vy
ZSBncmFwaGljc3ZpZXcgZG9lc24ndAotICAgICAgICAvLyB0cnkgdG8gc25hdGNoIHRoYXQgb3du
ZXJzaGlwLgotCi0gICAgICAgIGlmICghZ3JhcGhpY3NMYXllci0+cGFyZW50KCkpCi0gICAgICAg
ICAgICBtX3BhcmVudCA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcGFyZW50ID0g
dG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5wYXJlbnQoKSk7CisgICAgICAgIG1f
cGFyZW50ID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5wYXJlbnQoKSk7CiAK
ICAgICAgICAgaWYgKCFncmFwaGljc0xheWVyLT5wYXJlbnQoKSAmJiBtX3BhcmVudCkgewogICAg
ICAgICAgICAgc2l6ZV90IGluZGV4ID0gbV9wYXJlbnQtPm1fY2hpbGRyZW4uZmluZCh0aGlzKTsK
QEAgLTc2NCwzNCArODA4LDM5IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3Np
dGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhCiAgICAgfQogCiAg
ICAgaWYgKGNoYW5nZU1hc2sgJiBDaGlsZHJlbkNoYW5nZSkgeworICAgICAgICBpZiAodGV4dHVy
ZU1hcHBlciAmJiB0ZXh0dXJlTWFwcGVyLT5hbGxvd1BhcnRpYWxVcGRhdGVzKCkpIHsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgICAgICBtX3N0YXRlLnJlcGFpbnRSZWN0LnVuaXRlKG1fY2hpbGRyZW5baV0tPm1f
dHJhbnNmb3Jtcy5ib3VuZGluZ1JlY3RGcm9tUm9vdCk7CisgICAgICAgIH0KKwogICAgICAgICBt
X2NoaWxkcmVuLmNsZWFyKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3JhcGhp
Y3NMYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKFRleHR1
cmVNYXBwZXJOb2RlKiBjaGlsZCA9IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhpY3NMYXllci0+
Y2hpbGRyZW4oKVtpXSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNoaWxkKQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChj
aGlsZCk7Ci0gICAgICAgICAgICAgICAgY2hpbGQtPm1fcGFyZW50ID0gdGhpczsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBjaGlsZCA9IHRvVGV4dHVyZU1h
cHBlck5vZGUoZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4oKVtpXSk7CisgICAgICAgICAgICBpZiAo
IWNoaWxkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbV9jaGlsZHJl
bi5hcHBlbmQoY2hpbGQpOworICAgICAgICAgICAgY2hpbGQtPm1fcGFyZW50ID0gdGhpczsKICAg
ICAgICAgfQotICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKICAgICB9CiAKKyAgICBpZiAo
Y2hhbmdlTWFzayAmIChEcmF3c0NvbnRlbnRDaGFuZ2UgfCBQYXJlbnRDaGFuZ2UgfCBDaGlsZHJl
bkNoYW5nZSB8IFNpemVDaGFuZ2UpKQorICAgICAgICBpbnZhbGlkYXRlT3ZlcmxhcHMoKTsKKwog
ICAgIGlmIChjaGFuZ2VNYXNrICYgKFNpemVDaGFuZ2UgfCBDb250ZW50c1JlY3RDaGFuZ2UpKSB7
Ci0gICAgICAgIEludFNpemUgd2FudGVkU2l6ZSA9IEludFNpemUoZ3JhcGhpY3NMYXllci0+c2l6
ZSgpLndpZHRoKCksIGdyYXBoaWNzTGF5ZXItPnNpemUoKS5oZWlnaHQoKSk7CisgICAgICAgIGRp
ZENoYW5nZVNpemUoKTsKKyAgICAgICAgRmxvYXRTaXplIHdhbnRlZFNpemUoZ3JhcGhpY3NMYXll
ci0+c2l6ZSgpLndpZHRoKCksIGdyYXBoaWNzTGF5ZXItPnNpemUoKS5oZWlnaHQoKSk7CiAgICAg
ICAgIGlmICh3YW50ZWRTaXplLmlzRW1wdHkoKSAmJiBwZW5kaW5nQ29udGVudC5jb250ZW50VHlw
ZSA9PSBIVE1MQ29udGVudFR5cGUpCi0gICAgICAgICAgICB3YW50ZWRTaXplID0gSW50U2l6ZShn
cmFwaGljc0xheWVyLT5jb250ZW50c1JlY3QoKS53aWR0aCgpLCBncmFwaGljc0xheWVyLT5jb250
ZW50c1JlY3QoKS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgaWYgKHdhbnRlZFNpemUgIT0gbV9zaXpl
KSB7Ci0gICAgICAgICAgICBtX3NpemUgPSBJbnRTaXplKHdhbnRlZFNpemUud2lkdGgoKSwgd2Fu
dGVkU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBpZiAobV9wbGF0Zm9ybUNsaWVudCkKLSAg
ICAgICAgICAgICAgICBtX3BsYXRmb3JtQ2xpZW50LT5zZXRTaXplQ2hhbmdlZChtX3NpemUpOwot
ICAgICAgICAgICAgY29uc3QgYm9vbCBuZWVkc1RpbGluZyA9IG1fc2l6ZS53aWR0aCgpID4gMjAw
MCB8fCBtX3NpemUuaGVpZ2h0KCkgPiAyMDAwOwotICAgICAgICAgICAgaWYgKG1fc3RhdGUudGls
ZWQgIT0gbmVlZHNUaWxpbmcpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZS50aWxlZCA9IG5lZWRz
VGlsaW5nOwotICAgICAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IHRydWU7Ci0gICAgICAgIH0KKyAg
ICAgICAgICAgIHdhbnRlZFNpemUgPSBGbG9hdFNpemUoZ3JhcGhpY3NMYXllci0+Y29udGVudHNS
ZWN0KCkud2lkdGgoKSwgZ3JhcGhpY3NMYXllci0+Y29udGVudHNSZWN0KCkuaGVpZ2h0KCkpOwor
CisgICAgICAgIGlmICh3YW50ZWRTaXplICE9IG1fc2l6ZSkKKyAgICAgICAgICAgIG1fdGlsZXMu
Y2xlYXIoKTsKKworICAgICAgICBtX3NpemUgPSB3YW50ZWRTaXplOwogICAgIH0KIAorICAgIGlm
IChjaGFuZ2VNYXNrICYgKFRyYW5zZm9ybUNoYW5nZSB8IEFuY2hvclBvaW50Q2hhbmdlIHwgUG9z
aXRpb25DaGFuZ2UpKQorICAgICAgICBpbnZhbGlkYXRlTG9jYWxUcmFuc2Zvcm0oKTsKKwogICAg
IGlmIChjaGFuZ2VNYXNrICYgTWFza0xheWVyQ2hhbmdlKSB7CiAgICAgICAgaWYgKFRleHR1cmVN
YXBwZXJOb2RlKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhpY3NMYXllci0+bWFz
a0xheWVyKCkpKQogICAgICAgICAgICBsYXllci0+bV9lZmZlY3RUYXJnZXQgPSB0aGlzOwpAQCAt
ODAwLDMxICs4NDksMzMgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5n
U3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAgICBpZiAoY2hhbmdl
TWFzayAmIFJlcGxpY2FMYXllckNoYW5nZSkgewogICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9k
ZSogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnJlcGxpY2FMYXll
cigpKSkKICAgICAgICAgICAgbGF5ZXItPm1fZWZmZWN0VGFyZ2V0ID0gdGhpczsKKyNpZiBURVhU
VVJFX01BUFBFUl9NSU5JTUFMX0NPTVBVVEFUSU9OUworICAgICAgIG1fZGlydHlGbGFncy5yZXBs
aWNhVHJhbnNmb3JtID0gdHJ1ZTsKKyAgICAgICBtX2RpcnR5RmxhZ3MudmlzaWJsZVJlY3QgPSB0
cnVlOworI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKGNoYW5nZU1hc2sgJiAoVHJhbnNmb3JtQ2hh
bmdlIHwgU2l6ZUNoYW5nZSB8IEFuY2hvclBvaW50Q2hhbmdlIHwgUG9zaXRpb25DaGFuZ2UpKQot
ICAgICAgICBtX3RyYW5zZm9ybXMubG9jYWxEaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAoY2hhbmdl
TWFzayAmIChDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSB8IFNpemVDaGFuZ2UpKQotICAgICAgICBt
X3RyYW5zZm9ybXMucGVyc3BlY3RpdmVEaXJ0eSA9IHRydWU7CisgICAgaWYgKGNoYW5nZU1hc2sg
JiBDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSkKKyAgICAgICAgaW52YWxpZGF0ZVBlcnNwZWN0aXZl
VHJhbnNmb3JtKCk7CiAKLSAgICBpZiAoY2hhbmdlTWFzayAmIChDaGlsZHJlblRyYW5zZm9ybUNo
YW5nZSB8IFByZXNlcnZlczNEQ2hhbmdlIHwgVHJhbnNmb3JtQ2hhbmdlIHwgQW5jaG9yUG9pbnRD
aGFuZ2UgfCBTaXplQ2hhbmdlIHwgQ29udGVudHNSZWN0Q2hhbmdlIHwgQmFja2ZhY2VWaXNpYmls
aXR5Q2hhbmdlIHwgUG9zaXRpb25DaGFuZ2UgfCBNYXNrTGF5ZXJDaGFuZ2UgfCBEcmF3c0NvbnRl
bnRDaGFuZ2UgfCBDb250ZW50Q2hhbmdlIHwgUmVwbGljYUxheWVyQ2hhbmdlKSkgICAgewotICAg
ICAgICAvLyBEdWUgdG8gdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHdheSBXZWJDb3JlIGhh
bmRsZXMgdHJhbnNmb3JtcyBhbmQgdGhlIHdheSBRdCBoYW5kbGVzIHRyYW5zZm9ybXMsCi0gICAg
ICAgIC8vIGFsbCB0aGVzZSBlbGVtZW50cyBhZmZlY3QgdGhlIHRyYW5zZm9ybXMgb2YgYWxsIHRo
ZSBkZXNjZW5kYW50cy4KKyAgICBpZiAoY2hhbmdlTWFzayAmIChQcmVzZXJ2ZXMzRENoYW5nZSB8
IEJhY2tmYWNlVmlzaWJpbGl0eUNoYW5nZSkpCiAgICAgICAgIGludmFsaWRhdGVUcmFuc2Zvcm0o
KTsKLSAgICB9CiAKLSAgICBpZiAoY2hhbmdlTWFzayAmIERpc3BsYXlDaGFuZ2UpCi0gICAgICAg
IG1fc3RhdGUuZGlydHkgPSB0cnVlOworICAgIGlmIChjaGFuZ2VNYXNrICYgQW5pbWF0aW9uQ2hh
bmdlKSB7CisgICAgICAgIG1fYW5pbWF0aW9ucy5jbGVhcigpOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGdyYXBoaWNzTGF5ZXItPm1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgIG1fYW5pbWF0aW9ucy5hcHBlbmQoZ3JhcGhpY3NMYXllci0+bV9hbmltYXRpb25z
W2ldKTsKKyAgICB9CiAKKyAgICBpZiAodGV4dHVyZU1hcHBlciAmJiB0ZXh0dXJlTWFwcGVyLT5h
bGxvd1BhcnRpYWxVcGRhdGVzKCkpCisgICAgICAgIG1fc3RhdGUucmVwYWludFJlY3QudW5pdGUo
bV9zdGF0ZS5yb290VmlzaWJsZVJlY3QpOwogICAgIG1fc3RhdGUubWFza0xheWVyID0gdG9UZXh0
dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5tYXNrTGF5ZXIoKSk7CiAgICAgbV9zdGF0ZS5y
ZXBsaWNhTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnJlcGxpY2FM
YXllcigpKTsKICAgICBtX3N0YXRlLnBvcyA9IGdyYXBoaWNzTGF5ZXItPnBvc2l0aW9uKCk7CiAg
ICAgbV9zdGF0ZS5hbmNob3JQb2ludCA9IGdyYXBoaWNzTGF5ZXItPmFuY2hvclBvaW50KCk7CiAg
ICAgbV9zdGF0ZS5zaXplID0gZ3JhcGhpY3NMYXllci0+c2l6ZSgpOwotICAgIG1fc3RhdGUudHJh
bnNmb3JtID0gZ3JhcGhpY3NMYXllci0+dHJhbnNmb3JtKCk7CiAgICAgbV9zdGF0ZS5jb250ZW50
c1JlY3QgPSBncmFwaGljc0xheWVyLT5jb250ZW50c1JlY3QoKTsKLSAgICBtX3N0YXRlLm9wYWNp
dHkgPSBncmFwaGljc0xheWVyLT5vcGFjaXR5KCk7CisgICAgbV9zdGF0ZS50cmFuc2Zvcm0gPSBn
cmFwaGljc0xheWVyLT50cmFuc2Zvcm0oKTsKICAgICBtX3N0YXRlLmNvbnRlbnRzUmVjdCA9IGdy
YXBoaWNzTGF5ZXItPmNvbnRlbnRzUmVjdCgpOwogICAgIG1fc3RhdGUucHJlc2VydmVzM0QgPSBn
cmFwaGljc0xheWVyLT5wcmVzZXJ2ZXMzRCgpOwogICAgIG1fc3RhdGUubWFza3NUb0JvdW5kcyA9
IGdyYXBoaWNzTGF5ZXItPm1hc2tzVG9Cb3VuZHMoKTsKQEAgLTgzMiwyMiArODgzLDIzMSBAQCB2
b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIqIGdyYQogICAgIG1fc3RhdGUuY29udGVudHNPcGFxdWUgPSBncmFw
aGljc0xheWVyLT5jb250ZW50c09wYXF1ZSgpOwogICAgIG1fc3RhdGUuYmFja2ZhY2VWaXNpYmls
aXR5ID0gZ3JhcGhpY3NMYXllci0+YmFja2ZhY2VWaXNpYmlsaXR5KCk7CiAgICAgbV9zdGF0ZS5j
aGlsZHJlblRyYW5zZm9ybSA9IGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVuVHJhbnNmb3JtKCk7Cisg
ICAgbV9zdGF0ZS5vcGFjaXR5ID0gZ3JhcGhpY3NMYXllci0+b3BhY2l0eSgpOwogICAgIG1fY3Vy
cmVudENvbnRlbnQuY29udGVudFR5cGUgPSBwZW5kaW5nQ29udGVudC5jb250ZW50VHlwZTsKICAg
ICBtX2N1cnJlbnRDb250ZW50LmltYWdlID0gcGVuZGluZ0NvbnRlbnQuaW1hZ2U7CiAgICAgbV9j
dXJyZW50Q29udGVudC5tZWRpYSA9IHBlbmRpbmdDb250ZW50Lm1lZGlhOwotICAgIG1fY3VycmVu
dENvbnRlbnQuYmFja2dyb3VuZENvbG9yID0gcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9y
OwogICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ID0gbV9jdXJyZW50Q29udGVudC5u
ZWVkc0Rpc3BsYXkgfHwgcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5OwotICAgIG1fY3VycmVu
dENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC51bml0ZShwZW5kaW5nQ29udGVudC5uZWVkc0Rpc3Bs
YXlSZWN0KTsKKyAgICBpZiAoIW1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5KQorICAgICAg
ICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QudW5pdGUocGVuZGluZ0NvbnRlbnQu
bmVlZHNEaXNwbGF5UmVjdCk7CisKKyAgICBpZiAoIWhhc1J1bm5pbmdPcGFjaXR5QW5pbWF0aW9u
KCkpCisgICAgICAgIG1fb3BhY2l0eSA9IG1fc3RhdGUub3BhY2l0eTsKKyAgICBpZiAoIWhhc1J1
bm5pbmdUcmFuc2Zvcm1BbmltYXRpb24oKSkKKyAgICAgICAgbV90cmFuc2Zvcm1zLmJhc2UgPSBt
X3N0YXRlLnRyYW5zZm9ybTsKK30KKworYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6ZGVzY2VuZGFu
dHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9hbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghbV9h
bmltYXRpb25zW2ldLT5wYXVzZWQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKG1fY2hpbGRyZW5baV0tPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmlt
YXRpb25zKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRl
SW50ZXJuYWwoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIGJvb2wg
cmVjdXJzZSwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK3N0YXRpYyBkb3VibGUgbm9y
bWFsaXplZEFuaW1hdGlvblZhbHVlKGRvdWJsZSBydW5uaW5nVGltZSwgZG91YmxlIGR1cmF0aW9u
LCBib29sIGFsdGVybmF0ZSkKIHsKLSAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoZ3JhcGhp
Y3NMYXllciwgdGV4dHVyZU1hcHBlcik7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgY29uc3QgaW50IGxvb3BDb3VudCA9IHJ1bm5pbmdUaW1lIC8gZHVyYXRpb247
CisgICAgY29uc3QgZG91YmxlIGxhc3RGdWxsTG9vcCA9IGR1cmF0aW9uICogZG91YmxlKGxvb3BD
b3VudCk7CisgICAgY29uc3QgZG91YmxlIHJlbWFpbmRlciA9IHJ1bm5pbmdUaW1lIC0gbGFzdEZ1
bGxMb29wOworICAgIGNvbnN0IGRvdWJsZSBub3JtYWxpemVkID0gcmVtYWluZGVyIC8gZHVyYXRp
b247CisgICAgcmV0dXJuIChsb29wQ291bnQgJSAyICYmIGFsdGVybmF0ZSkgPyAoMSAtIG5vcm1h
bGl6ZWQpIDogbm9ybWFsaXplZDsKK30KIAotICAgIGdyYXBoaWNzTGF5ZXItPmRpZFN5bmNocm9u
aXplKCk7Cit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjphcHBseU9wYWNpdHlBbmltYXRpb24oZmxv
YXQgZnJvbU9wYWNpdHksIGZsb2F0IHRvT3BhY2l0eSwgZG91YmxlIHByb2dyZXNzKQoreworICAg
IC8vIE9wdGltaXphdGlvbjogc3BlY2lhbCBjYXNlIHRoZSBlZGdlIHZhbHVlcyAoMCBhbmQgMSku
CisgICAgaWYgKHByb2dyZXNzID09IDEuMCkKKyAgICAgICAgc2V0T3BhY2l0eSh0b09wYWNpdHkp
OworICAgIGVsc2UgaWYgKCFwcm9ncmVzcykKKyAgICAgICAgc2V0T3BhY2l0eShmcm9tT3BhY2l0
eSk7CisgICAgZWxzZQorICAgICAgICBzZXRPcGFjaXR5KGZyb21PcGFjaXR5ICsgcHJvZ3Jlc3Mg
KiAodG9PcGFjaXR5IC0gZnJvbU9wYWNpdHkpKTsKK30KIAotICAgIGlmIChtX3N0YXRlLm1hc2tM
YXllcikgeworc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVFcHNpbG9uKGRvdWJsZSBkdXJhdGlv
bikKK3sKKyAgICByZXR1cm4gMS4wIC8gKDIwMC4wICogZHVyYXRpb24pOworfQorCitzdGF0aWMg
aW5saW5lIGRvdWJsZSBzb2x2ZUN1YmljQmV6aWVyRnVuY3Rpb24ocXJlYWwgcDF4LCBxcmVhbCBw
MXksIHFyZWFsIHAyeCwgcXJlYWwgcDJ5LCBkb3VibGUgdCwgZG91YmxlIGR1cmF0aW9uKQorewor
ICAgIFVuaXRCZXppZXIgYmV6aWVyKHAxeCwgcDF5LCBwMngsIHAyeSk7CisgICAgcmV0dXJuIGJl
emllci5zb2x2ZSh0LCBzb2x2ZUVwc2lsb24oZHVyYXRpb24pKTsKK30KKworc3RhdGljIGlubGlu
ZSBkb3VibGUgc29sdmVTdGVwc0Z1bmN0aW9uKGludCBudW1TdGVwcywgYm9vbCBzdGVwQXRTdGFy
dCwgZG91YmxlIHQpCit7CisgICAgaWYgKHN0ZXBBdFN0YXJ0KQorICAgICAgICByZXR1cm4gcU1p
bigxLjAsIChmbG9vcihudW1TdGVwcyAqIHQpICsgMSkgLyBudW1TdGVwcyk7CisgICAgcmV0dXJu
IGZsb29yKG51bVN0ZXBzICogdCkgLyBudW1TdGVwczsKK30KKworc3RhdGljIGlubGluZSBmbG9h
dCBhcHBseVRpbWluZ0Z1bmN0aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlv
biwgZmxvYXQgcHJvZ3Jlc3MsIGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICBpZiAoIXRpbWluZ0Z1
bmN0aW9uKQorICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7CisKKyAgICBpZiAodGltaW5nRnVuY3Rp
b24tPmlzQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbigpKSB7CisgICAgICAgIGNvbnN0IEN1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb24qIGN0ZiA9IHN0YXRpY19jYXN0PGNvbnN0IEN1YmljQmV6aWVy
VGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbik7CisgICAgICAgIHJldHVybiBzb2x2ZUN1
YmljQmV6aWVyRnVuY3Rpb24oY3RmLT54MSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGN0Zi0+eTEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjdGYtPngyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3RmLT55MigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b2dyZXNzLCBkdXJhdGlvbik7CisgICAgfQorCisgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc1N0
ZXBzVGltaW5nRnVuY3Rpb24oKSkgeworICAgICAgICBjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9u
KiBzdGYgPSBzdGF0aWNfY2FzdDxjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVu
Y3Rpb24pOworICAgICAgICByZXR1cm4gc29sdmVTdGVwc0Z1bmN0aW9uKHN0Zi0+bnVtYmVyT2ZT
dGVwcygpLCBzdGYtPnN0ZXBBdFN0YXJ0KCksIGRvdWJsZShwcm9ncmVzcykpOworICAgIH0KKwor
ICAgIHJldHVybiBwcm9ncmVzczsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6YXBwbHlU
cmFuc2Zvcm1BbmltYXRpb24oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9u
LCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b25zKiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIC8vIE9wdGltaXphdGlvbjogc3BlY2lh
bCBjYXNlIHRoZSBlZGdlIHZhbHVlcyAoMCBhbmQgMSkuCisgICAgaWYgKHByb2dyZXNzID09IDEu
MCB8fCAhcHJvZ3Jlc3MpIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4Owor
ICAgICAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBvcHMgPSBwcm9ncmVzcyA/IHRvIDog
ZnJvbTsKKyAgICAgICAgb3BzLT5hcHBseShhbmltYXRpb24uYm94U2l6ZSwgbWF0cml4KTsKKyAg
ICAgICAgc2V0VHJhbnNmb3JtKG1hdHJpeCk7CisgICAgfQorCisgICAgaWYgKCFhbmltYXRpb24u
bGlzdHNNYXRjaCkgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b01hdHJpeCwgZnJv
bU1hdHJpeDsKKyAgICAgICAgdG8tPmFwcGx5KGFuaW1hdGlvbi5ib3hTaXplLCB0b01hdHJpeCk7
CisgICAgICAgIGZyb20tPmFwcGx5KGFuaW1hdGlvbi5ib3hTaXplLCBmcm9tTWF0cml4KTsKKyAg
ICAgICAgdG9NYXRyaXguYmxlbmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3MpOworICAgICAgICBzZXRU
cmFuc2Zvcm0odG9NYXRyaXgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbWF0cml4OworCisgICAgaWYgKCF0by0+c2l6ZSgpKSB7CisgICAgICAg
IGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHN3YXAgPSB0bzsKKyAgICAgICAgdG8gPSBmcm9t
OworICAgICAgICBmcm9tID0gc3dhcDsKKyAgICB9IGVsc2UgaWYgKCFmcm9tLT5zaXplKCkpCisg
ICAgICAgIHByb2dyZXNzID0gMS4wIC0gcHJvZ3Jlc3M7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRp
b25zIGJsZW5kZWQoKnRvKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1hdGlvbi5m
dW5jdGlvbkxpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgIGJsZW5kZWQub3BlcmF0aW9ucygpW2ld
LT5ibGVuZChmcm9tLT5hdChpKSwgcHJvZ3Jlc3MsICFmcm9tLT5hdChpKSktPmFwcGx5KG1hdHJp
eCwgYW5pbWF0aW9uLmJveFNpemUpOworCisgICAgc2V0VHJhbnNmb3JtKG1hdHJpeCk7Cit9CisK
K3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmFwcGx5QW5pbWF0aW9uRnJhbWUoY29uc3QgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uLCBjb25zdCBBbmltYXRpb25WYWx1ZSogZnJvbSwg
Y29uc3QgQW5pbWF0aW9uVmFsdWUqIHRvLCBmbG9hdCBwcm9ncmVzcykKK3sKKyAgICBzd2l0Y2gg
KGFuaW1hdGlvbi5rZXlmcmFtZXMucHJvcGVydHkoKSkgeworICAgIGNhc2UgQW5pbWF0ZWRQcm9w
ZXJ0eU9wYWNpdHk6CisgICAgICAgIGFwcGx5T3BhY2l0eUFuaW1hdGlvbigoc3RhdGljX2Nhc3Q8
Y29uc3QgRmxvYXRBbmltYXRpb25WYWx1ZSo+KGZyb20pLT52YWx1ZSgpKSwgKHN0YXRpY19jYXN0
PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUqPih0byktPnZhbHVlKCkpLCBwcm9ncmVzcyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06
CisgICAgICAgIGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKGFuaW1hdGlvbiwgc3RhdGljX2Nhc3Q8
Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqPihmcm9tKS0+dmFsdWUoKSwgc3RhdGljX2Nh
c3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqPih0byktPnZhbHVlKCksIHByb2dyZXNz
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6YXBwbHlBbmltYXRp
b24oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uLCBkb3VibGUgbm9ybWFs
aXplZFZhbHVlKQoreworICAgIC8vIE9wdGltaXphdGlvbjogc3BlY2lhbCBjYXNlIHRoZSBlZGdl
IHZhbHVlcyAoMCBhbmQgMSkuCisgICAgaWYgKCFub3JtYWxpemVkVmFsdWUpIHsKKyAgICAgICAg
YXBwbHlBbmltYXRpb25GcmFtZShhbmltYXRpb24sIGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoMCks
IGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoMSksIDApOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChub3JtYWxpemVkVmFsdWUgPT0gMS4wKSB7CisgICAgICAgIGFwcGx5QW5pbWF0aW9u
RnJhbWUoYW5pbWF0aW9uLCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KGFuaW1hdGlvbi5rZXlmcmFt
ZXMuc2l6ZSgpIC0gMiksIGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoYW5pbWF0aW9uLmtleWZyYW1l
cy5zaXplKCkgLSAxKSwgMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGFuaW1h
dGlvbi5rZXlmcmFtZXMuc2l6ZSgpID09IDIpIHsKKyAgICAgICAgbm9ybWFsaXplZFZhbHVlID0g
YXBwbHlUaW1pbmdGdW5jdGlvbihhbmltYXRpb24uYW5pbWF0aW9uLT50aW1pbmdGdW5jdGlvbigp
LmdldCgpLCBub3JtYWxpemVkVmFsdWUsIGFuaW1hdGlvbi5hbmltYXRpb24tPmR1cmF0aW9uKCkp
OworICAgICAgICBhcHBseUFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvbiwgYW5pbWF0aW9uLmtleWZy
YW1lcy5hdCgwKSwgYW5pbWF0aW9uLmtleWZyYW1lcy5hdCgxKSwgbm9ybWFsaXplZFZhbHVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYW5p
bWF0aW9uLmtleWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgY29uc3QgQW5pbWF0
aW9uVmFsdWUqIGZyb20gPSBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KGkpOworICAgICAgICBjb25z
dCBBbmltYXRpb25WYWx1ZSogdG8gPSBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KGkgKyAxKTsKKyAg
ICAgICAgaWYgKGZyb20tPmtleVRpbWUoKSA+IG5vcm1hbGl6ZWRWYWx1ZSB8fCB0by0+a2V5VGlt
ZSgpIDwgbm9ybWFsaXplZFZhbHVlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
bm9ybWFsaXplZFZhbHVlID0gKG5vcm1hbGl6ZWRWYWx1ZSAtIGZyb20tPmtleVRpbWUoKSkgLyAo
dG8tPmtleVRpbWUoKSAtIGZyb20tPmtleVRpbWUoKSk7CisgICAgICAgIG5vcm1hbGl6ZWRWYWx1
ZSA9IGFwcGx5VGltaW5nRnVuY3Rpb24oZnJvbS0+dGltaW5nRnVuY3Rpb24oKSwgbm9ybWFsaXpl
ZFZhbHVlLCBhbmltYXRpb24uYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKKyAgICAgICAgYXBwbHlB
bmltYXRpb25GcmFtZShhbmltYXRpb24sIGZyb20sIHRvLCBub3JtYWxpemVkVmFsdWUpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZU1hcHBlck5vZGU6Omhhc1J1bm5p
bmdPcGFjaXR5QW5pbWF0aW9uKCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uJiBhbmltYXRpb24gPSAqbV9hbmltYXRpb25zW2ldLmdldCgpOworICAgICAgICBp
ZiAoIWFuaW1hdGlvbi5wYXVzZWQgJiYgYW5pbWF0aW9uLmtleWZyYW1lcy5wcm9wZXJ0eSgpID09
IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6aGFzUnVu
bmluZ1RyYW5zZm9ybUFuaW1hdGlvbigpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgVGV4dHVyZU1h
cHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uID0gKm1fYW5pbWF0aW9uc1tpXS5nZXQoKTsKKyAgICAg
ICAgaWYgKCFhbmltYXRpb24ucGF1c2VkICYmIGFuaW1hdGlvbi5rZXlmcmFtZXMucHJvcGVydHko
KSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6c3luY0FuaW1hdGlvbnMoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGxheWVyKQor
eworICAgIGZvciAoaW50IGkgPSBtX2FuaW1hdGlvbnMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkp
IHsKKyAgICAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJBbmltYXRpb24+IGFuaW1hdGlvbiA9IG1f
YW5pbWF0aW9uc1tpXTsKKworICAgICAgICBkb3VibGUgdG90YWxSdW5uaW5nVGltZSA9IFdURjo6
Y3VycmVudFRpbWUoKSAtIGFuaW1hdGlvbi0+c3RhcnRUaW1lOworICAgICAgICBSZWZQdHI8QW5p
bWF0aW9uPiBhbmltID0gYW5pbWF0aW9uLT5hbmltYXRpb247CisgICAgICAgIGRvdWJsZSBub3Jt
YWxpemVkVmFsdWUgPSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUodG90YWxSdW5uaW5nVGltZSwg
YW5pbS0+ZHVyYXRpb24oKSwgdHJ1ZSk7CisKKyAgICAgICAgaWYgKGFuaW0tPml0ZXJhdGlvbkNv
dW50KCkgIT0gQW5pbWF0aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRlICYmIHRvdGFsUnVubmlu
Z1RpbWUgPj0gYW5pbS0+ZHVyYXRpb24oKSAqIGFuaW0tPml0ZXJhdGlvbkNvdW50KCkpIHsKKyAg
ICAgICAgICAgIC8vIFdlIGFwcGx5IGFuIGFuaW1hdGlvbiB0aGF0IHZlcnkgY2xvc2UgdG8gdGhl
IGVkZ2UsIHNvIHRoYXQgdGhlIGZpbmFsIGZyYW1lIGlzIGFwcGxpZWQsIG90ZXJ3aXNlIHdlIG1p
Z2h0IGdldCwgZm9yIGV4YW1wbGUsIGFuIG9wYWNpdHkgb2YgMC4wMSB3aGljaCBpcyBzdGlsbCB2
aXNpYmxlLgorICAgICAgICAgICAgaWYgKGFuaW0tPmZpbGxzRm9yd2FyZHMoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChhbmltYXRpb24tPmtleWZyYW1lcy5wcm9wZXJ0eSgpID09IEFuaW1hdGVk
UHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUudHJh
bnNmb3JtID0gbV90cmFuc2Zvcm1zLmJhc2U7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoYW5p
bWF0aW9uLT5rZXlmcmFtZXMucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkK
KyAgICAgICAgICAgICAgICAgICAgbV9vcGFjaXR5ID0gbV9zdGF0ZS5vcGFjaXR5OworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBtX2FuaW1hdGlvbnMucmVtb3ZlKGkpOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWFuaW1hdGlvbi0+cGF1c2Vk
KQorICAgICAgICAgICAgYXBwbHlBbmltYXRpb24oKmFuaW1hdGlvbi5nZXQoKSwgbm9ybWFsaXpl
ZFZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3Np
dGluZ1N0YXRlSW50ZXJuYWwoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5
ZXIsIGJvb2wgdHJhdmVyc2VEZXNjZW5kYW50cywgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBl
cikKK3sKKyAgICBpZiAoZ3JhcGhpY3NMYXllcikgeworICAgICAgICBzeW5jQ29tcG9zaXRpbmdT
dGF0ZVNlbGYoZ3JhcGhpY3NMYXllciwgdGV4dHVyZU1hcHBlcik7CisgICAgICAgIGdyYXBoaWNz
TGF5ZXItPmRpZFN5bmNocm9uaXplKCk7CisgICAgfQorCisgICAgaWYgKGdyYXBoaWNzTGF5ZXIg
JiYgbV9zdGF0ZS5tYXNrTGF5ZXIpIHsKICAgICAgICAgbV9zdGF0ZS5tYXNrTGF5ZXItPnN5bmND
b21wb3NpdGluZ1N0YXRlSW50ZXJuYWwodG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihncmFw
aGljc0xheWVyLT5tYXNrTGF5ZXIoKSksIGZhbHNlLCB0ZXh0dXJlTWFwcGVyKTsKICAgICAgICAg
aWYgKG1fc3RhdGUubWFza0xheWVyLT5tX3NpemUuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9z
dGF0ZS5tYXNrTGF5ZXItPm1fc2l6ZSA9IG1fc2l6ZTsKQEAgLTg1NiwyMiArMTExNiwxMDggQEAg
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVJbnRlcm5hbChHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcioKICAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCiAg
ICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUludGVybmFs
KHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoZ3JhcGhpY3NMYXllci0+cmVwbGljYUxheWVy
KCkpLCBmYWxzZSwgdGV4dHVyZU1hcHBlcik7CiAKLSAgICBpZiAobV9zdGF0ZS5kaXJ0eSkKLSAg
ICAgICAgdXBsb2FkVGV4dHVyZUZyb21Db250ZW50KHRleHR1cmVNYXBwZXIsIG1fc3RhdGUudmlz
aWJsZVJlY3QsIGdyYXBoaWNzTGF5ZXIpOworICAgIHN5bmNBbmltYXRpb25zKGdyYXBoaWNzTGF5
ZXIpOwogCi0gICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgp
OwotICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7CisgICAgY29tcHV0
ZUFsbFRyYW5zZm9ybXMoKTsKKworICAgIGJvb2wgdmlzaWJsZVJlY3REaXJ0eSA9IHRydWU7Cisj
aWYgVEVYVFVSRV9NQVBQRVJfTUlOSU1BTF9DT01QVVRBVElPTlMKKyAgICB2aXNpYmxlUmVjdERp
cnR5ID0gbV9kaXJ0eUZsYWdzLnZpc2libGVSZWN0OworI2VuZGlmCisKKyAgICBib29sIGFsbG93
UGFydGlhbFVwZGF0ZXMgPSB0ZXh0dXJlTWFwcGVyICYmIHRleHR1cmVNYXBwZXItPmFsbG93UGFy
dGlhbFVwZGF0ZXMoKTsKKyAgICBpZiAodmlzaWJsZVJlY3REaXJ0eSAmJiBhbGxvd1BhcnRpYWxV
cGRhdGVzKQorICAgICAgICBtX3N0YXRlLnJlcGFpbnRSZWN0LnVuaXRlKG1fdHJhbnNmb3Jtcy5i
b3VuZGluZ1JlY3RGcm9tUm9vdCk7CisgICAgY29tcHV0ZUJvdW5kaW5nUmVjdEZyb21Sb290SWZO
ZWVkZWQoKTsKKyAgICBjb21wdXRlUGVyc3BlY3RpdmVUcmFuc2Zvcm1JZk5lZWRlZCgpOworICAg
IGNvbXB1dGVUaWxlcygpOworICAgIGNvbXB1dGVPdmVybGFwc0lmTmVlZGVkKCk7CisgICAgaWYg
KHZpc2libGVSZWN0RGlydHkgJiYgYWxsb3dQYXJ0aWFsVXBkYXRlcykKKyAgICAgICAgbV9zdGF0
ZS5yZXBhaW50UmVjdC51bml0ZShtX3RyYW5zZm9ybXMuYm91bmRpbmdSZWN0RnJvbVJvb3QpOwog
Ci0gICAgaWYgKCFyZWN1cnNlKQorICAgIGlmIChncmFwaGljc0xheWVyKQorICAgICAgICByZW5k
ZXJDb250ZW50KHRleHR1cmVNYXBwZXIsIGdyYXBoaWNzTGF5ZXIpOworCisgICAgaWYgKCF0cmF2
ZXJzZURlc2NlbmRhbnRzKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8R3JhcGhpY3NM
YXllcio+IGNoaWxkcmVuID0gZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4oKTsKLSAgICBmb3IgKGlu
dCBpID0gY2hpbGRyZW4uc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgVGV4dHVy
ZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGNoaWxkcmVuW2ldKTsKLSAg
ICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG5vZGUtPnN5
bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJuYWwodG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihj
aGlsZHJlbltpXSksIHRydWUsIHRleHR1cmVNYXBwZXIpOworICAgIGlmIChncmFwaGljc0xheWVy
KSB7CisgICAgICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRyZW4gPSBncmFwaGljc0xh
eWVyLT5jaGlsZHJlbigpOworICAgICAgICBmb3IgKGludCBpID0gY2hpbGRyZW4uc2l6ZSgpIC0g
MTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0g
dG9UZXh0dXJlTWFwcGVyTm9kZShjaGlsZHJlbltpXSk7CisgICAgICAgICAgICBpZiAoIW5vZGUp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBub2RlLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZUludGVybmFsKHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoY2hpbGRyZW5b
aV0pLCB0cnVlLCB0ZXh0dXJlTWFwcGVyKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGZvciAoaW50IGkgPSBtX2NoaWxkcmVuLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKQorICAg
ICAgICAgICAgbV9jaGlsZHJlbltpXS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbnRlcm5hbCgwLCB0
cnVlLCB0ZXh0dXJlTWFwcGVyKTsKKyAgICB9CisKKyAgICBpZiAobV9zdGF0ZS5wcmVzZXJ2ZXMz
RCkKKyAgICAgICAgc29ydEJ5Wk9yZGVyKG1fY2hpbGRyZW4sIDAsIG1fY2hpbGRyZW4uc2l6ZSgp
KTsKKworfQorCitJbnRSZWN0IFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlTGFzdE1vZGlmaWVk
UmVjdCgpCit7CisgICAgRmxvYXRSZWN0IHJlY3QgPSBtX3N0YXRlLnJlcGFpbnRSZWN0OworICAg
IGlmIChoYXNSdW5uaW5nT3BhY2l0eUFuaW1hdGlvbigpIHx8IGhhc1J1bm5pbmdUcmFuc2Zvcm1B
bmltYXRpb24oKSkKKyAgICAgICAgcmVjdCA9IHRhcmdldFJlY3QoKTsKKyAgICByZWN0ID0gbV90
cmFuc2Zvcm1zLnRhcmdldC5tYXBSZWN0KHJlY3QpOworICAgIG1fc3RhdGUucmVwYWludFJlY3Qg
PSBGbG9hdFJlY3QoKTsKKyAgICBmb3IgKGludCBpID0gbV9jaGlsZHJlbi5zaXplKCkgLSAxOyBp
ID49IDA7IC0taSkKKyAgICAgICAgcmVjdC51bml0ZShtX2NoaWxkcmVuW2ldLT5jb21wdXRlTGFz
dE1vZGlmaWVkUmVjdCgpKTsKKworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwor
fQorCitzdGF0aWMgUGFzc1JlZlB0cjxUaW1pbmdGdW5jdGlvbj4gY29weVRpbWluZ0Z1bmN0aW9u
KGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0ZnVuYykKK3sKKyAgICBpZiAoIXRmdW5jKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIGlmICh0ZnVuYy0+aXNMaW5lYXJUaW1pbmdGdW5jdGlvbigpKQor
ICAgICAgICByZXR1cm4gTGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOworCisgICAgaWYg
KHRmdW5jLT5pc0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24oKSkgeworICAgICAgICBjb25zdCBD
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBidGZ1bmMgPSBzdGF0aWNfY2FzdDxjb25zdCBDdWJp
Y0JlemllclRpbWluZ0Z1bmN0aW9uKj4odGZ1bmMpOworICAgICAgICByZXR1cm4gQ3ViaWNCZXpp
ZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKGJ0ZnVuYy0+eDEoKSwgYnRmdW5jLT55MSgpLCBidGZ1
bmMtPngyKCksIGJ0ZnVuYy0+eTIoKSk7CisgICAgfQorCisgICAgaWYgKHRmdW5jLT5pc1N0ZXBz
VGltaW5nRnVuY3Rpb24oKSkgeworICAgICAgICBjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKiBz
dGZ1bmMgPSBzdGF0aWNfY2FzdDxjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKj4odGZ1bmMpOwor
ICAgICAgICByZXR1cm4gU3RlcHNUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHN0ZnVuYy0+bnVtYmVy
T2ZTdGVwcygpLCBzdGZ1bmMtPnN0ZXBBdFN0YXJ0KCkpOwogICAgIH0KKworICAgIHJldHVybiAw
OwogfQogCitzdGF0aWMgY29uc3QgQW5pbWF0aW9uVmFsdWUqIGNvcHlBbmltYXRpb25WYWx1ZShB
bmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB2YWx1ZSkK
K3sKKyAgICBzd2l0Y2ggKHByb3BlcnR5KSB7CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5V2Vi
a2l0VHJhbnNmb3JtOiB7CisgICAgICAgIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiB0
cmFuc2Zvcm1WYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVl
Kj4odmFsdWUpOworICAgICAgICByZXR1cm4gbmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKHRy
YW5zZm9ybVZhbHVlLT5rZXlUaW1lKCksIHRyYW5zZm9ybVZhbHVlLT52YWx1ZSgpLCBjb3B5VGlt
aW5nRnVuY3Rpb24odHJhbnNmb3JtVmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCkpKTsKKyAgICB9Cisg
ICAgY2FzZSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eTogeworICAgICAgICBjb25zdCBGbG9hdEFu
aW1hdGlvblZhbHVlKiBmbG9hdFZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRp
b25WYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG5ldyBGbG9hdEFuaW1hdGlvblZhbHVl
KGZsb2F0VmFsdWUtPmtleVRpbWUoKSwgZmxvYXRWYWx1ZS0+dmFsdWUoKSwgY29weVRpbWluZ0Z1
bmN0aW9uKGZsb2F0VmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCkpKTsKKyAgICB9CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7
CiB9CisKK1RleHR1cmVNYXBwZXJBbmltYXRpb246OlRleHR1cmVNYXBwZXJBbmltYXRpb24oY29u
c3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcykKKyAgICA6IGtleWZyYW1lcyh2YWx1ZXMucHJv
cGVydHkoKSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsr
aSkKKyAgICAgICAga2V5ZnJhbWVzLmluc2VydChjb3B5QW5pbWF0aW9uVmFsdWUodmFsdWVzLnBy
b3BlcnR5KCksIHZhbHVlcy5hdChpKSkpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2Rl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ck5vZGUuaAppbmRleCBjNWRlY2MxLi5kMjQxYzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaApA
QCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJJ
bWFnZS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiVHJhbnNm
b3JtT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5o
IgpAQCAtMzYsMjIgKzM1LDM5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXI7CiBjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZTsKLWNsYXNz
IFRleHR1cmVNYXBwZXJDYWNoZTsKIGNsYXNzIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOwor
Y2xhc3MgVGV4dHVyZU1hcHBlclN1cmZhY2VNYW5hZ2VyOwogCi1zdHJ1Y3QgVGV4bWFwUGFpbnRP
cHRpb25zIHsKK2NsYXNzIFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMgeworcHVibGljOgogICAg
IEJpdG1hcFRleHR1cmUqIHN1cmZhY2U7CiAgICAgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBl
cjsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogcm9vdExheWVyOworICAgIFRleHR1cmVNYXBwZXJT
dXJmYWNlTWFuYWdlciogc3VyZmFjZU1hbmFnZXI7CisKICAgICBmbG9hdCBvcGFjaXR5OwotICAg
IEludFJlY3Qgc2Npc3NvclJlY3Q7Ci0gICAgSW50UmVjdCB2aXNpYmxlUmVjdDsKICAgICBib29s
IGlzU3VyZmFjZTsKLSAgICBUZXh0dXJlTWFwcGVyQ2FjaGUqIGNhY2hlOworICAgIFRleHR1cmVN
YXBwZXJQYWludE9wdGlvbnMoKSA6IHN1cmZhY2UoMCksIHRleHR1cmVNYXBwZXIoMCksIG9wYWNp
dHkoMS4wKSwgaXNTdXJmYWNlKGZhbHNlKSB7IH0KK307CisKK2NsYXNzIFRleHR1cmVNYXBwZXJB
bmltYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiB7Citw
dWJsaWM6CisgICAgU3RyaW5nIG5hbWU7CisgICAgS2V5ZnJhbWVWYWx1ZUxpc3Qga2V5ZnJhbWVz
OworICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb247
CisgICAgYm9vbCBwYXVzZWQ7CisgICAgVmVjdG9yPFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0
aW9uVHlwZT4gZnVuY3Rpb25MaXN0OworICAgIGJvb2wgbGlzdHNNYXRjaDsKKyAgICBib29sIGhh
c0JpZ1JvdGF0aW9uOworICAgIGRvdWJsZSBzdGFydFRpbWU7CisgICAgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRleHR1cmVNYXBwZXJBbmltYXRpb24+IGNyZWF0ZShjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYg
dmFsdWVzKSB7IHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlckFuaW1hdGlvbih2YWx1
ZXMpKTsgfQogfTsKIAotY2xhc3MgVGV4dHVyZU1hcHBlck5vZGUgOiBwdWJsaWMgVGV4dHVyZU1h
cHBlckNvbnRlbnRMYXllciB7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJOb2RlIHsKIAogcHVibGlj
OgogICAgIC8vIFRoaXMgc2V0IG9mIGZsYWdzIGhlbHAgdXMgZGVmZXIgd2hpY2ggcHJvcGVydGll
cyBvZiB0aGUgbGF5ZXIgaGF2ZSBiZWVuCkBAIC04MywxOSArOTksMTkgQEAgcHVibGljOgogICAg
ICAgICBEaXNwbGF5Q2hhbmdlID0gICAgICAgICAgICAgKDFMIDw8IDE4KSwKICAgICAgICAgQmFj
a2dyb3VuZENvbG9yQ2hhbmdlID0gICAgICgxTCA8PCAxOSksCiAKLSAgICAgICAgUmVwbGljYUxh
eWVyQ2hhbmdlID0gICAgICAgICgxTCA8PCAyMCkKKyAgICAgICAgUmVwbGljYUxheWVyQ2hhbmdl
ID0gICAgICAgICgxTCA8PCAyMCksCisgICAgICAgIEFuaW1hdGlvbkNoYW5nZSA9ICAgICAgICAg
ICAoMUwgPDwgMjEpCiAgICAgfTsKICAgICAvLyBUaGUgY29tcG9zaXRvciBsZXRzIHVzIHNwZWNp
YWwtY2FzZSBpbWFnZXMgYW5kIGNvbG9ycywgc28gd2UgdHJ5IHRvIGRvIHNvLgogICAgIGVudW0g
Q29udGVudFR5cGUgeyBIVE1MQ29udGVudFR5cGUsIERpcmVjdEltYWdlQ29udGVudFR5cGUsIENv
bG9yQ29udGVudFR5cGUsIE1lZGlhQ29udGVudFR5cGUsIENhbnZhczNEQ29udGVudFR5cGV9Owog
ICAgIHN0cnVjdCBDb250ZW50RGF0YSB7Ci0gICAgICAgIEludFJlY3QgbmVlZHNEaXNwbGF5UmVj
dDsKKyAgICAgICAgRmxvYXRSZWN0IG5lZWRzRGlzcGxheVJlY3Q7CiAgICAgICAgIGJvb2wgbmVl
ZHNEaXNwbGF5OwogICAgICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CiAKICAgICAgICAgQ29u
dGVudFR5cGUgY29udGVudFR5cGU7CiAgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2U7Ci0gICAg
ICAgIFRleHR1cmVNYXBwZXJNZWRpYUxheWVyKiBtZWRpYTsKLQorICAgICAgICBjb25zdCBUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbWVkaWE7CiAgICAgICAgIENvbnRlbnREYXRhKCkKICAg
ICAgICAgICAgIDogbmVlZHNEaXNwbGF5KGZhbHNlKQogICAgICAgICAgICAgLCBjb250ZW50VHlw
ZShIVE1MQ29udGVudFR5cGUpCkBAIC0xMDUsMTAwICsxMjEsMTQ5IEBAIHB1YmxpYzoKICAgICAg
ICAgfQogICAgIH07CiAKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSgpCisgICAgICAgIDogbV9wYXJl
bnQoMCksIG1fZWZmZWN0VGFyZ2V0KDApLCBtX29wYWNpdHkoMS4wKSwgbV9zdXJmYWNlTWFuYWdl
cigwKSwgbV90ZXh0dXJlTWFwcGVyKDApIHsgfQogCi0gICAgVGV4dHVyZU1hcHBlck5vZGUoKTsK
ICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyTm9kZSgpOwogCi0gICAgdm9pZCBzeW5jQ29tcG9z
aXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciosIGJvb2wgcmVjdXJzaXZlKTsK
KyAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
KiwgYm9vbCB0cmF2ZXJzZURlc2VjbmRhbnRzKTsKKyAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0
YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiwgVGV4dHVyZU1hcHBlciosIGJvb2wgdHJh
dmVyc2VEZXNlY25kYW50cyk7CisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gSW50
U2l6ZShtX3NpemUud2lkdGgoKSArIC41LCBtX3NpemUuaGVpZ2h0KCkgKyAuNSk7IH0KKyAgICB2
b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZvaWQg
c2V0T3BhY2l0eShmbG9hdCBvKSB7IG1fb3BhY2l0eSA9IG87IH0KKyAgICBJbnRSZWN0IGNvbXB1
dGVMYXN0TW9kaWZpZWRSZWN0KCk7CisgICAgdm9pZCBzZXRDb250ZW50U2NhbGUoZmxvYXQpOwor
ICAgIHZvaWQgc2V0VmlzaWJsZVJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgc2V0VGV4
dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXhtYXApIHsgbV90ZXh0dXJlTWFwcGVyID0gdGV4
bWFwOyB9CisgICAgYm9vbCBkZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygp
IGNvbnN0OworCisgICAgdm9pZCBwYWludCgpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgLy8gUmVpbXBz
IGZyb20gVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcgotICAgIHZpcnR1YWwgSW50U2l6ZSBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFBsYXRmb3Jt
TGF5ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50Kik7Ci0gICAgdmlydHVhbCB2b2lk
IHBhaW50KFRleHR1cmVNYXBwZXIqLCBjb25zdCBUZXh0dXJlTWFwcGVyQ29udGVudExheWVyOjpQ
YWludE9wdGlvbnMmKTsKKyAgICBib29sIG5lZWRzVG9Db21wdXRlQm91bmRpbmdSZWN0KCkgY29u
c3Q7CisKKyAgICBjb25zdCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbWVkaWEoKSBjb25z
dCB7IHJldHVybiBtX2N1cnJlbnRDb250ZW50Lm1lZGlhOyB9CiAKIHByaXZhdGU6CiAgICAgVGV4
dHVyZU1hcHBlck5vZGUqIHJvb3RMYXllcigpOwotICAgIHZvaWQgY2xlYXJEaXJlY3RJbWFnZSgp
OwotICAgIHZvaWQgY29tcHV0ZVRyYW5zZm9ybWF0aW9ucygpOwotICAgIEludFNpemUgbmVhcmVz
dFN1cmZhY2VTaXplKCkgY29uc3Q7Ci0gICAgdm9pZCBjb21wdXRlUmVwbGljYVRyYW5zZm9ybSgp
OwotICAgIHZvaWQgY29tcHV0ZUxheWVyVHlwZSgpOwotICAgIHZvaWQgY29tcHV0ZUxvY2FsVHJh
bnNmb3JtKCk7Ci0gICAgdm9pZCBmbGF0dGVuVG8yRFNwYWNlSWZOZWNlc3NhcnkoKTsKLSAgICB2
b2lkIGluaXRpYWxpemVUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqKTsKLSAgICB2b2lkIGlu
dmFsaWRhdGVUcmFuc2Zvcm0oKTsKKyAgICB2b2lkIGNvbXB1dGVBbGxUcmFuc2Zvcm1zKCk7Cisg
ICAgdm9pZCBjb21wdXRlVmlzaWJsZVJlY3RJZk5lZWRlZCgpOworICAgIHZvaWQgY29tcHV0ZVBl
cnNwZWN0aXZlVHJhbnNmb3JtSWZOZWVkZWQoKTsKKyAgICB2b2lkIGNvbXB1dGVSZXBsaWNhVHJh
bnNmb3JtSWZOZWVkZWQoKTsKKyAgICB2b2lkIGNvbXB1dGVPdmVybGFwc0lmTmVlZGVkKCk7Cisg
ICAgdm9pZCBjb21wdXRlTG9jYWxUcmFuc2Zvcm1JZk5lZWRlZCgpOworICAgIHZvaWQgY29tcHV0
ZUJvdW5kaW5nUmVjdEZyb21Sb290SWZOZWVkZWQoKTsKKyAgICB2b2lkIGNvbXB1dGVUaWxlcygp
OworICAgIGludCBjb3VudERlc2NlbmRhbnRzV2l0aENvbnRlbnQoKSBjb25zdDsKKyAgICBGbG9h
dFJlY3QgdGFyZ2V0UmVjdEZvclRpbGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdG90YWxUYXJnZXRS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0KSBjb25zdDsKKyAgICB2b2lkIGludmFsaWRh
dGVWaWV3cG9ydChjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIG5vdGlmeUNoYW5nZShDaGFu
Z2VNYXNrKTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotICAgIHZvaWQgc2V0TmVlZHNE
aXNwbGF5SW5SZWN0KEludFJlY3QpOwotICAgIHZvaWQgcGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9u
cygpOwotICAgIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVJbnRlcm5hbChHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlciosIGJvb2wgcmVjdXJzaXZlLCBUZXh0dXJlTWFwcGVyKik7CisgICAgdm9p
ZCByZXNldERlc2NlbmRhbnRzKCk7CisgICAgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZUludGVy
bmFsKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiwgYm9vbCB0cmF2ZXJzZURlc2VjbmRhbnRz
LCBUZXh0dXJlTWFwcGVyKik7CiAgICAgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIFRleHR1cmVNYXBwZXIqIHRl
eHR1cmVNYXBwZXIpOwotICAgIFRleHR1cmVNYXBwZXJDYWNoZSogY2FjaGUoKTsKKyAgICB2b2lk
IHN5bmNBbmltYXRpb25zKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKik7CisgICAgdm9pZCBh
cHBseUFuaW1hdGlvbihjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiwgZG91YmxlIHJ1bm5p
bmdUaW1lKTsKKyAgICB2b2lkIGFwcGx5QW5pbWF0aW9uRnJhbWUoY29uc3QgVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbiYsIGNvbnN0IEFuaW1hdGlvblZhbHVlKiBmcm9tLCBjb25zdCBBbmltYXRpb25W
YWx1ZSogdG8sIGZsb2F0IHByb2dyZXNzKTsKKyAgICB2b2lkIGFwcGx5T3BhY2l0eUFuaW1hdGlv
bihmbG9hdCBmcm9tT3BhY2l0eSwgZmxvYXQgdG9PcGFjaXR5LCBkb3VibGUpOworICAgIHZvaWQg
YXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYsIGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHN0YXJ0LCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
KiBlbmQsIGRvdWJsZSk7CisgICAgYm9vbCBoYXNSdW5uaW5nT3BhY2l0eUFuaW1hdGlvbigpIGNv
bnN0OworICAgIGJvb2wgaGFzUnVubmluZ1RyYW5zZm9ybUFuaW1hdGlvbigpIGNvbnN0OwogCi0g
ICAgdm9pZCBwYWludFJlY3Vyc2l2ZShUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9ucyk7Ci0gICAg
Ym9vbCBwYWludFJlcGxpY2EoY29uc3QgVGV4bWFwUGFpbnRPcHRpb25zJiBvcHRpb25zKTsKLSAg
ICB2b2lkIHBhaW50U3VyZmFjZShjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlvbnMpOwot
ICAgIHZvaWQgcGFpbnRTZWxmKGNvbnN0IFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9ucyk7Ci0g
ICAgdm9pZCBwYWludFNlbGZBbmRDaGlsZHJlbihjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9w
dGlvbnMsIFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9uc0ZvckRlc2NlbmRhbnRzKTsKLSAgICB2
b2lkIHVwbG9hZFRleHR1cmVGcm9tQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgR3JhcGhpY3NMYXllciogbGF5ZXIpOwogCi0g
ICAgaW50IGNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpIGNvbnN0OwotICAgIGJvb2wgaGFz
U3VyZmFjZURlc2NlbmRhbnRzKCkgY29uc3Q7CisgICAgc3RhdGljIGludCBjb21wYXJlR3JhcGhp
Y3NMYXllcnNaVmFsdWUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYik7CisgICAgc3RhdGlj
IHZvaWQgc29ydEJ5Wk9yZGVyKFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSogPiYgYXJyYXksIGlu
dCBmaXJzdCwgaW50IGxhc3QpOwogCi0gICAgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcigp
OworICAgIEJpdG1hcFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RpbGVzLmlzRW1wdHko
KSA/IDAgOiBtX3RpbGVzWzBdLnRleHR1cmUuZ2V0KCk7IH0KIAorICAgIHZvaWQgcGFpbnRSZWN1
cnNpdmUoVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyk7CisgICAgYm9vbCBwYWludFJlZmxlY3Rp
b24oY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYsIEJpdG1hcFRleHR1cmUqIHN1cmZh
Y2UpOworICAgIHZvaWQgcGFpbnRTZWxmKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMm
KTsKKyAgICB2b2lkIHBhaW50U2VsZkFuZENoaWxkcmVuKGNvbnN0IFRleHR1cmVNYXBwZXJQYWlu
dE9wdGlvbnMmLCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvcHRpb25zRm9yRGVzY2VuZGFu
dHMpOworICAgIHZvaWQgcmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiwgR3JhcGhpY3NMYXll
ciopOwogCi0gICAgc3RhdGljIFRleHR1cmVNYXBwZXJOb2RlKiB0b1RleHR1cmVNYXBwZXJOb2Rl
KEdyYXBoaWNzTGF5ZXIqKTsKLSAgICBzdGF0aWMgaW50IGNvbXBhcmVHcmFwaGljc0xheWVyc1pW
YWx1ZShjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKTsKLSAgICBzdGF0aWMgdm9pZCBzb3J0
QnlaT3JkZXIoVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKiA+JiBhcnJheSwgaW50IGZpcnN0LCBp
bnQgbGFzdCk7CiAgICAgc3RydWN0IFRyYW5zZm9ybURhdGEgewotICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBiYXNlLCB0YXJnZXQsIHJlcGxpY2EsIGZvckRlc2NlbmRhbnRzLCBwZXJzcGVj
dGl2ZSwgbG9jYWw7Ci0gICAgICAgIEludFJlY3QgdGFyZ2V0Qm91bmRpbmdSZWN0OworICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0YXJnZXQsIHJlcGxpY2EsIGZvckRlc2NlbmRhbnRzLCBs
b2NhbCwgYmFzZSwgcGVyc3BlY3RpdmU7CisgICAgICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGlu
Z1JlY3Q7CiAgICAgICAgIGZsb2F0IGNlbnRlclo7Ci0gICAgICAgIGJvb2wgZGlydHksIGxvY2Fs
RGlydHksIHBlcnNwZWN0aXZlRGlydHk7Ci0gICAgICAgIEludFJlY3QgYm91bmRpbmdSZWN0RnJv
bVJvb3Q7Ci0gICAgICAgIFRyYW5zZm9ybURhdGEoKSA6IGRpcnR5KHRydWUpLCBsb2NhbERpcnR5
KHRydWUpLCBwZXJzcGVjdGl2ZURpcnR5KHRydWUpIHsgfQorICAgICAgICBGbG9hdFJlY3QgYm91
bmRpbmdSZWN0RnJvbVJvb3QsIGJvdW5kaW5nUmVjdEZyb21Sb290Rm9yRGVzY2VuZGFudHM7Cisg
ICAgICAgIFRyYW5zZm9ybURhdGEoKSB7IH0KICAgICB9OwogCi0gICAgVHJhbnNmb3JtRGF0YSBt
X3RyYW5zZm9ybXM7CisgICAgc3RydWN0IERpcnR5RmxhZ3MgeworICAgICAgICAvLyBsb2NhTFRy
YW5zZm9ybSwgcGFyZW50VHJhbnNmb3JtLAorICAgICAgICBib29sIHRyYW5zZm9ybTogMTsKIAot
ICAgIGVudW0gTGF5ZXJUeXBlIHsKLSAgICAgICAgRGVmYXVsdExheWVyLAotICAgICAgICBSb290
TGF5ZXIsCi0gICAgICAgIFNjaXNzb3JMYXllciwKLSAgICAgICAgQ2xpcExheWVyLAotICAgICAg
ICBUcmFuc3BhcmVuY3lMYXllcgotICAgIH07CisgICAgICAgIC8vIHNpemUsIGFuY2hvci1wb2lu
dCwgYmFzZSB0cmFuc2Zvcm0sIHBvcworICAgICAgICBib29sIGxvY2FsVHJhbnNmb3JtOiAxOwor
CisgICAgICAgIC8vIHNpemUsIGNoaWxkcmVuVHJhbnNmb3JtCisgICAgICAgIGJvb2wgcGVyc3Bl
Y3RpdmVUcmFuc2Zvcm06IDE7CisKKyAgICAgICAgLy8gdGFyZ2V0IHRyYW5zZm9ybSwgc2l6ZSwg
Y29udGVudCByZWN0LCByb290IHZpc2libGUgcmVjdAorICAgICAgICBib29sIHZpc2libGVSZWN0
OiAxOworCisgICAgICAgIGJvb2wgcGFyZW50VHJhbnNmb3JtIDoxOworCisgICAgICAgIGJvb2wg
cmVwbGljYVRyYW5zZm9ybTogMTsKKworICAgICAgICBib29sIG92ZXJsYXBzOiAxOworCisgICAg
ICAgIERpcnR5RmxhZ3MoKQorICAgICAgICAgICAgOiB0cmFuc2Zvcm0odHJ1ZSkKKyAgICAgICAg
ICAgICwgbG9jYWxUcmFuc2Zvcm0odHJ1ZSkKKyAgICAgICAgICAgICwgcGVyc3BlY3RpdmVUcmFu
c2Zvcm0odHJ1ZSkKKyAgICAgICAgICAgICwgdmlzaWJsZVJlY3QodHJ1ZSkKKyAgICAgICAgICAg
ICwgcGFyZW50VHJhbnNmb3JtKHRydWUpCisgICAgICAgICAgICAsIHJlcGxpY2FUcmFuc2Zvcm0o
dHJ1ZSkKKyAgICAgICAgICAgICwgb3ZlcmxhcHModHJ1ZSkKKyAgICAgICAgeyB9CisgICAgfSBt
X2RpcnR5RmxhZ3M7CisKKyAgICB2b2lkIGludmFsaWRhdGVUcmFuc2Zvcm0oKSB7IG1fZGlydHlG
bGFncy50cmFuc2Zvcm0gPSB0cnVlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlTG9jYWxUcmFuc2Zv
cm0oKSB7IG1fZGlydHlGbGFncy5sb2NhbFRyYW5zZm9ybSA9IHRydWU7IH0KKyAgICB2b2lkIGlu
dmFsaWRhdGVQZXJzcGVjdGl2ZVRyYW5zZm9ybSgpIHsgbV9kaXJ0eUZsYWdzLnBlcnNwZWN0aXZl
VHJhbnNmb3JtID0gdHJ1ZTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZVZpc2libGVSZWN0KCkgeyBt
X2RpcnR5RmxhZ3MudmlzaWJsZVJlY3QgPSB0cnVlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlUmVw
bGljYVRyYW5zZm9ybSgpIHsgbV9kaXJ0eUZsYWdzLnJlcGxpY2FUcmFuc2Zvcm0gPSB0cnVlOyB9
CisgICAgdm9pZCBpbnZhbGlkYXRlT3ZlcmxhcHMoKTsKKyAgICB2b2lkIGRpZENoYW5nZUxvY2Fs
VHJhbnNmb3JtKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VQYXJlbnRUcmFuc2Zvcm0oKTsKKyAgICB2
b2lkIGRpZENoYW5nZVNpemUoKTsKKyAgICB2b2lkIGRpZENoYW5nZVRhcmdldFRyYW5zZm9ybSgp
OworICAgIHZvaWQgZGlkQ2hhbmdlUGVyc3BlY3RpdmUoKTsKIAotICAgIExheWVyVHlwZSBtX2xh
eWVyVHlwZTsKKyAgICBUcmFuc2Zvcm1EYXRhIG1fdHJhbnNmb3JtczsKIAotICAgIGlubGluZSBJ
bnRSZWN0IHRhcmdldFJlY3QoKSBjb25zdAorICAgIGlubGluZSBGbG9hdFJlY3QgdGFyZ2V0UmVj
dCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9jdXJyZW50Q29udGVudC5jb250ZW50
VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgPyBlbnRpcmVSZWN0KCkgOiBtX3N0YXRlLmNvbnRlbnRz
UmVjdDsKICAgICB9CiAKLSAgICBpbmxpbmUgSW50UmVjdCBlbnRpcmVSZWN0KCkgY29uc3QKKyAg
ICBpbmxpbmUgRmxvYXRSZWN0IGVudGlyZVJlY3QoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAg
ICAgIHJldHVybiBGbG9hdFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSk7CiAgICAgfQogCi0gICAgaW5saW5lIEludFJlY3QgcmVwbGljYVJlY3QoKSBjb25zdAorICAg
IEZsb2F0U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9s
YXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBJbnRSZWN0KDAsIDAsIG1fbmVhcmVzdFN1
cmZhY2VTaXplLndpZHRoKCksIG1fbmVhcmVzdFN1cmZhY2VTaXplLmhlaWdodCgpKSA6IGVudGly
ZVJlY3QoKTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0g
RGlyZWN0SW1hZ2VDb250ZW50VHlwZSAmJiBtX2N1cnJlbnRDb250ZW50LmltYWdlID8gbV9jdXJy
ZW50Q29udGVudC5pbWFnZS0+c2l6ZSgpIDogbV9zaXplOwogICAgIH0KKyAgICBzdHJ1Y3QgVGls
ZSB7CisgICAgICAgIEZsb2F0UmVjdCByZWN0OworICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gdGV4dHVyZTsKKyAgICAgICAgYm9vbCBuZWVkc1Jlc2V0OworICAgIH07CiAKLSAgICBSZWZQ
dHI8Qml0bWFwVGV4dHVyZT4gbV90ZXh0dXJlOwotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBt
X3N1cmZhY2UsIG1fcmVwbGljYVN1cmZhY2U7CisgICAgVmVjdG9yPFRpbGU+IG1fdGlsZXM7CiAK
ICAgICBDb250ZW50RGF0YSBtX2N1cnJlbnRDb250ZW50OwogCiAgICAgVmVjdG9yPFRleHR1cmVN
YXBwZXJOb2RlKj4gbV9jaGlsZHJlbjsKICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbV9wYXJlbnQ7
CiAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG1fZWZmZWN0VGFyZ2V0OwotICAgIEludFNpemUgbV9z
aXplLCBtX25lYXJlc3RTdXJmYWNlU2l6ZTsKKyAgICBGbG9hdFNpemUgbV9zaXplOworICAgIGZs
b2F0IG1fb3BhY2l0eTsKICAgICBTdHJpbmcgbV9uYW1lOwotICAgIFRleHR1cmVNYXBwZXJMYXll
ckNsaWVudCogbV9wbGF0Zm9ybUNsaWVudDsKKworICAgIFZlY3RvcjxSZWZQdHI8VGV4dHVyZU1h
cHBlckFuaW1hdGlvbj4gPiBtX2FuaW1hdGlvbnM7CiAKICAgICBzdHJ1Y3QgU3RhdGUgewogICAg
ICAgICBGbG9hdFBvaW50IHBvczsKQEAgLTIwNiwyOSArMjcxLDI3IEBAIHByaXZhdGU6CiAgICAg
ICAgIEZsb2F0U2l6ZSBzaXplOwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zv
cm07CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkcmVuVHJhbnNmb3JtOwotICAg
ICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3I7Ci0gICAgICAgIENvbG9yIGN1cnJlbnRDb2xvcjsK
LSAgICAgICAgR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9u
IGdlb09yaWVudGF0aW9uOwotICAgICAgICBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3Jk
aW5hdGVzT3JpZW50YXRpb24gY29udGVudHNPcmllbnRhdGlvbjsKICAgICAgICAgZmxvYXQgb3Bh
Y2l0eTsKLSAgICAgICAgSW50UmVjdCBjb250ZW50c1JlY3Q7CisgICAgICAgIEZsb2F0UmVjdCBj
b250ZW50c1JlY3Q7CiAgICAgICAgIGludCBkZXNjZW5kYW50c1dpdGhDb250ZW50OwogICAgICAg
ICBUZXh0dXJlTWFwcGVyTm9kZSogbWFza0xheWVyOwogICAgICAgICBUZXh0dXJlTWFwcGVyTm9k
ZSogcmVwbGljYUxheWVyOwotICAgICAgICBib29sIHByZXNlcnZlczNEOwotICAgICAgICBib29s
IG1hc2tzVG9Cb3VuZHM7Ci0gICAgICAgIGJvb2wgZHJhd3NDb250ZW50OwotICAgICAgICBib29s
IGNvbnRlbnRzT3BhcXVlOwotICAgICAgICBib29sIGJhY2tmYWNlVmlzaWJpbGl0eTsKLSAgICAg
ICAgYm9vbCB2aXNpYmxlOwotICAgICAgICBib29sIGRpcnR5OwotICAgICAgICBib29sIHRpbGVk
OwotICAgICAgICBib29sIGhhc1N1cmZhY2VEZXNjZW5kYW50czsKLSAgICAgICAgSW50UmVjdCB2
aXNpYmxlUmVjdDsKKyAgICAgICAgYm9vbCBwcmVzZXJ2ZXMzRCA6IDE7CisgICAgICAgIGJvb2wg
bWFza3NUb0JvdW5kcyA6IDE7CisgICAgICAgIGJvb2wgZHJhd3NDb250ZW50IDogMTsKKyAgICAg
ICAgYm9vbCBjb250ZW50c09wYXF1ZSA6IDE7CisgICAgICAgIGJvb2wgYmFja2ZhY2VWaXNpYmls
aXR5IDogMTsKKyAgICAgICAgYm9vbCB2aXNpYmxlIDogMTsKKyAgICAgICAgYm9vbCBuZWVkc1Jl
c2V0OiAxOworICAgICAgICBib29sIG1pZ2h0SGF2ZU92ZXJsYXBzIDogMTsKKyAgICAgICAgYm9v
bCBuZWVkc1JlcGFpbnQ7CisgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdDsKKyAgICAgICAg
RmxvYXRSZWN0IHJvb3RWaXNpYmxlUmVjdDsKKyAgICAgICAgZmxvYXQgY29udGVudFNjYWxlOwor
ICAgICAgICBGbG9hdFJlY3QgcmVwYWludFJlY3Q7CiAKICAgICAgICAgU3RhdGUoKQogICAgICAg
ICAgICAgOiBvcGFjaXR5KDEuZikKLSAgICAgICAgICAgICwgZGVzY2VuZGFudHNXaXRoQ29udGVu
dCgwKQogICAgICAgICAgICAgLCBtYXNrTGF5ZXIoMCkKICAgICAgICAgICAgICwgcmVwbGljYUxh
eWVyKDApCiAgICAgICAgICAgICAsIHByZXNlcnZlczNEKGZhbHNlKQpAQCAtMjM3LDE2ICszMDAs
MjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICwgY29udGVudHNPcGFxdWUoZmFsc2UpCiAgICAg
ICAgICAgICAsIGJhY2tmYWNlVmlzaWJpbGl0eShmYWxzZSkKICAgICAgICAgICAgICwgdmlzaWJs
ZSh0cnVlKQotICAgICAgICAgICAgLCBkaXJ0eSh0cnVlKQotICAgICAgICAgICAgLCB0aWxlZChm
YWxzZSkKLSAgICAgICAgICAgICwgaGFzU3VyZmFjZURlc2NlbmRhbnRzKGZhbHNlKQorICAgICAg
ICAgICAgLCBuZWVkc1Jlc2V0KGZhbHNlKQorICAgICAgICAgICAgLCBtaWdodEhhdmVPdmVybGFw
cyhmYWxzZSkKKyAgICAgICAgICAgICwgY29udGVudFNjYWxlKDEuMGYpCiAgICAgICAgIHsKICAg
ICAgICAgfQogICAgIH07CiAKICAgICBTdGF0ZSBtX3N0YXRlOwotICAgIFRleHR1cmVNYXBwZXJD
YWNoZSogbV9jYWNoZTsKKyAgICBUZXh0dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXIqIG1fc3VyZmFj
ZU1hbmFnZXI7CisgICAgVGV4dHVyZU1hcHBlciogbV90ZXh0dXJlTWFwcGVyOwogfTsKIAorCitU
ZXh0dXJlTWFwcGVyTm9kZSogdG9UZXh0dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVyKik7CisK
K2lubGluZSB2b2lkIGRlbGV0ZU93bmVkUHRyKFRleHR1cmVNYXBwZXJOb2RlKiBwdHIpCit7Cisg
ICAgZGVsZXRlIHB0cjsKK30KKwogfQogI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJOb2RlX2gKLS0g
CjEuNy4zLjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92716</attachid>
            <date>2011-05-07 19:13:38 -0700</date>
            <delta_ts>2011-05-07 19:38:49 -0700</delta_ts>
            <desc>Patch 10: Glue layer</desc>
            <filename>0010-Glue-the-TextureMapper-refactoring-into-Webkit-1.patch</filename>
            <type>text/plain</type>
            <size>23425</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSBmOWQ2Nzk0MzhkMDMzODI0MTk4MzBjYTQwODNhOGIzOGUzNGE3YjkzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgpEYXRlOiBTYXQsIDcgTWF5IDIwMTEgMTg6NTc6NDIgLTA3MDAKU3ViamVjdDogW1BBVENI
IDEwLzEwXSBHbHVlIHRoZSBUZXh0dXJlTWFwcGVyIHJlZmFjdG9yaW5nIGludG8gV2Via2l0KDEp
LgogICAgIDEuIFBhc3MgYSBHcmFwaGljc0xheWVyKiBpbnN0ZWFkIG9mIGEgUGxhdGZvcm1MYXll
ciogdG8gdGhlIFFXZWJQYWdlQ2xpZW50LgogICAgIDIuIFNldCBwYXJhbWV0ZXJzIGluIFRleHR1
cmVNYXBwZXIvVGV4dHVyZU1hcHBlck5vZGUgaW5zdGVhZCBvZiBwYXNzaW5nIHRoZW0gICAgICAg
aW4gYW4gb3B0aW9ucyBhcmd1bWVudC4KICAgICAzLiBSZW5hbWUgUGxhdGZvcm1MYXllclByb3h5
UXQgdG8gVGV4dHVyZU1hcHBlck5vZGVDbGllbnQuCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNSArKwogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaCAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwICAgICAgICAgICAgICAgICB8ICAgMzAgKystLQogU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmggICAgICAgICAgICAgICAgICAgfCAgICA0ICst
CiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oICAgICAgICAgICAgICAgICB8ICAg
IDYgKy0KIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICA0MCArKysrCiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFF0LmNwcCB8ICAgIDIgKy0KIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNs
aWVudFF0LmNwcCAgIHwgIDE5OSArKysrKysrKy0tLS0tLS0tLS0tLQogU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaCAgICAgfCAgIDI0ICsrLQogOSBmaWxlcyBj
aGFuZ2VkLCAxNzUgaW5zZXJ0aW9ucygrKSwgMTQ3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCBjNzE3YTJhLi4xYzMwYTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC01LDYgKzUsMjEgQEAKICAgICAgICAg
W1RleG1hcF1bUXRdIFVwc3RyZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5nZXMgZnJvbSBRdCdzIFdl
YktpdDIgYnJhbmNoCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02MDQzOQogCisgICAgICAgIFBhdGNoIDEwLzEwOiBHbHVlIHRoZSBUZXh0dXJlTWFwcGVy
IHJlZmFjdG9yaW5nIGludG8gV2Via2l0KDEpLgorICAgICAgICBQYXNzIGEgR3JhcGhpY3NMYXll
ciogaW5zdGVhZCBvZiBhIFBsYXRmb3JtTGF5ZXIqIHRvIHRoZSBRV2ViUGFnZUNsaWVudC4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3RzIGluIExheW91dFRlc3RzL2NvbXBvc2l0aW5nIGNv
dmVyIHRoaXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oOgorICAg
ICAgICAoUVdlYlBhZ2VDbGllbnQ6OnNldFJvb3RHcmFwaGljc0xheWVyKToKKworMjAxMS0wNS0w
NyAgTm9hbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1RleG1hcF1bUXRdIFVwc3Ry
ZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5nZXMgZnJvbSBRdCdzIFdlYktpdDIgYnJhbmNoCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDQzOQorCiAgICAg
ICAgIFBhdGNoIDkvMTA6IFJlZmFjdG9yIFRleHR1cmVNYXBwZXJOb2RlIGZvciBwZXJmb3JtYW5j
ZSwgcmVhZGFiaWxpdHkgYW5kIGFjY3VyYWN5LgogICAgICAgICBDaGFuZ2VzIGluY2x1ZGU6CiAg
ICAgICAgIDEuIGFuaW1hdGlvbnMgYXJlIGltcGxlbWVudGVkIGluc2lkZSBUZXh0dXJlTWFwcGVy
Tm9kZSwgdG8gYXZvaWQgZmFsbGluZyBiYWNrIHRvIEFuaW1hdGlvbkNvbnRyb2xsZXIuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaAppbmRleCBkOGY0MTcxLi44
Mzk2Y2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNs
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmgK
QEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhv
ZEVuYWJsZWQoYm9vbCBlbmFibGUpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaW5wdXRNZXRob2RF
bmFibGVkKCkgY29uc3QgPSAwOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6UGxhdGZvcm1MYXll
ciogbGF5ZXIpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiBsYXllcikgeyB9CiAKICAgICAvLyB0aGlzIGdldHMgY2FsbGVk
IHdoZW4gdGhlIGNvbXBvc2l0b3Igd2FudHMgdXMgdG8gc3luYyB0aGUgbGF5ZXJzCiAgICAgLy8g
aWYgc2NoZWR1bGVTeW5jIGlzIHRydWUsIHdlIHNjaGVkdWxlIGEgc3luYyBvdXJzZWx2ZXMuIG90
aGVyd2lzZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCmluZGV4IDg1N2NhNjMuLjllODk3
NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcApAQCAtOTgsNyArOTgsNyBAQAogI2Vu
ZGlmCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFw
cGVyLmgiCi0jaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCisj
aW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgiCiAjZW5kaWYKICNpbmNsdWRlICJ3
dGYvSGFzaE1hcC5oIgogI2luY2x1ZGUgPFFNdWx0aU1hcD4KQEAgLTMyMSwyNCArMzIxLDI4IEBA
IHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyRnJvbVRpbGVkQmFja2luZ1N0b3JlKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiB2b2lkIFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckNv
bXBvc2l0ZWRMYXllcnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBj
bGlwKQogewotICAgIGlmICghcm9vdEdyYXBoaWNzTGF5ZXIpCisgICAgaWYgKCFyb290VGV4dHVy
ZU1hcHBlck5vZGUgfHwgIXRleHR1cmVNYXBwZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIHRl
eHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICB0ZXh0dXJlTWFw
cGVyLT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQtPmltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoKSk7CiAgICAgdGV4dHVyZU1hcHBlci0+c2V0VGV4dERyYXdpbmdNb2RlKGNv
bnRleHQtPnRleHREcmF3aW5nTW9kZSgpKTsKKyAgICB0ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9y
dFNpemUoZnJhbWUtPnZpZXcoKS0+ZnJhbWVSZWN0KCkuc2l6ZSgpKTsKICAgICBRUGFpbnRlciog
cGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEZyYW1lVmlldyogdmll
dyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgcGFpbnRlci0+c2F2ZSgpOwotICAgIHBhaW50ZXItPmJl
Z2luTmF0aXZlUGFpbnRpbmcoKTsKLSAgICBUZXh0dXJlTWFwcGVyQ29udGVudExheWVyOjpQYWlu
dE9wdGlvbnMgb3B0aW9uczsKLSAgICBvcHRpb25zLnZpc2libGVSZWN0ID0gY2xpcDsKLSAgICBv
cHRpb25zLnRhcmdldFJlY3QgPSB2aWV3LT5mcmFtZVJlY3QoKTsKLSAgICBvcHRpb25zLnZpZXdw
b3J0U2l6ZSA9IHZpZXctPnNpemUoKTsKLSAgICBvcHRpb25zLm9wYWNpdHkgPSBwYWludGVyLT5v
cGFjaXR5KCk7Ci0gICAgcm9vdEdyYXBoaWNzTGF5ZXItPnBhaW50KHRleHR1cmVNYXBwZXIuZ2V0
KCksIG9wdGlvbnMpOwotICAgIHBhaW50ZXItPmVuZE5hdGl2ZVBhaW50aW5nKCk7Ci0gICAgcGFp
bnRlci0+cmVzdG9yZSgpOworICAgIGNvbnN0IFFUcmFuc2Zvcm0gdHJhbnNmb3JtID0gcGFpbnRl
ci0+d29ybGRUcmFuc2Zvcm0oKTsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRy
aXgoCisgICAgICAgICAgICAgICAgdHJhbnNmb3JtLm0xMSgpLCB0cmFuc2Zvcm0ubTEyKCksIDAs
IHRyYW5zZm9ybS5tMTMoKSwKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0ubTIxKCksIHRyYW5z
Zm9ybS5tMjIoKSwgMCwgdHJhbnNmb3JtLm0yMygpLAorICAgICAgICAgICAgICAgIDAsIDAsIDEs
IDAsCisgICAgICAgICAgICAgICAgdHJhbnNmb3JtLm0zMSgpLCB0cmFuc2Zvcm0ubTMyKCksIDAs
IHRyYW5zZm9ybS5tMzMoKQorICAgICAgICAgICAgICAgICk7CisgICAgcm9vdFRleHR1cmVNYXBw
ZXJOb2RlLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKKyAgICByb290VGV4dHVyZU1hcHBlck5vZGUt
PnNldE9wYWNpdHkocGFpbnRlci0+b3BhY2l0eSgpKTsKKyAgICB0ZXh0dXJlTWFwcGVyLT5iZWdp
blBhaW50aW5nKCk7CisgICAgdGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKG1hdHJpeCwgY2xpcCk7
CisgICAgcm9vdFRleHR1cmVNYXBwZXJOb2RlLT5wYWludCgpOworICAgIHRleHR1cmVNYXBwZXIt
PmVuZENsaXAoKTsKKyAgICB0ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOwogfQogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5oIGIvU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgKaW5kZXggM2M1YTI4ZS4uNGZiNmYxYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgKKysrIGIvU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYmZyYW1lLmgKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIFdpZGdldFByaXZhdGU7CiAgICAgY2xhc3MgRnJhbWVMb2FkZXJDbGllbnRR
dDsKICAgICBjbGFzcyBDaHJvbWVDbGllbnRRdDsKLSAgICBjbGFzcyBQbGF0Zm9ybUxheWVyUHJv
eHlRdDsKKyAgICBjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0OwogfQogY2xhc3MgUVdl
YkZyYW1lRGF0YTsKIGNsYXNzIFFXZWJIaXRUZXN0UmVzdWx0UHJpdmF0ZTsKQEAgLTIzMiw3ICsy
MzIsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpXaWRnZXRQcml2YXRl
OwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OwogICAgIGZy
aWVuZCBjbGFzcyBXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDsKLSAgICBmcmllbmQgY2xhc3MgV2Vi
Q29yZTo6UGxhdGZvcm1MYXllclByb3h5UXQ7CisgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ7CiAgICAgUVdlYkZyYW1lUHJpdmF0ZSAqZDsKICAgICBR
X1BSSVZBVEVfU0xPVChkLCB2b2lkIF9xX29yaWVudGF0aW9uQ2hhbmdlZCgpKQogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmggYi9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViZnJhbWVfcC5oCmluZGV4IDQxMDg5NzIuLjc3MWU2OGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKKysrIGIvU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYmZyYW1lX3AuaApAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgRnJhbWVWaWV3OwogICAgIGNsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVudDsK
ICAgICBjbGFzcyBTY3JvbGxiYXI7Ci0gICAgY2xhc3MgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXll
cjsKKyAgICBjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZTsKIH0KIGNsYXNzIFFXZWJQYWdlOwogCkBA
IC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtYXJnaW5XaWR0aCgtMSkKICAgICAg
ICAgLCBtYXJnaW5IZWlnaHQoLTEpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAm
JiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgICAgICwgcm9vdEdyYXBoaWNzTGF5ZXIoMCkKKyAg
ICAgICAgLCByb290VGV4dHVyZU1hcHBlck5vZGUoMCkKICNlbmRpZgogICAgICAgICB7fQogICAg
IHZvaWQgaW5pdChRV2ViRnJhbWUqIHFmcmFtZSwgUVdlYkZyYW1lRGF0YSogZnJhbWVEYXRhKTsK
QEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgaW50IG1hcmdpbldpZHRoOwogICAgIGlu
dCBtYXJnaW5IZWlnaHQ7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCi0gICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllciog
cm9vdEdyYXBoaWNzTGF5ZXI7CisgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGUqIHJvb3RU
ZXh0dXJlTWFwcGVyTm9kZTsKICAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4gdGV4
dHVyZU1hcHBlcjsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDc1NjM0ZWQuLjgxMzdlZjRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZwpAQCAtMiw2ICsyLDQ2IEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgW1RleG1hcF1bUXRdIFVwc3RyZWFtIHRleHR1cmUt
bWFwcGVyIGNoYW5nZXMgZnJvbSBRdCdzIFdlYktpdDIgYnJhbmNoCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDQzOQorCisgICAgICAgIFBhdGNoIDEw
LzEwOiBHbHVlIHRoZSBUZXh0dXJlTWFwcGVyIHJlZmFjdG9yaW5nIGludG8gV2Via2l0KDEpLgor
ICAgICAgICAxLiBQYXNzIGEgR3JhcGhpY3NMYXllciogaW5zdGVhZCBvZiBhIFBsYXRmb3JtTGF5
ZXIqIHRvIHRoZSBRV2ViUGFnZUNsaWVudC4KKyAgICAgICAgMi4gU2V0IHBhcmFtZXRlcnMgaW4g
VGV4dHVyZU1hcHBlci9UZXh0dXJlTWFwcGVyTm9kZSBpbnN0ZWFkIG9mIHBhc3NpbmcgdGhlbSBp
biBhbiBvcHRpb25zIGFyZ3VtZW50LgorICAgICAgICAzLiBSZW5hbWUgUGxhdGZvcm1MYXllclBy
b3h5UXQgdG8gVGV4dHVyZU1hcHBlck5vZGVDbGllbnQKKworICAgICAgICAqIEFwaS9xd2ViZnJh
bWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyQ29tcG9zaXRlZExheWVy
cyk6CisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5oOgorICAgICAgICAqIEFwaS9xd2ViZnJhbWVf
cC5oOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6UVdlYkZyYW1lUHJpdmF0ZSk6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21lQ2xpZW50UXQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlck5vZGVDbGllbnRRdDo6VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0OjpzY3JvbGwpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdDo6c2V0VGV4dHVyZU1hcHBlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0Ojp+VGV4dHVyZU1hcHBl
ck5vZGVDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZUNsaWVu
dFF0Ojpjb21wdXRlTGFzdE1vZGlmaWVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyTm9kZUNsaWVudFF0OjpzeW5jUm9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ6OnJvb3ROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2VDbGllbnRRV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlQ2xpZW50UVdpZGdldDo6c3luY0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Q2xpZW50UVdpZGdldDo6flBhZ2VDbGllbnRRV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6On5QYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnVwZGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzeW5jTGF5ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGlj
c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6Om1h
cmtGb3JTeW5jKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRV2lkZ2V0OjpQYWdlQ2xpZW50UVdpZGdldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpQYWdlQ2xpZW50UUdy
YXBoaWNzV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRn
ZXQ6OnN5bmNMYXllcnNUaW1lb3V0KToKKworMjAxMS0wNS0wNyAgTm9hbSBSb3NlbnRoYWwgIDxu
b2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKICAgICAgICAgW1RleG1hcF0gVXBzdHJlYW0gdGV4dHVyZS1tYXBwZXIgY2hhbmdl
cyBmcm9tIFF0J3MgV2ViS2l0MiBicmFuY2gKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTYwNDM5CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKaW5kZXggZWEyYzgyNi4uMDQwNGVmZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5j
cHAKQEAgLTYyMSw3ICs2MjEsNyBAQCB2b2lkIENocm9tZUNsaWVudFF0OjpzZXRDdXJzb3IoY29u
c3QgQ3Vyc29yJiBjdXJzb3IpCiB2b2lkIENocm9tZUNsaWVudFF0OjphdHRhY2hSb290R3JhcGhp
Y3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7CiAg
ICAgaWYgKHBsYXRmb3JtUGFnZUNsaWVudCgpKQotICAgICAgICBwbGF0Zm9ybVBhZ2VDbGllbnQo
KS0+c2V0Um9vdEdyYXBoaWNzTGF5ZXIoZ3JhcGhpY3NMYXllciA/IGdyYXBoaWNzTGF5ZXItPnBs
YXRmb3JtTGF5ZXIoKSA6IDApOworICAgICAgICBwbGF0Zm9ybVBhZ2VDbGllbnQoKS0+c2V0Um9v
dEdyYXBoaWNzTGF5ZXIoZ3JhcGhpY3NMYXllcik7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6
OnNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCmluZGV4IDE4MjFiZWMuLjdi
OGRhNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNs
aWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGll
bnRRdC5jcHAKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2luY2x1ZGUgIlBhZ2VDbGllbnRRdC5oIgog
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJRdC5oIgotI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5o
IgogI2luY2x1ZGUgPFFHcmFwaGljc1NjZW5lPgogI2luY2x1ZGUgPFFHcmFwaGljc1ZpZXc+CiAj
aWYgZGVmaW5lZChRX1dTX1gxMSkKQEAgLTM2LDEzMSArMzYsNjggQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVIpICAgIAotY2xhc3MgUGxhdGZvcm1MYXllclByb3h5UXQgOiBwdWJsaWMgUU9iamVj
dCwgcHVibGljIHZpcnR1YWwgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50IHsKLXB1YmxpYzoKLSAg
ICBQbGF0Zm9ybUxheWVyUHJveHlRdChRV2ViRnJhbWUqIGZyYW1lLCBUZXh0dXJlTWFwcGVyQ29u
dGVudExheWVyKiBsYXllciwgUU9iamVjdCogb2JqZWN0KQotICAgICAgICA6IFFPYmplY3Qob2Jq
ZWN0KQotICAgICAgICAsIG1fZnJhbWUoZnJhbWUpCi0gICAgICAgICwgbV9sYXllcihsYXllcikK
LSAgICB7Ci0gICAgICAgIGlmIChtX2xheWVyKQotICAgICAgICAgICAgbV9sYXllci0+c2V0UGxh
dGZvcm1MYXllckNsaWVudCh0aGlzKTsKLSAgICAgICAgbV9mcmFtZS0+ZC0+cm9vdEdyYXBoaWNz
TGF5ZXIgPSBtX2xheWVyOwotICAgIH0KLQotICAgIHZvaWQgc2V0VGV4dHVyZU1hcHBlcihQYXNz
T3duUHRyPFRleHR1cmVNYXBwZXI+IHRleHR1cmVNYXBwZXIpCi0gICAgewotICAgICAgICBtX2Zy
YW1lLT5kLT50ZXh0dXJlTWFwcGVyID0gdGV4dHVyZU1hcHBlcjsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIH5QbGF0Zm9ybUxheWVyUHJveHlRdCgpCi0gICAgewotICAgICAgICBpZiAobV9sYXllcikK
LSAgICAgICAgICAgIG1fbGF5ZXItPnNldFBsYXRmb3JtTGF5ZXJDbGllbnQoMCk7Ci0gICAgICAg
IGlmIChtX2ZyYW1lLT5kKQotICAgICAgICAgICAgbV9mcmFtZS0+ZC0+cm9vdEdyYXBoaWNzTGF5
ZXIgPSAwOwotICAgIH0KLQotICAgIHZpcnR1YWwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBl
cigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9mcmFtZS0+ZC0+dGV4dHVyZU1hcHBlci5nZXQo
KTsKLSAgICB9Ci0KLSAgICAvLyBTaW5jZSB3ZSBqdXN0IHBhaW50IHRoZSBjb21wb3NpdGVkIHRy
ZWUgYW5kIG5ldmVyIGNyZWF0ZSBhIHNwZWNpYWwgaXRlbSBmb3IgaXQsIHdlIGRvbid0IGhhdmUg
dG8gaGFuZGxlIGl0cyBzaXplIGNoYW5nZXMuCi0gICAgdm9pZCBzZXRTaXplQ2hhbmdlZChjb25z
dCBJbnRTaXplJikgeyB9Ci0KLXByaXZhdGU6Ci0gICAgUVdlYkZyYW1lKiBtX2ZyYW1lOwotICAg
IFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqIG1fbGF5ZXI7Ci19OwotCi1jbGFzcyBQbGF0Zm9y
bUxheWVyUHJveHlRV2lkZ2V0IDogcHVibGljIFBsYXRmb3JtTGF5ZXJQcm94eVF0IHsKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKK2NsYXNz
IFRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQgewogcHVibGljOgotICAgIFBsYXRmb3JtTGF5ZXJQ
cm94eVFXaWRnZXQoUVdlYkZyYW1lKiBmcmFtZSwgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllciog
bGF5ZXIsIFFXaWRnZXQqIHdpZGdldCkKLSAgICAgICAgOiBQbGF0Zm9ybUxheWVyUHJveHlRdChm
cmFtZSwgbGF5ZXIsIHdpZGdldCkKLSAgICAgICAgLCBtX3dpZGdldCh3aWRnZXQpCisgICAgVGV4
dHVyZU1hcHBlck5vZGVDbGllbnRRdChRV2ViRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiBs
YXllcikKKyAgICAgICAgOiBtX2ZyYW1lKGZyYW1lKQorICAgICAgICAsIG1fcm9vdEdyYXBoaWNz
TGF5ZXIoR3JhcGhpY3NMYXllcjo6Y3JlYXRlKDApKQogICAgIHsKLSAgICAgICAgaWYgKG1fd2lk
Z2V0KQotICAgICAgICAgICAgbV93aWRnZXQtPmluc3RhbGxFdmVudEZpbHRlcih0aGlzKTsKLQot
ICAgICAgICBpZiAodGV4dHVyZU1hcHBlcigpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIHNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlclF0OjpjcmVhdGUoKSk7CisgICAgICAg
IG1fZnJhbWUtPmQtPnJvb3RUZXh0dXJlTWFwcGVyTm9kZSA9IHJvb3ROb2RlKCk7CisgICAgICAg
IG1fcm9vdEdyYXBoaWNzTGF5ZXItPmFkZENoaWxkKGxheWVyKTsKKyAgICAgICAgbV9yb290R3Jh
cGhpY3NMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICAgICAgbV9yb290R3JhcGhp
Y3NMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CisgICAgICAgIG1fcm9vdEdyYXBoaWNz
TGF5ZXItPnNldFNpemUoSW50U2l6ZSgxLCAxKSk7CiAgICAgfQogCi0gICAgLy8gV2UgZG9uJ3Qg
d2FudCBhIGh1Z2UgcmVnaW9uLWNsaXAgb24gdGhlIGNvbXBvc2l0aW5nIGxheWVyczsgaW5zdGVh
ZCB3ZSB1bml0ZSB0aGUgcmVjdGFuZ2xlcyB0b2dldGhlcgotICAgIC8vIGFuZCBjbGVhciB0aGVt
IHdoZW4gdGhlIHBhaW50IGFjdHVhbGx5IG9jY3Vycy4KLSAgICBib29sIGV2ZW50RmlsdGVyKFFP
YmplY3QqIG9iamVjdCwgUUV2ZW50KiBldmVudCkKKyAgICB2b2lkIHNjcm9sbChmbG9hdCBkeCwg
ZmxvYXQgZHkpCiAgICAgewotICAgICAgICBpZiAob2JqZWN0ID09IG1fd2lkZ2V0ICYmIGV2ZW50
LT50eXBlKCkgPT0gUUV2ZW50OjpQYWludCkKLSAgICAgICAgICAgIG1fZGlydHlSZWN0ID0gUVJl
Y3QoKTsKLSAgICAgICAgcmV0dXJuIFFPYmplY3Q6OmV2ZW50RmlsdGVyKG9iamVjdCwgZXZlbnQp
OworICAgICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gbV9yb290R3JhcGhpY3NMYXllci0+cG9z
aXRpb24oKTsKKyAgICAgICAgbV9yb290R3JhcGhpY3NMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQ
b2ludChwb3NpdGlvbi54KCkgKyBkeCwgcG9zaXRpb24ueSgpICsgZHkpKTsKICAgICB9CiAKLSAg
ICB2b2lkIHNldE5lZWRzRGlzcGxheSgpCisgICAgdm9pZCBzZXRUZXh0dXJlTWFwcGVyKGNvbnN0
IFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4mIHRleHR1cmVNYXBwZXIpCiAgICAgewotICAgICAg
ICBpZiAobV93aWRnZXQpCi0gICAgICAgICAgICBtX3dpZGdldC0+dXBkYXRlKCk7CisgICAgICAg
IG1fZnJhbWUtPmQtPnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVyOworICAgICAgICBtX2Zy
YW1lLT5kLT5yb290VGV4dHVyZU1hcHBlck5vZGUtPnNldFRleHR1cmVNYXBwZXIobV9mcmFtZS0+
ZC0+dGV4dHVyZU1hcHBlci5nZXQoKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXROZWVkc0Rpc3Bs
YXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVy
Tm9kZUNsaWVudFF0KCkKICAgICB7Ci0gICAgICAgIG1fZGlydHlSZWN0IHw9IHJlY3Q7Ci0gICAg
ICAgIG1fd2lkZ2V0LT51cGRhdGUobV9kaXJ0eVJlY3QpOworICAgICAgICBpZiAobV9mcmFtZS0+
ZCkKKyAgICAgICAgICAgIG1fZnJhbWUtPmQtPnJvb3RUZXh0dXJlTWFwcGVyTm9kZSA9IDA7CiAg
ICAgfQogCi1wcml2YXRlOgotICAgIFFSZWN0IG1fZGlydHlSZWN0OwotICAgIFFXaWRnZXQqIG1f
d2lkZ2V0OwotfTsKLQotI2lmICFkZWZpbmVkKFFUX05PX0dSQVBISUNTVklFVykKLWNsYXNzIFBs
YXRmb3JtTGF5ZXJQcm94eVFHcmFwaGljc09iamVjdCA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyUHJv
eHlRdCB7Ci1wdWJsaWM6Ci0gICAgUGxhdGZvcm1MYXllclByb3h5UUdyYXBoaWNzT2JqZWN0KFFX
ZWJGcmFtZSogZnJhbWUsIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqIGxheWVyLCBRR3JhcGhp
Y3NPYmplY3QqIG9iamVjdCkKLSAgICAgICAgOiBQbGF0Zm9ybUxheWVyUHJveHlRdChmcmFtZSwg
bGF5ZXIsIG9iamVjdCkKLSAgICAgICAgLCBtX2dyYXBoaWNzSXRlbShvYmplY3QpCisgICAgUVJl
Y3QgY29tcHV0ZUxhc3RNb2RpZmllZFJlY3QoKQogICAgIHsKLSAgICAgICAgaWYgKHRleHR1cmVN
YXBwZXIoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotI2lmZGVmIFFUX09QRU5HTF9MSUIKLSAg
ICAgICAgUUdyYXBoaWNzVmlldyogdmlldyA9IG9iamVjdC0+c2NlbmUoKS0+dmlld3MoKVswXTsK
LSAgICAgICAgaWYgKHZpZXcgJiYgdmlldy0+dmlld3BvcnQoKSAmJiB2aWV3LT52aWV3cG9ydCgp
LT5pbmhlcml0cygiUUdMV2lkZ2V0IikpIHsKLSAgICAgICAgICAgIHNldFRleHR1cmVNYXBwZXIo
VGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSNlbmRpZgotICAgICAgICBzZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXJRdDo6Y3Jl
YXRlKCkpOworICAgICAgICByZXR1cm4gbV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJOb2Rl
LT5jb21wdXRlTGFzdE1vZGlmaWVkUmVjdCgpOwogICAgIH0KIAotICAgIHZvaWQgc2V0TmVlZHNE
aXNwbGF5KCkKKyAgICB2b2lkIHN5bmNSb290TGF5ZXIoKQogICAgIHsKLSAgICAgICAgaWYgKG1f
Z3JhcGhpY3NJdGVtKQotICAgICAgICAgICAgbV9ncmFwaGljc0l0ZW0tPnVwZGF0ZSgpOworICAg
ICAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXll
ck9ubHkoKTsKICAgICB9CiAKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0KQorICAgIFRleHR1cmVNYXBwZXJOb2RlKiByb290Tm9kZSgpCiAgICAgewot
ICAgICAgICBpZiAobV9ncmFwaGljc0l0ZW0pCi0gICAgICAgICAgICBtX2dyYXBoaWNzSXRlbS0+
dXBkYXRlKFFSZWN0RihyZWN0KSk7CisgICAgICAgIHJldHVybiB0b1RleHR1cmVNYXBwZXJOb2Rl
KG1fcm9vdEdyYXBoaWNzTGF5ZXIuZ2V0KCkpOwogICAgIH0KIAotcHJpdmF0ZToKLSAgICBRR3Jh
cGhpY3NJdGVtKiBtX2dyYXBoaWNzSXRlbTsKK3Byb3RlY3RlZDoKKyAgICBRV2ViRnJhbWUqIG1f
ZnJhbWU7CisgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9vdEdyYXBoaWNzTGF5ZXI7CiB9
OwotI2VuZGlmIC8vIFFUX05PX0dSQVBISUNTVklFVwogCi12b2lkIFBhZ2VDbGllbnRRV2lkZ2V0
OjpzZXRSb290R3JhcGhpY3NMYXllcihUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbGF5ZXIp
Cit2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xh
eWVyKiBsYXllcikKIHsKICAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgcGxhdGZvcm1MYXllclBy
b3h5ID0gbmV3IFBsYXRmb3JtTGF5ZXJQcm94eVFXaWRnZXQocGFnZS0+bWFpbkZyYW1lKCksIHN0
YXRpY19jYXN0PFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqPihsYXllciksIHZpZXcpOworICAg
ICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCA9IG5ldyBUZXh0dXJlTWFwcGVyTm9kZUNsaWVu
dFF0KHBhZ2UtPm1haW5GcmFtZSgpLCBsYXllcik7CisgICAgICAgIHRleHR1cmVNYXBwZXJOb2Rl
Q2xpZW50LT5zZXRUZXh0dXJlTWFwcGVyKG5ldyBUZXh0dXJlTWFwcGVyUXQpOworICAgICAgICB0
ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c3luY1Jvb3RMYXllcigpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIGRlbGV0ZSBwbGF0Zm9ybUxheWVyUHJveHk7Ci0gICAgcGxhdGZvcm1MYXll
clByb3h5ID0gMDsKKyAgICBkZWxldGUgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQ7CisgICAgdGV4
dHVyZU1hcHBlck5vZGVDbGllbnQgPSAwOwogfQogCiB2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0Ojpt
YXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3luYykKQEAgLTE3MCw3ICsxMDcsMTQgQEAgdm9pZCBQ
YWdlQ2xpZW50UVdpZGdldDo6bWFya0ZvclN5bmMoYm9vbCBzY2hlZHVsZVN5bmMpCiAKIHZvaWQg
UGFnZUNsaWVudFFXaWRnZXQ6OnN5bmNMYXllcnMoVGltZXI8UGFnZUNsaWVudFFXaWRnZXQ+KikK
IHsKKyAgICBpZiAodGV4dHVyZU1hcHBlck5vZGVDbGllbnQpCisgICAgICAgIHRleHR1cmVNYXBw
ZXJOb2RlQ2xpZW50LT5zeW5jUm9vdExheWVyKCk7CiAgICAgUVdlYkZyYW1lUHJpdmF0ZTo6Y29y
ZShwYWdlLT5tYWluRnJhbWUoKSktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRp
bmdTdWJmcmFtZXMoKTsKKyAgICBpZiAoIXRleHR1cmVNYXBwZXJOb2RlQ2xpZW50KQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5yb290Tm9kZSgpLT5k
ZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQorICAgICAgICBzeW5jVGlt
ZXIuc3RhcnRPbmVTaG90KDEuMCAvIDYwLjApOworICAgIHVwZGF0ZSh2aWV3LT5yZWN0KCkpOwog
fQogI2VuZGlmCiAKQEAgLTIwMiw3ICsxNDYsNyBAQCB2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0Ojpz
ZXRJbnB1dE1ldGhvZEhpbnRzKFF0OjpJbnB1dE1ldGhvZEhpbnRzIGhpbnRzKQogUGFnZUNsaWVu
dFFXaWRnZXQ6On5QYWdlQ2xpZW50UVdpZGdldCgpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgZGVsZXRlIHBsYXRmb3JtTGF5
ZXJQcm94eTsKKyAgICBkZWxldGUgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQ7CiAjZW5kaWYKIH0K
IApAQCAtMjYyLDcgKzIwNiw3IEBAIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6On5QYWdlQ2xp
ZW50UUdyYXBoaWNzV2lkZ2V0KCkKICAgICBkZWxldGUgb3ZlcmxheTsKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIGRlbGV0ZSBw
bGF0Zm9ybUxheWVyUHJveHk7CisgICAgZGVsZXRlIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50Owog
I2Vsc2UKICAgICBpZiAoIXJvb3RHcmFwaGljc0xheWVyKQogICAgICAgICByZXR1cm47CkBAIC0y
ODUsNyArMjI5LDcgQEAgdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp1cGRhdGUoY29u
c3QgUVJlY3QmIGRpcnR5UmVjdCkKICAgICBjcmVhdGVPckRlbGV0ZU92ZXJsYXkoKTsKICAgICBp
ZiAob3ZlcmxheSkKICAgICAgICAgb3ZlcmxheS0+dXBkYXRlKFFSZWN0RihkaXJ0eVJlY3QpKTsK
LSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKSAmJiAhVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIHN5bmNMYXllcnMoKTsKICNl
bmRpZgogfQpAQCAtMzIwLDI0ICsyNjQsNDYgQEAgdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lk
Z2V0OjpjcmVhdGVPckRlbGV0ZU92ZXJsYXkoKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c3luY0xheWVycygpCiB7Ci0g
ICAgaWYgKHNob3VsZFN5bmMpIHsKLSAgICAgICAgUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShwYWdl
LT5tYWluRnJhbWUoKSktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJm
cmFtZXMoKTsKLSAgICAgICAgc2hvdWxkU3luYyA9IGZhbHNlOwotICAgIH0KKyNpZiBVU0UoVEVY
VFVSRV9NQVBQRVIpCisgICAgaWYgKHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50KQorICAgICAgICB0
ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c3luY1Jvb3RMYXllcigpOworI2VuZGlmCisKKyAgICBR
V2ViRnJhbWVQcml2YXRlOjpjb3JlKHBhZ2UtPm1haW5GcmFtZSgpKS0+dmlldygpLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworCisjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQorICAgIGlmICghdGV4dHVyZU1hcHBlck5vZGVDbGllbnQpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICh0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+cm9vdE5vZGUoKS0+ZGVzY2VuZGFu
dHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKKyAgICAgICAgc3luY1RpbWVyLnN0YXJ0
T25lU2hvdCgxLjAgLyA2MC4wKTsKKyAgICB1cGRhdGUodmlldy0+Ym91bmRpbmdSZWN0KCkudG9B
bGlnbmVkUmVjdCgpKTsKKyAgICBpZiAoIXNob3VsZFN5bmMpCisgICAgICAgIHJldHVybjsKKyAg
ICBzaG91bGRTeW5jID0gZmFsc2U7CisjZW5kaWYKIH0KIAogI2lmIFVTRShURVhUVVJFX01BUFBF
UikKLXZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIo
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIGxheWVyKQordm9pZCBQYWdlQ2xpZW50UUdyYXBo
aWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKIHsK
ICAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgcGxhdGZvcm1MYXllclByb3h5ID0gbmV3IFBsYXRm
b3JtTGF5ZXJQcm94eVFHcmFwaGljc09iamVjdChwYWdlLT5tYWluRnJhbWUoKSwgc3RhdGljX2Nh
c3Q8VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcio+KGxheWVyKSwgdmlldyk7CisgICAgICAgIHRl
eHR1cmVNYXBwZXJOb2RlQ2xpZW50ID0gbmV3IFRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQocGFn
ZS0+bWFpbkZyYW1lKCksIGxheWVyKTsKKyNpZmRlZiBRVF9PUEVOR0xfTElCCisgICAgICAgIFFH
cmFwaGljc1ZpZXcqIGdyYXBoaWNzVmlldyA9IHZpZXctPnNjZW5lKCktPnZpZXdzKClbMF07Cisg
ICAgICAgIGlmIChncmFwaGljc1ZpZXcgJiYgZ3JhcGhpY3NWaWV3LT52aWV3cG9ydCgpICYmIGdy
YXBoaWNzVmlldy0+dmlld3BvcnQoKS0+aW5oZXJpdHMoIlFHTFdpZGdldCIpKSB7CisgICAgICAg
ICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFw
cGVyR0w6OmNyZWF0ZSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2VuZGlm
CisgICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zZXRUZXh0dXJlTWFwcGVyKFRleHR1
cmVNYXBwZXJRdDo6Y3JlYXRlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGRlbGV0
ZSBwbGF0Zm9ybUxheWVyUHJveHk7Ci0gICAgcGxhdGZvcm1MYXllclByb3h5ID0gMDsKKyAgICBk
ZWxldGUgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQ7CisgICAgdGV4dHVyZU1hcHBlck5vZGVDbGll
bnQgPSAwOwogfQogI2Vsc2UKLXZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9v
dEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzT2JqZWN0KiBsYXllcikKK3ZvaWQgUGFnZUNsaWVudFFH
cmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIp
CiB7CiAgICAgaWYgKHJvb3RHcmFwaGljc0xheWVyKSB7CiAgICAgICAgIHJvb3RHcmFwaGljc0xh
eWVyLmRhdGEoKS0+c2V0UGFyZW50SXRlbSgwKTsKQEAgLTM0NSwxMiArMzExLDEyIEBAIHZvaWQg
UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNz
T2JqZWN0KiBsYXllcikKICAgICAgICAgUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShwYWdlLT5tYWlu
RnJhbWUoKSktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMo
KTsKICAgICB9CiAKLSAgICByb290R3JhcGhpY3NMYXllciA9IGxheWVyOworICAgIHJvb3RHcmFw
aGljc0xheWVyID0gbGF5ZXIgPyBsYXllci0+cGxhdGZvcm1MYXllcigpIDogMDsKIAotICAgIGlm
IChsYXllcikgewotICAgICAgICBsYXllci0+c2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJdGVtQ2xp
cHNDaGlsZHJlblRvU2hhcGUsIHRydWUpOwotICAgICAgICBsYXllci0+c2V0UGFyZW50SXRlbSh2
aWV3KTsKLSAgICAgICAgbGF5ZXItPnNldFpWYWx1ZShSb290R3JhcGhpY3NMYXllclpWYWx1ZSk7
CisgICAgaWYgKHJvb3RHcmFwaGljc0xheWVyKSB7CisgICAgICAgIHJvb3RHcmFwaGljc0xheWVy
LmRhdGEoKS0+c2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJdGVtQ2xpcHNDaGlsZHJlblRvU2hhcGUs
IHRydWUpOworICAgICAgICByb290R3JhcGhpY3NMYXllci5kYXRhKCktPnNldFBhcmVudEl0ZW0o
dmlldyk7CisgICAgICAgIHJvb3RHcmFwaGljc0xheWVyLmRhdGEoKS0+c2V0WlZhbHVlKFJvb3RH
cmFwaGljc0xheWVyWlZhbHVlKTsKICAgICB9CiAgICAgY3JlYXRlT3JEZWxldGVPdmVybGF5KCk7
CiB9CkBAIC0zNTksOCArMzI1LDcgQEAgdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojpz
ZXRSb290R3JhcGhpY3NMYXllcihRR3JhcGhpY3NPYmplY3QqIGxheWVyKQogdm9pZCBQYWdlQ2xp
ZW50UUdyYXBoaWNzV2lkZ2V0OjptYXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3luYykKIHsKICAg
ICBzaG91bGRTeW5jID0gdHJ1ZTsKLSAgICBpZiAoc2NoZWR1bGVTeW5jKQotICAgICAgICBzeW5j
TWV0YU1ldGhvZC5pbnZva2UodmlldywgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOworICAgIHN5bmNU
aW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmgKaW5kZXggMTZiYjUwYy4uMTc5NmI3MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCkBAIC00
MSwxMiArNDEsMTEgQEAKIAogI2luY2x1ZGUgPFNldHRpbmdzLmg+CiAKLSNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKLSNpbmNsdWRlICJ0ZXht
YXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCitjbGFzcyBUZXh0dXJlTWFwcGVyTm9k
ZUNsaWVudFF0OworI2VuZGlmCiBjbGFzcyBQYWdlQ2xpZW50UVdpZGdldCA6IHB1YmxpYyBRV2Vi
UGFnZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgUGFnZUNsaWVudFFXaWRnZXQoUVdpZGdldCogbmV3
VmlldywgUVdlYlBhZ2UqIG5ld1BhZ2UpCkBAIC01NCw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAg
ICAgLCBwYWdlKG5ld1BhZ2UpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBV
U0UoVEVYVFVSRV9NQVBQRVIpCiAgICAgICAgICwgc3luY1RpbWVyKHRoaXMsICZQYWdlQ2xpZW50
UVdpZGdldDo6c3luY0xheWVycykKLSAgICAgICAgLCBwbGF0Zm9ybUxheWVyUHJveHkoMCkKKyAg
ICAgICAgLCB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCgwKQogI2VuZGlmCiAgICAgewogICAgICAg
ICBRX0FTU0VSVCh2aWV3KTsKQEAgLTkxLDcgKzkwLDcgQEAgcHVibGljOgogICAgIFFXZWJQYWdl
KiBwYWdlOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVIpCi0gICAgdmlydHVhbCB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyKiBsYXllcik7CisgICAgdmlydHVhbCB2b2lkIHNldFJvb3RHcmFw
aGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgbWFya0ZvclN5bmMo
Ym9vbCBzY2hlZHVsZVN5bmMpOwogICAgIHZvaWQgc3luY0xheWVycyhUaW1lcjxQYWdlQ2xpZW50
UVdpZGdldD4qKTsKICNlbmRpZgpAQCAtMTA0LDcgKzEwMyw3IEBAIHB1YmxpYzoKIAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIFRp
bWVyPFBhZ2VDbGllbnRRV2lkZ2V0PiBzeW5jVGltZXI7Ci0gICAgUGxhdGZvcm1MYXllclByb3h5
UXQqIHBsYXRmb3JtTGF5ZXJQcm94eTsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0KiB0
ZXh0dXJlTWFwcGVyTm9kZUNsaWVudDsKICNlbmRpZgogfTsKIApAQCAtMTUxLDcgKzE1MCw4IEBA
IHB1YmxpYzoKICAgICAgICAgLCB2aWV3UmVzaXplc1RvQ29udGVudHMoZmFsc2UpCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2lmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICAg
ICAgLCBwbGF0Zm9ybUxheWVyUHJveHkoMCkKKyAgICAgICAgLCB0ZXh0dXJlTWFwcGVyTm9kZUNs
aWVudCgwKQorICAgICAgICAsIHN5bmNUaW1lcih0aGlzLCAmUGFnZUNsaWVudFFHcmFwaGljc1dp
ZGdldDo6c3luY0xheWVyc1RpbWVvdXQpCiAjZW5kaWYKICAgICAgICAgLCBzaG91bGRTeW5jKGZh
bHNlKQogI2VuZGlmCkBAIC0yMDAsMTAgKzIwMCwxMyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdEdy
YXBoaWNzTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRS
b290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIG1hcmtG
b3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKTsKICAgICB2b2lkIHN5bmNMYXllcnMoKTsKIAorI2lm
IFVTRShURVhUVVJFX01BUFBFUikKKyAgICB2b2lkIHN5bmNMYXllcnNUaW1lb3V0KFRpbWVyPFBh
Z2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ+KikgeyBzeW5jTGF5ZXJzKCk7IH0KKyNlbmRpZgogICAg
IC8vIFFHcmFwaGljc1dlYlZpZXcgY2FuIHJlbmRlciBjb21wb3NpdGVkIGxheWVycwogICAgIHZp
cnR1YWwgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogI2VuZGlmCkBAIC0yMTYsNyArMjE5LDggQEAgcHVibGljOgogCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2lmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICBQbGF0
Zm9ybUxheWVyUHJveHlRdCogcGxhdGZvcm1MYXllclByb3h5OworICAgIFRleHR1cmVNYXBwZXJO
b2RlQ2xpZW50UXQqIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50OworICAgIFRpbWVyPFBhZ2VDbGll
bnRRR3JhcGhpY3NXaWRnZXQ+IHN5bmNUaW1lcjsKICNlbHNlCiAgICAgUVdlYWtQb2ludGVyPFFH
cmFwaGljc09iamVjdD4gcm9vdEdyYXBoaWNzTGF5ZXI7CiAjZW5kaWYKLS0gCjEuNy4zLjMKCg==
</data>
<flag name="commit-queue"
          id="85734"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92717</attachid>
            <date>2011-05-07 19:28:12 -0700</date>
            <delta_ts>2011-05-07 19:42:38 -0700</delta_ts>
            <desc>Patch 2: TextureMapper API changes</desc>
            <filename>patch-2.diff</filename>
            <type>text/plain</type>
            <size>6578</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmYWE2ZTFlLi43ZWM0MWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC01LDYgKzUsMzUg
QEAKICAgICAgICAgW1RleG1hcF0gVXBzdHJlYW0gdGV4dHVyZS1tYXBwZXIgY2hhbmdlcyBmcm9t
IFF0J3MgV2ViS2l0MiBicmFuY2gKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYwNDM5CiAKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUZXN0cyBpbiBMYXlv
dXRUZXN0cy9jb21wb3NpdGluZyBjb3ZlciB0aGlzLgorCisgICAgICAgIFBhdGNoIDIvMTA6IEFk
ZCBhIGZldyBmdW5jdGlvbnMgdG8gdGhlIFRleHR1cmVNYXBwZXIgQVBJLCBhbGxvd2luZzoKKyAg
ICAgICAgMS4gYW4gZW50cnkvZXhpdCBwb2ludCBmb3IgcGFpbnRpbmcgKGJlZ2luUGFpbnQvZW5k
UGFpbnQpCisgICAgICAgIDIuIENsaXBwaW5nIHdpdGggYSBtYXRyaXgsIHNpbmNlIHdlIHVzZSBz
dGVuY2lsIGluc3RlYWQgb2Ygc2Npc3NvcnMKKyAgICAgICAgMy4gRHJhdyBhIHRleHR1cmUgZGly
ZWN0bHkgd2l0aCBhbiBJRAorICAgICAgICA0LiBSZW1vdmUgb2Zmc2V0LCBzaW5jZSB3ZSdyZSB1
c2luZyByZWFsIHRpbGluZworICAgICAgICA1LiBudW1iZXJPZkJ5dGVzIGNhbGN1bGF0aW9uIGZv
ciB0ZXh0dXJlcywgZm9yIG1lbW9yeSBtYW5hZ2VtZW50CisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
VGV4dHVyZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjpicHAp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6bnVtYmVyT2ZCeXRlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjp2aWV3cG9ydFNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlcjo6c2V0Vmlld3BvcnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXI6OmFsbG93UGFydGlhbFVwZGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlcjo6aXNPcGVuR0xCYWNrZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlcjo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6
OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpiZWdpblBhaW50
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6OmVuZFBhaW50aW5nKToKKwor
MjAxMS0wNS0wNyAgTm9hbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1RleG1hcF0g
VXBzdHJlYW0gdGV4dHVyZS1tYXBwZXIgY2hhbmdlcyBmcm9tIFF0J3MgV2ViS2l0MiBicmFuY2gK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNDM5CisK
ICAgICAgICAgUGF0Y2ggMS8xMDogQ2hhbmdlIHRoZSBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ciBBUEkgdG8gYWxsb3cgYSAzRC1jb250ZXh0IG9yIGEKICAgICAgICAgbWVkaWEgcGxheWVyIHRv
IGRlY2lkZSBob3cgdG8gcGFpbnQgaW50byB0aGUgVGV4dHVyZU1hcHBlciwgcmF0aGVyIHRoYW4g
bWFuZGF0ZSBzcGVjaWZpYwogICAgICAgICB0eXBlcyBvZiBwbGF0Zm9ybSBsYXllcnMuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXIuaAppbmRleCA4ZTQ2ZTNjLi5lNGE5NzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3
dGYvVW51c2VkUGFyYW0uaD4KIApAQCAtNDcsMTAgKzQ4LDExIEBAIGNsYXNzIEJpdG1hcFRleHR1
cmUgIDogcHVibGljIFJlZkNvdW50ZWQ8Qml0bWFwVGV4dHVyZT4gewogcHVibGljOgogICAgIEJp
dG1hcFRleHR1cmUoKSA6IG1fbG9ja0NvdW50KDApIHt9CiAgICAgdmlydHVhbCB+Qml0bWFwVGV4
dHVyZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgeyB9CiAKICAgICB2aXJ0dWFs
IGJvb2wgYWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSA9IDA7CiAgICAgdmlydHVhbCBJbnRTaXplIHNp
emUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgYnBwKCkgY29uc3QgeyByZXR1cm4gMzI7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgcmVzZXQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBvcGFxdWUgPSBmYWxzZSkKICAgICB7
CkBAIC03NSwxNiArNzcsMTIgQEAgcHVibGljOgogICAgIGlubGluZSB2b2lkIHVubG9jaygpIHsg
LS1tX2xvY2tDb3VudDsgfQogICAgIGlubGluZSBib29sIGlzTG9ja2VkKCkgeyByZXR1cm4gbV9s
b2NrQ291bnQ7IH0KICAgICBpbmxpbmUgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGVudFNpemU7IH0KLSAgICBpbmxpbmUgdm9pZCBzZXRPZmZzZXQoY29uc3QgSW50
UG9pbnQmIG8pIHsgbV9vZmZzZXQgPSBvOyB9Ci0gICAgaW5saW5lIEludFBvaW50IG9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgaW5saW5lIGludCBudW1iZXJPZkJ5dGVz
KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpLndpZHRoKCkgKiBzaXplKCkuaGVpZ2h0KCkgKiBicHAo
KSA+PiAzOyB9CiAKIHByb3RlY3RlZDoKLQotcHJpdmF0ZToKICAgICBpbnQgbV9sb2NrQ291bnQ7
CiAgICAgSW50U2l6ZSBtX2NvbnRlbnRTaXplOwogICAgIGJvb2wgbV9pc09wYXF1ZTsKLSAgICBJ
bnRQb2ludCBtX29mZnNldDsKIH07CiAKIC8vIEEgImNvbnRleHQiIGNsYXNzIHVzZWQgdG8gZW5j
YXBzdWxhdGUgYWNjZWxlcmF0ZWQgdGV4dHVyZSBtYXBwaW5nIGZ1bmN0aW9uczogaS5lLiBkcmF3
aW5nIGEgdGV4dHVyZQpAQCAtOTYsMjggKzk0LDMzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c093blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0Nv
bnRleHQgPSAwKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyKCkgeyB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3Qg
SW50UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4ID0gVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgZmxvYXQgb3BhY2l0eSA9IDEuMGYsIGNvbnN0IEJpdG1hcFRl
eHR1cmUqIG1hc2tUZXh0dXJlID0gMCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVy
ZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpLCBmbG9hdCBvcGFjaXR5ID0gMS4wZiwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1
cmUgPSAwKSA9IDA7CiAKICAgICAvLyBtYWtlcyBhIHN1cmZhY2UgdGhlIHRhcmdldCBmb3IgdGhl
IGZvbGxvd2luZyBkcmF3VGV4dHVyZSBjYWxscy4KICAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZh
Y2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRv
VGFyZ2V0KGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFNpemUmLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlUmVjdCkKLSAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh2aXNpYmxlUmVj
dCk7Ci0gICAgICAgIGRyYXdUZXh0dXJlKHRleHR1cmUsIEludFJlY3QoMCwgMCwgdGV4dHVyZS5j
b250ZW50U2l6ZSgpLndpZHRoKCksIHRleHR1cmUuY29udGVudFNpemUoKS5oZWlnaHQoKSksIG1h
dHJpeCwgb3BhY2l0eSwgMCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHNldEdyYXBoaWNz
Q29udGV4dChHcmFwaGljc0NvbnRleHQqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpcChj
b25zdCBJbnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQo
R3JhcGhpY3NDb250ZXh0KikgPSAwOworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBncmFw
aGljc0NvbnRleHQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZW5kQ2xpcCgpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRl
VGV4dHVyZSgpID0gMDsKKyAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdmlld3BvcnRTaXplOyB9CisgICAgdm9pZCBzZXRWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6
ZSYgcykgeyBtX3ZpZXdwb3J0U2l6ZSA9IHM7IH0KIAogICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1faW50ZXJwb2xh
dGlvblF1YWxpdHkgPSBxdWFsaXR5OyB9CiAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4
dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkgeyBtX3RleHREcmF3aW5nTW9kZSA9IG1vZGU7IH0KIAog
ICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25z
dCB7IHJldHVybiBtX2ludGVycG9sYXRpb25RdWFsaXR5OyB9CiAgICAgVGV4dERyYXdpbmdNb2Rl
RmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RHJhd2luZ01vZGU7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dQYXJ0aWFsVXBkYXRlcygpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzT3BlbkdMQmFja2VkKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKworICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtYXRyaXgpIHsgbV90cmFuc2Zvcm0gPSBtYXRyaXg7IH0KKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQorCisg
ICAgdmlydHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZW5k
UGFpbnRpbmcoKSB7IH0KIAotICAgIHZvaWQgc2V0Vmlld3BvcnRTaXplKGNvbnN0IEludFNpemUm
KTsKIAogcHJvdGVjdGVkOgogICAgIFRleHR1cmVNYXBwZXIoKQpAQCAtMTI4LDYgKzEzMSw4IEBA
IHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgbV9pbnRlcnBv
bGF0aW9uUXVhbGl0eTsKICAgICBUZXh0RHJhd2luZ01vZGVGbGFncyBtX3RleHREcmF3aW5nTW9k
ZTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKKyAgICBJbnRTaXplIG1f
dmlld3BvcnRTaXplOwogfTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvUGFnZUNsaWVudFF0LmNwcAppbmRleCAxODIxYmVjLi5hOWNjZjlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCkBAIC0yOSw5
ICsyOSwxMiBAQAogI2luY2x1ZGUgPFFYMTFJbmZvPgogI2VuZGlmCiAKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyUXQuaCIKKwogI2lmZGVmIFFUX09QRU5HTF9MSUIKICNpbmNsdWRlICJvcGVuZ2wv
VGV4dHVyZU1hcHBlckdMLmgiCi0jaW5jbHVkZSA8UUdMV2lkZ2V0PgorI2VuZGlmCiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewo=
</data>
<flag name="commit-queue"
          id="85736"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92718</attachid>
            <date>2011-05-07 19:38:49 -0700</date>
            <delta_ts>2011-05-07 19:52:25 -0700</delta_ts>
            <desc>Patch 10: Glue layer</desc>
            <filename>0010-Glue-the-TextureMapper-refactoring-into-Webkit-1.patch</filename>
            <type>text/plain</type>
            <size>22513</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNzE3YTJhLi4xYzMwYTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC01LDYgKzUsMjEg
QEAKICAgICAgICAgW1RleG1hcF1bUXRdIFVwc3RyZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5nZXMg
ZnJvbSBRdCdzIFdlYktpdDIgYnJhbmNoCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MDQzOQogCisgICAgICAgIFBhdGNoIDEwLzEwOiBHbHVlIHRoZSBU
ZXh0dXJlTWFwcGVyIHJlZmFjdG9yaW5nIGludG8gV2Via2l0KDEpLgorICAgICAgICBQYXNzIGEg
R3JhcGhpY3NMYXllciogaW5zdGVhZCBvZiBhIFBsYXRmb3JtTGF5ZXIqIHRvIHRoZSBRV2ViUGFn
ZUNsaWVudC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3RzIGluIExheW91dFRlc3RzL2Nv
bXBvc2l0aW5nIGNvdmVyIHRoaXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9RV2ViUGFnZUNs
aWVudC5oOgorICAgICAgICAoUVdlYlBhZ2VDbGllbnQ6OnNldFJvb3RHcmFwaGljc0xheWVyKToK
KworMjAxMS0wNS0wNyAgTm9hbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1RleG1h
cF1bUXRdIFVwc3RyZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5nZXMgZnJvbSBRdCdzIFdlYktpdDIg
YnJhbmNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
MDQzOQorCiAgICAgICAgIFBhdGNoIDkvMTA6IFJlZmFjdG9yIFRleHR1cmVNYXBwZXJOb2RlIGZv
ciBwZXJmb3JtYW5jZSwgcmVhZGFiaWxpdHkgYW5kIGFjY3VyYWN5LgogICAgICAgICBDaGFuZ2Vz
IGluY2x1ZGU6CiAgICAgICAgIDEuIGFuaW1hdGlvbnMgYXJlIGltcGxlbWVudGVkIGluc2lkZSBU
ZXh0dXJlTWFwcGVyTm9kZSwgdG8gYXZvaWQgZmFsbGluZyBiYWNrIHRvIEFuaW1hdGlvbkNvbnRy
b2xsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNs
aWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaAppbmRl
eCBkOGY0MTcxLi44Mzk2Y2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9RV2ViUGFnZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQ
YWdlQ2xpZW50LmgKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBz
ZXRJbnB1dE1ldGhvZEVuYWJsZWQoYm9vbCBlbmFibGUpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
aW5wdXRNZXRob2RFbmFibGVkKCkgY29uc3QgPSAwOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6
UGxhdGZvcm1MYXllciogbGF5ZXIpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhp
Y3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllcikgeyB9CiAKICAgICAvLyB0aGlz
IGdldHMgY2FsbGVkIHdoZW4gdGhlIGNvbXBvc2l0b3Igd2FudHMgdXMgdG8gc3luYyB0aGUgbGF5
ZXJzCiAgICAgLy8gaWYgc2NoZWR1bGVTeW5jIGlzIHRydWUsIHdlIHNjaGVkdWxlIGEgc3luYyBv
dXJzZWx2ZXMuIG90aGVyd2lzZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJmcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCmluZGV4IDg1
N2NhNjMuLjllODk3NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFt
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcApAQCAtOTgsNyAr
OTgsNyBAQAogI2VuZGlmCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogI2luY2x1ZGUgInRleG1h
cC9UZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyLmgiCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgiCiAjZW5kaWYK
ICNpbmNsdWRlICJ3dGYvSGFzaE1hcC5oIgogI2luY2x1ZGUgPFFNdWx0aU1hcD4KQEAgLTMyMSwy
NCArMzIxLDI4IEBAIHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyRnJvbVRpbGVkQmFja2lu
Z1N0b3JlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiB2b2lkIFFXZWJGcmFtZVByaXZh
dGU6OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiBjbGlwKQogewotICAgIGlmICghcm9vdEdyYXBoaWNzTGF5ZXIpCisgICAgaWYg
KCFyb290VGV4dHVyZU1hcHBlck5vZGUgfHwgIXRleHR1cmVNYXBwZXIpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIHRleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAg
ICB0ZXh0dXJlTWFwcGVyLT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQtPmlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAgdGV4dHVyZU1hcHBlci0+c2V0VGV4dERy
YXdpbmdNb2RlKGNvbnRleHQtPnRleHREcmF3aW5nTW9kZSgpKTsKKyAgICB0ZXh0dXJlTWFwcGVy
LT5zZXRWaWV3cG9ydFNpemUoZnJhbWUtPnZpZXcoKS0+ZnJhbWVSZWN0KCkuc2l6ZSgpKTsKICAg
ICBRUGFpbnRlciogcGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEZy
YW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgcGFpbnRlci0+c2F2ZSgpOwotICAg
IHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKLSAgICBUZXh0dXJlTWFwcGVyQ29udGVu
dExheWVyOjpQYWludE9wdGlvbnMgb3B0aW9uczsKLSAgICBvcHRpb25zLnZpc2libGVSZWN0ID0g
Y2xpcDsKLSAgICBvcHRpb25zLnRhcmdldFJlY3QgPSB2aWV3LT5mcmFtZVJlY3QoKTsKLSAgICBv
cHRpb25zLnZpZXdwb3J0U2l6ZSA9IHZpZXctPnNpemUoKTsKLSAgICBvcHRpb25zLm9wYWNpdHkg
PSBwYWludGVyLT5vcGFjaXR5KCk7Ci0gICAgcm9vdEdyYXBoaWNzTGF5ZXItPnBhaW50KHRleHR1
cmVNYXBwZXIuZ2V0KCksIG9wdGlvbnMpOwotICAgIHBhaW50ZXItPmVuZE5hdGl2ZVBhaW50aW5n
KCk7Ci0gICAgcGFpbnRlci0+cmVzdG9yZSgpOworICAgIGNvbnN0IFFUcmFuc2Zvcm0gdHJhbnNm
b3JtID0gcGFpbnRlci0+d29ybGRUcmFuc2Zvcm0oKTsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtYXRyaXgoCisgICAgICAgICAgICAgICAgdHJhbnNmb3JtLm0xMSgpLCB0cmFuc2Zv
cm0ubTEyKCksIDAsIHRyYW5zZm9ybS5tMTMoKSwKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0u
bTIxKCksIHRyYW5zZm9ybS5tMjIoKSwgMCwgdHJhbnNmb3JtLm0yMygpLAorICAgICAgICAgICAg
ICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICAgICAgdHJhbnNmb3JtLm0zMSgpLCB0cmFuc2Zv
cm0ubTMyKCksIDAsIHRyYW5zZm9ybS5tMzMoKQorICAgICAgICAgICAgICAgICk7CisgICAgcm9v
dFRleHR1cmVNYXBwZXJOb2RlLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKKyAgICByb290VGV4dHVy
ZU1hcHBlck5vZGUtPnNldE9wYWNpdHkocGFpbnRlci0+b3BhY2l0eSgpKTsKKyAgICB0ZXh0dXJl
TWFwcGVyLT5iZWdpblBhaW50aW5nKCk7CisgICAgdGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKG1h
dHJpeCwgY2xpcCk7CisgICAgcm9vdFRleHR1cmVNYXBwZXJOb2RlLT5wYWludCgpOworICAgIHRl
eHR1cmVNYXBwZXItPmVuZENsaXAoKTsKKyAgICB0ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygp
OwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFt
ZS5oIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgKaW5kZXggM2M1YTI4ZS4uNGZi
NmYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgKKysrIGIv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFdpZGdldFByaXZhdGU7CiAgICAgY2xhc3MgRnJhbWVM
b2FkZXJDbGllbnRRdDsKICAgICBjbGFzcyBDaHJvbWVDbGllbnRRdDsKLSAgICBjbGFzcyBQbGF0
Zm9ybUxheWVyUHJveHlRdDsKKyAgICBjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0Owog
fQogY2xhc3MgUVdlYkZyYW1lRGF0YTsKIGNsYXNzIFFXZWJIaXRUZXN0UmVzdWx0UHJpdmF0ZTsK
QEAgLTIzMiw3ICsyMzIsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpX
aWRnZXRQcml2YXRlOwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dFF0OwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDsKLSAgICBmcmll
bmQgY2xhc3MgV2ViQ29yZTo6UGxhdGZvcm1MYXllclByb3h5UXQ7CisgICAgZnJpZW5kIGNsYXNz
IFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ7CiAgICAgUVdlYkZyYW1lUHJpdmF0
ZSAqZDsKICAgICBRX1BSSVZBVEVfU0xPVChkLCB2b2lkIF9xX29yaWVudGF0aW9uQ2hhbmdlZCgp
KQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmggYi9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCmluZGV4IDQxMDg5NzIuLjc3MWU2OGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKKysrIGIvU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaApAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRnJhbWVWaWV3OwogICAgIGNsYXNzIEhUTUxGcmFtZU93
bmVyRWxlbWVudDsKICAgICBjbGFzcyBTY3JvbGxiYXI7Ci0gICAgY2xhc3MgVGV4dHVyZU1hcHBl
ckNvbnRlbnRMYXllcjsKKyAgICBjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZTsKIH0KIGNsYXNzIFFX
ZWJQYWdlOwogCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtYXJnaW5XaWR0
aCgtMSkKICAgICAgICAgLCBtYXJnaW5IZWlnaHQoLTEpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgICAgICwgcm9vdEdyYXBoaWNz
TGF5ZXIoMCkKKyAgICAgICAgLCByb290VGV4dHVyZU1hcHBlck5vZGUoMCkKICNlbmRpZgogICAg
ICAgICB7fQogICAgIHZvaWQgaW5pdChRV2ViRnJhbWUqIHFmcmFtZSwgUVdlYkZyYW1lRGF0YSog
ZnJhbWVEYXRhKTsKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgaW50IG1hcmdpbldp
ZHRoOwogICAgIGludCBtYXJnaW5IZWlnaHQ7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNv
bnRlbnRMYXllciogcm9vdEdyYXBoaWNzTGF5ZXI7CisgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ck5vZGUqIHJvb3RUZXh0dXJlTWFwcGVyTm9kZTsKICAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVy
ZU1hcHBlcj4gdGV4dHVyZU1hcHBlcjsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDc1NjM0
ZWQuLjgxMzdlZjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMiw2ICsyLDQ2IEBACiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgW1RleG1hcF1bUXRdIFVwc3Ry
ZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5nZXMgZnJvbSBRdCdzIFdlYktpdDIgYnJhbmNoCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDQzOQorCisgICAg
ICAgIFBhdGNoIDEwLzEwOiBHbHVlIHRoZSBUZXh0dXJlTWFwcGVyIHJlZmFjdG9yaW5nIGludG8g
V2Via2l0KDEpLgorICAgICAgICAxLiBQYXNzIGEgR3JhcGhpY3NMYXllciogaW5zdGVhZCBvZiBh
IFBsYXRmb3JtTGF5ZXIqIHRvIHRoZSBRV2ViUGFnZUNsaWVudC4KKyAgICAgICAgMi4gU2V0IHBh
cmFtZXRlcnMgaW4gVGV4dHVyZU1hcHBlci9UZXh0dXJlTWFwcGVyTm9kZSBpbnN0ZWFkIG9mIHBh
c3NpbmcgdGhlbSBpbiBhbiBvcHRpb25zIGFyZ3VtZW50LgorICAgICAgICAzLiBSZW5hbWUgUGxh
dGZvcm1MYXllclByb3h5UXQgdG8gVGV4dHVyZU1hcHBlck5vZGVDbGllbnQKKworICAgICAgICAq
IEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyQ29t
cG9zaXRlZExheWVycyk6CisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5oOgorICAgICAgICAqIEFw
aS9xd2ViZnJhbWVfcC5oOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6UVdlYkZyYW1lUHJp
dmF0ZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdDo6VGV4dHVyZU1hcHBlck5vZGVDbGllbnRR
dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0OjpzY3JvbGwp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdDo6c2V0VGV4dHVy
ZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0Ojp+
VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTm9kZUNsaWVudFF0Ojpjb21wdXRlTGFzdE1vZGlmaWVkUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0OjpzeW5jUm9vdExheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ6OnJvb3ROb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VDbGllbnRRV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6c3luY0xheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6flBhZ2VDbGllbnRRV2lkZ2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6On5QYWdlQ2xpZW50UUdyYXBoaWNz
V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnVw
ZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzeW5j
TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNl
dFJvb3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhp
Y3NXaWRnZXQ6Om1hcmtGb3JTeW5jKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xp
ZW50UXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRV2lkZ2V0OjpQYWdlQ2xpZW50
UVdpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpQ
YWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRR
R3JhcGhpY3NXaWRnZXQ6OnN5bmNMYXllcnNUaW1lb3V0KToKKworMjAxMS0wNS0wNyAgTm9hbSBS
b3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgW1RleG1hcF0gVXBzdHJlYW0gdGV4dHVyZS1t
YXBwZXIgY2hhbmdlcyBmcm9tIFF0J3MgV2ViS2l0MiBicmFuY2gKICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNDM5CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKaW5kZXggZWEyYzgyNi4u
MDQwNGVmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRRdC5jcHAKQEAgLTYyMSw3ICs2MjEsNyBAQCB2b2lkIENocm9tZUNsaWVudFF0Ojpz
ZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCiB2b2lkIENocm9tZUNsaWVudFF0OjphdHRh
Y2hSb290R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNz
TGF5ZXIpCiB7CiAgICAgaWYgKHBsYXRmb3JtUGFnZUNsaWVudCgpKQotICAgICAgICBwbGF0Zm9y
bVBhZ2VDbGllbnQoKS0+c2V0Um9vdEdyYXBoaWNzTGF5ZXIoZ3JhcGhpY3NMYXllciA/IGdyYXBo
aWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IDApOworICAgICAgICBwbGF0Zm9ybVBhZ2VDbGll
bnQoKS0+c2V0Um9vdEdyYXBoaWNzTGF5ZXIoZ3JhcGhpY3NMYXllcik7CiB9CiAKIHZvaWQgQ2hy
b21lQ2xpZW50UXQ6OnNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3Bw
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCmluZGV4
IDE4MjFiZWMuLmM0N2EyZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvUGFnZUNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5jcHAKQEAgLTE5LDE0OCArMTksODcgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0KICNpbmNsdWRlICJQYWdlQ2xpZW50UXQuaCIKLSNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyUXQuaCIKLSNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXIuaCIKKwogI2luY2x1ZGUgPFFHcmFwaGljc1NjZW5lPgogI2luY2x1ZGUgPFFHcmFwaGljc1Zp
ZXc+CiAjaWYgZGVmaW5lZChRX1dTX1gxMSkKICNpbmNsdWRlIDxRWDExSW5mbz4KICNlbmRpZgog
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIp
CisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclF0LmgiCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVN
YXBwZXJOb2RlLmgiCisKICNpZmRlZiBRVF9PUEVOR0xfTElCCiAjaW5jbHVkZSAib3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5oIgotI2luY2x1ZGUgPFFHTFdpZGdldD4KKyNlbmRpZgogI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAgICAKLWNsYXNzIFBsYXRmb3JtTGF5ZXJQcm94eVF0IDog
cHVibGljIFFPYmplY3QsIHB1YmxpYyB2aXJ0dWFsIFRleHR1cmVNYXBwZXJMYXllckNsaWVudCB7
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIp
CitjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0IHsKIHB1YmxpYzoKLSAgICBQbGF0Zm9y
bUxheWVyUHJveHlRdChRV2ViRnJhbWUqIGZyYW1lLCBUZXh0dXJlTWFwcGVyQ29udGVudExheWVy
KiBsYXllciwgUU9iamVjdCogb2JqZWN0KQotICAgICAgICA6IFFPYmplY3Qob2JqZWN0KQotICAg
ICAgICAsIG1fZnJhbWUoZnJhbWUpCi0gICAgICAgICwgbV9sYXllcihsYXllcikKKyAgICBUZXh0
dXJlTWFwcGVyTm9kZUNsaWVudFF0KFFXZWJGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQorICAgICAgICA6IG1fZnJhbWUoZnJhbWUpCisgICAgICAgICwgbV9yb290R3JhcGhpY3NM
YXllcihHcmFwaGljc0xheWVyOjpjcmVhdGUoMCkpCiAgICAgewotICAgICAgICBpZiAobV9sYXll
cikKLSAgICAgICAgICAgIG1fbGF5ZXItPnNldFBsYXRmb3JtTGF5ZXJDbGllbnQodGhpcyk7Ci0g
ICAgICAgIG1fZnJhbWUtPmQtPnJvb3RHcmFwaGljc0xheWVyID0gbV9sYXllcjsKKyAgICAgICAg
bV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJOb2RlID0gcm9vdE5vZGUoKTsKKyAgICAgICAg
bV9yb290R3JhcGhpY3NMYXllci0+YWRkQ2hpbGQobGF5ZXIpOworICAgICAgICBtX3Jvb3RHcmFw
aGljc0xheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgICAgICBtX3Jvb3RHcmFwaGlj
c0xheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKKyAgICAgICAgbV9yb290R3JhcGhpY3NM
YXllci0+c2V0U2l6ZShJbnRTaXplKDEsIDEpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFRleHR1
cmVNYXBwZXIoUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiB0ZXh0dXJlTWFwcGVyKQorICAgIHZv
aWQgc2Nyb2xsKGZsb2F0IGR4LCBmbG9hdCBkeSkKICAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmQt
PnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVyOworICAgICAgICBGbG9hdFBvaW50IHBvc2l0
aW9uID0gbV9yb290R3JhcGhpY3NMYXllci0+cG9zaXRpb24oKTsKKyAgICAgICAgbV9yb290R3Jh
cGhpY3NMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChwb3NpdGlvbi54KCkgKyBkeCwgcG9z
aXRpb24ueSgpICsgZHkpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIH5QbGF0Zm9ybUxheWVyUHJv
eHlRdCgpCisgICAgdm9pZCBzZXRUZXh0dXJlTWFwcGVyKGNvbnN0IFBhc3NPd25QdHI8VGV4dHVy
ZU1hcHBlcj4mIHRleHR1cmVNYXBwZXIpCiAgICAgewotICAgICAgICBpZiAobV9sYXllcikKLSAg
ICAgICAgICAgIG1fbGF5ZXItPnNldFBsYXRmb3JtTGF5ZXJDbGllbnQoMCk7Ci0gICAgICAgIGlm
IChtX2ZyYW1lLT5kKQotICAgICAgICAgICAgbV9mcmFtZS0+ZC0+cm9vdEdyYXBoaWNzTGF5ZXIg
PSAwOworICAgICAgICBtX2ZyYW1lLT5kLT50ZXh0dXJlTWFwcGVyID0gdGV4dHVyZU1hcHBlcjsK
KyAgICAgICAgbV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJOb2RlLT5zZXRUZXh0dXJlTWFw
cGVyKG1fZnJhbWUtPmQtPnRleHR1cmVNYXBwZXIuZ2V0KCkpOwogICAgIH0KIAotICAgIHZpcnR1
YWwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcigpCisgICAgdmlydHVhbCB+VGV4dHVyZU1h
cHBlck5vZGVDbGllbnRRdCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9mcmFtZS0+ZC0+dGV4
dHVyZU1hcHBlci5nZXQoKTsKLSAgICB9Ci0KLSAgICAvLyBTaW5jZSB3ZSBqdXN0IHBhaW50IHRo
ZSBjb21wb3NpdGVkIHRyZWUgYW5kIG5ldmVyIGNyZWF0ZSBhIHNwZWNpYWwgaXRlbSBmb3IgaXQs
IHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIGl0cyBzaXplIGNoYW5nZXMuCi0gICAgdm9pZCBzZXRT
aXplQ2hhbmdlZChjb25zdCBJbnRTaXplJikgeyB9Ci0KLXByaXZhdGU6Ci0gICAgUVdlYkZyYW1l
KiBtX2ZyYW1lOwotICAgIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqIG1fbGF5ZXI7Ci19Owot
Ci1jbGFzcyBQbGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0IDogcHVibGljIFBsYXRmb3JtTGF5ZXJQ
cm94eVF0IHsKLXB1YmxpYzoKLSAgICBQbGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0KFFXZWJGcmFt
ZSogZnJhbWUsIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqIGxheWVyLCBRV2lkZ2V0KiB3aWRn
ZXQpCi0gICAgICAgIDogUGxhdGZvcm1MYXllclByb3h5UXQoZnJhbWUsIGxheWVyLCB3aWRnZXQp
Ci0gICAgICAgICwgbV93aWRnZXQod2lkZ2V0KQotICAgIHsKLSAgICAgICAgaWYgKG1fd2lkZ2V0
KQotICAgICAgICAgICAgbV93aWRnZXQtPmluc3RhbGxFdmVudEZpbHRlcih0aGlzKTsKLQotICAg
ICAgICBpZiAodGV4dHVyZU1hcHBlcigpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IHNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlclF0OjpjcmVhdGUoKSk7CisgICAgICAgIGlm
IChtX2ZyYW1lLT5kKQorICAgICAgICAgICAgbV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJO
b2RlID0gMDsKICAgICB9CiAKLSAgICAvLyBXZSBkb24ndCB3YW50IGEgaHVnZSByZWdpb24tY2xp
cCBvbiB0aGUgY29tcG9zaXRpbmcgbGF5ZXJzOyBpbnN0ZWFkIHdlIHVuaXRlIHRoZSByZWN0YW5n
bGVzIHRvZ2V0aGVyCi0gICAgLy8gYW5kIGNsZWFyIHRoZW0gd2hlbiB0aGUgcGFpbnQgYWN0dWFs
bHkgb2NjdXJzLgotICAgIGJvb2wgZXZlbnRGaWx0ZXIoUU9iamVjdCogb2JqZWN0LCBRRXZlbnQq
IGV2ZW50KQorICAgIFFSZWN0IGNvbXB1dGVMYXN0TW9kaWZpZWRSZWN0KCkKICAgICB7Ci0gICAg
ICAgIGlmIChvYmplY3QgPT0gbV93aWRnZXQgJiYgZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OlBh
aW50KQotICAgICAgICAgICAgbV9kaXJ0eVJlY3QgPSBRUmVjdCgpOwotICAgICAgICByZXR1cm4g
UU9iamVjdDo6ZXZlbnRGaWx0ZXIob2JqZWN0LCBldmVudCk7CisgICAgICAgIHJldHVybiBtX2Zy
YW1lLT5kLT5yb290VGV4dHVyZU1hcHBlck5vZGUtPmNvbXB1dGVMYXN0TW9kaWZpZWRSZWN0KCk7
CiAgICAgfQogCi0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKQorICAgIHZvaWQgc3luY1Jvb3RM
YXllcigpCiAgICAgewotICAgICAgICBpZiAobV93aWRnZXQpCi0gICAgICAgICAgICBtX3dpZGdl
dC0+dXBkYXRlKCk7CisgICAgICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnN5bmNDb21wb3NpdGlu
Z1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogICAgIH0KIAotICAgIHZvaWQgc2V0TmVlZHNEaXNw
bGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgVGV4dHVyZU1hcHBlck5vZGUqIHJv
b3ROb2RlKCkKICAgICB7Ci0gICAgICAgIG1fZGlydHlSZWN0IHw9IHJlY3Q7Ci0gICAgICAgIG1f
d2lkZ2V0LT51cGRhdGUobV9kaXJ0eVJlY3QpOworICAgICAgICByZXR1cm4gdG9UZXh0dXJlTWFw
cGVyTm9kZShtX3Jvb3RHcmFwaGljc0xheWVyLmdldCgpKTsKICAgICB9CiAKLXByaXZhdGU6Ci0g
ICAgUVJlY3QgbV9kaXJ0eVJlY3Q7Ci0gICAgUVdpZGdldCogbV93aWRnZXQ7Ci19OwotCi0jaWYg
IWRlZmluZWQoUVRfTk9fR1JBUEhJQ1NWSUVXKQotY2xhc3MgUGxhdGZvcm1MYXllclByb3h5UUdy
YXBoaWNzT2JqZWN0IDogcHVibGljIFBsYXRmb3JtTGF5ZXJQcm94eVF0IHsKLXB1YmxpYzoKLSAg
ICBQbGF0Zm9ybUxheWVyUHJveHlRR3JhcGhpY3NPYmplY3QoUVdlYkZyYW1lKiBmcmFtZSwgVGV4
dHVyZU1hcHBlckNvbnRlbnRMYXllciogbGF5ZXIsIFFHcmFwaGljc09iamVjdCogb2JqZWN0KQot
ICAgICAgICA6IFBsYXRmb3JtTGF5ZXJQcm94eVF0KGZyYW1lLCBsYXllciwgb2JqZWN0KQotICAg
ICAgICAsIG1fZ3JhcGhpY3NJdGVtKG9iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh0ZXh0dXJl
TWFwcGVyKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSNpZmRlZiBRVF9PUEVOR0xfTElCCi0g
ICAgICAgIFFHcmFwaGljc1ZpZXcqIHZpZXcgPSBvYmplY3QtPnNjZW5lKCktPnZpZXdzKClbMF07
Ci0gICAgICAgIGlmICh2aWV3ICYmIHZpZXctPnZpZXdwb3J0KCkgJiYgdmlldy0+dmlld3BvcnQo
KS0+aW5oZXJpdHMoIlFHTFdpZGdldCIpKSB7Ci0gICAgICAgICAgICBzZXRUZXh0dXJlTWFwcGVy
KFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0jZW5kaWYKLSAgICAgICAgc2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyUXQ6OmNy
ZWF0ZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpCi0gICAgewotICAg
ICAgICBpZiAobV9ncmFwaGljc0l0ZW0pCi0gICAgICAgICAgICBtX2dyYXBoaWNzSXRlbS0+dXBk
YXRlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2dyYXBoaWNzSXRlbSkKLSAgICAgICAg
ICAgIG1fZ3JhcGhpY3NJdGVtLT51cGRhdGUoUVJlY3RGKHJlY3QpKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgUUdyYXBoaWNzSXRlbSogbV9ncmFwaGljc0l0ZW07Citwcm90ZWN0ZWQ6CisgICAg
UVdlYkZyYW1lKiBtX2ZyYW1lOworICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX3Jvb3RHcmFw
aGljc0xheWVyOwogfTsKLSNlbmRpZiAvLyBRVF9OT19HUkFQSElDU1ZJRVcKIAotdm9pZCBQYWdl
Q2xpZW50UVdpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXIqIGxheWVyKQordm9pZCBQYWdlQ2xpZW50UVdpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5
ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgaWYgKGxheWVyKSB7Ci0gICAgICAgIHBs
YXRmb3JtTGF5ZXJQcm94eSA9IG5ldyBQbGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0KHBhZ2UtPm1h
aW5GcmFtZSgpLCBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyQ29udGVudExheWVyKj4obGF5ZXIp
LCB2aWV3KTsKKyAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQgPSBuZXcgVGV4dHVyZU1h
cHBlck5vZGVDbGllbnRRdChwYWdlLT5tYWluRnJhbWUoKSwgbGF5ZXIpOworICAgICAgICB0ZXh0
dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihuZXcgVGV4dHVyZU1hcHBlclF0
KTsKKyAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnN5bmNSb290TGF5ZXIoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBkZWxldGUgcGxhdGZvcm1MYXllclByb3h5OwotICAg
IHBsYXRmb3JtTGF5ZXJQcm94eSA9IDA7CisgICAgZGVsZXRlIHRleHR1cmVNYXBwZXJOb2RlQ2xp
ZW50OworICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50ID0gMDsKIH0KIAogdm9pZCBQYWdlQ2xp
ZW50UVdpZGdldDo6bWFya0ZvclN5bmMoYm9vbCBzY2hlZHVsZVN5bmMpCkBAIC0xNzAsNyArMTA5
LDE0IEBAIHZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6Om1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVT
eW5jKQogCiB2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjpzeW5jTGF5ZXJzKFRpbWVyPFBhZ2VDbGll
bnRRV2lkZ2V0PiopCiB7CisgICAgaWYgKHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50KQorICAgICAg
ICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c3luY1Jvb3RMYXllcigpOwogICAgIFFXZWJGcmFt
ZVByaXZhdGU6OmNvcmUocGFnZS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGlu
Z1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisgICAgaWYgKCF0ZXh0dXJlTWFwcGVyTm9kZUNs
aWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+
cm9vdE5vZGUoKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKKyAg
ICAgICAgc3luY1RpbWVyLnN0YXJ0T25lU2hvdCgxLjAgLyA2MC4wKTsKKyAgICB1cGRhdGUodmll
dy0+cmVjdCgpKTsKIH0KICNlbmRpZgogCkBAIC0yMDIsNyArMTQ4LDcgQEAgdm9pZCBQYWdlQ2xp
ZW50UVdpZGdldDo6c2V0SW5wdXRNZXRob2RIaW50cyhRdDo6SW5wdXRNZXRob2RIaW50cyBoaW50
cykKIFBhZ2VDbGllbnRRV2lkZ2V0Ojp+UGFnZUNsaWVudFFXaWRnZXQoKQogewogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIGRlbGV0
ZSBwbGF0Zm9ybUxheWVyUHJveHk7CisgICAgZGVsZXRlIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50
OwogI2VuZGlmCiB9CiAKQEAgLTI2Miw3ICsyMDgsNyBAQCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lk
Z2V0Ojp+UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCgpCiAgICAgZGVsZXRlIG92ZXJsYXk7CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2lmIFVTRShURVhUVVJFX01BUFBFUikK
LSAgICBkZWxldGUgcGxhdGZvcm1MYXllclByb3h5OworICAgIGRlbGV0ZSB0ZXh0dXJlTWFwcGVy
Tm9kZUNsaWVudDsKICNlbHNlCiAgICAgaWYgKCFyb290R3JhcGhpY3NMYXllcikKICAgICAgICAg
cmV0dXJuOwpAQCAtMjg1LDcgKzIzMSw3IEBAIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdl
dDo6dXBkYXRlKGNvbnN0IFFSZWN0JiBkaXJ0eVJlY3QpCiAgICAgY3JlYXRlT3JEZWxldGVPdmVy
bGF5KCk7CiAgICAgaWYgKG92ZXJsYXkpCiAgICAgICAgIG92ZXJsYXktPnVwZGF0ZShRUmVjdEYo
ZGlydHlSZWN0KSk7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgIVVTRShURVhUVVJFX01BUFBFUikKICAgICBzeW5j
TGF5ZXJzKCk7CiAjZW5kaWYKIH0KQEAgLTMyMCwyNCArMjY2LDQ2IEBAIHZvaWQgUGFnZUNsaWVu
dFFHcmFwaGljc1dpZGdldDo6Y3JlYXRlT3JEZWxldGVPdmVybGF5KCkKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnN5bmNM
YXllcnMoKQogewotICAgIGlmIChzaG91bGRTeW5jKSB7Ci0gICAgICAgIFFXZWJGcmFtZVByaXZh
dGU6OmNvcmUocGFnZS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRl
SW5jbHVkaW5nU3ViZnJhbWVzKCk7Ci0gICAgICAgIHNob3VsZFN5bmMgPSBmYWxzZTsKLSAgICB9
CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIGlmICh0ZXh0dXJlTWFwcGVyTm9kZUNsaWVu
dCkKKyAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnN5bmNSb290TGF5ZXIoKTsKKyNl
bmRpZgorCisgICAgUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShwYWdlLT5tYWluRnJhbWUoKSktPnZp
ZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKKworI2lmIFVT
RShURVhUVVJFX01BUFBFUikKKyAgICBpZiAoIXRleHR1cmVNYXBwZXJOb2RlQ2xpZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAodGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnJvb3ROb2Rl
KCktPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCisgICAgICAgIHN5
bmNUaW1lci5zdGFydE9uZVNob3QoMS4wIC8gNjAuMCk7CisgICAgdXBkYXRlKHZpZXctPmJvdW5k
aW5nUmVjdCgpLnRvQWxpZ25lZFJlY3QoKSk7CisgICAgaWYgKCFzaG91bGRTeW5jKQorICAgICAg
ICByZXR1cm47CisgICAgc2hvdWxkU3luYyA9IGZhbHNlOworI2VuZGlmCiB9CiAKICNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCi12b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RH
cmFwaGljc0xheWVyKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBsYXllcikKK3ZvaWQgUGFn
ZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXll
ciogbGF5ZXIpCiB7CiAgICAgaWYgKGxheWVyKSB7Ci0gICAgICAgIHBsYXRmb3JtTGF5ZXJQcm94
eSA9IG5ldyBQbGF0Zm9ybUxheWVyUHJveHlRR3JhcGhpY3NPYmplY3QocGFnZS0+bWFpbkZyYW1l
KCksIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqPihsYXllciksIHZpZXcp
OworICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCA9IG5ldyBUZXh0dXJlTWFwcGVyTm9k
ZUNsaWVudFF0KHBhZ2UtPm1haW5GcmFtZSgpLCBsYXllcik7CisjaWZkZWYgUVRfT1BFTkdMX0xJ
QgorICAgICAgICBRR3JhcGhpY3NWaWV3KiBncmFwaGljc1ZpZXcgPSB2aWV3LT5zY2VuZSgpLT52
aWV3cygpWzBdOworICAgICAgICBpZiAoZ3JhcGhpY3NWaWV3ICYmIGdyYXBoaWNzVmlldy0+dmll
d3BvcnQoKSAmJiBncmFwaGljc1ZpZXctPnZpZXdwb3J0KCktPmluaGVyaXRzKCJRR0xXaWRnZXQi
KSkgeworICAgICAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyNlbmRpZgorICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVy
ZU1hcHBlcihUZXh0dXJlTWFwcGVyUXQ6OmNyZWF0ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBkZWxldGUgcGxhdGZvcm1MYXllclByb3h5OwotICAgIHBsYXRmb3JtTGF5ZXJQcm94
eSA9IDA7CisgICAgZGVsZXRlIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50OworICAgIHRleHR1cmVN
YXBwZXJOb2RlQ2xpZW50ID0gMDsKIH0KICNlbHNlCi12b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NX
aWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKFFHcmFwaGljc09iamVjdCogbGF5ZXIpCit2b2lk
IFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNz
TGF5ZXIqIGxheWVyKQogewogICAgIGlmIChyb290R3JhcGhpY3NMYXllcikgewogICAgICAgICBy
b290R3JhcGhpY3NMYXllci5kYXRhKCktPnNldFBhcmVudEl0ZW0oMCk7CkBAIC0zNDUsMTIgKzMx
MywxMiBAQCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xh
eWVyKFFHcmFwaGljc09iamVjdCogbGF5ZXIpCiAgICAgICAgIFFXZWJGcmFtZVByaXZhdGU6OmNv
cmUocGFnZS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVk
aW5nU3ViZnJhbWVzKCk7CiAgICAgfQogCi0gICAgcm9vdEdyYXBoaWNzTGF5ZXIgPSBsYXllcjsK
KyAgICByb290R3JhcGhpY3NMYXllciA9IGxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6
IDA7CiAKLSAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgbGF5ZXItPnNldEZsYWcoUUdyYXBoaWNz
SXRlbTo6SXRlbUNsaXBzQ2hpbGRyZW5Ub1NoYXBlLCB0cnVlKTsKLSAgICAgICAgbGF5ZXItPnNl
dFBhcmVudEl0ZW0odmlldyk7Ci0gICAgICAgIGxheWVyLT5zZXRaVmFsdWUoUm9vdEdyYXBoaWNz
TGF5ZXJaVmFsdWUpOworICAgIGlmIChyb290R3JhcGhpY3NMYXllcikgeworICAgICAgICByb290
R3JhcGhpY3NMYXllci5kYXRhKCktPnNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbUNsaXBzQ2hp
bGRyZW5Ub1NoYXBlLCB0cnVlKTsKKyAgICAgICAgcm9vdEdyYXBoaWNzTGF5ZXIuZGF0YSgpLT5z
ZXRQYXJlbnRJdGVtKHZpZXcpOworICAgICAgICByb290R3JhcGhpY3NMYXllci5kYXRhKCktPnNl
dFpWYWx1ZShSb290R3JhcGhpY3NMYXllclpWYWx1ZSk7CiAgICAgfQogICAgIGNyZWF0ZU9yRGVs
ZXRlT3ZlcmxheSgpOwogfQpAQCAtMzU5LDggKzMyNyw3IEBAIHZvaWQgUGFnZUNsaWVudFFHcmFw
aGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzT2JqZWN0KiBsYXllcikK
IHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6bWFya0ZvclN5bmMoYm9vbCBzY2hlZHVs
ZVN5bmMpCiB7CiAgICAgc2hvdWxkU3luYyA9IHRydWU7Ci0gICAgaWYgKHNjaGVkdWxlU3luYykK
LSAgICAgICAgc3luY01ldGFNZXRob2QuaW52b2tlKHZpZXcsIFF0OjpRdWV1ZWRDb25uZWN0aW9u
KTsKKyAgICBzeW5jVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmggYi9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCmluZGV4IDE2YmI1MGMu
LjE3OTZiNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFn
ZUNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xp
ZW50UXQuaApAQCAtNDEsMTIgKzQxLDExIEBACiAKICNpbmNsdWRlIDxTZXR0aW5ncy5oPgogCi0j
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0j
aW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCi0jZW5kaWYKLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4
dHVyZU1hcHBlck5vZGVDbGllbnRRdDsKKyNlbmRpZgogY2xhc3MgUGFnZUNsaWVudFFXaWRnZXQg
OiBwdWJsaWMgUVdlYlBhZ2VDbGllbnQgewogcHVibGljOgogICAgIFBhZ2VDbGllbnRRV2lkZ2V0
KFFXaWRnZXQqIG5ld1ZpZXcsIFFXZWJQYWdlKiBuZXdQYWdlKQpAQCAtNTQsNyArNTMsNyBAQCBw
dWJsaWM6CiAgICAgICAgICwgcGFnZShuZXdQYWdlKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgICAgICAsIHN5bmNUaW1lcih0aGlz
LCAmUGFnZUNsaWVudFFXaWRnZXQ6OnN5bmNMYXllcnMpCi0gICAgICAgICwgcGxhdGZvcm1MYXll
clByb3h5KDApCisgICAgICAgICwgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQoMCkKICNlbmRpZgog
ICAgIHsKICAgICAgICAgUV9BU1NFUlQodmlldyk7CkBAIC05MSw3ICs5MCw3IEBAIHB1YmxpYzoK
ICAgICBRV2ViUGFnZSogcGFnZTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NM
YXllcihUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbGF5ZXIpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lk
IG1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKTsKICAgICB2b2lkIHN5bmNMYXllcnMoVGlt
ZXI8UGFnZUNsaWVudFFXaWRnZXQ+Kik7CiAjZW5kaWYKQEAgLTEwNCw3ICsxMDMsNyBAQCBwdWJs
aWM6CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01B
UFBFUikKICAgICBUaW1lcjxQYWdlQ2xpZW50UVdpZGdldD4gc3luY1RpbWVyOwotICAgIFBsYXRm
b3JtTGF5ZXJQcm94eVF0KiBwbGF0Zm9ybUxheWVyUHJveHk7CisgICAgVGV4dHVyZU1hcHBlck5v
ZGVDbGllbnRRdCogdGV4dHVyZU1hcHBlck5vZGVDbGllbnQ7CiAjZW5kaWYKIH07CiAKQEAgLTE1
MSw3ICsxNTAsOCBAQCBwdWJsaWM6CiAgICAgICAgICwgdmlld1Jlc2l6ZXNUb0NvbnRlbnRzKGZh
bHNlKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpZiBVU0UoVEVYVFVSRV9N
QVBQRVIpCi0gICAgICAgICwgcGxhdGZvcm1MYXllclByb3h5KDApCisgICAgICAgICwgdGV4dHVy
ZU1hcHBlck5vZGVDbGllbnQoMCkKKyAgICAgICAgLCBzeW5jVGltZXIodGhpcywgJlBhZ2VDbGll
bnRRR3JhcGhpY3NXaWRnZXQ6OnN5bmNMYXllcnNUaW1lb3V0KQogI2VuZGlmCiAgICAgICAgICwg
c2hvdWxkU3luYyhmYWxzZSkKICNlbmRpZgpAQCAtMjAwLDEwICsyMDAsMTMgQEAgcHVibGljOgog
I2VuZGlmCiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCB2
b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1
YWwgdm9pZCBtYXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3luYyk7CiAgICAgdm9pZCBzeW5jTGF5
ZXJzKCk7CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgdm9pZCBzeW5jTGF5ZXJzVGlt
ZW91dChUaW1lcjxQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0PiopIHsgc3luY0xheWVycygpOyB9
CisjZW5kaWYKICAgICAvLyBRR3JhcGhpY3NXZWJWaWV3IGNhbiByZW5kZXIgY29tcG9zaXRlZCBs
YXllcnMKICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgpAQCAtMjE2LDcgKzIxOSw4IEBAIHB1YmxpYzoK
IAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCi0gICAgUGxhdGZvcm1MYXllclByb3h5UXQqIHBsYXRmb3JtTGF5ZXJQcm94eTsKKyAgICBU
ZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0KiB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudDsKKyAgICBU
aW1lcjxQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0PiBzeW5jVGltZXI7CiAjZWxzZQogICAgIFFX
ZWFrUG9pbnRlcjxRR3JhcGhpY3NPYmplY3Q+IHJvb3RHcmFwaGljc0xheWVyOwogI2VuZGlmCg==
</data>
<flag name="commit-queue"
          id="85739"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92720</attachid>
            <date>2011-05-07 19:52:25 -0700</date>
            <delta_ts>2011-05-07 20:05:13 -0700</delta_ts>
            <desc>Patch 10: Glue layer</desc>
            <filename>0010-Glue-the-TextureMapper-refactoring-into-Webkit-1.patch</filename>
            <type>text/plain</type>
            <size>22856</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNzE3YTJhLi4xYzMwYTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC01LDYgKzUsMjEg
QEAKICAgICAgICAgW1RleG1hcF1bUXRdIFVwc3RyZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5nZXMg
ZnJvbSBRdCdzIFdlYktpdDIgYnJhbmNoCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MDQzOQogCisgICAgICAgIFBhdGNoIDEwLzEwOiBHbHVlIHRoZSBU
ZXh0dXJlTWFwcGVyIHJlZmFjdG9yaW5nIGludG8gV2Via2l0KDEpLgorICAgICAgICBQYXNzIGEg
R3JhcGhpY3NMYXllciogaW5zdGVhZCBvZiBhIFBsYXRmb3JtTGF5ZXIqIHRvIHRoZSBRV2ViUGFn
ZUNsaWVudC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3RzIGluIExheW91dFRlc3RzL2Nv
bXBvc2l0aW5nIGNvdmVyIHRoaXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9RV2ViUGFnZUNs
aWVudC5oOgorICAgICAgICAoUVdlYlBhZ2VDbGllbnQ6OnNldFJvb3RHcmFwaGljc0xheWVyKToK
KworMjAxMS0wNS0wNyAgTm9hbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1RleG1h
cF1bUXRdIFVwc3RyZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5nZXMgZnJvbSBRdCdzIFdlYktpdDIg
YnJhbmNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
MDQzOQorCiAgICAgICAgIFBhdGNoIDkvMTA6IFJlZmFjdG9yIFRleHR1cmVNYXBwZXJOb2RlIGZv
ciBwZXJmb3JtYW5jZSwgcmVhZGFiaWxpdHkgYW5kIGFjY3VyYWN5LgogICAgICAgICBDaGFuZ2Vz
IGluY2x1ZGU6CiAgICAgICAgIDEuIGFuaW1hdGlvbnMgYXJlIGltcGxlbWVudGVkIGluc2lkZSBU
ZXh0dXJlTWFwcGVyTm9kZSwgdG8gYXZvaWQgZmFsbGluZyBiYWNrIHRvIEFuaW1hdGlvbkNvbnRy
b2xsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNs
aWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaAppbmRl
eCBkOGY0MTcxLi44Mzk2Y2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9RV2ViUGFnZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQ
YWdlQ2xpZW50LmgKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBz
ZXRJbnB1dE1ldGhvZEVuYWJsZWQoYm9vbCBlbmFibGUpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
aW5wdXRNZXRob2RFbmFibGVkKCkgY29uc3QgPSAwOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6
UGxhdGZvcm1MYXllciogbGF5ZXIpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhp
Y3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllcikgeyB9CiAKICAgICAvLyB0aGlz
IGdldHMgY2FsbGVkIHdoZW4gdGhlIGNvbXBvc2l0b3Igd2FudHMgdXMgdG8gc3luYyB0aGUgbGF5
ZXJzCiAgICAgLy8gaWYgc2NoZWR1bGVTeW5jIGlzIHRydWUsIHdlIHNjaGVkdWxlIGEgc3luYyBv
dXJzZWx2ZXMuIG90aGVyd2lzZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJmcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCmluZGV4IDg1
N2NhNjMuLjllODk3NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFt
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcApAQCAtOTgsNyAr
OTgsNyBAQAogI2VuZGlmCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogI2luY2x1ZGUgInRleG1h
cC9UZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyLmgiCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgiCiAjZW5kaWYK
ICNpbmNsdWRlICJ3dGYvSGFzaE1hcC5oIgogI2luY2x1ZGUgPFFNdWx0aU1hcD4KQEAgLTMyMSwy
NCArMzIxLDI4IEBAIHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyRnJvbVRpbGVkQmFja2lu
Z1N0b3JlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiB2b2lkIFFXZWJGcmFtZVByaXZh
dGU6OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiBjbGlwKQogewotICAgIGlmICghcm9vdEdyYXBoaWNzTGF5ZXIpCisgICAgaWYg
KCFyb290VGV4dHVyZU1hcHBlck5vZGUgfHwgIXRleHR1cmVNYXBwZXIpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIHRleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAg
ICB0ZXh0dXJlTWFwcGVyLT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQtPmlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAgdGV4dHVyZU1hcHBlci0+c2V0VGV4dERy
YXdpbmdNb2RlKGNvbnRleHQtPnRleHREcmF3aW5nTW9kZSgpKTsKKyAgICB0ZXh0dXJlTWFwcGVy
LT5zZXRWaWV3cG9ydFNpemUoZnJhbWUtPnZpZXcoKS0+ZnJhbWVSZWN0KCkuc2l6ZSgpKTsKICAg
ICBRUGFpbnRlciogcGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEZy
YW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgcGFpbnRlci0+c2F2ZSgpOwotICAg
IHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKLSAgICBUZXh0dXJlTWFwcGVyQ29udGVu
dExheWVyOjpQYWludE9wdGlvbnMgb3B0aW9uczsKLSAgICBvcHRpb25zLnZpc2libGVSZWN0ID0g
Y2xpcDsKLSAgICBvcHRpb25zLnRhcmdldFJlY3QgPSB2aWV3LT5mcmFtZVJlY3QoKTsKLSAgICBv
cHRpb25zLnZpZXdwb3J0U2l6ZSA9IHZpZXctPnNpemUoKTsKLSAgICBvcHRpb25zLm9wYWNpdHkg
PSBwYWludGVyLT5vcGFjaXR5KCk7Ci0gICAgcm9vdEdyYXBoaWNzTGF5ZXItPnBhaW50KHRleHR1
cmVNYXBwZXIuZ2V0KCksIG9wdGlvbnMpOwotICAgIHBhaW50ZXItPmVuZE5hdGl2ZVBhaW50aW5n
KCk7Ci0gICAgcGFpbnRlci0+cmVzdG9yZSgpOworICAgIGNvbnN0IFFUcmFuc2Zvcm0gdHJhbnNm
b3JtID0gcGFpbnRlci0+d29ybGRUcmFuc2Zvcm0oKTsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtYXRyaXgoCisgICAgICAgICAgICAgICAgdHJhbnNmb3JtLm0xMSgpLCB0cmFuc2Zv
cm0ubTEyKCksIDAsIHRyYW5zZm9ybS5tMTMoKSwKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0u
bTIxKCksIHRyYW5zZm9ybS5tMjIoKSwgMCwgdHJhbnNmb3JtLm0yMygpLAorICAgICAgICAgICAg
ICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICAgICAgdHJhbnNmb3JtLm0zMSgpLCB0cmFuc2Zv
cm0ubTMyKCksIDAsIHRyYW5zZm9ybS5tMzMoKQorICAgICAgICAgICAgICAgICk7CisgICAgcm9v
dFRleHR1cmVNYXBwZXJOb2RlLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKKyAgICByb290VGV4dHVy
ZU1hcHBlck5vZGUtPnNldE9wYWNpdHkocGFpbnRlci0+b3BhY2l0eSgpKTsKKyAgICB0ZXh0dXJl
TWFwcGVyLT5iZWdpblBhaW50aW5nKCk7CisgICAgdGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKG1h
dHJpeCwgY2xpcCk7CisgICAgcm9vdFRleHR1cmVNYXBwZXJOb2RlLT5wYWludCgpOworICAgIHRl
eHR1cmVNYXBwZXItPmVuZENsaXAoKTsKKyAgICB0ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygp
OwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFt
ZS5oIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgKaW5kZXggM2M1YTI4ZS4uNGZi
NmYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgKKysrIGIv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFdpZGdldFByaXZhdGU7CiAgICAgY2xhc3MgRnJhbWVM
b2FkZXJDbGllbnRRdDsKICAgICBjbGFzcyBDaHJvbWVDbGllbnRRdDsKLSAgICBjbGFzcyBQbGF0
Zm9ybUxheWVyUHJveHlRdDsKKyAgICBjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0Owog
fQogY2xhc3MgUVdlYkZyYW1lRGF0YTsKIGNsYXNzIFFXZWJIaXRUZXN0UmVzdWx0UHJpdmF0ZTsK
QEAgLTIzMiw3ICsyMzIsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpX
aWRnZXRQcml2YXRlOwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dFF0OwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDsKLSAgICBmcmll
bmQgY2xhc3MgV2ViQ29yZTo6UGxhdGZvcm1MYXllclByb3h5UXQ7CisgICAgZnJpZW5kIGNsYXNz
IFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ7CiAgICAgUVdlYkZyYW1lUHJpdmF0
ZSAqZDsKICAgICBRX1BSSVZBVEVfU0xPVChkLCB2b2lkIF9xX29yaWVudGF0aW9uQ2hhbmdlZCgp
KQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmggYi9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCmluZGV4IDQxMDg5NzIuLjc3MWU2OGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKKysrIGIvU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaApAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRnJhbWVWaWV3OwogICAgIGNsYXNzIEhUTUxGcmFtZU93
bmVyRWxlbWVudDsKICAgICBjbGFzcyBTY3JvbGxiYXI7Ci0gICAgY2xhc3MgVGV4dHVyZU1hcHBl
ckNvbnRlbnRMYXllcjsKKyAgICBjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZTsKIH0KIGNsYXNzIFFX
ZWJQYWdlOwogCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtYXJnaW5XaWR0
aCgtMSkKICAgICAgICAgLCBtYXJnaW5IZWlnaHQoLTEpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgICAgICwgcm9vdEdyYXBoaWNz
TGF5ZXIoMCkKKyAgICAgICAgLCByb290VGV4dHVyZU1hcHBlck5vZGUoMCkKICNlbmRpZgogICAg
ICAgICB7fQogICAgIHZvaWQgaW5pdChRV2ViRnJhbWUqIHFmcmFtZSwgUVdlYkZyYW1lRGF0YSog
ZnJhbWVEYXRhKTsKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgaW50IG1hcmdpbldp
ZHRoOwogICAgIGludCBtYXJnaW5IZWlnaHQ7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNv
bnRlbnRMYXllciogcm9vdEdyYXBoaWNzTGF5ZXI7CisgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ck5vZGUqIHJvb3RUZXh0dXJlTWFwcGVyTm9kZTsKICAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVy
ZU1hcHBlcj4gdGV4dHVyZU1hcHBlcjsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDc1NjM0
ZWQuLjgxMzdlZjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMiw2ICsyLDQ2IEBACiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgW1RleG1hcF1bUXRdIFVwc3Ry
ZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5nZXMgZnJvbSBRdCdzIFdlYktpdDIgYnJhbmNoCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDQzOQorCisgICAg
ICAgIFBhdGNoIDEwLzEwOiBHbHVlIHRoZSBUZXh0dXJlTWFwcGVyIHJlZmFjdG9yaW5nIGludG8g
V2Via2l0KDEpLgorICAgICAgICAxLiBQYXNzIGEgR3JhcGhpY3NMYXllciogaW5zdGVhZCBvZiBh
IFBsYXRmb3JtTGF5ZXIqIHRvIHRoZSBRV2ViUGFnZUNsaWVudC4KKyAgICAgICAgMi4gU2V0IHBh
cmFtZXRlcnMgaW4gVGV4dHVyZU1hcHBlci9UZXh0dXJlTWFwcGVyTm9kZSBpbnN0ZWFkIG9mIHBh
c3NpbmcgdGhlbSBpbiBhbiBvcHRpb25zIGFyZ3VtZW50LgorICAgICAgICAzLiBSZW5hbWUgUGxh
dGZvcm1MYXllclByb3h5UXQgdG8gVGV4dHVyZU1hcHBlck5vZGVDbGllbnQKKworICAgICAgICAq
IEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyQ29t
cG9zaXRlZExheWVycyk6CisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5oOgorICAgICAgICAqIEFw
aS9xd2ViZnJhbWVfcC5oOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6UVdlYkZyYW1lUHJp
dmF0ZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdDo6VGV4dHVyZU1hcHBlck5vZGVDbGllbnRR
dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0OjpzY3JvbGwp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdDo6c2V0VGV4dHVy
ZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0Ojp+
VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTm9kZUNsaWVudFF0Ojpjb21wdXRlTGFzdE1vZGlmaWVkUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0OjpzeW5jUm9vdExheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ6OnJvb3ROb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VDbGllbnRRV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6c3luY0xheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6flBhZ2VDbGllbnRRV2lkZ2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6On5QYWdlQ2xpZW50UUdyYXBoaWNz
V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnVw
ZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzeW5j
TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNl
dFJvb3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhp
Y3NXaWRnZXQ6Om1hcmtGb3JTeW5jKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xp
ZW50UXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRV2lkZ2V0OjpQYWdlQ2xpZW50
UVdpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpQ
YWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRR
R3JhcGhpY3NXaWRnZXQ6OnN5bmNMYXllcnNUaW1lb3V0KToKKworMjAxMS0wNS0wNyAgTm9hbSBS
b3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgW1RleG1hcF0gVXBzdHJlYW0gdGV4dHVyZS1t
YXBwZXIgY2hhbmdlcyBmcm9tIFF0J3MgV2ViS2l0MiBicmFuY2gKICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNDM5CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKaW5kZXggZWEyYzgyNi4u
MDQwNGVmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRRdC5jcHAKQEAgLTYyMSw3ICs2MjEsNyBAQCB2b2lkIENocm9tZUNsaWVudFF0Ojpz
ZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCiB2b2lkIENocm9tZUNsaWVudFF0OjphdHRh
Y2hSb290R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNz
TGF5ZXIpCiB7CiAgICAgaWYgKHBsYXRmb3JtUGFnZUNsaWVudCgpKQotICAgICAgICBwbGF0Zm9y
bVBhZ2VDbGllbnQoKS0+c2V0Um9vdEdyYXBoaWNzTGF5ZXIoZ3JhcGhpY3NMYXllciA/IGdyYXBo
aWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IDApOworICAgICAgICBwbGF0Zm9ybVBhZ2VDbGll
bnQoKS0+c2V0Um9vdEdyYXBoaWNzTGF5ZXIoZ3JhcGhpY3NMYXllcik7CiB9CiAKIHZvaWQgQ2hy
b21lQ2xpZW50UXQ6OnNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3Bw
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCmluZGV4
IDE4MjFiZWMuLmM0N2EyZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvUGFnZUNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5jcHAKQEAgLTE5LDE0OCArMTksODcgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0KICNpbmNsdWRlICJQYWdlQ2xpZW50UXQuaCIKLSNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyUXQuaCIKLSNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXIuaCIKKwogI2luY2x1ZGUgPFFHcmFwaGljc1NjZW5lPgogI2luY2x1ZGUgPFFHcmFwaGljc1Zp
ZXc+CiAjaWYgZGVmaW5lZChRX1dTX1gxMSkKICNpbmNsdWRlIDxRWDExSW5mbz4KICNlbmRpZgog
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIp
CisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclF0LmgiCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVN
YXBwZXJOb2RlLmgiCisKICNpZmRlZiBRVF9PUEVOR0xfTElCCiAjaW5jbHVkZSAib3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5oIgotI2luY2x1ZGUgPFFHTFdpZGdldD4KKyNlbmRpZgogI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAgICAKLWNsYXNzIFBsYXRmb3JtTGF5ZXJQcm94eVF0IDog
cHVibGljIFFPYmplY3QsIHB1YmxpYyB2aXJ0dWFsIFRleHR1cmVNYXBwZXJMYXllckNsaWVudCB7
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIp
CitjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0IHsKIHB1YmxpYzoKLSAgICBQbGF0Zm9y
bUxheWVyUHJveHlRdChRV2ViRnJhbWUqIGZyYW1lLCBUZXh0dXJlTWFwcGVyQ29udGVudExheWVy
KiBsYXllciwgUU9iamVjdCogb2JqZWN0KQotICAgICAgICA6IFFPYmplY3Qob2JqZWN0KQotICAg
ICAgICAsIG1fZnJhbWUoZnJhbWUpCi0gICAgICAgICwgbV9sYXllcihsYXllcikKKyAgICBUZXh0
dXJlTWFwcGVyTm9kZUNsaWVudFF0KFFXZWJGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQorICAgICAgICA6IG1fZnJhbWUoZnJhbWUpCisgICAgICAgICwgbV9yb290R3JhcGhpY3NM
YXllcihHcmFwaGljc0xheWVyOjpjcmVhdGUoMCkpCiAgICAgewotICAgICAgICBpZiAobV9sYXll
cikKLSAgICAgICAgICAgIG1fbGF5ZXItPnNldFBsYXRmb3JtTGF5ZXJDbGllbnQodGhpcyk7Ci0g
ICAgICAgIG1fZnJhbWUtPmQtPnJvb3RHcmFwaGljc0xheWVyID0gbV9sYXllcjsKKyAgICAgICAg
bV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJOb2RlID0gcm9vdE5vZGUoKTsKKyAgICAgICAg
bV9yb290R3JhcGhpY3NMYXllci0+YWRkQ2hpbGQobGF5ZXIpOworICAgICAgICBtX3Jvb3RHcmFw
aGljc0xheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgICAgICBtX3Jvb3RHcmFwaGlj
c0xheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKKyAgICAgICAgbV9yb290R3JhcGhpY3NM
YXllci0+c2V0U2l6ZShJbnRTaXplKDEsIDEpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFRleHR1
cmVNYXBwZXIoUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiB0ZXh0dXJlTWFwcGVyKQorICAgIHZv
aWQgc2Nyb2xsKGZsb2F0IGR4LCBmbG9hdCBkeSkKICAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmQt
PnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVyOworICAgICAgICBGbG9hdFBvaW50IHBvc2l0
aW9uID0gbV9yb290R3JhcGhpY3NMYXllci0+cG9zaXRpb24oKTsKKyAgICAgICAgbV9yb290R3Jh
cGhpY3NMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChwb3NpdGlvbi54KCkgKyBkeCwgcG9z
aXRpb24ueSgpICsgZHkpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIH5QbGF0Zm9ybUxheWVyUHJv
eHlRdCgpCisgICAgdm9pZCBzZXRUZXh0dXJlTWFwcGVyKGNvbnN0IFBhc3NPd25QdHI8VGV4dHVy
ZU1hcHBlcj4mIHRleHR1cmVNYXBwZXIpCiAgICAgewotICAgICAgICBpZiAobV9sYXllcikKLSAg
ICAgICAgICAgIG1fbGF5ZXItPnNldFBsYXRmb3JtTGF5ZXJDbGllbnQoMCk7Ci0gICAgICAgIGlm
IChtX2ZyYW1lLT5kKQotICAgICAgICAgICAgbV9mcmFtZS0+ZC0+cm9vdEdyYXBoaWNzTGF5ZXIg
PSAwOworICAgICAgICBtX2ZyYW1lLT5kLT50ZXh0dXJlTWFwcGVyID0gdGV4dHVyZU1hcHBlcjsK
KyAgICAgICAgbV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJOb2RlLT5zZXRUZXh0dXJlTWFw
cGVyKG1fZnJhbWUtPmQtPnRleHR1cmVNYXBwZXIuZ2V0KCkpOwogICAgIH0KIAotICAgIHZpcnR1
YWwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcigpCisgICAgdmlydHVhbCB+VGV4dHVyZU1h
cHBlck5vZGVDbGllbnRRdCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9mcmFtZS0+ZC0+dGV4
dHVyZU1hcHBlci5nZXQoKTsKLSAgICB9Ci0KLSAgICAvLyBTaW5jZSB3ZSBqdXN0IHBhaW50IHRo
ZSBjb21wb3NpdGVkIHRyZWUgYW5kIG5ldmVyIGNyZWF0ZSBhIHNwZWNpYWwgaXRlbSBmb3IgaXQs
IHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIGl0cyBzaXplIGNoYW5nZXMuCi0gICAgdm9pZCBzZXRT
aXplQ2hhbmdlZChjb25zdCBJbnRTaXplJikgeyB9Ci0KLXByaXZhdGU6Ci0gICAgUVdlYkZyYW1l
KiBtX2ZyYW1lOwotICAgIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqIG1fbGF5ZXI7Ci19Owot
Ci1jbGFzcyBQbGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0IDogcHVibGljIFBsYXRmb3JtTGF5ZXJQ
cm94eVF0IHsKLXB1YmxpYzoKLSAgICBQbGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0KFFXZWJGcmFt
ZSogZnJhbWUsIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqIGxheWVyLCBRV2lkZ2V0KiB3aWRn
ZXQpCi0gICAgICAgIDogUGxhdGZvcm1MYXllclByb3h5UXQoZnJhbWUsIGxheWVyLCB3aWRnZXQp
Ci0gICAgICAgICwgbV93aWRnZXQod2lkZ2V0KQotICAgIHsKLSAgICAgICAgaWYgKG1fd2lkZ2V0
KQotICAgICAgICAgICAgbV93aWRnZXQtPmluc3RhbGxFdmVudEZpbHRlcih0aGlzKTsKLQotICAg
ICAgICBpZiAodGV4dHVyZU1hcHBlcigpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IHNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlclF0OjpjcmVhdGUoKSk7CisgICAgICAgIGlm
IChtX2ZyYW1lLT5kKQorICAgICAgICAgICAgbV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJO
b2RlID0gMDsKICAgICB9CiAKLSAgICAvLyBXZSBkb24ndCB3YW50IGEgaHVnZSByZWdpb24tY2xp
cCBvbiB0aGUgY29tcG9zaXRpbmcgbGF5ZXJzOyBpbnN0ZWFkIHdlIHVuaXRlIHRoZSByZWN0YW5n
bGVzIHRvZ2V0aGVyCi0gICAgLy8gYW5kIGNsZWFyIHRoZW0gd2hlbiB0aGUgcGFpbnQgYWN0dWFs
bHkgb2NjdXJzLgotICAgIGJvb2wgZXZlbnRGaWx0ZXIoUU9iamVjdCogb2JqZWN0LCBRRXZlbnQq
IGV2ZW50KQorICAgIFFSZWN0IGNvbXB1dGVMYXN0TW9kaWZpZWRSZWN0KCkKICAgICB7Ci0gICAg
ICAgIGlmIChvYmplY3QgPT0gbV93aWRnZXQgJiYgZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OlBh
aW50KQotICAgICAgICAgICAgbV9kaXJ0eVJlY3QgPSBRUmVjdCgpOwotICAgICAgICByZXR1cm4g
UU9iamVjdDo6ZXZlbnRGaWx0ZXIob2JqZWN0LCBldmVudCk7CisgICAgICAgIHJldHVybiBtX2Zy
YW1lLT5kLT5yb290VGV4dHVyZU1hcHBlck5vZGUtPmNvbXB1dGVMYXN0TW9kaWZpZWRSZWN0KCk7
CiAgICAgfQogCi0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKQorICAgIHZvaWQgc3luY1Jvb3RM
YXllcigpCiAgICAgewotICAgICAgICBpZiAobV93aWRnZXQpCi0gICAgICAgICAgICBtX3dpZGdl
dC0+dXBkYXRlKCk7CisgICAgICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnN5bmNDb21wb3NpdGlu
Z1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogICAgIH0KIAotICAgIHZvaWQgc2V0TmVlZHNEaXNw
bGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgVGV4dHVyZU1hcHBlck5vZGUqIHJv
b3ROb2RlKCkKICAgICB7Ci0gICAgICAgIG1fZGlydHlSZWN0IHw9IHJlY3Q7Ci0gICAgICAgIG1f
d2lkZ2V0LT51cGRhdGUobV9kaXJ0eVJlY3QpOworICAgICAgICByZXR1cm4gdG9UZXh0dXJlTWFw
cGVyTm9kZShtX3Jvb3RHcmFwaGljc0xheWVyLmdldCgpKTsKICAgICB9CiAKLXByaXZhdGU6Ci0g
ICAgUVJlY3QgbV9kaXJ0eVJlY3Q7Ci0gICAgUVdpZGdldCogbV93aWRnZXQ7Ci19OwotCi0jaWYg
IWRlZmluZWQoUVRfTk9fR1JBUEhJQ1NWSUVXKQotY2xhc3MgUGxhdGZvcm1MYXllclByb3h5UUdy
YXBoaWNzT2JqZWN0IDogcHVibGljIFBsYXRmb3JtTGF5ZXJQcm94eVF0IHsKLXB1YmxpYzoKLSAg
ICBQbGF0Zm9ybUxheWVyUHJveHlRR3JhcGhpY3NPYmplY3QoUVdlYkZyYW1lKiBmcmFtZSwgVGV4
dHVyZU1hcHBlckNvbnRlbnRMYXllciogbGF5ZXIsIFFHcmFwaGljc09iamVjdCogb2JqZWN0KQot
ICAgICAgICA6IFBsYXRmb3JtTGF5ZXJQcm94eVF0KGZyYW1lLCBsYXllciwgb2JqZWN0KQotICAg
ICAgICAsIG1fZ3JhcGhpY3NJdGVtKG9iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh0ZXh0dXJl
TWFwcGVyKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSNpZmRlZiBRVF9PUEVOR0xfTElCCi0g
ICAgICAgIFFHcmFwaGljc1ZpZXcqIHZpZXcgPSBvYmplY3QtPnNjZW5lKCktPnZpZXdzKClbMF07
Ci0gICAgICAgIGlmICh2aWV3ICYmIHZpZXctPnZpZXdwb3J0KCkgJiYgdmlldy0+dmlld3BvcnQo
KS0+aW5oZXJpdHMoIlFHTFdpZGdldCIpKSB7Ci0gICAgICAgICAgICBzZXRUZXh0dXJlTWFwcGVy
KFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0jZW5kaWYKLSAgICAgICAgc2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyUXQ6OmNy
ZWF0ZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpCi0gICAgewotICAg
ICAgICBpZiAobV9ncmFwaGljc0l0ZW0pCi0gICAgICAgICAgICBtX2dyYXBoaWNzSXRlbS0+dXBk
YXRlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2dyYXBoaWNzSXRlbSkKLSAgICAgICAg
ICAgIG1fZ3JhcGhpY3NJdGVtLT51cGRhdGUoUVJlY3RGKHJlY3QpKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgUUdyYXBoaWNzSXRlbSogbV9ncmFwaGljc0l0ZW07Citwcm90ZWN0ZWQ6CisgICAg
UVdlYkZyYW1lKiBtX2ZyYW1lOworICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX3Jvb3RHcmFw
aGljc0xheWVyOwogfTsKLSNlbmRpZiAvLyBRVF9OT19HUkFQSElDU1ZJRVcKIAotdm9pZCBQYWdl
Q2xpZW50UVdpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXIqIGxheWVyKQordm9pZCBQYWdlQ2xpZW50UVdpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5
ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgaWYgKGxheWVyKSB7Ci0gICAgICAgIHBs
YXRmb3JtTGF5ZXJQcm94eSA9IG5ldyBQbGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0KHBhZ2UtPm1h
aW5GcmFtZSgpLCBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyQ29udGVudExheWVyKj4obGF5ZXIp
LCB2aWV3KTsKKyAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQgPSBuZXcgVGV4dHVyZU1h
cHBlck5vZGVDbGllbnRRdChwYWdlLT5tYWluRnJhbWUoKSwgbGF5ZXIpOworICAgICAgICB0ZXh0
dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihuZXcgVGV4dHVyZU1hcHBlclF0
KTsKKyAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnN5bmNSb290TGF5ZXIoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBkZWxldGUgcGxhdGZvcm1MYXllclByb3h5OwotICAg
IHBsYXRmb3JtTGF5ZXJQcm94eSA9IDA7CisgICAgZGVsZXRlIHRleHR1cmVNYXBwZXJOb2RlQ2xp
ZW50OworICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50ID0gMDsKIH0KIAogdm9pZCBQYWdlQ2xp
ZW50UVdpZGdldDo6bWFya0ZvclN5bmMoYm9vbCBzY2hlZHVsZVN5bmMpCkBAIC0xNzAsNyArMTA5
LDE0IEBAIHZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6Om1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVT
eW5jKQogCiB2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjpzeW5jTGF5ZXJzKFRpbWVyPFBhZ2VDbGll
bnRRV2lkZ2V0PiopCiB7CisgICAgaWYgKHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50KQorICAgICAg
ICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c3luY1Jvb3RMYXllcigpOwogICAgIFFXZWJGcmFt
ZVByaXZhdGU6OmNvcmUocGFnZS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGlu
Z1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisgICAgaWYgKCF0ZXh0dXJlTWFwcGVyTm9kZUNs
aWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+
cm9vdE5vZGUoKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKKyAg
ICAgICAgc3luY1RpbWVyLnN0YXJ0T25lU2hvdCgxLjAgLyA2MC4wKTsKKyAgICB1cGRhdGUodmll
dy0+cmVjdCgpKTsKIH0KICNlbmRpZgogCkBAIC0yMDIsNyArMTQ4LDcgQEAgdm9pZCBQYWdlQ2xp
ZW50UVdpZGdldDo6c2V0SW5wdXRNZXRob2RIaW50cyhRdDo6SW5wdXRNZXRob2RIaW50cyBoaW50
cykKIFBhZ2VDbGllbnRRV2lkZ2V0Ojp+UGFnZUNsaWVudFFXaWRnZXQoKQogewogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIGRlbGV0
ZSBwbGF0Zm9ybUxheWVyUHJveHk7CisgICAgZGVsZXRlIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50
OwogI2VuZGlmCiB9CiAKQEAgLTI2Miw3ICsyMDgsNyBAQCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lk
Z2V0Ojp+UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCgpCiAgICAgZGVsZXRlIG92ZXJsYXk7CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2lmIFVTRShURVhUVVJFX01BUFBFUikK
LSAgICBkZWxldGUgcGxhdGZvcm1MYXllclByb3h5OworICAgIGRlbGV0ZSB0ZXh0dXJlTWFwcGVy
Tm9kZUNsaWVudDsKICNlbHNlCiAgICAgaWYgKCFyb290R3JhcGhpY3NMYXllcikKICAgICAgICAg
cmV0dXJuOwpAQCAtMjg1LDcgKzIzMSw3IEBAIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdl
dDo6dXBkYXRlKGNvbnN0IFFSZWN0JiBkaXJ0eVJlY3QpCiAgICAgY3JlYXRlT3JEZWxldGVPdmVy
bGF5KCk7CiAgICAgaWYgKG92ZXJsYXkpCiAgICAgICAgIG92ZXJsYXktPnVwZGF0ZShRUmVjdEYo
ZGlydHlSZWN0KSk7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgIVVTRShURVhUVVJFX01BUFBFUikKICAgICBzeW5j
TGF5ZXJzKCk7CiAjZW5kaWYKIH0KQEAgLTMyMCwyNCArMjY2LDQ2IEBAIHZvaWQgUGFnZUNsaWVu
dFFHcmFwaGljc1dpZGdldDo6Y3JlYXRlT3JEZWxldGVPdmVybGF5KCkKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnN5bmNM
YXllcnMoKQogewotICAgIGlmIChzaG91bGRTeW5jKSB7Ci0gICAgICAgIFFXZWJGcmFtZVByaXZh
dGU6OmNvcmUocGFnZS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRl
SW5jbHVkaW5nU3ViZnJhbWVzKCk7Ci0gICAgICAgIHNob3VsZFN5bmMgPSBmYWxzZTsKLSAgICB9
CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIGlmICh0ZXh0dXJlTWFwcGVyTm9kZUNsaWVu
dCkKKyAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnN5bmNSb290TGF5ZXIoKTsKKyNl
bmRpZgorCisgICAgUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShwYWdlLT5tYWluRnJhbWUoKSktPnZp
ZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKKworI2lmIFVT
RShURVhUVVJFX01BUFBFUikKKyAgICBpZiAoIXRleHR1cmVNYXBwZXJOb2RlQ2xpZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAodGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnJvb3ROb2Rl
KCktPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCisgICAgICAgIHN5
bmNUaW1lci5zdGFydE9uZVNob3QoMS4wIC8gNjAuMCk7CisgICAgdXBkYXRlKHZpZXctPmJvdW5k
aW5nUmVjdCgpLnRvQWxpZ25lZFJlY3QoKSk7CisgICAgaWYgKCFzaG91bGRTeW5jKQorICAgICAg
ICByZXR1cm47CisgICAgc2hvdWxkU3luYyA9IGZhbHNlOworI2VuZGlmCiB9CiAKICNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCi12b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RH
cmFwaGljc0xheWVyKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBsYXllcikKK3ZvaWQgUGFn
ZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXll
ciogbGF5ZXIpCiB7CiAgICAgaWYgKGxheWVyKSB7Ci0gICAgICAgIHBsYXRmb3JtTGF5ZXJQcm94
eSA9IG5ldyBQbGF0Zm9ybUxheWVyUHJveHlRR3JhcGhpY3NPYmplY3QocGFnZS0+bWFpbkZyYW1l
KCksIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqPihsYXllciksIHZpZXcp
OworICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCA9IG5ldyBUZXh0dXJlTWFwcGVyTm9k
ZUNsaWVudFF0KHBhZ2UtPm1haW5GcmFtZSgpLCBsYXllcik7CisjaWZkZWYgUVRfT1BFTkdMX0xJ
QgorICAgICAgICBRR3JhcGhpY3NWaWV3KiBncmFwaGljc1ZpZXcgPSB2aWV3LT5zY2VuZSgpLT52
aWV3cygpWzBdOworICAgICAgICBpZiAoZ3JhcGhpY3NWaWV3ICYmIGdyYXBoaWNzVmlldy0+dmll
d3BvcnQoKSAmJiBncmFwaGljc1ZpZXctPnZpZXdwb3J0KCktPmluaGVyaXRzKCJRR0xXaWRnZXQi
KSkgeworICAgICAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyNlbmRpZgorICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVy
ZU1hcHBlcihUZXh0dXJlTWFwcGVyUXQ6OmNyZWF0ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBkZWxldGUgcGxhdGZvcm1MYXllclByb3h5OwotICAgIHBsYXRmb3JtTGF5ZXJQcm94
eSA9IDA7CisgICAgZGVsZXRlIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50OworICAgIHRleHR1cmVN
YXBwZXJOb2RlQ2xpZW50ID0gMDsKIH0KICNlbHNlCi12b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NX
aWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKFFHcmFwaGljc09iamVjdCogbGF5ZXIpCit2b2lk
IFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNz
TGF5ZXIqIGxheWVyKQogewogICAgIGlmIChyb290R3JhcGhpY3NMYXllcikgewogICAgICAgICBy
b290R3JhcGhpY3NMYXllci5kYXRhKCktPnNldFBhcmVudEl0ZW0oMCk7CkBAIC0zNDUsMTIgKzMx
MywxMiBAQCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xh
eWVyKFFHcmFwaGljc09iamVjdCogbGF5ZXIpCiAgICAgICAgIFFXZWJGcmFtZVByaXZhdGU6OmNv
cmUocGFnZS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVk
aW5nU3ViZnJhbWVzKCk7CiAgICAgfQogCi0gICAgcm9vdEdyYXBoaWNzTGF5ZXIgPSBsYXllcjsK
KyAgICByb290R3JhcGhpY3NMYXllciA9IGxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6
IDA7CiAKLSAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgbGF5ZXItPnNldEZsYWcoUUdyYXBoaWNz
SXRlbTo6SXRlbUNsaXBzQ2hpbGRyZW5Ub1NoYXBlLCB0cnVlKTsKLSAgICAgICAgbGF5ZXItPnNl
dFBhcmVudEl0ZW0odmlldyk7Ci0gICAgICAgIGxheWVyLT5zZXRaVmFsdWUoUm9vdEdyYXBoaWNz
TGF5ZXJaVmFsdWUpOworICAgIGlmIChyb290R3JhcGhpY3NMYXllcikgeworICAgICAgICByb290
R3JhcGhpY3NMYXllci5kYXRhKCktPnNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbUNsaXBzQ2hp
bGRyZW5Ub1NoYXBlLCB0cnVlKTsKKyAgICAgICAgcm9vdEdyYXBoaWNzTGF5ZXIuZGF0YSgpLT5z
ZXRQYXJlbnRJdGVtKHZpZXcpOworICAgICAgICByb290R3JhcGhpY3NMYXllci5kYXRhKCktPnNl
dFpWYWx1ZShSb290R3JhcGhpY3NMYXllclpWYWx1ZSk7CiAgICAgfQogICAgIGNyZWF0ZU9yRGVs
ZXRlT3ZlcmxheSgpOwogfQpAQCAtMzU5LDggKzMyNyw3IEBAIHZvaWQgUGFnZUNsaWVudFFHcmFw
aGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzT2JqZWN0KiBsYXllcikK
IHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6bWFya0ZvclN5bmMoYm9vbCBzY2hlZHVs
ZVN5bmMpCiB7CiAgICAgc2hvdWxkU3luYyA9IHRydWU7Ci0gICAgaWYgKHNjaGVkdWxlU3luYykK
LSAgICAgICAgc3luY01ldGFNZXRob2QuaW52b2tlKHZpZXcsIFF0OjpRdWV1ZWRDb25uZWN0aW9u
KTsKKyAgICBzeW5jVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmggYi9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCmluZGV4IDE2YmI1MGMu
LjI0ZDE1M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFn
ZUNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xp
ZW50UXQuaApAQCAtNDEsMTIgKzQxLDExIEBACiAKICNpbmNsdWRlIDxTZXR0aW5ncy5oPgogCi0j
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0j
aW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCi0jZW5kaWYKLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4
dHVyZU1hcHBlck5vZGVDbGllbnRRdDsKKyNlbmRpZgogY2xhc3MgUGFnZUNsaWVudFFXaWRnZXQg
OiBwdWJsaWMgUVdlYlBhZ2VDbGllbnQgewogcHVibGljOgogICAgIFBhZ2VDbGllbnRRV2lkZ2V0
KFFXaWRnZXQqIG5ld1ZpZXcsIFFXZWJQYWdlKiBuZXdQYWdlKQpAQCAtNTQsNyArNTMsNyBAQCBw
dWJsaWM6CiAgICAgICAgICwgcGFnZShuZXdQYWdlKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgICAgICAsIHN5bmNUaW1lcih0aGlz
LCAmUGFnZUNsaWVudFFXaWRnZXQ6OnN5bmNMYXllcnMpCi0gICAgICAgICwgcGxhdGZvcm1MYXll
clByb3h5KDApCisgICAgICAgICwgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQoMCkKICNlbmRpZgog
ICAgIHsKICAgICAgICAgUV9BU1NFUlQodmlldyk7CkBAIC05MSw3ICs5MCw3IEBAIHB1YmxpYzoK
ICAgICBRV2ViUGFnZSogcGFnZTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NM
YXllcihUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbGF5ZXIpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lk
IG1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKTsKICAgICB2b2lkIHN5bmNMYXllcnMoVGlt
ZXI8UGFnZUNsaWVudFFXaWRnZXQ+Kik7CiAjZW5kaWYKQEAgLTEwNCw3ICsxMDMsNyBAQCBwdWJs
aWM6CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01B
UFBFUikKICAgICBUaW1lcjxQYWdlQ2xpZW50UVdpZGdldD4gc3luY1RpbWVyOwotICAgIFBsYXRm
b3JtTGF5ZXJQcm94eVF0KiBwbGF0Zm9ybUxheWVyUHJveHk7CisgICAgVGV4dHVyZU1hcHBlck5v
ZGVDbGllbnRRdCogdGV4dHVyZU1hcHBlck5vZGVDbGllbnQ7CiAjZW5kaWYKIH07CiAKQEAgLTE1
MSw4ICsxNTAsOSBAQCBwdWJsaWM6CiAgICAgICAgICwgdmlld1Jlc2l6ZXNUb0NvbnRlbnRzKGZh
bHNlKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpZiBVU0UoVEVYVFVSRV9N
QVBQRVIpCi0gICAgICAgICwgcGxhdGZvcm1MYXllclByb3h5KDApCisgICAgICAgICwgdGV4dHVy
ZU1hcHBlck5vZGVDbGllbnQoMCkKICNlbmRpZgorICAgICAgICAsIHN5bmNUaW1lcih0aGlzLCAm
UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c3luY0xheWVyc1RpbWVvdXQpCiAgICAgICAgICwg
c2hvdWxkU3luYyhmYWxzZSkKICNlbmRpZgogICAgICAgICAsIG92ZXJsYXkoMCkKQEAgLTIwMCwx
MCArMjAwLDEzIEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQotICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihQbGF0Zm9ybUxh
eWVyKiBsYXllcik7CisgICAgdmlydHVhbCB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKEdyYXBo
aWNzTGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgbWFya0ZvclN5bmMoYm9vbCBzY2hlZHVsZVN5
bmMpOwogICAgIHZvaWQgc3luY0xheWVycygpOwogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQor
ICAgIHZvaWQgc3luY0xheWVyc1RpbWVvdXQoVGltZXI8UGFnZUNsaWVudFFHcmFwaGljc1dpZGdl
dD4qKSB7IHN5bmNMYXllcnMoKTsgfQorI2VuZGlmCiAgICAgLy8gUUdyYXBoaWNzV2ViVmlldyBj
YW4gcmVuZGVyIGNvbXBvc2l0ZWQgbGF5ZXJzCiAgICAgdmlydHVhbCBib29sIGFsbG93c0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKQEAgLTIx
NiwxMiArMjE5LDEyIEBAIHB1YmxpYzoKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgUGxhdGZvcm1MYXllclByb3h5UXQqIHBs
YXRmb3JtTGF5ZXJQcm94eTsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0KiB0ZXh0dXJl
TWFwcGVyTm9kZUNsaWVudDsKICNlbHNlCiAgICAgUVdlYWtQb2ludGVyPFFHcmFwaGljc09iamVj
dD4gcm9vdEdyYXBoaWNzTGF5ZXI7CiAjZW5kaWYKICAgICAvLyB3ZSBoYXZlIHRvIGZsdXNoIHF1
aXRlIG9mdGVuLCBzbyB3ZSB1c2UgYSBtZXRhLW1ldGhvZCBpbnN0ZWFkIG9mIFFUaW1lcjo6c2lu
Z2xlU2hvdCBmb3IgcHV0dGluZyB0aGUgZXZlbnQgaW4gdGhlIHF1ZXVlCi0gICAgUU1ldGFNZXRo
b2Qgc3luY01ldGFNZXRob2Q7CisgICAgVGltZXI8UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldD4g
c3luY1RpbWVyOwogCiAgICAgLy8gd2UgbmVlZCB0byBzeW5jIHRoZSBsYXllcnMgaWYgd2UgZ2V0
IGEgc3BlY2lhbCBjYWxsIGZyb20gdGhlIFdlYkNvcmUKICAgICAvLyBjb21wb3NpdG9yIHRlbGxp
bmcgdXMgdG8gZG8gc28uIFdlJ2xsIGdldCB0aGF0IGNhbGwgZnJvbSBDaHJvbWVDbGllbnRRdAo=
</data>
<flag name="commit-queue"
          id="85741"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92721</attachid>
            <date>2011-05-07 20:05:13 -0700</date>
            <delta_ts>2011-05-08 12:50:14 -0700</delta_ts>
            <desc>Patch 10: Glue layer</desc>
            <filename>0010-Glue-the-TextureMapper-refactoring-into-Webkit-1.patch</filename>
            <type>text/plain</type>
            <size>23183</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNzE3YTJhLi4xYzMwYTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC01LDYgKzUsMjEg
QEAKICAgICAgICAgW1RleG1hcF1bUXRdIFVwc3RyZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5nZXMg
ZnJvbSBRdCdzIFdlYktpdDIgYnJhbmNoCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MDQzOQogCisgICAgICAgIFBhdGNoIDEwLzEwOiBHbHVlIHRoZSBU
ZXh0dXJlTWFwcGVyIHJlZmFjdG9yaW5nIGludG8gV2Via2l0KDEpLgorICAgICAgICBQYXNzIGEg
R3JhcGhpY3NMYXllciogaW5zdGVhZCBvZiBhIFBsYXRmb3JtTGF5ZXIqIHRvIHRoZSBRV2ViUGFn
ZUNsaWVudC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3RzIGluIExheW91dFRlc3RzL2Nv
bXBvc2l0aW5nIGNvdmVyIHRoaXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9RV2ViUGFnZUNs
aWVudC5oOgorICAgICAgICAoUVdlYlBhZ2VDbGllbnQ6OnNldFJvb3RHcmFwaGljc0xheWVyKToK
KworMjAxMS0wNS0wNyAgTm9hbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1RleG1h
cF1bUXRdIFVwc3RyZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5nZXMgZnJvbSBRdCdzIFdlYktpdDIg
YnJhbmNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
MDQzOQorCiAgICAgICAgIFBhdGNoIDkvMTA6IFJlZmFjdG9yIFRleHR1cmVNYXBwZXJOb2RlIGZv
ciBwZXJmb3JtYW5jZSwgcmVhZGFiaWxpdHkgYW5kIGFjY3VyYWN5LgogICAgICAgICBDaGFuZ2Vz
IGluY2x1ZGU6CiAgICAgICAgIDEuIGFuaW1hdGlvbnMgYXJlIGltcGxlbWVudGVkIGluc2lkZSBU
ZXh0dXJlTWFwcGVyTm9kZSwgdG8gYXZvaWQgZmFsbGluZyBiYWNrIHRvIEFuaW1hdGlvbkNvbnRy
b2xsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNs
aWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaAppbmRl
eCBkOGY0MTcxLi44Mzk2Y2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9RV2ViUGFnZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQ
YWdlQ2xpZW50LmgKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBz
ZXRJbnB1dE1ldGhvZEVuYWJsZWQoYm9vbCBlbmFibGUpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
aW5wdXRNZXRob2RFbmFibGVkKCkgY29uc3QgPSAwOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6
UGxhdGZvcm1MYXllciogbGF5ZXIpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhp
Y3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllcikgeyB9CiAKICAgICAvLyB0aGlz
IGdldHMgY2FsbGVkIHdoZW4gdGhlIGNvbXBvc2l0b3Igd2FudHMgdXMgdG8gc3luYyB0aGUgbGF5
ZXJzCiAgICAgLy8gaWYgc2NoZWR1bGVTeW5jIGlzIHRydWUsIHdlIHNjaGVkdWxlIGEgc3luYyBv
dXJzZWx2ZXMuIG90aGVyd2lzZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJmcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCmluZGV4IDg1
N2NhNjMuLjllODk3NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFt
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcApAQCAtOTgsNyAr
OTgsNyBAQAogI2VuZGlmCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogI2luY2x1ZGUgInRleG1h
cC9UZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyLmgiCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgiCiAjZW5kaWYK
ICNpbmNsdWRlICJ3dGYvSGFzaE1hcC5oIgogI2luY2x1ZGUgPFFNdWx0aU1hcD4KQEAgLTMyMSwy
NCArMzIxLDI4IEBAIHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyRnJvbVRpbGVkQmFja2lu
Z1N0b3JlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiB2b2lkIFFXZWJGcmFtZVByaXZh
dGU6OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiBjbGlwKQogewotICAgIGlmICghcm9vdEdyYXBoaWNzTGF5ZXIpCisgICAgaWYg
KCFyb290VGV4dHVyZU1hcHBlck5vZGUgfHwgIXRleHR1cmVNYXBwZXIpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIHRleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAg
ICB0ZXh0dXJlTWFwcGVyLT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQtPmlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAgdGV4dHVyZU1hcHBlci0+c2V0VGV4dERy
YXdpbmdNb2RlKGNvbnRleHQtPnRleHREcmF3aW5nTW9kZSgpKTsKKyAgICB0ZXh0dXJlTWFwcGVy
LT5zZXRWaWV3cG9ydFNpemUoZnJhbWUtPnZpZXcoKS0+ZnJhbWVSZWN0KCkuc2l6ZSgpKTsKICAg
ICBRUGFpbnRlciogcGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEZy
YW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgcGFpbnRlci0+c2F2ZSgpOwotICAg
IHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKLSAgICBUZXh0dXJlTWFwcGVyQ29udGVu
dExheWVyOjpQYWludE9wdGlvbnMgb3B0aW9uczsKLSAgICBvcHRpb25zLnZpc2libGVSZWN0ID0g
Y2xpcDsKLSAgICBvcHRpb25zLnRhcmdldFJlY3QgPSB2aWV3LT5mcmFtZVJlY3QoKTsKLSAgICBv
cHRpb25zLnZpZXdwb3J0U2l6ZSA9IHZpZXctPnNpemUoKTsKLSAgICBvcHRpb25zLm9wYWNpdHkg
PSBwYWludGVyLT5vcGFjaXR5KCk7Ci0gICAgcm9vdEdyYXBoaWNzTGF5ZXItPnBhaW50KHRleHR1
cmVNYXBwZXIuZ2V0KCksIG9wdGlvbnMpOwotICAgIHBhaW50ZXItPmVuZE5hdGl2ZVBhaW50aW5n
KCk7Ci0gICAgcGFpbnRlci0+cmVzdG9yZSgpOworICAgIGNvbnN0IFFUcmFuc2Zvcm0gdHJhbnNm
b3JtID0gcGFpbnRlci0+d29ybGRUcmFuc2Zvcm0oKTsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtYXRyaXgoCisgICAgICAgICAgICAgICAgdHJhbnNmb3JtLm0xMSgpLCB0cmFuc2Zv
cm0ubTEyKCksIDAsIHRyYW5zZm9ybS5tMTMoKSwKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0u
bTIxKCksIHRyYW5zZm9ybS5tMjIoKSwgMCwgdHJhbnNmb3JtLm0yMygpLAorICAgICAgICAgICAg
ICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICAgICAgdHJhbnNmb3JtLm0zMSgpLCB0cmFuc2Zv
cm0ubTMyKCksIDAsIHRyYW5zZm9ybS5tMzMoKQorICAgICAgICAgICAgICAgICk7CisgICAgcm9v
dFRleHR1cmVNYXBwZXJOb2RlLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKKyAgICByb290VGV4dHVy
ZU1hcHBlck5vZGUtPnNldE9wYWNpdHkocGFpbnRlci0+b3BhY2l0eSgpKTsKKyAgICB0ZXh0dXJl
TWFwcGVyLT5iZWdpblBhaW50aW5nKCk7CisgICAgdGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKG1h
dHJpeCwgY2xpcCk7CisgICAgcm9vdFRleHR1cmVNYXBwZXJOb2RlLT5wYWludCgpOworICAgIHRl
eHR1cmVNYXBwZXItPmVuZENsaXAoKTsKKyAgICB0ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygp
OwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFt
ZS5oIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgKaW5kZXggM2M1YTI4ZS4uNGZi
NmYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgKKysrIGIv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFdpZGdldFByaXZhdGU7CiAgICAgY2xhc3MgRnJhbWVM
b2FkZXJDbGllbnRRdDsKICAgICBjbGFzcyBDaHJvbWVDbGllbnRRdDsKLSAgICBjbGFzcyBQbGF0
Zm9ybUxheWVyUHJveHlRdDsKKyAgICBjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0Owog
fQogY2xhc3MgUVdlYkZyYW1lRGF0YTsKIGNsYXNzIFFXZWJIaXRUZXN0UmVzdWx0UHJpdmF0ZTsK
QEAgLTIzMiw3ICsyMzIsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpX
aWRnZXRQcml2YXRlOwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dFF0OwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDsKLSAgICBmcmll
bmQgY2xhc3MgV2ViQ29yZTo6UGxhdGZvcm1MYXllclByb3h5UXQ7CisgICAgZnJpZW5kIGNsYXNz
IFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ7CiAgICAgUVdlYkZyYW1lUHJpdmF0
ZSAqZDsKICAgICBRX1BSSVZBVEVfU0xPVChkLCB2b2lkIF9xX29yaWVudGF0aW9uQ2hhbmdlZCgp
KQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmggYi9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCmluZGV4IDQxMDg5NzIuLjc3MWU2OGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKKysrIGIvU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaApAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRnJhbWVWaWV3OwogICAgIGNsYXNzIEhUTUxGcmFtZU93
bmVyRWxlbWVudDsKICAgICBjbGFzcyBTY3JvbGxiYXI7Ci0gICAgY2xhc3MgVGV4dHVyZU1hcHBl
ckNvbnRlbnRMYXllcjsKKyAgICBjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZTsKIH0KIGNsYXNzIFFX
ZWJQYWdlOwogCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtYXJnaW5XaWR0
aCgtMSkKICAgICAgICAgLCBtYXJnaW5IZWlnaHQoLTEpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgICAgICwgcm9vdEdyYXBoaWNz
TGF5ZXIoMCkKKyAgICAgICAgLCByb290VGV4dHVyZU1hcHBlck5vZGUoMCkKICNlbmRpZgogICAg
ICAgICB7fQogICAgIHZvaWQgaW5pdChRV2ViRnJhbWUqIHFmcmFtZSwgUVdlYkZyYW1lRGF0YSog
ZnJhbWVEYXRhKTsKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgaW50IG1hcmdpbldp
ZHRoOwogICAgIGludCBtYXJnaW5IZWlnaHQ7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckNv
bnRlbnRMYXllciogcm9vdEdyYXBoaWNzTGF5ZXI7CisgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ck5vZGUqIHJvb3RUZXh0dXJlTWFwcGVyTm9kZTsKICAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVy
ZU1hcHBlcj4gdGV4dHVyZU1hcHBlcjsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDc1NjM0
ZWQuLjgxMzdlZjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMiw2ICsyLDQ2IEBACiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgW1RleG1hcF1bUXRdIFVwc3Ry
ZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5nZXMgZnJvbSBRdCdzIFdlYktpdDIgYnJhbmNoCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDQzOQorCisgICAg
ICAgIFBhdGNoIDEwLzEwOiBHbHVlIHRoZSBUZXh0dXJlTWFwcGVyIHJlZmFjdG9yaW5nIGludG8g
V2Via2l0KDEpLgorICAgICAgICAxLiBQYXNzIGEgR3JhcGhpY3NMYXllciogaW5zdGVhZCBvZiBh
IFBsYXRmb3JtTGF5ZXIqIHRvIHRoZSBRV2ViUGFnZUNsaWVudC4KKyAgICAgICAgMi4gU2V0IHBh
cmFtZXRlcnMgaW4gVGV4dHVyZU1hcHBlci9UZXh0dXJlTWFwcGVyTm9kZSBpbnN0ZWFkIG9mIHBh
c3NpbmcgdGhlbSBpbiBhbiBvcHRpb25zIGFyZ3VtZW50LgorICAgICAgICAzLiBSZW5hbWUgUGxh
dGZvcm1MYXllclByb3h5UXQgdG8gVGV4dHVyZU1hcHBlck5vZGVDbGllbnQKKworICAgICAgICAq
IEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyQ29t
cG9zaXRlZExheWVycyk6CisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5oOgorICAgICAgICAqIEFw
aS9xd2ViZnJhbWVfcC5oOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6UVdlYkZyYW1lUHJp
dmF0ZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdDo6VGV4dHVyZU1hcHBlck5vZGVDbGllbnRR
dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0OjpzY3JvbGwp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdDo6c2V0VGV4dHVy
ZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0Ojp+
VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTm9kZUNsaWVudFF0Ojpjb21wdXRlTGFzdE1vZGlmaWVkUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0OjpzeW5jUm9vdExheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ6OnJvb3ROb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VDbGllbnRRV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6c3luY0xheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6flBhZ2VDbGllbnRRV2lkZ2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6On5QYWdlQ2xpZW50UUdyYXBoaWNz
V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnVw
ZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzeW5j
TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNl
dFJvb3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhp
Y3NXaWRnZXQ6Om1hcmtGb3JTeW5jKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xp
ZW50UXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRV2lkZ2V0OjpQYWdlQ2xpZW50
UVdpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpQ
YWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRR
R3JhcGhpY3NXaWRnZXQ6OnN5bmNMYXllcnNUaW1lb3V0KToKKworMjAxMS0wNS0wNyAgTm9hbSBS
b3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgW1RleG1hcF0gVXBzdHJlYW0gdGV4dHVyZS1t
YXBwZXIgY2hhbmdlcyBmcm9tIFF0J3MgV2ViS2l0MiBicmFuY2gKICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNDM5CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKaW5kZXggZWEyYzgyNi4u
MDQwNGVmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRRdC5jcHAKQEAgLTYyMSw3ICs2MjEsNyBAQCB2b2lkIENocm9tZUNsaWVudFF0Ojpz
ZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCiB2b2lkIENocm9tZUNsaWVudFF0OjphdHRh
Y2hSb290R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNz
TGF5ZXIpCiB7CiAgICAgaWYgKHBsYXRmb3JtUGFnZUNsaWVudCgpKQotICAgICAgICBwbGF0Zm9y
bVBhZ2VDbGllbnQoKS0+c2V0Um9vdEdyYXBoaWNzTGF5ZXIoZ3JhcGhpY3NMYXllciA/IGdyYXBo
aWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IDApOworICAgICAgICBwbGF0Zm9ybVBhZ2VDbGll
bnQoKS0+c2V0Um9vdEdyYXBoaWNzTGF5ZXIoZ3JhcGhpY3NMYXllcik7CiB9CiAKIHZvaWQgQ2hy
b21lQ2xpZW50UXQ6OnNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3Bw
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCmluZGV4
IDE4MjFiZWMuLmM0N2EyZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvUGFnZUNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5jcHAKQEAgLTE5LDE0OCArMTksODcgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0KICNpbmNsdWRlICJQYWdlQ2xpZW50UXQuaCIKLSNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyUXQuaCIKLSNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXIuaCIKKwogI2luY2x1ZGUgPFFHcmFwaGljc1NjZW5lPgogI2luY2x1ZGUgPFFHcmFwaGljc1Zp
ZXc+CiAjaWYgZGVmaW5lZChRX1dTX1gxMSkKICNpbmNsdWRlIDxRWDExSW5mbz4KICNlbmRpZgog
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIp
CisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclF0LmgiCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVN
YXBwZXJOb2RlLmgiCisKICNpZmRlZiBRVF9PUEVOR0xfTElCCiAjaW5jbHVkZSAib3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5oIgotI2luY2x1ZGUgPFFHTFdpZGdldD4KKyNlbmRpZgogI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAgICAKLWNsYXNzIFBsYXRmb3JtTGF5ZXJQcm94eVF0IDog
cHVibGljIFFPYmplY3QsIHB1YmxpYyB2aXJ0dWFsIFRleHR1cmVNYXBwZXJMYXllckNsaWVudCB7
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIp
CitjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0IHsKIHB1YmxpYzoKLSAgICBQbGF0Zm9y
bUxheWVyUHJveHlRdChRV2ViRnJhbWUqIGZyYW1lLCBUZXh0dXJlTWFwcGVyQ29udGVudExheWVy
KiBsYXllciwgUU9iamVjdCogb2JqZWN0KQotICAgICAgICA6IFFPYmplY3Qob2JqZWN0KQotICAg
ICAgICAsIG1fZnJhbWUoZnJhbWUpCi0gICAgICAgICwgbV9sYXllcihsYXllcikKKyAgICBUZXh0
dXJlTWFwcGVyTm9kZUNsaWVudFF0KFFXZWJGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQorICAgICAgICA6IG1fZnJhbWUoZnJhbWUpCisgICAgICAgICwgbV9yb290R3JhcGhpY3NM
YXllcihHcmFwaGljc0xheWVyOjpjcmVhdGUoMCkpCiAgICAgewotICAgICAgICBpZiAobV9sYXll
cikKLSAgICAgICAgICAgIG1fbGF5ZXItPnNldFBsYXRmb3JtTGF5ZXJDbGllbnQodGhpcyk7Ci0g
ICAgICAgIG1fZnJhbWUtPmQtPnJvb3RHcmFwaGljc0xheWVyID0gbV9sYXllcjsKKyAgICAgICAg
bV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJOb2RlID0gcm9vdE5vZGUoKTsKKyAgICAgICAg
bV9yb290R3JhcGhpY3NMYXllci0+YWRkQ2hpbGQobGF5ZXIpOworICAgICAgICBtX3Jvb3RHcmFw
aGljc0xheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgICAgICBtX3Jvb3RHcmFwaGlj
c0xheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKKyAgICAgICAgbV9yb290R3JhcGhpY3NM
YXllci0+c2V0U2l6ZShJbnRTaXplKDEsIDEpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFRleHR1
cmVNYXBwZXIoUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiB0ZXh0dXJlTWFwcGVyKQorICAgIHZv
aWQgc2Nyb2xsKGZsb2F0IGR4LCBmbG9hdCBkeSkKICAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmQt
PnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVyOworICAgICAgICBGbG9hdFBvaW50IHBvc2l0
aW9uID0gbV9yb290R3JhcGhpY3NMYXllci0+cG9zaXRpb24oKTsKKyAgICAgICAgbV9yb290R3Jh
cGhpY3NMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChwb3NpdGlvbi54KCkgKyBkeCwgcG9z
aXRpb24ueSgpICsgZHkpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIH5QbGF0Zm9ybUxheWVyUHJv
eHlRdCgpCisgICAgdm9pZCBzZXRUZXh0dXJlTWFwcGVyKGNvbnN0IFBhc3NPd25QdHI8VGV4dHVy
ZU1hcHBlcj4mIHRleHR1cmVNYXBwZXIpCiAgICAgewotICAgICAgICBpZiAobV9sYXllcikKLSAg
ICAgICAgICAgIG1fbGF5ZXItPnNldFBsYXRmb3JtTGF5ZXJDbGllbnQoMCk7Ci0gICAgICAgIGlm
IChtX2ZyYW1lLT5kKQotICAgICAgICAgICAgbV9mcmFtZS0+ZC0+cm9vdEdyYXBoaWNzTGF5ZXIg
PSAwOworICAgICAgICBtX2ZyYW1lLT5kLT50ZXh0dXJlTWFwcGVyID0gdGV4dHVyZU1hcHBlcjsK
KyAgICAgICAgbV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJOb2RlLT5zZXRUZXh0dXJlTWFw
cGVyKG1fZnJhbWUtPmQtPnRleHR1cmVNYXBwZXIuZ2V0KCkpOwogICAgIH0KIAotICAgIHZpcnR1
YWwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcigpCisgICAgdmlydHVhbCB+VGV4dHVyZU1h
cHBlck5vZGVDbGllbnRRdCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9mcmFtZS0+ZC0+dGV4
dHVyZU1hcHBlci5nZXQoKTsKLSAgICB9Ci0KLSAgICAvLyBTaW5jZSB3ZSBqdXN0IHBhaW50IHRo
ZSBjb21wb3NpdGVkIHRyZWUgYW5kIG5ldmVyIGNyZWF0ZSBhIHNwZWNpYWwgaXRlbSBmb3IgaXQs
IHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIGl0cyBzaXplIGNoYW5nZXMuCi0gICAgdm9pZCBzZXRT
aXplQ2hhbmdlZChjb25zdCBJbnRTaXplJikgeyB9Ci0KLXByaXZhdGU6Ci0gICAgUVdlYkZyYW1l
KiBtX2ZyYW1lOwotICAgIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqIG1fbGF5ZXI7Ci19Owot
Ci1jbGFzcyBQbGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0IDogcHVibGljIFBsYXRmb3JtTGF5ZXJQ
cm94eVF0IHsKLXB1YmxpYzoKLSAgICBQbGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0KFFXZWJGcmFt
ZSogZnJhbWUsIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqIGxheWVyLCBRV2lkZ2V0KiB3aWRn
ZXQpCi0gICAgICAgIDogUGxhdGZvcm1MYXllclByb3h5UXQoZnJhbWUsIGxheWVyLCB3aWRnZXQp
Ci0gICAgICAgICwgbV93aWRnZXQod2lkZ2V0KQotICAgIHsKLSAgICAgICAgaWYgKG1fd2lkZ2V0
KQotICAgICAgICAgICAgbV93aWRnZXQtPmluc3RhbGxFdmVudEZpbHRlcih0aGlzKTsKLQotICAg
ICAgICBpZiAodGV4dHVyZU1hcHBlcigpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IHNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlclF0OjpjcmVhdGUoKSk7CisgICAgICAgIGlm
IChtX2ZyYW1lLT5kKQorICAgICAgICAgICAgbV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJO
b2RlID0gMDsKICAgICB9CiAKLSAgICAvLyBXZSBkb24ndCB3YW50IGEgaHVnZSByZWdpb24tY2xp
cCBvbiB0aGUgY29tcG9zaXRpbmcgbGF5ZXJzOyBpbnN0ZWFkIHdlIHVuaXRlIHRoZSByZWN0YW5n
bGVzIHRvZ2V0aGVyCi0gICAgLy8gYW5kIGNsZWFyIHRoZW0gd2hlbiB0aGUgcGFpbnQgYWN0dWFs
bHkgb2NjdXJzLgotICAgIGJvb2wgZXZlbnRGaWx0ZXIoUU9iamVjdCogb2JqZWN0LCBRRXZlbnQq
IGV2ZW50KQorICAgIFFSZWN0IGNvbXB1dGVMYXN0TW9kaWZpZWRSZWN0KCkKICAgICB7Ci0gICAg
ICAgIGlmIChvYmplY3QgPT0gbV93aWRnZXQgJiYgZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OlBh
aW50KQotICAgICAgICAgICAgbV9kaXJ0eVJlY3QgPSBRUmVjdCgpOwotICAgICAgICByZXR1cm4g
UU9iamVjdDo6ZXZlbnRGaWx0ZXIob2JqZWN0LCBldmVudCk7CisgICAgICAgIHJldHVybiBtX2Zy
YW1lLT5kLT5yb290VGV4dHVyZU1hcHBlck5vZGUtPmNvbXB1dGVMYXN0TW9kaWZpZWRSZWN0KCk7
CiAgICAgfQogCi0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKQorICAgIHZvaWQgc3luY1Jvb3RM
YXllcigpCiAgICAgewotICAgICAgICBpZiAobV93aWRnZXQpCi0gICAgICAgICAgICBtX3dpZGdl
dC0+dXBkYXRlKCk7CisgICAgICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnN5bmNDb21wb3NpdGlu
Z1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogICAgIH0KIAotICAgIHZvaWQgc2V0TmVlZHNEaXNw
bGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgVGV4dHVyZU1hcHBlck5vZGUqIHJv
b3ROb2RlKCkKICAgICB7Ci0gICAgICAgIG1fZGlydHlSZWN0IHw9IHJlY3Q7Ci0gICAgICAgIG1f
d2lkZ2V0LT51cGRhdGUobV9kaXJ0eVJlY3QpOworICAgICAgICByZXR1cm4gdG9UZXh0dXJlTWFw
cGVyTm9kZShtX3Jvb3RHcmFwaGljc0xheWVyLmdldCgpKTsKICAgICB9CiAKLXByaXZhdGU6Ci0g
ICAgUVJlY3QgbV9kaXJ0eVJlY3Q7Ci0gICAgUVdpZGdldCogbV93aWRnZXQ7Ci19OwotCi0jaWYg
IWRlZmluZWQoUVRfTk9fR1JBUEhJQ1NWSUVXKQotY2xhc3MgUGxhdGZvcm1MYXllclByb3h5UUdy
YXBoaWNzT2JqZWN0IDogcHVibGljIFBsYXRmb3JtTGF5ZXJQcm94eVF0IHsKLXB1YmxpYzoKLSAg
ICBQbGF0Zm9ybUxheWVyUHJveHlRR3JhcGhpY3NPYmplY3QoUVdlYkZyYW1lKiBmcmFtZSwgVGV4
dHVyZU1hcHBlckNvbnRlbnRMYXllciogbGF5ZXIsIFFHcmFwaGljc09iamVjdCogb2JqZWN0KQot
ICAgICAgICA6IFBsYXRmb3JtTGF5ZXJQcm94eVF0KGZyYW1lLCBsYXllciwgb2JqZWN0KQotICAg
ICAgICAsIG1fZ3JhcGhpY3NJdGVtKG9iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh0ZXh0dXJl
TWFwcGVyKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSNpZmRlZiBRVF9PUEVOR0xfTElCCi0g
ICAgICAgIFFHcmFwaGljc1ZpZXcqIHZpZXcgPSBvYmplY3QtPnNjZW5lKCktPnZpZXdzKClbMF07
Ci0gICAgICAgIGlmICh2aWV3ICYmIHZpZXctPnZpZXdwb3J0KCkgJiYgdmlldy0+dmlld3BvcnQo
KS0+aW5oZXJpdHMoIlFHTFdpZGdldCIpKSB7Ci0gICAgICAgICAgICBzZXRUZXh0dXJlTWFwcGVy
KFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0jZW5kaWYKLSAgICAgICAgc2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyUXQ6OmNy
ZWF0ZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpCi0gICAgewotICAg
ICAgICBpZiAobV9ncmFwaGljc0l0ZW0pCi0gICAgICAgICAgICBtX2dyYXBoaWNzSXRlbS0+dXBk
YXRlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2dyYXBoaWNzSXRlbSkKLSAgICAgICAg
ICAgIG1fZ3JhcGhpY3NJdGVtLT51cGRhdGUoUVJlY3RGKHJlY3QpKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgUUdyYXBoaWNzSXRlbSogbV9ncmFwaGljc0l0ZW07Citwcm90ZWN0ZWQ6CisgICAg
UVdlYkZyYW1lKiBtX2ZyYW1lOworICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX3Jvb3RHcmFw
aGljc0xheWVyOwogfTsKLSNlbmRpZiAvLyBRVF9OT19HUkFQSElDU1ZJRVcKIAotdm9pZCBQYWdl
Q2xpZW50UVdpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXIqIGxheWVyKQordm9pZCBQYWdlQ2xpZW50UVdpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5
ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgaWYgKGxheWVyKSB7Ci0gICAgICAgIHBs
YXRmb3JtTGF5ZXJQcm94eSA9IG5ldyBQbGF0Zm9ybUxheWVyUHJveHlRV2lkZ2V0KHBhZ2UtPm1h
aW5GcmFtZSgpLCBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyQ29udGVudExheWVyKj4obGF5ZXIp
LCB2aWV3KTsKKyAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQgPSBuZXcgVGV4dHVyZU1h
cHBlck5vZGVDbGllbnRRdChwYWdlLT5tYWluRnJhbWUoKSwgbGF5ZXIpOworICAgICAgICB0ZXh0
dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihuZXcgVGV4dHVyZU1hcHBlclF0
KTsKKyAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnN5bmNSb290TGF5ZXIoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBkZWxldGUgcGxhdGZvcm1MYXllclByb3h5OwotICAg
IHBsYXRmb3JtTGF5ZXJQcm94eSA9IDA7CisgICAgZGVsZXRlIHRleHR1cmVNYXBwZXJOb2RlQ2xp
ZW50OworICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50ID0gMDsKIH0KIAogdm9pZCBQYWdlQ2xp
ZW50UVdpZGdldDo6bWFya0ZvclN5bmMoYm9vbCBzY2hlZHVsZVN5bmMpCkBAIC0xNzAsNyArMTA5
LDE0IEBAIHZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6Om1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVT
eW5jKQogCiB2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjpzeW5jTGF5ZXJzKFRpbWVyPFBhZ2VDbGll
bnRRV2lkZ2V0PiopCiB7CisgICAgaWYgKHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50KQorICAgICAg
ICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c3luY1Jvb3RMYXllcigpOwogICAgIFFXZWJGcmFt
ZVByaXZhdGU6OmNvcmUocGFnZS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGlu
Z1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisgICAgaWYgKCF0ZXh0dXJlTWFwcGVyTm9kZUNs
aWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+
cm9vdE5vZGUoKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKKyAg
ICAgICAgc3luY1RpbWVyLnN0YXJ0T25lU2hvdCgxLjAgLyA2MC4wKTsKKyAgICB1cGRhdGUodmll
dy0+cmVjdCgpKTsKIH0KICNlbmRpZgogCkBAIC0yMDIsNyArMTQ4LDcgQEAgdm9pZCBQYWdlQ2xp
ZW50UVdpZGdldDo6c2V0SW5wdXRNZXRob2RIaW50cyhRdDo6SW5wdXRNZXRob2RIaW50cyBoaW50
cykKIFBhZ2VDbGllbnRRV2lkZ2V0Ojp+UGFnZUNsaWVudFFXaWRnZXQoKQogewogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIGRlbGV0
ZSBwbGF0Zm9ybUxheWVyUHJveHk7CisgICAgZGVsZXRlIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50
OwogI2VuZGlmCiB9CiAKQEAgLTI2Miw3ICsyMDgsNyBAQCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lk
Z2V0Ojp+UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCgpCiAgICAgZGVsZXRlIG92ZXJsYXk7CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2lmIFVTRShURVhUVVJFX01BUFBFUikK
LSAgICBkZWxldGUgcGxhdGZvcm1MYXllclByb3h5OworICAgIGRlbGV0ZSB0ZXh0dXJlTWFwcGVy
Tm9kZUNsaWVudDsKICNlbHNlCiAgICAgaWYgKCFyb290R3JhcGhpY3NMYXllcikKICAgICAgICAg
cmV0dXJuOwpAQCAtMjg1LDcgKzIzMSw3IEBAIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdl
dDo6dXBkYXRlKGNvbnN0IFFSZWN0JiBkaXJ0eVJlY3QpCiAgICAgY3JlYXRlT3JEZWxldGVPdmVy
bGF5KCk7CiAgICAgaWYgKG92ZXJsYXkpCiAgICAgICAgIG92ZXJsYXktPnVwZGF0ZShRUmVjdEYo
ZGlydHlSZWN0KSk7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgIVVTRShURVhUVVJFX01BUFBFUikKICAgICBzeW5j
TGF5ZXJzKCk7CiAjZW5kaWYKIH0KQEAgLTMyMCwyNCArMjY2LDQ2IEBAIHZvaWQgUGFnZUNsaWVu
dFFHcmFwaGljc1dpZGdldDo6Y3JlYXRlT3JEZWxldGVPdmVybGF5KCkKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnN5bmNM
YXllcnMoKQogewotICAgIGlmIChzaG91bGRTeW5jKSB7Ci0gICAgICAgIFFXZWJGcmFtZVByaXZh
dGU6OmNvcmUocGFnZS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRl
SW5jbHVkaW5nU3ViZnJhbWVzKCk7Ci0gICAgICAgIHNob3VsZFN5bmMgPSBmYWxzZTsKLSAgICB9
CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIGlmICh0ZXh0dXJlTWFwcGVyTm9kZUNsaWVu
dCkKKyAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnN5bmNSb290TGF5ZXIoKTsKKyNl
bmRpZgorCisgICAgUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShwYWdlLT5tYWluRnJhbWUoKSktPnZp
ZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKKworI2lmIFVT
RShURVhUVVJFX01BUFBFUikKKyAgICBpZiAoIXRleHR1cmVNYXBwZXJOb2RlQ2xpZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAodGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnJvb3ROb2Rl
KCktPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCisgICAgICAgIHN5
bmNUaW1lci5zdGFydE9uZVNob3QoMS4wIC8gNjAuMCk7CisgICAgdXBkYXRlKHZpZXctPmJvdW5k
aW5nUmVjdCgpLnRvQWxpZ25lZFJlY3QoKSk7CisgICAgaWYgKCFzaG91bGRTeW5jKQorICAgICAg
ICByZXR1cm47CisgICAgc2hvdWxkU3luYyA9IGZhbHNlOworI2VuZGlmCiB9CiAKICNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCi12b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RH
cmFwaGljc0xheWVyKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBsYXllcikKK3ZvaWQgUGFn
ZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXll
ciogbGF5ZXIpCiB7CiAgICAgaWYgKGxheWVyKSB7Ci0gICAgICAgIHBsYXRmb3JtTGF5ZXJQcm94
eSA9IG5ldyBQbGF0Zm9ybUxheWVyUHJveHlRR3JhcGhpY3NPYmplY3QocGFnZS0+bWFpbkZyYW1l
KCksIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqPihsYXllciksIHZpZXcp
OworICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCA9IG5ldyBUZXh0dXJlTWFwcGVyTm9k
ZUNsaWVudFF0KHBhZ2UtPm1haW5GcmFtZSgpLCBsYXllcik7CisjaWZkZWYgUVRfT1BFTkdMX0xJ
QgorICAgICAgICBRR3JhcGhpY3NWaWV3KiBncmFwaGljc1ZpZXcgPSB2aWV3LT5zY2VuZSgpLT52
aWV3cygpWzBdOworICAgICAgICBpZiAoZ3JhcGhpY3NWaWV3ICYmIGdyYXBoaWNzVmlldy0+dmll
d3BvcnQoKSAmJiBncmFwaGljc1ZpZXctPnZpZXdwb3J0KCktPmluaGVyaXRzKCJRR0xXaWRnZXQi
KSkgeworICAgICAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyNlbmRpZgorICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVy
ZU1hcHBlcihUZXh0dXJlTWFwcGVyUXQ6OmNyZWF0ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBkZWxldGUgcGxhdGZvcm1MYXllclByb3h5OwotICAgIHBsYXRmb3JtTGF5ZXJQcm94
eSA9IDA7CisgICAgZGVsZXRlIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50OworICAgIHRleHR1cmVN
YXBwZXJOb2RlQ2xpZW50ID0gMDsKIH0KICNlbHNlCi12b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NX
aWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKFFHcmFwaGljc09iamVjdCogbGF5ZXIpCit2b2lk
IFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNz
TGF5ZXIqIGxheWVyKQogewogICAgIGlmIChyb290R3JhcGhpY3NMYXllcikgewogICAgICAgICBy
b290R3JhcGhpY3NMYXllci5kYXRhKCktPnNldFBhcmVudEl0ZW0oMCk7CkBAIC0zNDUsMTIgKzMx
MywxMiBAQCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xh
eWVyKFFHcmFwaGljc09iamVjdCogbGF5ZXIpCiAgICAgICAgIFFXZWJGcmFtZVByaXZhdGU6OmNv
cmUocGFnZS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVk
aW5nU3ViZnJhbWVzKCk7CiAgICAgfQogCi0gICAgcm9vdEdyYXBoaWNzTGF5ZXIgPSBsYXllcjsK
KyAgICByb290R3JhcGhpY3NMYXllciA9IGxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6
IDA7CiAKLSAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgbGF5ZXItPnNldEZsYWcoUUdyYXBoaWNz
SXRlbTo6SXRlbUNsaXBzQ2hpbGRyZW5Ub1NoYXBlLCB0cnVlKTsKLSAgICAgICAgbGF5ZXItPnNl
dFBhcmVudEl0ZW0odmlldyk7Ci0gICAgICAgIGxheWVyLT5zZXRaVmFsdWUoUm9vdEdyYXBoaWNz
TGF5ZXJaVmFsdWUpOworICAgIGlmIChyb290R3JhcGhpY3NMYXllcikgeworICAgICAgICByb290
R3JhcGhpY3NMYXllci5kYXRhKCktPnNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbUNsaXBzQ2hp
bGRyZW5Ub1NoYXBlLCB0cnVlKTsKKyAgICAgICAgcm9vdEdyYXBoaWNzTGF5ZXIuZGF0YSgpLT5z
ZXRQYXJlbnRJdGVtKHZpZXcpOworICAgICAgICByb290R3JhcGhpY3NMYXllci5kYXRhKCktPnNl
dFpWYWx1ZShSb290R3JhcGhpY3NMYXllclpWYWx1ZSk7CiAgICAgfQogICAgIGNyZWF0ZU9yRGVs
ZXRlT3ZlcmxheSgpOwogfQpAQCAtMzU5LDggKzMyNyw3IEBAIHZvaWQgUGFnZUNsaWVudFFHcmFw
aGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzT2JqZWN0KiBsYXllcikK
IHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6bWFya0ZvclN5bmMoYm9vbCBzY2hlZHVs
ZVN5bmMpCiB7CiAgICAgc2hvdWxkU3luYyA9IHRydWU7Ci0gICAgaWYgKHNjaGVkdWxlU3luYykK
LSAgICAgICAgc3luY01ldGFNZXRob2QuaW52b2tlKHZpZXcsIFF0OjpRdWV1ZWRDb25uZWN0aW9u
KTsKKyAgICBzeW5jVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmggYi9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCmluZGV4IDE2YmI1MGMu
LjJjMjBlMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFn
ZUNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xp
ZW50UXQuaApAQCAtNDEsMTIgKzQxLDExIEBACiAKICNpbmNsdWRlIDxTZXR0aW5ncy5oPgogCi0j
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0j
aW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCi0jZW5kaWYKLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4
dHVyZU1hcHBlck5vZGVDbGllbnRRdDsKKyNlbmRpZgogY2xhc3MgUGFnZUNsaWVudFFXaWRnZXQg
OiBwdWJsaWMgUVdlYlBhZ2VDbGllbnQgewogcHVibGljOgogICAgIFBhZ2VDbGllbnRRV2lkZ2V0
KFFXaWRnZXQqIG5ld1ZpZXcsIFFXZWJQYWdlKiBuZXdQYWdlKQpAQCAtNTQsNyArNTMsNyBAQCBw
dWJsaWM6CiAgICAgICAgICwgcGFnZShuZXdQYWdlKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgICAgICAsIHN5bmNUaW1lcih0aGlz
LCAmUGFnZUNsaWVudFFXaWRnZXQ6OnN5bmNMYXllcnMpCi0gICAgICAgICwgcGxhdGZvcm1MYXll
clByb3h5KDApCisgICAgICAgICwgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQoMCkKICNlbmRpZgog
ICAgIHsKICAgICAgICAgUV9BU1NFUlQodmlldyk7CkBAIC05MSw3ICs5MCw3IEBAIHB1YmxpYzoK
ICAgICBRV2ViUGFnZSogcGFnZTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NM
YXllcihUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbGF5ZXIpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lk
IG1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKTsKICAgICB2b2lkIHN5bmNMYXllcnMoVGlt
ZXI8UGFnZUNsaWVudFFXaWRnZXQ+Kik7CiAjZW5kaWYKQEAgLTEwNCw3ICsxMDMsNyBAQCBwdWJs
aWM6CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01B
UFBFUikKICAgICBUaW1lcjxQYWdlQ2xpZW50UVdpZGdldD4gc3luY1RpbWVyOwotICAgIFBsYXRm
b3JtTGF5ZXJQcm94eVF0KiBwbGF0Zm9ybUxheWVyUHJveHk7CisgICAgVGV4dHVyZU1hcHBlck5v
ZGVDbGllbnRRdCogdGV4dHVyZU1hcHBlck5vZGVDbGllbnQ7CiAjZW5kaWYKIH07CiAKQEAgLTE1
MSw4ICsxNTAsOSBAQCBwdWJsaWM6CiAgICAgICAgICwgdmlld1Jlc2l6ZXNUb0NvbnRlbnRzKGZh
bHNlKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpZiBVU0UoVEVYVFVSRV9N
QVBQRVIpCi0gICAgICAgICwgcGxhdGZvcm1MYXllclByb3h5KDApCisgICAgICAgICwgdGV4dHVy
ZU1hcHBlck5vZGVDbGllbnQoMCkKICNlbmRpZgorICAgICAgICAsIHN5bmNUaW1lcih0aGlzLCAm
UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c3luY0xheWVyc1RpbWVvdXQpCiAgICAgICAgICwg
c2hvdWxkU3luYyhmYWxzZSkKICNlbmRpZgogICAgICAgICAsIG92ZXJsYXkoMCkKQEAgLTE2Miw3
ICsxNjIsNiBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHRoZSBvdmVybGF5IGFuZCBzdGF5cyBhbGl2
ZSBmb3IgdGhlIGxpZmV0aW1lIG9mCiAgICAgICAgIC8vIHRoaXMgUUdyYXBoaWNzV2ViVmlldyBh
cyB0aGUgc2Nyb2xsYmFycyBhcmUgbmVlZGVkIHdoZW4gdGhlcmUncyBubyBjb21wb3NpdGluZwog
ICAgICAgICB2aWV3LT5zZXRGbGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHls
ZU9wdGlvbik7Ci0gICAgICAgIHN5bmNNZXRhTWV0aG9kID0gdmlldy0+bWV0YU9iamVjdCgpLT5t
ZXRob2Qodmlldy0+bWV0YU9iamVjdCgpLT5pbmRleE9mTWV0aG9kKCJzeW5jTGF5ZXJzKCkiKSk7
CiAjZW5kaWYKICAgICB9CiAKQEAgLTIwMCw5ICsxOTksMTAgQEAgcHVibGljOgogI2VuZGlmCiAK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCB2b2lkIHNldFJv
b3RHcmFwaGljc0xheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Um9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBt
YXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3luYyk7CiAgICAgdm9pZCBzeW5jTGF5ZXJzKCk7Cisg
ICAgdm9pZCBzeW5jTGF5ZXJzVGltZW91dChUaW1lcjxQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0
PiopIHsgc3luY0xheWVycygpOyB9CiAKICAgICAvLyBRR3JhcGhpY3NXZWJWaWV3IGNhbiByZW5k
ZXIgY29tcG9zaXRlZCBsYXllcnMKICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTIxNiwxMiArMjE2LDEyIEBA
IHB1YmxpYzoKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpZiBVU0UoVEVY
VFVSRV9NQVBQRVIpCi0gICAgUGxhdGZvcm1MYXllclByb3h5UXQqIHBsYXRmb3JtTGF5ZXJQcm94
eTsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0KiB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVu
dDsKICNlbHNlCiAgICAgUVdlYWtQb2ludGVyPFFHcmFwaGljc09iamVjdD4gcm9vdEdyYXBoaWNz
TGF5ZXI7CiAjZW5kaWYKICAgICAvLyB3ZSBoYXZlIHRvIGZsdXNoIHF1aXRlIG9mdGVuLCBzbyB3
ZSB1c2UgYSBtZXRhLW1ldGhvZCBpbnN0ZWFkIG9mIFFUaW1lcjo6c2luZ2xlU2hvdCBmb3IgcHV0
dGluZyB0aGUgZXZlbnQgaW4gdGhlIHF1ZXVlCi0gICAgUU1ldGFNZXRob2Qgc3luY01ldGFNZXRo
b2Q7CisgICAgVGltZXI8UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldD4gc3luY1RpbWVyOwogCiAg
ICAgLy8gd2UgbmVlZCB0byBzeW5jIHRoZSBsYXllcnMgaWYgd2UgZ2V0IGEgc3BlY2lhbCBjYWxs
IGZyb20gdGhlIFdlYkNvcmUKICAgICAvLyBjb21wb3NpdG9yIHRlbGxpbmcgdXMgdG8gZG8gc28u
IFdlJ2xsIGdldCB0aGF0IGNhbGwgZnJvbSBDaHJvbWVDbGllbnRRdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92722</attachid>
            <date>2011-05-07 20:16:43 -0700</date>
            <delta_ts>2011-05-08 19:20:57 -0700</delta_ts>
            <desc>Patch 4: Enable 3D in the build scripts and settings</desc>
            <filename>0004-Enable-3D-rendering-by-default-for-Qt.patch</filename>
            <type>text/plain</type>
            <size>3230</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCmluZGV4IDM2MDY3NjQuLmY0MWE1YmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcApAQCAtMTcyLDEzICsxNzIsMTgg
QEAgdm9pZCBRV2ViU2V0dGluZ3NQcml2YXRlOjphcHBseSgpCiAgICAgICAgIHZhbHVlID0gYXR0
cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVk
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwtPmF0dHJpYnV0
ZXMudmFsdWUoUVdlYlNldHRpbmdzOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCkpOwog
Ci0gICAgICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh2YWx1
ZSk7CisgICAgICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yM0RUcmFu
c2Zvcm1zRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVkKHRydWUpOworICAgICAgICBzZXR0aW5ncy0+c2V0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVvRW5hYmxlZCh0cnVlKTsKICNlbmRpZgogI2lm
IEVOQUJMRShXRUJHTCkKICAgICAgICAgdmFsdWUgPSBhdHRyaWJ1dGVzLnZhbHVlKFFXZWJTZXR0
aW5nczo6V2ViR0xFbmFibGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xv
YmFsLT5hdHRyaWJ1dGVzLnZhbHVlKFFXZWJTZXR0aW5nczo6V2ViR0xFbmFibGVkKSk7CiAKICAg
ICAgICAgc2V0dGluZ3MtPnNldFdlYkdMRW5hYmxlZCh2YWx1ZSk7CisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorICAgICAgICBzZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0ZvckNhbnZhc0VuYWJsZWQodHJ1ZSk7CisjZW5kaWYKICNlbmRpZgogCiAgICAgICAgIHZh
bHVlID0gYXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6Okh5cGVybGlua0F1ZGl0aW5nRW5h
YmxlZCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggOTE1ZjJmNy4uMjM4NjExZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNiBAQAorMjAxMS0wNS0wNyAgTm9hbSBSb3NlbnRoYWwgIDxub2FtLnJvc2Vu
dGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW1RleG1hcF0gVXBzdHJlYW0gdGV4dHVyZS1tYXBwZXIgY2hhbmdlcyBmcm9tIFF0
J3MgV2ViS2l0MiBicmFuY2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYwNDM5CisKKyAgICAgICAgUGF0Y2ggNC8xMDogUGVyIGNoYW5nZXMgdG8gc2V0
dGluZ3MgdG8gYWxsb3cgYmV0dGVyIGdyYW51bGFyaXR5IGZvciBhY2NlbGVyYXRlZAorICAgICAg
ICBjb21wb3NpdGluZyBjaG9pY2VzLCB3ZSBuZWVkIHRvIHNldCB0aG9zZSBvcHRpb25zIGZvciBR
dC4KKworICAgICAgICAqIEFwaS9xd2Vic2V0dGluZ3MuY3BwOgorICAgICAgICAoUVdlYlNldHRp
bmdzUHJpdmF0ZTo6YXBwbHkpOgorCiAyMDExLTA1LTA3ICBKb2UgTWFzb24gIDxqbWFzb25Acmlt
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW5pZWwgQmF0ZXMuCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzAwNWJkMi4uMmZjNWExOCAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDExLTA1LTA3ICBOb2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5v
a2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbVGV4bWFwXSBVcHN0cmVhbSB0ZXh0dXJlLW1hcHBlciBjaGFuZ2VzIGZyb20gUXQncyBXZWJL
aXQyIGJyYW5jaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjA0MzkKKworICAgICAgICBQYXRjaCA0LzEwOiBRdCBzaG91bGQgYnVpbGQgM0QgcmVuZGVy
aW5nIGJ5IGRlZmF1bHQuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDoKKwogMjAx
MS0wNS0wNyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJr
aXQgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAppbmRleCAyZjZmODQ1Li5iMWIyYzU5IDEw
MDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAorKysgYi9Ub29scy9TY3JpcHRz
L2J1aWxkLXdlYmtpdApAQCAtMTMxLDcgKzEzMSw3IEBAIG15IEBmZWF0dXJlcyA9ICgKICAgICAg
IGRlZmluZSA9PiAiRU5BQkxFX1dFQkdMIiwgZGVmYXVsdCA9PiAoaXNBcHBsZU1hY1dlYktpdCgp
ICYmICFpc0xlb3BhcmQoKSksIHZhbHVlID0+IFwkdGhyZWVEQ2FudmFzU3VwcG9ydCB9LAogCiAg
ICAgeyBvcHRpb24gPT4gIjNkLXJlbmRlcmluZyIsIGRlc2MgPT4gIlRvZ2dsZSAzRCByZW5kZXJp
bmcgc3VwcG9ydCIsCi0gICAgICBkZWZpbmUgPT4gIkVOQUJMRV8zRF9SRU5ERVJJTkciLCBkZWZh
dWx0ID0+IGlzQXBwbGVNYWNXZWJLaXQoKSwgdmFsdWUgPT4gXCR0aHJlZURSZW5kZXJpbmdTdXBw
b3J0IH0sCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV8zRF9SRU5ERVJJTkciLCBkZWZhdWx0ID0+
IChpc0FwcGxlTWFjV2ViS2l0KCkgfHwgaXNRdCgpKSwgdmFsdWUgPT4gXCR0aHJlZURSZW5kZXJp
bmdTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAiYWNjZWxlcmF0ZWQtMmQtY2FudmFzIiwg
ZGVzYyA9PiAiVG9nZ2xlIGFjY2VsZXJhdGVkIDJEIGNhbnZhcyBzdXBwb3J0IiwKICAgICAgIGRl
ZmluZSA9PiAiRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUyIsIGRlZmF1bHQgPT4gMCwgdmFs
dWUgPT4gXCRhY2NlbGVyYXRlZDJkQ2FudmFzU3VwcG9ydCB9LAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92740</attachid>
            <date>2011-05-08 12:49:01 -0700</date>
            <delta_ts>2011-05-09 18:16:10 -0700</delta_ts>
            <desc>Patch 9: TextureMapperNode refactoring (the big patch)</desc>
            <filename>0009-Refactor-TextureMapperNode-for-performance-readabili.patch</filename>
            <type>text/plain</type>
            <size>103783</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSBkNjJkNjk4YmRhNzYyMjk0OTVmYjAwNDk2YTQ2NzEzMTkxODEyMDljIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgpEYXRlOiBTYXQsIDcgTWF5IDIwMTEgMTg6NDc6MjMgLTA3MDAKU3ViamVjdDogW1BBVENI
IDA5LzEwXSBSZWZhY3RvciBUZXh0dXJlTWFwcGVyTm9kZSBmb3IgcGVyZm9ybWFuY2UsIHJlYWRh
YmlsaXR5IGFuZCBhY2N1cmFjeS4KICAgICAgQ2hhbmdlcyBpbmNsdWRlOgogICAgICAxLiBhbmlt
YXRpb25zIGFyZSBpbXBsZW1lbnRlZCBpbnNpZGUgVGV4dHVyZU1hcHBlck5vZGUsIHRvIGF2b2lk
IGZhbGxpbmcKICAgICAgICAgYmFjayB0byBBbmltYXRpb25Db250cm9sbGVyLgogICAgICAyLiBT
dXBwb3J0IHRoZSBuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIgZm9yIG1lZGlhICYgV2Vi
R0wuCiAgICAgIDMuIFVzZSBhIHBvb2wgZm9yIGludGVybWVkaWF0ZSBzdXJmYWNlcywgdG8gYXZv
aWQgY29uc3RhbnQgYWxsb2NhdGluZy8KICAgICAgICAgICAgZnJlZWluZyBvZiB0ZXh0dXJzLgog
ICAgICA0LiBQYWNrL3VucGFjayB0ZXh0dXJlcyBpbnN0ZWFkIG9mIGRlc3Ryb3lpbmcgdGhlbS4K
ICAgICAgNS4gRmFjdG9yICJkaXJ0eUZsYWdzIiB0byBrbm93IHdoYXQgd2UgZ2VvbWV0cnkgdmFs
dWVzIG5lZWQgb3IgZG9uJ3QgbmVlZAogICAgICAgICB0byBjb21wdXRlLgogICAgICA2LiBEaXZp
ZGUgY29tcHV0YXRpb24gb3BlcmF0aW9ucyB0byBkaWZmZXJlbnQgc21hbGxlciBmdW5jdGlvbnMu
CiAgICAgIDcuIEdldCByaWQgb2Ygc2Npc3Nvci9jbGlwIGxheWVycywgdXNlIHRyYW5zZm9ybWVk
IGNsaXAgaW5zdGVhZC4KICAgICAgOC4gQWxsb3cgdGlsaW5nIGZvciBiaWcgbGF5ZXJzLgogICAg
ICA5LiBNYWtlIHRoZSByZWZsZWN0aW9uL21hc2sgY29kZSBtb3JlIHJlYWRhYmxlIGJ5IGRpdmlk
aW5nIGl0IHRvIGZ1bmN0aW9ucy4KCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgMTE1ICsrCiAuLi4vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCB8ICAxMDEgKy0KIC4uLi9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCAgIHwgICAxNyArLQogLi4uL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgfCAxNTAwICsrKysrKysrKysrKy0t
LS0tLS0tCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgg
ICB8ICAyNDkgKysrLS0KIDUgZmlsZXMgY2hhbmdlZCwgMTI4MiBpbnNlcnRpb25zKCspLCA3MDAg
ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDk3N2E4MmIuLjdlZTcwZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTIsNiArMiwxMjEgQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENo
cmlzdGlhbnNlbi4KIAorICAgICAgICBbVGV4bWFwXVtRdF0gVXBzdHJlYW0gdGV4dHVyZS1tYXBw
ZXIgY2hhbmdlcyBmcm9tIFF0J3MgV2ViS2l0MiBicmFuY2gKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNDM5CisKKyAgICAgICAgUGF0Y2ggOS8xMDog
UmVmYWN0b3IgVGV4dHVyZU1hcHBlck5vZGUgZm9yIHBlcmZvcm1hbmNlLCByZWFkYWJpbGl0eSBh
bmQgYWNjdXJhY3kuCisgICAgICAgIENoYW5nZXMgaW5jbHVkZToKKyAgICAgICAgMS4gYW5pbWF0
aW9ucyBhcmUgaW1wbGVtZW50ZWQgaW5zaWRlIFRleHR1cmVNYXBwZXJOb2RlLCB0byBhdm9pZCBm
YWxsaW5nIGJhY2sgdG8gQW5pbWF0aW9uQ29udHJvbGxlci4KKyAgICAgICAgMi4gU3VwcG9ydCB0
aGUgbmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIGZvciBtZWRpYSAmIFdlYkdMLgorICAg
ICAgICAzLiBVc2UgYSBwb29sIGZvciBpbnRlcm1lZGlhdGUgc3VyZmFjZXMsIHRvIGF2b2lkIGNv
bnN0YW50IGFsbG9jYXRpbmcvZnJlZWluZyBvZiB0ZXh0dXJzLgorICAgICAgICA0LiBQYWNrL3Vu
cGFjayB0ZXh0dXJlcyBpbnN0ZWFkIG9mIGRlc3Ryb3lpbmcgdGhlbS4KKyAgICAgICAgNS4gRmFj
dG9yICJkaXJ0eUZsYWdzIiB0byBrbm93IHdoYXQgd2UgZ2VvbWV0cnkgdmFsdWVzIG5lZWQgb3Ig
ZG9uJ3QgbmVlZCB0byBjb21wdXRlLgorICAgICAgICA2LiBEaXZpZGUgY29tcHV0YXRpb24gb3Bl
cmF0aW9ucyB0byBkaWZmZXJlbnQgc21hbGxlciBmdW5jdGlvbnMuCisgICAgICAgIDcuIEdldCBy
aWQgb2Ygc2Npc3Nvci9jbGlwIGxheWVycywgdXNlIHRyYW5zZm9ybWVkIGNsaXAgaW5zdGVhZC4K
KyAgICAgICAgOC4gQWxsb3cgdGlsaW5nIGZvciBiaWcgbGF5ZXJzLgorICAgICAgICA5LiBNYWtl
IHRoZSByZWZsZWN0aW9uL21hc2sgY29kZSBtb3JlIHJlYWRhYmxlIGJ5IGRpdmlkaW5nIGl0IHRv
IGZ1bmN0aW9ucy4KKworCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGVzdHMgaW4gTGF5b3V0VGVz
dHMvY29tcG9zaXRpbmcgY292ZXIgdGhpcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRz
RGlzcGxheUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0Q29udGVudHNUb01lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnBhdXNlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpyZW1vdmVBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnBsYXRmb3JtTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFuaW1hdGlvblN0YXJ0
ZWRUaW1lckZpcmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb0NhbnZhcyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6bm9kZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTdXJmYWNlTWFuYWdlcjo6Z2V0SW50ZXJtZWRpYXRl
U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXI6
OnJlbGVhc2VJbnRlcm1lZGlhdGVTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJTdXJmYWNlTWFuYWdlcjo6bWFya1RleHR1cmVVc2FnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXI6OnB1cmdlVGV4dHVyZXMpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclN1cmZhY2VNYW5hZ2VyOjpUZXh0dXJlR3VhcmQ6OlRleHR1
cmVHdWFyZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXI6
OlRleHR1cmVHdWFyZDo6flRleHR1cmVHdWFyZCk6CisgICAgICAgIChXZWJDb3JlOjp0b1RleHR1
cmVNYXBwZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpyb290
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldFRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVBlcnNwZWN0
aXZlVHJhbnNmb3JtSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5v
ZGU6OmNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZU92ZXJsYXBzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMb2NhbFRyYW5zZm9y
bUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpkaWRDaGFu
Z2VQYXJlbnRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6
OmRpZENoYW5nZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmRp
ZENoYW5nZVRhcmdldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
Tm9kZTo6ZGlkQ2hhbmdlUGVyc3BlY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6Om5lZWRzVG9Db21wdXRlQm91bmRpbmdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlQWxsVHJhbnNmb3Jtcyk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZUJvdW5kaW5nUmVjdEZyb21Sb290SWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVUaWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVZpc2libGVSZWN0
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNv
bnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp0YXJnZXRSZWN0Rm9yVGlsZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzb3J0QnlaT3JkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZkFuZENoaWxk
cmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpwYWludFJlZmxlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50UmVjdXJzaXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnJlc2V0RGVzY2VuZGFu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRTY2Fs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0VmlzaWJsZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjppbnZhbGlkYXRlT3Zl
cmxhcHMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3Np
dGluZ1N0YXRlU2VsZik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZGVz
Y2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
bm9ybWFsaXplZEFuaW1hdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJOb2RlOjphcHBseU9wYWNpdHlBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c29sdmVF
cHNpbG9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpzb2x2ZVN0ZXBzRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
YXBwbHlUaW1pbmdGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZTo6YXBwbHlUcmFuc2Zvcm1BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6OmFwcGx5QW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlck5vZGU6OmFwcGx5QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlOjpoYXNSdW5uaW5nT3BhY2l0eUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6aGFzUnVubmluZ1RyYW5zZm9ybUFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0FuaW1hdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMYXN0TW9k
aWZpZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlUaW1pbmdGdW5jdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpjb3B5QW5pbWF0aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckFuaW1hdGlvbjo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zOjpUZXh0dXJlTWFwcGVyUGFpbnRPcHRp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb246OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6VGV4dHVyZU1hcHBlck5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldFRleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlck5vZGU6Om1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlOjp0ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2Rl
OjpUcmFuc2Zvcm1EYXRhOjpUcmFuc2Zvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpEaXJ0eUZsYWdzOjpEaXJ0eUZsYWdzKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjppbnZhbGlkYXRlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJOb2RlOjppbnZhbGlkYXRlTG9jYWxUcmFuc2Zvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmludmFsaWRhdGVQZXJzcGVjdGl2ZVRyYW5z
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6aW52YWxpZGF0ZVZp
c2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjppbnZhbGlk
YXRlUmVwbGljYVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZTo6dGFyZ2V0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZW50
aXJlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29udGVudFNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OlN0YXRlOjpTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVPd25lZFB0cik6CisKKzIwMTEtMDUtMDcgIE5vYW0g
Um9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIFtUZXhtYXBdIFVwc3RyZWFtIHRleHR1cmUt
bWFwcGVyIGNoYW5nZXMgZnJvbSBRdCdzIFdlYktpdDIgYnJhbmNoCiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDQzOQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAppbmRleCBiYmExMDllLi40MmFiNjZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAg
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdy
YXBoaWNzTGF5ZXJDbGllbnQqIGNsaWUKICAgICA6IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQogICAg
ICwgbV9ub2RlKGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyTm9kZSgpKSkKICAgICAsIG1fY2hh
bmdlTWFzaygwKQorICAgICwgbV9hbmltYXRpb25TdGFydGVkVGltZXIodGhpcywgJkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjphbmltYXRpb25TdGFydGVkVGltZXJGaXJlZCkKIHsKIH0KIApA
QCAtNzAsNyArNzEsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVk
c0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGlmIChtX3BlbmRp
bmdDb250ZW50Lm5lZWRzRGlzcGxheSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcGVuZGluZ0Nv
bnRlbnQubmVlZHNEaXNwbGF5UmVjdC51bml0ZShJbnRSZWN0KHJlY3QpKTsKKyAgICBtX3BlbmRp
bmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QudW5pdGUocmVjdCk7CiAgICAgbm90aWZ5Q2hhbmdl
KFRleHR1cmVNYXBwZXJOb2RlOjpEaXNwbGF5Q2hhbmdlKTsKIH0KIApAQCAtMzE5LDM2ICszMjAs
MTIgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb0ltYWdl
KEltYWdlKiBpbWFnZSkKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1h
Z2UpOwogfQogCi0vKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKLSovCi12b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IpCi17Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50
Q2hhbmdlKTsKLSAgICBtX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID0gVGV4dHVyZU1hcHBl
ck5vZGU6OkNvbG9yQ29udGVudFR5cGU7Ci0gICAgbV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5k
Q29sb3IgPSBjb2xvcjsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c0JhY2tncm91bmRD
b2xvcihjb2xvcik7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIG1lZGlhKQordm9pZCBHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb01lZGlhKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyKiBtZWRpYSkKIHsKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvTWVkaWEobWVk
aWEpOwogICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudENoYW5nZSk7
CiAgICAgbV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9IG1lZGlhID8gVGV4dHVyZU1hcHBl
ck5vZGU6Ok1lZGlhQ29udGVudFR5cGUgOiBUZXh0dXJlTWFwcGVyTm9kZTo6SFRNTENvbnRlbnRU
eXBlOwotICAgIGlmIChtZWRpYSkKLSAgICAgICAgbV9wZW5kaW5nQ29udGVudC5tZWRpYSA9IHN0
YXRpY19jYXN0PFRleHR1cmVNYXBwZXJNZWRpYUxheWVyKj4obWVkaWEpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9wZW5kaW5nQ29udGVudC5tZWRpYSA9IDA7Ci19Ci0KLS8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQotKi8KLXZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRl
bnRzT3JpZW50YXRpb24oQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIG9yaWVudGF0
aW9uKQotewotICAgIGlmIChjb250ZW50c09yaWVudGF0aW9uKCkgPT0gb3JpZW50YXRpb24pCi0g
ICAgICAgIHJldHVybjsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRl
bnRzT3JpZW50YXRpb25DaGFuZ2UpOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3Jp
ZW50YXRpb24ob3JpZW50YXRpb24pOworICAgIG1fcGVuZGluZ0NvbnRlbnQubWVkaWEgPSBtZWRp
YTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0zNjUsMTEgKzM0Miw3OSBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSgp
CiAgICAgbV9ub2RlLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSh0aGlzLCB0cnVlKTsKIH0KIAorYm9v
bCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1l
VmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1h
dGlvbiogYW5pbSwgY29uc3QgU3RyaW5nJiBrZXlmcmFtZXNOYW1lLCBkb3VibGUgdGltZU9mZnNl
dCkKK3sKKyAgICBBU1NFUlQoIWtleWZyYW1lc05hbWUuaXNFbXB0eSgpKTsKKworICAgIGlmICgh
YW5pbSB8fCBhbmltLT5pc0VtcHR5T3JaZXJvRHVyYXRpb24oKSB8fCB2YWx1ZUxpc3Quc2l6ZSgp
IDwgMiB8fCAodmFsdWVMaXN0LnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRy
YW5zZm9ybSAmJiB2YWx1ZUxpc3QucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5T3BhY2l0
eSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9hbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIC8vIFRoZSBzYW1lIGFuaW1hdGlv
biBuYW1lIGNhbiBiZSB1c2VkIGZvciB0d28gYW5pbWF0aW9ucyB3aXRoIGRpZmZlcmVudCBwcm9w
ZXJ0aWVzLgorICAgICAgICBpZiAobV9hbmltYXRpb25zW2ldLT5uYW1lICE9IGtleWZyYW1lc05h
bWUgfHwgbV9hbmltYXRpb25zW2ldLT5rZXlmcmFtZXMucHJvcGVydHkoKSAhPSB2YWx1ZUxpc3Qu
cHJvcGVydHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIFdlIGFscmVh
ZHkgaGF2ZSBhIGNvcHkgb2YgdGhpcyBhbmltYXRpb24sIHRoYXQgbWVhbnMgdGhhdCB3ZSdyZSBy
ZXN1bWluZyBpdCByYXRoZXIgdGhhbiBhZGRpbmcgaXQuCisgICAgICAgIFJlZlB0cjxUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uPiYgYW5pbWF0aW9uID0gbV9hbmltYXRpb25zW2ldOworICAgICAgICBh
bmltYXRpb24tPmFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKGFuaW0pOworICAgICAgICBh
bmltYXRpb24tPnBhdXNlZCA9IGZhbHNlOworICAgICAgICBhbmltYXRpb24tPnN0YXJ0VGltZSA9
IFdURjo6Y3VycmVudFRpbWUoKSAtIHRpbWVPZmZzZXQ7CisgICAgICAgIG5vdGlmeUNoYW5nZShU
ZXh0dXJlTWFwcGVyTm9kZTo6QW5pbWF0aW9uQ2hhbmdlKTsKKyAgICAgICAgbV9hbmltYXRpb25T
dGFydGVkVGltZXIuc3RhcnRPbmVTaG90KDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gYW5pbWF0aW9uID0gVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbjo6Y3JlYXRlKHZhbHVlTGlzdCk7CisgICAgYW5pbWF0aW9uLT5ib3hT
aXplID0gYm94U2l6ZTsKKyAgICBhbmltYXRpb24tPm5hbWUgPSBrZXlmcmFtZXNOYW1lOworICAg
IGFuaW1hdGlvbi0+YW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoYW5pbSk7CisgICAgYW5p
bWF0aW9uLT5wYXVzZWQgPSBmYWxzZTsKKyAgICBhbmltYXRpb24tPnN0YXJ0VGltZSA9IFdURjo6
Y3VycmVudFRpbWUoKSAtIHRpbWVPZmZzZXQ7CisKKyAgICBpZiAodmFsdWVMaXN0LnByb3BlcnR5
KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkgeworICAgICAgICBib29sIGhh
c0JpZ1JvdGF0aW9uOyAvLyBOb3QgdXNlZCwgYnV0IHJlcXVpcmVkIGFzIGEgcG9pbnRlciBwYXJh
bWV0ZXIgZm9yIHRoZSBmdW5jdGlvbi4KKyAgICAgICAgZmV0Y2hUcmFuc2Zvcm1PcGVyYXRpb25M
aXN0KHZhbHVlTGlzdCwgYW5pbWF0aW9uLT5mdW5jdGlvbkxpc3QsIGFuaW1hdGlvbi0+bGlzdHNN
YXRjaCwgaGFzQmlnUm90YXRpb24pOworICAgIH0KKworICAgIG1fYW5pbWF0aW9ucy5hcHBlbmQo
YW5pbWF0aW9uKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkFuaW1hdGlv
bkNoYW5nZSk7CisgICAgbV9hbmltYXRpb25TdGFydGVkVGltZXIuc3RhcnRPbmVTaG90KDApOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVP
ZmZzZXQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS0+bmFtZSAhPSBhbmltYXRpb25O
YW1lKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fYW5pbWF0aW9uc1tpXS0+cGF1
c2VkID0gdHJ1ZTsKKyAgICAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpBbmlt
YXRpb25DaGFuZ2UpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKK3sKKyAgICBm
b3IgKGludCBpID0gbV9hbmltYXRpb25zLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAg
ICAgIC8vIFRoZSBzYW1lIGFuaW1hdGlvbiBuYW1lIGNhbiBiZSB1c2VkIGZvciB0d28gYW5pbWF0
aW9ucyB3aXRoIGRpZmZlcmVudCBwcm9wZXJ0aWVzLiBXZSBzaG91bGQgcmVtb3ZlIGJvdGguCisg
ICAgICAgIGlmIChtX2FuaW1hdGlvbnNbaV0tPm5hbWUgIT0gYW5pbWF0aW9uTmFtZSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX2FuaW1hdGlvbnMucmVtb3ZlKGkpOworICAgICAg
ICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkFuaW1hdGlvbkNoYW5nZSk7CisgICAg
fQorfQorCisKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQogKi8KIFBsYXRmb3JtTGF5ZXIq
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9ub2RlLmdldCgpOworICAgIHJldHVybiBjb25zdF9jYXN0PFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyKj4obm9kZSgpLT5tZWRpYSgpKTsKK30KKwordm9pZCBHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQoVGltZXI8R3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI+KikKK3sKKyAgICBjbGllbnQoKS0+bm90aWZ5QW5pbWF0aW9u
U3RhcnRlZCh0aGlzLCAvKiBET00gdGltZSAqLyBXVEY6OmN1cnJlbnRUaW1lKCkpOwogfQogCiBQ
YXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShHcmFwaGljc0xh
eWVyQ2xpZW50KiBjbGllbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5o
CmluZGV4IGRjZjQ5MzguLmQyYmUwYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlci5oCkBAIC00NSw2ICs0NSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIHJlaW1wcyBmcm9t
IEdyYXBoaWNzTGF5ZXIuaAogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKSB7IHNldE5lZWRzRGlzcGxh
eSgpOyB9OwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxv
YXRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChHcmFwaGljc0xheWVyKiBsYXll
cik7CiAgICAgdmlydHVhbCBib29sIHNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xh
eWVyKj4mKTsKQEAgLTcyLDI5ICs3MywzMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNl
dFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNUb0ltYWdlKEltYWdlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9N
ZWRpYShQbGF0Zm9ybUxheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzQmFja2dy
b3VuZENvbG9yKGNvbnN0IENvbG9yJik7Ci0jaWYgRU5BQkxFKFdFQkdMKQotICAgIHZpcnR1YWwg
dm9pZCBzZXRDb250ZW50c1RvR3JhcGhpY3NDb250ZXh0M0QoY29uc3QgR3JhcGhpY3NDb250ZXh0
M0QqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0M0ROZWVkc0Rpc3BsYXko
KTsKLSNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c09yaWVudGF0aW9uKENvbXBv
c2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBvcmllbnRhdGlvbik7CisgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogY2FudmFzKSB7IHNldENvbnRl
bnRzVG9NZWRpYShjYW52YXMpOyB9CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0
YXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVy
T25seSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAg
ICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3Qg
SW50U2l6ZSYgLypib3hTaXplKi8sIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgLypr
ZXlmcmFtZXNOYW1lKi8sIGRvdWJsZSAvKnRpbWVPZmZzZXQqLykgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0Jiwg
Y29uc3QgSW50U2l6ZSYgLypib3hTaXplKi8sIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmlu
ZyYgLyprZXlmcmFtZXNOYW1lKi8sIGRvdWJsZSAvKnRpbWVPZmZzZXQqLyk7CisgICAgdmlydHVh
bCB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25OYW1lKi8sIGRv
dWJsZSAvKnRpbWVPZmZzZXQqLyk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihj
b25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovKTsKIAogICAgIHZvaWQgbm90aWZ5Q2hhbmdl
KFRleHR1cmVNYXBwZXJOb2RlOjpDaGFuZ2VNYXNrIGNoYW5nZU1hc2spOwogICAgIGlubGluZSBU
ZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudERhdGEmIHBlbmRpbmdDb250ZW50KCkgeyByZXR1cm4g
bV9wZW5kaW5nQ29udGVudDsgfQogICAgIGlubGluZSBpbnQgY2hhbmdlTWFzaygpIGNvbnN0IHsg
cmV0dXJuIG1fY2hhbmdlTWFzazsgfQogICAgIHZvaWQgZGlkU3luY2hyb25pemUoKTsKIAorICAg
IFRleHR1cmVNYXBwZXJOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLmdldCgpOyB9
CisKIHByaXZhdGU6CiAgICAgT3duUHRyPFRleHR1cmVNYXBwZXJOb2RlPiBtX25vZGU7CiAgICAg
Ym9vbCBtX3N5bmNRdWV1ZWQ7CiAgICAgaW50IG1fY2hhbmdlTWFzazsKICAgICBUZXh0dXJlTWFw
cGVyTm9kZTo6Q29udGVudERhdGEgbV9wZW5kaW5nQ29udGVudDsKKyAgICBWZWN0b3I8UmVmUHRy
PFRleHR1cmVNYXBwZXJBbmltYXRpb24+ID4gbV9hbmltYXRpb25zOworICAgIHZvaWQgYW5pbWF0
aW9uU3RhcnRlZFRpbWVyRmlyZWQoVGltZXI8R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI+Kik7
CisgICAgVGltZXI8R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI+IG1fYW5pbWF0aW9uU3RhcnRl
ZFRpbWVyOwogfTsKIAogaW5saW5lIHN0YXRpYyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciog
dG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihHcmFwaGljc0xheWVyKiBsYXllcikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlck5vZGUuY3BwCmluZGV4IGJmNTNlNjEuLjhkYjA4NTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJOb2RlLmNwcApAQCAtMjAsNzQyICsyMCw3ODYgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTm9kZS5oIgogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBUZXh0dXJlTWFwcGVyQ2FjaGUgeworI2lmbmRl
ZiBURVhUVVJFX01BUFBFUl9NSU5JTUFMX0NPTVBVVEFUSU9OUworI2RlZmluZSBURVhUVVJFX01B
UFBFUl9NSU5JTUFMX0NPTVBVVEFUSU9OUyAxCisjZW5kaWYKKworY2xhc3MgVGV4dHVyZU1hcHBl
clN1cmZhY2VNYW5hZ2VyIHsKIHB1YmxpYzoKLSAgICB2b2lkIG1hcmsoQml0bWFwVGV4dHVyZSog
dGV4dHVyZSk7CisgICAgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcjsKKyAgICBWZWN0b3I8
UmVmUHRyPEJpdG1hcFRleHR1cmU+ID4gc3VyZmFjZXM7CisgICAgVmVjdG9yPFJlZlB0cjxCaXRt
YXBUZXh0dXJlPiA+IHRleHR1cmVzOworICAgIEludFNpemUgdmlld3BvcnRTaXplOwogCi0gICAg
Y2xhc3MgRW50cnkgewotICAgIHB1YmxpYzoKLSAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+
IHRleHR1cmU7Ci0gICAgICAgIEVudHJ5KCkgOiBwcmV2aW91c0Nvc3QoMCkgeyB9Ci0gICAgICAg
IGlubGluZSBpbnQgY29tcHV0ZUNvc3QoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoIXRleHR1cmUgfHwgIXRleHR1cmUtPmlzVmFsaWQoKSB8fCB0ZXh0dXJlLT5pc1BhY2tlZCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgY29uc3QgSW50U2l6ZSB0
ZXh0dXJlU2l6ZSA9IHRleHR1cmUtPnNpemUoKTsKLSAgICAgICAgICAgIC8vIEFuIGltYWdlJ3Mg
Y29zdCBpbiBieXRlcyBpcyB3aWR0aCAqIGhlaWdodCAqIGJ5dGVzIHBlciBwaXhlbCAoNCkuCi0g
ICAgICAgICAgICByZXR1cm4gdGV4dHVyZVNpemUud2lkdGgoKSAqIHRleHR1cmVTaXplLmhlaWdo
dCgpICogNDsKKyAgICBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGdldEludGVybWVkaWF0ZVN1
cmZhY2UoKQorICAgIHsKKyAgICAgICAgSW50U2l6ZSBuZXdWaWV3cG9ydFNpemUgPSB0ZXh0dXJl
TWFwcGVyLT52aWV3cG9ydFNpemUoKTsKKyAgICAgICAgaWYgKG5ld1ZpZXdwb3J0U2l6ZSAhPSB2
aWV3cG9ydFNpemUpIHsKKyAgICAgICAgICAgIHZpZXdwb3J0U2l6ZSA9IG5ld1ZpZXdwb3J0U2l6
ZTsKKyAgICAgICAgICAgIHN1cmZhY2VzLmNsZWFyKCk7CiAgICAgICAgIH0KLSAgICAgICAgRW50
cnkoQml0bWFwVGV4dHVyZSogbmV3VGV4dHVyZSkKLSAgICAgICAgICAgIDogdGV4dHVyZShuZXdU
ZXh0dXJlKQotICAgICAgICB7CisgICAgICAgIGlmIChzdXJmYWNlcy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBuZXdTdXJmYWNlID0gdGV4dHVyZU1hcHBl
ci0+Y3JlYXRlVGV4dHVyZSgpOworICAgICAgICAgICAgbmV3U3VyZmFjZS0+cmVzZXQodmlld3Bv
cnRTaXplLCBmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gbmV3U3VyZmFjZS5nZXQoKTsKICAg
ICAgICAgfQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRW50cnkmIG90aGVyKSBjb25z
dCB7IHJldHVybiB0ZXh0dXJlID09IG90aGVyLnRleHR1cmU7IH0KLSAgICAgICAgaW50IHByZXZp
b3VzQ29zdDsKLSAgICB9OworICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gc3VyZmFjZSA9
IHN1cmZhY2VzLmxhc3QoKTsKKyAgICAgICAgc3VyZmFjZS0+cmVzZXQodmlld3BvcnRTaXplLCBm
YWxzZSk7CisgICAgICAgIHN1cmZhY2VzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgc3VyZmFjZS0+
bG9jaygpOworICAgICAgICByZXR1cm4gc3VyZmFjZS5nZXQoKTsKKyAgICB9CiAKLSAgICBUZXh0
dXJlTWFwcGVyQ2FjaGUoKQotICAgICAgICA6IG1fdG90YWxDb3N0KDApCisgICAgdm9pZCByZWxl
YXNlSW50ZXJtZWRpYXRlU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKQogICAgIHsKKyAg
ICAgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzdXJmYWNl
cy5hcHBlbmQoc3VyZmFjZSk7CisgICAgICAgIHN1cmZhY2UtPnVubG9jaygpOworICAgICAgICBt
YXJrVGV4dHVyZVVzYWdlKHN1cmZhY2UpOwogICAgIH0KIAotICAgIHZvaWQgcHVyZ2UoKTsKLSAg
ICBWZWN0b3I8RW50cnk+IG1fZGF0YTsKLSAgICBpbnQgbV90b3RhbENvc3Q7Ci0jaWZuZGVmIFRF
WE1BUF9URVhUVVJFX0NBQ0hFX0tCUwotI2RlZmluZSBURVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMg
MjQgKiAxMDI0Ci0jZW5kaWYKLSAgICBzdGF0aWMgY29uc3QgaW50IE1heENvc3QgPSBURVhNQVBf
VEVYVFVSRV9DQUNIRV9LQlMgKiAxMDI0OwotICAgIHN0YXRpYyBjb25zdCBpbnQgUHVyZ2VBbW91
bnQgPSBNYXhDb3N0IC8gNDsKLX07CisgICAgdm9pZCBtYXJrVGV4dHVyZVVzYWdlKEJpdG1hcFRl
eHR1cmUqIHRleHR1cmUpCisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRl
eHR1cmVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAodGV4dHVyZXNbaV0uZ2V0KCkg
PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRleHR1cmVzLnJlbW92ZShpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCisgICAgICAgIHRl
eHR1cmVzLnByZXBlbmQodGV4dHVyZSk7CisgICAgfQogCi12b2lkIFRleHR1cmVNYXBwZXJDYWNo
ZTo6cHVyZ2UoKQotewotICAgIGNvbnN0IGludCBzaXplID0gbV9kYXRhLnNpemUoKTsKKyAgICBz
dGF0aWMgY29uc3QgaW50IGdUZXh0dXJlQnl0ZVNpemVMaW1pdCA9IDE2ICogMTAyNCAqIDEwMjQ7
CisgICAgc3RhdGljIGNvbnN0IGludCBnVGV4dHVyZUJ5dGVTaXplQWZ0ZXJQdXJnZSA9IGdUZXh0
dXJlQnl0ZVNpemVMaW1pdCAqIDAuODsKKyAgICB2b2lkIHB1cmdlVGV4dHVyZXMoKQorICAgIHsK
KyAgICAgICAgaW50IHRvdGFsQ29zdCA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSB0ZXh0dXJl
cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICAgICAgaWYgKHRleHR1cmVzW2ld
LT5oYXNPbmVSZWYoKSkgeworICAgICAgICAgICAgICAgIHRleHR1cmVzLnJlbW92ZShpKTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KIAotICAgIGlmIChtX3RvdGFs
Q29zdCA8PSBUZXh0dXJlTWFwcGVyQ2FjaGU6Ok1heENvc3QpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIGlmICghdGV4dHVyZXNbaV0tPmlzUGFja2VkKCkpCisgICAgICAgICAgICAgICAg
dG90YWxDb3N0ICs9IHRleHR1cmVzW2ldLT5udW1iZXJPZkJ5dGVzKCk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRvdGFsQ29zdCA8PSBnVGV4dHVyZUJ5dGVTaXplTGltaXQpCisgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIHRoZSByaWdodCBjb3VudC4g
SXQgbWlnaHQgYmUgaW5hY2N1cmF0ZSBpZiBjb250ZW50IGNoYW5nZWQgc2l6ZS4KLSAgICAvLyBX
ZSBvbmx5IGRvIHRoaXMgd2hlbiB3ZSdyZSBhY3R1YWxseSByZWFkeSB0byBwdXJnZS4KLSAgICBt
X3RvdGFsQ29zdCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAg
ICAgIG1fdG90YWxDb3N0ICs9IG1fZGF0YVtpXS5jb21wdXRlQ29zdCgpOworICAgICAgICBmb3Ig
KGludCBpID0gdGV4dHVyZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAg
IGlmICh0ZXh0dXJlc1tpXS0+aXNMb2NrZWQoKSB8fCB0ZXh0dXJlc1tpXS0+aXNQYWNrZWQoKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgIGZvciAoaW50IGkgPSBzaXplLTE7IGkg
Pj0gMCAmJiBtX3RvdGFsQ29zdCA+IFRleHR1cmVNYXBwZXJDYWNoZTo6TWF4Q29zdCAtIFRleHR1
cmVNYXBwZXJDYWNoZTo6UHVyZ2VBbW91bnQ7IC0taSkgewotICAgICAgICBFbnRyeSYgZW50cnkg
PSBtX2RhdGFbaV07Ci0gICAgICAgIGlmIChlbnRyeS50ZXh0dXJlLT5pc0xvY2tlZCgpIHx8ICFl
bnRyeS50ZXh0dXJlLT5pc1ZhbGlkKCkgfHwgZW50cnkudGV4dHVyZS0+aXNQYWNrZWQoKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtX3RvdGFsQ29zdCAtPSBlbnRyeS5wcmV2aW91
c0Nvc3Q7Ci0gICAgICAgIGVudHJ5LnRleHR1cmUtPnBhY2soKTsKLSAgICAgICAgbV9kYXRhLnJl
bW92ZShpKTsKKyAgICAgICAgICAgIHRvdGFsQ29zdCAtPSB0ZXh0dXJlc1tpXS0+bnVtYmVyT2ZC
eXRlcygpOworICAgICAgICAgICAgdGV4dHVyZXNbaV0tPnBhY2soKTsKKworICAgICAgICAgICAg
aWYgKHRvdGFsQ29zdCA8PSBnVGV4dHVyZUJ5dGVTaXplQWZ0ZXJQdXJnZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9Ci19CiAKLXZvaWQgVGV4dHVyZU1hcHBlckNh
Y2hlOjptYXJrKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlIHx8
ICF0ZXh0dXJlLT5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBjbGFzcyBUZXh0dXJl
R3VhcmQgeworICAgIHB1YmxpYzoKKyAgICAgICAgVGV4dHVyZUd1YXJkKEJpdG1hcFRleHR1cmUq
IHRleHR1cmUsIFRleHR1cmVNYXBwZXJTdXJmYWNlTWFuYWdlciogbWFuYWdlcikKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKG1hbmFnZXIpOwogCi0gICAgRW50cnkgZW50cnkodGV4dHVy
ZSk7Ci0gICAgc2l6ZV90IGluZGV4ID0gbV9kYXRhLmZpbmQoZW50cnkpOwotICAgIGlmICghaW5k
ZXgpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgcHJldmlvdXNDb3N0ID0gMDsKKyAgICAgICAgICAg
IHRoaXMtPnRleHR1cmUgPSB0ZXh0dXJlOworICAgICAgICAgICAgdGV4dHVyZS0+bG9jaygpOwor
ICAgICAgICAgICAgbWFuYWdlci0+bWFya1RleHR1cmVVc2FnZSh0ZXh0dXJlKTsKKyAgICAgICAg
fQogCi0gICAgaWYgKGluZGV4IDwgbV9kYXRhLnNpemUoKSkgewotICAgICAgICBwcmV2aW91c0Nv
c3QgPSBtX2RhdGFbaW5kZXhdLnByZXZpb3VzQ29zdDsKLSAgICAgICAgbV9kYXRhLnJlbW92ZShp
bmRleCk7Ci0gICAgfQotICAgIGNvbnN0IGludCBjb3N0ID0gZW50cnkuY29tcHV0ZUNvc3QoKTsK
LSAgICBtX3RvdGFsQ29zdCAtPSBwcmV2aW91c0Nvc3Q7Ci0gICAgbV90b3RhbENvc3QgKz0gKGVu
dHJ5LnByZXZpb3VzQ29zdCA9IGNvc3QpOwotICAgIG1fZGF0YS5wcmVwZW5kKGVudHJ5KTsKLX0K
KyAgICAgICAgflRleHR1cmVHdWFyZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0ZXh0
dXJlKQorICAgICAgICAgICAgICAgIHRleHR1cmUtPnVubG9jaygpOworICAgICAgICB9CiAKLWNs
YXNzIFRleHR1cmVNYXBwZXJDYWNoZUxvY2sgewotcHVibGljOgotICAgIFRleHR1cmVNYXBwZXJD
YWNoZUxvY2soQml0bWFwVGV4dHVyZSogdGV4dHVyZSkgOiBtX3RleHR1cmUodGV4dHVyZSkKLSAg
ICB7Ci0gICAgICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgICAgICBtX3RleHR1cmUtPmxvY2so
KTsKLSAgICB9Ci0gICAgflRleHR1cmVNYXBwZXJDYWNoZUxvY2soKQotICAgIHsKLSAgICAgICAg
aWYgKG1fdGV4dHVyZSkKLSAgICAgICAgICAgIG1fdGV4dHVyZS0+dW5sb2NrKCk7Ci0gICAgfQor
ICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZTsKKyAgICB9OwogCi1wcml2YXRl
OgotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtX3RleHR1cmU7CiB9OwogCi0KLVRleHR1cmVN
YXBwZXJDYWNoZSogVGV4dHVyZU1hcHBlck5vZGU6OmNhY2hlKCkKK1RleHR1cmVNYXBwZXJOb2Rl
KiB0b1RleHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewotICAgIFRleHR1
cmVNYXBwZXJOb2RlKiByb290ID0gcm9vdExheWVyKCk7Ci0gICAgaWYgKCFyb290KQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBpZiAoIXJvb3QtPm1fY2FjaGUpCi0gICAgICAgIHJvb3QtPm1fY2Fj
aGUgPSBuZXcgVGV4dHVyZU1hcHBlckNhY2hlOwotICAgIHJldHVybiByb290LT5tX2NhY2hlOwor
ICAgIHJldHVybiBsYXllciA/IHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIpLT5u
b2RlKCkgOiAwOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXROZWVkc0Rpc3BsYXlJ
blJlY3QoSW50UmVjdCByZWN0KQorVGV4dHVyZU1hcHBlck5vZGUqIFRleHR1cmVNYXBwZXJOb2Rl
Ojpyb290TGF5ZXIoKQogewotICAgIGlmIChtX3BsYXRmb3JtQ2xpZW50KSB7Ci0gICAgICAgIGlm
IChtX3N0YXRlLmhhc1N1cmZhY2VEZXNjZW5kYW50cykgewotICAgICAgICAgICAgbV9wbGF0Zm9y
bUNsaWVudC0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgcmVjdC5pbnRlcnNlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwg
bV9zaXplLmhlaWdodCgpKSk7Ci0gICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgbV9wbGF0Zm9ybUNsaWVudC0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3BhcmVudCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXJlbnQtPnNldE5lZWRzRGlzcGxheUluUmVjdChy
ZWN0KTsKKyAgICBpZiAobV9lZmZlY3RUYXJnZXQpCisgICAgICAgIHJldHVybiBtX2VmZmVjdFRh
cmdldC0+cm9vdExheWVyKCk7CisgICAgaWYgKG1fcGFyZW50KQorICAgICAgICByZXR1cm4gbV9w
YXJlbnQtPnJvb3RMYXllcigpOworICAgIHJldHVybiB0aGlzOwogfQogCi12b2lkIFRleHR1cmVN
YXBwZXJOb2RlOjpzZXROZWVkc0Rpc3BsYXkoKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0
VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCiB7Ci0gICAgaWYg
KG1fZWZmZWN0VGFyZ2V0KQotICAgICAgICBtX2VmZmVjdFRhcmdldC0+c2V0TmVlZHNEaXNwbGF5
KCk7Ci0gICAgaWYgKG1fdHJhbnNmb3Jtcy50YXJnZXRCb3VuZGluZ1JlY3QuaXNFbXB0eSgpKQor
ICAgIGlmIChtX3RyYW5zZm9ybXMuYmFzZSA9PSBtYXRyaXgpCiAgICAgICAgIHJldHVybjsKLSAg
ICBpZiAobV9zdGF0ZS5kcmF3c0NvbnRlbnQgfHwgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlw
ZSAhPSBIVE1MQ29udGVudFR5cGUpCi0gICAgICAgIHNldE5lZWRzRGlzcGxheUluUmVjdChtX3Ry
YW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0KTsKLX0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6c2V0UGxhdGZvcm1MYXllckNsaWVudChUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQqIGNsaWVu
dCkKLXsKLSAgICBtX3BsYXRmb3JtQ2xpZW50ID0gY2xpZW50OworICAgIG1fdHJhbnNmb3Jtcy5i
YXNlID0gbWF0cml4OworICAgIGludmFsaWRhdGVMb2NhbFRyYW5zZm9ybSgpOwogfQogCi1pbnQg
VGV4dHVyZU1hcHBlck5vZGU6OmNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZShjb25zdCB2b2lk
KiBhLCBjb25zdCB2b2lkKiBiKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVBlcnNw
ZWN0aXZlVHJhbnNmb3JtSWZOZWVkZWQoKQogewotICAgIHR5cGVkZWYgY29uc3QgVGV4dHVyZU1h
cHBlck5vZGUqIE5vZGVQdHI7Ci0gICAgY29uc3QgTm9kZVB0ciogbm9kZUEgPSBzdGF0aWNfY2Fz
dDxjb25zdCBOb2RlUHRyKj4oYSk7Ci0gICAgY29uc3QgTm9kZVB0ciogbm9kZUIgPSBzdGF0aWNf
Y2FzdDxjb25zdCBOb2RlUHRyKj4oYik7Ci0gICAgcmV0dXJuIGludCgoKCpub2RlQSktPm1fdHJh
bnNmb3Jtcy5jZW50ZXJaIC0gKCpub2RlQiktPm1fdHJhbnNmb3Jtcy5jZW50ZXJaKSAqIDEwMDAp
OwotfQorICAgIGlmIChtX2NoaWxkcmVuLmlzRW1wdHkoKSB8fCBtX3N0YXRlLmNoaWxkcmVuVHJh
bnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpzb3J0QnlaT3JkZXIoVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKiA+JiBhcnJheSwg
aW50IGZpcnN0LCBpbnQgbGFzdCkKLXsKLSAgICBxc29ydChhcnJheS5kYXRhKCksIGFycmF5LnNp
emUoKSwgc2l6ZW9mKFRleHR1cmVNYXBwZXJOb2RlKiksIFRleHR1cmVNYXBwZXJOb2RlOjpjb21w
YXJlR3JhcGhpY3NMYXllcnNaVmFsdWUpOwotfQorI2lmIFRFWFRVUkVfTUFQUEVSX01JTklNQUxf
Q09NUFVUQVRJT05TCisgICAgaWYgKCFtX2RpcnR5RmxhZ3MucGVyc3BlY3RpdmVUcmFuc2Zvcm0p
CisgICAgICAgIHJldHVybjsKKyNlbmRpZgogCi1ib29sIFRleHR1cmVNYXBwZXJOb2RlOjpoYXNT
dXJmYWNlRGVzY2VuZGFudHMoKSBjb25zdAotewotICAgIGlmIChtX2xheWVyVHlwZSA9PSBDbGlw
TGF5ZXIgfHwgbV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgfHwgbV9zdGF0ZS5yZXBs
aWNhTGF5ZXIpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGNvbnN0IEZsb2F0UG9pbnQgY2Vu
dGVyUG9pbnQgPSBGbG9hdFBvaW50KG1fc2l6ZS53aWR0aCgpIC8gMiwgbV9zaXplLmhlaWdodCgp
IC8gMik7CisgICAgbV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlID0gVHJhbnNmb3JtYXRpb25NYXRy
aXgoKQorICAgICAgICAgICAgLnRyYW5zbGF0ZShjZW50ZXJQb2ludC54KCksIGNlbnRlclBvaW50
LnkoKSkKKyAgICAgICAgICAgIC5tdWx0aXBseShtX3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtKQor
ICAgICAgICAgICAgLnRyYW5zbGF0ZSgtY2VudGVyUG9pbnQueCgpLCAtY2VudGVyUG9pbnQueSgp
KTsKIAotICAgIGNvbnN0IGludCBzaXplID0gbV9jaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2Rl
KiBjaGlsZCA9IG1fY2hpbGRyZW5baV0pIHsKLSAgICAgICAgICAgIGlmIChjaGlsZC0+aGFzU3Vy
ZmFjZURlc2NlbmRhbnRzKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworI2lmIFRFWFRVUkVfTUFQUEVSX01JTklNQUxf
Q09NUFVUQVRJT05TCisgICAgbV9kaXJ0eUZsYWdzLnBlcnNwZWN0aXZlVHJhbnNmb3JtID0gZmFs
c2U7CisgICAgbV9kaXJ0eUZsYWdzLnRyYW5zZm9ybSA9IHRydWU7CisjZW5kaWYKIH0KIAogaW50
IFRleHR1cmVNYXBwZXJOb2RlOjpjb3VudERlc2NlbmRhbnRzV2l0aENvbnRlbnQoKSBjb25zdAog
ewotICAgIGlmICghbV9zdGF0ZS52aXNpYmxlIHx8IG1fc3RhdGUub3BhY2l0eSA8IDAuMDAxKQor
ICAgIGlmICghbV9zdGF0ZS52aXNpYmxlIHx8IG1fb3BhY2l0eSA8IDAuMDEgfHwgKCFtX3NpemUu
d2lkdGgoKSAmJiAhbV9zaXplLmhlaWdodCgpICYmIG1fc3RhdGUubWFza3NUb0JvdW5kcykpCiAg
ICAgICAgIHJldHVybiAwOworICAgIGludCBjb3VudCA9IChtX3NpemUud2lkdGgoKSAmJiBtX3Np
emUuaGVpZ2h0KCkgJiYgKG1fc3RhdGUuZHJhd3NDb250ZW50IHx8IG1fY3VycmVudENvbnRlbnQu
Y29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRUeXBlKSkgPyAxIDogMDsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIGNvdW50ICs9IG1f
Y2hpbGRyZW5baV0tPmNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpOwogCi0gICAgaW50IGRl
c2NlbmRhbnRzV2l0aENvbnRlbnQgPSAobV9zdGF0ZS5kcmF3c0NvbnRlbnQgfHwgbV9jdXJyZW50
Q29udGVudC5jb250ZW50VHlwZSAhPSBIVE1MQ29udGVudFR5cGUpID8gMSA6IDA7Ci0KLSAgICBj
b25zdCBpbnQgc2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogY2hpbGQgPSBt
X2NoaWxkcmVuW2ldKQotICAgICAgICAgICAgZGVzY2VuZGFudHNXaXRoQ29udGVudCArPSBjaGls
ZC0+Y291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRl
c2NlbmRhbnRzV2l0aENvbnRlbnQ7Ci19Ci0KLVRleHR1cmVNYXBwZXJOb2RlKiBUZXh0dXJlTWFw
cGVyTm9kZTo6dG9UZXh0dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAg
ICByZXR1cm4gbGF5ZXIgPyBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyTm9kZSo+KGxheWVyLT5w
bGF0Zm9ybUxheWVyKCkpIDogMDsKKyAgICByZXR1cm4gY291bnQ7CiB9CiAKLXZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OmNvbXB1dGVMYXllclR5cGUoKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
Y29tcHV0ZU92ZXJsYXBzSWZOZWVkZWQoKQogewotICAgIGNvbnN0IGJvb2wgc2VsZkhhc0NvbnRl
bnQgPSBtX3N0YXRlLmRyYXdzQ29udGVudCB8fCAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlw
ZSAhPSBIVE1MQ29udGVudFR5cGUpOwotICAgIGNvbnN0IGJvb2wgaGFzRGVzY2VuZGFudHNXaXRo
Q29udGVudCA9IG1fc3RhdGUuZGVzY2VuZGFudHNXaXRoQ29udGVudCAtIChzZWxmSGFzQ29udGVu
dCA/IDEgOiAwKTsKLSAgICBjb25zdCBib29sIGhhc1RyYW5zcGFyZW5jeSA9IG1fc3RhdGUub3Bh
Y2l0eSA8IDAuOTkgfHwgbV9zdGF0ZS5tYXNrTGF5ZXI7Ci0gICAgY29uc3QgYm9vbCBoYXNSZXBs
aWNhID0gbV9zdGF0ZS5yZXBsaWNhTGF5ZXI7CisjaWYgVEVYVFVSRV9NQVBQRVJfTUlOSU1BTF9D
T01QVVRBVElPTlMKKyAgICBpZiAoIW1fZGlydHlGbGFncy5vdmVybGFwcykKKyAgICAgICAgcmV0
dXJuOworI2VuZGlmCiAKLSAgICAvLyAgRGVmYXVsdExheWVyOiBkcmF3cyBpdHNlbGYgYW5kIGl0
cyBjaGlsZHJlbiBkaXJlY3RseSB0byB0aGUgY3VycmVudCBmcmFtZWJ1ZmZlci4KLSAgICAvLyAg
ICAgICAgICAgICAgICBhbnkgbGF5ZXIgdGhhdCBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIG90aGVy
IHJ1bGVzIGlzIGEgRGVmYXVsdExheWVyLgotICAgIG1fbGF5ZXJUeXBlID0gRGVmYXVsdExheWVy
OworICAgIG1fc3RhdGUubWlnaHRIYXZlT3ZlcmxhcHMgPSBjb3VudERlc2NlbmRhbnRzV2l0aENv
bnRlbnQoKSA+IDE7CiAKLSAgICAvLyAgUm9vdExheWVyOiB0aGUgdG9wIGxldmVsLiBEcmF3cyB0
byBhIGZyYW1lYnVmZmVyLCBhbmQgdGhlIHRhcmdldCB0ZXh0dXJlIGRyYXdzIGludG8gdGhlIHZp
ZXdwb3J0LgotICAgIC8vICAgICAgICAgICAgb25seSBvbmUgbGF5ZXIgaXMgdGhlIHJvb3QgbGF5
ZXIuCi0gICAgaWYgKCFtX3BhcmVudCAmJiAhbV9lZmZlY3RUYXJnZXQpIHsKLSAgICAgICAgbV9s
YXllclR5cGUgPSBSb290TGF5ZXI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisjaWYgVEVYVFVS
RV9NQVBQRVJfTUlOSU1BTF9DT01QVVRBVElPTlMKKyAgICBtX2RpcnR5RmxhZ3Mub3ZlcmxhcHMg
PSBmYWxzZTsKKyNlbmRpZgorfQogCi0gICAgLy8gQSBsYXllciB3aXRoIG5vIGNvbnRlbnRzIGlz
IGFsd2F5cyBhIGRlZmF1bHQgbGF5ZXIuCi0gICAgaWYgKCFtX3N0YXRlLmRlc2NlbmRhbnRzV2l0
aENvbnRlbnQpCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlUmVwbGljYVRyYW5zZm9y
bUlmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fc3RhdGUucmVwbGljYUxheWVyKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICAvLyAgQ2xpcExheWVyOiBjcmVhdGVzIGEgbmV3IGZyYW1lYnVmZmVyLCB0
aGUgc2l6ZSBvZiB0aGUgbGF5ZXIsIGFuZCB0aGVuIHBhaW50cyBpdCB0byB0aGUgZW5jbG9zaW5n
IEJpdG1hcFRleHR1cmUgd2l0aCB0aGUgbGF5ZXIncyB0cmFuc2Zvcm0vb3BhY2l0eS4KLSAgICAv
LyAgICAgICAgICAgICAgQSBjbGlwIGxheWVyIGlzIGEgbGF5ZXIgdGhhdCBtYXNrcyB0byBib3Vu
ZHMsIGRvZXNuJ3QgcHJlc2VydmUgM0QsIGhhcyBjaGlsZHJlbiwgYW5kIGhhcyBhIHRyYW5zcGFy
ZW5jeS9tYXNrIG9yIGEgbm9uLXJlY3Rhbmd1bGFyIHRyYW5zZm9ybS4KLSAgICBpZiAoaGFzRGVz
Y2VuZGFudHNXaXRoQ29udGVudCAmJiBtX3N0YXRlLm1hc2tMYXllcikgewotICAgICAgICBtX2xh
eWVyVHlwZSA9IENsaXBMYXllcjsKKyNpZiBURVhUVVJFX01BUFBFUl9NSU5JTUFMX0NPTVBVVEFU
SU9OUworICAgICBpZiAoIW1fZGlydHlGbGFncy5yZXBsaWNhVHJhbnNmb3JtKQogICAgICAgICBy
ZXR1cm47Ci0gICAgfQorI2VuZGlmCiAKLSAgICAvLyAgU2Npc3NvckxheWVyOiBkcmF3cyB0byB0
aGUgY3VycmVudCBmcmFtZWJ1ZmZlciwgYW5kIGFwcGxpZXMgYW4gZXh0cmEgc2Npc3NvciBiZWZv
cmUgZHJhd2luZyBpdHMgY2hpbGRyZW4uCi0gICAgLy8gICAgICAgICAgICAgICAgQSBzY2lzc29y
IGxheWVyIGlzIGEgbGF5ZXIgd2l0aCBjaGlsZHJlbiB0aGF0IG1hc2tzIHRvIGJvdW5kcywgaXMg
bm90IGEgdHJhbnNwYXJlbmN5IGxheWVyLCBhbmQgaGFzIGEgcmVjdGFuZ3VsYXIgY2xpcC4KLSAg
ICBpZiAobV9zdGF0ZS5tYXNrc1RvQm91bmRzICYmIGhhc0Rlc2NlbmRhbnRzV2l0aENvbnRlbnQp
IHsKLSAgICAgICAgaWYgKGhhc1RyYW5zcGFyZW5jeSB8fCAhbV9zdGF0ZS50cmFuc2Zvcm0uaXNJ
ZGVudGl0eU9yVHJhbnNsYXRpb24oKSB8fCBtX3BhcmVudC0+bV9zdGF0ZS5wcmVzZXJ2ZXMzRCkK
LSAgICAgICAgICAgIG1fbGF5ZXJUeXBlID0gQ2xpcExheWVyOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX2xheWVyVHlwZSA9IFNjaXNzb3JMYXllcjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICAgbV90cmFuc2Zvcm1zLnJlcGxpY2EgPQorICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeChtX3RyYW5zZm9ybXMudGFyZ2V0KQorICAgICAgICAgICAgLm11bHRpcGx5KG1fc3RhdGUu
cmVwbGljYUxheWVyLT5tX3RyYW5zZm9ybXMubG9jYWwpCisgICAgICAgICAgICAubXVsdGlwbHko
VHJhbnNmb3JtYXRpb25NYXRyaXgobV90cmFuc2Zvcm1zLnRhcmdldCkuaW52ZXJzZSgpKTsKIAot
ICAgIC8vICBUcmFuc3BhcmVuY3lMYXllcjogY3JlYXRlcyBhIG5ldyBmcmFtZWJ1ZmZlciBpZGV0
aWNhbCBpbiBzaXplIHRvIHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyLiBUaGVuIGRyYXdzIHRoZSBm
YidzIHRleHR1cmUgdG8gdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIgd2l0aCBpZGVudGl0eSB0cmFu
c2Zvcm0uCi0gICAgLy8gICAgICAgICAgICAgICAgICAgICBVc2VkIGZvciBsYXllcnMgd2l0aCBj
aGlsZHJlbiBhbmQgdHJhbnNwYXJlbmN5L21hc2sgdGhhdCBwcmVzZXJ2ZSAzRCBvciBkb24ndCBt
YXNrIHRvIGJvdW5kcy4KLSAgICBpZiAoKGhhc1JlcGxpY2EgJiYgaGFzRGVzY2VuZGFudHNXaXRo
Q29udGVudCkgfHwgKGhhc1JlcGxpY2EgJiYgaGFzVHJhbnNwYXJlbmN5KSB8fCAoaGFzVHJhbnNw
YXJlbmN5ICYmIG1fc3RhdGUuZGVzY2VuZGFudHNXaXRoQ29udGVudCA+IDEpKQotICAgICAgICBt
X2xheWVyVHlwZSA9IFRyYW5zcGFyZW5jeUxheWVyOworI2lmIFRFWFRVUkVfTUFQUEVSX01JTklN
QUxfQ09NUFVUQVRJT05TCisgICAgbV9kaXJ0eUZsYWdzLnJlcGxpY2FUcmFuc2Zvcm0gPSBmYWxz
ZTsKKyNlbmRpZgogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjppbml0aWFsaXplVGV4dHVy
ZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQordm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6Y29tcHV0ZUxvY2FsVHJhbnNmb3JtSWZOZWVkZWQoKQogewotICAgIGlmIChtX3RleHR1
cmUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3N1cmZhY2UgPSB0ZXh0dXJlTWFwcGVyLT5jcmVh
dGVUZXh0dXJlKCk7Ci0gICAgbV9yZXBsaWNhU3VyZmFjZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0
ZVRleHR1cmUoKTsKLSAgICBtX3RleHR1cmUgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJl
KCk7Ci0gICAgY2FjaGUoKS0+bWFyayhtX3RleHR1cmUuZ2V0KCkpOworI2lmIFRFWFRVUkVfTUFQ
UEVSX01JTklNQUxfQ09NUFVUQVRJT05TCisgICAgaWYgKCFtX2RpcnR5RmxhZ3MubG9jYWxUcmFu
c2Zvcm0pCisgICAgICAgcmV0dXJuOworI2VuZGlmCisKKyAgICBmbG9hdCBvcmlnaW5YID0gbV9z
dGF0ZS5hbmNob3JQb2ludC54KCkgKiBtX3NpemUud2lkdGgoKTsKKyAgICBmbG9hdCBvcmlnaW5Z
ID0gbV9zdGF0ZS5hbmNob3JQb2ludC55KCkgKiBtX3NpemUuaGVpZ2h0KCk7CisgICAgbV90cmFu
c2Zvcm1zLmxvY2FsID0KKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoKQorICAgICAgICAu
dHJhbnNsYXRlM2Qob3JpZ2luWCArIG1fc3RhdGUucG9zLngoKSwgb3JpZ2luWSArIG1fc3RhdGUu
cG9zLnkoKSwgbV9zdGF0ZS5hbmNob3JQb2ludC56KCkgKQorICAgICAgICAubXVsdGlwbHkobV90
cmFuc2Zvcm1zLmJhc2UpCisgICAgICAgIC50cmFuc2xhdGUzZCgtb3JpZ2luWCwgLW9yaWdpblks
IC1tX3N0YXRlLmFuY2hvclBvaW50LnooKSk7CisKKyNpZiBURVhUVVJFX01BUFBFUl9NSU5JTUFM
X0NPTVBVVEFUSU9OUworICAgIG1fZGlydHlGbGFncy5sb2NhbFRyYW5zZm9ybSA9IGZhbHNlOwor
ICAgIG1fZGlydHlGbGFncy50cmFuc2Zvcm0gPSB0cnVlOworI2VuZGlmCiB9CiAKLVRleHR1cmVN
YXBwZXJOb2RlOjpUZXh0dXJlTWFwcGVyTm9kZSgpCi0gICAgOiBtX2xheWVyVHlwZShEZWZhdWx0
TGF5ZXIpCi0gICAgLCBtX3N1cmZhY2UoMCkKLSAgICAsIG1fcGFyZW50KDApCi0gICAgLCBtX2Vm
ZmVjdFRhcmdldCgwKQotICAgICwgbV9wbGF0Zm9ybUNsaWVudCgwKQotICAgICwgbV9jYWNoZSgw
KQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6ZGlkQ2hhbmdlUGFyZW50VHJhbnNmb3JtKCkKIHsK
KyNpZiBURVhUVVJFX01BUFBFUl9NSU5JTUFMX0NPTVBVVEFUSU9OUworICAgIG1fZGlydHlGbGFn
cy50cmFuc2Zvcm0gPSB0cnVlOworI2VuZGlmCiB9CiAKLVRleHR1cmVNYXBwZXJOb2RlKiBUZXh0
dXJlTWFwcGVyTm9kZTo6cm9vdExheWVyKCkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmRpZENo
YW5nZVNpemUoKQogewotICAgIGlmIChtX2VmZmVjdFRhcmdldCkKLSAgICAgICAgcmV0dXJuIG1f
ZWZmZWN0VGFyZ2V0LT5yb290TGF5ZXIoKTsKLSAgICBpZiAobV9wYXJlbnQpCi0gICAgICAgIHJl
dHVybiBtX3BhcmVudC0+cm9vdExheWVyKCk7Ci0gICAgcmV0dXJuIHRoaXM7CisgICAgaW52YWxp
ZGF0ZUxvY2FsVHJhbnNmb3JtKCk7CisgICAgaW52YWxpZGF0ZVBlcnNwZWN0aXZlVHJhbnNmb3Jt
KCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmludmFsaWRhdGVUcmFuc2Zvcm0oKQor
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6ZGlkQ2hhbmdlVGFyZ2V0VHJhbnNmb3JtKCkKIHsKLSAg
ICBtX3RyYW5zZm9ybXMuZGlydHkgPSB0cnVlOwotICAgIGlmIChtX2xheWVyVHlwZSAhPSBDbGlw
TGF5ZXIpCi0gICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOwotICAgIGlmIChtX3N0YXRlLnJl
cGxpY2FMYXllcikKLSAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPmludmFsaWRhdGVUcmFu
c2Zvcm0oKTsKLSAgICBjb25zdCBpbnQgc2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChUZXh0dXJlTWFwcGVy
Tm9kZSogbGF5ZXIgPSBtX2NoaWxkcmVuW2ldKQotICAgICAgICAgICAgbGF5ZXItPmludmFsaWRh
dGVUcmFuc2Zvcm0oKTsKLSAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxk
cmVuLnNpemUoKTsgKytpKQorICAgICAgICBtX2NoaWxkcmVuW2ldLT5kaWRDaGFuZ2VQYXJlbnRU
cmFuc2Zvcm0oKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZUxvY2FsVHJh
bnNmb3JtKCkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmRpZENoYW5nZVBlcnNwZWN0aXZlKCkK
IHsKLSAgICBpZiAoIW1fdHJhbnNmb3Jtcy5sb2NhbERpcnR5KQotICAgICAgICByZXR1cm47Ci0g
ICAgY29uc3QgZmxvYXQgb3JpZ2luWCA9IG1fc3RhdGUuYW5jaG9yUG9pbnQueCgpICogbV9zaXpl
LndpZHRoKCk7Ci0gICAgY29uc3QgZmxvYXQgb3JpZ2luWSA9IG1fc3RhdGUuYW5jaG9yUG9pbnQu
eSgpICogbV9zaXplLmhlaWdodCgpOwotICAgIG1fdHJhbnNmb3Jtcy5sb2NhbCA9Ci0gICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkKLSAgICAgICAgLnRyYW5zbGF0ZTNkKG9yaWdpblggKyBt
X3N0YXRlLnBvcy54KCksIG9yaWdpblkgKyBtX3N0YXRlLnBvcy55KCksIG1fc3RhdGUuYW5jaG9y
UG9pbnQueigpKQotICAgICAgICAubXVsdGlwbHkobV9zdGF0ZS50cmFuc2Zvcm0pCi0gICAgICAg
IC50cmFuc2xhdGUzZCgtb3JpZ2luWCwgLW9yaWdpblksIC1tX3N0YXRlLmFuY2hvclBvaW50Lnoo
KSk7Ci0gICAgbV90cmFuc2Zvcm1zLmxvY2FsRGlydHkgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIG1fY2hpbGRyZW5b
aV0tPmRpZENoYW5nZVBhcmVudFRyYW5zZm9ybSgpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJO
b2RlOjpmbGF0dGVuVG8yRFNwYWNlSWZOZWNlc3NhcnkoKQorc3RhdGljIGNvbnN0IGZsb2F0IGdU
aWxlRGltZW5zaW9uID0gMTAyNC4wOworCitib29sIFRleHR1cmVNYXBwZXJOb2RlOjpuZWVkc1Rv
Q29tcHV0ZUJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RhdGUucHJlc2VydmVz
M0QpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAobV9zaXplLndpZHRoKCkgPiBnVGlsZURpbWVu
c2lvbiB8fCBtX3NpemUuaGVpZ2h0KCkgPiBnVGlsZURpbWVuc2lvbikKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgaWYgKCFtX3N0YXRlLm1hc2tzVG9Cb3VuZHMpCisgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMTMoMCk7Ci0gICAg
bV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0yMygwKTsKLSAgICBtX3RyYW5zZm9ybXMu
Zm9yRGVzY2VuZGFudHMuc2V0TTMxKDApOwotICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50
cy5zZXRNMzIoMCk7Ci0gICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0zMygxKTsK
LSAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTM0KDApOwotICAgIG1fdHJhbnNm
b3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNNDMoMCk7Ci19CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBpZiAobV9jaGlsZHJlbltpXS0+
bmVlZHNUb0NvbXB1dGVCb3VuZGluZ1JlY3QoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwog
Ci1JbnRTaXplIFRleHR1cmVNYXBwZXJOb2RlOjpuZWFyZXN0U3VyZmFjZVNpemUoKSBjb25zdAot
ewotICAgIGlmIChtX2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIgfHwgbV9sYXllclR5cGUgPT0gUm9v
dExheWVyKQotICAgICAgICByZXR1cm4gbV9zdXJmYWNlICYmICFtX3N1cmZhY2UtPnNpemUoKS5p
c0VtcHR5KCkgPyBtX3N1cmZhY2UtPnNpemUoKSA6IG1fc2l6ZTsKLSAgICByZXR1cm4gbV9wYXJl
bnQtPm5lYXJlc3RTdXJmYWNlU2l6ZSgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVJlcGxpY2FUcmFuc2Zvcm0oKQordm9pZCBUZXh0dXJl
TWFwcGVyTm9kZTo6Y29tcHV0ZUFsbFRyYW5zZm9ybXMoKQogewotICAgIGlmICghbV9zdGF0ZS5y
ZXBsaWNhTGF5ZXIpCisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgJiYgbV9zdGF0ZS5tYXNrc1Rv
Qm91bmRzKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX25lYXJlc3RTdXJmYWNlU2l6ZSA9IG5l
YXJlc3RTdXJmYWNlU2l6ZSgpOworICAgIGNvbXB1dGVMb2NhbFRyYW5zZm9ybUlmTmVlZGVkKCk7
CisgICAgY29tcHV0ZVJlcGxpY2FUcmFuc2Zvcm1JZk5lZWRlZCgpOworICAgIGNvbXB1dGVQZXJz
cGVjdGl2ZVRyYW5zZm9ybUlmTmVlZGVkKCk7CiAKLSAgICBpZiAobV9sYXllclR5cGUgIT0gVHJh
bnNwYXJlbmN5TGF5ZXIpIHsKLSAgICAgICAgbV90cmFuc2Zvcm1zLnJlcGxpY2EgPSBUcmFuc2Zv
cm1hdGlvbk1hdHJpeChtX3RyYW5zZm9ybXMudGFyZ2V0KS5tdWx0aXBseShtX3N0YXRlLnJlcGxp
Y2FMYXllci0+bV90cmFuc2Zvcm1zLmxvY2FsKTsKKyNpZiBURVhUVVJFX01BUFBFUl9NSU5JTUFM
X0NPTVBVVEFUSU9OUworICAgIGlmICghbV9kaXJ0eUZsYWdzLnRyYW5zZm9ybSkKKyAgICAgICAg
cmV0dXJuOworI2VuZGlmCisKKyAgICBtX3RyYW5zZm9ybXMudGFyZ2V0ID0gVHJhbnNmb3JtYXRp
b25NYXRyaXgobV9wYXJlbnQgPyBtX3BhcmVudC0+bV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRz
IDogVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkubXVsdGlwbHkobV90cmFuc2Zvcm1zLmxvY2FsKTsK
KworI2lmIFRFWFRVUkVfTUFQUEVSX01JTklNQUxfQ09NUFVUQVRJT05TCisgICAgaWYgKG1fZWZm
ZWN0VGFyZ2V0KSB7CisgICAgICAgIG1fZWZmZWN0VGFyZ2V0LT5tX2RpcnR5RmxhZ3MucmVwbGlj
YVRyYW5zZm9ybSA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CisjZW5kaWYKIAotICAg
IGNvbnN0IGZsb2F0IG9yaWdpblggPSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm00MSgpOwotICAgIGNv
bnN0IGZsb2F0IG9yaWdpblkgPSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm00MigpOwotICAgIG1fdHJh
bnNmb3Jtcy5yZXBsaWNhID0KLSAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCkKLSAg
ICAgICAgICAgICAgICAudHJhbnNsYXRlKG9yaWdpblgsIG9yaWdpblkpCi0gICAgICAgICAgICAg
ICAgLm11bHRpcGx5KG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3RyYW5zZm9ybXMubG9jYWwpCi0g
ICAgICAgICAgICAgICAgLnRyYW5zbGF0ZSgtb3JpZ2luWCwgLW9yaWdpblkpOwotfQorICAgIG1f
dHJhbnNmb3Jtcy50YXJnZXRCb3VuZGluZ1JlY3QgPSBGbG9hdFJlY3QobV90cmFuc2Zvcm1zLnRh
cmdldC5tYXBSZWN0KHRhcmdldFJlY3QoKSkpOwogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpj
b21wdXRlVHJhbnNmb3JtYXRpb25zKCkKLXsKLSAgICBpZiAoIW1fdHJhbnNmb3Jtcy5kaXJ0eSkK
KyAgICBtX3N0YXRlLnZpc2libGUgPSBtX3N0YXRlLmJhY2tmYWNlVmlzaWJpbGl0eSB8fCBtX3Ry
YW5zZm9ybXMudGFyZ2V0LmludmVyc2UoKS5tMzMoKSA+PSAwOworICAgIGlmICghbV9zdGF0ZS52
aXNpYmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3RyYW5zZm9ybXMuZGlydHkgPSBmYWxz
ZTsKLSAgICBpZiAoKG1fc2l6ZS5pc0VtcHR5KCkgJiYgbV9zdGF0ZS5tYXNrc1RvQm91bmRzKSkK
KyAgICAvLyBUaGlzIHRyYW5zZm9ybSBpcyBvbmx5IGFwcGxpZWQgaWYgdXNpbmcgYSB0d28tcGFz
cyBmb3IgdGhlIHJlcGxpY2EsIGJlY2F1c2UgdGhlIHRyYW5zZm9ybSBuZWVkcyB0byBiZSBhZGp1
c3RlZCB0byB0aGUgc2l6ZSBvZiB0aGUgaW50ZXJtZWRpYXRlIHN1cmZhY2UsIGluc3RlYWYgb2Yg
dGhlIHNpemUgb2YgdGhlIGNvbnRlbnQgbGF5ZXIuCisgICAgaWYgKG1fcGFyZW50ICYmIG1fcGFy
ZW50LT5tX3N0YXRlLnByZXNlcnZlczNEKQorICAgICAgICBtX3RyYW5zZm9ybXMuY2VudGVyWiA9
IG1fdHJhbnNmb3Jtcy50YXJnZXQubWFwUG9pbnQoRmxvYXRQb2ludDNEKG1fc2l6ZS53aWR0aCgp
IC8gMiwgbV9zaXplLmhlaWdodCgpIC8gMiwgMCkpLnooKTsKKworICAgIGlmICghbV9jaGlsZHJl
bi5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRleHR1cmVNYXBwZXJOb2RlKiBwYXJl
bnQgPSBtX3BhcmVudDsKLSAgICBjb21wdXRlTG9jYWxUcmFuc2Zvcm0oKTsKKyAgICBtX3RyYW5z
Zm9ybXMuZm9yRGVzY2VuZGFudHMgPSBtX3RyYW5zZm9ybXMudGFyZ2V0OworCisgICAgaWYgKCFt
X3N0YXRlLnByZXNlcnZlczNEKSB7CisgICAgICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50
cyA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KAorICAgICAgICAgICAgICAgICAgICBtX3RyYW5zZm9y
bXMuZm9yRGVzY2VuZGFudHMubTExKCksIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5tMTIo
KSwgMCwgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLm0xNCgpLAorICAgICAgICAgICAgICAg
ICAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMubTIxKCksIG1fdHJhbnNmb3Jtcy5mb3JE
ZXNjZW5kYW50cy5tMjIoKSwgMCwgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLm0yNCgpLAor
ICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLAorICAgICAgICAgICAgICAgICAgICBtX3Ry
YW5zZm9ybXMuZm9yRGVzY2VuZGFudHMubTQxKCksIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50
cy5tNDIoKSwgMCwgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLm00NCgpKTsKKyAgICB9CiAK
LSAgICBtX3RyYW5zZm9ybXMudGFyZ2V0ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgocGFyZW50ID8g
cGFyZW50LT5tX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMgOiBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpKS5tdWx0aXBseShtX3RyYW5zZm9ybXMubG9jYWwpOwotICAgIG1fdHJhbnNmb3Jtcy5mb3JE
ZXNjZW5kYW50cyA9IChtX2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIgPyBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpIDogbV90cmFuc2Zvcm1zLnRhcmdldCk7CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2Nl
bmRhbnRzLm11bHRpcGx5KG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZSk7CiAKLSAgICBpZiAobV9l
ZmZlY3RUYXJnZXQpCisjaWYgVEVYVFVSRV9NQVBQRVJfTUlOSU1BTF9DT01QVVRBVElPTlMKKyAg
ICBtX2RpcnR5RmxhZ3MudmlzaWJsZVJlY3QgPSB0cnVlOworICAgIG1fZGlydHlGbGFncy50cmFu
c2Zvcm0gPSBmYWxzZTsKKyAgICBtX2RpcnR5RmxhZ3MucmVwbGljYVRyYW5zZm9ybSA9IHRydWU7
CisjZW5kaWYKKworICAgIGRpZENoYW5nZVRhcmdldFRyYW5zZm9ybSgpOworfQorCit2b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlQm91bmRpbmdSZWN0RnJvbVJvb3RJZk5lZWRlZCgpCit7
CisgICAgaWYgKCFuZWVkc1RvQ29tcHV0ZUJvdW5kaW5nUmVjdCgpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKCFtX3BhcmVudCkgeworICAgICAgICBtX3RyYW5zZm9ybXMuYm91bmRpbmdSZWN0
RnJvbVJvb3QgPSBtX3RyYW5zZm9ybXMuYm91bmRpbmdSZWN0RnJvbVJvb3RGb3JEZXNjZW5kYW50
cyA9IEludFJlY3QoMCwgMCwgLTEsIC0xKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAg
IG1fdHJhbnNmb3Jtcy50YXJnZXRCb3VuZGluZ1JlY3QgPSBJbnRSZWN0KG1fdHJhbnNmb3Jtcy50
YXJnZXQubWFwUmVjdChlbnRpcmVSZWN0KCkpKTsKLSAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5
ZXIpCi0gICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5jb21wdXRlVHJhbnNmb3JtYXRpb25z
KCk7CisgICAgY29uc3QgRmxvYXRSZWN0IHRhcmdldFJlY3RJblJvb3RDb29yZGluYXRlcyA9IG1f
dHJhbnNmb3Jtcy50YXJnZXQubWFwUmVjdCh0YXJnZXRSZWN0KCkpOwogCi0gICAgZmxhdHRlblRv
MkRTcGFjZUlmTmVjZXNzYXJ5KCk7CisgICAgY29uc3QgRmxvYXRSZWN0IHBhcmVudEJvdW5kaW5n
UmVjdCA9IG1fcGFyZW50LT5tX3RyYW5zZm9ybXMuYm91bmRpbmdSZWN0RnJvbVJvb3RGb3JEZXNj
ZW5kYW50czsKKyAgICBpZiAocGFyZW50Qm91bmRpbmdSZWN0LndpZHRoKCkgPCAwKQorICAgICAg
ICBtX3RyYW5zZm9ybXMuYm91bmRpbmdSZWN0RnJvbVJvb3QgPSB0YXJnZXRSZWN0SW5Sb290Q29v
cmRpbmF0ZXM7CisgICAgZWxzZSB7CisgICAgICAgIG1fdHJhbnNmb3Jtcy5ib3VuZGluZ1JlY3RG
cm9tUm9vdEZvckRlc2NlbmRhbnRzID0gbV90cmFuc2Zvcm1zLmJvdW5kaW5nUmVjdEZyb21Sb290
ID0gcGFyZW50Qm91bmRpbmdSZWN0OworICAgICAgICBtX3RyYW5zZm9ybXMuYm91bmRpbmdSZWN0
RnJvbVJvb3QuaW50ZXJzZWN0KHRhcmdldFJlY3RJblJvb3RDb29yZGluYXRlcyk7CisgICAgfQor
ICAgIGlmIChtX3N0YXRlLm1hc2tzVG9Cb3VuZHMpCisgICAgICAgIG1fdHJhbnNmb3Jtcy5ib3Vu
ZGluZ1JlY3RGcm9tUm9vdEZvckRlc2NlbmRhbnRzLmludGVyc2VjdChtX3RyYW5zZm9ybXMuYm91
bmRpbmdSZWN0RnJvbVJvb3QpOworfQogCi0gICAgaWYgKCFtX3N0YXRlLmJhY2tmYWNlVmlzaWJp
bGl0eSAmJiBtX3RyYW5zZm9ybXMudGFyZ2V0LmludmVyc2UoKS5tMzMoKSA8IDApIHsKLSAgICAg
ICAgbV9zdGF0ZS52aXNpYmxlID0gZmFsc2U7Cit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21w
dXRlVGlsZXMoKQoreworICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhU
TUxDb250ZW50VHlwZSAmJiAhbV9zdGF0ZS5kcmF3c0NvbnRlbnQpIHsKKyAgICAgICAgbV90aWxl
cy5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fc3RhdGUudmlzaWJsZSA9
IHRydWU7CisgICAgVmVjdG9yPEZsb2F0UmVjdD4gdGlsZXNUb0FkZDsKKyAgICBWZWN0b3I8aW50
PiB0aWxlc1RvUmVtb3ZlOworICAgIGNvbnN0IGludCBUaWxlRXJhc2VUaHJlc2hvbGQgPSA2Owor
ICAgIEZsb2F0U2l6ZSBzaXplID0gY29udGVudFNpemUoKTsKKyAgICBGbG9hdFJlY3QgY29udGVu
dFJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpICogbV9zdGF0ZS5jb250ZW50U2NhbGUsIHNpemUuaGVp
Z2h0KCkgKiBtX3N0YXRlLmNvbnRlbnRTY2FsZSk7CisKKyAgICBmb3IgKGZsb2F0IHkgPSAwOyB5
IDwgY29udGVudFJlY3QuaGVpZ2h0KCk7IHkgKz0gZ1RpbGVEaW1lbnNpb24pIHsKKyAgICAgICAg
Zm9yIChmbG9hdCB4ID0gMDsgeCA8IGNvbnRlbnRSZWN0LndpZHRoKCk7IHggKz0gZ1RpbGVEaW1l
bnNpb24pIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCB0aWxlUmVjdCh4LCB5LCBnVGlsZURpbWVu
c2lvbiwgZ1RpbGVEaW1lbnNpb24pOworICAgICAgICAgICAgdGlsZVJlY3QuaW50ZXJzZWN0KGNv
bnRlbnRSZWN0KTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCB0aWxlUmVjdEluUm9vdENvb3JkaW5h
dGVzID0gdGlsZVJlY3Q7CisgICAgICAgICAgICB0aWxlUmVjdEluUm9vdENvb3JkaW5hdGVzLnNj
YWxlKDEuMCAvIG1fc3RhdGUuY29udGVudFNjYWxlKTsKKyAgICAgICAgICAgIHRpbGVSZWN0SW5S
b290Q29vcmRpbmF0ZXMgPSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFJlY3QodGlsZVJlY3RJblJv
b3RDb29yZGluYXRlcyk7CisgICAgICAgICAgICBzdGF0aWMgYm9vbCBzRGlzY2FyZEhpZGRlblRp
bGVzID0gZmFsc2U7CisgICAgICAgICAgICAvLyBGSVhNRTogZGlzY2FyZCBoaWRkZW4gdGlsZXMu
CisgICAgICAgICAgICBpZiAoIXNEaXNjYXJkSGlkZGVuVGlsZXMgfHwgIW5lZWRzVG9Db21wdXRl
Qm91bmRpbmdSZWN0KCkgfHwgdGlsZVJlY3RJblJvb3RDb29yZGluYXRlcy5pbnRlcnNlY3RzKG1f
c3RhdGUudmlzaWJsZVJlY3QpKQorICAgICAgICAgICAgICAgIHRpbGVzVG9BZGQuYXBwZW5kKHRp
bGVSZWN0KTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5t
X3N0YXRlLnByZXNlcnZlczNEKQotICAgICAgICBtX3RyYW5zZm9ybXMuY2VudGVyWiA9IG1fdHJh
bnNmb3Jtcy50YXJnZXQubWFwUG9pbnQoRmxvYXRQb2ludDNEKG1fc2l6ZS53aWR0aCgpIC8gMiwg
bV9zaXplLmhlaWdodCgpIC8gMiwgMCkpLnooKTsKKyAgICBmb3IgKGludCBpID0gbV90aWxlcy5z
aXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBjb25zdCBGbG9hdFJlY3Qgb2xkVGls
ZSA9IG1fdGlsZXNbaV0ucmVjdDsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogCi0gICAg
aWYgKCFtX2NoaWxkcmVuLnNpemUoKSkKKyAgICAgICAgZm9yIChpbnQgaiA9IHRpbGVzVG9BZGQu
c2l6ZSgpIC0gMTsgaiA+PSAwOyAtLWopIHsKKyAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCBu
ZXdUaWxlID0gdGlsZXNUb0FkZFtqXTsKKyAgICAgICAgICAgIGlmIChvbGRUaWxlICE9IG5ld1Rp
bGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1
ZTsKKyAgICAgICAgICAgIHRpbGVzVG9BZGQucmVtb3ZlKGopOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgdGlsZXNUb1Jl
bW92ZS5hcHBlbmQoaSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxl
c1RvQWRkLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghdGlsZXNUb1JlbW92ZS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIFRpbGUmIHRpbGUgPSBtX3RpbGVzW3RpbGVzVG9SZW1vdmVbMF1d
OworICAgICAgICAgICAgdGlsZXNUb1JlbW92ZS5yZW1vdmUoMCk7CisgICAgICAgICAgICB0aWxl
LnJlY3QgPSB0aWxlc1RvQWRkW2ldOworICAgICAgICAgICAgdGlsZS5uZWVkc1Jlc2V0ID0gdHJ1
ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgVGlsZSB0aWxl
OworICAgICAgICB0aWxlLnJlY3QgPSB0aWxlc1RvQWRkW2ldOworICAgICAgICB0aWxlLm5lZWRz
UmVzZXQgPSB0cnVlOworICAgICAgICBtX3RpbGVzLmFwcGVuZCh0aWxlKTsKKyAgICB9CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVzVG9SZW1vdmUuc2l6ZSgpICYmIG1fdGlsZXMu
c2l6ZSgpID4gVGlsZUVyYXNlVGhyZXNob2xkOyArK2kpCisgICAgICAgIG1fdGlsZXMucmVtb3Zl
KHRpbGVzVG9SZW1vdmVbaV0pOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRl
VmlzaWJsZVJlY3RJZk5lZWRlZCgpCit7CisgICAgaWYgKCFuZWVkc1RvQ29tcHV0ZUJvdW5kaW5n
UmVjdCgpKQogICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0IHJvb3RWaXNpYmxlUmVjdDsK
KyAgICBpZiAoIW1fcGFyZW50KQorICAgICAgICByb290VmlzaWJsZVJlY3QgPSBtX3N0YXRlLnJv
b3RWaXNpYmxlUmVjdDsKKyAgICBlbHNlIGlmIChtX3BhcmVudCkKKyAgICAgICAgcm9vdFZpc2li
bGVSZWN0ID0gbV9wYXJlbnQtPm1fc3RhdGUucm9vdFZpc2libGVSZWN0OwogCi0gICAgaWYgKG1f
c3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQorI2lmIFRFWFRVUkVfTUFQUEVS
X01JTklNQUxfQ09NUFVUQVRJT05TCisgICAgaWYgKCFtX2RpcnR5RmxhZ3MudmlzaWJsZVJlY3Qg
JiYgbV9zdGF0ZS5yb290VmlzaWJsZVJlY3QgPT0gcm9vdFZpc2libGVSZWN0KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBjb25zdCBGbG9hdFBvaW50IGNlbnRlclBvaW50ID0gRmxvYXRQb2ludCht
X3NpemUud2lkdGgoKSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIpOwotICAgIGlmIChtX3RyYW5z
Zm9ybXMucGVyc3BlY3RpdmVEaXJ0eSkKLSAgICAgICAgbV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZl
ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKQotICAgICAgICAgICAgLnRyYW5zbGF0ZShjZW50ZXJQ
b2ludC54KCksIGNlbnRlclBvaW50LnkoKSkKLSAgICAgICAgICAgIC5tdWx0aXBseShtX3N0YXRl
LmNoaWxkcmVuVHJhbnNmb3JtKQotICAgICAgICAgICAgLnRyYW5zbGF0ZSgtY2VudGVyUG9pbnQu
eCgpLCAtY2VudGVyUG9pbnQueSgpKTsKLSAgICBtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmVEaXJ0
eSA9IGZhbHNlOwotICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5tdWx0aXBseShtX3Ry
YW5zZm9ybXMucGVyc3BlY3RpdmUpOworICAgIG1fZGlydHlGbGFncy52aXNpYmxlUmVjdCA9IGZh
bHNlOworI2VuZGlmCisKKyAgICBtX3N0YXRlLnJvb3RWaXNpYmxlUmVjdCA9IHJvb3RWaXNpYmxl
UmVjdDsKKyAgICBtX3N0YXRlLnZpc2libGVSZWN0ID0gbV9zdGF0ZS5yb290VmlzaWJsZVJlY3Q7
CisgICAgbV9zdGF0ZS52aXNpYmxlUmVjdC5pbnRlcnNlY3QobV90cmFuc2Zvcm1zLmJvdW5kaW5n
UmVjdEZyb21Sb290KTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6dXBsb2FkVGV4dHVy
ZUZyb21Db250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEludFJlY3Qm
IHZpc2libGVSZWN0LCBHcmFwaGljc0xheWVyKiBsYXllcikKK3ZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OnJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgR3JhcGhpY3NM
YXllciogbGF5ZXIpCiB7Ci0gICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIWxheWVyKSB7Ci0g
ICAgICAgIG1fdGV4dHVyZS0+ZGVzdHJveSgpOworICAgIGlmIChtX3NpemUuaXNFbXB0eSgpIHx8
ICFsYXllciB8fCAoIW1fc3RhdGUuZHJhd3NDb250ZW50ICYmIG1fY3VycmVudENvbnRlbnQuY29u
dGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKSkgeworICAgICAgICBtX3RpbGVzLmNsZWFyKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250
ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlKSB7Ci0gICAgICAgIGlmIChtX2N1cnJl
bnRDb250ZW50LmltYWdlKQotICAgICAgICAgICAgbV90ZXh0dXJlLT5zZXRDb250ZW50c1RvSW1h
Z2UobV9jdXJyZW50Q29udGVudC5pbWFnZS5nZXQoKSk7CisgICAgaWYgKCF0ZXh0dXJlTWFwcGVy
KQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29u
dGVudFR5cGUgPT0gTWVkaWFDb250ZW50VHlwZSkgewotICAgICAgICBpZiAoIW1fY3VycmVudENv
bnRlbnQubWVkaWEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fdGV4dHVyZS0+cmVz
ZXQobV9zaXplLCB0cnVlKTsKLSAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRm
b3JtQ29udGV4dCA9IG1fdGV4dHVyZS0+YmVnaW5QYWludE1lZGlhKCk7Ci0gICAgICAgIEdyYXBo
aWNzQ29udGV4dCBjb250ZXh0KHBsYXRmb3JtQ29udGV4dCk7Ci0gICAgICAgIG1fY3VycmVudENv
bnRlbnQubWVkaWEtPnBhaW50KCZjb250ZXh0KTsKLSAgICAgICAgbV90ZXh0dXJlLT5lbmRQYWlu
dCgpOworICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IE1lZGlhQ29udGVu
dFR5cGUpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBjb25zdCBib29sIG5lZWRzUmVz
ZXQgPSAobV90ZXh0dXJlLT5jb250ZW50U2l6ZSgpICE9IG1fc2l6ZSkgfHwgIW1fdGV4dHVyZS0+
aXNWYWxpZCgpOwotICAgIGlmICgobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSAhPSBIVE1M
Q29udGVudFR5cGUpCi0gICAgICAgIHx8ICghbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkg
JiYgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0LmlzRW1wdHkoKSAmJiAhbmVlZHNS
ZXNldCkpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBGSVhNRTogQWRkIGRpcmVjdGx5IGNvbXBv
c2l0ZWQgaW1hZ2VzLgorICAgIEZsb2F0UmVjdCBkaXJ0eVJlY3QgPSBtX2N1cnJlbnRDb250ZW50
Lm5lZWRzRGlzcGxheSA/IGVudGlyZVJlY3QoKSA6IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNw
bGF5UmVjdDsKKyAgICBkaXJ0eVJlY3Quc2NhbGUobV9zdGF0ZS5jb250ZW50U2NhbGUpOworCisg
ICAgZm9yIChzaXplX3QgdGlsZUluZGV4ID0gMDsgdGlsZUluZGV4IDwgbV90aWxlcy5zaXplKCk7
ICsrdGlsZUluZGV4KSB7CisgICAgICAgIFRpbGUmIHRpbGUgPSBtX3RpbGVzW3RpbGVJbmRleF07
CisgICAgICAgIEZsb2F0UmVjdCByZWN0ID0gZGlydHlSZWN0OworICAgICAgICBpZiAoIXRpbGUu
dGV4dHVyZSkKKyAgICAgICAgICAgIHRpbGUudGV4dHVyZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0
ZVRleHR1cmUoKTsKKyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+JiB0ZXh0dXJlID0gdGls
ZS50ZXh0dXJlOworICAgICAgICBJbnRTaXplIHRpbGVTaXplID0gZW5jbG9zaW5nSW50UmVjdCh0
aWxlLnJlY3QpLnNpemUoKTsKKworICAgICAgICBpZiAodGlsZS5uZWVkc1Jlc2V0IHx8IHRleHR1
cmUtPmNvbnRlbnRTaXplKCkgIT0gdGlsZVNpemUgfHwgIXRleHR1cmUtPmlzVmFsaWQoKSkgewor
ICAgICAgICAgICAgdGlsZS5uZWVkc1Jlc2V0ID0gZmFsc2U7CisgICAgICAgICAgICB0ZXh0dXJl
LT5yZXNldCh0aWxlU2l6ZSwgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJ
bWFnZUNvbnRlbnRUeXBlID8gZmFsc2UgOiBtX3N0YXRlLmNvbnRlbnRzT3BhcXVlKTsKKyAgICAg
ICAgICAgIHJlY3QgPSB0aWxlLnJlY3Q7CisgICAgICAgIH0KIAotICAgIEludFJlY3QgZGlydHlS
ZWN0ID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLSAg
ICBpZiAoIW5lZWRzUmVzZXQgJiYgIW1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5KQotICAg
ICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0KG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVj
dCk7CisgICAgICAgIEludFJlY3QgY29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRpbGUu
cmVjdCk7CisgICAgICAgIGNvbnRlbnRSZWN0LmludGVyc2VjdChlbmNsb3NpbmdJbnRSZWN0KHJl
Y3QpKTsKKyAgICAgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgaWYgKG5lZWRzUmVzZXQpCi0gICAgICAgIG1fdGV4dHVyZS0+cmVzZXQo
bV9zaXplLCBtX3N0YXRlLmNvbnRlbnRzT3BhcXVlKTsKKyAgICAgICAgRmxvYXRSZWN0IGNvbnRl
bnRSZWN0SW5UaWxlQ29vcmRpbmF0ZXMgPSBjb250ZW50UmVjdDsKKyAgICAgICAgRmxvYXRQb2lu
dCBvZmZzZXQoLXRpbGUucmVjdC54KCksIC10aWxlLnJlY3QueSgpKTsKKyAgICAgICAgY29udGVu
dFJlY3RJblRpbGVDb29yZGluYXRlcy5tb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOwogCi0g
ICAgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChtX3RleHR1cmUtPmJlZ2luUGFp
bnQoZGlydHlSZWN0KSk7Ci0gICAgICAgIGlmICh0ZXh0dXJlTWFwcGVyKSB7CisgICAgICAgIHsK
KyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHRleHR1cmUtPmJlZ2luUGFpbnQo
ZW5jbG9zaW5nSW50UmVjdChjb250ZW50UmVjdEluVGlsZUNvb3JkaW5hdGVzKSkpOwogICAgICAg
ICAgICAgY29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KHRleHR1cmVNYXBwZXIt
PmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAgICAgICAgICBjb250ZXh0LnNldFRl
eHREcmF3aW5nTW9kZSh0ZXh0dXJlTWFwcGVyLT50ZXh0RHJhd2luZ01vZGUoKSk7CisgICAgICAg
ICAgICBjb250ZXh0LnRyYW5zbGF0ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKKyAgICAgICAg
ICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKG1fc3RhdGUuY29udGVudFNjYWxlLCBtX3N0YXRl
LmNvbnRlbnRTY2FsZSkpOworICAgICAgICAgICAgRmxvYXRSZWN0IHNjYWxlZENvbnRlbnRSZWN0
KGNvbnRlbnRSZWN0KTsKKyAgICAgICAgICAgIHNjYWxlZENvbnRlbnRSZWN0LnNjYWxlKDEuMCAv
IG1fc3RhdGUuY29udGVudFNjYWxlKTsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRDb250ZW50
LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUpCisgICAgICAgICAgICAgICAg
Y29udGV4dC5kcmF3SW1hZ2UobV9jdXJyZW50Q29udGVudC5pbWFnZS5nZXQoKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgSW50UG9pbnQoMCwgMCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGxheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBlbmNsb3Np
bmdJbnRSZWN0KHNjYWxlZENvbnRlbnRSZWN0KSk7CisgICAgICAgICAgICB0ZXh0dXJlLT5lbmRQ
YWludCgpOwogICAgICAgICB9Ci0gICAgICAgIGxheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250
ZW50cyhjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAgIH0KLSAgICBtX3RleHR1cmUtPmVuZFBhaW50
KCk7CisKICAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA9IGZhbHNlOworICAgIG1f
Y3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCA9IEludFJlY3QoKTsKIH0KIAotCi12b2lk
IFRleHR1cmVNYXBwZXJOb2RlOjpwYWludChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBj
b25zdCBUZXh0dXJlTWFwcGVyQ29udGVudExheWVyOjpQYWludE9wdGlvbnMmIG9wdGlvbnMpCit2
b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludCgpCiB7Ci0gICAgQVNTRVJUKG1fbGF5ZXJUeXBl
ID09IFJvb3RMYXllcik7CiAgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFRleG1hcFBhaW50T3B0aW9ucyBvcHQ7Ci0gICAgb3B0Lm9wYWNpdHkgPSAxOwot
ICAgIG9wdC5yb290TGF5ZXIgPSB0aGlzOwotICAgIG9wdC5zY2lzc29yUmVjdCA9IG9wdGlvbnMu
dGFyZ2V0UmVjdDsKLSAgICBvcHQudmlzaWJsZVJlY3QgPSBvcHRpb25zLnZpc2libGVSZWN0Owot
ICAgIG9wdC50ZXh0dXJlTWFwcGVyID0gdGV4dHVyZU1hcHBlcjsKLSAgICBvcHQuc3VyZmFjZSA9
IDA7Ci0gICAgb3B0LmNhY2hlID0gbV9jYWNoZTsKKyAgICBpZiAoIW1fc3VyZmFjZU1hbmFnZXIp
CisgICAgICAgIG1fc3VyZmFjZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hcHBlclN1cmZhY2VNYW5h
Z2VyOworICAgIG1fc3VyZmFjZU1hbmFnZXItPnRleHR1cmVNYXBwZXIgPSBtX3RleHR1cmVNYXBw
ZXI7CisgICAgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyBvcHQ7CisgICAgb3B0LnN1cmZhY2VN
YW5hZ2VyID0gbV9zdXJmYWNlTWFuYWdlcjsKKyAgICBvcHQudGV4dHVyZU1hcHBlciA9IG1fdGV4
dHVyZU1hcHBlcjsKKyAgICBvcHQudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7CiAgICAg
cGFpbnRSZWN1cnNpdmUob3B0KTsKKyAgICBtX3N1cmZhY2VNYW5hZ2VyLT5wdXJnZVRleHR1cmVz
KCk7Cit9CiAKLSAgICBpZiAodGV4dHVyZU1hcHBlci0+YWxsb3dTdXJmYWNlRm9yUm9vdCgpIHx8
IG1fc3RhdGUuaGFzU3VyZmFjZURlc2NlbmRhbnRzKSB7Ci0gICAgICAgIHRleHR1cmVNYXBwZXIt
PmJpbmRTdXJmYWNlKDApOwotICAgICAgICB0ZXh0dXJlTWFwcGVyLT5wYWludFRvVGFyZ2V0KCpt
X3N1cmZhY2UuZ2V0KCksIG9wdGlvbnMudmlld3BvcnRTaXplLCBvcHRpb25zLnRyYW5zZm9ybSwg
b3B0aW9ucy5vcGFjaXR5ICogbV9zdGF0ZS5vcGFjaXR5LCBvcHRpb25zLnRhcmdldFJlY3QpOwot
ICAgIH0KLSAgICBtX2NhY2hlLT5wdXJnZSgpOworRmxvYXRSZWN0IFRleHR1cmVNYXBwZXJOb2Rl
Ojp0YXJnZXRSZWN0Rm9yVGlsZVJlY3QoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0KSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFJlY3QoCisg
ICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCkgKyAodGlsZVJlY3QueCgpIC0gdGFyZ2V0UmVj
dC54KCkpIC8gbV9zdGF0ZS5jb250ZW50U2NhbGUsCisgICAgICAgICAgICAgICAgdGFyZ2V0UmVj
dC55KCkgKyAodGlsZVJlY3QueSgpIC0gdGFyZ2V0UmVjdC55KCkpIC8gbV9zdGF0ZS5jb250ZW50
U2NhbGUsCisgICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSAvIG1fc3RhdGUuY29udGVu
dFNjYWxlLAorICAgICAgICAgICAgICAgIHRpbGVSZWN0LmhlaWdodCgpIC8gbV9zdGF0ZS5jb250
ZW50U2NhbGUpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFNlbGYoY29uc3Qg
VGV4bWFwUGFpbnRPcHRpb25zJiBvcHRpb25zKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFp
bnRTZWxmKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAg
aWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgKCFtX3N0YXRlLmRyYXdzQ29udGVudCAmJiBtX2N1cnJl
bnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSkpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtYXNrVGV4dHVyZTsKICAgICBSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gcmVwbGljYU1hc2tUZXh0dXJlOwotICAgIG1fdGV4dHVyZS0+dW5wYWNr
KCk7CiAKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFza1RleHR1cmUgPSBtX3N0YXRlLm1h
c2tMYXllciA/IG1fc3RhdGUubWFza0xheWVyLT5tX3RleHR1cmUgOiAwOworICAgIGlmIChtX3N0
YXRlLm1hc2tMYXllcikKKyAgICAgICAgbWFza1RleHR1cmUgPSBtX3N0YXRlLm1hc2tMYXllci0+
dGV4dHVyZSgpOwogICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiBtX3N0YXRlLnJlcGxp
Y2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXIpCi0gICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZSA9
IG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllci0+bV90ZXh0dXJlOwotCi0g
ICAgaWYgKG1hc2tUZXh0dXJlKQotICAgICAgICBtYXNrVGV4dHVyZS0+dW5wYWNrKCk7CisgICAg
ICAgIHJlcGxpY2FNYXNrVGV4dHVyZSA9IG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm1h
c2tMYXllci0+dGV4dHVyZSgpOwogCi0gICAgaWYgKHJlcGxpY2FNYXNrVGV4dHVyZSkKLSAgICAg
ICAgcmVwbGljYU1hc2tUZXh0dXJlLT51bnBhY2soKTsKKyAgICBUZXh0dXJlTWFwcGVyU3VyZmFj
ZU1hbmFnZXI6OlRleHR1cmVHdWFyZCB1c2VNYXNrVGV4dHVyZShtYXNrVGV4dHVyZS5nZXQoKSwg
b3B0aW9ucy5zdXJmYWNlTWFuYWdlcik7CisgICAgVGV4dHVyZU1hcHBlclN1cmZhY2VNYW5hZ2Vy
OjpUZXh0dXJlR3VhcmQgdXNlUmVwbGljYU1hc2tUZXh0dXJlKHJlcGxpY2FNYXNrVGV4dHVyZS5n
ZXQoKSwgb3B0aW9ucy5zdXJmYWNlTWFuYWdlcik7CiAKICAgICBjb25zdCBmbG9hdCBvcGFjaXR5
ID0gb3B0aW9ucy5pc1N1cmZhY2UgPyAxIDogb3B0aW9ucy5vcGFjaXR5OwogCi0gICAgaWYgKG1f
c3RhdGUucmVwbGljYUxheWVyICYmICFvcHRpb25zLmlzU3VyZmFjZSkKLSAgICAgICAgb3B0aW9u
cy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqbV90ZXh0dXJlLmdldCgpLCByZXBsaWNhUmVj
dCgpLCBtX3RyYW5zZm9ybXMucmVwbGljYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvcGFj
aXR5ICogbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUub3BhY2l0eSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICByZXBsaWNhTWFza1RleHR1cmUgPyByZXBsaWNhTWFza1RleHR1cmUuZ2V0
KCkgOiBtYXNrVGV4dHVyZS5nZXQoKSk7CisgICAgY29uc3QgRmxvYXRSZWN0IHRhcmdldFJlY3Qg
PSB0aGlzLT50YXJnZXRSZWN0KCk7CisKKyAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50
VHlwZSA9PSBNZWRpYUNvbnRlbnRUeXBlICYmIG1fY3VycmVudENvbnRlbnQubWVkaWEpIHsKKyAg
ICAgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyICYmICFvcHRpb25zLmlzU3VyZmFjZSkKKyAg
ICAgICAgICAgIG1fY3VycmVudENvbnRlbnQubWVkaWEtPnBhaW50VG9UZXh0dXJlTWFwcGVyKG9w
dGlvbnMudGV4dHVyZU1hcHBlciwgdGFyZ2V0UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KG1f
dHJhbnNmb3Jtcy50YXJnZXQpLm11bHRpcGx5KG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3RyYW5z
Zm9ybXMubG9jYWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3BhY2l0eSAqIG1fc3RhdGUucmVwbGljYUxheWVyLT5tX29wYWNpdHks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXBsaWNhTWFza1RleHR1cmUgPyByZXBsaWNhTWFza1RleHR1cmUuZ2V0KCkgOiBtYXNrVGV4
dHVyZS5nZXQoKSk7CisgICAgICAgIG1fY3VycmVudENvbnRlbnQubWVkaWEtPnBhaW50VG9UZXh0
dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlciwgdGFyZ2V0UmVjdCwgbV90cmFuc2Zvcm1z
LnRhcmdldCwgb3BhY2l0eSwgb3B0aW9ucy5pc1N1cmZhY2UgPyAwIDogbWFza1RleHR1cmUuZ2V0
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgY29uc3QgSW50UmVjdCByZWN0ID0g
bV9sYXllclR5cGUgPT0gQ2xpcExheWVyID8gZW50aXJlUmVjdCgpIDogdGFyZ2V0UmVjdCgpOwot
ICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IG1fbGF5ZXJUeXBlID09
IENsaXBMYXllciA/IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkgOiBtX3RyYW5zZm9ybXMudGFyZ2V0
OwotICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKm1fdGV4dHVyZS5nZXQo
KSwgcmVjdCwgdHJhbnNmb3JtLCBvcGFjaXR5LCBvcHRpb25zLmlzU3VyZmFjZSA/IDAgOiBtYXNr
VGV4dHVyZS5nZXQoKSk7Ci0gICAgb3B0aW9ucy5jYWNoZS0+bWFyayhtX3RleHR1cmUuZ2V0KCkp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90aWxlcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlID0gbV90aWxlc1tpXS50ZXh0dXJlLmdldCgpOwor
ICAgICAgICBUZXh0dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXI6OlRleHR1cmVHdWFyZCB1c2VUZXh0
dXJlKHRleHR1cmUsIG9wdGlvbnMuc3VyZmFjZU1hbmFnZXIpOworICAgICAgICBpZiAobV9zdGF0
ZS5yZXBsaWNhTGF5ZXIgJiYgIW9wdGlvbnMuaXNTdXJmYWNlKSB7CisgICAgICAgICAgICBvcHRp
b25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCp0ZXh0dXJlLCB0YXJnZXRSZWN0Rm9yVGls
ZVJlY3QodGFyZ2V0UmVjdCwgbV90aWxlc1tpXS5yZWN0KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgobV90cmFuc2Zvcm1zLnRhcmdldCkubXVsdGlw
bHkobV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fdHJhbnNmb3Jtcy5sb2NhbCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9wYWNpdHkgKiBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9vcGFj
aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsaWNhTWFza1RleHR1cmUgPyBy
ZXBsaWNhTWFza1RleHR1cmUuZ2V0KCkgOiBtYXNrVGV4dHVyZS5nZXQoKSk7CisgICAgICAgIH0K
KworICAgICAgICBjb25zdCBGbG9hdFJlY3QgcmVjdCA9IHRhcmdldFJlY3RGb3JUaWxlUmVjdCh0
YXJnZXRSZWN0LCBtX3RpbGVzW2ldLnJlY3QpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBw
ZXItPmRyYXdUZXh0dXJlKCp0ZXh0dXJlLCByZWN0LCBtX3RyYW5zZm9ybXMudGFyZ2V0LCBvcGFj
aXR5LCBvcHRpb25zLmlzU3VyZmFjZSA/IDAgOiBtYXNrVGV4dHVyZS5nZXQoKSk7CisgICAgfQog
fQogCi1ib29sIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFJlcGxpY2EoY29uc3QgVGV4bWFwUGFp
bnRPcHRpb25zJiBvcHRpb25zKQoraW50IFRleHR1cmVNYXBwZXJOb2RlOjpjb21wYXJlR3JhcGhp
Y3NMYXllcnNaVmFsdWUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKIHsKLSAgICBCaXRt
YXBUZXh0dXJlJiB0ZXh0dXJlID0gKm1fc3VyZmFjZS5nZXQoKTsKLSAgICBUZXh0dXJlTWFwcGVy
Tm9kZSogcmVwbGljYSA9IG1fc3RhdGUucmVwbGljYUxheWVyOwotICAgIFJlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBtYXNrVGV4dHVyZTsKLSAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIG1hc2sgPSBt
X3N0YXRlLm1hc2tMYXllcikKLSAgICAgICAgbWFza1RleHR1cmUgPSBtYXNrLT5tX3RleHR1cmU7
Ci0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHJlcGxpY2FNYXNrVGV4dHVyZTsKLSAgICBpZiAo
IXJlcGxpY2EpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChyZXBsaWNhICYmIHJl
cGxpY2EtPm1fc3RhdGUubWFza0xheWVyKQotICAgICAgICByZXBsaWNhTWFza1RleHR1cmUgPSBy
ZXBsaWNhLT5tX3N0YXRlLm1hc2tMYXllci0+bV90ZXh0dXJlOwotCi0gICAgaWYgKHJlcGxpY2FN
YXNrVGV4dHVyZSkKLSAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJlLT51bnBhY2soKTsKLSAgICBB
U1NFUlQobV9yZXBsaWNhU3VyZmFjZSk7Ci0gICAgbV9yZXBsaWNhU3VyZmFjZS0+cmVzZXQob3B0
aW9ucy5zdXJmYWNlLT5zaXplKCkpOwotICAgIG1fcmVwbGljYVN1cmZhY2UtPnNldE9mZnNldChv
cHRpb25zLnN1cmZhY2UtPm9mZnNldCgpKTsKLSAgICBvcHRpb25zLmNhY2hlLT5tYXJrKG1fcmVw
bGljYVN1cmZhY2UuZ2V0KCkpOwotICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZh
Y2UobV9yZXBsaWNhU3VyZmFjZS5nZXQoKSk7Ci0gICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5k
cmF3VGV4dHVyZSh0ZXh0dXJlLCByZXBsaWNhUmVjdCgpLCBtX3RyYW5zZm9ybXMucmVwbGljYSwg
cmVwbGljYS0+bV9zdGF0ZS5vcGFjaXR5LCByZXBsaWNhTWFza1RleHR1cmUgPyByZXBsaWNhTWFz
a1RleHR1cmUuZ2V0KCkgOiBtYXNrVGV4dHVyZS5nZXQoKSk7Ci0gICAgb3B0aW9ucy50ZXh0dXJl
TWFwcGVyLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCBJbnRSZWN0KEludFBvaW50KDAsIDApLCBvcHRp
b25zLnN1cmZhY2UtPnNpemUoKSksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIDEuMGYsIG1hc2tU
ZXh0dXJlLmdldCgpKTsKLSAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG9w
dGlvbnMuc3VyZmFjZSk7Ci0gICAgb3B0aW9ucy5jYWNoZS0+bWFyayhvcHRpb25zLnN1cmZhY2Up
OwotICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKm1fcmVwbGljYVN1cmZh
Y2UuZ2V0KCksIEludFJlY3QoSW50UG9pbnQoMCwgMCksIG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgp
KSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgb3B0aW9ucy5vcGFjaXR5LCAwKTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogY29uc3QqIG5vZGVBID0gc3RhdGljX2Nh
c3Q8VGV4dHVyZU1hcHBlck5vZGUqIGNvbnN0Kj4oYSk7CisgICAgVGV4dHVyZU1hcHBlck5vZGUq
IGNvbnN0KiBub2RlQiA9IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJOb2RlKiBjb25zdCo+KGIp
OworICAgIHJldHVybiBpbnQoKCgqbm9kZUEpLT5tX3RyYW5zZm9ybXMuY2VudGVyWiAtICgqbm9k
ZUIpLT5tX3RyYW5zZm9ybXMuY2VudGVyWikgKiAxMDAwKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6cGFpbnRTdXJmYWNlKGNvbnN0IFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9ucykK
K3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNvcnRCeVpPcmRlcihWZWN0b3I8VGV4dHVyZU1hcHBl
ck5vZGUqID4mIGFycmF5LCBpbnQgZmlyc3QsIGludCBsYXN0KQogewotICAgIGlmIChtX2xheWVy
VHlwZSA9PSBSb290TGF5ZXIgfHwgbV9sYXllclR5cGUgPT0gRGVmYXVsdExheWVyIHx8IG1fbGF5
ZXJUeXBlID09IFNjaXNzb3JMYXllcikKLSAgICAgICAgcmV0dXJuOworICAgIHFzb3J0KGFycmF5
LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBzaXplb2YoVGV4dHVyZU1hcHBlck5vZGUqKSwgY29tcGFy
ZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKTsKK30KIAotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBt
YXNrVGV4dHVyZTsKLSAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIG1hc2sgPSBtX3N0YXRlLm1h
c2tMYXllcikKLSAgICAgICAgbWFza1RleHR1cmUgPSBtYXNrLT5tX3RleHR1cmU7Cit2b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjpwYWludFNlbGZBbmRDaGlsZHJlbihjb25zdCBUZXh0dXJlTWFwcGVy
UGFpbnRPcHRpb25zJiBvcHRpb25zLCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvcHRpb25z
Rm9yRGVzY2VuZGFudHMpCit7CisgICAgYm9vbCBoYXNDbGlwID0gbV9zdGF0ZS5tYXNrc1RvQm91
bmRzICYmICFtX2NoaWxkcmVuLmlzRW1wdHkoKTsKKyAgICBpZiAoaGFzQ2xpcCkKKyAgICAgICAg
b3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iZWdpbkNsaXAobV90cmFuc2Zvcm1zLmZvckRlc2NlbmRh
bnRzLCBGbG9hdFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwog
Ci0gICAgQVNTRVJUKG1fc3VyZmFjZSk7Ci0gICAgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSA9ICpt
X3N1cmZhY2UuZ2V0KCk7Ci0gICAgaWYgKG1hc2tUZXh0dXJlKQotICAgICAgICBtYXNrVGV4dHVy
ZS0+dW5wYWNrKCk7Ci0gICAgdGV4dHVyZS51bnBhY2soKTsKKyAgICBwYWludFNlbGYob3B0aW9u
cyk7CiAKLSAgICBpZiAocGFpbnRSZXBsaWNhKG9wdGlvbnMpKQotICAgICAgICByZXR1cm47Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBt
X2NoaWxkcmVuW2ldLT5wYWludFJlY3Vyc2l2ZShvcHRpb25zRm9yRGVzY2VuZGFudHMpOwogCi0g
ICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShvcHRpb25zLnN1cmZhY2UpOwot
ICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBJ
bnRSZWN0KEludFBvaW50KDAsIDApLCBvcHRpb25zLnN1cmZhY2UtPnNpemUoKSkgOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyID8gVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSA6IG1fdHJhbnNmb3Jtcy50YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbnMub3BhY2l0eSwgbWFza1RleHR1cmUuZ2V0KCkpOwotICAgIG9wdGlvbnMu
Y2FjaGUtPm1hcmsoJnRleHR1cmUpOworICAgIGlmIChoYXNDbGlwKQorICAgICAgICBvcHRpb25z
LnRleHR1cmVNYXBwZXItPmVuZENsaXAoKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
cGFpbnRTZWxmQW5kQ2hpbGRyZW4oY29uc3QgVGV4bWFwUGFpbnRPcHRpb25zJiBvcHRpb25zLCBU
ZXhtYXBQYWludE9wdGlvbnMmIG9wdGlvbnNGb3JEZXNjZW5kYW50cykKK2Jvb2wgVGV4dHVyZU1h
cHBlck5vZGU6OnBhaW50UmVmbGVjdGlvbihjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25z
JiBvcHRpb25zLCBCaXRtYXBUZXh0dXJlKiBjb250ZW50U3VyZmFjZSkKIHsKLSAgICBib29sIGRp
ZFBhaW50U2VsZiA9IGZhbHNlOwotICAgIGlmICghbV9zdGF0ZS5wcmVzZXJ2ZXMzRCB8fCBtX2No
aWxkcmVuLmlzRW1wdHkoKSkgewotICAgICAgICBwYWludFNlbGYob3B0aW9ucyk7Ci0gICAgICAg
IGRpZFBhaW50U2VsZiA9IHRydWU7Ci0gICAgfQorICAgIGlmICghbV9zdGF0ZS5yZXBsaWNhTGF5
ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2NoaWxkcmVuLmlzRW1wdHko
KSAmJiAhb3B0aW9ucy5pc1N1cmZhY2UpCi0gICAgICAgIHJldHVybjsKKyAgICBSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gc3VyZmFjZShjb250ZW50U3VyZmFjZSk7CisgICAgUmVmUHRyPEJpdG1hcFRl
eHR1cmU+IG1hc2tTdXJmYWNlOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiByZXBsaWNhTWFz
a1N1cmZhY2U7CisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHJlcGxpY2FNYXNrVGV4dHVyZTsK
IAotICAgIGlmIChtX2xheWVyVHlwZSA9PSBTY2lzc29yTGF5ZXIpCi0gICAgICAgIG9wdGlvbnNG
b3JEZXNjZW5kYW50cy5zY2lzc29yUmVjdC5pbnRlcnNlY3QobV90cmFuc2Zvcm1zLnRhcmdldC5t
YXBSZWN0KEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpKTsK
KyAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIHJlcGxpY2FNYXNrID0gbV9zdGF0ZS5yZXBsaWNh
TGF5ZXItPm1fc3RhdGUubWFza0xheWVyKQorICAgICAgICByZXBsaWNhTWFza1RleHR1cmUgPSBy
ZXBsaWNhTWFzay0+dGV4dHVyZSgpOwogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2NoaWxk
cmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IG1f
Y2hpbGRyZW5baV07Ci0gICAgICAgIGlmICghbGF5ZXIpCi0gICAgICAgICAgICBjb250aW51ZTsK
KyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFza1RleHR1cmU7CisgICAgaWYgKFRleHR1cmVN
YXBwZXJOb2RlKiBtYXNrID0gbV9zdGF0ZS5tYXNrTGF5ZXIpCisgICAgICAgIG1hc2tUZXh0dXJl
ID0gbWFzay0+dGV4dHVyZSgpOworCisgICAgVGV4dHVyZU1hcHBlclN1cmZhY2VNYW5hZ2VyOjpU
ZXh0dXJlR3VhcmQgdXNlTWFza1RleHR1cmUobWFza1RleHR1cmUuZ2V0KCksIG9wdGlvbnMuc3Vy
ZmFjZU1hbmFnZXIpOworICAgIFRleHR1cmVNYXBwZXJTdXJmYWNlTWFuYWdlcjo6VGV4dHVyZUd1
YXJkIHVzZVJlcGxpY2FNYXNrVGV4dHVyZShyZXBsaWNhTWFza1RleHR1cmUuZ2V0KCksIG9wdGlv
bnMuc3VyZmFjZU1hbmFnZXIpOworCisgICAgY29uc3QgSW50U2l6ZSB2aWV3cG9ydFNpemUgPSBv
cHRpb25zLnRleHR1cmVNYXBwZXItPnZpZXdwb3J0U2l6ZSgpOworICAgIGNvbnN0IGJvb2wgdXNl
SW50ZXJtZWRpYXRlQnVmZmVyRm9yUmVwbGljYSA9IG1fc3RhdGUucmVwbGljYUxheWVyICYmIG9w
dGlvbnMub3BhY2l0eSA8IDAuOTk7CisgICAgY29uc3QgYm9vbCB1c2VJbnRlcm1lZGlhdGVCdWZm
ZXJGb3JNYXNrID0gbWFza1RleHR1cmUgJiYgcmVwbGljYU1hc2tUZXh0dXJlOworICAgIGNvbnN0
IEZsb2F0UmVjdCB2aWV3cG9ydFJlY3QoMCwgMCwgdmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdw
b3J0U2l6ZS5oZWlnaHQoKSk7CisKKyAgICAvLyBUaGUgbWFzayBoYXMgdG8gYmUgYWRqdXN0ZWQg
dG8gdGFyZ2V0IGNvb3JkaW5hdGVzLgorICAgIGlmIChtYXNrVGV4dHVyZSkgeworICAgICAgICBt
YXNrU3VyZmFjZSA9IG9wdGlvbnMuc3VyZmFjZU1hbmFnZXItPmdldEludGVybWVkaWF0ZVN1cmZh
Y2UoKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShtYXNrU3Vy
ZmFjZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUo
Km1hc2tUZXh0dXJlLmdldCgpLCBlbnRpcmVSZWN0KCksIG1fdHJhbnNmb3Jtcy50YXJnZXQsIDEs
IDApOworICAgICAgICBtYXNrVGV4dHVyZSA9IG1hc2tTdXJmYWNlOworICAgIH0KIAotICAgICAg
ICBpZiAoIWRpZFBhaW50U2VsZiAmJiBsYXllci0+bV90cmFuc2Zvcm1zLmNlbnRlclogPj0gMCkg
ewotICAgICAgICAgICAgcGFpbnRTZWxmKG9wdGlvbnMpOwotICAgICAgICAgICAgZGlkUGFpbnRT
ZWxmID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBsYXllci0+cGFpbnRSZWN1cnNpdmUob3B0
aW9uc0ZvckRlc2NlbmRhbnRzKTsKLSAgICAgICAgaWYgKG9wdGlvbnMuaXNTdXJmYWNlKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQobV9zdXJmYWNlKTsKLSAgICAgICAgICAgIG9wdGlvbnMuY2FjaGUt
Pm1hcmsobV9zdXJmYWNlLmdldCgpKTsKLSAgICAgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBl
ci0+YmluZFN1cmZhY2UobV9zdXJmYWNlLmdldCgpKTsKLSAgICAgICAgfQorICAgIC8vIFRoZSBy
ZXBsaWNhJ3MgbWFzayBoYXMgdG8gYmUgYWRqdXN0ZWQgdG8gdGFyZ2V0IGNvb3JkaW5hdGVzLgor
ICAgIGlmIChyZXBsaWNhTWFza1RleHR1cmUpIHsKKyAgICAgICAgcmVwbGljYU1hc2tTdXJmYWNl
ID0gb3B0aW9ucy5zdXJmYWNlTWFuYWdlci0+Z2V0SW50ZXJtZWRpYXRlU3VyZmFjZSgpOworICAg
ICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKHJlcGxpY2FNYXNrU3VyZmFj
ZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKnJl
cGxpY2FNYXNrVGV4dHVyZS5nZXQoKSwgZW50aXJlUmVjdCgpLCBtX3RyYW5zZm9ybXMudGFyZ2V0
LCAxLCAwKTsKKyAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJlID0gcmVwbGljYU1hc2tTdXJmYWNl
OworICAgIH0KKworICAgIC8vIFdlIG1pZ2h0IG5lZWQgdG8gYXBwbHkgdGhlIG1hc2sgb2YgdGhl
IGNvbnRlbnQgbGF5ZXIgYmVmb3JlIHdlIGRyYXcgdGhlIHJlZmxlY3Rpb24sIGFzIHRoZXJlIG1p
Z2h0IGJlIHlldCBhbm90aGVyIG1hc2sgZm9yIHRoZSByZWZsZWN0aW9uIGl0c2VsZi4KKyAgICBp
ZiAodXNlSW50ZXJtZWRpYXRlQnVmZmVyRm9yTWFzaykgeworICAgICAgICBSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gbWFza1N1cmZhY2UgPSBvcHRpb25zLnN1cmZhY2VNYW5hZ2VyLT5nZXRJbnRlcm1l
ZGlhdGVTdXJmYWNlKCk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZh
Y2UobWFza1N1cmZhY2UuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRy
YXdUZXh0dXJlKCpzdXJmYWNlLmdldCgpLCB2aWV3cG9ydFJlY3QsIFRyYW5zZm9ybWF0aW9uTWF0
cml4KCksIDEsIG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICAgICAgb3B0aW9ucy5zdXJmYWNlTWFu
YWdlci0+cmVsZWFzZUludGVybWVkaWF0ZVN1cmZhY2Uoc3VyZmFjZS5nZXQoKSk7CisgICAgICAg
IHN1cmZhY2UgPSBtYXNrU3VyZmFjZTsKKyAgICAgICAgbWFza1RleHR1cmUuY2xlYXIoKTsKICAg
ICB9Ci0gICAgaWYgKCFkaWRQYWludFNlbGYpIHsKLSAgICAgICAgcGFpbnRTZWxmKG9wdGlvbnMp
OwotICAgICAgICBkaWRQYWludFNlbGYgPSB0cnVlOworCisgICAgLy8gV2UgYmxlbmQgdGhlIGxh
eWVyIGFuZCBpdHMgcmVwbGljYSBpbiBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyIGJlZm9yZSBibGVu
ZGluZyBpbnRvIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICBpZiAodXNlSW50ZXJtZWRpYXRlQnVm
ZmVyRm9yUmVwbGljYSkgeworICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gcmVwbGljYVN1
cmZhY2UgPSBvcHRpb25zLnN1cmZhY2VNYW5hZ2VyLT5nZXRJbnRlcm1lZGlhdGVTdXJmYWNlKCk7
CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UocmVwbGljYVN1cmZh
Y2UuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCpz
dXJmYWNlLmdldCgpLCB2aWV3cG9ydFJlY3QsIG1fdHJhbnNmb3Jtcy5yZXBsaWNhLCBtX3N0YXRl
LnJlcGxpY2FMYXllci0+bV9vcGFjaXR5LCByZXBsaWNhTWFza1RleHR1cmUuZ2V0KCkpOworICAg
ICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCpzdXJmYWNlLmdldCgpLCB2
aWV3cG9ydFJlY3QsIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIDEsIG1hc2tUZXh0dXJlLmdldCgp
KTsKKyAgICAgICAgb3B0aW9ucy5zdXJmYWNlTWFuYWdlci0+cmVsZWFzZUludGVybWVkaWF0ZVN1
cmZhY2Uoc3VyZmFjZS5nZXQoKSk7CisgICAgICAgIHN1cmZhY2UgPSByZXBsaWNhU3VyZmFjZTsK
ICAgICB9CisKKyAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG9wdGlvbnMu
c3VyZmFjZSk7CisKKyAgICAvLyBEcmF3IHRoZSByZWZsZWN0aW9uLgorICAgIGlmICghdXNlSW50
ZXJtZWRpYXRlQnVmZmVyRm9yUmVwbGljYSkKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVy
LT5kcmF3VGV4dHVyZSgqc3VyZmFjZS5nZXQoKSwgdmlld3BvcnRSZWN0LCBtX3RyYW5zZm9ybXMu
cmVwbGljYSwgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fb3BhY2l0eSwgcmVwbGljYU1hc2tUZXh0
dXJlLmdldCgpKTsKKworICAgIC8vIERyYXcgdGhlIG9yaWdpbmFsLgorICAgIG9wdGlvbnMudGV4
dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKnN1cmZhY2UuZ2V0KCksIHZpZXdwb3J0UmVjdCwgVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgb3B0aW9ucy5vcGFjaXR5LCBtYXNrVGV4dHVyZS5nZXQoKSk7
CisKKyAgICBvcHRpb25zLnN1cmZhY2VNYW5hZ2VyLT5yZWxlYXNlSW50ZXJtZWRpYXRlU3VyZmFj
ZShtYXNrU3VyZmFjZS5nZXQoKSk7CisgICAgb3B0aW9ucy5zdXJmYWNlTWFuYWdlci0+cmVsZWFz
ZUludGVybWVkaWF0ZVN1cmZhY2UocmVwbGljYU1hc2tTdXJmYWNlLmdldCgpKTsKKworICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFJlY3Vyc2l2ZShU
ZXhtYXBQYWludE9wdGlvbnMgb3B0aW9ucykKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50
UmVjdXJzaXZlKFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBib29s
IGlzRGlydHkgPSBtX3N0YXRlLmRpcnR5OwotICAgIG1fc3RhdGUuZGlydHkgPSBmYWxzZTsKLQog
ICAgIGlmICgobV9zaXplLmlzRW1wdHkoKSAmJiAobV9zdGF0ZS5tYXNrc1RvQm91bmRzCi0gICAg
ICAgIHx8IG1fY2hpbGRyZW4uaXNFbXB0eSgpKSkgfHwgIW1fc3RhdGUudmlzaWJsZSB8fCBvcHRp
b25zLm9wYWNpdHkgPCAwLjAxIHx8IG1fc3RhdGUub3BhY2l0eSA8IDAuMDEpCisgICAgICAgIHx8
IG1fY2hpbGRyZW4uaXNFbXB0eSgpKSkgfHwgIW1fc3RhdGUudmlzaWJsZSB8fCBvcHRpb25zLm9w
YWNpdHkgPCAwLjAxIHx8IG1fb3BhY2l0eSA8IDAuMDEpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtKCk7CisgICAgb3B0aW9ucy5vcGFjaXR5ICo9IG1fb3Bh
Y2l0eTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gc3VyZmFjZTsKKyAgICBjb25zdCBib29s
IG5lZWRzVHdvUGFzcyA9ICgobV9zdGF0ZS5yZXBsaWNhTGF5ZXIgfHwgbV9zdGF0ZS5tYXNrTGF5
ZXIpICYmICFtX2NoaWxkcmVuLmlzRW1wdHkoKSkgfHwgKG1fb3BhY2l0eSA8IDAuOTkgJiYgbV9z
dGF0ZS5taWdodEhhdmVPdmVybGFwcykgfHwgKG1fb3BhY2l0eSA8IDAuOTkgJiYgbV9zdGF0ZS5y
ZXBsaWNhTGF5ZXIpOworICAgIGNvbnN0IEludFNpemUgdmlld3BvcnRTaXplID0gb3B0aW9ucy50
ZXh0dXJlTWFwcGVyLT52aWV3cG9ydFNpemUoKTsKKyAgICBvcHRpb25zLmlzU3VyZmFjZSA9IGZh
bHNlOwogCi0gICAgaWYgKG1fc3RhdGUubWFza0xheWVyKQotICAgICAgICBtX3N0YXRlLm1hc2tM
YXllci0+bV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOworICAgIFRleHR1cmVNYXBwZXJQYWludE9wdGlv
bnMgb3B0aW9uc0ZvckRlc2NlbmRhbnRzKG9wdGlvbnMpOwogCi0gICAgaWYgKG1fc3RhdGUucmVw
bGljYUxheWVyKSB7Ci0gICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLmRpcnR5
ID0gZmFsc2U7Ci0gICAgICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5tYXNr
TGF5ZXIpCi0gICAgICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5
ZXItPm1fc3RhdGUuZGlydHkgPSBmYWxzZTsKKyAgICBpZiAoIW5lZWRzVHdvUGFzcykgeworICAg
ICAgICBwYWludFNlbGZBbmRDaGlsZHJlbihvcHRpb25zLCBvcHRpb25zRm9yRGVzY2VuZGFudHMp
OworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY29uc3QgYm9vbCBpc1N1cmZhY2UgPSAo
bV9sYXllclR5cGUgPT0gQ2xpcExheWVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
bV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCAobV9sYXllclR5cGUgPT0gUm9vdExheWVyCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICYmIChvcHRpb25zLnRleHR1cmVNYXBwZXItPmFsbG93U3VyZmFjZUZvclJvb3Qo
KSB8fCBtX3N0YXRlLmhhc1N1cmZhY2VEZXNjZW5kYW50cykKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKSk7CisgICAgRmxvYXRSZWN0IHZpZXdwb3J0UmVjdCgwLCAwLCB2aWV3cG9y
dFNpemUud2lkdGgoKSwgdmlld3BvcnRTaXplLmhlaWdodCgpKTsKIAotICAgIGNvbnN0IEludFJl
Y3QgYm91bmRpbmdSZWN0ZnJvbU5lYXJlc3RTdXJmYWNlID0gbV90cmFuc2Zvcm1zLnRhcmdldEJv
dW5kaW5nUmVjdDsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFza1N1cmZhY2U7CiAKLSAg
ICBvcHRpb25zLm9wYWNpdHkgKj0gbV9zdGF0ZS5vcGFjaXR5OwotCi0gICAgVGV4bWFwUGFpbnRP
cHRpb25zIG9wdGlvbnNGb3JEZXNjZW5kYW50cyhvcHRpb25zKTsKLSAgICBvcHRpb25zRm9yRGVz
Y2VuZGFudHMub3BhY2l0eSA9IGlzU3VyZmFjZSA/IDEgOiBvcHRpb25zLm9wYWNpdHk7Ci0gICAg
b3B0aW9ucy5pc1N1cmZhY2UgPSBpc1N1cmZhY2U7Ci0KLSAgICBpZiAobV9sYXllclR5cGUgPT0g
Q2xpcExheWVyKSB7Ci0gICAgICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy52aXNpYmxlUmVjdCA9
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkudHJhbnNsYXRlKC1ib3VuZGluZ1JlY3Rmcm9tTmVhcmVz
dFN1cmZhY2UueCgpLCAtYm91bmRpbmdSZWN0ZnJvbU5lYXJlc3RTdXJmYWNlLnkoKSkubWFwUmVj
dChvcHRpb25zLnZpc2libGVSZWN0KTsKLSAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnNj
aXNzb3JSZWN0ID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgp
KTsKKyAgICAvLyBUaGUgbWFzayBoYXMgdG8gYmUgYWRqdXN0ZWQgdG8gdGFyZ2V0IGNvb3JkaW5h
dGVzLgorICAgIGlmIChtX3N0YXRlLm1hc2tMYXllcikgeworICAgICAgICBtYXNrU3VyZmFjZSA9
IG9wdGlvbnMuc3VyZmFjZU1hbmFnZXItPmdldEludGVybWVkaWF0ZVN1cmZhY2UoKTsKKyAgICAg
ICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShtYXNrU3VyZmFjZS5nZXQoKSk7
CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKm1fc3RhdGUubWFz
a0xheWVyLT50ZXh0dXJlKCksIGVudGlyZVJlY3QoKSwgbV90cmFuc2Zvcm1zLnRhcmdldCwgMS4w
LCAwKTsKICAgICB9CiAKLSAgICBpZiAobV9sYXllclR5cGUgPT0gU2Npc3NvckxheWVyKQotICAg
ICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMuc2Npc3NvclJlY3QuaW50ZXJzZWN0KG1fdHJhbnNm
b3Jtcy50YXJnZXRCb3VuZGluZ1JlY3QpOwotICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+c2V0
Q2xpcChvcHRpb25zRm9yRGVzY2VuZGFudHMuc2Npc3NvclJlY3QpOwotCi0gICAgVGV4dHVyZU1h
cHBlckNhY2hlTG9jayhtX3RleHR1cmUuZ2V0KCkpOwotICAgIFRleHR1cmVNYXBwZXJDYWNoZUxv
Y2sobV9zdXJmYWNlLmdldCgpKTsKLSAgICBUZXh0dXJlTWFwcGVyQ2FjaGVMb2NrKG1fcmVwbGlj
YVN1cmZhY2UuZ2V0KCkpOworICAgIHN1cmZhY2UgPSBvcHRpb25zLnN1cmZhY2VNYW5hZ2VyLT5n
ZXRJbnRlcm1lZGlhdGVTdXJmYWNlKCk7CisgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnN1cmZh
Y2UgPSBzdXJmYWNlLmdldCgpOworICAgIG9wdGlvbnMuaXNTdXJmYWNlID0gdHJ1ZTsKKyAgICBv
cHRpb25zRm9yRGVzY2VuZGFudHMub3BhY2l0eSA9IDE7CisgICAgb3B0aW9ucy50ZXh0dXJlTWFw
cGVyLT5iaW5kU3VyZmFjZShzdXJmYWNlLmdldCgpKTsKIAotICAgIG9wdGlvbnMuY2FjaGUtPnB1
cmdlKCk7CisgICAgcGFpbnRTZWxmQW5kQ2hpbGRyZW4ob3B0aW9ucywgb3B0aW9uc0ZvckRlc2Nl
bmRhbnRzKTsKIAotICAgIGlmIChpc1N1cmZhY2UpIHsKLSAgICAgICAgQVNTRVJUKG1fc3VyZmFj
ZSk7Ci0gICAgICAgIGlmICghbV9zdXJmYWNlLT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBpc0Rp
cnR5ID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1fc3RhdGUudGlsZWQpIHsKLSAgICAgICAgICAgIG1f
c3VyZmFjZS0+cmVzZXQob3B0aW9ucy52aXNpYmxlUmVjdC5zaXplKCkpOwotICAgICAgICAgICAg
bV9zdXJmYWNlLT5zZXRPZmZzZXQob3B0aW9ucy52aXNpYmxlUmVjdC5sb2NhdGlvbigpKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChpc0RpcnR5KQotICAgICAgICAgICAgbV9zdXJmYWNlLT5yZXNldCht
X2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllciA/IG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgp
IDogbV9zaXplKTsKLSAgICAgICAgb3B0aW9ucy5jYWNoZS0+bWFyayhtX3N1cmZhY2UuZ2V0KCkp
OwotICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG1fc3VyZmFjZS5n
ZXQoKSk7Ci0gICAgICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy5zdXJmYWNlID0gbV9zdXJmYWNl
LmdldCgpOwotICAgIH0gZWxzZSBpZiAobV9zdXJmYWNlKQotICAgICAgICBtX3N1cmZhY2UtPmRl
c3Ryb3koKTsKLQotICAgIGlmIChpc0RpcnR5IHx8ICFpc1N1cmZhY2UgfHwgbV9zdGF0ZS50aWxl
ZCB8fCAhbV9zdXJmYWNlLT5pc1ZhbGlkKCkpCi0gICAgICAgIHBhaW50U2VsZkFuZENoaWxkcmVu
KG9wdGlvbnMsIG9wdGlvbnNGb3JEZXNjZW5kYW50cyk7CisgICAgaWYgKCFwYWludFJlZmxlY3Rp
b24ob3B0aW9ucywgc3VyZmFjZS5nZXQoKSkpIHsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFw
cGVyLT5iaW5kU3VyZmFjZShvcHRpb25zLnN1cmZhY2UpOworICAgICAgICBvcHRpb25zLnRleHR1
cmVNYXBwZXItPmRyYXdUZXh0dXJlKCpzdXJmYWNlLmdldCgpLCB2aWV3cG9ydFJlY3QsIFRyYW5z
Zm9ybWF0aW9uTWF0cml4KCksIG9wdGlvbnMub3BhY2l0eSwgMCk7CisgICAgfQogCi0gICAgcGFp
bnRTdXJmYWNlKG9wdGlvbnMpOworICAgIG9wdGlvbnMuc3VyZmFjZU1hbmFnZXItPnJlbGVhc2VJ
bnRlcm1lZGlhdGVTdXJmYWNlKHN1cmZhY2UuZ2V0KCkpOworICAgIG9wdGlvbnMuc3VyZmFjZU1h
bmFnZXItPnJlbGVhc2VJbnRlcm1lZGlhdGVTdXJmYWNlKG1hc2tTdXJmYWNlLmdldCgpKTsKIH0K
IAogVGV4dHVyZU1hcHBlck5vZGU6On5UZXh0dXJlTWFwcGVyTm9kZSgpCiB7Ci0gICAgc2V0TmVl
ZHNEaXNwbGF5KCk7Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgY2hpbGRyZW5TaXplID0gbV9j
aGlsZHJlbi5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSBjaGlsZHJlblNpemUtMTsgaSA+
PSAwOyAtLWkpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2NoaWxkcmVuW2ldLT5tX3BhcmVudCA9
PSB0aGlzKTsKLSAgICAgICAgICAgIG1fY2hpbGRyZW5baV0tPm1fcGFyZW50ID0gMDsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBmb3IgKGludCBpID0gbV9jaGlsZHJlbi5zaXplKCkgLSAxOyBpID49
IDA7IC0taSkKKyAgICAgICAgbV9jaGlsZHJlbltpXS0+bV9wYXJlbnQgPSAwOworCiAgICAgaWYg
KG1fcGFyZW50KQogICAgICAgICBtX3BhcmVudC0+bV9jaGlsZHJlbi5yZW1vdmUobV9wYXJlbnQt
Pm1fY2hpbGRyZW4uZmluZCh0aGlzKSk7Ci0gICAgaWYgKG1fY2FjaGUpCi0gICAgICAgIGRlbGV0
ZSBtX2NhY2hlOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwZXJmb3JtUG9zdFN5bmNP
cGVyYXRpb25zKCkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJlc2V0RGVzY2VuZGFudHMoKQog
ewotICAgIGNvbnN0IExheWVyVHlwZSBwcmV2TGF5ZXJUeXBlID0gbV9sYXllclR5cGU7Ci0gICAg
Y29tcHV0ZUxheWVyVHlwZSgpOwotICAgIGlmIChwcmV2TGF5ZXJUeXBlICE9IG1fbGF5ZXJUeXBl
KQotICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKLSAgICBpZiAobV90cmFuc2Zvcm1zLmRp
cnR5KQotICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fdGlsZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdGlsZXNbaV0ubmVlZHNSZXNldCA9
IHRydWU7CiAKLSAgICBjb21wdXRlVHJhbnNmb3JtYXRpb25zKCk7Ci0gICAgaWYgKG1fc3RhdGUu
bWFza0xheWVyICYmICFtX3N0YXRlLmRpcnR5KQotICAgICAgICBtX3N0YXRlLmRpcnR5ID0gbV9z
dGF0ZS5tYXNrTGF5ZXItPm1fc3RhdGUuZGlydHk7Ci0gICAgaWYgKG1fc3RhdGUucmVwbGljYUxh
eWVyICYmICFtX3N0YXRlLmRpcnR5KQotICAgICAgICBtX3N0YXRlLmRpcnR5ID0gbV9zdGF0ZS5y
ZXBsaWNhTGF5ZXItPm1fc3RhdGUuZGlydHk7CisgICAgaWYgKG1fcGFyZW50KQorICAgICAgICBt
X3N0YXRlLmNvbnRlbnRTY2FsZSA9IG1fcGFyZW50LT5tX3N0YXRlLmNvbnRlbnRTY2FsZTsKIAot
ICAgIGNvbnN0IGludCBzaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAgaWYgKG1fc3RhdGUu
bWFza0xheWVyKQorICAgICAgICBtX3N0YXRlLm1hc2tMYXllci0+cmVzZXREZXNjZW5kYW50cygp
OwogCi0gICAgZm9yIChpbnQgaSA9IHNpemUgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBU
ZXh0dXJlTWFwcGVyTm9kZSogbGF5ZXIgPSBtX2NoaWxkcmVuW2ldOworICAgIGlmIChtX3N0YXRl
LnJlcGxpY2FMYXllcikKKyAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPnJlc2V0RGVzY2Vu
ZGFudHMoKTsKIAotICAgICAgICBsYXllci0+cGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpOwot
ICAgICAgICBpZiAoIW1fc3RhdGUuZGlydHkpCi0gICAgICAgICAgICBtX3N0YXRlLmRpcnR5ID0g
bGF5ZXItPm1fc3RhdGUuZGlydHk7CisgICAgZm9yIChpbnQgaSA9IG1fY2hpbGRyZW4uc2l6ZSgp
IC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSBt
X2NoaWxkcmVuW2ldOworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgbm9kZS0+cmVzZXREZXNjZW5kYW50cygpOwogICAgIH0KLSAgICBtX3N0YXRlLmhh
c1N1cmZhY2VEZXNjZW5kYW50cyA9IGhhc1N1cmZhY2VEZXNjZW5kYW50cygpOwotICAgIGlmICht
X3N0YXRlLmRpcnR5KQotICAgICAgICBtX3N0YXRlLmRlc2NlbmRhbnRzV2l0aENvbnRlbnQgPSBj
b3VudERlc2NlbmRhbnRzV2l0aENvbnRlbnQoKTsKK30KIAotICAgIGlmIChtX3N0YXRlLnByZXNl
cnZlczNEKQotICAgICAgICBzb3J0QnlaT3JkZXIobV9jaGlsZHJlbiwgMCwgc2l6ZSk7Ci0gICAg
aWYgKG1fc3RhdGUuZGlydHkpCi0gICAgICAgIHNldE5lZWRzRGlzcGxheSgpOwordm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVudFNjYWxlKGZsb2F0IHNjYWxlKQoreworICAgIGlmICht
X3N0YXRlLmNvbnRlbnRTY2FsZSA9PSBzY2FsZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3Rh
dGUuY29udGVudFNjYWxlID0gc2NhbGU7CisgICAgcmVzZXREZXNjZW5kYW50cygpOworfQorCit2
b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIG1fc3RhdGUucm9vdFZpc2libGVSZWN0ID0gbV9zdGF0ZS52aXNpYmxlUmVjdCA9
IHJlY3Q7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRl
KEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBUZXh0dXJlTWFwcGVy
KiB0ZXh0dXJlTWFwcGVyLCBib29sIHRyYXZlcnNlRGVzY2VuZGFudHMpCit7CisgICAgc3luY0Nv
bXBvc2l0aW5nU3RhdGVJbnRlcm5hbChncmFwaGljc0xheWVyLCB0cmF2ZXJzZURlc2NlbmRhbnRz
LCB0ZXh0dXJlTWFwcGVyKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBv
c2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIGJv
b2wgcmVjdXJzZSkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRl
KEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBib29sIHRyYXZlcnNl
RGVzY2VuZGFudHMpCiB7Ci0gICAgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciA9IHJvb3RM
YXllcigpLT5tX3BsYXRmb3JtQ2xpZW50LT50ZXh0dXJlTWFwcGVyKCk7Ci0gICAgc3luY0NvbXBv
c2l0aW5nU3RhdGVJbnRlcm5hbChncmFwaGljc0xheWVyLCByZWN1cnNlLCB0ZXh0dXJlTWFwcGVy
KTsKLSAgICBwZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCk7CisgICAgc3luY0NvbXBvc2l0aW5n
U3RhdGUoZ3JhcGhpY3NMYXllciwgcm9vdExheWVyKCktPm1fdGV4dHVyZU1hcHBlciwgdHJhdmVy
c2VEZXNjZW5kYW50cyk7CiB9CiAKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmludmFsaWRhdGVP
dmVybGFwcygpCit7CisjaWYgVEVYVFVSRV9NQVBQRVJfTUlOSU1BTF9DT01QVVRBVElPTlMKKyAg
ICBtX2RpcnR5RmxhZ3Mub3ZlcmxhcHMgPSB0cnVlOworICAgIGlmIChtX3BhcmVudCkKKyAgICAg
ICAgbV9wYXJlbnQtPmludmFsaWRhdGVPdmVybGFwcygpOworI2VuZGlmCit9CisKKwogdm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
KQogewotICAgIGNvbnN0IGludCBjaGFuZ2VNYXNrID0gZ3JhcGhpY3NMYXllci0+Y2hhbmdlTWFz
aygpOwotICAgIGluaXRpYWxpemVUZXh0dXJlTWFwcGVyKHRleHR1cmVNYXBwZXIpOworICAgIGlu
dCBjaGFuZ2VNYXNrID0gZ3JhcGhpY3NMYXllci0+Y2hhbmdlTWFzaygpOwogICAgIGNvbnN0IFRl
eHR1cmVNYXBwZXJOb2RlOjpDb250ZW50RGF0YSYgcGVuZGluZ0NvbnRlbnQgPSBncmFwaGljc0xh
eWVyLT5wZW5kaW5nQ29udGVudCgpOwotICAgIGlmIChjaGFuZ2VNYXNrID09IE5vQ2hhbmdlcyAm
JiBwZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXlSZWN0LmlzRW1wdHkoKSAmJiAhcGVuZGluZ0Nv
bnRlbnQubmVlZHNEaXNwbGF5KQorICAgIGlmIChjaGFuZ2VNYXNrID09IE5vQ2hhbmdlcyAmJiBn
cmFwaGljc0xheWVyLT5tX2FuaW1hdGlvbnMuaXNFbXB0eSgpICYmIHBlbmRpbmdDb250ZW50Lm5l
ZWRzRGlzcGxheVJlY3QuaXNFbXB0eSgpICYmICFwZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIHNldE5lZWRzRGlzcGxheSgpOwotICAgIGlmIChtX3Bh
cmVudCkKLSAgICAgICAgbV9wYXJlbnQtPm1fc3RhdGUuZGlydHkgPSB0cnVlOwotCiAgICAgaWYg
KG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlICYmIChjaGFu
Z2VNYXNrICYgUGFyZW50Q2hhbmdlKSkgewotICAgICAgICAvLyBUaGUgV2ViQ29yZSBjb21wb3Np
dG9yIG1hbmFnZXMgaXRlbSBvd25lcnNoaXAuIFdlIGhhdmUgdG8gbWFrZSBzdXJlIGdyYXBoaWNz
dmlldyBkb2Vzbid0Ci0gICAgICAgIC8vIHRyeSB0byBzbmF0Y2ggdGhhdCBvd25lcnNoaXAuCi0K
LSAgICAgICAgaWYgKCFncmFwaGljc0xheWVyLT5wYXJlbnQoKSkKLSAgICAgICAgICAgIG1fcGFy
ZW50ID0gMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9wYXJlbnQgPSB0b1RleHR1cmVN
YXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnBhcmVudCgpKTsKKyAgICAgICAgbV9wYXJlbnQgPSB0
b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnBhcmVudCgpKTsKIAogICAgICAgICBp
ZiAoIWdyYXBoaWNzTGF5ZXItPnBhcmVudCgpICYmIG1fcGFyZW50KSB7CiAgICAgICAgICAgICBz
aXplX3QgaW5kZXggPSBtX3BhcmVudC0+bV9jaGlsZHJlbi5maW5kKHRoaXMpOwpAQCAtNzY0LDM0
ICs4MDgsMzkgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVT
ZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAgICB9CiAKICAgICBpZiAoY2hh
bmdlTWFzayAmIENoaWxkcmVuQ2hhbmdlKSB7CisgICAgICAgIGlmICh0ZXh0dXJlTWFwcGVyICYm
IHRleHR1cmVNYXBwZXItPmFsbG93UGFydGlhbFVwZGF0ZXMoKSkgeworICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
ICAgIG1fc3RhdGUucmVwYWludFJlY3QudW5pdGUobV9jaGlsZHJlbltpXS0+bV90cmFuc2Zvcm1z
LmJvdW5kaW5nUmVjdEZyb21Sb290KTsKKyAgICAgICAgfQorCiAgICAgICAgIG1fY2hpbGRyZW4u
Y2xlYXIoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBncmFwaGljc0xheWVyLT5j
aGlsZHJlbigpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5v
ZGUqIGNoaWxkID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5jaGlsZHJlbigp
W2ldKSkgewotICAgICAgICAgICAgICAgIGlmICghY2hpbGQpCi0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKLSAg
ICAgICAgICAgICAgICBjaGlsZC0+bV9wYXJlbnQgPSB0aGlzOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIGNoaWxkID0gdG9UZXh0dXJlTWFwcGVyTm9kZShn
cmFwaGljc0xheWVyLT5jaGlsZHJlbigpW2ldKTsKKyAgICAgICAgICAgIGlmICghY2hpbGQpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChj
aGlsZCk7CisgICAgICAgICAgICBjaGlsZC0+bV9wYXJlbnQgPSB0aGlzOwogICAgICAgICB9Ci0g
ICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOwogICAgIH0KIAorICAgIGlmIChjaGFuZ2VNYXNr
ICYgKERyYXdzQ29udGVudENoYW5nZSB8IFBhcmVudENoYW5nZSB8IENoaWxkcmVuQ2hhbmdlIHwg
U2l6ZUNoYW5nZSkpCisgICAgICAgIGludmFsaWRhdGVPdmVybGFwcygpOworCiAgICAgaWYgKGNo
YW5nZU1hc2sgJiAoU2l6ZUNoYW5nZSB8IENvbnRlbnRzUmVjdENoYW5nZSkpIHsKLSAgICAgICAg
SW50U2l6ZSB3YW50ZWRTaXplID0gSW50U2l6ZShncmFwaGljc0xheWVyLT5zaXplKCkud2lkdGgo
KSwgZ3JhcGhpY3NMYXllci0+c2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgZGlkQ2hhbmdlU2l6
ZSgpOworICAgICAgICBGbG9hdFNpemUgd2FudGVkU2l6ZShncmFwaGljc0xheWVyLT5zaXplKCku
d2lkdGgoKSwgZ3JhcGhpY3NMYXllci0+c2l6ZSgpLmhlaWdodCgpKTsKICAgICAgICAgaWYgKHdh
bnRlZFNpemUuaXNFbXB0eSgpICYmIHBlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxD
b250ZW50VHlwZSkKLSAgICAgICAgICAgIHdhbnRlZFNpemUgPSBJbnRTaXplKGdyYXBoaWNzTGF5
ZXItPmNvbnRlbnRzUmVjdCgpLndpZHRoKCksIGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzUmVjdCgp
LmhlaWdodCgpKTsKLQotICAgICAgICBpZiAod2FudGVkU2l6ZSAhPSBtX3NpemUpIHsKLSAgICAg
ICAgICAgIG1fc2l6ZSA9IEludFNpemUod2FudGVkU2l6ZS53aWR0aCgpLCB3YW50ZWRTaXplLmhl
aWdodCgpKTsKLSAgICAgICAgICAgIGlmIChtX3BsYXRmb3JtQ2xpZW50KQotICAgICAgICAgICAg
ICAgIG1fcGxhdGZvcm1DbGllbnQtPnNldFNpemVDaGFuZ2VkKG1fc2l6ZSk7Ci0gICAgICAgICAg
ICBjb25zdCBib29sIG5lZWRzVGlsaW5nID0gbV9zaXplLndpZHRoKCkgPiAyMDAwIHx8IG1fc2l6
ZS5oZWlnaHQoKSA+IDIwMDA7Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZS50aWxlZCAhPSBuZWVk
c1RpbGluZykKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnRpbGVkID0gbmVlZHNUaWxpbmc7Ci0g
ICAgICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICAgICAg
d2FudGVkU2l6ZSA9IEZsb2F0U2l6ZShncmFwaGljc0xheWVyLT5jb250ZW50c1JlY3QoKS53aWR0
aCgpLCBncmFwaGljc0xheWVyLT5jb250ZW50c1JlY3QoKS5oZWlnaHQoKSk7CisKKyAgICAgICAg
aWYgKHdhbnRlZFNpemUgIT0gbV9zaXplKQorICAgICAgICAgICAgbV90aWxlcy5jbGVhcigpOwor
CisgICAgICAgIG1fc2l6ZSA9IHdhbnRlZFNpemU7CiAgICAgfQogCisgICAgaWYgKGNoYW5nZU1h
c2sgJiAoVHJhbnNmb3JtQ2hhbmdlIHwgQW5jaG9yUG9pbnRDaGFuZ2UgfCBQb3NpdGlvbkNoYW5n
ZSkpCisgICAgICAgIGludmFsaWRhdGVMb2NhbFRyYW5zZm9ybSgpOworCiAgICAgaWYgKGNoYW5n
ZU1hc2sgJiBNYXNrTGF5ZXJDaGFuZ2UpIHsKICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUq
IGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5tYXNrTGF5ZXIoKSkp
CiAgICAgICAgICAgIGxheWVyLT5tX2VmZmVjdFRhcmdldCA9IHRoaXM7CkBAIC04MDAsMzEgKzg0
OSwzMyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYo
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYQogICAgIGlmIChjaGFuZ2VNYXNrICYgUmVw
bGljYUxheWVyQ2hhbmdlKSB7CiAgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9
IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhpY3NMYXllci0+cmVwbGljYUxheWVyKCkpKQogICAg
ICAgICAgICBsYXllci0+bV9lZmZlY3RUYXJnZXQgPSB0aGlzOworI2lmIFRFWFRVUkVfTUFQUEVS
X01JTklNQUxfQ09NUFVUQVRJT05TCisgICAgICAgbV9kaXJ0eUZsYWdzLnJlcGxpY2FUcmFuc2Zv
cm0gPSB0cnVlOworICAgICAgIG1fZGlydHlGbGFncy52aXNpYmxlUmVjdCA9IHRydWU7CisjZW5k
aWYKICAgICB9CiAKLSAgICBpZiAoY2hhbmdlTWFzayAmIChUcmFuc2Zvcm1DaGFuZ2UgfCBTaXpl
Q2hhbmdlIHwgQW5jaG9yUG9pbnRDaGFuZ2UgfCBQb3NpdGlvbkNoYW5nZSkpCi0gICAgICAgIG1f
dHJhbnNmb3Jtcy5sb2NhbERpcnR5ID0gdHJ1ZTsKLQotICAgIGlmIChjaGFuZ2VNYXNrICYgKENo
aWxkcmVuVHJhbnNmb3JtQ2hhbmdlIHwgU2l6ZUNoYW5nZSkpCi0gICAgICAgIG1fdHJhbnNmb3Jt
cy5wZXJzcGVjdGl2ZURpcnR5ID0gdHJ1ZTsKKyAgICBpZiAoY2hhbmdlTWFzayAmIENoaWxkcmVu
VHJhbnNmb3JtQ2hhbmdlKQorICAgICAgICBpbnZhbGlkYXRlUGVyc3BlY3RpdmVUcmFuc2Zvcm0o
KTsKIAotICAgIGlmIChjaGFuZ2VNYXNrICYgKENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlIHwgUHJl
c2VydmVzM0RDaGFuZ2UgfCBUcmFuc2Zvcm1DaGFuZ2UgfCBBbmNob3JQb2ludENoYW5nZSB8IFNp
emVDaGFuZ2UgfCBDb250ZW50c1JlY3RDaGFuZ2UgfCBCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2Ug
fCBQb3NpdGlvbkNoYW5nZSB8IE1hc2tMYXllckNoYW5nZSB8IERyYXdzQ29udGVudENoYW5nZSB8
IENvbnRlbnRDaGFuZ2UgfCBSZXBsaWNhTGF5ZXJDaGFuZ2UpKSAgICB7Ci0gICAgICAgIC8vIER1
ZSB0byB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgd2F5IFdlYkNvcmUgaGFuZGxlcyB0cmFu
c2Zvcm1zIGFuZCB0aGUgd2F5IFF0IGhhbmRsZXMgdHJhbnNmb3JtcywKLSAgICAgICAgLy8gYWxs
IHRoZXNlIGVsZW1lbnRzIGFmZmVjdCB0aGUgdHJhbnNmb3JtcyBvZiBhbGwgdGhlIGRlc2NlbmRh
bnRzLgorICAgIGlmIChjaGFuZ2VNYXNrICYgKFByZXNlcnZlczNEQ2hhbmdlIHwgQmFja2ZhY2VW
aXNpYmlsaXR5Q2hhbmdlKSkKICAgICAgICAgaW52YWxpZGF0ZVRyYW5zZm9ybSgpOwotICAgIH0K
IAotICAgIGlmIChjaGFuZ2VNYXNrICYgRGlzcGxheUNoYW5nZSkKLSAgICAgICAgbV9zdGF0ZS5k
aXJ0eSA9IHRydWU7CisgICAgaWYgKGNoYW5nZU1hc2sgJiBBbmltYXRpb25DaGFuZ2UpIHsKKyAg
ICAgICAgbV9hbmltYXRpb25zLmNsZWFyKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZ3JhcGhpY3NMYXllci0+bV9hbmltYXRpb25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
bV9hbmltYXRpb25zLmFwcGVuZChncmFwaGljc0xheWVyLT5tX2FuaW1hdGlvbnNbaV0pOworICAg
IH0KIAorICAgIGlmICh0ZXh0dXJlTWFwcGVyICYmIHRleHR1cmVNYXBwZXItPmFsbG93UGFydGlh
bFVwZGF0ZXMoKSkKKyAgICAgICAgbV9zdGF0ZS5yZXBhaW50UmVjdC51bml0ZShtX3N0YXRlLnJv
b3RWaXNpYmxlUmVjdCk7CiAgICAgbV9zdGF0ZS5tYXNrTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJO
b2RlKGdyYXBoaWNzTGF5ZXItPm1hc2tMYXllcigpKTsKICAgICBtX3N0YXRlLnJlcGxpY2FMYXll
ciA9IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhpY3NMYXllci0+cmVwbGljYUxheWVyKCkpOwog
ICAgIG1fc3RhdGUucG9zID0gZ3JhcGhpY3NMYXllci0+cG9zaXRpb24oKTsKICAgICBtX3N0YXRl
LmFuY2hvclBvaW50ID0gZ3JhcGhpY3NMYXllci0+YW5jaG9yUG9pbnQoKTsKICAgICBtX3N0YXRl
LnNpemUgPSBncmFwaGljc0xheWVyLT5zaXplKCk7Ci0gICAgbV9zdGF0ZS50cmFuc2Zvcm0gPSBn
cmFwaGljc0xheWVyLT50cmFuc2Zvcm0oKTsKICAgICBtX3N0YXRlLmNvbnRlbnRzUmVjdCA9IGdy
YXBoaWNzTGF5ZXItPmNvbnRlbnRzUmVjdCgpOwotICAgIG1fc3RhdGUub3BhY2l0eSA9IGdyYXBo
aWNzTGF5ZXItPm9wYWNpdHkoKTsKKyAgICBtX3N0YXRlLnRyYW5zZm9ybSA9IGdyYXBoaWNzTGF5
ZXItPnRyYW5zZm9ybSgpOwogICAgIG1fc3RhdGUuY29udGVudHNSZWN0ID0gZ3JhcGhpY3NMYXll
ci0+Y29udGVudHNSZWN0KCk7CiAgICAgbV9zdGF0ZS5wcmVzZXJ2ZXMzRCA9IGdyYXBoaWNzTGF5
ZXItPnByZXNlcnZlczNEKCk7CiAgICAgbV9zdGF0ZS5tYXNrc1RvQm91bmRzID0gZ3JhcGhpY3NM
YXllci0+bWFza3NUb0JvdW5kcygpOwpAQCAtODMyLDIyICs4ODMsMjMxIEBAIHZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlciogZ3JhCiAgICAgbV9zdGF0ZS5jb250ZW50c09wYXF1ZSA9IGdyYXBoaWNzTGF5ZXIt
PmNvbnRlbnRzT3BhcXVlKCk7CiAgICAgbV9zdGF0ZS5iYWNrZmFjZVZpc2liaWxpdHkgPSBncmFw
aGljc0xheWVyLT5iYWNrZmFjZVZpc2liaWxpdHkoKTsKICAgICBtX3N0YXRlLmNoaWxkcmVuVHJh
bnNmb3JtID0gZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW5UcmFuc2Zvcm0oKTsKKyAgICBtX3N0YXRl
Lm9wYWNpdHkgPSBncmFwaGljc0xheWVyLT5vcGFjaXR5KCk7CiAgICAgbV9jdXJyZW50Q29udGVu
dC5jb250ZW50VHlwZSA9IHBlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlOwogICAgIG1fY3VycmVu
dENvbnRlbnQuaW1hZ2UgPSBwZW5kaW5nQ29udGVudC5pbWFnZTsKICAgICBtX2N1cnJlbnRDb250
ZW50Lm1lZGlhID0gcGVuZGluZ0NvbnRlbnQubWVkaWE7Ci0gICAgbV9jdXJyZW50Q29udGVudC5i
YWNrZ3JvdW5kQ29sb3IgPSBwZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29sb3I7CiAgICAgbV9j
dXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxh
eSB8fCBwZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXk7Ci0gICAgbV9jdXJyZW50Q29udGVudC5u
ZWVkc0Rpc3BsYXlSZWN0LnVuaXRlKHBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOwor
ICAgIGlmICghbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkpCisgICAgICAgIG1fY3VycmVu
dENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC51bml0ZShwZW5kaW5nQ29udGVudC5uZWVkc0Rpc3Bs
YXlSZWN0KTsKKworICAgIGlmICghaGFzUnVubmluZ09wYWNpdHlBbmltYXRpb24oKSkKKyAgICAg
ICAgbV9vcGFjaXR5ID0gbV9zdGF0ZS5vcGFjaXR5OworICAgIGlmICghaGFzUnVubmluZ1RyYW5z
Zm9ybUFuaW1hdGlvbigpKQorICAgICAgICBtX3RyYW5zZm9ybXMuYmFzZSA9IG1fc3RhdGUudHJh
bnNmb3JtOworfQorCitib29sIFRleHR1cmVNYXBwZXJOb2RlOjpkZXNjZW5kYW50c09yU2VsZkhh
dmVSdW5uaW5nQW5pbWF0aW9ucygpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFtX2FuaW1hdGlvbnNb
aV0tPnBhdXNlZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAorICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
bV9jaGlsZHJlbltpXS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVJbnRlcm5hbChH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgYm9vbCByZWN1cnNlLCBU
ZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQorc3RhdGljIGRvdWJsZSBub3JtYWxpemVkQW5p
bWF0aW9uVmFsdWUoZG91YmxlIHJ1bm5pbmdUaW1lLCBkb3VibGUgZHVyYXRpb24sIGJvb2wgYWx0
ZXJuYXRlKQogewotICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihncmFwaGljc0xheWVyLCB0
ZXh0dXJlTWFwcGVyKTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBjb25zdCBpbnQgbG9vcENvdW50ID0gcnVubmluZ1RpbWUgLyBkdXJhdGlvbjsKKyAgICBjb25z
dCBkb3VibGUgbGFzdEZ1bGxMb29wID0gZHVyYXRpb24gKiBkb3VibGUobG9vcENvdW50KTsKKyAg
ICBjb25zdCBkb3VibGUgcmVtYWluZGVyID0gcnVubmluZ1RpbWUgLSBsYXN0RnVsbExvb3A7Cisg
ICAgY29uc3QgZG91YmxlIG5vcm1hbGl6ZWQgPSByZW1haW5kZXIgLyBkdXJhdGlvbjsKKyAgICBy
ZXR1cm4gKGxvb3BDb3VudCAlIDIgJiYgYWx0ZXJuYXRlKSA/ICgxIC0gbm9ybWFsaXplZCkgOiBu
b3JtYWxpemVkOworfQogCi0gICAgZ3JhcGhpY3NMYXllci0+ZGlkU3luY2hyb25pemUoKTsKK3Zv
aWQgVGV4dHVyZU1hcHBlck5vZGU6OmFwcGx5T3BhY2l0eUFuaW1hdGlvbihmbG9hdCBmcm9tT3Bh
Y2l0eSwgZmxvYXQgdG9PcGFjaXR5LCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgLy8gT3B0aW1p
emF0aW9uOiBzcGVjaWFsIGNhc2UgdGhlIGVkZ2UgdmFsdWVzICgwIGFuZCAxKS4KKyAgICBpZiAo
cHJvZ3Jlc3MgPT0gMS4wKQorICAgICAgICBzZXRPcGFjaXR5KHRvT3BhY2l0eSk7CisgICAgZWxz
ZSBpZiAoIXByb2dyZXNzKQorICAgICAgICBzZXRPcGFjaXR5KGZyb21PcGFjaXR5KTsKKyAgICBl
bHNlCisgICAgICAgIHNldE9wYWNpdHkoZnJvbU9wYWNpdHkgKyBwcm9ncmVzcyAqICh0b09wYWNp
dHkgLSBmcm9tT3BhY2l0eSkpOworfQogCi0gICAgaWYgKG1fc3RhdGUubWFza0xheWVyKSB7Citz
dGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUVwc2lsb24oZG91YmxlIGR1cmF0aW9uKQoreworICAg
IHJldHVybiAxLjAgLyAoMjAwLjAgKiBkdXJhdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91
YmxlIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihxcmVhbCBwMXgsIHFyZWFsIHAxeSwgcXJlYWwg
cDJ4LCBxcmVhbCBwMnksIGRvdWJsZSB0LCBkb3VibGUgZHVyYXRpb24pCit7CisgICAgVW5pdEJl
emllciBiZXppZXIocDF4LCBwMXksIHAyeCwgcDJ5KTsKKyAgICByZXR1cm4gYmV6aWVyLnNvbHZl
KHQsIHNvbHZlRXBzaWxvbihkdXJhdGlvbikpOworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSBz
b2x2ZVN0ZXBzRnVuY3Rpb24oaW50IG51bVN0ZXBzLCBib29sIHN0ZXBBdFN0YXJ0LCBkb3VibGUg
dCkKK3sKKyAgICBpZiAoc3RlcEF0U3RhcnQpCisgICAgICAgIHJldHVybiBxTWluKDEuMCwgKGZs
b29yKG51bVN0ZXBzICogdCkgKyAxKSAvIG51bVN0ZXBzKTsKKyAgICByZXR1cm4gZmxvb3IobnVt
U3RlcHMgKiB0KSAvIG51bVN0ZXBzOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5VGlt
aW5nRnVuY3Rpb24oY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uLCBmbG9hdCBw
cm9ncmVzcywgZG91YmxlIGR1cmF0aW9uKQoreworICAgIGlmICghdGltaW5nRnVuY3Rpb24pCisg
ICAgICAgIHJldHVybiBwcm9ncmVzczsKKworICAgIGlmICh0aW1pbmdGdW5jdGlvbi0+aXNDdWJp
Y0JlemllclRpbWluZ0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgY29uc3QgQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbiogY3RmID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5j
dGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJuIHNvbHZlQ3ViaWNCZXppZXJG
dW5jdGlvbihjdGYtPngxKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3RmLT55MSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0
Zi0+eDIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGYtPnky
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MsIGR1
cmF0aW9uKTsKKyAgICB9CisKKyAgICBpZiAodGltaW5nRnVuY3Rpb24tPmlzU3RlcHNUaW1pbmdG
dW5jdGlvbigpKSB7CisgICAgICAgIGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qIHN0ZiA9IHN0
YXRpY19jYXN0PGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbik7Cisg
ICAgICAgIHJldHVybiBzb2x2ZVN0ZXBzRnVuY3Rpb24oc3RmLT5udW1iZXJPZlN0ZXBzKCksIHN0
Zi0+c3RlcEF0U3RhcnQoKSwgZG91YmxlKHByb2dyZXNzKSk7CisgICAgfQorCisgICAgcmV0dXJu
IHByb2dyZXNzOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjphcHBseVRyYW5zZm9ybUFu
aW1hdGlvbihjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24sIGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbnMqIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpCit7CisgICAgLy8gT3B0aW1pemF0aW9uOiBzcGVjaWFsIGNhc2UgdGhl
IGVkZ2UgdmFsdWVzICgwIGFuZCAxKS4KKyAgICBpZiAocHJvZ3Jlc3MgPT0gMS4wIHx8ICFwcm9n
cmVzcykgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgICAgIGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIG9wcyA9IHByb2dyZXNzID8gdG8gOiBmcm9tOworICAg
ICAgICBvcHMtPmFwcGx5KGFuaW1hdGlvbi5ib3hTaXplLCBtYXRyaXgpOworICAgICAgICBzZXRU
cmFuc2Zvcm0obWF0cml4KTsKKyAgICB9CisKKyAgICBpZiAoIWFuaW1hdGlvbi5saXN0c01hdGNo
KSB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRvTWF0cml4LCBmcm9tTWF0cml4Owor
ICAgICAgICB0by0+YXBwbHkoYW5pbWF0aW9uLmJveFNpemUsIHRvTWF0cml4KTsKKyAgICAgICAg
ZnJvbS0+YXBwbHkoYW5pbWF0aW9uLmJveFNpemUsIGZyb21NYXRyaXgpOworICAgICAgICB0b01h
dHJpeC5ibGVuZChmcm9tTWF0cml4LCBwcm9ncmVzcyk7CisgICAgICAgIHNldFRyYW5zZm9ybSh0
b01hdHJpeCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBtYXRyaXg7CisKKyAgICBpZiAoIXRvLT5zaXplKCkpIHsKKyAgICAgICAgY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9ucyogc3dhcCA9IHRvOworICAgICAgICB0byA9IGZyb207CisgICAgICAg
IGZyb20gPSBzd2FwOworICAgIH0gZWxzZSBpZiAoIWZyb20tPnNpemUoKSkKKyAgICAgICAgcHJv
Z3Jlc3MgPSAxLjAgLSBwcm9ncmVzczsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRl
ZCgqdG8pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYW5pbWF0aW9uLmZ1bmN0aW9uTGlz
dC5zaXplKCk7ICsraSkKKyAgICAgICAgYmxlbmRlZC5vcGVyYXRpb25zKClbaV0tPmJsZW5kKGZy
b20tPmF0KGkpLCBwcm9ncmVzcywgIWZyb20tPmF0KGkpKS0+YXBwbHkobWF0cml4LCBhbmltYXRp
b24uYm94U2l6ZSk7CisKKyAgICBzZXRUcmFuc2Zvcm0obWF0cml4KTsKK30KKwordm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6YXBwbHlBbmltYXRpb25GcmFtZShjb25zdCBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uJiBhbmltYXRpb24sIGNvbnN0IEFuaW1hdGlvblZhbHVlKiBmcm9tLCBjb25zdCBBbmlt
YXRpb25WYWx1ZSogdG8sIGZsb2F0IHByb2dyZXNzKQoreworICAgIHN3aXRjaCAoYW5pbWF0aW9u
LmtleWZyYW1lcy5wcm9wZXJ0eSgpKSB7CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5T3BhY2l0
eToKKyAgICAgICAgYXBwbHlPcGFjaXR5QW5pbWF0aW9uKChzdGF0aWNfY2FzdDxjb25zdCBGbG9h
dEFuaW1hdGlvblZhbHVlKj4oZnJvbSktPnZhbHVlKCkpLCAoc3RhdGljX2Nhc3Q8Y29uc3QgRmxv
YXRBbmltYXRpb25WYWx1ZSo+KHRvKS0+dmFsdWUoKSksIHByb2dyZXNzKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybToKKyAgICAgICAg
YXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oYW5pbWF0aW9uLCBzdGF0aWNfY2FzdDxjb25zdCBUcmFu
c2Zvcm1BbmltYXRpb25WYWx1ZSo+KGZyb20pLT52YWx1ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBU
cmFuc2Zvcm1BbmltYXRpb25WYWx1ZSo+KHRvKS0+dmFsdWUoKSwgcHJvZ3Jlc3MpOworICAgICAg
ICByZXR1cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjphcHBseUFuaW1hdGlvbihjb25zdCBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24sIGRvdWJsZSBub3JtYWxpemVkVmFsdWUp
Cit7CisgICAgLy8gT3B0aW1pemF0aW9uOiBzcGVjaWFsIGNhc2UgdGhlIGVkZ2UgdmFsdWVzICgw
IGFuZCAxKS4KKyAgICBpZiAoIW5vcm1hbGl6ZWRWYWx1ZSkgeworICAgICAgICBhcHBseUFuaW1h
dGlvbkZyYW1lKGFuaW1hdGlvbiwgYW5pbWF0aW9uLmtleWZyYW1lcy5hdCgwKSwgYW5pbWF0aW9u
LmtleWZyYW1lcy5hdCgxKSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG5v
cm1hbGl6ZWRWYWx1ZSA9PSAxLjApIHsKKyAgICAgICAgYXBwbHlBbmltYXRpb25GcmFtZShhbmlt
YXRpb24sIGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoYW5pbWF0aW9uLmtleWZyYW1lcy5zaXplKCkg
LSAyKSwgYW5pbWF0aW9uLmtleWZyYW1lcy5hdChhbmltYXRpb24ua2V5ZnJhbWVzLnNpemUoKSAt
IDEpLCAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYW5pbWF0aW9uLmtleWZy
YW1lcy5zaXplKCkgPT0gMikgeworICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBhcHBseVRpbWlu
Z0Z1bmN0aW9uKGFuaW1hdGlvbi5hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCksIG5v
cm1hbGl6ZWRWYWx1ZSwgYW5pbWF0aW9uLmFuaW1hdGlvbi0+ZHVyYXRpb24oKSk7CisgICAgICAg
IGFwcGx5QW5pbWF0aW9uRnJhbWUoYW5pbWF0aW9uLCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KDAp
LCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KDEpLCBub3JtYWxpemVkVmFsdWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRpb24ua2V5
ZnJhbWVzLnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICBjb25zdCBBbmltYXRpb25WYWx1ZSog
ZnJvbSA9IGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoaSk7CisgICAgICAgIGNvbnN0IEFuaW1hdGlv
blZhbHVlKiB0byA9IGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoaSArIDEpOworICAgICAgICBpZiAo
ZnJvbS0+a2V5VGltZSgpID4gbm9ybWFsaXplZFZhbHVlIHx8IHRvLT5rZXlUaW1lKCkgPCBub3Jt
YWxpemVkVmFsdWUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBub3JtYWxpemVk
VmFsdWUgPSAobm9ybWFsaXplZFZhbHVlIC0gZnJvbS0+a2V5VGltZSgpKSAvICh0by0+a2V5VGlt
ZSgpIC0gZnJvbS0+a2V5VGltZSgpKTsKKyAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gYXBwbHlU
aW1pbmdGdW5jdGlvbihmcm9tLT50aW1pbmdGdW5jdGlvbigpLCBub3JtYWxpemVkVmFsdWUsIGFu
aW1hdGlvbi5hbmltYXRpb24tPmR1cmF0aW9uKCkpOworICAgICAgICBhcHBseUFuaW1hdGlvbkZy
YW1lKGFuaW1hdGlvbiwgZnJvbSwgdG8sIG5vcm1hbGl6ZWRWYWx1ZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6aGFzUnVubmluZ09wYWNpdHlB
bmltYXRpb24oKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRp
b25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24m
IGFuaW1hdGlvbiA9ICptX2FuaW1hdGlvbnNbaV0uZ2V0KCk7CisgICAgICAgIGlmICghYW5pbWF0
aW9uLnBhdXNlZCAmJiBhbmltYXRpb24ua2V5ZnJhbWVzLnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQ
cm9wZXJ0eU9wYWNpdHkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFRleHR1cmVNYXBwZXJOb2RlOjpoYXNSdW5uaW5nVHJhbnNm
b3JtQW5pbWF0aW9uKCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5p
bWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uJiBhbmltYXRpb24gPSAqbV9hbmltYXRpb25zW2ldLmdldCgpOworICAgICAgICBpZiAoIWFu
aW1hdGlvbi5wYXVzZWQgJiYgYW5pbWF0aW9uLmtleWZyYW1lcy5wcm9wZXJ0eSgpID09IEFuaW1h
dGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5j
QW5pbWF0aW9ucyhHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogbGF5ZXIpCit7CisgICAgZm9y
IChpbnQgaSA9IG1fYW5pbWF0aW9ucy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAg
ICBSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gYW5pbWF0aW9uID0gbV9hbmltYXRpb25z
W2ldOworCisgICAgICAgIGRvdWJsZSB0b3RhbFJ1bm5pbmdUaW1lID0gV1RGOjpjdXJyZW50VGlt
ZSgpIC0gYW5pbWF0aW9uLT5zdGFydFRpbWU7CisgICAgICAgIFJlZlB0cjxBbmltYXRpb24+IGFu
aW0gPSBhbmltYXRpb24tPmFuaW1hdGlvbjsKKyAgICAgICAgZG91YmxlIG5vcm1hbGl6ZWRWYWx1
ZSA9IG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZSh0b3RhbFJ1bm5pbmdUaW1lLCBhbmltLT5kdXJh
dGlvbigpLCB0cnVlKTsKKworICAgICAgICBpZiAoYW5pbS0+aXRlcmF0aW9uQ291bnQoKSAhPSBB
bmltYXRpb246Okl0ZXJhdGlvbkNvdW50SW5maW5pdGUgJiYgdG90YWxSdW5uaW5nVGltZSA+PSBh
bmltLT5kdXJhdGlvbigpICogYW5pbS0+aXRlcmF0aW9uQ291bnQoKSkgeworICAgICAgICAgICAg
Ly8gV2UgYXBwbHkgYW4gYW5pbWF0aW9uIHRoYXQgdmVyeSBjbG9zZSB0byB0aGUgZWRnZSwgc28g
dGhhdCB0aGUgZmluYWwgZnJhbWUgaXMgYXBwbGllZCwgb3Rlcndpc2Ugd2UgbWlnaHQgZ2V0LCBm
b3IgZXhhbXBsZSwgYW4gb3BhY2l0eSBvZiAwLjAxIHdoaWNoIGlzIHN0aWxsIHZpc2libGUuCisg
ICAgICAgICAgICBpZiAoYW5pbS0+ZmlsbHNGb3J3YXJkcygpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGFuaW1hdGlvbi0+a2V5ZnJhbWVzLnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdl
YmtpdFRyYW5zZm9ybSkKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS50cmFuc2Zvcm0gPSBt
X3RyYW5zZm9ybXMuYmFzZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhbmltYXRpb24tPmtl
eWZyYW1lcy5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KQorICAgICAgICAg
ICAgICAgICAgICBtX29wYWNpdHkgPSBtX3N0YXRlLm9wYWNpdHk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIG1fYW5pbWF0aW9ucy5yZW1vdmUoaSk7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghYW5pbWF0aW9uLT5wYXVzZWQpCisgICAgICAg
ICAgICBhcHBseUFuaW1hdGlvbigqYW5pbWF0aW9uLmdldCgpLCBub3JtYWxpemVkVmFsdWUpOwor
ICAgIH0KK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVJ
bnRlcm5hbChHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgYm9vbCB0
cmF2ZXJzZURlc2NlbmRhbnRzLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQoreworICAg
IGlmIChncmFwaGljc0xheWVyKSB7CisgICAgICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihn
cmFwaGljc0xheWVyLCB0ZXh0dXJlTWFwcGVyKTsKKyAgICAgICAgZ3JhcGhpY3NMYXllci0+ZGlk
U3luY2hyb25pemUoKTsKKyAgICB9CisKKyAgICBpZiAoZ3JhcGhpY3NMYXllciAmJiBtX3N0YXRl
Lm1hc2tMYXllcikgewogICAgICAgICBtX3N0YXRlLm1hc2tMYXllci0+c3luY0NvbXBvc2l0aW5n
U3RhdGVJbnRlcm5hbCh0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGdyYXBoaWNzTGF5ZXIt
Pm1hc2tMYXllcigpKSwgZmFsc2UsIHRleHR1cmVNYXBwZXIpOwogICAgICAgICBpZiAobV9zdGF0
ZS5tYXNrTGF5ZXItPm1fc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX3N0YXRlLm1hc2tM
YXllci0+bV9zaXplID0gbV9zaXplOwpAQCAtODU2LDIyICsxMTE2LDEwOCBAQCB2b2lkIFRleHR1
cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUludGVybmFsKEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyKgogICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikKICAgICAgICAgbV9z
dGF0ZS5yZXBsaWNhTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJuYWwodG9HcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcihncmFwaGljc0xheWVyLT5yZXBsaWNhTGF5ZXIoKSksIGZhbHNl
LCB0ZXh0dXJlTWFwcGVyKTsKIAotICAgIGlmIChtX3N0YXRlLmRpcnR5KQotICAgICAgICB1cGxv
YWRUZXh0dXJlRnJvbUNvbnRlbnQodGV4dHVyZU1hcHBlciwgbV9zdGF0ZS52aXNpYmxlUmVjdCwg
Z3JhcGhpY3NMYXllcik7CisgICAgc3luY0FuaW1hdGlvbnMoZ3JhcGhpY3NMYXllcik7CiAKLSAg
ICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgbV9j
dXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKKyAgICBjb21wdXRlQWxsVHJhbnNm
b3JtcygpOworCisgICAgYm9vbCB2aXNpYmxlUmVjdERpcnR5ID0gdHJ1ZTsKKyNpZiBURVhUVVJF
X01BUFBFUl9NSU5JTUFMX0NPTVBVVEFUSU9OUworICAgIHZpc2libGVSZWN0RGlydHkgPSBtX2Rp
cnR5RmxhZ3MudmlzaWJsZVJlY3Q7CisjZW5kaWYKKworICAgIGJvb2wgYWxsb3dQYXJ0aWFsVXBk
YXRlcyA9IHRleHR1cmVNYXBwZXIgJiYgdGV4dHVyZU1hcHBlci0+YWxsb3dQYXJ0aWFsVXBkYXRl
cygpOworICAgIGlmICh2aXNpYmxlUmVjdERpcnR5ICYmIGFsbG93UGFydGlhbFVwZGF0ZXMpCisg
ICAgICAgIG1fc3RhdGUucmVwYWludFJlY3QudW5pdGUobV90cmFuc2Zvcm1zLmJvdW5kaW5nUmVj
dEZyb21Sb290KTsKKyAgICBjb21wdXRlQm91bmRpbmdSZWN0RnJvbVJvb3RJZk5lZWRlZCgpOwor
ICAgIGNvbXB1dGVQZXJzcGVjdGl2ZVRyYW5zZm9ybUlmTmVlZGVkKCk7CisgICAgY29tcHV0ZVRp
bGVzKCk7CisgICAgY29tcHV0ZU92ZXJsYXBzSWZOZWVkZWQoKTsKKyAgICBpZiAodmlzaWJsZVJl
Y3REaXJ0eSAmJiBhbGxvd1BhcnRpYWxVcGRhdGVzKQorICAgICAgICBtX3N0YXRlLnJlcGFpbnRS
ZWN0LnVuaXRlKG1fdHJhbnNmb3Jtcy5ib3VuZGluZ1JlY3RGcm9tUm9vdCk7CiAKLSAgICBpZiAo
IXJlY3Vyc2UpCisgICAgaWYgKGdyYXBoaWNzTGF5ZXIpCisgICAgICAgIHJlbmRlckNvbnRlbnQo
dGV4dHVyZU1hcHBlciwgZ3JhcGhpY3NMYXllcik7CisKKyAgICBpZiAoIXRyYXZlcnNlRGVzY2Vu
ZGFudHMpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hp
bGRyZW4gPSBncmFwaGljc0xheWVyLT5jaGlsZHJlbigpOwotICAgIGZvciAoaW50IGkgPSBjaGls
ZHJlbi5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBUZXh0dXJlTWFwcGVyTm9k
ZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUoY2hpbGRyZW5baV0pOwotICAgICAgICBpZiAo
IW5vZGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbm9kZS0+c3luY0NvbXBvc2l0
aW5nU3RhdGVJbnRlcm5hbCh0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGNoaWxkcmVuW2ld
KSwgdHJ1ZSwgdGV4dHVyZU1hcHBlcik7CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIpIHsKKyAgICAg
ICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbiA9IGdyYXBoaWNzTGF5ZXItPmNoaWxk
cmVuKCk7CisgICAgICAgIGZvciAoaW50IGkgPSBjaGlsZHJlbi5zaXplKCkgLSAxOyBpID49IDA7
IC0taSkgeworICAgICAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVN
YXBwZXJOb2RlKGNoaWxkcmVuW2ldKTsKKyAgICAgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG5vZGUtPnN5bmNDb21wb3NpdGluZ1N0YXRl
SW50ZXJuYWwodG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihjaGlsZHJlbltpXSksIHRydWUs
IHRleHR1cmVNYXBwZXIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChp
bnQgaSA9IG1fY2hpbGRyZW4uc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpCisgICAgICAgICAgICBt
X2NoaWxkcmVuW2ldLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUludGVybmFsKDAsIHRydWUsIHRleHR1
cmVNYXBwZXIpOworICAgIH0KKworICAgIGlmIChtX3N0YXRlLnByZXNlcnZlczNEKQorICAgICAg
ICBzb3J0QnlaT3JkZXIobV9jaGlsZHJlbiwgMCwgbV9jaGlsZHJlbi5zaXplKCkpOworCit9CisK
K0ludFJlY3QgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMYXN0TW9kaWZpZWRSZWN0KCkKK3sK
KyAgICBGbG9hdFJlY3QgcmVjdCA9IG1fc3RhdGUucmVwYWludFJlY3Q7CisgICAgaWYgKGhhc1J1
bm5pbmdPcGFjaXR5QW5pbWF0aW9uKCkgfHwgaGFzUnVubmluZ1RyYW5zZm9ybUFuaW1hdGlvbigp
KQorICAgICAgICByZWN0ID0gdGFyZ2V0UmVjdCgpOworICAgIHJlY3QgPSBtX3RyYW5zZm9ybXMu
dGFyZ2V0Lm1hcFJlY3QocmVjdCk7CisgICAgbV9zdGF0ZS5yZXBhaW50UmVjdCA9IEZsb2F0UmVj
dCgpOworICAgIGZvciAoaW50IGkgPSBtX2NoaWxkcmVuLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1p
KQorICAgICAgICByZWN0LnVuaXRlKG1fY2hpbGRyZW5baV0tPmNvbXB1dGVMYXN0TW9kaWZpZWRS
ZWN0KCkpOworCisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocmVjdCk7Cit9CisKK3N0YXRp
YyBQYXNzUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiBjb3B5VGltaW5nRnVuY3Rpb24oY29uc3QgVGlt
aW5nRnVuY3Rpb24qIHRmdW5jKQoreworICAgIGlmICghdGZ1bmMpCisgICAgICAgIHJldHVybiAw
OworCisgICAgaWYgKHRmdW5jLT5pc0xpbmVhclRpbWluZ0Z1bmN0aW9uKCkpCisgICAgICAgIHJl
dHVybiBMaW5lYXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCk7CisKKyAgICBpZiAodGZ1bmMtPmlz
Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbigpKSB7CisgICAgICAgIGNvbnN0IEN1YmljQmV6aWVy
VGltaW5nRnVuY3Rpb24qIGJ0ZnVuYyA9IHN0YXRpY19jYXN0PGNvbnN0IEN1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb24qPih0ZnVuYyk7CisgICAgICAgIHJldHVybiBDdWJpY0JlemllclRpbWluZ0Z1
bmN0aW9uOjpjcmVhdGUoYnRmdW5jLT54MSgpLCBidGZ1bmMtPnkxKCksIGJ0ZnVuYy0+eDIoKSwg
YnRmdW5jLT55MigpKTsKKyAgICB9CisKKyAgICBpZiAodGZ1bmMtPmlzU3RlcHNUaW1pbmdGdW5j
dGlvbigpKSB7CisgICAgICAgIGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qIHN0ZnVuYyA9IHN0
YXRpY19jYXN0PGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qPih0ZnVuYyk7CisgICAgICAgIHJl
dHVybiBTdGVwc1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoc3RmdW5jLT5udW1iZXJPZlN0ZXBzKCks
IHN0ZnVuYy0+c3RlcEF0U3RhcnQoKSk7CiAgICAgfQorCisgICAgcmV0dXJuIDA7CiB9CiAKK3N0
YXRpYyBjb25zdCBBbmltYXRpb25WYWx1ZSogY29weUFuaW1hdGlvblZhbHVlKEFuaW1hdGVkUHJv
cGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgQW5pbWF0aW9uVmFsdWUqIHZhbHVlKQoreworICAgIHN3
aXRjaCAocHJvcGVydHkpIHsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zv
cm06IHsKKyAgICAgICAgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIHRyYW5zZm9ybVZh
bHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqPih2YWx1ZSk7
CisgICAgICAgIHJldHVybiBuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUodHJhbnNmb3JtVmFs
dWUtPmtleVRpbWUoKSwgdHJhbnNmb3JtVmFsdWUtPnZhbHVlKCksIGNvcHlUaW1pbmdGdW5jdGlv
bih0cmFuc2Zvcm1WYWx1ZS0+dGltaW5nRnVuY3Rpb24oKSkpOworICAgIH0KKyAgICBjYXNlIEFu
aW1hdGVkUHJvcGVydHlPcGFjaXR5OiB7CisgICAgICAgIGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFs
dWUqIGZsb2F0VmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVlKj4o
dmFsdWUpOworICAgICAgICByZXR1cm4gbmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoZmxvYXRWYWx1
ZS0+a2V5VGltZSgpLCBmbG9hdFZhbHVlLT52YWx1ZSgpLCBjb3B5VGltaW5nRnVuY3Rpb24oZmxv
YXRWYWx1ZS0+dGltaW5nRnVuY3Rpb24oKSkpOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKIH0KKworVGV4
dHVyZU1hcHBlckFuaW1hdGlvbjo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbihjb25zdCBLZXlmcmFt
ZVZhbHVlTGlzdCYgdmFsdWVzKQorICAgIDoga2V5ZnJhbWVzKHZhbHVlcy5wcm9wZXJ0eSgpKQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQorICAgICAg
ICBrZXlmcmFtZXMuaW5zZXJ0KGNvcHlBbmltYXRpb25WYWx1ZSh2YWx1ZXMucHJvcGVydHkoKSwg
dmFsdWVzLmF0KGkpKSk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCmlu
ZGV4IGM1ZGVjYzEuLjJlMWYzN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCkBAIC0yNSw3ICsy
NSw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRp
b25zLmgiCiAjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCkBAIC0zNiwy
MiArMzUsMzkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllcjsKIGNsYXNzIFRleHR1cmVNYXBwZXJOb2RlOwotY2xhc3MgVGV4dHVyZU1h
cHBlckNhY2hlOwogY2xhc3MgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI7CitjbGFzcyBUZXh0
dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXI7CiAKLXN0cnVjdCBUZXhtYXBQYWludE9wdGlvbnMgewor
Y2xhc3MgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyB7CitwdWJsaWM6CiAgICAgQml0bWFwVGV4
dHVyZSogc3VyZmFjZTsKICAgICBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyOwotICAgIFRl
eHR1cmVNYXBwZXJOb2RlKiByb290TGF5ZXI7CisgICAgVGV4dHVyZU1hcHBlclN1cmZhY2VNYW5h
Z2VyKiBzdXJmYWNlTWFuYWdlcjsKKwogICAgIGZsb2F0IG9wYWNpdHk7Ci0gICAgSW50UmVjdCBz
Y2lzc29yUmVjdDsKLSAgICBJbnRSZWN0IHZpc2libGVSZWN0OwogICAgIGJvb2wgaXNTdXJmYWNl
OwotICAgIFRleHR1cmVNYXBwZXJDYWNoZSogY2FjaGU7CisgICAgVGV4dHVyZU1hcHBlclBhaW50
T3B0aW9ucygpIDogc3VyZmFjZSgwKSwgdGV4dHVyZU1hcHBlcigwKSwgb3BhY2l0eSgxLjApLCBp
c1N1cmZhY2UoZmFsc2UpIHsgfQorfTsKKworY2xhc3MgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiA6
IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJBbmltYXRpb24+IHsKK3B1YmxpYzoKKyAg
ICBTdHJpbmcgbmFtZTsKKyAgICBLZXlmcmFtZVZhbHVlTGlzdCBrZXlmcmFtZXM7CisgICAgSW50
U2l6ZSBib3hTaXplOworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbjsKKyAgICBib29s
IHBhdXNlZDsKKyAgICBWZWN0b3I8VHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlPiBm
dW5jdGlvbkxpc3Q7CisgICAgYm9vbCBsaXN0c01hdGNoOworICAgIGJvb2wgaGFzQmlnUm90YXRp
b247CisgICAgZG91YmxlIHN0YXJ0VGltZTsKKyAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKGNv
bnN0IEtleWZyYW1lVmFsdWVMaXN0Jik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1h
cHBlckFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKHZhbHVlcykpOyB9CiB9
OwogCi1jbGFzcyBUZXh0dXJlTWFwcGVyTm9kZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyQ29udGVu
dExheWVyIHsKKworY2xhc3MgVGV4dHVyZU1hcHBlck5vZGUgewogCiBwdWJsaWM6CiAgICAgLy8g
VGhpcyBzZXQgb2YgZmxhZ3MgaGVscCB1cyBkZWZlciB3aGljaCBwcm9wZXJ0aWVzIG9mIHRoZSBs
YXllciBoYXZlIGJlZW4KQEAgLTgzLDE5ICs5OSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIERpc3Bs
YXlDaGFuZ2UgPSAgICAgICAgICAgICAoMUwgPDwgMTgpLAogICAgICAgICBCYWNrZ3JvdW5kQ29s
b3JDaGFuZ2UgPSAgICAgKDFMIDw8IDE5KSwKIAotICAgICAgICBSZXBsaWNhTGF5ZXJDaGFuZ2Ug
PSAgICAgICAgKDFMIDw8IDIwKQorICAgICAgICBSZXBsaWNhTGF5ZXJDaGFuZ2UgPSAgICAgICAg
KDFMIDw8IDIwKSwKKyAgICAgICAgQW5pbWF0aW9uQ2hhbmdlID0gICAgICAgICAgICgxTCA8PCAy
MSkKICAgICB9OwogICAgIC8vIFRoZSBjb21wb3NpdG9yIGxldHMgdXMgc3BlY2lhbC1jYXNlIGlt
YWdlcyBhbmQgY29sb3JzLCBzbyB3ZSB0cnkgdG8gZG8gc28uCiAgICAgZW51bSBDb250ZW50VHlw
ZSB7IEhUTUxDb250ZW50VHlwZSwgRGlyZWN0SW1hZ2VDb250ZW50VHlwZSwgQ29sb3JDb250ZW50
VHlwZSwgTWVkaWFDb250ZW50VHlwZSwgQ2FudmFzM0RDb250ZW50VHlwZX07CiAgICAgc3RydWN0
IENvbnRlbnREYXRhIHsKLSAgICAgICAgSW50UmVjdCBuZWVkc0Rpc3BsYXlSZWN0OworICAgICAg
ICBGbG9hdFJlY3QgbmVlZHNEaXNwbGF5UmVjdDsKICAgICAgICAgYm9vbCBuZWVkc0Rpc3BsYXk7
CiAgICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsKIAogICAgICAgICBDb250ZW50VHlwZSBj
b250ZW50VHlwZTsKICAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZTsKLSAgICAgICAgVGV4dHVy
ZU1hcHBlck1lZGlhTGF5ZXIqIG1lZGlhOwotCisgICAgICAgIGNvbnN0IFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyKiBtZWRpYTsKICAgICAgICAgQ29udGVudERhdGEoKQogICAgICAgICAgICAg
OiBuZWVkc0Rpc3BsYXkoZmFsc2UpCiAgICAgICAgICAgICAsIGNvbnRlbnRUeXBlKEhUTUxDb250
ZW50VHlwZSkKQEAgLTEwNSwxMDAgKzEyMSwxNTUgQEAgcHVibGljOgogICAgICAgICB9CiAgICAg
fTsKIAorICAgIFRleHR1cmVNYXBwZXJOb2RlKCkKKyAgICAgICAgOiBtX3BhcmVudCgwKSwgbV9l
ZmZlY3RUYXJnZXQoMCksIG1fb3BhY2l0eSgxLjApLCBtX3N1cmZhY2VNYW5hZ2VyKDApLCBtX3Rl
eHR1cmVNYXBwZXIoMCkgeyB9CiAKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSgpOwogICAgIHZpcnR1
YWwgflRleHR1cmVNYXBwZXJOb2RlKCk7CiAKLSAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRl
KEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiwgYm9vbCByZWN1cnNpdmUpOworICAgIHZvaWQg
c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqLCBib29sIHRy
YXZlcnNlRGVzZWNuZGFudHMpOworICAgIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIqLCBUZXh0dXJlTWFwcGVyKiwgYm9vbCB0cmF2ZXJzZURlc2Vj
bmRhbnRzKTsKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKG1fc2l6
ZS53aWR0aCgpICsgLjUsIG1fc2l6ZS5oZWlnaHQoKSArIC41KTsgfQorICAgIHZvaWQgc2V0VHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdm9pZCBzZXRPcGFjaXR5
KGZsb2F0IHZhbHVlKSB7IG1fb3BhY2l0eSA9IHZhbHVlOyB9CisgICAgSW50UmVjdCBjb21wdXRl
TGFzdE1vZGlmaWVkUmVjdCgpOworICAgIHZvaWQgc2V0Q29udGVudFNjYWxlKGZsb2F0KTsKKyAg
ICB2b2lkIHNldFZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHNldFRleHR1
cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4bWFwKSB7IG1fdGV4dHVyZU1hcHBlciA9IHRleG1h
cDsgfQorICAgIGJvb2wgZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSBj
b25zdDsKKworICAgIHZvaWQgcGFpbnQoKTsKIAotcHJvdGVjdGVkOgotICAgIC8vIFJlaW1wcyBm
cm9tIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXIKLSAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRQbGF0Zm9ybUxh
eWVyQ2xpZW50KFRleHR1cmVNYXBwZXJMYXllckNsaWVudCopOwotICAgIHZpcnR1YWwgdm9pZCBw
YWludChUZXh0dXJlTWFwcGVyKiwgY29uc3QgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcjo6UGFp
bnRPcHRpb25zJik7CisgICAgYm9vbCBuZWVkc1RvQ29tcHV0ZUJvdW5kaW5nUmVjdCgpIGNvbnN0
OworCisgICAgY29uc3QgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIG1lZGlhKCkgY29uc3Qg
eyByZXR1cm4gbV9jdXJyZW50Q29udGVudC5tZWRpYTsgfQogCiBwcml2YXRlOgogICAgIFRleHR1
cmVNYXBwZXJOb2RlKiByb290TGF5ZXIoKTsKLSAgICB2b2lkIGNsZWFyRGlyZWN0SW1hZ2UoKTsK
LSAgICB2b2lkIGNvbXB1dGVUcmFuc2Zvcm1hdGlvbnMoKTsKLSAgICBJbnRTaXplIG5lYXJlc3RT
dXJmYWNlU2l6ZSgpIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZVJlcGxpY2FUcmFuc2Zvcm0oKTsK
LSAgICB2b2lkIGNvbXB1dGVMYXllclR5cGUoKTsKLSAgICB2b2lkIGNvbXB1dGVMb2NhbFRyYW5z
Zm9ybSgpOwotICAgIHZvaWQgZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNzYXJ5KCk7Ci0gICAgdm9p
ZCBpbml0aWFsaXplVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKik7Ci0gICAgdm9pZCBpbnZh
bGlkYXRlVHJhbnNmb3JtKCk7CisgICAgdm9pZCBjb21wdXRlQWxsVHJhbnNmb3JtcygpOworICAg
IHZvaWQgY29tcHV0ZVZpc2libGVSZWN0SWZOZWVkZWQoKTsKKyAgICB2b2lkIGNvbXB1dGVQZXJz
cGVjdGl2ZVRyYW5zZm9ybUlmTmVlZGVkKCk7CisgICAgdm9pZCBjb21wdXRlUmVwbGljYVRyYW5z
Zm9ybUlmTmVlZGVkKCk7CisgICAgdm9pZCBjb21wdXRlT3ZlcmxhcHNJZk5lZWRlZCgpOworICAg
IHZvaWQgY29tcHV0ZUxvY2FsVHJhbnNmb3JtSWZOZWVkZWQoKTsKKyAgICB2b2lkIGNvbXB1dGVC
b3VuZGluZ1JlY3RGcm9tUm9vdElmTmVlZGVkKCk7CisgICAgdm9pZCBjb21wdXRlVGlsZXMoKTsK
KyAgICBpbnQgY291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCkgY29uc3Q7CisgICAgRmxvYXRS
ZWN0IHRhcmdldFJlY3RGb3JUaWxlUmVjdChjb25zdCBGbG9hdFJlY3QmIHRvdGFsVGFyZ2V0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCkgY29uc3Q7CisgICAgdm9pZCBpbnZhbGlkYXRl
Vmlld3BvcnQoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBub3RpZnlDaGFuZ2UoQ2hhbmdl
TWFzayk7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICB2b2lkIHNldE5lZWRzRGlz
cGxheUluUmVjdChJbnRSZWN0KTsKLSAgICB2b2lkIHBlcmZvcm1Qb3N0U3luY09wZXJhdGlvbnMo
KTsKLSAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJuYWwoR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIqLCBib29sIHJlY3Vyc2l2ZSwgVGV4dHVyZU1hcHBlciopOworICAgIHZvaWQg
cmVzZXREZXNjZW5kYW50cygpOworICAgIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVJbnRlcm5h
bChHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciosIGJvb2wgdHJhdmVyc2VEZXNlY25kYW50cywg
VGV4dHVyZU1hcHBlciopOwogICAgIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBUZXh0dXJlTWFwcGVyKiB0ZXh0
dXJlTWFwcGVyKTsKLSAgICBUZXh0dXJlTWFwcGVyQ2FjaGUqIGNhY2hlKCk7CisgICAgdm9pZCBz
eW5jQW5pbWF0aW9ucyhHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciopOworICAgIHZvaWQgYXBw
bHlBbmltYXRpb24oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYsIGRvdWJsZSBydW5uaW5n
VGltZSk7CisgICAgdm9pZCBhcHBseUFuaW1hdGlvbkZyYW1lKGNvbnN0IFRleHR1cmVNYXBwZXJB
bmltYXRpb24mLCBjb25zdCBBbmltYXRpb25WYWx1ZSogZnJvbSwgY29uc3QgQW5pbWF0aW9uVmFs
dWUqIHRvLCBmbG9hdCBwcm9ncmVzcyk7CisgICAgdm9pZCBhcHBseU9wYWNpdHlBbmltYXRpb24o
ZmxvYXQgZnJvbU9wYWNpdHksIGZsb2F0IHRvT3BhY2l0eSwgZG91YmxlKTsKKyAgICB2b2lkIGFw
cGx5VHJhbnNmb3JtQW5pbWF0aW9uKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mLCBjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBzdGFydCwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyog
ZW5kLCBkb3VibGUpOworICAgIGJvb2wgaGFzUnVubmluZ09wYWNpdHlBbmltYXRpb24oKSBjb25z
dDsKKyAgICBib29sIGhhc1J1bm5pbmdUcmFuc2Zvcm1BbmltYXRpb24oKSBjb25zdDsKIAotICAg
IHZvaWQgcGFpbnRSZWN1cnNpdmUoVGV4bWFwUGFpbnRPcHRpb25zIG9wdGlvbnMpOwotICAgIGJv
b2wgcGFpbnRSZXBsaWNhKGNvbnN0IFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9ucyk7Ci0gICAg
dm9pZCBwYWludFN1cmZhY2UoY29uc3QgVGV4bWFwUGFpbnRPcHRpb25zJiBvcHRpb25zKTsKLSAg
ICB2b2lkIHBhaW50U2VsZihjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlvbnMpOwotICAg
IHZvaWQgcGFpbnRTZWxmQW5kQ2hpbGRyZW4oY29uc3QgVGV4bWFwUGFpbnRPcHRpb25zJiBvcHRp
b25zLCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlvbnNGb3JEZXNjZW5kYW50cyk7Ci0gICAgdm9p
ZCB1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwg
Y29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKTsKIAotICAg
IGludCBjb3VudERlc2NlbmRhbnRzV2l0aENvbnRlbnQoKSBjb25zdDsKLSAgICBib29sIGhhc1N1
cmZhY2VEZXNjZW5kYW50cygpIGNvbnN0OworICAgIHN0YXRpYyBpbnQgY29tcGFyZUdyYXBoaWNz
TGF5ZXJzWlZhbHVlKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpOworICAgIHN0YXRpYyB2
b2lkIHNvcnRCeVpPcmRlcihWZWN0b3I8VGV4dHVyZU1hcHBlck5vZGUqID4mIGFycmF5LCBpbnQg
Zmlyc3QsIGludCBsYXN0KTsKIAotICAgIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIoKTsK
KyAgICBCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKCkgeyByZXR1cm4gbV90aWxlcy5pc0VtcHR5KCkg
PyAwIDogbV90aWxlc1swXS50ZXh0dXJlLmdldCgpOyB9CiAKKyAgICB2b2lkIHBhaW50UmVjdXJz
aXZlKFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMpOworICAgIGJvb2wgcGFpbnRSZWZsZWN0aW9u
KGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmLCBCaXRtYXBUZXh0dXJlKiBzdXJmYWNl
KTsKKyAgICB2b2lkIHBhaW50U2VsZihjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJik7
CisgICAgdm9pZCBwYWludFNlbGZBbmRDaGlsZHJlbihjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRP
cHRpb25zJiwgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYgb3B0aW9uc0ZvckRlc2NlbmRhbnRz
KTsKKyAgICB2b2lkIHJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciosIEdyYXBoaWNzTGF5ZXIq
KTsKIAotICAgIHN0YXRpYyBUZXh0dXJlTWFwcGVyTm9kZSogdG9UZXh0dXJlTWFwcGVyTm9kZShH
cmFwaGljc0xheWVyKik7Ci0gICAgc3RhdGljIGludCBjb21wYXJlR3JhcGhpY3NMYXllcnNaVmFs
dWUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYik7Ci0gICAgc3RhdGljIHZvaWQgc29ydEJ5
Wk9yZGVyKFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSogPiYgYXJyYXksIGludCBmaXJzdCwgaW50
IGxhc3QpOwogICAgIHN0cnVjdCBUcmFuc2Zvcm1EYXRhIHsKLSAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggYmFzZSwgdGFyZ2V0LCByZXBsaWNhLCBmb3JEZXNjZW5kYW50cywgcGVyc3BlY3Rp
dmUsIGxvY2FsOwotICAgICAgICBJbnRSZWN0IHRhcmdldEJvdW5kaW5nUmVjdDsKKyAgICAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggdGFyZ2V0OworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCByZXBsaWNhOworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmb3JEZXNjZW5kYW50czsK
KyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWw7CisgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGJhc2U7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBlcnNwZWN0aXZl
OworICAgICAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdSZWN0OwogICAgICAgICBmbG9hdCBj
ZW50ZXJaOwotICAgICAgICBib29sIGRpcnR5LCBsb2NhbERpcnR5LCBwZXJzcGVjdGl2ZURpcnR5
OwotICAgICAgICBJbnRSZWN0IGJvdW5kaW5nUmVjdEZyb21Sb290OwotICAgICAgICBUcmFuc2Zv
cm1EYXRhKCkgOiBkaXJ0eSh0cnVlKSwgbG9jYWxEaXJ0eSh0cnVlKSwgcGVyc3BlY3RpdmVEaXJ0
eSh0cnVlKSB7IH0KKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdEZyb21Sb290OworICAg
ICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0RnJvbVJvb3RGb3JEZXNjZW5kYW50czsKKyAgICAg
ICAgVHJhbnNmb3JtRGF0YSgpIHsgfQogICAgIH07CiAKLSAgICBUcmFuc2Zvcm1EYXRhIG1fdHJh
bnNmb3JtczsKKyAgICBzdHJ1Y3QgRGlydHlGbGFncyB7CisgICAgICAgIC8vIGxvY2FMVHJhbnNm
b3JtLCBwYXJlbnRUcmFuc2Zvcm0sCisgICAgICAgIGJvb2wgdHJhbnNmb3JtOiAxOwogCi0gICAg
ZW51bSBMYXllclR5cGUgewotICAgICAgICBEZWZhdWx0TGF5ZXIsCi0gICAgICAgIFJvb3RMYXll
ciwKLSAgICAgICAgU2Npc3NvckxheWVyLAotICAgICAgICBDbGlwTGF5ZXIsCi0gICAgICAgIFRy
YW5zcGFyZW5jeUxheWVyCi0gICAgfTsKKyAgICAgICAgLy8gc2l6ZSwgYW5jaG9yLXBvaW50LCBi
YXNlIHRyYW5zZm9ybSwgcG9zCisgICAgICAgIGJvb2wgbG9jYWxUcmFuc2Zvcm06IDE7CisKKyAg
ICAgICAgLy8gc2l6ZSwgY2hpbGRyZW5UcmFuc2Zvcm0KKyAgICAgICAgYm9vbCBwZXJzcGVjdGl2
ZVRyYW5zZm9ybTogMTsKKworICAgICAgICAvLyB0YXJnZXQgdHJhbnNmb3JtLCBzaXplLCBjb250
ZW50IHJlY3QsIHJvb3QgdmlzaWJsZSByZWN0CisgICAgICAgIGJvb2wgdmlzaWJsZVJlY3Q6IDE7
CisKKyAgICAgICAgYm9vbCBwYXJlbnRUcmFuc2Zvcm0gOjE7CisKKyAgICAgICAgYm9vbCByZXBs
aWNhVHJhbnNmb3JtOiAxOworCisgICAgICAgIGJvb2wgb3ZlcmxhcHM6IDE7CisKKyAgICAgICAg
RGlydHlGbGFncygpCisgICAgICAgICAgICA6IHRyYW5zZm9ybSh0cnVlKQorICAgICAgICAgICAg
LCBsb2NhbFRyYW5zZm9ybSh0cnVlKQorICAgICAgICAgICAgLCBwZXJzcGVjdGl2ZVRyYW5zZm9y
bSh0cnVlKQorICAgICAgICAgICAgLCB2aXNpYmxlUmVjdCh0cnVlKQorICAgICAgICAgICAgLCBw
YXJlbnRUcmFuc2Zvcm0odHJ1ZSkKKyAgICAgICAgICAgICwgcmVwbGljYVRyYW5zZm9ybSh0cnVl
KQorICAgICAgICAgICAgLCBvdmVybGFwcyh0cnVlKQorICAgICAgICB7IH0KKyAgICB9IG1fZGly
dHlGbGFnczsKIAotICAgIExheWVyVHlwZSBtX2xheWVyVHlwZTsKKyAgICB2b2lkIGludmFsaWRh
dGVUcmFuc2Zvcm0oKSB7IG1fZGlydHlGbGFncy50cmFuc2Zvcm0gPSB0cnVlOyB9CisgICAgdm9p
ZCBpbnZhbGlkYXRlTG9jYWxUcmFuc2Zvcm0oKSB7IG1fZGlydHlGbGFncy5sb2NhbFRyYW5zZm9y
bSA9IHRydWU7IH0KKyAgICB2b2lkIGludmFsaWRhdGVQZXJzcGVjdGl2ZVRyYW5zZm9ybSgpIHsg
bV9kaXJ0eUZsYWdzLnBlcnNwZWN0aXZlVHJhbnNmb3JtID0gdHJ1ZTsgfQorICAgIHZvaWQgaW52
YWxpZGF0ZVZpc2libGVSZWN0KCkgeyBtX2RpcnR5RmxhZ3MudmlzaWJsZVJlY3QgPSB0cnVlOyB9
CisgICAgdm9pZCBpbnZhbGlkYXRlUmVwbGljYVRyYW5zZm9ybSgpIHsgbV9kaXJ0eUZsYWdzLnJl
cGxpY2FUcmFuc2Zvcm0gPSB0cnVlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlT3ZlcmxhcHMoKTsK
KyAgICB2b2lkIGRpZENoYW5nZUxvY2FsVHJhbnNmb3JtKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VQ
YXJlbnRUcmFuc2Zvcm0oKTsKKyAgICB2b2lkIGRpZENoYW5nZVNpemUoKTsKKyAgICB2b2lkIGRp
ZENoYW5nZVRhcmdldFRyYW5zZm9ybSgpOworICAgIHZvaWQgZGlkQ2hhbmdlUGVyc3BlY3RpdmUo
KTsKIAotICAgIGlubGluZSBJbnRSZWN0IHRhcmdldFJlY3QoKSBjb25zdAorICAgIFRyYW5zZm9y
bURhdGEgbV90cmFuc2Zvcm1zOworCisgICAgaW5saW5lIEZsb2F0UmVjdCB0YXJnZXRSZWN0KCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBl
ID09IEhUTUxDb250ZW50VHlwZSA/IGVudGlyZVJlY3QoKSA6IG1fc3RhdGUuY29udGVudHNSZWN0
OwogICAgIH0KIAotICAgIGlubGluZSBJbnRSZWN0IGVudGlyZVJlY3QoKSBjb25zdAorICAgIGlu
bGluZSBGbG9hdFJlY3QgZW50aXJlUmVjdCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
SW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsK
ICAgICB9CiAKLSAgICBpbmxpbmUgSW50UmVjdCByZXBsaWNhUmVjdCgpIGNvbnN0CisgICAgRmxv
YXRTaXplIGNvbnRlbnRTaXplKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xheWVy
VHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllciA/IEludFJlY3QoMCwgMCwgbV9uZWFyZXN0U3VyZmFj
ZVNpemUud2lkdGgoKSwgbV9uZWFyZXN0U3VyZmFjZVNpemUuaGVpZ2h0KCkpIDogZW50aXJlUmVj
dCgpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJl
Y3RJbWFnZUNvbnRlbnRUeXBlICYmIG1fY3VycmVudENvbnRlbnQuaW1hZ2UgPyBtX2N1cnJlbnRD
b250ZW50LmltYWdlLT5zaXplKCkgOiBtX3NpemU7CiAgICAgfQorICAgIHN0cnVjdCBUaWxlIHsK
KyAgICAgICAgRmxvYXRSZWN0IHJlY3Q7CisgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0
ZXh0dXJlOworICAgICAgICBib29sIG5lZWRzUmVzZXQ7CisgICAgfTsKIAotICAgIFJlZlB0cjxC
aXRtYXBUZXh0dXJlPiBtX3RleHR1cmU7Ci0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1fc3Vy
ZmFjZSwgbV9yZXBsaWNhU3VyZmFjZTsKKyAgICBWZWN0b3I8VGlsZT4gbV90aWxlczsKIAogICAg
IENvbnRlbnREYXRhIG1fY3VycmVudENvbnRlbnQ7CiAKICAgICBWZWN0b3I8VGV4dHVyZU1hcHBl
ck5vZGUqPiBtX2NoaWxkcmVuOwogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBtX3BhcmVudDsKICAg
ICBUZXh0dXJlTWFwcGVyTm9kZSogbV9lZmZlY3RUYXJnZXQ7Ci0gICAgSW50U2l6ZSBtX3NpemUs
IG1fbmVhcmVzdFN1cmZhY2VTaXplOworICAgIEZsb2F0U2l6ZSBtX3NpemU7CisgICAgZmxvYXQg
bV9vcGFjaXR5OwogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgVGV4dHVyZU1hcHBlckxheWVyQ2xp
ZW50KiBtX3BsYXRmb3JtQ2xpZW50OworCisgICAgVmVjdG9yPFJlZlB0cjxUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uPiA+IG1fYW5pbWF0aW9uczsKIAogICAgIHN0cnVjdCBTdGF0ZSB7CiAgICAgICAg
IEZsb2F0UG9pbnQgcG9zOwpAQCAtMjA2LDI5ICsyNzcsMjcgQEAgcHJpdmF0ZToKICAgICAgICAg
RmxvYXRTaXplIHNpemU7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsK
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRyZW5UcmFuc2Zvcm07Ci0gICAgICAg
IENvbG9yIGJhY2tncm91bmRDb2xvcjsKLSAgICAgICAgQ29sb3IgY3VycmVudENvbG9yOwotICAg
ICAgICBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gZ2Vv
T3JpZW50YXRpb247Ci0gICAgICAgIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0
ZXNPcmllbnRhdGlvbiBjb250ZW50c09yaWVudGF0aW9uOwogICAgICAgICBmbG9hdCBvcGFjaXR5
OwotICAgICAgICBJbnRSZWN0IGNvbnRlbnRzUmVjdDsKKyAgICAgICAgRmxvYXRSZWN0IGNvbnRl
bnRzUmVjdDsKICAgICAgICAgaW50IGRlc2NlbmRhbnRzV2l0aENvbnRlbnQ7CiAgICAgICAgIFRl
eHR1cmVNYXBwZXJOb2RlKiBtYXNrTGF5ZXI7CiAgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBy
ZXBsaWNhTGF5ZXI7Ci0gICAgICAgIGJvb2wgcHJlc2VydmVzM0Q7Ci0gICAgICAgIGJvb2wgbWFz
a3NUb0JvdW5kczsKLSAgICAgICAgYm9vbCBkcmF3c0NvbnRlbnQ7Ci0gICAgICAgIGJvb2wgY29u
dGVudHNPcGFxdWU7Ci0gICAgICAgIGJvb2wgYmFja2ZhY2VWaXNpYmlsaXR5OwotICAgICAgICBi
b29sIHZpc2libGU7Ci0gICAgICAgIGJvb2wgZGlydHk7Ci0gICAgICAgIGJvb2wgdGlsZWQ7Ci0g
ICAgICAgIGJvb2wgaGFzU3VyZmFjZURlc2NlbmRhbnRzOwotICAgICAgICBJbnRSZWN0IHZpc2li
bGVSZWN0OworICAgICAgICBib29sIHByZXNlcnZlczNEIDogMTsKKyAgICAgICAgYm9vbCBtYXNr
c1RvQm91bmRzIDogMTsKKyAgICAgICAgYm9vbCBkcmF3c0NvbnRlbnQgOiAxOworICAgICAgICBi
b29sIGNvbnRlbnRzT3BhcXVlIDogMTsKKyAgICAgICAgYm9vbCBiYWNrZmFjZVZpc2liaWxpdHkg
OiAxOworICAgICAgICBib29sIHZpc2libGUgOiAxOworICAgICAgICBib29sIG5lZWRzUmVzZXQ6
IDE7CisgICAgICAgIGJvb2wgbWlnaHRIYXZlT3ZlcmxhcHMgOiAxOworICAgICAgICBib29sIG5l
ZWRzUmVwYWludDsKKyAgICAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0OworICAgICAgICBGbG9h
dFJlY3Qgcm9vdFZpc2libGVSZWN0OworICAgICAgICBmbG9hdCBjb250ZW50U2NhbGU7CisgICAg
ICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdDsKIAogICAgICAgICBTdGF0ZSgpCiAgICAgICAgICAg
ICA6IG9wYWNpdHkoMS5mKQotICAgICAgICAgICAgLCBkZXNjZW5kYW50c1dpdGhDb250ZW50KDAp
CiAgICAgICAgICAgICAsIG1hc2tMYXllcigwKQogICAgICAgICAgICAgLCByZXBsaWNhTGF5ZXIo
MCkKICAgICAgICAgICAgICwgcHJlc2VydmVzM0QoZmFsc2UpCkBAIC0yMzcsMTYgKzMwNiwyMCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgLCBjb250ZW50c09wYXF1ZShmYWxzZSkKICAgICAgICAg
ICAgICwgYmFja2ZhY2VWaXNpYmlsaXR5KGZhbHNlKQogICAgICAgICAgICAgLCB2aXNpYmxlKHRy
dWUpCi0gICAgICAgICAgICAsIGRpcnR5KHRydWUpCi0gICAgICAgICAgICAsIHRpbGVkKGZhbHNl
KQotICAgICAgICAgICAgLCBoYXNTdXJmYWNlRGVzY2VuZGFudHMoZmFsc2UpCisgICAgICAgICAg
ICAsIG5lZWRzUmVzZXQoZmFsc2UpCisgICAgICAgICAgICAsIG1pZ2h0SGF2ZU92ZXJsYXBzKGZh
bHNlKQorICAgICAgICAgICAgLCBjb250ZW50U2NhbGUoMS4wZikKICAgICAgICAgewogICAgICAg
ICB9CiAgICAgfTsKIAogICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgVGV4dHVyZU1hcHBlckNhY2hl
KiBtX2NhY2hlOworICAgIFRleHR1cmVNYXBwZXJTdXJmYWNlTWFuYWdlciogbV9zdXJmYWNlTWFu
YWdlcjsKKyAgICBUZXh0dXJlTWFwcGVyKiBtX3RleHR1cmVNYXBwZXI7CiB9OwogCisKK1RleHR1
cmVNYXBwZXJOb2RlKiB0b1RleHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXIqKTsKKwogfQog
I2VuZGlmIC8vIFRleHR1cmVNYXBwZXJOb2RlX2gKLS0gCjEuNy4zLjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92741</attachid>
            <date>2011-05-08 12:50:14 -0700</date>
            <delta_ts>2011-05-08 12:58:34 -0700</delta_ts>
            <desc>Patch 10: Glue layer</desc>
            <filename>0010-Glue-the-TextureMapper-refactoring-into-Webkit-1.patch</filename>
            <type>text/plain</type>
            <size>25023</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSA1NWQ5OTJmNzcwMDA3ZDdiNDE2N2M3YmE1MWQxMjcxYTE0ZGM2YmI2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgpEYXRlOiBTYXQsIDcgTWF5IDIwMTEgMTg6NTc6NDIgLTA3MDAKU3ViamVjdDogW1BBVENI
IDEwLzEwXSBHbHVlIHRoZSBUZXh0dXJlTWFwcGVyIHJlZmFjdG9yaW5nIGludG8gV2Via2l0KDEp
LgogICAgIDEuIFBhc3MgYSBHcmFwaGljc0xheWVyKiBpbnN0ZWFkIG9mIGEgUGxhdGZvcm1MYXll
ciogdG8gdGhlIFFXZWJQYWdlQ2xpZW50LgogICAgIDIuIFNldCBwYXJhbWV0ZXJzIGluIFRleHR1
cmVNYXBwZXIvVGV4dHVyZU1hcHBlck5vZGUgaW5zdGVhZCBvZiBwYXNzaW5nIHRoZW0gICAgICAg
aW4gYW4gb3B0aW9ucyBhcmd1bWVudC4KICAgICAzLiBSZW5hbWUgUGxhdGZvcm1MYXllclByb3h5
UXQgdG8gVGV4dHVyZU1hcHBlck5vZGVDbGllbnQuCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNSArKwogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaCAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwICAgICAgICAgICAgICAgICB8ICAgMzAgKystCiBTb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuaCAgICAgICAgICAgICAgICAgICB8ICAgIDQgKy0K
IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmggICAgICAgICAgICAgICAgIHwgICAg
NiArLQogU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDQwICsrKysKIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
UXQuY3BwIHwgICAgMiArLQogU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xp
ZW50UXQuY3BwICAgfCAgMjM1ICsrKysrKysrLS0tLS0tLS0tLS0tCiBTb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oICAgICB8ICAgMzYgKystCiA5IGZpbGVzIGNo
YW5nZWQsIDE5NSBpbnNlcnRpb25zKCspLCAxNzUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDdlZTcwZjMuLmExNDhhNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTUsNiArNSwyMSBAQAogICAgICAgICBb
VGV4bWFwXVtRdF0gVXBzdHJlYW0gdGV4dHVyZS1tYXBwZXIgY2hhbmdlcyBmcm9tIFF0J3MgV2Vi
S2l0MiBicmFuY2gKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYwNDM5CiAKKyAgICAgICAgUGF0Y2ggMTAvMTA6IEdsdWUgdGhlIFRleHR1cmVNYXBwZXIg
cmVmYWN0b3JpbmcgaW50byBXZWJraXQoMSkuCisgICAgICAgIFBhc3MgYSBHcmFwaGljc0xheWVy
KiBpbnN0ZWFkIG9mIGEgUGxhdGZvcm1MYXllciogdG8gdGhlIFFXZWJQYWdlQ2xpZW50LgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gVGVzdHMgaW4gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcgY292
ZXIgdGhpcy4KKworICAgICAgICAqIHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50Lmg6CisgICAg
ICAgIChRV2ViUGFnZUNsaWVudDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorCisyMDExLTA1LTA3
ICBOb2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVGV4bWFwXVtRdF0gVXBzdHJl
YW0gdGV4dHVyZS1tYXBwZXIgY2hhbmdlcyBmcm9tIFF0J3MgV2ViS2l0MiBicmFuY2gKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNDM5CisKICAgICAg
ICAgUGF0Y2ggOS8xMDogUmVmYWN0b3IgVGV4dHVyZU1hcHBlck5vZGUgZm9yIHBlcmZvcm1hbmNl
LCByZWFkYWJpbGl0eSBhbmQgYWNjdXJhY3kuCiAgICAgICAgIENoYW5nZXMgaW5jbHVkZToKICAg
ICAgICAgMS4gYW5pbWF0aW9ucyBhcmUgaW1wbGVtZW50ZWQgaW5zaWRlIFRleHR1cmVNYXBwZXJO
b2RlLCB0byBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gQW5pbWF0aW9uQ29udHJvbGxlci4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oCmluZGV4IGQ4ZjQxNzEuLjgz
OTZjYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdlQ2xp
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaApA
QCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9k
RW5hYmxlZChib29sIGVuYWJsZSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpbnB1dE1ldGhvZEVu
YWJsZWQoKSBjb25zdCA9IDA7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAg
IHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVy
KiBsYXllcikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyKSB7IH0KIAogICAgIC8vIHRoaXMgZ2V0cyBjYWxsZWQg
d2hlbiB0aGUgY29tcG9zaXRvciB3YW50cyB1cyB0byBzeW5jIHRoZSBsYXllcnMKICAgICAvLyBp
ZiBzY2hlZHVsZVN5bmMgaXMgdHJ1ZSwgd2Ugc2NoZWR1bGUgYSBzeW5jIG91cnNlbHZlcy4gb3Ro
ZXJ3aXNlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBi
L1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKaW5kZXggODU3Y2E2My4uOWU4OTc1
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCkBAIC05OCw3ICs5OCw3IEBACiAjZW5k
aWYKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBw
ZXIuaCIKLSNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKKyNp
bmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCIKICNlbmRpZgogI2luY2x1ZGUgInd0
Zi9IYXNoTWFwLmgiCiAjaW5jbHVkZSA8UU11bHRpTWFwPgpAQCAtMzIxLDI0ICszMjEsMjggQEAg
dm9pZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJGcm9tVGlsZWRCYWNraW5nU3RvcmUoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb24KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
ICYmIFVTRShURVhUVVJFX01BUFBFUikKIHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyQ29t
cG9zaXRlZExheWVycyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNs
aXApCiB7Ci0gICAgaWYgKCFyb290R3JhcGhpY3NMYXllcikKKyAgICBpZiAoIXJvb3RUZXh0dXJl
TWFwcGVyTm9kZSB8fCAhdGV4dHVyZU1hcHBlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgdGV4
dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIHRleHR1cmVNYXBw
ZXItPnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dC0+aW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSgpKTsKICAgICB0ZXh0dXJlTWFwcGVyLT5zZXRUZXh0RHJhd2luZ01vZGUoY29u
dGV4dC0+dGV4dERyYXdpbmdNb2RlKCkpOworICAgIHRleHR1cmVNYXBwZXItPnNldFZpZXdwb3J0
U2l6ZShmcmFtZS0+dmlldygpLT5mcmFtZVJlY3QoKS5zaXplKCkpOwogICAgIFFQYWludGVyKiBw
YWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgRnJhbWVWaWV3KiB2aWV3
ID0gZnJhbWUtPnZpZXcoKTsKLSAgICBwYWludGVyLT5zYXZlKCk7Ci0gICAgcGFpbnRlci0+YmVn
aW5OYXRpdmVQYWludGluZygpOwotICAgIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXI6OlBhaW50
T3B0aW9ucyBvcHRpb25zOwotICAgIG9wdGlvbnMudmlzaWJsZVJlY3QgPSBjbGlwOwotICAgIG9w
dGlvbnMudGFyZ2V0UmVjdCA9IHZpZXctPmZyYW1lUmVjdCgpOwotICAgIG9wdGlvbnMudmlld3Bv
cnRTaXplID0gdmlldy0+c2l6ZSgpOwotICAgIG9wdGlvbnMub3BhY2l0eSA9IHBhaW50ZXItPm9w
YWNpdHkoKTsKLSAgICByb290R3JhcGhpY3NMYXllci0+cGFpbnQodGV4dHVyZU1hcHBlci5nZXQo
KSwgb3B0aW9ucyk7Ci0gICAgcGFpbnRlci0+ZW5kTmF0aXZlUGFpbnRpbmcoKTsKLSAgICBwYWlu
dGVyLT5yZXN0b3JlKCk7CisgICAgY29uc3QgUVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBwYWludGVy
LT53b3JsZFRyYW5zZm9ybSgpOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJp
eCgKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0ubTExKCksIHRyYW5zZm9ybS5tMTIoKSwgMCwg
dHJhbnNmb3JtLm0xMygpLAorICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5tMjEoKSwgdHJhbnNm
b3JtLm0yMigpLCAwLCB0cmFuc2Zvcm0ubTIzKCksCisgICAgICAgICAgICAgICAgMCwgMCwgMSwg
MCwKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0ubTMxKCksIHRyYW5zZm9ybS5tMzIoKSwgMCwg
dHJhbnNmb3JtLm0zMygpCisgICAgICAgICAgICAgICAgKTsKKyAgICByb290VGV4dHVyZU1hcHBl
ck5vZGUtPnNldFRyYW5zZm9ybShtYXRyaXgpOworICAgIHJvb3RUZXh0dXJlTWFwcGVyTm9kZS0+
c2V0T3BhY2l0eShwYWludGVyLT5vcGFjaXR5KCkpOworICAgIHRleHR1cmVNYXBwZXItPmJlZ2lu
UGFpbnRpbmcoKTsKKyAgICB0ZXh0dXJlTWFwcGVyLT5iZWdpbkNsaXAobWF0cml4LCBjbGlwKTsK
KyAgICByb290VGV4dHVyZU1hcHBlck5vZGUtPnBhaW50KCk7CisgICAgdGV4dHVyZU1hcHBlci0+
ZW5kQ2xpcCgpOworICAgIHRleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7CiB9CiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmggYi9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuaAppbmRleCAzYzVhMjhlLi40ZmI2ZjFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViZnJhbWUuaApAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgV2lkZ2V0UHJpdmF0ZTsKICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVudFF0
OwogICAgIGNsYXNzIENocm9tZUNsaWVudFF0OwotICAgIGNsYXNzIFBsYXRmb3JtTGF5ZXJQcm94
eVF0OworICAgIGNsYXNzIFRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ7CiB9CiBjbGFzcyBRV2Vi
RnJhbWVEYXRhOwogY2xhc3MgUVdlYkhpdFRlc3RSZXN1bHRQcml2YXRlOwpAQCAtMjMyLDcgKzIz
Miw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OldpZGdldFByaXZhdGU7
CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ7CiAgICAgZnJp
ZW5kIGNsYXNzIFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OwotICAgIGZyaWVuZCBjbGFzcyBXZWJD
b3JlOjpQbGF0Zm9ybUxheWVyUHJveHlRdDsKKyAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGVDbGllbnRRdDsKICAgICBRV2ViRnJhbWVQcml2YXRlICpkOwogICAgIFFf
UFJJVkFURV9TTE9UKGQsIHZvaWQgX3Ffb3JpZW50YXRpb25DaGFuZ2VkKCkpCiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaCBiL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJmcmFtZV9wLmgKaW5kZXggNDEwODk3Mi4uNzcxZTY4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2ViZnJhbWVfcC5oCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBGcmFtZVZpZXc7CiAgICAgY2xhc3MgSFRNTEZyYW1lT3duZXJFbGVtZW50Owog
ICAgIGNsYXNzIFNjcm9sbGJhcjsKLSAgICBjbGFzcyBUZXh0dXJlTWFwcGVyQ29udGVudExheWVy
OworICAgIGNsYXNzIFRleHR1cmVNYXBwZXJOb2RlOwogfQogY2xhc3MgUVdlYlBhZ2U7CiAKQEAg
LTgyLDcgKzgyLDcgQEAgcHVibGljOgogICAgICAgICAsIG1hcmdpbldpZHRoKC0xKQogICAgICAg
ICAsIG1hcmdpbkhlaWdodCgtMSkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
IFVTRShURVhUVVJFX01BUFBFUikKLSAgICAgICAgLCByb290R3JhcGhpY3NMYXllcigwKQorICAg
ICAgICAsIHJvb3RUZXh0dXJlTWFwcGVyTm9kZSgwKQogI2VuZGlmCiAgICAgICAgIHt9CiAgICAg
dm9pZCBpbml0KFFXZWJGcmFtZSogcWZyYW1lLCBRV2ViRnJhbWVEYXRhKiBmcmFtZURhdGEpOwpA
QCAtMTIwLDcgKzEyMCw3IEBAIHB1YmxpYzoKICAgICBpbnQgbWFyZ2luV2lkdGg7CiAgICAgaW50
IG1hcmdpbkhlaWdodDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShU
RVhUVVJFX01BUFBFUikKLSAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ29udGVudExheWVyKiBy
b290R3JhcGhpY3NMYXllcjsKKyAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZSogcm9vdFRl
eHR1cmVNYXBwZXJOb2RlOwogICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiB0ZXh0
dXJlTWFwcGVyOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggMjM4NjExZi4uNDZkZTkzYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9xdC9DaGFuZ2VMb2cKQEAgLTIsNiArMiw0NiBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIFtUZXhtYXBdW1F0XSBVcHN0cmVhbSB0ZXh0dXJlLW1h
cHBlciBjaGFuZ2VzIGZyb20gUXQncyBXZWJLaXQyIGJyYW5jaAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA0MzkKKworICAgICAgICBQYXRjaCAxMC8x
MDogR2x1ZSB0aGUgVGV4dHVyZU1hcHBlciByZWZhY3RvcmluZyBpbnRvIFdlYmtpdCgxKS4KKyAg
ICAgICAgMS4gUGFzcyBhIEdyYXBoaWNzTGF5ZXIqIGluc3RlYWQgb2YgYSBQbGF0Zm9ybUxheWVy
KiB0byB0aGUgUVdlYlBhZ2VDbGllbnQuCisgICAgICAgIDIuIFNldCBwYXJhbWV0ZXJzIGluIFRl
eHR1cmVNYXBwZXIvVGV4dHVyZU1hcHBlck5vZGUgaW5zdGVhZCBvZiBwYXNzaW5nIHRoZW0gaW4g
YW4gb3B0aW9ucyBhcmd1bWVudC4KKyAgICAgICAgMy4gUmVuYW1lIFBsYXRmb3JtTGF5ZXJQcm94
eVF0IHRvIFRleHR1cmVNYXBwZXJOb2RlQ2xpZW50CisKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1l
LmNwcDoKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMp
OgorICAgICAgICAqIEFwaS9xd2ViZnJhbWUuaDoKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lX3Au
aDoKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OlFXZWJGcmFtZVByaXZhdGUpOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9tZUNsaWVudFF0OjphdHRhY2hSb290R3JhcGhpY3NMYXllcik6CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlQ2xpZW50UXQ6OlRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdDo6c2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ6OnNldFRleHR1cmVNYXBwZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdDo6flRleHR1cmVNYXBwZXJO
b2RlQ2xpZW50UXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGVDbGllbnRR
dDo6Y29tcHV0ZUxhc3RNb2RpZmllZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGVDbGllbnRRdDo6c3luY1Jvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyTm9kZUNsaWVudFF0Ojpyb290Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Q2xpZW50UVdpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZUNsaWVudFFXaWRnZXQ6OnN5bmNMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNs
aWVudFFXaWRnZXQ6On5QYWdlQ2xpZW50UVdpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Q2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp+UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp1cGRhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c3luY0xheWVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjptYXJr
Rm9yU3luYyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6UGFnZUNsaWVudFFXaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6UGFnZUNsaWVudFFHcmFw
aGljc1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0
OjpzeW5jTGF5ZXJzVGltZW91dCk6CisKKzIwMTEtMDUtMDcgIE5vYW0gUm9zZW50aGFsICA8bm9h
bS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCiAgICAgICAgIFtUZXhtYXBdIFVwc3RyZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5nZXMg
ZnJvbSBRdCdzIFdlYktpdDIgYnJhbmNoCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MDQzOQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCmluZGV4IGVhMmM4MjYuLjA0MDRlZmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3Bw
CkBAIC02MjEsNyArNjIxLDcgQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0Q3Vyc29yKGNvbnN0
IEN1cnNvciYgY3Vyc29yKQogdm9pZCBDaHJvbWVDbGllbnRRdDo6YXR0YWNoUm9vdEdyYXBoaWNz
TGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQogewogICAg
IGlmIChwbGF0Zm9ybVBhZ2VDbGllbnQoKSkKLSAgICAgICAgcGxhdGZvcm1QYWdlQ2xpZW50KCkt
PnNldFJvb3RHcmFwaGljc0xheWVyKGdyYXBoaWNzTGF5ZXIgPyBncmFwaGljc0xheWVyLT5wbGF0
Zm9ybUxheWVyKCkgOiAwKTsKKyAgICAgICAgcGxhdGZvcm1QYWdlQ2xpZW50KCktPnNldFJvb3RH
cmFwaGljc0xheWVyKGdyYXBoaWNzTGF5ZXIpOwogfQogCiB2b2lkIENocm9tZUNsaWVudFF0Ojpz
ZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcAppbmRleCAxODIxYmVjLi5hMTY1
Njg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGll
bnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50
UXQuY3BwCkBAIC0xOSwxNDggKzE5LDc5IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
CiAjaW5jbHVkZSAiUGFnZUNsaWVudFF0LmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclF0Lmgi
Ci0jaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCisKICNpbmNs
dWRlIDxRR3JhcGhpY3NTY2VuZT4KICNpbmNsdWRlIDxRR3JhcGhpY3NWaWV3PgogI2lmIGRlZmlu
ZWQoUV9XU19YMTEpCiAjaW5jbHVkZSA8UVgxMUluZm8+CiAjZW5kaWYKIAorI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJRdC5oIgorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIgor
CiAjaWZkZWYgUVRfT1BFTkdMX0xJQgogI2luY2x1ZGUgIm9wZW5nbC9UZXh0dXJlTWFwcGVyR0wu
aCIKLSNpbmNsdWRlIDxRR0xXaWRnZXQ+CisjZW5kaWYKICNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJF
X01BUFBFUikgICAgCi1jbGFzcyBQbGF0Zm9ybUxheWVyUHJveHlRdCA6IHB1YmxpYyBRT2JqZWN0
LCBwdWJsaWMgdmlydHVhbCBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQgewotcHVibGljOgotICAg
IFBsYXRmb3JtTGF5ZXJQcm94eVF0KFFXZWJGcmFtZSogZnJhbWUsIFRleHR1cmVNYXBwZXJDb250
ZW50TGF5ZXIqIGxheWVyLCBRT2JqZWN0KiBvYmplY3QpCi0gICAgICAgIDogUU9iamVjdChvYmpl
Y3QpCi0gICAgICAgICwgbV9mcmFtZShmcmFtZSkKLSAgICAgICAgLCBtX2xheWVyKGxheWVyKQot
ICAgIHsKLSAgICAgICAgaWYgKG1fbGF5ZXIpCi0gICAgICAgICAgICBtX2xheWVyLT5zZXRQbGF0
Zm9ybUxheWVyQ2xpZW50KHRoaXMpOwotICAgICAgICBtX2ZyYW1lLT5kLT5yb290R3JhcGhpY3NM
YXllciA9IG1fbGF5ZXI7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRUZXh0dXJlTWFwcGVyKFBhc3NP
d25QdHI8VGV4dHVyZU1hcHBlcj4gdGV4dHVyZU1hcHBlcikKLSAgICB7Ci0gICAgICAgIG1fZnJh
bWUtPmQtPnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVyOwotICAgIH0KLQotICAgIHZpcnR1
YWwgflBsYXRmb3JtTGF5ZXJQcm94eVF0KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2xheWVyKQot
ICAgICAgICAgICAgbV9sYXllci0+c2V0UGxhdGZvcm1MYXllckNsaWVudCgwKTsKLSAgICAgICAg
aWYgKG1fZnJhbWUtPmQpCi0gICAgICAgICAgICBtX2ZyYW1lLT5kLT5yb290R3JhcGhpY3NMYXll
ciA9IDA7Ci0gICAgfQotCi0gICAgdmlydHVhbCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ZyYW1lLT5kLT50ZXh0dXJlTWFwcGVyLmdldCgp
OwotICAgIH0KLQotICAgIC8vIFNpbmNlIHdlIGp1c3QgcGFpbnQgdGhlIGNvbXBvc2l0ZWQgdHJl
ZSBhbmQgbmV2ZXIgY3JlYXRlIGEgc3BlY2lhbCBpdGVtIGZvciBpdCwgd2UgZG9uJ3QgaGF2ZSB0
byBoYW5kbGUgaXRzIHNpemUgY2hhbmdlcy4KLSAgICB2b2lkIHNldFNpemVDaGFuZ2VkKGNvbnN0
IEludFNpemUmKSB7IH0KLQotcHJpdmF0ZToKLSAgICBRV2ViRnJhbWUqIG1fZnJhbWU7Ci0gICAg
VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllciogbV9sYXllcjsKLX07Ci0KLWNsYXNzIFBsYXRmb3Jt
TGF5ZXJQcm94eVFXaWRnZXQgOiBwdWJsaWMgUGxhdGZvcm1MYXllclByb3h5UXQgewotcHVibGlj
OgotICAgIFBsYXRmb3JtTGF5ZXJQcm94eVFXaWRnZXQoUVdlYkZyYW1lKiBmcmFtZSwgVGV4dHVy
ZU1hcHBlckNvbnRlbnRMYXllciogbGF5ZXIsIFFXaWRnZXQqIHdpZGdldCkKLSAgICAgICAgOiBQ
bGF0Zm9ybUxheWVyUHJveHlRdChmcmFtZSwgbGF5ZXIsIHdpZGdldCkKLSAgICAgICAgLCBtX3dp
ZGdldCh3aWRnZXQpCi0gICAgewotICAgICAgICBpZiAobV93aWRnZXQpCi0gICAgICAgICAgICBt
X3dpZGdldC0+aW5zdGFsbEV2ZW50RmlsdGVyKHRoaXMpOwotCi0gICAgICAgIGlmICh0ZXh0dXJl
TWFwcGVyKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgc2V0VGV4dHVyZU1hcHBl
cihUZXh0dXJlTWFwcGVyUXQ6OmNyZWF0ZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBkb24ndCB3
YW50IGEgaHVnZSByZWdpb24tY2xpcCBvbiB0aGUgY29tcG9zaXRpbmcgbGF5ZXJzOyBpbnN0ZWFk
IHdlIHVuaXRlIHRoZSByZWN0YW5nbGVzIHRvZ2V0aGVyCi0gICAgLy8gYW5kIGNsZWFyIHRoZW0g
d2hlbiB0aGUgcGFpbnQgYWN0dWFsbHkgb2NjdXJzLgotICAgIGJvb2wgZXZlbnRGaWx0ZXIoUU9i
amVjdCogb2JqZWN0LCBRRXZlbnQqIGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKG9iamVjdCA9
PSBtX3dpZGdldCAmJiBldmVudC0+dHlwZSgpID09IFFFdmVudDo6UGFpbnQpCi0gICAgICAgICAg
ICBtX2RpcnR5UmVjdCA9IFFSZWN0KCk7Ci0gICAgICAgIHJldHVybiBRT2JqZWN0OjpldmVudEZp
bHRlcihvYmplY3QsIGV2ZW50KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgp
Ci0gICAgewotICAgICAgICBpZiAobV93aWRnZXQpCi0gICAgICAgICAgICBtX3dpZGdldC0+dXBk
YXRlKCk7Ci0gICAgfQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRF
WFRVUkVfTUFQUEVSKQorVGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdDo6VGV4dHVyZU1hcHBlck5v
ZGVDbGllbnRRdChRV2ViRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiBsYXllcikKKyAgICA6
IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3Jvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXI6
OmNyZWF0ZSgwKSkKK3sKKyAgICBtX2ZyYW1lLT5kLT5yb290VGV4dHVyZU1hcHBlck5vZGUgPSBy
b290Tm9kZSgpOworICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPmFkZENoaWxkKGxheWVyKTsKKyAg
ICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9v
dEdyYXBoaWNzTGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOworICAgIG1fcm9vdEdyYXBo
aWNzTGF5ZXItPnNldFNpemUoSW50U2l6ZSgxLCAxKSk7Cit9CiAKLSAgICB2b2lkIHNldE5lZWRz
RGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotICAgIHsKLSAgICAgICAgbV9kaXJ0
eVJlY3QgfD0gcmVjdDsKLSAgICAgICAgbV93aWRnZXQtPnVwZGF0ZShtX2RpcnR5UmVjdCk7Ci0g
ICAgfQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0OjpzY3JvbGwoZmxvYXQgZHgsIGZs
b2F0IGR5KQoreworICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBtX3Jvb3RHcmFwaGljc0xheWVy
LT5wb3NpdGlvbigpOworICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0
UG9pbnQocG9zaXRpb24ueCgpICsgZHgsIHBvc2l0aW9uLnkoKSArIGR5KSk7Cit9CiAKLXByaXZh
dGU6Ci0gICAgUVJlY3QgbV9kaXJ0eVJlY3Q7Ci0gICAgUVdpZGdldCogbV93aWRnZXQ7Ci19Owor
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0OjpzZXRUZXh0dXJlTWFwcGVyKGNvbnN0IFBh
c3NPd25QdHI8VGV4dHVyZU1hcHBlcj4mIHRleHR1cmVNYXBwZXIpCit7CisgICAgbV9mcmFtZS0+
ZC0+dGV4dHVyZU1hcHBlciA9IHRleHR1cmVNYXBwZXI7CisgICAgbV9mcmFtZS0+ZC0+cm9vdFRl
eHR1cmVNYXBwZXJOb2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fZnJhbWUtPmQtPnRleHR1cmVNYXBw
ZXIuZ2V0KCkpOworfQogCi0jaWYgIWRlZmluZWQoUVRfTk9fR1JBUEhJQ1NWSUVXKQotY2xhc3Mg
UGxhdGZvcm1MYXllclByb3h5UUdyYXBoaWNzT2JqZWN0IDogcHVibGljIFBsYXRmb3JtTGF5ZXJQ
cm94eVF0IHsKLXB1YmxpYzoKLSAgICBQbGF0Zm9ybUxheWVyUHJveHlRR3JhcGhpY3NPYmplY3Qo
UVdlYkZyYW1lKiBmcmFtZSwgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllciogbGF5ZXIsIFFHcmFw
aGljc09iamVjdCogb2JqZWN0KQotICAgICAgICA6IFBsYXRmb3JtTGF5ZXJQcm94eVF0KGZyYW1l
LCBsYXllciwgb2JqZWN0KQotICAgICAgICAsIG1fZ3JhcGhpY3NJdGVtKG9iamVjdCkKLSAgICB7
Ci0gICAgICAgIGlmICh0ZXh0dXJlTWFwcGVyKCkpCi0gICAgICAgICAgICByZXR1cm47CitUZXh0
dXJlTWFwcGVyTm9kZUNsaWVudFF0Ojp+VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdCgpCit7Cisg
ICAgbV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJOb2RlID0gMDsKK30KIAotI2lmZGVmIFFU
X09QRU5HTF9MSUIKLSAgICAgICAgUUdyYXBoaWNzVmlldyogdmlldyA9IG9iamVjdC0+c2NlbmUo
KS0+dmlld3MoKVswXTsKLSAgICAgICAgaWYgKHZpZXcgJiYgdmlldy0+dmlld3BvcnQoKSAmJiB2
aWV3LT52aWV3cG9ydCgpLT5pbmhlcml0cygiUUdMV2lkZ2V0IikpIHsKLSAgICAgICAgICAgIHNl
dFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBzZXRUZXh0dXJlTWFwcGVyKFRleHR1
cmVNYXBwZXJRdDo6Y3JlYXRlKCkpOwotICAgIH0KK1FSZWN0IFRleHR1cmVNYXBwZXJOb2RlQ2xp
ZW50UXQ6OmNvbXB1dGVMYXN0TW9kaWZpZWRSZWN0KCkKK3sKKyAgICByZXR1cm4gbV9mcmFtZS0+
ZC0+cm9vdFRleHR1cmVNYXBwZXJOb2RlLT5jb21wdXRlTGFzdE1vZGlmaWVkUmVjdCgpOworfQog
Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKQotICAgIHsKLSAgICAgICAgaWYgKG1fZ3JhcGhp
Y3NJdGVtKQotICAgICAgICAgICAgbV9ncmFwaGljc0l0ZW0tPnVwZGF0ZSgpOwotICAgIH0KK3Zv
aWQgVGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdDo6c3luY1Jvb3RMYXllcigpCit7CisgICAgbV9y
b290R3JhcGhpY3NMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7
Cit9CiAKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
KQotICAgIHsKLSAgICAgICAgaWYgKG1fZ3JhcGhpY3NJdGVtKQotICAgICAgICAgICAgbV9ncmFw
aGljc0l0ZW0tPnVwZGF0ZShRUmVjdEYocmVjdCkpOwotICAgIH0KK1RleHR1cmVNYXBwZXJOb2Rl
KiBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0Ojpyb290Tm9kZSgpCit7CisgICAgcmV0dXJuIHRv
VGV4dHVyZU1hcHBlck5vZGUobV9yb290R3JhcGhpY3NMYXllci5nZXQoKSk7Cit9CiAKLXByaXZh
dGU6Ci0gICAgUUdyYXBoaWNzSXRlbSogbV9ncmFwaGljc0l0ZW07Ci19OwotI2VuZGlmIC8vIFFU
X05PX0dSQVBISUNTVklFVwogCi12b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjpzZXRSb290R3JhcGhp
Y3NMYXllcihUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbGF5ZXIpCit2b2lkIFBhZ2VDbGll
bnRRV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKIHsK
ICAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgcGxhdGZvcm1MYXllclByb3h5ID0gbmV3IFBsYXRm
b3JtTGF5ZXJQcm94eVFXaWRnZXQocGFnZS0+bWFpbkZyYW1lKCksIHN0YXRpY19jYXN0PFRleHR1
cmVNYXBwZXJDb250ZW50TGF5ZXIqPihsYXllciksIHZpZXcpOworICAgICAgICB0ZXh0dXJlTWFw
cGVyTm9kZUNsaWVudCA9IGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0KHBh
Z2UtPm1haW5GcmFtZSgpLCBsYXllcikpOworICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVu
dC0+c2V0VGV4dHVyZU1hcHBlcihuZXcgVGV4dHVyZU1hcHBlclF0KTsKKyAgICAgICAgdGV4dHVy
ZU1hcHBlck5vZGVDbGllbnQtPnN5bmNSb290TGF5ZXIoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBkZWxldGUgcGxhdGZvcm1MYXllclByb3h5OwotICAgIHBsYXRmb3JtTGF5ZXJQcm94
eSA9IDA7CisgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQuY2xlYXIoKTsKIH0KIAogdm9pZCBQ
YWdlQ2xpZW50UVdpZGdldDo6bWFya0ZvclN5bmMoYm9vbCBzY2hlZHVsZVN5bmMpCkBAIC0xNzAs
NyArMTAxLDE0IEBAIHZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6Om1hcmtGb3JTeW5jKGJvb2wgc2No
ZWR1bGVTeW5jKQogCiB2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjpzeW5jTGF5ZXJzKFRpbWVyPFBh
Z2VDbGllbnRRV2lkZ2V0PiopCiB7CisgICAgaWYgKHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50KQor
ICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c3luY1Jvb3RMYXllcigpOwogICAgIFFX
ZWJGcmFtZVByaXZhdGU6OmNvcmUocGFnZS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21w
b3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisgICAgaWYgKCF0ZXh0dXJlTWFwcGVy
Tm9kZUNsaWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh0ZXh0dXJlTWFwcGVyTm9kZUNs
aWVudC0+cm9vdE5vZGUoKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMo
KSkKKyAgICAgICAgc3luY1RpbWVyLnN0YXJ0T25lU2hvdCgxLjAgLyA2MC4wKTsKKyAgICB1cGRh
dGUodmlldy0+cmVjdCgpKTsKIH0KICNlbmRpZgogCkBAIC0yMDEsOSArMTM5LDYgQEAgdm9pZCBQ
YWdlQ2xpZW50UVdpZGdldDo6c2V0SW5wdXRNZXRob2RIaW50cyhRdDo6SW5wdXRNZXRob2RIaW50
cyBoaW50cykKIAogUGFnZUNsaWVudFFXaWRnZXQ6On5QYWdlQ2xpZW50UVdpZGdldCgpCiB7Ci0j
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0g
ICAgZGVsZXRlIHBsYXRmb3JtTGF5ZXJQcm94eTsKLSNlbmRpZgogfQogCiAjaWZuZGVmIFFUX05P
X0NVUlNPUgpAQCAtMjYwLDE3ICsxOTUsMTMgQEAgUVJlY3RGIFBhZ2VDbGllbnRRV2lkZ2V0Ojp3
aW5kb3dSZWN0KCkgY29uc3QKIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6On5QYWdlQ2xpZW50
UUdyYXBoaWNzV2lkZ2V0KCkKIHsKICAgICBkZWxldGUgb3ZlcmxheTsKLSNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIGRlbGV0ZSBw
bGF0Zm9ybUxheWVyUHJveHk7Ci0jZWxzZQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykgJiYgIVVTRShURVhUVVJFX01BUFBFUikKICAgICBpZiAoIXJvb3RHcmFwaGljc0xheWVyKQog
ICAgICAgICByZXR1cm47CiAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBkZWxldGUgdGhlIHJvb3Qg
Z3JhcGhpY3MgbGF5ZXIuIFRoZSBsaWZlY3ljbGUgaXMgbWFuYWdlZCBpbiBHcmFwaGljc0xheWVy
UXQuY3BwLgogICAgIHJvb3RHcmFwaGljc0xheWVyLmRhdGEoKS0+c2V0UGFyZW50SXRlbSgwKTsK
ICAgICB2aWV3LT5zY2VuZSgpLT5yZW1vdmVJdGVtKHJvb3RHcmFwaGljc0xheWVyLmRhdGEoKSk7
CiAjZW5kaWYKLSNlbmRpZgogfQogCiB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNj
cm9sbChpbnQgZHgsIGludCBkeSwgY29uc3QgUVJlY3QmIHJlY3RUb1Njcm9sbCkKQEAgLTI4NSw3
ICsyMTYsNyBAQCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnVwZGF0ZShjb25zdCBR
UmVjdCYgZGlydHlSZWN0KQogICAgIGNyZWF0ZU9yRGVsZXRlT3ZlcmxheSgpOwogICAgIGlmIChv
dmVybGF5KQogICAgICAgICBvdmVybGF5LT51cGRhdGUoUVJlY3RGKGRpcnR5UmVjdCkpOwotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpICYmICFVU0UoVEVYVFVSRV9NQVBQRVIpCiAgICAgc3luY0xheWVycygpOwogI2VuZGlm
CiB9CkBAIC0zMjAsMjQgKzI1MSw0NSBAQCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6
OmNyZWF0ZU9yRGVsZXRlT3ZlcmxheSgpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzeW5jTGF5ZXJzKCkKIHsKLSAgICBp
ZiAoc2hvdWxkU3luYykgewotICAgICAgICBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKHBhZ2UtPm1h
aW5GcmFtZSgpKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1l
cygpOwotICAgICAgICBzaG91bGRTeW5jID0gZmFsc2U7Ci0gICAgfQorI2lmIFVTRShURVhUVVJF
X01BUFBFUikKKyAgICBpZiAodGV4dHVyZU1hcHBlck5vZGVDbGllbnQpCisgICAgICAgIHRleHR1
cmVNYXBwZXJOb2RlQ2xpZW50LT5zeW5jUm9vdExheWVyKCk7CisjZW5kaWYKKworICAgIFFXZWJG
cmFtZVByaXZhdGU6OmNvcmUocGFnZS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3Np
dGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIp
CisgICAgaWYgKCF0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5yb290Tm9kZSgpLT5kZXNjZW5kYW50c09y
U2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQorICAgICAgICBzeW5jVGltZXIuc3RhcnRPbmVT
aG90KDEuMCAvIDYwLjApOworICAgIHVwZGF0ZSh2aWV3LT5ib3VuZGluZ1JlY3QoKS50b0FsaWdu
ZWRSZWN0KCkpOworICAgIGlmICghc2hvdWxkU3luYykKKyAgICAgICAgcmV0dXJuOworICAgIHNo
b3VsZFN5bmMgPSBmYWxzZTsKKyNlbmRpZgogfQogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQot
dm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbGF5ZXIpCit2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NX
aWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAg
IGlmIChsYXllcikgewotICAgICAgICBwbGF0Zm9ybUxheWVyUHJveHkgPSBuZXcgUGxhdGZvcm1M
YXllclByb3h5UUdyYXBoaWNzT2JqZWN0KHBhZ2UtPm1haW5GcmFtZSgpLCBzdGF0aWNfY2FzdDxU
ZXh0dXJlTWFwcGVyQ29udGVudExheWVyKj4obGF5ZXIpLCB2aWV3KTsKKyAgICAgICAgdGV4dHVy
ZU1hcHBlck5vZGVDbGllbnQgPSBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlck5vZGVDbGllbnRR
dChwYWdlLT5tYWluRnJhbWUoKSwgbGF5ZXIpKTsKKyNpZmRlZiBRVF9PUEVOR0xfTElCCisgICAg
ICAgIFFHcmFwaGljc1ZpZXcqIGdyYXBoaWNzVmlldyA9IHZpZXctPnNjZW5lKCktPnZpZXdzKClb
MF07CisgICAgICAgIGlmIChncmFwaGljc1ZpZXcgJiYgZ3JhcGhpY3NWaWV3LT52aWV3cG9ydCgp
ICYmIGdyYXBoaWNzVmlldy0+dmlld3BvcnQoKS0+aW5oZXJpdHMoIlFHTFdpZGdldCIpKSB7Cisg
ICAgICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0
dXJlTWFwcGVyR0w6OmNyZWF0ZSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
I2VuZGlmCisgICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zZXRUZXh0dXJlTWFwcGVy
KFRleHR1cmVNYXBwZXJRdDo6Y3JlYXRlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IGRlbGV0ZSBwbGF0Zm9ybUxheWVyUHJveHk7Ci0gICAgcGxhdGZvcm1MYXllclByb3h5ID0gMDsK
KyAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC5jbGVhcigpOwogfQogI2Vsc2UKLXZvaWQgUGFn
ZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzT2Jq
ZWN0KiBsYXllcikKK3ZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBo
aWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgaWYgKHJvb3RHcmFwaGljc0xh
eWVyKSB7CiAgICAgICAgIHJvb3RHcmFwaGljc0xheWVyLmRhdGEoKS0+c2V0UGFyZW50SXRlbSgw
KTsKQEAgLTM0NSwxMiArMjk3LDEyIEBAIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6
c2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzT2JqZWN0KiBsYXllcikKICAgICAgICAgUVdl
YkZyYW1lUHJpdmF0ZTo6Y29yZShwYWdlLT5tYWluRnJhbWUoKSktPnZpZXcoKS0+c3luY0NvbXBv
c2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKICAgICB9CiAKLSAgICByb290R3JhcGhp
Y3NMYXllciA9IGxheWVyOworICAgIHJvb3RHcmFwaGljc0xheWVyID0gbGF5ZXIgPyBsYXllci0+
cGxhdGZvcm1MYXllcigpIDogMDsKIAotICAgIGlmIChsYXllcikgewotICAgICAgICBsYXllci0+
c2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJdGVtQ2xpcHNDaGlsZHJlblRvU2hhcGUsIHRydWUpOwot
ICAgICAgICBsYXllci0+c2V0UGFyZW50SXRlbSh2aWV3KTsKLSAgICAgICAgbGF5ZXItPnNldFpW
YWx1ZShSb290R3JhcGhpY3NMYXllclpWYWx1ZSk7CisgICAgaWYgKHJvb3RHcmFwaGljc0xheWVy
KSB7CisgICAgICAgIHJvb3RHcmFwaGljc0xheWVyLmRhdGEoKS0+c2V0RmxhZyhRR3JhcGhpY3NJ
dGVtOjpJdGVtQ2xpcHNDaGlsZHJlblRvU2hhcGUsIHRydWUpOworICAgICAgICByb290R3JhcGhp
Y3NMYXllci5kYXRhKCktPnNldFBhcmVudEl0ZW0odmlldyk7CisgICAgICAgIHJvb3RHcmFwaGlj
c0xheWVyLmRhdGEoKS0+c2V0WlZhbHVlKFJvb3RHcmFwaGljc0xheWVyWlZhbHVlKTsKICAgICB9
CiAgICAgY3JlYXRlT3JEZWxldGVPdmVybGF5KCk7CiB9CkBAIC0zNTksOCArMzExLDcgQEAgdm9p
ZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihRR3JhcGhp
Y3NPYmplY3QqIGxheWVyKQogdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjptYXJrRm9y
U3luYyhib29sIHNjaGVkdWxlU3luYykKIHsKICAgICBzaG91bGRTeW5jID0gdHJ1ZTsKLSAgICBp
ZiAoc2NoZWR1bGVTeW5jKQotICAgICAgICBzeW5jTWV0YU1ldGhvZC5pbnZva2UodmlldywgUXQ6
OlF1ZXVlZENvbm5lY3Rpb24pOworICAgIHN5bmNUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdl
Q2xpZW50UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0
LmgKaW5kZXggMTZiYjUwYy4uYWZjMTgxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCkBAIC00MSwxMiArNDEsMjUgQEAKIAogI2luY2x1ZGUg
PFNldHRpbmdzLmg+CiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotI2luY2x1ZGUgInRleG1hcC9U
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgorY2xhc3MgVGV4dHVyZU1hcHBlck5vZGVDbGll
bnRRdCB7CitwdWJsaWM6CisgICAgVGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdChRV2ViRnJhbWUq
IGZyYW1lLCBHcmFwaGljc0xheWVyKiBsYXllcik7CisgICAgdm9pZCBzY3JvbGwoZmxvYXQgZHgs
IGZsb2F0IGR5KTsKKyAgICB2b2lkIHNldFRleHR1cmVNYXBwZXIoY29uc3QgUGFzc093blB0cjxU
ZXh0dXJlTWFwcGVyPiYgdGV4dHVyZU1hcHBlcik7CisgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBl
ck5vZGVDbGllbnRRdCgpOworICAgIFFSZWN0IGNvbXB1dGVMYXN0TW9kaWZpZWRSZWN0KCk7Cisg
ICAgdm9pZCBzeW5jUm9vdExheWVyKCk7CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIHJvb3ROb2Rl
KCk7CisKK3Byb3RlY3RlZDoKKyAgICBRV2ViRnJhbWUqIG1fZnJhbWU7CisgICAgT3duUHRyPEdy
YXBoaWNzTGF5ZXI+IG1fcm9vdEdyYXBoaWNzTGF5ZXI7Cit9OwogI2VuZGlmCiAKLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQogY2xhc3MgUGFnZUNsaWVudFFXaWRnZXQgOiBwdWJsaWMgUVdlYlBhZ2VD
bGllbnQgewogcHVibGljOgogICAgIFBhZ2VDbGllbnRRV2lkZ2V0KFFXaWRnZXQqIG5ld1ZpZXcs
IFFXZWJQYWdlKiBuZXdQYWdlKQpAQCAtNTQsNyArNjcsNiBAQCBwdWJsaWM6CiAgICAgICAgICwg
cGFnZShuZXdQYWdlKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRF
WFRVUkVfTUFQUEVSKQogICAgICAgICAsIHN5bmNUaW1lcih0aGlzLCAmUGFnZUNsaWVudFFXaWRn
ZXQ6OnN5bmNMYXllcnMpCi0gICAgICAgICwgcGxhdGZvcm1MYXllclByb3h5KDApCiAjZW5kaWYK
ICAgICB7CiAgICAgICAgIFFfQVNTRVJUKHZpZXcpOwpAQCAtOTEsNyArMTAzLDcgQEAgcHVibGlj
OgogICAgIFFXZWJQYWdlKiBwYWdlOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgdmlydHVhbCB2b2lkIHNldFJvb3RHcmFwaGlj
c0xheWVyKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBsYXllcik7CisgICAgdmlydHVhbCB2
b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZv
aWQgbWFya0ZvclN5bmMoYm9vbCBzY2hlZHVsZVN5bmMpOwogICAgIHZvaWQgc3luY0xheWVycyhU
aW1lcjxQYWdlQ2xpZW50UVdpZGdldD4qKTsKICNlbmRpZgpAQCAtMTA0LDcgKzExNiw3IEBAIHB1
YmxpYzoKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQogICAgIFRpbWVyPFBhZ2VDbGllbnRRV2lkZ2V0PiBzeW5jVGltZXI7Ci0gICAgUGxh
dGZvcm1MYXllclByb3h5UXQqIHBsYXRmb3JtTGF5ZXJQcm94eTsKKyAgICBPd25QdHI8VGV4dHVy
ZU1hcHBlck5vZGVDbGllbnRRdD4gdGV4dHVyZU1hcHBlck5vZGVDbGllbnQ7CiAjZW5kaWYKIH07
CiAKQEAgLTE1MCw5ICsxNjIsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgcGFnZShuZXdQYWdlKQog
ICAgICAgICAsIHZpZXdSZXNpemVzVG9Db250ZW50cyhmYWxzZSkKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgICAgICAsIHBsYXRm
b3JtTGF5ZXJQcm94eSgwKQotI2VuZGlmCisgICAgICAgICwgc3luY1RpbWVyKHRoaXMsICZQYWdl
Q2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzeW5jTGF5ZXJzVGltZW91dCkKICAgICAgICAgLCBzaG91
bGRTeW5jKGZhbHNlKQogI2VuZGlmCiAgICAgICAgICwgb3ZlcmxheSgwKQpAQCAtMTYyLDcgKzE3
Miw2IEBAIHB1YmxpYzoKICAgICAgICAgLy8gdGhlIG92ZXJsYXkgYW5kIHN0YXlzIGFsaXZlIGZv
ciB0aGUgbGlmZXRpbWUgb2YKICAgICAgICAgLy8gdGhpcyBRR3JhcGhpY3NXZWJWaWV3IGFzIHRo
ZSBzY3JvbGxiYXJzIGFyZSBuZWVkZWQgd2hlbiB0aGVyZSdzIG5vIGNvbXBvc2l0aW5nCiAgICAg
ICAgIHZpZXctPnNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbVVzZXNFeHRlbmRlZFN0eWxlT3B0
aW9uKTsKLSAgICAgICAgc3luY01ldGFNZXRob2QgPSB2aWV3LT5tZXRhT2JqZWN0KCktPm1ldGhv
ZCh2aWV3LT5tZXRhT2JqZWN0KCktPmluZGV4T2ZNZXRob2QoInN5bmNMYXllcnMoKSIpKTsKICNl
bmRpZgogICAgIH0KIApAQCAtMjAwLDkgKzIwOSwxMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdEdy
YXBoaWNzTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRS
b290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIG1hcmtG
b3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKTsKICAgICB2b2lkIHN5bmNMYXllcnMoKTsKKyAgICB2
b2lkIHN5bmNMYXllcnNUaW1lb3V0KFRpbWVyPFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ+Kikg
eyBzeW5jTGF5ZXJzKCk7IH0KIAogICAgIC8vIFFHcmFwaGljc1dlYlZpZXcgY2FuIHJlbmRlciBj
b21wb3NpdGVkIGxheWVycwogICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMjE2LDEyICsyMjYsMTIgQEAgcHVi
bGljOgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2lmIFVTRShURVhUVVJF
X01BUFBFUikKLSAgICBQbGF0Zm9ybUxheWVyUHJveHlRdCogcGxhdGZvcm1MYXllclByb3h5Owor
ICAgIE93blB0cjxUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0PiB0ZXh0dXJlTWFwcGVyTm9kZUNs
aWVudDsKICNlbHNlCiAgICAgUVdlYWtQb2ludGVyPFFHcmFwaGljc09iamVjdD4gcm9vdEdyYXBo
aWNzTGF5ZXI7CiAjZW5kaWYKICAgICAvLyB3ZSBoYXZlIHRvIGZsdXNoIHF1aXRlIG9mdGVuLCBz
byB3ZSB1c2UgYSBtZXRhLW1ldGhvZCBpbnN0ZWFkIG9mIFFUaW1lcjo6c2luZ2xlU2hvdCBmb3Ig
cHV0dGluZyB0aGUgZXZlbnQgaW4gdGhlIHF1ZXVlCi0gICAgUU1ldGFNZXRob2Qgc3luY01ldGFN
ZXRob2Q7CisgICAgVGltZXI8UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldD4gc3luY1RpbWVyOwog
CiAgICAgLy8gd2UgbmVlZCB0byBzeW5jIHRoZSBsYXllcnMgaWYgd2UgZ2V0IGEgc3BlY2lhbCBj
YWxsIGZyb20gdGhlIFdlYkNvcmUKICAgICAvLyBjb21wb3NpdG9yIHRlbGxpbmcgdXMgdG8gZG8g
c28uIFdlJ2xsIGdldCB0aGF0IGNhbGwgZnJvbSBDaHJvbWVDbGllbnRRdAotLSAKMS43LjMuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92742</attachid>
            <date>2011-05-08 12:58:34 -0700</date>
            <delta_ts>2011-05-09 01:10:48 -0700</delta_ts>
            <desc>Patch 10: Glue layer</desc>
            <filename>0001-Glue-the-TextureMapper-refactoring-into-Webkit-1.patch</filename>
            <type>text/plain</type>
            <size>24991</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSBiM2Q0OTMzMjI1YzBiMGZmMmFlZTZiYzUyMmM2MGMyZjI2YjI5Mzk3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgpEYXRlOiBTYXQsIDcgTWF5IDIwMTEgMTg6NTc6NDIgLTA3MDAKU3ViamVjdDogW1BBVENI
XSBHbHVlIHRoZSBUZXh0dXJlTWFwcGVyIHJlZmFjdG9yaW5nIGludG8gV2Via2l0KDEpLgogICAg
IDEuIFBhc3MgYSBHcmFwaGljc0xheWVyKiBpbnN0ZWFkIG9mIGEgUGxhdGZvcm1MYXllciogdG8g
dGhlIFFXZWJQYWdlQ2xpZW50LgogICAgIDIuIFNldCBwYXJhbWV0ZXJzIGluIFRleHR1cmVNYXBw
ZXIvVGV4dHVyZU1hcHBlck5vZGUgaW5zdGVhZCBvZiBwYXNzaW5nIHRoZW0gICAgICAgaW4gYW4g
b3B0aW9ucyBhcmd1bWVudC4KICAgICAzLiBSZW5hbWUgUGxhdGZvcm1MYXllclByb3h5UXQgdG8g
VGV4dHVyZU1hcHBlck5vZGVDbGllbnQuCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNSArKwogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvUVdlYlBhZ2VDbGllbnQuaCAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2ViZnJhbWUuY3BwICAgICAgICAgICAgICAgICB8ICAgMzAgKystCiBTb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2ViZnJhbWUuaCAgICAgICAgICAgICAgICAgICB8ICAgIDQgKy0KIFNvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmggICAgICAgICAgICAgICAgIHwgICAgNiArLQog
U291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQw
ICsrKysKIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3Bw
IHwgICAgMiArLQogU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQu
Y3BwICAgfCAgMjM1ICsrKysrKysrLS0tLS0tLS0tLS0tCiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oICAgICB8ICAgMzYgKystCiA5IGZpbGVzIGNoYW5nZWQs
IDE5NSBpbnNlcnRpb25zKCspLCAxNzUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdlZTcw
ZjMuLmExNDhhNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTUsNiArNSwyMSBAQAogICAgICAgICBbVGV4bWFw
XVtRdF0gVXBzdHJlYW0gdGV4dHVyZS1tYXBwZXIgY2hhbmdlcyBmcm9tIFF0J3MgV2ViS2l0MiBi
cmFuY2gKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYw
NDM5CiAKKyAgICAgICAgUGF0Y2ggMTAvMTA6IEdsdWUgdGhlIFRleHR1cmVNYXBwZXIgcmVmYWN0
b3JpbmcgaW50byBXZWJraXQoMSkuCisgICAgICAgIFBhc3MgYSBHcmFwaGljc0xheWVyKiBpbnN0
ZWFkIG9mIGEgUGxhdGZvcm1MYXllciogdG8gdGhlIFFXZWJQYWdlQ2xpZW50LgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cy4gVGVzdHMgaW4gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcgY292ZXIgdGhp
cy4KKworICAgICAgICAqIHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50Lmg6CisgICAgICAgIChR
V2ViUGFnZUNsaWVudDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorCisyMDExLTA1LTA3ICBOb2Ft
IFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVGV4bWFwXVtRdF0gVXBzdHJlYW0gdGV4
dHVyZS1tYXBwZXIgY2hhbmdlcyBmcm9tIFF0J3MgV2ViS2l0MiBicmFuY2gKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNDM5CisKICAgICAgICAgUGF0
Y2ggOS8xMDogUmVmYWN0b3IgVGV4dHVyZU1hcHBlck5vZGUgZm9yIHBlcmZvcm1hbmNlLCByZWFk
YWJpbGl0eSBhbmQgYWNjdXJhY3kuCiAgICAgICAgIENoYW5nZXMgaW5jbHVkZToKICAgICAgICAg
MS4gYW5pbWF0aW9ucyBhcmUgaW1wbGVtZW50ZWQgaW5zaWRlIFRleHR1cmVNYXBwZXJOb2RlLCB0
byBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gQW5pbWF0aW9uQ29udHJvbGxlci4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oCmluZGV4IGQ4ZjQxNzEuLjgzOTZjYWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaApAQCAtNTIs
NyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kRW5hYmxl
ZChib29sIGVuYWJsZSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpbnB1dE1ldGhvZEVuYWJsZWQo
KSBjb25zdCA9IDA7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1
YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKiBsYXll
cikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqIGxheWVyKSB7IH0KIAogICAgIC8vIHRoaXMgZ2V0cyBjYWxsZWQgd2hlbiB0
aGUgY29tcG9zaXRvciB3YW50cyB1cyB0byBzeW5jIHRoZSBsYXllcnMKICAgICAvLyBpZiBzY2hl
ZHVsZVN5bmMgaXMgdHJ1ZSwgd2Ugc2NoZWR1bGUgYSBzeW5jIG91cnNlbHZlcy4gb3RoZXJ3aXNl
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKaW5kZXggODU3Y2E2My4uOWU4OTc1NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCkBAIC05OCw3ICs5OCw3IEBACiAjZW5kaWYKICNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIuaCIK
LSNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRl
ICJ0ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCIKICNlbmRpZgogI2luY2x1ZGUgInd0Zi9IYXNo
TWFwLmgiCiAjaW5jbHVkZSA8UU11bHRpTWFwPgpAQCAtMzIxLDI0ICszMjEsMjggQEAgdm9pZCBR
V2ViRnJhbWVQcml2YXRlOjpyZW5kZXJGcm9tVGlsZWRCYWNraW5nU3RvcmUoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb24KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKIHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyQ29tcG9zaXRl
ZExheWVycyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNsaXApCiB7
Ci0gICAgaWYgKCFyb290R3JhcGhpY3NMYXllcikKKyAgICBpZiAoIXJvb3RUZXh0dXJlTWFwcGVy
Tm9kZSB8fCAhdGV4dHVyZU1hcHBlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgdGV4dHVyZU1h
cHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIHRleHR1cmVNYXBwZXItPnNl
dEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dC0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSgpKTsKICAgICB0ZXh0dXJlTWFwcGVyLT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dC0+
dGV4dERyYXdpbmdNb2RlKCkpOworICAgIHRleHR1cmVNYXBwZXItPnNldFZpZXdwb3J0U2l6ZShm
cmFtZS0+dmlldygpLT5mcmFtZVJlY3QoKS5zaXplKCkpOwogICAgIFFQYWludGVyKiBwYWludGVy
ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJh
bWUtPnZpZXcoKTsKLSAgICBwYWludGVyLT5zYXZlKCk7Ci0gICAgcGFpbnRlci0+YmVnaW5OYXRp
dmVQYWludGluZygpOwotICAgIFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXI6OlBhaW50T3B0aW9u
cyBvcHRpb25zOwotICAgIG9wdGlvbnMudmlzaWJsZVJlY3QgPSBjbGlwOwotICAgIG9wdGlvbnMu
dGFyZ2V0UmVjdCA9IHZpZXctPmZyYW1lUmVjdCgpOwotICAgIG9wdGlvbnMudmlld3BvcnRTaXpl
ID0gdmlldy0+c2l6ZSgpOwotICAgIG9wdGlvbnMub3BhY2l0eSA9IHBhaW50ZXItPm9wYWNpdHko
KTsKLSAgICByb290R3JhcGhpY3NMYXllci0+cGFpbnQodGV4dHVyZU1hcHBlci5nZXQoKSwgb3B0
aW9ucyk7Ci0gICAgcGFpbnRlci0+ZW5kTmF0aXZlUGFpbnRpbmcoKTsKLSAgICBwYWludGVyLT5y
ZXN0b3JlKCk7CisgICAgY29uc3QgUVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBwYWludGVyLT53b3Js
ZFRyYW5zZm9ybSgpOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCgKKyAg
ICAgICAgICAgICAgICB0cmFuc2Zvcm0ubTExKCksIHRyYW5zZm9ybS5tMTIoKSwgMCwgdHJhbnNm
b3JtLm0xMygpLAorICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5tMjEoKSwgdHJhbnNmb3JtLm0y
MigpLCAwLCB0cmFuc2Zvcm0ubTIzKCksCisgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKKyAg
ICAgICAgICAgICAgICB0cmFuc2Zvcm0ubTMxKCksIHRyYW5zZm9ybS5tMzIoKSwgMCwgdHJhbnNm
b3JtLm0zMygpCisgICAgICAgICAgICAgICAgKTsKKyAgICByb290VGV4dHVyZU1hcHBlck5vZGUt
PnNldFRyYW5zZm9ybShtYXRyaXgpOworICAgIHJvb3RUZXh0dXJlTWFwcGVyTm9kZS0+c2V0T3Bh
Y2l0eShwYWludGVyLT5vcGFjaXR5KCkpOworICAgIHRleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRp
bmcoKTsKKyAgICB0ZXh0dXJlTWFwcGVyLT5iZWdpbkNsaXAobWF0cml4LCBjbGlwKTsKKyAgICBy
b290VGV4dHVyZU1hcHBlck5vZGUtPnBhaW50KCk7CisgICAgdGV4dHVyZU1hcHBlci0+ZW5kQ2xp
cCgpOworICAgIHRleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7CiB9CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmggYi9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViZnJhbWUuaAppbmRleCAzYzVhMjhlLi40ZmI2ZjFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2ViZnJhbWUuaApAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgV2lkZ2V0UHJpdmF0ZTsKICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVudFF0OwogICAg
IGNsYXNzIENocm9tZUNsaWVudFF0OwotICAgIGNsYXNzIFBsYXRmb3JtTGF5ZXJQcm94eVF0Owor
ICAgIGNsYXNzIFRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ7CiB9CiBjbGFzcyBRV2ViRnJhbWVE
YXRhOwogY2xhc3MgUVdlYkhpdFRlc3RSZXN1bHRQcml2YXRlOwpAQCAtMjMyLDcgKzIzMiw3IEBA
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OldpZGdldFByaXZhdGU7CiAgICAg
ZnJpZW5kIGNsYXNzIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ7CiAgICAgZnJpZW5kIGNs
YXNzIFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OwotICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpQ
bGF0Zm9ybUxheWVyUHJveHlRdDsKKyAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGVDbGllbnRRdDsKICAgICBRV2ViRnJhbWVQcml2YXRlICpkOwogICAgIFFfUFJJVkFU
RV9TTE9UKGQsIHZvaWQgX3Ffb3JpZW50YXRpb25DaGFuZ2VkKCkpCiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJmcmFtZV9wLmgKaW5kZXggNDEwODk3Mi4uNzcxZTY4YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2ViZnJhbWVfcC5oCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBGcmFtZVZpZXc7CiAgICAgY2xhc3MgSFRNTEZyYW1lT3duZXJFbGVtZW50OwogICAgIGNs
YXNzIFNjcm9sbGJhcjsKLSAgICBjbGFzcyBUZXh0dXJlTWFwcGVyQ29udGVudExheWVyOworICAg
IGNsYXNzIFRleHR1cmVNYXBwZXJOb2RlOwogfQogY2xhc3MgUVdlYlBhZ2U7CiAKQEAgLTgyLDcg
KzgyLDcgQEAgcHVibGljOgogICAgICAgICAsIG1hcmdpbldpZHRoKC0xKQogICAgICAgICAsIG1h
cmdpbkhlaWdodCgtMSkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShU
RVhUVVJFX01BUFBFUikKLSAgICAgICAgLCByb290R3JhcGhpY3NMYXllcigwKQorICAgICAgICAs
IHJvb3RUZXh0dXJlTWFwcGVyTm9kZSgwKQogI2VuZGlmCiAgICAgICAgIHt9CiAgICAgdm9pZCBp
bml0KFFXZWJGcmFtZSogcWZyYW1lLCBRV2ViRnJhbWVEYXRhKiBmcmFtZURhdGEpOwpAQCAtMTIw
LDcgKzEyMCw3IEBAIHB1YmxpYzoKICAgICBpbnQgbWFyZ2luV2lkdGg7CiAgICAgaW50IG1hcmdp
bkhlaWdodDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJF
X01BUFBFUikKLSAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ29udGVudExheWVyKiByb290R3Jh
cGhpY3NMYXllcjsKKyAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZSogcm9vdFRleHR1cmVN
YXBwZXJOb2RlOwogICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiB0ZXh0dXJlTWFw
cGVyOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggMjM4NjExZi4uNDZkZTkzYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9D
aGFuZ2VMb2cKQEAgLTIsNiArMiw0NiBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgogCisgICAgICAgIFtUZXhtYXBdW1F0XSBVcHN0cmVhbSB0ZXh0dXJlLW1hcHBlciBj
aGFuZ2VzIGZyb20gUXQncyBXZWJLaXQyIGJyYW5jaAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA0MzkKKworICAgICAgICBQYXRjaCAxMC8xMDogR2x1
ZSB0aGUgVGV4dHVyZU1hcHBlciByZWZhY3RvcmluZyBpbnRvIFdlYmtpdCgxKS4KKyAgICAgICAg
MS4gUGFzcyBhIEdyYXBoaWNzTGF5ZXIqIGluc3RlYWQgb2YgYSBQbGF0Zm9ybUxheWVyKiB0byB0
aGUgUVdlYlBhZ2VDbGllbnQuCisgICAgICAgIDIuIFNldCBwYXJhbWV0ZXJzIGluIFRleHR1cmVN
YXBwZXIvVGV4dHVyZU1hcHBlck5vZGUgaW5zdGVhZCBvZiBwYXNzaW5nIHRoZW0gaW4gYW4gb3B0
aW9ucyBhcmd1bWVudC4KKyAgICAgICAgMy4gUmVuYW1lIFBsYXRmb3JtTGF5ZXJQcm94eVF0IHRv
IFRleHR1cmVNYXBwZXJOb2RlQ2xpZW50CisKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoK
KyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMpOgorICAg
ICAgICAqIEFwaS9xd2ViZnJhbWUuaDoKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lX3AuaDoKKyAg
ICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OlFXZWJGcmFtZVByaXZhdGUpOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
ZUNsaWVudFF0OjphdHRhY2hSb290R3JhcGhpY3NMYXllcik6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvUGFnZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJO
b2RlQ2xpZW50UXQ6OlRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ6OnNldFRleHR1cmVNYXBwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdDo6flRleHR1cmVNYXBwZXJOb2RlQ2xp
ZW50UXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdDo6Y29t
cHV0ZUxhc3RNb2RpZmllZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5v
ZGVDbGllbnRRdDo6c3luY1Jvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTm9kZUNsaWVudFF0Ojpyb290Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50
UVdpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNs
aWVudFFXaWRnZXQ6OnN5bmNMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFX
aWRnZXQ6On5QYWdlQ2xpZW50UVdpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50
UUdyYXBoaWNzV2lkZ2V0Ojp+UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCk6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp1cGRhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c3luY0xheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjptYXJrRm9yU3lu
Yyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6UGFnZUNsaWVudFFXaWRnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6UGFnZUNsaWVudFFHcmFwaGljc1dp
ZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzeW5j
TGF5ZXJzVGltZW91dCk6CisKKzIwMTEtMDUtMDcgIE5vYW0gUm9zZW50aGFsICA8bm9hbS5yb3Nl
bnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CiAgICAgICAgIFtUZXhtYXBdIFVwc3RyZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5nZXMgZnJvbSBR
dCdzIFdlYktpdDIgYnJhbmNoCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MDQzOQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50UXQuY3BwCmluZGV4IGVhMmM4MjYuLjA0MDRlZmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCkBAIC02
MjEsNyArNjIxLDcgQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNv
ciYgY3Vyc29yKQogdm9pZCBDaHJvbWVDbGllbnRRdDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIo
RnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQogewogICAgIGlmIChw
bGF0Zm9ybVBhZ2VDbGllbnQoKSkKLSAgICAgICAgcGxhdGZvcm1QYWdlQ2xpZW50KCktPnNldFJv
b3RHcmFwaGljc0xheWVyKGdyYXBoaWNzTGF5ZXIgPyBncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxh
eWVyKCkgOiAwKTsKKyAgICAgICAgcGxhdGZvcm1QYWdlQ2xpZW50KCktPnNldFJvb3RHcmFwaGlj
c0xheWVyKGdyYXBoaWNzTGF5ZXIpOwogfQogCiB2b2lkIENocm9tZUNsaWVudFF0OjpzZXROZWVk
c09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcAppbmRleCAxODIxYmVjLi5hMTY1Njg0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3Bw
CkBAIC0xOSwxNDggKzE5LDc5IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotCiAjaW5j
bHVkZSAiUGFnZUNsaWVudFF0LmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclF0LmgiCi0jaW5j
bHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCisKICNpbmNsdWRlIDxR
R3JhcGhpY3NTY2VuZT4KICNpbmNsdWRlIDxRR3JhcGhpY3NWaWV3PgogI2lmIGRlZmluZWQoUV9X
U19YMTEpCiAjaW5jbHVkZSA8UVgxMUluZm8+CiAjZW5kaWYKIAorI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJRdC5oIgorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIgorCiAjaWZk
ZWYgUVRfT1BFTkdMX0xJQgogI2luY2x1ZGUgIm9wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCIKLSNp
bmNsdWRlIDxRR0xXaWRnZXQ+CisjZW5kaWYKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBF
UikgICAgCi1jbGFzcyBQbGF0Zm9ybUxheWVyUHJveHlRdCA6IHB1YmxpYyBRT2JqZWN0LCBwdWJs
aWMgdmlydHVhbCBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQgewotcHVibGljOgotICAgIFBsYXRm
b3JtTGF5ZXJQcm94eVF0KFFXZWJGcmFtZSogZnJhbWUsIFRleHR1cmVNYXBwZXJDb250ZW50TGF5
ZXIqIGxheWVyLCBRT2JqZWN0KiBvYmplY3QpCi0gICAgICAgIDogUU9iamVjdChvYmplY3QpCi0g
ICAgICAgICwgbV9mcmFtZShmcmFtZSkKLSAgICAgICAgLCBtX2xheWVyKGxheWVyKQotICAgIHsK
LSAgICAgICAgaWYgKG1fbGF5ZXIpCi0gICAgICAgICAgICBtX2xheWVyLT5zZXRQbGF0Zm9ybUxh
eWVyQ2xpZW50KHRoaXMpOwotICAgICAgICBtX2ZyYW1lLT5kLT5yb290R3JhcGhpY3NMYXllciA9
IG1fbGF5ZXI7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRUZXh0dXJlTWFwcGVyKFBhc3NPd25QdHI8
VGV4dHVyZU1hcHBlcj4gdGV4dHVyZU1hcHBlcikKLSAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmQt
PnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVyOwotICAgIH0KLQotICAgIHZpcnR1YWwgflBs
YXRmb3JtTGF5ZXJQcm94eVF0KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2xheWVyKQotICAgICAg
ICAgICAgbV9sYXllci0+c2V0UGxhdGZvcm1MYXllckNsaWVudCgwKTsKLSAgICAgICAgaWYgKG1f
ZnJhbWUtPmQpCi0gICAgICAgICAgICBtX2ZyYW1lLT5kLT5yb290R3JhcGhpY3NMYXllciA9IDA7
Ci0gICAgfQotCi0gICAgdmlydHVhbCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2ZyYW1lLT5kLT50ZXh0dXJlTWFwcGVyLmdldCgpOwotICAg
IH0KLQotICAgIC8vIFNpbmNlIHdlIGp1c3QgcGFpbnQgdGhlIGNvbXBvc2l0ZWQgdHJlZSBhbmQg
bmV2ZXIgY3JlYXRlIGEgc3BlY2lhbCBpdGVtIGZvciBpdCwgd2UgZG9uJ3QgaGF2ZSB0byBoYW5k
bGUgaXRzIHNpemUgY2hhbmdlcy4KLSAgICB2b2lkIHNldFNpemVDaGFuZ2VkKGNvbnN0IEludFNp
emUmKSB7IH0KLQotcHJpdmF0ZToKLSAgICBRV2ViRnJhbWUqIG1fZnJhbWU7Ci0gICAgVGV4dHVy
ZU1hcHBlckNvbnRlbnRMYXllciogbV9sYXllcjsKLX07Ci0KLWNsYXNzIFBsYXRmb3JtTGF5ZXJQ
cm94eVFXaWRnZXQgOiBwdWJsaWMgUGxhdGZvcm1MYXllclByb3h5UXQgewotcHVibGljOgotICAg
IFBsYXRmb3JtTGF5ZXJQcm94eVFXaWRnZXQoUVdlYkZyYW1lKiBmcmFtZSwgVGV4dHVyZU1hcHBl
ckNvbnRlbnRMYXllciogbGF5ZXIsIFFXaWRnZXQqIHdpZGdldCkKLSAgICAgICAgOiBQbGF0Zm9y
bUxheWVyUHJveHlRdChmcmFtZSwgbGF5ZXIsIHdpZGdldCkKLSAgICAgICAgLCBtX3dpZGdldCh3
aWRnZXQpCi0gICAgewotICAgICAgICBpZiAobV93aWRnZXQpCi0gICAgICAgICAgICBtX3dpZGdl
dC0+aW5zdGFsbEV2ZW50RmlsdGVyKHRoaXMpOwotCi0gICAgICAgIGlmICh0ZXh0dXJlTWFwcGVy
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgc2V0VGV4dHVyZU1hcHBlcihUZXh0
dXJlTWFwcGVyUXQ6OmNyZWF0ZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBkb24ndCB3YW50IGEg
aHVnZSByZWdpb24tY2xpcCBvbiB0aGUgY29tcG9zaXRpbmcgbGF5ZXJzOyBpbnN0ZWFkIHdlIHVu
aXRlIHRoZSByZWN0YW5nbGVzIHRvZ2V0aGVyCi0gICAgLy8gYW5kIGNsZWFyIHRoZW0gd2hlbiB0
aGUgcGFpbnQgYWN0dWFsbHkgb2NjdXJzLgotICAgIGJvb2wgZXZlbnRGaWx0ZXIoUU9iamVjdCog
b2JqZWN0LCBRRXZlbnQqIGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKG9iamVjdCA9PSBtX3dp
ZGdldCAmJiBldmVudC0+dHlwZSgpID09IFFFdmVudDo6UGFpbnQpCi0gICAgICAgICAgICBtX2Rp
cnR5UmVjdCA9IFFSZWN0KCk7Ci0gICAgICAgIHJldHVybiBRT2JqZWN0OjpldmVudEZpbHRlcihv
YmplY3QsIGV2ZW50KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpCi0gICAg
ewotICAgICAgICBpZiAobV93aWRnZXQpCi0gICAgICAgICAgICBtX3dpZGdldC0+dXBkYXRlKCk7
Ci0gICAgfQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQorVGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdDo6VGV4dHVyZU1hcHBlck5vZGVDbGll
bnRRdChRV2ViRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiBsYXllcikKKyAgICA6IG1fZnJh
bWUoZnJhbWUpCisgICAgLCBtX3Jvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXI6OmNyZWF0
ZSgwKSkKK3sKKyAgICBtX2ZyYW1lLT5kLT5yb290VGV4dHVyZU1hcHBlck5vZGUgPSByb290Tm9k
ZSgpOworICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPmFkZENoaWxkKGxheWVyKTsKKyAgICBtX3Jv
b3RHcmFwaGljc0xheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdEdyYXBo
aWNzTGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOworICAgIG1fcm9vdEdyYXBoaWNzTGF5
ZXItPnNldFNpemUoSW50U2l6ZSgxLCAxKSk7Cit9CiAKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxh
eUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotICAgIHsKLSAgICAgICAgbV9kaXJ0eVJlY3Qg
fD0gcmVjdDsKLSAgICAgICAgbV93aWRnZXQtPnVwZGF0ZShtX2RpcnR5UmVjdCk7Ci0gICAgfQor
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0OjpzY3JvbGwoZmxvYXQgZHgsIGZsb2F0IGR5
KQoreworICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBtX3Jvb3RHcmFwaGljc0xheWVyLT5wb3Np
dGlvbigpOworICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQo
cG9zaXRpb24ueCgpICsgZHgsIHBvc2l0aW9uLnkoKSArIGR5KSk7Cit9CiAKLXByaXZhdGU6Ci0g
ICAgUVJlY3QgbV9kaXJ0eVJlY3Q7Ci0gICAgUVdpZGdldCogbV93aWRnZXQ7Ci19Owordm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0OjpzZXRUZXh0dXJlTWFwcGVyKGNvbnN0IFBhc3NPd25Q
dHI8VGV4dHVyZU1hcHBlcj4mIHRleHR1cmVNYXBwZXIpCit7CisgICAgbV9mcmFtZS0+ZC0+dGV4
dHVyZU1hcHBlciA9IHRleHR1cmVNYXBwZXI7CisgICAgbV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVN
YXBwZXJOb2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fZnJhbWUtPmQtPnRleHR1cmVNYXBwZXIuZ2V0
KCkpOworfQogCi0jaWYgIWRlZmluZWQoUVRfTk9fR1JBUEhJQ1NWSUVXKQotY2xhc3MgUGxhdGZv
cm1MYXllclByb3h5UUdyYXBoaWNzT2JqZWN0IDogcHVibGljIFBsYXRmb3JtTGF5ZXJQcm94eVF0
IHsKLXB1YmxpYzoKLSAgICBQbGF0Zm9ybUxheWVyUHJveHlRR3JhcGhpY3NPYmplY3QoUVdlYkZy
YW1lKiBmcmFtZSwgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllciogbGF5ZXIsIFFHcmFwaGljc09i
amVjdCogb2JqZWN0KQotICAgICAgICA6IFBsYXRmb3JtTGF5ZXJQcm94eVF0KGZyYW1lLCBsYXll
ciwgb2JqZWN0KQotICAgICAgICAsIG1fZ3JhcGhpY3NJdGVtKG9iamVjdCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0ZXh0dXJlTWFwcGVyKCkpCi0gICAgICAgICAgICByZXR1cm47CitUZXh0dXJlTWFw
cGVyTm9kZUNsaWVudFF0Ojp+VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdCgpCit7CisgICAgbV9m
cmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJOb2RlID0gMDsKK30KIAotI2lmZGVmIFFUX09QRU5H
TF9MSUIKLSAgICAgICAgUUdyYXBoaWNzVmlldyogdmlldyA9IG9iamVjdC0+c2NlbmUoKS0+dmll
d3MoKVswXTsKLSAgICAgICAgaWYgKHZpZXcgJiYgdmlldy0+dmlld3BvcnQoKSAmJiB2aWV3LT52
aWV3cG9ydCgpLT5pbmhlcml0cygiUUdMV2lkZ2V0IikpIHsKLSAgICAgICAgICAgIHNldFRleHR1
cmVNYXBwZXIoVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBzZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBw
ZXJRdDo6Y3JlYXRlKCkpOwotICAgIH0KK1FSZWN0IFRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ6
OmNvbXB1dGVMYXN0TW9kaWZpZWRSZWN0KCkKK3sKKyAgICByZXR1cm4gbV9mcmFtZS0+ZC0+cm9v
dFRleHR1cmVNYXBwZXJOb2RlLT5jb21wdXRlTGFzdE1vZGlmaWVkUmVjdCgpOworfQogCi0gICAg
dm9pZCBzZXROZWVkc0Rpc3BsYXkoKQotICAgIHsKLSAgICAgICAgaWYgKG1fZ3JhcGhpY3NJdGVt
KQotICAgICAgICAgICAgbV9ncmFwaGljc0l0ZW0tPnVwZGF0ZSgpOwotICAgIH0KK3ZvaWQgVGV4
dHVyZU1hcHBlck5vZGVDbGllbnRRdDo6c3luY1Jvb3RMYXllcigpCit7CisgICAgbV9yb290R3Jh
cGhpY3NMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Cit9CiAK
LSAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotICAg
IHsKLSAgICAgICAgaWYgKG1fZ3JhcGhpY3NJdGVtKQotICAgICAgICAgICAgbV9ncmFwaGljc0l0
ZW0tPnVwZGF0ZShRUmVjdEYocmVjdCkpOwotICAgIH0KK1RleHR1cmVNYXBwZXJOb2RlKiBUZXh0
dXJlTWFwcGVyTm9kZUNsaWVudFF0Ojpyb290Tm9kZSgpCit7CisgICAgcmV0dXJuIHRvVGV4dHVy
ZU1hcHBlck5vZGUobV9yb290R3JhcGhpY3NMYXllci5nZXQoKSk7Cit9CiAKLXByaXZhdGU6Ci0g
ICAgUUdyYXBoaWNzSXRlbSogbV9ncmFwaGljc0l0ZW07Ci19OwotI2VuZGlmIC8vIFFUX05PX0dS
QVBISUNTVklFVwogCi12b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXll
cihUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbGF5ZXIpCit2b2lkIFBhZ2VDbGllbnRRV2lk
Z2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBp
ZiAobGF5ZXIpIHsKLSAgICAgICAgcGxhdGZvcm1MYXllclByb3h5ID0gbmV3IFBsYXRmb3JtTGF5
ZXJQcm94eVFXaWRnZXQocGFnZS0+bWFpbkZyYW1lKCksIHN0YXRpY19jYXN0PFRleHR1cmVNYXBw
ZXJDb250ZW50TGF5ZXIqPihsYXllciksIHZpZXcpOworICAgICAgICB0ZXh0dXJlTWFwcGVyTm9k
ZUNsaWVudCA9IGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0KHBhZ2UtPm1h
aW5GcmFtZSgpLCBsYXllcikpOworICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0
VGV4dHVyZU1hcHBlcihuZXcgVGV4dHVyZU1hcHBlclF0KTsKKyAgICAgICAgdGV4dHVyZU1hcHBl
ck5vZGVDbGllbnQtPnN5bmNSb290TGF5ZXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBkZWxldGUgcGxhdGZvcm1MYXllclByb3h5OwotICAgIHBsYXRmb3JtTGF5ZXJQcm94eSA9IDA7
CisgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQuY2xlYXIoKTsKIH0KIAogdm9pZCBQYWdlQ2xp
ZW50UVdpZGdldDo6bWFya0ZvclN5bmMoYm9vbCBzY2hlZHVsZVN5bmMpCkBAIC0xNzAsNyArMTAx
LDE0IEBAIHZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6Om1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVT
eW5jKQogCiB2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjpzeW5jTGF5ZXJzKFRpbWVyPFBhZ2VDbGll
bnRRV2lkZ2V0PiopCiB7CisgICAgaWYgKHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50KQorICAgICAg
ICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c3luY1Jvb3RMYXllcigpOwogICAgIFFXZWJGcmFt
ZVByaXZhdGU6OmNvcmUocGFnZS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGlu
Z1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisgICAgaWYgKCF0ZXh0dXJlTWFwcGVyTm9kZUNs
aWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+
cm9vdE5vZGUoKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKKyAg
ICAgICAgc3luY1RpbWVyLnN0YXJ0T25lU2hvdCgxLjAgLyA2MC4wKTsKKyAgICB1cGRhdGUodmll
dy0+cmVjdCgpKTsKIH0KICNlbmRpZgogCkBAIC0yMDEsOSArMTM5LDYgQEAgdm9pZCBQYWdlQ2xp
ZW50UVdpZGdldDo6c2V0SW5wdXRNZXRob2RIaW50cyhRdDo6SW5wdXRNZXRob2RIaW50cyBoaW50
cykKIAogUGFnZUNsaWVudFFXaWRnZXQ6On5QYWdlQ2xpZW50UVdpZGdldCgpCiB7Ci0jaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgZGVs
ZXRlIHBsYXRmb3JtTGF5ZXJQcm94eTsKLSNlbmRpZgogfQogCiAjaWZuZGVmIFFUX05PX0NVUlNP
UgpAQCAtMjYwLDE3ICsxOTUsMTMgQEAgUVJlY3RGIFBhZ2VDbGllbnRRV2lkZ2V0Ojp3aW5kb3dS
ZWN0KCkgY29uc3QKIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6On5QYWdlQ2xpZW50UUdyYXBo
aWNzV2lkZ2V0KCkKIHsKICAgICBkZWxldGUgb3ZlcmxheTsKLSNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIGRlbGV0ZSBwbGF0Zm9y
bUxheWVyUHJveHk7Ci0jZWxzZQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYg
IVVTRShURVhUVVJFX01BUFBFUikKICAgICBpZiAoIXJvb3RHcmFwaGljc0xheWVyKQogICAgICAg
ICByZXR1cm47CiAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBkZWxldGUgdGhlIHJvb3QgZ3JhcGhp
Y3MgbGF5ZXIuIFRoZSBsaWZlY3ljbGUgaXMgbWFuYWdlZCBpbiBHcmFwaGljc0xheWVyUXQuY3Bw
LgogICAgIHJvb3RHcmFwaGljc0xheWVyLmRhdGEoKS0+c2V0UGFyZW50SXRlbSgwKTsKICAgICB2
aWV3LT5zY2VuZSgpLT5yZW1vdmVJdGVtKHJvb3RHcmFwaGljc0xheWVyLmRhdGEoKSk7CiAjZW5k
aWYKLSNlbmRpZgogfQogCiB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNjcm9sbChp
bnQgZHgsIGludCBkeSwgY29uc3QgUVJlY3QmIHJlY3RUb1Njcm9sbCkKQEAgLTI4NSw3ICsyMTYs
NyBAQCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnVwZGF0ZShjb25zdCBRUmVjdCYg
ZGlydHlSZWN0KQogICAgIGNyZWF0ZU9yRGVsZXRlT3ZlcmxheSgpOwogICAgIGlmIChvdmVybGF5
KQogICAgICAgICBvdmVybGF5LT51cGRhdGUoUVJlY3RGKGRpcnR5UmVjdCkpOwotI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
ICYmICFVU0UoVEVYVFVSRV9NQVBQRVIpCiAgICAgc3luY0xheWVycygpOwogI2VuZGlmCiB9CkBA
IC0zMjAsMjQgKzI1MSw0NSBAQCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OmNyZWF0
ZU9yRGVsZXRlT3ZlcmxheSgpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogdm9p
ZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzeW5jTGF5ZXJzKCkKIHsKLSAgICBpZiAoc2hv
dWxkU3luYykgewotICAgICAgICBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKHBhZ2UtPm1haW5GcmFt
ZSgpKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwot
ICAgICAgICBzaG91bGRTeW5jID0gZmFsc2U7Ci0gICAgfQorI2lmIFVTRShURVhUVVJFX01BUFBF
UikKKyAgICBpZiAodGV4dHVyZU1hcHBlck5vZGVDbGllbnQpCisgICAgICAgIHRleHR1cmVNYXBw
ZXJOb2RlQ2xpZW50LT5zeW5jUm9vdExheWVyKCk7CisjZW5kaWYKKworICAgIFFXZWJGcmFtZVBy
aXZhdGU6OmNvcmUocGFnZS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0
YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAg
aWYgKCF0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5yb290Tm9kZSgpLT5kZXNjZW5kYW50c09yU2VsZkhh
dmVSdW5uaW5nQW5pbWF0aW9ucygpKQorICAgICAgICBzeW5jVGltZXIuc3RhcnRPbmVTaG90KDEu
MCAvIDYwLjApOworICAgIHVwZGF0ZSh2aWV3LT5ib3VuZGluZ1JlY3QoKS50b0FsaWduZWRSZWN0
KCkpOworICAgIGlmICghc2hvdWxkU3luYykKKyAgICAgICAgcmV0dXJuOworICAgIHNob3VsZFN5
bmMgPSBmYWxzZTsKKyNlbmRpZgogfQogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotdm9pZCBQ
YWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllciogbGF5ZXIpCit2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6
OnNldFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIGlmIChs
YXllcikgewotICAgICAgICBwbGF0Zm9ybUxheWVyUHJveHkgPSBuZXcgUGxhdGZvcm1MYXllclBy
b3h5UUdyYXBoaWNzT2JqZWN0KHBhZ2UtPm1haW5GcmFtZSgpLCBzdGF0aWNfY2FzdDxUZXh0dXJl
TWFwcGVyQ29udGVudExheWVyKj4obGF5ZXIpLCB2aWV3KTsKKyAgICAgICAgdGV4dHVyZU1hcHBl
ck5vZGVDbGllbnQgPSBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdChwYWdl
LT5tYWluRnJhbWUoKSwgbGF5ZXIpKTsKKyNpZmRlZiBRVF9PUEVOR0xfTElCCisgICAgICAgIFFH
cmFwaGljc1ZpZXcqIGdyYXBoaWNzVmlldyA9IHZpZXctPnNjZW5lKCktPnZpZXdzKClbMF07Cisg
ICAgICAgIGlmIChncmFwaGljc1ZpZXcgJiYgZ3JhcGhpY3NWaWV3LT52aWV3cG9ydCgpICYmIGdy
YXBoaWNzVmlldy0+dmlld3BvcnQoKS0+aW5oZXJpdHMoIlFHTFdpZGdldCIpKSB7CisgICAgICAg
ICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFw
cGVyR0w6OmNyZWF0ZSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2VuZGlm
CisgICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zZXRUZXh0dXJlTWFwcGVyKFRleHR1
cmVNYXBwZXJRdDo6Y3JlYXRlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGRlbGV0
ZSBwbGF0Zm9ybUxheWVyUHJveHk7Ci0gICAgcGxhdGZvcm1MYXllclByb3h5ID0gMDsKKyAgICB0
ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC5jbGVhcigpOwogfQogI2Vsc2UKLXZvaWQgUGFnZUNsaWVu
dFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzT2JqZWN0KiBs
YXllcikKK3ZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5
ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgaWYgKHJvb3RHcmFwaGljc0xheWVyKSB7
CiAgICAgICAgIHJvb3RHcmFwaGljc0xheWVyLmRhdGEoKS0+c2V0UGFyZW50SXRlbSgwKTsKQEAg
LTM0NSwxMiArMjk3LDEyIEBAIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9v
dEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzT2JqZWN0KiBsYXllcikKICAgICAgICAgUVdlYkZyYW1l
UHJpdmF0ZTo6Y29yZShwYWdlLT5tYWluRnJhbWUoKSktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5n
U3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKICAgICB9CiAKLSAgICByb290R3JhcGhpY3NMYXll
ciA9IGxheWVyOworICAgIHJvb3RHcmFwaGljc0xheWVyID0gbGF5ZXIgPyBsYXllci0+cGxhdGZv
cm1MYXllcigpIDogMDsKIAotICAgIGlmIChsYXllcikgewotICAgICAgICBsYXllci0+c2V0Rmxh
ZyhRR3JhcGhpY3NJdGVtOjpJdGVtQ2xpcHNDaGlsZHJlblRvU2hhcGUsIHRydWUpOwotICAgICAg
ICBsYXllci0+c2V0UGFyZW50SXRlbSh2aWV3KTsKLSAgICAgICAgbGF5ZXItPnNldFpWYWx1ZShS
b290R3JhcGhpY3NMYXllclpWYWx1ZSk7CisgICAgaWYgKHJvb3RHcmFwaGljc0xheWVyKSB7Cisg
ICAgICAgIHJvb3RHcmFwaGljc0xheWVyLmRhdGEoKS0+c2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJ
dGVtQ2xpcHNDaGlsZHJlblRvU2hhcGUsIHRydWUpOworICAgICAgICByb290R3JhcGhpY3NMYXll
ci5kYXRhKCktPnNldFBhcmVudEl0ZW0odmlldyk7CisgICAgICAgIHJvb3RHcmFwaGljc0xheWVy
LmRhdGEoKS0+c2V0WlZhbHVlKFJvb3RHcmFwaGljc0xheWVyWlZhbHVlKTsKICAgICB9CiAgICAg
Y3JlYXRlT3JEZWxldGVPdmVybGF5KCk7CiB9CkBAIC0zNTksOCArMzExLDcgQEAgdm9pZCBQYWdl
Q2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihRR3JhcGhpY3NPYmpl
Y3QqIGxheWVyKQogdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjptYXJrRm9yU3luYyhi
b29sIHNjaGVkdWxlU3luYykKIHsKICAgICBzaG91bGRTeW5jID0gdHJ1ZTsKLSAgICBpZiAoc2No
ZWR1bGVTeW5jKQotICAgICAgICBzeW5jTWV0YU1ldGhvZC5pbnZva2UodmlldywgUXQ6OlF1ZXVl
ZENvbm5lY3Rpb24pOworICAgIHN5bmNUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50
UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmgKaW5k
ZXggMTZiYjUwYy4uMzdiZTRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9QYWdlQ2xpZW50UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5oCkBAIC00MSwxMiArNDEsMjUgQEAKIAogI2luY2x1ZGUgPFNldHRp
bmdzLmg+CiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotI2luY2x1ZGUgInRleG1hcC9UZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllci5oIgorY2xhc3MgVGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdCB7
CitwdWJsaWM6CisgICAgVGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdChRV2ViRnJhbWUqLCBHcmFw
aGljc0xheWVyKik7CisgICAgdm9pZCBzY3JvbGwoZmxvYXQgZHgsIGZsb2F0IGR5KTsKKyAgICB2
b2lkIHNldFRleHR1cmVNYXBwZXIoY29uc3QgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiYpOwor
ICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQoKTsKKyAgICBRUmVjdCBjb21w
dXRlTGFzdE1vZGlmaWVkUmVjdCgpOworICAgIHZvaWQgc3luY1Jvb3RMYXllcigpOworICAgIFRl
eHR1cmVNYXBwZXJOb2RlKiByb290Tm9kZSgpOworCitwcm90ZWN0ZWQ6CisgICAgUVdlYkZyYW1l
KiBtX2ZyYW1lOworICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX3Jvb3RHcmFwaGljc0xheWVy
OworfTsKICNlbmRpZgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KIGNsYXNzIFBhZ2VDbGllbnRR
V2lkZ2V0IDogcHVibGljIFFXZWJQYWdlQ2xpZW50IHsKIHB1YmxpYzoKICAgICBQYWdlQ2xpZW50
UVdpZGdldChRV2lkZ2V0KiBuZXdWaWV3LCBRV2ViUGFnZSogbmV3UGFnZSkKQEAgLTU0LDcgKzY3
LDYgQEAgcHVibGljOgogICAgICAgICAsIHBhZ2UobmV3UGFnZSkKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKICAgICAgICAgLCBzeW5jVGlt
ZXIodGhpcywgJlBhZ2VDbGllbnRRV2lkZ2V0OjpzeW5jTGF5ZXJzKQotICAgICAgICAsIHBsYXRm
b3JtTGF5ZXJQcm94eSgwKQogI2VuZGlmCiAgICAgewogICAgICAgICBRX0FTU0VSVCh2aWV3KTsK
QEAgLTkxLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICBRV2ViUGFnZSogcGFnZTsKIAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIHZp
cnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ciogbGF5ZXIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGlj
c0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIG1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5j
KTsKICAgICB2b2lkIHN5bmNMYXllcnMoVGltZXI8UGFnZUNsaWVudFFXaWRnZXQ+Kik7CiAjZW5k
aWYKQEAgLTEwNCw3ICsxMTYsNyBAQCBwdWJsaWM6CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKICAgICBUaW1lcjxQYWdlQ2xpZW50UVdp
ZGdldD4gc3luY1RpbWVyOwotICAgIFBsYXRmb3JtTGF5ZXJQcm94eVF0KiBwbGF0Zm9ybUxheWVy
UHJveHk7CisgICAgT3duUHRyPFRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ+IHRleHR1cmVNYXBw
ZXJOb2RlQ2xpZW50OwogI2VuZGlmCiB9OwogCkBAIC0xNTAsOSArMTYyLDcgQEAgcHVibGljOgog
ICAgICAgICAsIHBhZ2UobmV3UGFnZSkKICAgICAgICAgLCB2aWV3UmVzaXplc1RvQ29udGVudHMo
ZmFsc2UpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotI2lmIFVTRShURVhUVVJF
X01BUFBFUikKLSAgICAgICAgLCBwbGF0Zm9ybUxheWVyUHJveHkoMCkKLSNlbmRpZgorICAgICAg
ICAsIHN5bmNUaW1lcih0aGlzLCAmUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c3luY0xheWVy
c1RpbWVvdXQpCiAgICAgICAgICwgc2hvdWxkU3luYyhmYWxzZSkKICNlbmRpZgogICAgICAgICAs
IG92ZXJsYXkoMCkKQEAgLTE2Miw3ICsxNzIsNiBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHRoZSBv
dmVybGF5IGFuZCBzdGF5cyBhbGl2ZSBmb3IgdGhlIGxpZmV0aW1lIG9mCiAgICAgICAgIC8vIHRo
aXMgUUdyYXBoaWNzV2ViVmlldyBhcyB0aGUgc2Nyb2xsYmFycyBhcmUgbmVlZGVkIHdoZW4gdGhl
cmUncyBubyBjb21wb3NpdGluZwogICAgICAgICB2aWV3LT5zZXRGbGFnKFFHcmFwaGljc0l0ZW06
Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbik7Ci0gICAgICAgIHN5bmNNZXRhTWV0aG9kID0g
dmlldy0+bWV0YU9iamVjdCgpLT5tZXRob2Qodmlldy0+bWV0YU9iamVjdCgpLT5pbmRleE9mTWV0
aG9kKCJzeW5jTGF5ZXJzKCkiKSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTIwMCw5ICsyMDksMTAg
QEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0g
ICAgdmlydHVhbCB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVy
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciop
OwogICAgIHZpcnR1YWwgdm9pZCBtYXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3luYyk7CiAgICAg
dm9pZCBzeW5jTGF5ZXJzKCk7CisgICAgdm9pZCBzeW5jTGF5ZXJzVGltZW91dChUaW1lcjxQYWdl
Q2xpZW50UUdyYXBoaWNzV2lkZ2V0PiopIHsgc3luY0xheWVycygpOyB9CiAKICAgICAvLyBRR3Jh
cGhpY3NXZWJWaWV3IGNhbiByZW5kZXIgY29tcG9zaXRlZCBsYXllcnMKICAgICB2aXJ0dWFsIGJv
b2wgYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
QEAgLTIxNiwxMiArMjI2LDEyIEBAIHB1YmxpYzoKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgUGxhdGZvcm1MYXllclByb3h5
UXQqIHBsYXRmb3JtTGF5ZXJQcm94eTsKKyAgICBPd25QdHI8VGV4dHVyZU1hcHBlck5vZGVDbGll
bnRRdD4gdGV4dHVyZU1hcHBlck5vZGVDbGllbnQ7CiAjZWxzZQogICAgIFFXZWFrUG9pbnRlcjxR
R3JhcGhpY3NPYmplY3Q+IHJvb3RHcmFwaGljc0xheWVyOwogI2VuZGlmCiAgICAgLy8gd2UgaGF2
ZSB0byBmbHVzaCBxdWl0ZSBvZnRlbiwgc28gd2UgdXNlIGEgbWV0YS1tZXRob2QgaW5zdGVhZCBv
ZiBRVGltZXI6OnNpbmdsZVNob3QgZm9yIHB1dHRpbmcgdGhlIGV2ZW50IGluIHRoZSBxdWV1ZQot
ICAgIFFNZXRhTWV0aG9kIHN5bmNNZXRhTWV0aG9kOworICAgIFRpbWVyPFBhZ2VDbGllbnRRR3Jh
cGhpY3NXaWRnZXQ+IHN5bmNUaW1lcjsKIAogICAgIC8vIHdlIG5lZWQgdG8gc3luYyB0aGUgbGF5
ZXJzIGlmIHdlIGdldCBhIHNwZWNpYWwgY2FsbCBmcm9tIHRoZSBXZWJDb3JlCiAgICAgLy8gY29t
cG9zaXRvciB0ZWxsaW5nIHVzIHRvIGRvIHNvLiBXZSdsbCBnZXQgdGhhdCBjYWxsIGZyb20gQ2hy
b21lQ2xpZW50UXQKLS0gCjEuNy4zLjMKCg==
</data>
<flag name="review"
          id="85760"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92753</attachid>
            <date>2011-05-08 19:20:57 -0700</date>
            <delta_ts>2011-05-08 19:25:56 -0700</delta_ts>
            <desc>Patch 4: Enable 3D in the build scripts and settings</desc>
            <filename>0004-Enable-3D-rendering-by-default-for-Qt.patch</filename>
            <type>text/plain</type>
            <size>3744</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSAzYjIxMGJiZmVmZTczYjI1MWQ2MTU3NWUwNDFiMGRiNWVmYTAyZjU4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgpEYXRlOiBTYXQsIDcgTWF5IDIwMTEgMTU6MzA6MzMgLTA3MDAKU3ViamVjdDogW1BBVENI
IDA0LzEwXSBFbmFibGUgM0QgcmVuZGVyaW5nIGJ5IGRlZmF1bHQgZm9yIFF0CgotLS0KIFNvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAgfCAgICA5ICsrKysrKystLQogU291cmNl
L1dlYktpdC9xdC9DaGFuZ2VMb2cgICAgICAgICAgICB8ICAgMTMgKysrKysrKysrKysrKwogVG9v
bHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKysrKysrKysrKysKIFRv
b2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0ICAgICAgICAgICAgfCAgICAyICstCiA0IGZpbGVzIGNo
YW5nZWQsIDMyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJzZXR0aW5ncy5jcHAKaW5kZXggMzYwNjc2NC4uODgwZWY0OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2Vic2V0dGluZ3MuY3BwCkBAIC0xNzIsMTMgKzE3MiwxOCBAQCB2b2lkIFFXZWJTZXR0
aW5nc1ByaXZhdGU6OmFwcGx5KCkKICAgICAgICAgdmFsdWUgPSBhdHRyaWJ1dGVzLnZhbHVlKFFX
ZWJTZXR0aW5nczo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbC0+YXR0cmlidXRlcy52YWx1ZShRV2ViU2V0
dGluZ3M6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKSk7CiAKLSAgICAgICAgc2V0dGlu
Z3MtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHZhbHVlKTsKKyAgICAgICAgc2V0
dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3IzRFRyYW5zZm9ybXNFbmFibGVkKHZh
bHVlKTsKKyAgICAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmlt
YXRpb25FbmFibGVkKHZhbHVlKTsKKyAgICAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdGb3JWaWRlb0VuYWJsZWQodmFsdWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQkdM
KQogICAgICAgICB2YWx1ZSA9IGF0dHJpYnV0ZXMudmFsdWUoUVdlYlNldHRpbmdzOjpXZWJHTEVu
YWJsZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwtPmF0dHJpYnV0
ZXMudmFsdWUoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQpKTsKIAogICAgICAgICBzZXR0aW5n
cy0+c2V0V2ViR0xFbmFibGVkKHZhbHVlKTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisgICAgICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQ2FudmFz
RW5hYmxlZCh2YWx1ZSk7CisjZW5kaWYKICNlbmRpZgogCiAgICAgICAgIHZhbHVlID0gYXR0cmli
dXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6Okh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZCwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFu
Z2VMb2cKaW5kZXggOTE1ZjJmNy4uMjM4NjExZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NiBAQAorMjAxMS0wNS0wNyAgTm9hbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1Rl
eG1hcF0gVXBzdHJlYW0gdGV4dHVyZS1tYXBwZXIgY2hhbmdlcyBmcm9tIFF0J3MgV2ViS2l0MiBi
cmFuY2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYw
NDM5CisKKyAgICAgICAgUGF0Y2ggNC8xMDogUGVyIGNoYW5nZXMgdG8gc2V0dGluZ3MgdG8gYWxs
b3cgYmV0dGVyIGdyYW51bGFyaXR5IGZvciBhY2NlbGVyYXRlZAorICAgICAgICBjb21wb3NpdGlu
ZyBjaG9pY2VzLCB3ZSBuZWVkIHRvIHNldCB0aG9zZSBvcHRpb25zIGZvciBRdC4KKworICAgICAg
ICAqIEFwaS9xd2Vic2V0dGluZ3MuY3BwOgorICAgICAgICAoUVdlYlNldHRpbmdzUHJpdmF0ZTo6
YXBwbHkpOgorCiAyMDExLTA1LTA3ICBKb2UgTWFzb24gIDxqbWFzb25AcmltLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYW5pZWwgQmF0ZXMuCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzAwNWJkMi4uMmZjNWExOCAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisy
MDExLTA1LTA3ICBOb2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVGV4bWFwXSBV
cHN0cmVhbSB0ZXh0dXJlLW1hcHBlciBjaGFuZ2VzIGZyb20gUXQncyBXZWJLaXQyIGJyYW5jaAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA0MzkKKwor
ICAgICAgICBQYXRjaCA0LzEwOiBRdCBzaG91bGQgYnVpbGQgM0QgcmVuZGVyaW5nIGJ5IGRlZmF1
bHQuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDoKKwogMjAxMS0wNS0wNyAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMg
U2VpZGVsLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQgYi9Ub29scy9T
Y3JpcHRzL2J1aWxkLXdlYmtpdAppbmRleCAyZjZmODQ1Li5iMWIyYzU5IDEwMDc1NQotLS0gYS9U
b29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAorKysgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtp
dApAQCAtMTMxLDcgKzEzMSw3IEBAIG15IEBmZWF0dXJlcyA9ICgKICAgICAgIGRlZmluZSA9PiAi
RU5BQkxFX1dFQkdMIiwgZGVmYXVsdCA9PiAoaXNBcHBsZU1hY1dlYktpdCgpICYmICFpc0xlb3Bh
cmQoKSksIHZhbHVlID0+IFwkdGhyZWVEQ2FudmFzU3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24g
PT4gIjNkLXJlbmRlcmluZyIsIGRlc2MgPT4gIlRvZ2dsZSAzRCByZW5kZXJpbmcgc3VwcG9ydCIs
Ci0gICAgICBkZWZpbmUgPT4gIkVOQUJMRV8zRF9SRU5ERVJJTkciLCBkZWZhdWx0ID0+IGlzQXBw
bGVNYWNXZWJLaXQoKSwgdmFsdWUgPT4gXCR0aHJlZURSZW5kZXJpbmdTdXBwb3J0IH0sCisgICAg
ICBkZWZpbmUgPT4gIkVOQUJMRV8zRF9SRU5ERVJJTkciLCBkZWZhdWx0ID0+IChpc0FwcGxlTWFj
V2ViS2l0KCkgfHwgaXNRdCgpKSwgdmFsdWUgPT4gXCR0aHJlZURSZW5kZXJpbmdTdXBwb3J0IH0s
CiAKICAgICB7IG9wdGlvbiA9PiAiYWNjZWxlcmF0ZWQtMmQtY2FudmFzIiwgZGVzYyA9PiAiVG9n
Z2xlIGFjY2VsZXJhdGVkIDJEIGNhbnZhcyBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5B
QkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUyIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRhY2Nl
bGVyYXRlZDJkQ2FudmFzU3VwcG9ydCB9LAotLSAKMS43LjMuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92754</attachid>
            <date>2011-05-08 19:28:30 -0700</date>
            <delta_ts>2011-05-09 01:11:17 -0700</delta_ts>
            <desc>Patch 4: Enable 3D in the build scripts and settings</desc>
            <filename>0004-Enable-3D-rendering-by-default-for-Qt.patch</filename>
            <type>text/plain</type>
            <size>3744</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSAzYjIxMGJiZmVmZTczYjI1MWQ2MTU3NWUwNDFiMGRiNWVmYTAyZjU4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgpEYXRlOiBTYXQsIDcgTWF5IDIwMTEgMTU6MzA6MzMgLTA3MDAKU3ViamVjdDogW1BBVENI
IDA0LzEwXSBFbmFibGUgM0QgcmVuZGVyaW5nIGJ5IGRlZmF1bHQgZm9yIFF0CgotLS0KIFNvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAgfCAgICA5ICsrKysrKystLQogU291cmNl
L1dlYktpdC9xdC9DaGFuZ2VMb2cgICAgICAgICAgICB8ICAgMTMgKysrKysrKysrKysrKwogVG9v
bHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKysrKysrKysrKysKIFRv
b2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0ICAgICAgICAgICAgfCAgICAyICstCiA0IGZpbGVzIGNo
YW5nZWQsIDMyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJzZXR0aW5ncy5jcHAKaW5kZXggMzYwNjc2NC4uODgwZWY0OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2Vic2V0dGluZ3MuY3BwCkBAIC0xNzIsMTIgKzE3MiwxOCBAQCB2b2lkIFFXZWJTZXR0
aW5nc1ByaXZhdGU6OmFwcGx5KCkKICAgICAgICAgdmFsdWUgPSBhdHRyaWJ1dGVzLnZhbHVlKFFX
ZWJTZXR0aW5nczo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbC0+YXR0cmlidXRlcy52YWx1ZShRV2ViU2V0
dGluZ3M6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKSk7CiAKICAgICAgICAgc2V0dGlu
Z3MtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHZhbHVlKTsKKyAgICAgICAgc2V0
dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3IzRFRyYW5zZm9ybXNFbmFibGVkKHZh
bHVlKTsKKyAgICAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmlt
YXRpb25FbmFibGVkKHZhbHVlKTsKKyAgICAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdGb3JWaWRlb0VuYWJsZWQodmFsdWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQkdM
KQogICAgICAgICB2YWx1ZSA9IGF0dHJpYnV0ZXMudmFsdWUoUVdlYlNldHRpbmdzOjpXZWJHTEVu
YWJsZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwtPmF0dHJpYnV0
ZXMudmFsdWUoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQpKTsKIAogICAgICAgICBzZXR0aW5n
cy0+c2V0V2ViR0xFbmFibGVkKHZhbHVlKTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisgICAgICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQ2FudmFz
RW5hYmxlZCh2YWx1ZSk7CisjZW5kaWYKICNlbmRpZgogCiAgICAgICAgIHZhbHVlID0gYXR0cmli
dXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6Okh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZCwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFu
Z2VMb2cKaW5kZXggOTE1ZjJmNy4uMjM4NjExZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NiBAQAorMjAxMS0wNS0wNyAgTm9hbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1Rl
eG1hcF0gVXBzdHJlYW0gdGV4dHVyZS1tYXBwZXIgY2hhbmdlcyBmcm9tIFF0J3MgV2ViS2l0MiBi
cmFuY2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYw
NDM5CisKKyAgICAgICAgUGF0Y2ggNC8xMDogUGVyIGNoYW5nZXMgdG8gc2V0dGluZ3MgdG8gYWxs
b3cgYmV0dGVyIGdyYW51bGFyaXR5IGZvciBhY2NlbGVyYXRlZAorICAgICAgICBjb21wb3NpdGlu
ZyBjaG9pY2VzLCB3ZSBuZWVkIHRvIHNldCB0aG9zZSBvcHRpb25zIGZvciBRdC4KKworICAgICAg
ICAqIEFwaS9xd2Vic2V0dGluZ3MuY3BwOgorICAgICAgICAoUVdlYlNldHRpbmdzUHJpdmF0ZTo6
YXBwbHkpOgorCiAyMDExLTA1LTA3ICBKb2UgTWFzb24gIDxqbWFzb25AcmltLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYW5pZWwgQmF0ZXMuCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzAwNWJkMi4uMmZjNWExOCAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisy
MDExLTA1LTA3ICBOb2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVGV4bWFwXSBV
cHN0cmVhbSB0ZXh0dXJlLW1hcHBlciBjaGFuZ2VzIGZyb20gUXQncyBXZWJLaXQyIGJyYW5jaAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA0MzkKKwor
ICAgICAgICBQYXRjaCA0LzEwOiBRdCBzaG91bGQgYnVpbGQgM0QgcmVuZGVyaW5nIGJ5IGRlZmF1
bHQuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDoKKwogMjAxMS0wNS0wNyAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMg
U2VpZGVsLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQgYi9Ub29scy9T
Y3JpcHRzL2J1aWxkLXdlYmtpdAppbmRleCAyZjZmODQ1Li5iMWIyYzU5IDEwMDc1NQotLS0gYS9U
b29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAorKysgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtp
dApAQCAtMTMxLDcgKzEzMSw3IEBAIG15IEBmZWF0dXJlcyA9ICgKICAgICAgIGRlZmluZSA9PiAi
RU5BQkxFX1dFQkdMIiwgZGVmYXVsdCA9PiAoaXNBcHBsZU1hY1dlYktpdCgpICYmICFpc0xlb3Bh
cmQoKSksIHZhbHVlID0+IFwkdGhyZWVEQ2FudmFzU3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24g
PT4gIjNkLXJlbmRlcmluZyIsIGRlc2MgPT4gIlRvZ2dsZSAzRCByZW5kZXJpbmcgc3VwcG9ydCIs
Ci0gICAgICBkZWZpbmUgPT4gIkVOQUJMRV8zRF9SRU5ERVJJTkciLCBkZWZhdWx0ID0+IGlzQXBw
bGVNYWNXZWJLaXQoKSwgdmFsdWUgPT4gXCR0aHJlZURSZW5kZXJpbmdTdXBwb3J0IH0sCisgICAg
ICBkZWZpbmUgPT4gIkVOQUJMRV8zRF9SRU5ERVJJTkciLCBkZWZhdWx0ID0+IChpc0FwcGxlTWFj
V2ViS2l0KCkgfHwgaXNRdCgpKSwgdmFsdWUgPT4gXCR0aHJlZURSZW5kZXJpbmdTdXBwb3J0IH0s
CiAKICAgICB7IG9wdGlvbiA9PiAiYWNjZWxlcmF0ZWQtMmQtY2FudmFzIiwgZGVzYyA9PiAiVG9n
Z2xlIGFjY2VsZXJhdGVkIDJEIGNhbnZhcyBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5B
QkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUyIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRhY2Nl
bGVyYXRlZDJkQ2FudmFzU3VwcG9ydCB9LAotLSAKMS43LjMuMwoK
</data>
<flag name="review"
          id="85775"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92900</attachid>
            <date>2011-05-09 18:16:10 -0700</date>
            <delta_ts>2011-05-10 15:10:43 -0700</delta_ts>
            <desc>92740: Patch 9: TextureMapperNode refactoring (the big patch)</desc>
            <filename>0001-TextureMapperNode.patch</filename>
            <type>text/plain</type>
            <size>76582</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSAxYzM4Yzc1MmNiYTA0NTIwMWU4MGY1YmU2NzM0MjNlZTRkYTY4ZjA2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgpEYXRlOiBTdW4sIDggTWF5IDIwMTEgMTk6MDM6MDEgLTA3MDAKU3ViamVjdDogW1BBVENI
IDEvMl0gVGV4dHVyZU1hcHBlck5vZGUKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDc3ICsrLQogLi4uL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgfCAgIDMyICstCiAuLi4vZ3JhcGhpY3MvdGV4
bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggICB8ICAgMTIgKy0KIC4uLi9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIHwgMTA2OCArKysrKysrKyst
LS0tLS0tLS0tLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5oICAgfCAgMTc5ICsrLS0KIDUgZmlsZXMgY2hhbmdlZCwgNjMyIGluc2VydGlvbnMoKyksIDcz
NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGJjMDY2Ni4uNDI1NmYxZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSw2ICsxLDgxIEBACiAyMDExLTA1LTA3ICBOb2FtIFJvc2VudGhhbCAgPG5vYW0ucm9z
ZW50aGFsQG5va2lhLmNvbT4KIAotICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENo
cmlzdGlhbnNlbi4KKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgW1RleG1hcF1bUXRdIFVwc3RyZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5nZXMgZnJvbSBRdCdz
IFdlYktpdDIgYnJhbmNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02MDQzOQorCisgICAgICAgIFBhdGNoIDkvMTA6IFJlZmFjdG9yIFRleHR1cmVNYXBw
ZXJOb2RlIGZvciBwZXJmb3JtYW5jZSwgcmVhZGFiaWxpdHkgYW5kIGFjY3VyYWN5LgorICAgICAg
ICBDaGFuZ2VzIGluY2x1ZGU6CisgICAgICAgIDEuIFN1cHBvcnQgdGhlIG5ldyBUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllciBmb3IgbWVkaWEgJiBXZWJHTC4KKyAgICAgICAgMi4gVXNlIGEgcG9v
bCBmb3IgaW50ZXJtZWRpYXRlIHN1cmZhY2VzLCB0byBhdm9pZCBjb25zdGFudCBhbGxvY2F0aW5n
L2ZyZWVpbmcgb2YgdGV4dHVyZXMuCisgICAgICAgIDMuIERpdmlkZSBjb21wdXRhdGlvbiBvcGVy
YXRpb25zIHRvIGRpZmZlcmVudCBzbWFsbGVyIGZ1bmN0aW9ucy4KKyAgICAgICAgNC4gR2V0IHJp
ZCBvZiBzY2lzc29yL2NsaXAgbGF5ZXJzLCB1c2UgdHJhbnNmb3JtZWQgY2xpcCBpbnN0ZWFkLgor
ICAgICAgICA1LiBBbGxvdyB0aWxpbmcgZm9yIGJpZyBsYXllcnMuCisKKworICAgICAgICBObyBu
ZXcgdGVzdHMuIFRlc3RzIGluIExheW91dFRlc3RzL2NvbXBvc2l0aW5nIGNvdmVyIHRoaXMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9NZWRpYSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXll
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6Om5vZGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXI6OmdldEludGVybWVkaWF0ZVN1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclN1cmZhY2VNYW5hZ2VyOjpyZWxlYXNlSW50
ZXJtZWRpYXRlU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1RleHR1cmVNYXBwZXJOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpyb290TGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldFRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVBlcnNwZWN0aXZlVHJhbnNmb3Jt
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvdW50RGVz
Y2VuZGFudHNXaXRoQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZTo6Y29tcHV0ZU92ZXJsYXBzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6OmNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMb2NhbFRyYW5zZm9ybUlmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpuZWVkc1RvQ29tcHV0ZUJvdW5k
aW5nUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZUFs
bFRyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1
dGVCb3VuZGluZ1JlY3RGcm9tUm9vdElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpjb21wdXRlVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6OmNvbXB1dGVWaXNpYmxlUmVjdElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjpyZW5kZXJDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJOb2RlOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
Tm9kZTo6dGFyZ2V0UmVjdEZvclRpbGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlOjpwYWludFNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5v
ZGU6OmNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyTm9kZTo6c29ydEJ5Wk9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlOjpwYWludFNlbGZBbmRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyTm9kZTo6cGFpbnRSZWZsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpwYWludFJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyTm9kZTo6flRleHR1cmVNYXBwZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpyZXNldERlc2NlbmRhbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpzZXRDb250ZW50U2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlck5vZGU6OnNldFZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyTm9kZTo6aW52YWxpZGF0ZU92ZXJsYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmlt
YXRpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ck5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQYWludE9wdGlvbnM6OlRl
eHR1cmVNYXBwZXJQYWludE9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckFuaW1hdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2Rl
OjpUZXh0dXJlTWFwcGVyTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0T3BhY2l0
eSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0VGV4dHVyZU1hcHBl
cik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6bWVkaWEpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlck5vZGU6OnRhcmdldFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGU6OmVudGlyZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6OmNvbnRlbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJO
b2RlOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlT3duZWRQdHIpOgor
CisyMDExLTA1LTA3ICBOb2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAogICAgICAgICBbVGV4bWFw
XSBVcHN0cmVhbSB0ZXh0dXJlLW1hcHBlciBjaGFuZ2VzIGZyb20gUXQncyBXZWJLaXQyIGJyYW5j
aAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA0MzkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCmluZGV4IGJiYTEwOWUu
LjU1ZDFjMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApA
QCAtNzAsNyArNzAsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVk
c0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGlmIChtX3BlbmRp
bmdDb250ZW50Lm5lZWRzRGlzcGxheSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcGVuZGluZ0Nv
bnRlbnQubmVlZHNEaXNwbGF5UmVjdC51bml0ZShJbnRSZWN0KHJlY3QpKTsKKyAgICBtX3BlbmRp
bmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QudW5pdGUocmVjdCk7CiAgICAgbm90aWZ5Q2hhbmdl
KFRleHR1cmVNYXBwZXJOb2RlOjpEaXNwbGF5Q2hhbmdlKTsKIH0KIApAQCAtMzE5LDM2ICszMTks
MTIgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb0ltYWdl
KEltYWdlKiBpbWFnZSkKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1h
Z2UpOwogfQogCi0vKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKLSovCi12b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IpCi17Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50
Q2hhbmdlKTsKLSAgICBtX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID0gVGV4dHVyZU1hcHBl
ck5vZGU6OkNvbG9yQ29udGVudFR5cGU7Ci0gICAgbV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5k
Q29sb3IgPSBjb2xvcjsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c0JhY2tncm91bmRD
b2xvcihjb2xvcik7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIG1lZGlhKQordm9pZCBHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb01lZGlhKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyKiBtZWRpYSkKIHsKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvTWVkaWEobWVk
aWEpOwogICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudENoYW5nZSk7
CiAgICAgbV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9IG1lZGlhID8gVGV4dHVyZU1hcHBl
ck5vZGU6Ok1lZGlhQ29udGVudFR5cGUgOiBUZXh0dXJlTWFwcGVyTm9kZTo6SFRNTENvbnRlbnRU
eXBlOwotICAgIGlmIChtZWRpYSkKLSAgICAgICAgbV9wZW5kaW5nQ29udGVudC5tZWRpYSA9IHN0
YXRpY19jYXN0PFRleHR1cmVNYXBwZXJNZWRpYUxheWVyKj4obWVkaWEpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9wZW5kaW5nQ29udGVudC5tZWRpYSA9IDA7Ci19Ci0KLS8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQotKi8KLXZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRl
bnRzT3JpZW50YXRpb24oQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIG9yaWVudGF0
aW9uKQotewotICAgIGlmIChjb250ZW50c09yaWVudGF0aW9uKCkgPT0gb3JpZW50YXRpb24pCi0g
ICAgICAgIHJldHVybjsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRl
bnRzT3JpZW50YXRpb25DaGFuZ2UpOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3Jp
ZW50YXRpb24ob3JpZW50YXRpb24pOworICAgIG1fcGVuZGluZ0NvbnRlbnQubWVkaWEgPSBtZWRp
YTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0zNjksNyArMzQ1LDcgQEAg
dm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUoKQog
Ki8KIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUxh
eWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9ub2RlLmdldCgpOworICAgIHJldHVybiBjb25z
dF9jYXN0PFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKj4obm9kZSgpLT5tZWRpYSgpKTsKIH0K
IAogUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUoR3JhcGhp
Y3NMYXllckNsaWVudCogY2xpZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuaAppbmRleCBkY2Y0OTM4Li43YjdjZGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuaApAQCAtNDUsNiArNDUsNyBAQCBwdWJsaWM6CiAKICAgICAvLyByZWltcHMg
ZnJvbSBHcmFwaGljc0xheWVyLmgKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7
CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkgeyBzZXROZWVkc0Rp
c3BsYXkoKTsgfTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0
IEZsb2F0UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQoR3JhcGhpY3NMYXllciog
bGF5ZXIpOwogICAgIHZpcnR1YWwgYm9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhp
Y3NMYXllcio+Jik7CkBAIC03MiwyNCArNzMsMTkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c0Jh
Y2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOwotI2lmIEVOQUJMRShXRUJHTCkKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29udGVudHNUb0dyYXBoaWNzQ29udGV4dDNEKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dDNEKik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEdyYXBoaWNzQ29udGV4dDNETmVlZHNEaXNw
bGF5KCk7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNPcmllbnRhdGlvbihD
b21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gb3JpZW50YXRpb24pOworICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIGNhbnZhcykgeyBzZXRD
b250ZW50c1RvTWVkaWEoY2FudmFzKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRp
bmdTdGF0ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUp
OwogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogCi0g
ICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNv
bnN0IEludFNpemUmIC8qYm94U2l6ZSovLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcm
IC8qa2V5ZnJhbWVzTmFtZSovLCBkb3VibGUgLyp0aW1lT2Zmc2V0Ki8pIHsgcmV0dXJuIGZhbHNl
OyB9Ci0KICAgICB2b2lkIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hhbmdlTWFz
ayBjaGFuZ2VNYXNrKTsKICAgICBpbmxpbmUgVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnREYXRh
JiBwZW5kaW5nQ29udGVudCgpIHsgcmV0dXJuIG1fcGVuZGluZ0NvbnRlbnQ7IH0KICAgICBpbmxp
bmUgaW50IGNoYW5nZU1hc2soKSBjb25zdCB7IHJldHVybiBtX2NoYW5nZU1hc2s7IH0KICAgICB2
b2lkIGRpZFN5bmNocm9uaXplKCk7CiAKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQorCiBwcml2YXRlOgogICAgIE93blB0cjxUZXh0
dXJlTWFwcGVyTm9kZT4gbV9ub2RlOwogICAgIGJvb2wgbV9zeW5jUXVldWVkOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyTm9kZS5jcHAKaW5kZXggYmY1M2U2MS4uMmE4ODVjOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ck5vZGUuY3BwCkBAIC0yMCw3NDIgKzIwLDU3NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJOb2RlLmgiCiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisKICNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgogCituYW1l
c3BhY2UgeworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBnVGlsZURpbWVuc2lvbiA9IDEwMjQuMDsK
K30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBUZXh0dXJlTWFwcGVyQ2FjaGUgewor
Y2xhc3MgVGV4dHVyZU1hcHBlclN1cmZhY2VNYW5hZ2VyIHsKIHB1YmxpYzoKLSAgICB2b2lkIG1h
cmsoQml0bWFwVGV4dHVyZSogdGV4dHVyZSk7CisgICAgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1h
cHBlcjsKKyAgICBWZWN0b3I8UmVmUHRyPEJpdG1hcFRleHR1cmU+ID4gc3VyZmFjZXM7CisgICAg
SW50U2l6ZSB2aWV3cG9ydFNpemU7CiAKLSAgICBjbGFzcyBFbnRyeSB7Ci0gICAgcHVibGljOgot
ICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZTsKLSAgICAgICAgRW50cnkoKSA6
IHByZXZpb3VzQ29zdCgwKSB7IH0KLSAgICAgICAgaW5saW5lIGludCBjb21wdXRlQ29zdCgpIGNv
bnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghdGV4dHVyZSB8fCAhdGV4dHVyZS0+aXNW
YWxpZCgpIHx8IHRleHR1cmUtPmlzUGFja2VkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgICAgICBjb25zdCBJbnRTaXplIHRleHR1cmVTaXplID0gdGV4dHVyZS0+c2l6ZSgp
OwotICAgICAgICAgICAgLy8gQW4gaW1hZ2UncyBjb3N0IGluIGJ5dGVzIGlzIHdpZHRoICogaGVp
Z2h0ICogYnl0ZXMgcGVyIHBpeGVsICg0KS4KLSAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlU2l6
ZS53aWR0aCgpICogdGV4dHVyZVNpemUuaGVpZ2h0KCkgKiA0OworICAgIFBhc3NSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gZ2V0SW50ZXJtZWRpYXRlU3VyZmFjZSgpCisgICAgeworICAgICAgICBJbnRT
aXplIG5ld1ZpZXdwb3J0U2l6ZSA9IHRleHR1cmVNYXBwZXItPnZpZXdwb3J0U2l6ZSgpOworICAg
ICAgICBpZiAobmV3Vmlld3BvcnRTaXplICE9IHZpZXdwb3J0U2l6ZSkgeworICAgICAgICAgICAg
dmlld3BvcnRTaXplID0gbmV3Vmlld3BvcnRTaXplOworICAgICAgICAgICAgc3VyZmFjZXMuY2xl
YXIoKTsKICAgICAgICAgfQotICAgICAgICBFbnRyeShCaXRtYXBUZXh0dXJlKiBuZXdUZXh0dXJl
KQotICAgICAgICAgICAgOiB0ZXh0dXJlKG5ld1RleHR1cmUpCi0gICAgICAgIHsKKyAgICAgICAg
aWYgKHN1cmZhY2VzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1
cmU+IG5ld1N1cmZhY2UgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAg
ICAgICBuZXdTdXJmYWNlLT5yZXNldCh2aWV3cG9ydFNpemUsIGZhbHNlKTsKKyAgICAgICAgICAg
IHJldHVybiBuZXdTdXJmYWNlLmdldCgpOwogICAgICAgICB9Ci0gICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBFbnRyeSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIHRleHR1cmUgPT0gb3RoZXIu
dGV4dHVyZTsgfQotICAgICAgICBpbnQgcHJldmlvdXNDb3N0OwotICAgIH07CisgICAgICAgIFJl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBzdXJmYWNlID0gc3VyZmFjZXMubGFzdCgpOworICAgICAgICBz
dXJmYWNlLT5yZXNldCh2aWV3cG9ydFNpemUsIGZhbHNlKTsKKyAgICAgICAgc3VyZmFjZXMucmVt
b3ZlTGFzdCgpOworICAgICAgICBzdXJmYWNlLT5sb2NrKCk7CisgICAgICAgIHJldHVybiBzdXJm
YWNlLmdldCgpOworICAgIH0KIAotICAgIFRleHR1cmVNYXBwZXJDYWNoZSgpCi0gICAgICAgIDog
bV90b3RhbENvc3QoMCkKKyAgICB2b2lkIHJlbGVhc2VJbnRlcm1lZGlhdGVTdXJmYWNlKEJpdG1h
cFRleHR1cmUqIHN1cmZhY2UpCiAgICAgeworICAgICAgICBpZiAoIXN1cmZhY2UpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIHN1cmZhY2VzLmFwcGVuZChzdXJmYWNlKTsKKyAgICAgICAg
c3VyZmFjZS0+dW5sb2NrKCk7CiAgICAgfQotCi0gICAgdm9pZCBwdXJnZSgpOwotICAgIFZlY3Rv
cjxFbnRyeT4gbV9kYXRhOwotICAgIGludCBtX3RvdGFsQ29zdDsKLSNpZm5kZWYgVEVYTUFQX1RF
WFRVUkVfQ0FDSEVfS0JTCi0jZGVmaW5lIFRFWE1BUF9URVhUVVJFX0NBQ0hFX0tCUyAyNCAqIDEw
MjQKLSNlbmRpZgotICAgIHN0YXRpYyBjb25zdCBpbnQgTWF4Q29zdCA9IFRFWE1BUF9URVhUVVJF
X0NBQ0hFX0tCUyAqIDEwMjQ7Ci0gICAgc3RhdGljIGNvbnN0IGludCBQdXJnZUFtb3VudCA9IE1h
eENvc3QgLyA0OwogfTsKIAorVGV4dHVyZU1hcHBlck5vZGUqIHRvVGV4dHVyZU1hcHBlck5vZGUo
R3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgcmV0dXJuIGxheWVyID8gdG9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcihsYXllciktPm5vZGUoKSA6IDA7Cit9CiAKLXZvaWQgVGV4dHVyZU1h
cHBlckNhY2hlOjpwdXJnZSgpCitUZXh0dXJlTWFwcGVyTm9kZSogVGV4dHVyZU1hcHBlck5vZGU6
OnJvb3RMYXllcigpCiB7Ci0gICAgY29uc3QgaW50IHNpemUgPSBtX2RhdGEuc2l6ZSgpOworICAg
IGlmIChtX2VmZmVjdFRhcmdldCkKKyAgICAgICAgcmV0dXJuIG1fZWZmZWN0VGFyZ2V0LT5yb290
TGF5ZXIoKTsKKyAgICBpZiAobV9wYXJlbnQpCisgICAgICAgIHJldHVybiBtX3BhcmVudC0+cm9v
dExheWVyKCk7CisgICAgcmV0dXJuIHRoaXM7Cit9CiAKLSAgICBpZiAobV90b3RhbENvc3QgPD0g
VGV4dHVyZU1hcHBlckNhY2hlOjpNYXhDb3N0KQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0
VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit7CisgICAgaWYg
KG1fdHJhbnNmb3Jtcy5iYXNlID09IG1hdHJpeCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8g
RW5zdXJlIHRoYXQgd2UgaGF2ZSB0aGUgcmlnaHQgY291bnQuIEl0IG1pZ2h0IGJlIGluYWNjdXJh
dGUgaWYgY29udGVudCBjaGFuZ2VkIHNpemUuCi0gICAgLy8gV2Ugb25seSBkbyB0aGlzIHdoZW4g
d2UncmUgYWN0dWFsbHkgcmVhZHkgdG8gcHVyZ2UuCi0gICAgbV90b3RhbENvc3QgPSAwOwotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBtX3RvdGFsQ29zdCArPSBt
X2RhdGFbaV0uY29tcHV0ZUNvc3QoKTsKLQotICAgIGZvciAoaW50IGkgPSBzaXplLTE7IGkgPj0g
MCAmJiBtX3RvdGFsQ29zdCA+IFRleHR1cmVNYXBwZXJDYWNoZTo6TWF4Q29zdCAtIFRleHR1cmVN
YXBwZXJDYWNoZTo6UHVyZ2VBbW91bnQ7IC0taSkgewotICAgICAgICBFbnRyeSYgZW50cnkgPSBt
X2RhdGFbaV07Ci0gICAgICAgIGlmIChlbnRyeS50ZXh0dXJlLT5pc0xvY2tlZCgpIHx8ICFlbnRy
eS50ZXh0dXJlLT5pc1ZhbGlkKCkgfHwgZW50cnkudGV4dHVyZS0+aXNQYWNrZWQoKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtX3RvdGFsQ29zdCAtPSBlbnRyeS5wcmV2aW91c0Nv
c3Q7Ci0gICAgICAgIGVudHJ5LnRleHR1cmUtPnBhY2soKTsKLSAgICAgICAgbV9kYXRhLnJlbW92
ZShpKTsKLSAgICB9CisgICAgbV90cmFuc2Zvcm1zLmJhc2UgPSBtYXRyaXg7CiB9CiAKLXZvaWQg
VGV4dHVyZU1hcHBlckNhY2hlOjptYXJrKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpCit2b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlUGVyc3BlY3RpdmVUcmFuc2Zvcm1JZk5lZWRlZCgpCiB7
Ci0gICAgaWYgKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEVudHJ5IGVudHJ5KHRleHR1cmUpOwotICAgIHNpemVfdCBpbmRleCA9IG1fZGF0
YS5maW5kKGVudHJ5KTsKLSAgICBpZiAoIWluZGV4KQorICAgIGlmIChtX2NoaWxkcmVuLmlzRW1w
dHkoKSB8fCBtX3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaW50IHByZXZpb3VzQ29zdCA9IDA7Ci0KLSAgICBpZiAoaW5kZXggPCBt
X2RhdGEuc2l6ZSgpKSB7Ci0gICAgICAgIHByZXZpb3VzQ29zdCA9IG1fZGF0YVtpbmRleF0ucHJl
dmlvdXNDb3N0OwotICAgICAgICBtX2RhdGEucmVtb3ZlKGluZGV4KTsKLSAgICB9Ci0gICAgY29u
c3QgaW50IGNvc3QgPSBlbnRyeS5jb21wdXRlQ29zdCgpOwotICAgIG1fdG90YWxDb3N0IC09IHBy
ZXZpb3VzQ29zdDsKLSAgICBtX3RvdGFsQ29zdCArPSAoZW50cnkucHJldmlvdXNDb3N0ID0gY29z
dCk7Ci0gICAgbV9kYXRhLnByZXBlbmQoZW50cnkpOworICAgIGNvbnN0IEZsb2F0UG9pbnQgY2Vu
dGVyUG9pbnQgPSBGbG9hdFBvaW50KG1fc2l6ZS53aWR0aCgpIC8gMiwgbV9zaXplLmhlaWdodCgp
IC8gMik7CisgICAgbV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlID0gVHJhbnNmb3JtYXRpb25NYXRy
aXgoKQorICAgICAgICAgICAgLnRyYW5zbGF0ZShjZW50ZXJQb2ludC54KCksIGNlbnRlclBvaW50
LnkoKSkKKyAgICAgICAgICAgIC5tdWx0aXBseShtX3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtKQor
ICAgICAgICAgICAgLnRyYW5zbGF0ZSgtY2VudGVyUG9pbnQueCgpLCAtY2VudGVyUG9pbnQueSgp
KTsKIH0KIAotY2xhc3MgVGV4dHVyZU1hcHBlckNhY2hlTG9jayB7Ci1wdWJsaWM6Ci0gICAgVGV4
dHVyZU1hcHBlckNhY2hlTG9jayhCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKSA6IG1fdGV4dHVyZSh0
ZXh0dXJlKQotICAgIHsKLSAgICAgICAgaWYgKG1fdGV4dHVyZSkKLSAgICAgICAgICAgIG1fdGV4
dHVyZS0+bG9jaygpOwotICAgIH0KLSAgICB+VGV4dHVyZU1hcHBlckNhY2hlTG9jaygpCi0gICAg
ewotICAgICAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICAgICAgbV90ZXh0dXJlLT51bmxvY2so
KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1fdGV4dHVy
ZTsKLX07Ci0KLQotVGV4dHVyZU1hcHBlckNhY2hlKiBUZXh0dXJlTWFwcGVyTm9kZTo6Y2FjaGUo
KQoraW50IFRleHR1cmVNYXBwZXJOb2RlOjpjb3VudERlc2NlbmRhbnRzV2l0aENvbnRlbnQoKSBj
b25zdAogewotICAgIFRleHR1cmVNYXBwZXJOb2RlKiByb290ID0gcm9vdExheWVyKCk7Ci0gICAg
aWYgKCFyb290KQorICAgIGlmICghbV9zdGF0ZS52aXNpYmxlIHx8IG1fb3BhY2l0eSA8IDAuMDEg
fHwgKCFtX3NpemUud2lkdGgoKSAmJiAhbV9zaXplLmhlaWdodCgpICYmIG1fc3RhdGUubWFza3NU
b0JvdW5kcykpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmICghcm9vdC0+bV9jYWNoZSkKLSAg
ICAgICAgcm9vdC0+bV9jYWNoZSA9IG5ldyBUZXh0dXJlTWFwcGVyQ2FjaGU7Ci0gICAgcmV0dXJu
IHJvb3QtPm1fY2FjaGU7Ci19CisgICAgaW50IGNvdW50ID0gKG1fc2l6ZS53aWR0aCgpICYmIG1f
c2l6ZS5oZWlnaHQoKSAmJiAobV9zdGF0ZS5kcmF3c0NvbnRlbnQgfHwgbV9jdXJyZW50Q29udGVu
dC5jb250ZW50VHlwZSAhPSBIVE1MQ29udGVudFR5cGUpKSA/IDEgOiAwOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgY291bnQgKz0g
bV9jaGlsZHJlbltpXS0+Y291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCk7CiAKLXZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OnNldE5lZWRzRGlzcGxheUluUmVjdChJbnRSZWN0IHJlY3QpCi17Ci0g
ICAgaWYgKG1fcGxhdGZvcm1DbGllbnQpIHsKLSAgICAgICAgaWYgKG1fc3RhdGUuaGFzU3VyZmFj
ZURlc2NlbmRhbnRzKSB7Ci0gICAgICAgICAgICBtX3BsYXRmb3JtQ2xpZW50LT5zZXROZWVkc0Rp
c3BsYXkoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICByZWN0Lmlu
dGVyc2VjdChJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsK
LSAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBtX3BsYXRmb3JtQ2xpZW50LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcGFyZW50KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3BhcmVudC0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIHJldHVybiBj
b3VudDsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0TmVlZHNEaXNwbGF5KCkKK3Zv
aWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVPdmVybGFwc0lmTmVlZGVkKCkKIHsKLSAgICBp
ZiAobV9lZmZlY3RUYXJnZXQpCi0gICAgICAgIG1fZWZmZWN0VGFyZ2V0LT5zZXROZWVkc0Rpc3Bs
YXkoKTsKLSAgICBpZiAobV90cmFuc2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVjdC5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBpZiAobV9zdGF0ZS5kcmF3c0NvbnRlbnQgfHwgbV9jdXJy
ZW50Q29udGVudC5jb250ZW50VHlwZSAhPSBIVE1MQ29udGVudFR5cGUpCi0gICAgICAgIHNldE5l
ZWRzRGlzcGxheUluUmVjdChtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0KTsKKyAgICBt
X3N0YXRlLm1pZ2h0SGF2ZU92ZXJsYXBzID0gY291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCkg
PiAxOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRQbGF0Zm9ybUxheWVyQ2xpZW50
KFRleHR1cmVNYXBwZXJMYXllckNsaWVudCogY2xpZW50KQordm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6Y29tcHV0ZVJlcGxpY2FUcmFuc2Zvcm1JZk5lZWRlZCgpCiB7Ci0gICAgbV9wbGF0Zm9ybUNs
aWVudCA9IGNsaWVudDsKLX0KKyAgICBpZiAoIW1fc3RhdGUucmVwbGljYUxheWVyKQorICAgICAg
ICByZXR1cm47CiAKLWludCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcGFyZUdyYXBoaWNzTGF5ZXJz
WlZhbHVlKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCi17Ci0gICAgdHlwZWRlZiBjb25z
dCBUZXh0dXJlTWFwcGVyTm9kZSogTm9kZVB0cjsKLSAgICBjb25zdCBOb2RlUHRyKiBub2RlQSA9
IHN0YXRpY19jYXN0PGNvbnN0IE5vZGVQdHIqPihhKTsKLSAgICBjb25zdCBOb2RlUHRyKiBub2Rl
QiA9IHN0YXRpY19jYXN0PGNvbnN0IE5vZGVQdHIqPihiKTsKLSAgICByZXR1cm4gaW50KCgoKm5v
ZGVBKS0+bV90cmFuc2Zvcm1zLmNlbnRlclogLSAoKm5vZGVCKS0+bV90cmFuc2Zvcm1zLmNlbnRl
clopICogMTAwMCk7CisgICAgbV90cmFuc2Zvcm1zLnJlcGxpY2EgPQorICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeChtX3RyYW5zZm9ybXMudGFyZ2V0KQorICAgICAgICAgICAgLm11bHRpcGx5
KG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3RyYW5zZm9ybXMubG9jYWwpCisgICAgICAgICAgICAu
bXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgobV90cmFuc2Zvcm1zLnRhcmdldCkuaW52ZXJz
ZSgpKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c29ydEJ5Wk9yZGVyKFZlY3RvcjxU
ZXh0dXJlTWFwcGVyTm9kZSogPiYgYXJyYXksIGludCBmaXJzdCwgaW50IGxhc3QpCit2b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlTG9jYWxUcmFuc2Zvcm1JZk5lZWRlZCgpCiB7Ci0gICAg
cXNvcnQoYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIHNpemVvZihUZXh0dXJlTWFwcGVyTm9k
ZSopLCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKTsKKyAg
ICBmbG9hdCBvcmlnaW5YID0gbV9zdGF0ZS5hbmNob3JQb2ludC54KCkgKiBtX3NpemUud2lkdGgo
KTsKKyAgICBmbG9hdCBvcmlnaW5ZID0gbV9zdGF0ZS5hbmNob3JQb2ludC55KCkgKiBtX3NpemUu
aGVpZ2h0KCk7CisgICAgbV90cmFuc2Zvcm1zLmxvY2FsID0KKyAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXgoKQorICAgICAgICAudHJhbnNsYXRlM2Qob3JpZ2luWCArIG1fc3RhdGUucG9zLngo
KSwgb3JpZ2luWSArIG1fc3RhdGUucG9zLnkoKSwgbV9zdGF0ZS5hbmNob3JQb2ludC56KCkgKQor
ICAgICAgICAubXVsdGlwbHkobV90cmFuc2Zvcm1zLmJhc2UpCisgICAgICAgIC50cmFuc2xhdGUz
ZCgtb3JpZ2luWCwgLW9yaWdpblksIC1tX3N0YXRlLmFuY2hvclBvaW50LnooKSk7CiB9CiAKLWJv
b2wgVGV4dHVyZU1hcHBlck5vZGU6Omhhc1N1cmZhY2VEZXNjZW5kYW50cygpIGNvbnN0Citib29s
IFRleHR1cmVNYXBwZXJOb2RlOjpuZWVkc1RvQ29tcHV0ZUJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7
Ci0gICAgaWYgKG1fbGF5ZXJUeXBlID09IENsaXBMYXllciB8fCBtX2xheWVyVHlwZSA9PSBUcmFu
c3BhcmVuY3lMYXllciB8fCBtX3N0YXRlLnJlcGxpY2FMYXllcikKKyAgICBpZiAobV9zaXplLndp
ZHRoKCkgPiBnVGlsZURpbWVuc2lvbiB8fCBtX3NpemUuaGVpZ2h0KCkgPiBnVGlsZURpbWVuc2lv
bikKICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFtX3N0YXRlLm1hc2tzVG9Cb3VuZHMp
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IGludCBzaXplID0gbV9jaGlsZHJl
bi5zaXplKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
aWYgKFRleHR1cmVNYXBwZXJOb2RlKiBjaGlsZCA9IG1fY2hpbGRyZW5baV0pIHsKLSAgICAgICAg
ICAgIGlmIChjaGlsZC0+aGFzU3VyZmFjZURlc2NlbmRhbnRzKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1p
bnQgVGV4dHVyZU1hcHBlck5vZGU6OmNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX3N0YXRlLnZpc2libGUgfHwgbV9zdGF0ZS5vcGFjaXR5IDwgMC4wMDEp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgaW50IGRlc2NlbmRhbnRzV2l0aENvbnRlbnQgPSAo
bV9zdGF0ZS5kcmF3c0NvbnRlbnQgfHwgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSAhPSBI
VE1MQ29udGVudFR5cGUpID8gMSA6IDA7Ci0KLSAgICBjb25zdCBpbnQgc2l6ZSA9IG1fY2hpbGRy
ZW4uc2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
IGlmIChUZXh0dXJlTWFwcGVyTm9kZSogY2hpbGQgPSBtX2NoaWxkcmVuW2ldKQotICAgICAgICAg
ICAgZGVzY2VuZGFudHNXaXRoQ29udGVudCArPSBjaGlsZC0+Y291bnREZXNjZW5kYW50c1dpdGhD
b250ZW50KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlc2NlbmRhbnRzV2l0aENvbnRlbnQ7Ci19
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAg
ICAgICBpZiAobV9jaGlsZHJlbltpXS0+bmVlZHNUb0NvbXB1dGVCb3VuZGluZ1JlY3QoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogCi1UZXh0dXJlTWFwcGVyTm9kZSogVGV4dHVyZU1hcHBl
ck5vZGU6OnRvVGV4dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAg
cmV0dXJuIGxheWVyID8gc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlck5vZGUqPihsYXllci0+cGxh
dGZvcm1MYXllcigpKSA6IDA7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFRleHR1cmVN
YXBwZXJOb2RlOjpjb21wdXRlTGF5ZXJUeXBlKCkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNv
bXB1dGVBbGxUcmFuc2Zvcm1zKCkKIHsKLSAgICBjb25zdCBib29sIHNlbGZIYXNDb250ZW50ID0g
bV9zdGF0ZS5kcmF3c0NvbnRlbnQgfHwgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgIT0g
SFRNTENvbnRlbnRUeXBlKTsKLSAgICBjb25zdCBib29sIGhhc0Rlc2NlbmRhbnRzV2l0aENvbnRl
bnQgPSBtX3N0YXRlLmRlc2NlbmRhbnRzV2l0aENvbnRlbnQgLSAoc2VsZkhhc0NvbnRlbnQgPyAx
IDogMCk7Ci0gICAgY29uc3QgYm9vbCBoYXNUcmFuc3BhcmVuY3kgPSBtX3N0YXRlLm9wYWNpdHkg
PCAwLjk5IHx8IG1fc3RhdGUubWFza0xheWVyOwotICAgIGNvbnN0IGJvb2wgaGFzUmVwbGljYSA9
IG1fc3RhdGUucmVwbGljYUxheWVyOwotCi0gICAgLy8gIERlZmF1bHRMYXllcjogZHJhd3MgaXRz
ZWxmIGFuZCBpdHMgY2hpbGRyZW4gZGlyZWN0bHkgdG8gdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIu
Ci0gICAgLy8gICAgICAgICAgICAgICAgYW55IGxheWVyIHRoYXQgZG9lc24ndCBjb25mb3JtIHRv
IHRoZSBvdGhlciBydWxlcyBpcyBhIERlZmF1bHRMYXllci4KLSAgICBtX2xheWVyVHlwZSA9IERl
ZmF1bHRMYXllcjsKLQotICAgIC8vICBSb290TGF5ZXI6IHRoZSB0b3AgbGV2ZWwuIERyYXdzIHRv
IGEgZnJhbWVidWZmZXIsIGFuZCB0aGUgdGFyZ2V0IHRleHR1cmUgZHJhd3MgaW50byB0aGUgdmll
d3BvcnQuCi0gICAgLy8gICAgICAgICAgICBvbmx5IG9uZSBsYXllciBpcyB0aGUgcm9vdCBsYXll
ci4KLSAgICBpZiAoIW1fcGFyZW50ICYmICFtX2VmZmVjdFRhcmdldCkgewotICAgICAgICBtX2xh
eWVyVHlwZSA9IFJvb3RMYXllcjsKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSAmJiBtX3N0YXRl
Lm1hc2tzVG9Cb3VuZHMpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICAvLyBBIGxheWVy
IHdpdGggbm8gY29udGVudHMgaXMgYWx3YXlzIGEgZGVmYXVsdCBsYXllci4KLSAgICBpZiAoIW1f
c3RhdGUuZGVzY2VuZGFudHNXaXRoQ29udGVudCkKLSAgICAgICAgcmV0dXJuOworICAgIGNvbXB1
dGVMb2NhbFRyYW5zZm9ybUlmTmVlZGVkKCk7CisgICAgY29tcHV0ZVJlcGxpY2FUcmFuc2Zvcm1J
Zk5lZWRlZCgpOworICAgIGNvbXB1dGVQZXJzcGVjdGl2ZVRyYW5zZm9ybUlmTmVlZGVkKCk7CiAK
LSAgICAvLyAgQ2xpcExheWVyOiBjcmVhdGVzIGEgbmV3IGZyYW1lYnVmZmVyLCB0aGUgc2l6ZSBv
ZiB0aGUgbGF5ZXIsIGFuZCB0aGVuIHBhaW50cyBpdCB0byB0aGUgZW5jbG9zaW5nIEJpdG1hcFRl
eHR1cmUgd2l0aCB0aGUgbGF5ZXIncyB0cmFuc2Zvcm0vb3BhY2l0eS4KLSAgICAvLyAgICAgICAg
ICAgICAgQSBjbGlwIGxheWVyIGlzIGEgbGF5ZXIgdGhhdCBtYXNrcyB0byBib3VuZHMsIGRvZXNu
J3QgcHJlc2VydmUgM0QsIGhhcyBjaGlsZHJlbiwgYW5kIGhhcyBhIHRyYW5zcGFyZW5jeS9tYXNr
IG9yIGEgbm9uLXJlY3Rhbmd1bGFyIHRyYW5zZm9ybS4KLSAgICBpZiAoaGFzRGVzY2VuZGFudHNX
aXRoQ29udGVudCAmJiBtX3N0YXRlLm1hc2tMYXllcikgewotICAgICAgICBtX2xheWVyVHlwZSA9
IENsaXBMYXllcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBtX3RyYW5zZm9ybXMudGFy
Z2V0ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobV9wYXJlbnQgPyBtX3BhcmVudC0+bV90cmFuc2Zv
cm1zLmZvckRlc2NlbmRhbnRzIDogVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkubXVsdGlwbHkobV90
cmFuc2Zvcm1zLmxvY2FsKTsKKyAgICBtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0ID0g
RmxvYXRSZWN0KG1fdHJhbnNmb3Jtcy50YXJnZXQubWFwUmVjdCh0YXJnZXRSZWN0KCkpKTsKIAot
ICAgIC8vICBTY2lzc29yTGF5ZXI6IGRyYXdzIHRvIHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyLCBh
bmQgYXBwbGllcyBhbiBleHRyYSBzY2lzc29yIGJlZm9yZSBkcmF3aW5nIGl0cyBjaGlsZHJlbi4K
LSAgICAvLyAgICAgICAgICAgICAgICBBIHNjaXNzb3IgbGF5ZXIgaXMgYSBsYXllciB3aXRoIGNo
aWxkcmVuIHRoYXQgbWFza3MgdG8gYm91bmRzLCBpcyBub3QgYSB0cmFuc3BhcmVuY3kgbGF5ZXIs
IGFuZCBoYXMgYSByZWN0YW5ndWxhciBjbGlwLgotICAgIGlmIChtX3N0YXRlLm1hc2tzVG9Cb3Vu
ZHMgJiYgaGFzRGVzY2VuZGFudHNXaXRoQ29udGVudCkgewotICAgICAgICBpZiAoaGFzVHJhbnNw
YXJlbmN5IHx8ICFtX3N0YXRlLnRyYW5zZm9ybS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpIHx8
IG1fcGFyZW50LT5tX3N0YXRlLnByZXNlcnZlczNEKQotICAgICAgICAgICAgbV9sYXllclR5cGUg
PSBDbGlwTGF5ZXI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fbGF5ZXJUeXBlID0gU2Np
c3NvckxheWVyOworICAgIG1fc3RhdGUudmlzaWJsZSA9IG1fc3RhdGUuYmFja2ZhY2VWaXNpYmls
aXR5IHx8IG1fdHJhbnNmb3Jtcy50YXJnZXQuaW52ZXJzZSgpLm0zMygpID49IDA7CisgICAgaWYg
KCFtX3N0YXRlLnZpc2libGUpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICAvLyAgVHJh
bnNwYXJlbmN5TGF5ZXI6IGNyZWF0ZXMgYSBuZXcgZnJhbWVidWZmZXIgaWRldGljYWwgaW4gc2l6
ZSB0byB0aGUgY3VycmVudCBmcmFtZWJ1ZmZlci4gVGhlbiBkcmF3cyB0aGUgZmIncyB0ZXh0dXJl
IHRvIHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyIHdpdGggaWRlbnRpdHkgdHJhbnNmb3JtLgotICAg
IC8vICAgICAgICAgICAgICAgICAgICAgVXNlZCBmb3IgbGF5ZXJzIHdpdGggY2hpbGRyZW4gYW5k
IHRyYW5zcGFyZW5jeS9tYXNrIHRoYXQgcHJlc2VydmUgM0Qgb3IgZG9uJ3QgbWFzayB0byBib3Vu
ZHMuCi0gICAgaWYgKChoYXNSZXBsaWNhICYmIGhhc0Rlc2NlbmRhbnRzV2l0aENvbnRlbnQpIHx8
IChoYXNSZXBsaWNhICYmIGhhc1RyYW5zcGFyZW5jeSkgfHwgKGhhc1RyYW5zcGFyZW5jeSAmJiBt
X3N0YXRlLmRlc2NlbmRhbnRzV2l0aENvbnRlbnQgPiAxKSkKLSAgICAgICAgbV9sYXllclR5cGUg
PSBUcmFuc3BhcmVuY3lMYXllcjsKLX0KKyAgICAvLyBUaGlzIHRyYW5zZm9ybSBpcyBvbmx5IGFw
cGxpZWQgaWYgdXNpbmcgYSB0d28tcGFzcyBmb3IgdGhlIHJlcGxpY2EsIGJlY2F1c2UgdGhlIHRy
YW5zZm9ybSBuZWVkcyB0byBiZSBhZGp1c3RlZCB0byB0aGUgc2l6ZSBvZiB0aGUgaW50ZXJtZWRp
YXRlIHN1cmZhY2UsIGluc3RlYWYgb2YgdGhlIHNpemUgb2YgdGhlIGNvbnRlbnQgbGF5ZXIuCisg
ICAgaWYgKG1fcGFyZW50ICYmIG1fcGFyZW50LT5tX3N0YXRlLnByZXNlcnZlczNEKQorICAgICAg
ICBtX3RyYW5zZm9ybXMuY2VudGVyWiA9IG1fdHJhbnNmb3Jtcy50YXJnZXQubWFwUG9pbnQoRmxv
YXRQb2ludDNEKG1fc2l6ZS53aWR0aCgpIC8gMiwgbV9zaXplLmhlaWdodCgpIC8gMiwgMCkpLnoo
KTsKIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6aW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIoVGV4
dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKLXsKLSAgICBpZiAobV90ZXh0dXJlKQorICAgIGlm
ICghbV9jaGlsZHJlbi5zaXplKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3N1cmZhY2UgPSB0
ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAgbV9yZXBsaWNhU3VyZmFjZSA9IHRl
eHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKLSAgICBtX3RleHR1cmUgPSB0ZXh0dXJlTWFw
cGVyLT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAgY2FjaGUoKS0+bWFyayhtX3RleHR1cmUuZ2V0KCkp
OwotfQogCi1UZXh0dXJlTWFwcGVyTm9kZTo6VGV4dHVyZU1hcHBlck5vZGUoKQotICAgIDogbV9s
YXllclR5cGUoRGVmYXVsdExheWVyKQotICAgICwgbV9zdXJmYWNlKDApCi0gICAgLCBtX3BhcmVu
dCgwKQotICAgICwgbV9lZmZlY3RUYXJnZXQoMCkKLSAgICAsIG1fcGxhdGZvcm1DbGllbnQoMCkK
LSAgICAsIG1fY2FjaGUoMCkKLXsKLX0KKyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMg
PSBtX3RyYW5zZm9ybXMudGFyZ2V0OwogCi1UZXh0dXJlTWFwcGVyTm9kZSogVGV4dHVyZU1hcHBl
ck5vZGU6OnJvb3RMYXllcigpCi17Ci0gICAgaWYgKG1fZWZmZWN0VGFyZ2V0KQotICAgICAgICBy
ZXR1cm4gbV9lZmZlY3RUYXJnZXQtPnJvb3RMYXllcigpOwotICAgIGlmIChtX3BhcmVudCkKLSAg
ICAgICAgcmV0dXJuIG1fcGFyZW50LT5yb290TGF5ZXIoKTsKLSAgICByZXR1cm4gdGhpczsKLX0K
LQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6aW52YWxpZGF0ZVRyYW5zZm9ybSgpCi17Ci0gICAg
bV90cmFuc2Zvcm1zLmRpcnR5ID0gdHJ1ZTsKLSAgICBpZiAobV9sYXllclR5cGUgIT0gQ2xpcExh
eWVyKQotICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKLSAgICBpZiAobV9zdGF0ZS5yZXBs
aWNhTGF5ZXIpCi0gICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5pbnZhbGlkYXRlVHJhbnNm
b3JtKCk7Ci0gICAgY29uc3QgaW50IHNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5v
ZGUqIGxheWVyID0gbV9jaGlsZHJlbltpXSkKLSAgICAgICAgICAgIGxheWVyLT5pbnZhbGlkYXRl
VHJhbnNmb3JtKCk7CisgICAgaWYgKCFtX3N0YXRlLnByZXNlcnZlczNEKSB7CisgICAgICAgIG1f
dHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cyA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KAorICAgICAg
ICAgICAgICAgICAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMubTExKCksIG1fdHJhbnNm
b3Jtcy5mb3JEZXNjZW5kYW50cy5tMTIoKSwgMCwgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRz
Lm0xNCgpLAorICAgICAgICAgICAgICAgICAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMu
bTIxKCksIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5tMjIoKSwgMCwgbV90cmFuc2Zvcm1z
LmZvckRlc2NlbmRhbnRzLm0yNCgpLAorICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLAor
ICAgICAgICAgICAgICAgICAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMubTQxKCksIG1f
dHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5tNDIoKSwgMCwgbV90cmFuc2Zvcm1zLmZvckRlc2Nl
bmRhbnRzLm00NCgpKTsKICAgICB9Ci19CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1
dGVMb2NhbFRyYW5zZm9ybSgpCi17Ci0gICAgaWYgKCFtX3RyYW5zZm9ybXMubG9jYWxEaXJ0eSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IGZsb2F0IG9yaWdpblggPSBtX3N0YXRlLmFuY2hv
clBvaW50LngoKSAqIG1fc2l6ZS53aWR0aCgpOwotICAgIGNvbnN0IGZsb2F0IG9yaWdpblkgPSBt
X3N0YXRlLmFuY2hvclBvaW50LnkoKSAqIG1fc2l6ZS5oZWlnaHQoKTsKLSAgICBtX3RyYW5zZm9y
bXMubG9jYWwgPQotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCi0gICAgICAgIC50cmFu
c2xhdGUzZChvcmlnaW5YICsgbV9zdGF0ZS5wb3MueCgpLCBvcmlnaW5ZICsgbV9zdGF0ZS5wb3Mu
eSgpLCBtX3N0YXRlLmFuY2hvclBvaW50LnooKSkKLSAgICAgICAgLm11bHRpcGx5KG1fc3RhdGUu
dHJhbnNmb3JtKQotICAgICAgICAudHJhbnNsYXRlM2QoLW9yaWdpblgsIC1vcmlnaW5ZLCAtbV9z
dGF0ZS5hbmNob3JQb2ludC56KCkpOwotICAgIG1fdHJhbnNmb3Jtcy5sb2NhbERpcnR5ID0gZmFs
c2U7CisgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLm11bHRpcGx5KG1fdHJhbnNmb3Jt
cy5wZXJzcGVjdGl2ZSk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmZsYXR0ZW5UbzJE
U3BhY2VJZk5lY2Vzc2FyeSgpCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlQm91bmRp
bmdSZWN0RnJvbVJvb3RJZk5lZWRlZCgpCiB7Ci0gICAgaWYgKG1fc3RhdGUucHJlc2VydmVzM0Qp
CisgICAgaWYgKCFuZWVkc1RvQ29tcHV0ZUJvdW5kaW5nUmVjdCgpKQogICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTEzKDApOwotICAgIG1fdHJh
bnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMjMoMCk7Ci0gICAgbV90cmFuc2Zvcm1zLmZvckRl
c2NlbmRhbnRzLnNldE0zMSgwKTsKLSAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0
TTMyKDApOwotICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMzMoMSk7Ci0gICAg
bV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0zNCgwKTsKLSAgICBtX3RyYW5zZm9ybXMu
Zm9yRGVzY2VuZGFudHMuc2V0TTQzKDApOwotfQotCi1JbnRTaXplIFRleHR1cmVNYXBwZXJOb2Rl
OjpuZWFyZXN0U3VyZmFjZVNpemUoKSBjb25zdAotewotICAgIGlmIChtX2xheWVyVHlwZSA9PSBD
bGlwTGF5ZXIgfHwgbV9sYXllclR5cGUgPT0gUm9vdExheWVyKQotICAgICAgICByZXR1cm4gbV9z
dXJmYWNlICYmICFtX3N1cmZhY2UtPnNpemUoKS5pc0VtcHR5KCkgPyBtX3N1cmZhY2UtPnNpemUo
KSA6IG1fc2l6ZTsKLSAgICByZXR1cm4gbV9wYXJlbnQtPm5lYXJlc3RTdXJmYWNlU2l6ZSgpOwot
fQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlUmVwbGljYVRyYW5zZm9ybSgpCi17
Ci0gICAgaWYgKCFtX3N0YXRlLnJlcGxpY2FMYXllcikKKyAgICBpZiAoIW1fcGFyZW50KSB7Cisg
ICAgICAgIG1fdHJhbnNmb3Jtcy5ib3VuZGluZ1JlY3RGcm9tUm9vdCA9IG1fdHJhbnNmb3Jtcy5i
b3VuZGluZ1JlY3RGcm9tUm9vdEZvckRlc2NlbmRhbnRzID0gSW50UmVjdCgwLCAwLCAtMSwgLTEp
OwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgbV9uZWFyZXN0U3VyZmFjZVNpemUgPSBu
ZWFyZXN0U3VyZmFjZVNpemUoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QgdGFyZ2V0UmVjdEluUm9v
dENvb3JkaW5hdGVzID0gbV90cmFuc2Zvcm1zLnRhcmdldC5tYXBSZWN0KHRhcmdldFJlY3QoKSk7
CiAKLSAgICBpZiAobV9sYXllclR5cGUgIT0gVHJhbnNwYXJlbmN5TGF5ZXIpIHsKLSAgICAgICAg
bV90cmFuc2Zvcm1zLnJlcGxpY2EgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3RyYW5zZm9ybXMu
dGFyZ2V0KS5tdWx0aXBseShtX3N0YXRlLnJlcGxpY2FMYXllci0+bV90cmFuc2Zvcm1zLmxvY2Fs
KTsKLSAgICAgICAgcmV0dXJuOworICAgIGNvbnN0IEZsb2F0UmVjdCBwYXJlbnRCb3VuZGluZ1Jl
Y3QgPSBtX3BhcmVudC0+bV90cmFuc2Zvcm1zLmJvdW5kaW5nUmVjdEZyb21Sb290Rm9yRGVzY2Vu
ZGFudHM7CisgICAgaWYgKHBhcmVudEJvdW5kaW5nUmVjdC53aWR0aCgpIDwgMCkKKyAgICAgICAg
bV90cmFuc2Zvcm1zLmJvdW5kaW5nUmVjdEZyb21Sb290ID0gdGFyZ2V0UmVjdEluUm9vdENvb3Jk
aW5hdGVzOworICAgIGVsc2UgeworICAgICAgICBtX3RyYW5zZm9ybXMuYm91bmRpbmdSZWN0RnJv
bVJvb3RGb3JEZXNjZW5kYW50cyA9IG1fdHJhbnNmb3Jtcy5ib3VuZGluZ1JlY3RGcm9tUm9vdCA9
IHBhcmVudEJvdW5kaW5nUmVjdDsKKyAgICAgICAgbV90cmFuc2Zvcm1zLmJvdW5kaW5nUmVjdEZy
b21Sb290LmludGVyc2VjdCh0YXJnZXRSZWN0SW5Sb290Q29vcmRpbmF0ZXMpOwogICAgIH0KLQot
ICAgIGNvbnN0IGZsb2F0IG9yaWdpblggPSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm00MSgpOwotICAg
IGNvbnN0IGZsb2F0IG9yaWdpblkgPSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm00MigpOwotICAgIG1f
dHJhbnNmb3Jtcy5yZXBsaWNhID0KLSAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCkK
LSAgICAgICAgICAgICAgICAudHJhbnNsYXRlKG9yaWdpblgsIG9yaWdpblkpCi0gICAgICAgICAg
ICAgICAgLm11bHRpcGx5KG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3RyYW5zZm9ybXMubG9jYWwp
Ci0gICAgICAgICAgICAgICAgLnRyYW5zbGF0ZSgtb3JpZ2luWCwgLW9yaWdpblkpOworICAgIGlm
IChtX3N0YXRlLm1hc2tzVG9Cb3VuZHMpCisgICAgICAgIG1fdHJhbnNmb3Jtcy5ib3VuZGluZ1Jl
Y3RGcm9tUm9vdEZvckRlc2NlbmRhbnRzLmludGVyc2VjdChtX3RyYW5zZm9ybXMuYm91bmRpbmdS
ZWN0RnJvbVJvb3QpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlVHJhbnNm
b3JtYXRpb25zKCkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVUaWxlcygpCiB7Ci0g
ICAgaWYgKCFtX3RyYW5zZm9ybXMuZGlydHkpCisgICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29u
dGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlICYmICFtX3N0YXRlLmRyYXdzQ29udGVudCkgewor
ICAgICAgICBtX3RpbGVzLmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgVmVj
dG9yPEZsb2F0UmVjdD4gdGlsZXNUb0FkZDsKKyAgICBWZWN0b3I8aW50PiB0aWxlc1RvUmVtb3Zl
OworICAgIGNvbnN0IGludCBUaWxlRXJhc2VUaHJlc2hvbGQgPSA2OworICAgIEZsb2F0U2l6ZSBz
aXplID0gY29udGVudFNpemUoKTsKKyAgICBGbG9hdFJlY3QgY29udGVudFJlY3QoMCwgMCwgc2l6
ZS53aWR0aCgpICogbV9zdGF0ZS5jb250ZW50U2NhbGUsIHNpemUuaGVpZ2h0KCkgKiBtX3N0YXRl
LmNvbnRlbnRTY2FsZSk7CiAKLSAgICBtX3RyYW5zZm9ybXMuZGlydHkgPSBmYWxzZTsKLSAgICBp
ZiAoKG1fc2l6ZS5pc0VtcHR5KCkgJiYgbV9zdGF0ZS5tYXNrc1RvQm91bmRzKSkKLSAgICAgICAg
cmV0dXJuOworICAgIGZvciAoZmxvYXQgeSA9IDA7IHkgPCBjb250ZW50UmVjdC5oZWlnaHQoKTsg
eSArPSBnVGlsZURpbWVuc2lvbikgeworICAgICAgICBmb3IgKGZsb2F0IHggPSAwOyB4IDwgY29u
dGVudFJlY3Qud2lkdGgoKTsgeCArPSBnVGlsZURpbWVuc2lvbikgeworICAgICAgICAgICAgRmxv
YXRSZWN0IHRpbGVSZWN0KHgsIHksIGdUaWxlRGltZW5zaW9uLCBnVGlsZURpbWVuc2lvbik7Cisg
ICAgICAgICAgICB0aWxlUmVjdC5pbnRlcnNlY3QoY29udGVudFJlY3QpOworICAgICAgICAgICAg
RmxvYXRSZWN0IHRpbGVSZWN0SW5Sb290Q29vcmRpbmF0ZXMgPSB0aWxlUmVjdDsKKyAgICAgICAg
ICAgIHRpbGVSZWN0SW5Sb290Q29vcmRpbmF0ZXMuc2NhbGUoMS4wIC8gbV9zdGF0ZS5jb250ZW50
U2NhbGUpOworICAgICAgICAgICAgdGlsZVJlY3RJblJvb3RDb29yZGluYXRlcyA9IG1fdHJhbnNm
b3Jtcy50YXJnZXQubWFwUmVjdCh0aWxlUmVjdEluUm9vdENvb3JkaW5hdGVzKTsKKyAgICAgICAg
ICAgIHN0YXRpYyBib29sIHNEaXNjYXJkSGlkZGVuVGlsZXMgPSBmYWxzZTsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBkaXNjYXJkIGhpZGRlbiB0aWxlcy4KKyAgICAgICAgICAgIGlmICghc0Rpc2Nh
cmRIaWRkZW5UaWxlcyB8fCAhbmVlZHNUb0NvbXB1dGVCb3VuZGluZ1JlY3QoKSB8fCB0aWxlUmVj
dEluUm9vdENvb3JkaW5hdGVzLmludGVyc2VjdHMobV9zdGF0ZS52aXNpYmxlUmVjdCkpCisgICAg
ICAgICAgICAgICAgdGlsZXNUb0FkZC5hcHBlbmQodGlsZVJlY3QpOworICAgICAgICB9CisgICAg
fQogCi0gICAgVGV4dHVyZU1hcHBlck5vZGUqIHBhcmVudCA9IG1fcGFyZW50OwotICAgIGNvbXB1
dGVMb2NhbFRyYW5zZm9ybSgpOworICAgIGZvciAoaW50IGkgPSBtX3RpbGVzLnNpemUoKSAtIDE7
IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNvbnN0IEZsb2F0UmVjdCBvbGRUaWxlID0gbV90aWxl
c1tpXS5yZWN0OworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAKLSAgICBtX3RyYW5zZm9y
bXMudGFyZ2V0ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgocGFyZW50ID8gcGFyZW50LT5tX3RyYW5z
Zm9ybXMuZm9yRGVzY2VuZGFudHMgOiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKS5tdWx0aXBseSht
X3RyYW5zZm9ybXMubG9jYWwpOwotICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cyA9ICht
X2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIgPyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIDogbV90cmFu
c2Zvcm1zLnRhcmdldCk7CisgICAgICAgIGZvciAoaW50IGogPSB0aWxlc1RvQWRkLnNpemUoKSAt
IDE7IGogPj0gMDsgLS1qKSB7CisgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QgbmV3VGlsZSA9
IHRpbGVzVG9BZGRbal07CisgICAgICAgICAgICBpZiAob2xkVGlsZSAhPSBuZXdUaWxlKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgaWYgKG1fZWZmZWN0VGFyZ2V0KQotICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICB0aWxlc1Rv
QWRkLnJlbW92ZShqKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKLSAgICBtX3Ry
YW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0ID0gSW50UmVjdChtX3RyYW5zZm9ybXMudGFyZ2V0
Lm1hcFJlY3QoZW50aXJlUmVjdCgpKSk7Ci0gICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyKQot
ICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+Y29tcHV0ZVRyYW5zZm9ybWF0aW9ucygpOwor
ICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgdGlsZXNUb1JlbW92ZS5hcHBlbmQoaSk7
CisgICAgfQogCi0gICAgZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNzYXJ5KCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB0aWxlc1RvQWRkLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICgh
dGlsZXNUb1JlbW92ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFRpbGUmIHRpbGUgPSBtX3Rp
bGVzW3RpbGVzVG9SZW1vdmVbMF1dOworICAgICAgICAgICAgdGlsZXNUb1JlbW92ZS5yZW1vdmUo
MCk7CisgICAgICAgICAgICB0aWxlLnJlY3QgPSB0aWxlc1RvQWRkW2ldOworICAgICAgICAgICAg
dGlsZS5uZWVkc1Jlc2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CiAKLSAgICBpZiAoIW1fc3RhdGUuYmFja2ZhY2VWaXNpYmlsaXR5ICYmIG1fdHJhbnNmb3Jtcy50
YXJnZXQuaW52ZXJzZSgpLm0zMygpIDwgMCkgewotICAgICAgICBtX3N0YXRlLnZpc2libGUgPSBm
YWxzZTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBUaWxlIHRpbGU7CisgICAgICAgIHRpbGUu
cmVjdCA9IHRpbGVzVG9BZGRbaV07CisgICAgICAgIHRpbGUubmVlZHNSZXNldCA9IHRydWU7Cisg
ICAgICAgIG1fdGlsZXMuYXBwZW5kKHRpbGUpOwogICAgIH0KLSAgICBtX3N0YXRlLnZpc2libGUg
PSB0cnVlOwogCi0gICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPm1fc3RhdGUucHJlc2VydmVzM0Qp
Ci0gICAgICAgIG1fdHJhbnNmb3Jtcy5jZW50ZXJaID0gbV90cmFuc2Zvcm1zLnRhcmdldC5tYXBQ
b2ludChGbG9hdFBvaW50M0QobV9zaXplLndpZHRoKCkgLyAyLCBtX3NpemUuaGVpZ2h0KCkgLyAy
LCAwKSkueigpOwotCi0gICAgaWYgKCFtX2NoaWxkcmVuLnNpemUoKSkKLSAgICAgICAgcmV0dXJu
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb1JlbW92ZS5zaXplKCkgJiYgbV90
aWxlcy5zaXplKCkgPiBUaWxlRXJhc2VUaHJlc2hvbGQ7ICsraSkKKyAgICAgICAgbV90aWxlcy5y
ZW1vdmUodGlsZXNUb1JlbW92ZVtpXSk7Cit9CiAKLSAgICBpZiAobV9zdGF0ZS5jaGlsZHJlblRy
YW5zZm9ybS5pc0lkZW50aXR5KCkpCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlVmlz
aWJsZVJlY3RJZk5lZWRlZCgpCit7CisgICAgaWYgKCFuZWVkc1RvQ29tcHV0ZUJvdW5kaW5nUmVj
dCgpKQogICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0IHJvb3RWaXNpYmxlUmVjdDsKKyAg
ICBpZiAoIW1fcGFyZW50KQorICAgICAgICByb290VmlzaWJsZVJlY3QgPSBtX3N0YXRlLnJvb3RW
aXNpYmxlUmVjdDsKKyAgICBlbHNlIGlmIChtX3BhcmVudCkKKyAgICAgICAgcm9vdFZpc2libGVS
ZWN0ID0gbV9wYXJlbnQtPm1fc3RhdGUucm9vdFZpc2libGVSZWN0OwogCi0gICAgY29uc3QgRmxv
YXRQb2ludCBjZW50ZXJQb2ludCA9IEZsb2F0UG9pbnQobV9zaXplLndpZHRoKCkgLyAyLCBtX3Np
emUuaGVpZ2h0KCkgLyAyKTsKLSAgICBpZiAobV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlRGlydHkp
Ci0gICAgICAgIG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4
KCkKLSAgICAgICAgICAgIC50cmFuc2xhdGUoY2VudGVyUG9pbnQueCgpLCBjZW50ZXJQb2ludC55
KCkpCi0gICAgICAgICAgICAubXVsdGlwbHkobV9zdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSkKLSAg
ICAgICAgICAgIC50cmFuc2xhdGUoLWNlbnRlclBvaW50LngoKSwgLWNlbnRlclBvaW50LnkoKSk7
Ci0gICAgbV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlRGlydHkgPSBmYWxzZTsKLSAgICBtX3RyYW5z
Zm9ybXMuZm9yRGVzY2VuZGFudHMubXVsdGlwbHkobV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlKTsK
KyAgICBtX3N0YXRlLnJvb3RWaXNpYmxlUmVjdCA9IHJvb3RWaXNpYmxlUmVjdDsKKyAgICBtX3N0
YXRlLnZpc2libGVSZWN0ID0gbV9zdGF0ZS5yb290VmlzaWJsZVJlY3Q7CisgICAgbV9zdGF0ZS52
aXNpYmxlUmVjdC5pbnRlcnNlY3QobV90cmFuc2Zvcm1zLmJvdW5kaW5nUmVjdEZyb21Sb290KTsK
IH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6dXBsb2FkVGV4dHVyZUZyb21Db250ZW50KFRl
eHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBH
cmFwaGljc0xheWVyKiBsYXllcikKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRl
bnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7
Ci0gICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIWxheWVyKSB7Ci0gICAgICAgIG1fdGV4dHVy
ZS0+ZGVzdHJveSgpOworICAgIGlmIChtX3NpemUuaXNFbXB0eSgpIHx8ICFsYXllciB8fCAoIW1f
c3RhdGUuZHJhd3NDb250ZW50ICYmIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRN
TENvbnRlbnRUeXBlKSkgeworICAgICAgICBtX3RpbGVzLmNsZWFyKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBEaXJl
Y3RJbWFnZUNvbnRlbnRUeXBlKSB7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmltYWdl
KQotICAgICAgICAgICAgbV90ZXh0dXJlLT5zZXRDb250ZW50c1RvSW1hZ2UobV9jdXJyZW50Q29u
dGVudC5pbWFnZS5nZXQoKSk7CisgICAgaWYgKCF0ZXh0dXJlTWFwcGVyKQogICAgICAgICByZXR1
cm47Ci0gICAgfQogCi0gICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gTWVk
aWFDb250ZW50VHlwZSkgewotICAgICAgICBpZiAoIW1fY3VycmVudENvbnRlbnQubWVkaWEpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fdGV4dHVyZS0+cmVzZXQobV9zaXplLCB0cnVl
KTsKLSAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCA9IG1f
dGV4dHVyZS0+YmVnaW5QYWludE1lZGlhKCk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250
ZXh0KHBsYXRmb3JtQ29udGV4dCk7Ci0gICAgICAgIG1fY3VycmVudENvbnRlbnQubWVkaWEtPnBh
aW50KCZjb250ZXh0KTsKLSAgICAgICAgbV90ZXh0dXJlLT5lbmRQYWludCgpOworICAgIGlmICht
X2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IE1lZGlhQ29udGVudFR5cGUpCiAgICAgICAg
IHJldHVybjsKLSAgICB9CiAKLSAgICBjb25zdCBib29sIG5lZWRzUmVzZXQgPSAobV90ZXh0dXJl
LT5jb250ZW50U2l6ZSgpICE9IG1fc2l6ZSkgfHwgIW1fdGV4dHVyZS0+aXNWYWxpZCgpOwotICAg
IGlmICgobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSAhPSBIVE1MQ29udGVudFR5cGUpCi0g
ICAgICAgIHx8ICghbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgJiYgbV9jdXJyZW50Q29u
dGVudC5uZWVkc0Rpc3BsYXlSZWN0LmlzRW1wdHkoKSAmJiAhbmVlZHNSZXNldCkpCi0gICAgICAg
IHJldHVybjsKKyAgICAvLyBGSVhNRTogQWRkIGRpcmVjdGx5IGNvbXBvc2l0ZWQgaW1hZ2VzLgor
ICAgIEZsb2F0UmVjdCBkaXJ0eVJlY3QgPSBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA/
IGVudGlyZVJlY3QoKSA6IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdDsKKyAgICBk
aXJ0eVJlY3Quc2NhbGUobV9zdGF0ZS5jb250ZW50U2NhbGUpOwogCi0gICAgSW50UmVjdCBkaXJ0
eVJlY3QgPSBJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwot
ICAgIGlmICghbmVlZHNSZXNldCAmJiAhbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkpCi0g
ICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QobV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlS
ZWN0KTsKKyAgICBmb3IgKHNpemVfdCB0aWxlSW5kZXggPSAwOyB0aWxlSW5kZXggPCBtX3RpbGVz
LnNpemUoKTsgKyt0aWxlSW5kZXgpIHsKKyAgICAgICAgVGlsZSYgdGlsZSA9IG1fdGlsZXNbdGls
ZUluZGV4XTsKKyAgICAgICAgRmxvYXRSZWN0IHJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgICAgIGlm
ICghdGlsZS50ZXh0dXJlKQorICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGV4dHVyZU1hcHBl
ci0+Y3JlYXRlVGV4dHVyZSgpOworICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4mIHRleHR1
cmUgPSB0aWxlLnRleHR1cmU7CisgICAgICAgIEludFNpemUgdGlsZVNpemUgPSBlbmNsb3NpbmdJ
bnRSZWN0KHRpbGUucmVjdCkuc2l6ZSgpOwogCi0gICAgaWYgKG5lZWRzUmVzZXQpCi0gICAgICAg
IG1fdGV4dHVyZS0+cmVzZXQobV9zaXplLCBtX3N0YXRlLmNvbnRlbnRzT3BhcXVlKTsKKyAgICAg
ICAgaWYgKHRpbGUubmVlZHNSZXNldCB8fCB0ZXh0dXJlLT5jb250ZW50U2l6ZSgpICE9IHRpbGVT
aXplIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIHRpbGUubmVlZHNSZXNl
dCA9IGZhbHNlOworICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXQodGlsZVNpemUsIG1fY3VycmVu
dENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSA/IGZhbHNlIDog
bV9zdGF0ZS5jb250ZW50c09wYXF1ZSk7CisgICAgICAgICAgICByZWN0ID0gdGlsZS5yZWN0Owor
ICAgICAgICB9CiAKLSAgICB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KG1fdGV4
dHVyZS0+YmVnaW5QYWludChkaXJ0eVJlY3QpKTsKLSAgICAgICAgaWYgKHRleHR1cmVNYXBwZXIp
IHsKKyAgICAgICAgSW50UmVjdCBjb250ZW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodGlsZS5y
ZWN0KTsKKyAgICAgICAgY29udGVudFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3QocmVj
dCkpOworICAgICAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgRmxvYXRSZWN0IGNvbnRlbnRSZWN0SW5UaWxlQ29vcmRpbmF0ZXMg
PSBjb250ZW50UmVjdDsKKyAgICAgICAgRmxvYXRQb2ludCBvZmZzZXQoLXRpbGUucmVjdC54KCks
IC10aWxlLnJlY3QueSgpKTsKKyAgICAgICAgY29udGVudFJlY3RJblRpbGVDb29yZGluYXRlcy5t
b3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIEdy
YXBoaWNzQ29udGV4dCBjb250ZXh0KHRleHR1cmUtPmJlZ2luUGFpbnQoZW5jbG9zaW5nSW50UmVj
dChjb250ZW50UmVjdEluVGlsZUNvb3JkaW5hdGVzKSkpOwogICAgICAgICAgICAgY29udGV4dC5z
ZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KHRleHR1cmVNYXBwZXItPmltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoKSk7CiAgICAgICAgICAgICBjb250ZXh0LnNldFRleHREcmF3aW5nTW9kZSh0
ZXh0dXJlTWFwcGVyLT50ZXh0RHJhd2luZ01vZGUoKSk7CisgICAgICAgICAgICBjb250ZXh0LnRy
YW5zbGF0ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2Nh
bGUoRmxvYXRTaXplKG1fc3RhdGUuY29udGVudFNjYWxlLCBtX3N0YXRlLmNvbnRlbnRTY2FsZSkp
OworICAgICAgICAgICAgRmxvYXRSZWN0IHNjYWxlZENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsK
KyAgICAgICAgICAgIHNjYWxlZENvbnRlbnRSZWN0LnNjYWxlKDEuMCAvIG1fc3RhdGUuY29udGVu
dFNjYWxlKTsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09
IERpcmVjdEltYWdlQ29udGVudFR5cGUpCisgICAgICAgICAgICAgICAgY29udGV4dC5kcmF3SW1h
Z2UobV9jdXJyZW50Q29udGVudC5pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50
UG9pbnQoMCwgMCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxheWVyLT5w
YWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHNjYWxl
ZENvbnRlbnRSZWN0KSk7CisgICAgICAgICAgICB0ZXh0dXJlLT5lbmRQYWludCgpOwogICAgICAg
ICB9Ci0gICAgICAgIGxheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBk
aXJ0eVJlY3QpOwogICAgIH0KLSAgICBtX3RleHR1cmUtPmVuZFBhaW50KCk7CisKICAgICBtX2N1
cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA9IGZhbHNlOworICAgIG1fY3VycmVudENvbnRlbnQu
bmVlZHNEaXNwbGF5UmVjdCA9IEludFJlY3QoKTsKIH0KIAotCi12b2lkIFRleHR1cmVNYXBwZXJO
b2RlOjpwYWludChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBUZXh0dXJlTWFw
cGVyQ29udGVudExheWVyOjpQYWludE9wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpwYWludCgpCiB7Ci0gICAgQVNTRVJUKG1fbGF5ZXJUeXBlID09IFJvb3RMYXllcik7
CiAgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRleG1h
cFBhaW50T3B0aW9ucyBvcHQ7Ci0gICAgb3B0Lm9wYWNpdHkgPSAxOwotICAgIG9wdC5yb290TGF5
ZXIgPSB0aGlzOwotICAgIG9wdC5zY2lzc29yUmVjdCA9IG9wdGlvbnMudGFyZ2V0UmVjdDsKLSAg
ICBvcHQudmlzaWJsZVJlY3QgPSBvcHRpb25zLnZpc2libGVSZWN0OwotICAgIG9wdC50ZXh0dXJl
TWFwcGVyID0gdGV4dHVyZU1hcHBlcjsKLSAgICBvcHQuc3VyZmFjZSA9IDA7Ci0gICAgb3B0LmNh
Y2hlID0gbV9jYWNoZTsKKyAgICBpZiAoIW1fc3VyZmFjZU1hbmFnZXIpCisgICAgICAgIG1fc3Vy
ZmFjZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hcHBlclN1cmZhY2VNYW5hZ2VyOworICAgIG1fc3Vy
ZmFjZU1hbmFnZXItPnRleHR1cmVNYXBwZXIgPSBtX3RleHR1cmVNYXBwZXI7CisgICAgVGV4dHVy
ZU1hcHBlclBhaW50T3B0aW9ucyBvcHQ7CisgICAgb3B0LnN1cmZhY2VNYW5hZ2VyID0gbV9zdXJm
YWNlTWFuYWdlcjsKKyAgICBvcHQudGV4dHVyZU1hcHBlciA9IG1fdGV4dHVyZU1hcHBlcjsKKyAg
ICBvcHQudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7CiAgICAgcGFpbnRSZWN1cnNpdmUo
b3B0KTsKK30KIAotICAgIGlmICh0ZXh0dXJlTWFwcGVyLT5hbGxvd1N1cmZhY2VGb3JSb290KCkg
fHwgbV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpIHsKLSAgICAgICAgdGV4dHVyZU1hcHBl
ci0+YmluZFN1cmZhY2UoMCk7Ci0gICAgICAgIHRleHR1cmVNYXBwZXItPnBhaW50VG9UYXJnZXQo
Km1fc3VyZmFjZS5nZXQoKSwgb3B0aW9ucy52aWV3cG9ydFNpemUsIG9wdGlvbnMudHJhbnNmb3Jt
LCBvcHRpb25zLm9wYWNpdHkgKiBtX3N0YXRlLm9wYWNpdHksIG9wdGlvbnMudGFyZ2V0UmVjdCk7
Ci0gICAgfQotICAgIG1fY2FjaGUtPnB1cmdlKCk7CitGbG9hdFJlY3QgVGV4dHVyZU1hcHBlck5v
ZGU6OnRhcmdldFJlY3RGb3JUaWxlUmVjdChjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgK
KyAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LngoKSArICh0aWxlUmVjdC54KCkgLSB0YXJnZXRS
ZWN0LngoKSkgLyBtX3N0YXRlLmNvbnRlbnRTY2FsZSwKKyAgICAgICAgICAgICAgICB0YXJnZXRS
ZWN0LnkoKSArICh0aWxlUmVjdC55KCkgLSB0YXJnZXRSZWN0LnkoKSkgLyBtX3N0YXRlLmNvbnRl
bnRTY2FsZSwKKyAgICAgICAgICAgICAgICB0aWxlUmVjdC53aWR0aCgpIC8gbV9zdGF0ZS5jb250
ZW50U2NhbGUsCisgICAgICAgICAgICAgICAgdGlsZVJlY3QuaGVpZ2h0KCkgLyBtX3N0YXRlLmNv
bnRlbnRTY2FsZSk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZihjb25z
dCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpw
YWludFNlbGYoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYgb3B0aW9ucykKIHsKICAg
ICBpZiAobV9zaXplLmlzRW1wdHkoKSB8fCAoIW1fc3RhdGUuZHJhd3NDb250ZW50ICYmIG1fY3Vy
cmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKSkKICAgICAgICAgcmV0
dXJuOwogCisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1hc2tUZXh0dXJlOwogICAgIFJlZlB0
cjxCaXRtYXBUZXh0dXJlPiByZXBsaWNhTWFza1RleHR1cmU7Ci0gICAgbV90ZXh0dXJlLT51bnBh
Y2soKTsKIAotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtYXNrVGV4dHVyZSA9IG1fc3RhdGUu
bWFza0xheWVyID8gbV9zdGF0ZS5tYXNrTGF5ZXItPm1fdGV4dHVyZSA6IDA7CisgICAgaWYgKG1f
c3RhdGUubWFza0xheWVyKQorICAgICAgICBtYXNrVGV4dHVyZSA9IG1fc3RhdGUubWFza0xheWVy
LT50ZXh0dXJlKCk7CiAgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyICYmIG1fc3RhdGUucmVw
bGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllcikKLSAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJl
ID0gbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVyLT5tX3RleHR1cmU7Cisg
ICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZSA9IG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRl
Lm1hc2tMYXllci0+dGV4dHVyZSgpOwogCi0gICAgaWYgKG1hc2tUZXh0dXJlKQotICAgICAgICBt
YXNrVGV4dHVyZS0+dW5wYWNrKCk7CisgICAgY29uc3QgZmxvYXQgb3BhY2l0eSA9IG9wdGlvbnMu
aXNTdXJmYWNlID8gMSA6IG9wdGlvbnMub3BhY2l0eTsKIAotICAgIGlmIChyZXBsaWNhTWFza1Rl
eHR1cmUpCi0gICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZS0+dW5wYWNrKCk7CisgICAgY29uc3Qg
RmxvYXRSZWN0IHRhcmdldFJlY3QgPSB0aGlzLT50YXJnZXRSZWN0KCk7CiAKLSAgICBjb25zdCBm
bG9hdCBvcGFjaXR5ID0gb3B0aW9ucy5pc1N1cmZhY2UgPyAxIDogb3B0aW9ucy5vcGFjaXR5Owor
ICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IE1lZGlhQ29udGVudFR5cGUg
JiYgbV9jdXJyZW50Q29udGVudC5tZWRpYSkgeworICAgICAgICBpZiAobV9zdGF0ZS5yZXBsaWNh
TGF5ZXIgJiYgIW9wdGlvbnMuaXNTdXJmYWNlKQorICAgICAgICAgICAgbV9jdXJyZW50Q29udGVu
dC5tZWRpYS0+cGFpbnRUb1RleHR1cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJlTWFwcGVyLCB0YXJn
ZXRSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgobV90cmFuc2Zvcm1zLnRhcmdldCkubXVsdGlw
bHkobV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fdHJhbnNmb3Jtcy5sb2NhbCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5ICog
bV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fb3BhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZSA/IHJl
cGxpY2FNYXNrVGV4dHVyZS5nZXQoKSA6IG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICAgICAgbV9j
dXJyZW50Q29udGVudC5tZWRpYS0+cGFpbnRUb1RleHR1cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJl
TWFwcGVyLCB0YXJnZXRSZWN0LCBtX3RyYW5zZm9ybXMudGFyZ2V0LCBvcGFjaXR5LCBvcHRpb25z
LmlzU3VyZmFjZSA/IDAgOiBtYXNrVGV4dHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIgJiYgIW9wdGlvbnMuaXNTdXJmYWNl
KQotICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCptX3RleHR1cmUu
Z2V0KCksIHJlcGxpY2FSZWN0KCksIG1fdHJhbnNmb3Jtcy5yZXBsaWNhLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wYWNpdHkgKiBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5vcGFj
aXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZSA/IHJlcGxp
Y2FNYXNrVGV4dHVyZS5nZXQoKSA6IG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fdGlsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQml0bWFwVGV4dHVy
ZSogdGV4dHVyZSA9IG1fdGlsZXNbaV0udGV4dHVyZS5nZXQoKTsKKyAgICAgICAgaWYgKG1fc3Rh
dGUucmVwbGljYUxheWVyICYmICFvcHRpb25zLmlzU3VyZmFjZSkgeworICAgICAgICAgICAgb3B0
aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqdGV4dHVyZSwgdGFyZ2V0UmVjdEZvclRp
bGVSZWN0KHRhcmdldFJlY3QsIG1fdGlsZXNbaV0ucmVjdCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KG1fdHJhbnNmb3Jtcy50YXJnZXQpLm11bHRp
cGx5KG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3RyYW5zZm9ybXMubG9jYWwpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcGFjaXR5ICogbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fb3Bh
Y2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJlID8g
cmVwbGljYU1hc2tUZXh0dXJlLmdldCgpIDogbWFza1RleHR1cmUuZ2V0KCkpOworICAgICAgICB9
CiAKLSAgICBjb25zdCBJbnRSZWN0IHJlY3QgPSBtX2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIgPyBl
bnRpcmVSZWN0KCkgOiB0YXJnZXRSZWN0KCk7Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXggdHJhbnNmb3JtID0gbV9sYXllclR5cGUgPT0gQ2xpcExheWVyID8gVHJhbnNmb3JtYXRpb25N
YXRyaXgoKSA6IG1fdHJhbnNmb3Jtcy50YXJnZXQ7Ci0gICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVy
LT5kcmF3VGV4dHVyZSgqbV90ZXh0dXJlLmdldCgpLCByZWN0LCB0cmFuc2Zvcm0sIG9wYWNpdHks
IG9wdGlvbnMuaXNTdXJmYWNlID8gMCA6IG1hc2tUZXh0dXJlLmdldCgpKTsKLSAgICBvcHRpb25z
LmNhY2hlLT5tYXJrKG1fdGV4dHVyZS5nZXQoKSk7CisgICAgICAgIGNvbnN0IEZsb2F0UmVjdCBy
ZWN0ID0gdGFyZ2V0UmVjdEZvclRpbGVSZWN0KHRhcmdldFJlY3QsIG1fdGlsZXNbaV0ucmVjdCk7
CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKnRleHR1cmUsIHJl
Y3QsIG1fdHJhbnNmb3Jtcy50YXJnZXQsIG9wYWNpdHksIG9wdGlvbnMuaXNTdXJmYWNlID8gMCA6
IG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICB9CiB9CiAKLWJvb2wgVGV4dHVyZU1hcHBlck5vZGU6
OnBhaW50UmVwbGljYShjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlvbnMpCitpbnQgVGV4
dHVyZU1hcHBlck5vZGU6OmNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZShjb25zdCB2b2lkKiBh
LCBjb25zdCB2b2lkKiBiKQogewotICAgIEJpdG1hcFRleHR1cmUmIHRleHR1cmUgPSAqbV9zdXJm
YWNlLmdldCgpOwotICAgIFRleHR1cmVNYXBwZXJOb2RlKiByZXBsaWNhID0gbV9zdGF0ZS5yZXBs
aWNhTGF5ZXI7Ci0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1hc2tUZXh0dXJlOwotICAgIGlm
IChUZXh0dXJlTWFwcGVyTm9kZSogbWFzayA9IG1fc3RhdGUubWFza0xheWVyKQotICAgICAgICBt
YXNrVGV4dHVyZSA9IG1hc2stPm1fdGV4dHVyZTsKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
cmVwbGljYU1hc2tUZXh0dXJlOwotICAgIGlmICghcmVwbGljYSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKHJlcGxpY2EgJiYgcmVwbGljYS0+bV9zdGF0ZS5tYXNrTGF5ZXIpCi0g
ICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZSA9IHJlcGxpY2EtPm1fc3RhdGUubWFza0xheWVyLT5t
X3RleHR1cmU7Ci0KLSAgICBpZiAocmVwbGljYU1hc2tUZXh0dXJlKQotICAgICAgICByZXBsaWNh
TWFza1RleHR1cmUtPnVucGFjaygpOwotICAgIEFTU0VSVChtX3JlcGxpY2FTdXJmYWNlKTsKLSAg
ICBtX3JlcGxpY2FTdXJmYWNlLT5yZXNldChvcHRpb25zLnN1cmZhY2UtPnNpemUoKSk7Ci0gICAg
bV9yZXBsaWNhU3VyZmFjZS0+c2V0T2Zmc2V0KG9wdGlvbnMuc3VyZmFjZS0+b2Zmc2V0KCkpOwot
ICAgIG9wdGlvbnMuY2FjaGUtPm1hcmsobV9yZXBsaWNhU3VyZmFjZS5nZXQoKSk7Ci0gICAgb3B0
aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShtX3JlcGxpY2FTdXJmYWNlLmdldCgpKTsK
LSAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKHRleHR1cmUsIHJlcGxpY2FS
ZWN0KCksIG1fdHJhbnNmb3Jtcy5yZXBsaWNhLCByZXBsaWNhLT5tX3N0YXRlLm9wYWNpdHksIHJl
cGxpY2FNYXNrVGV4dHVyZSA/IHJlcGxpY2FNYXNrVGV4dHVyZS5nZXQoKSA6IG1hc2tUZXh0dXJl
LmdldCgpKTsKLSAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKHRleHR1cmUs
IEludFJlY3QoSW50UG9pbnQoMCwgMCksIG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgpKSwgVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwgMS4wZiwgbWFza1RleHR1cmUuZ2V0KCkpOwotICAgIG9wdGlvbnMu
dGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uob3B0aW9ucy5zdXJmYWNlKTsKLSAgICBvcHRpb25z
LmNhY2hlLT5tYXJrKG9wdGlvbnMuc3VyZmFjZSk7Ci0gICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVy
LT5kcmF3VGV4dHVyZSgqbV9yZXBsaWNhU3VyZmFjZS5nZXQoKSwgSW50UmVjdChJbnRQb2ludCgw
LCAwKSwgb3B0aW9ucy5zdXJmYWNlLT5zaXplKCkpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBv
cHRpb25zLm9wYWNpdHksIDApOwotICAgIHJldHVybiB0cnVlOworICAgIFRleHR1cmVNYXBwZXJO
b2RlKiBjb25zdCogbm9kZUEgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyTm9kZSogY29uc3Qq
PihhKTsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogY29uc3QqIG5vZGVCID0gc3RhdGljX2Nhc3Q8
VGV4dHVyZU1hcHBlck5vZGUqIGNvbnN0Kj4oYik7CisgICAgcmV0dXJuIGludCgoKCpub2RlQSkt
Pm1fdHJhbnNmb3Jtcy5jZW50ZXJaIC0gKCpub2RlQiktPm1fdHJhbnNmb3Jtcy5jZW50ZXJaKSAq
IDEwMDApOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFN1cmZhY2UoY29uc3Qg
VGV4bWFwUGFpbnRPcHRpb25zJiBvcHRpb25zKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c29y
dEJ5Wk9yZGVyKFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSogPiYgYXJyYXksIGludCBmaXJzdCwg
aW50IGxhc3QpCiB7Ci0gICAgaWYgKG1fbGF5ZXJUeXBlID09IFJvb3RMYXllciB8fCBtX2xheWVy
VHlwZSA9PSBEZWZhdWx0TGF5ZXIgfHwgbV9sYXllclR5cGUgPT0gU2Npc3NvckxheWVyKQotICAg
ICAgICByZXR1cm47CisgICAgcXNvcnQoYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIHNpemVv
ZihUZXh0dXJlTWFwcGVyTm9kZSopLCBjb21wYXJlR3JhcGhpY3NMYXllcnNaVmFsdWUpOworfQog
Ci0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1hc2tUZXh0dXJlOwotICAgIGlmIChUZXh0dXJl
TWFwcGVyTm9kZSogbWFzayA9IG1fc3RhdGUubWFza0xheWVyKQotICAgICAgICBtYXNrVGV4dHVy
ZSA9IG1hc2stPm1fdGV4dHVyZTsKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZkFu
ZENoaWxkcmVuKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMsIFRleHR1
cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnNGb3JEZXNjZW5kYW50cykKK3sKKyAgICBib29s
IGhhc0NsaXAgPSBtX3N0YXRlLm1hc2tzVG9Cb3VuZHMgJiYgIW1fY2hpbGRyZW4uaXNFbXB0eSgp
OworICAgIGlmIChoYXNDbGlwKQorICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJlZ2lu
Q2xpcChtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMsIEZsb2F0UmVjdCgwLCAwLCBtX3NpemUu
d2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7CiAKLSAgICBBU1NFUlQobV9zdXJmYWNlKTsKLSAg
ICBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlID0gKm1fc3VyZmFjZS5nZXQoKTsKLSAgICBpZiAobWFz
a1RleHR1cmUpCi0gICAgICAgIG1hc2tUZXh0dXJlLT51bnBhY2soKTsKLSAgICB0ZXh0dXJlLnVu
cGFjaygpOworICAgIHBhaW50U2VsZihvcHRpb25zKTsKIAotICAgIGlmIChwYWludFJlcGxpY2Eo
b3B0aW9ucykpCi0gICAgICAgIHJldHVybjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fY2hp
bGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIG1fY2hpbGRyZW5baV0tPnBhaW50UmVjdXJzaXZl
KG9wdGlvbnNGb3JEZXNjZW5kYW50cyk7CiAKLSAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJp
bmRTdXJmYWNlKG9wdGlvbnMuc3VyZmFjZSk7Ci0gICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5k
cmF3VGV4dHVyZSh0ZXh0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xheWVy
VHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllciA/IEludFJlY3QoSW50UG9pbnQoMCwgMCksIG9wdGlv
bnMuc3VyZmFjZS0+c2l6ZSgpKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdl
dFJlY3QoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9sYXllclR5cGUgPT0gVHJh
bnNwYXJlbmN5TGF5ZXIgPyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIDogbV90cmFuc2Zvcm1zLnRh
cmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vcGFjaXR5LCBtYXNr
VGV4dHVyZS5nZXQoKSk7Ci0gICAgb3B0aW9ucy5jYWNoZS0+bWFyaygmdGV4dHVyZSk7CisgICAg
aWYgKGhhc0NsaXApCisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZW5kQ2xpcCgpOwog
fQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFNlbGZBbmRDaGlsZHJlbihjb25zdCBU
ZXhtYXBQYWludE9wdGlvbnMmIG9wdGlvbnMsIFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9uc0Zv
ckRlc2NlbmRhbnRzKQorYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRSZWZsZWN0aW9uKGNv
bnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMsIEJpdG1hcFRleHR1cmUqIGNv
bnRlbnRTdXJmYWNlKQogewotICAgIGJvb2wgZGlkUGFpbnRTZWxmID0gZmFsc2U7Ci0gICAgaWYg
KCFtX3N0YXRlLnByZXNlcnZlczNEIHx8IG1fY2hpbGRyZW4uaXNFbXB0eSgpKSB7Ci0gICAgICAg
IHBhaW50U2VsZihvcHRpb25zKTsKLSAgICAgICAgZGlkUGFpbnRTZWxmID0gdHJ1ZTsKLSAgICB9
CisgICAgaWYgKCFtX3N0YXRlLnJlcGxpY2FMYXllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpICYmICFvcHRpb25zLmlzU3VyZmFjZSkKLSAg
ICAgICAgcmV0dXJuOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBzdXJmYWNlKGNvbnRlbnRT
dXJmYWNlKTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFza1N1cmZhY2U7CisgICAgUmVm
UHRyPEJpdG1hcFRleHR1cmU+IHJlcGxpY2FNYXNrU3VyZmFjZTsKKyAgICBSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gcmVwbGljYU1hc2tUZXh0dXJlOwogCi0gICAgaWYgKG1fbGF5ZXJUeXBlID09IFNj
aXNzb3JMYXllcikKLSAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0Lmlu
dGVyc2VjdChtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFJlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUu
d2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSkpOworICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSog
cmVwbGljYU1hc2sgPSBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXIpCisg
ICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZSA9IHJlcGxpY2FNYXNrLT50ZXh0dXJlKCk7CiAKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
VGV4dHVyZU1hcHBlck5vZGUqIGxheWVyID0gbV9jaGlsZHJlbltpXTsKLSAgICAgICAgaWYgKCFs
YXllcikKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBt
YXNrVGV4dHVyZTsKKyAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIG1hc2sgPSBtX3N0YXRlLm1h
c2tMYXllcikKKyAgICAgICAgbWFza1RleHR1cmUgPSBtYXNrLT50ZXh0dXJlKCk7CiAKLSAgICAg
ICAgaWYgKCFkaWRQYWludFNlbGYgJiYgbGF5ZXItPm1fdHJhbnNmb3Jtcy5jZW50ZXJaID49IDAp
IHsKLSAgICAgICAgICAgIHBhaW50U2VsZihvcHRpb25zKTsKLSAgICAgICAgICAgIGRpZFBhaW50
U2VsZiA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgbGF5ZXItPnBhaW50UmVjdXJzaXZlKG9w
dGlvbnNGb3JEZXNjZW5kYW50cyk7Ci0gICAgICAgIGlmIChvcHRpb25zLmlzU3VyZmFjZSkgewot
ICAgICAgICAgICAgQVNTRVJUKG1fc3VyZmFjZSk7Ci0gICAgICAgICAgICBvcHRpb25zLmNhY2hl
LT5tYXJrKG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBw
ZXItPmJpbmRTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgICAgIH0KKyAgICBjb25zdCBJ
bnRTaXplIHZpZXdwb3J0U2l6ZSA9IG9wdGlvbnMudGV4dHVyZU1hcHBlci0+dmlld3BvcnRTaXpl
KCk7CisgICAgY29uc3QgYm9vbCB1c2VJbnRlcm1lZGlhdGVCdWZmZXJGb3JSZXBsaWNhID0gbV9z
dGF0ZS5yZXBsaWNhTGF5ZXIgJiYgb3B0aW9ucy5vcGFjaXR5IDwgMC45OTsKKyAgICBjb25zdCBi
b29sIHVzZUludGVybWVkaWF0ZUJ1ZmZlckZvck1hc2sgPSBtYXNrVGV4dHVyZSAmJiByZXBsaWNh
TWFza1RleHR1cmU7CisgICAgY29uc3QgRmxvYXRSZWN0IHZpZXdwb3J0UmVjdCgwLCAwLCB2aWV3
cG9ydFNpemUud2lkdGgoKSwgdmlld3BvcnRTaXplLmhlaWdodCgpKTsKKworICAgIC8vIFRoZSBt
YXNrIGhhcyB0byBiZSBhZGp1c3RlZCB0byB0YXJnZXQgY29vcmRpbmF0ZXMuCisgICAgaWYgKG1h
c2tUZXh0dXJlKSB7CisgICAgICAgIG1hc2tTdXJmYWNlID0gb3B0aW9ucy5zdXJmYWNlTWFuYWdl
ci0+Z2V0SW50ZXJtZWRpYXRlU3VyZmFjZSgpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBw
ZXItPmJpbmRTdXJmYWNlKG1hc2tTdXJmYWNlLmdldCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0
dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqbWFza1RleHR1cmUuZ2V0KCksIGVudGlyZVJlY3QoKSwg
bV90cmFuc2Zvcm1zLnRhcmdldCwgMSwgMCk7CisgICAgICAgIG1hc2tUZXh0dXJlID0gbWFza1N1
cmZhY2U7CiAgICAgfQotICAgIGlmICghZGlkUGFpbnRTZWxmKSB7Ci0gICAgICAgIHBhaW50U2Vs
ZihvcHRpb25zKTsKLSAgICAgICAgZGlkUGFpbnRTZWxmID0gdHJ1ZTsKKworICAgIC8vIFRoZSBy
ZXBsaWNhJ3MgbWFzayBoYXMgdG8gYmUgYWRqdXN0ZWQgdG8gdGFyZ2V0IGNvb3JkaW5hdGVzLgor
ICAgIGlmIChyZXBsaWNhTWFza1RleHR1cmUpIHsKKyAgICAgICAgcmVwbGljYU1hc2tTdXJmYWNl
ID0gb3B0aW9ucy5zdXJmYWNlTWFuYWdlci0+Z2V0SW50ZXJtZWRpYXRlU3VyZmFjZSgpOworICAg
ICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKHJlcGxpY2FNYXNrU3VyZmFj
ZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKnJl
cGxpY2FNYXNrVGV4dHVyZS5nZXQoKSwgZW50aXJlUmVjdCgpLCBtX3RyYW5zZm9ybXMudGFyZ2V0
LCAxLCAwKTsKKyAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJlID0gcmVwbGljYU1hc2tTdXJmYWNl
OwogICAgIH0KKworICAgIC8vIFdlIG1pZ2h0IG5lZWQgdG8gYXBwbHkgdGhlIG1hc2sgb2YgdGhl
IGNvbnRlbnQgbGF5ZXIgYmVmb3JlIHdlIGRyYXcgdGhlIHJlZmxlY3Rpb24sIGFzIHRoZXJlIG1p
Z2h0IGJlIHlldCBhbm90aGVyIG1hc2sgZm9yIHRoZSByZWZsZWN0aW9uIGl0c2VsZi4KKyAgICBp
ZiAodXNlSW50ZXJtZWRpYXRlQnVmZmVyRm9yTWFzaykgeworICAgICAgICBSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gbWFza1N1cmZhY2UgPSBvcHRpb25zLnN1cmZhY2VNYW5hZ2VyLT5nZXRJbnRlcm1l
ZGlhdGVTdXJmYWNlKCk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZh
Y2UobWFza1N1cmZhY2UuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRy
YXdUZXh0dXJlKCpzdXJmYWNlLmdldCgpLCB2aWV3cG9ydFJlY3QsIFRyYW5zZm9ybWF0aW9uTWF0
cml4KCksIDEsIG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICAgICAgb3B0aW9ucy5zdXJmYWNlTWFu
YWdlci0+cmVsZWFzZUludGVybWVkaWF0ZVN1cmZhY2Uoc3VyZmFjZS5nZXQoKSk7CisgICAgICAg
IHN1cmZhY2UgPSBtYXNrU3VyZmFjZTsKKyAgICAgICAgbWFza1RleHR1cmUuY2xlYXIoKTsKKyAg
ICB9CisKKyAgICAvLyBXZSBibGVuZCB0aGUgbGF5ZXIgYW5kIGl0cyByZXBsaWNhIGluIGFuIGlu
dGVybWVkaWF0ZSBidWZmZXIgYmVmb3JlIGJsZW5kaW5nIGludG8gdGhlIHRhcmdldCBzdXJmYWNl
LgorICAgIGlmICh1c2VJbnRlcm1lZGlhdGVCdWZmZXJGb3JSZXBsaWNhKSB7CisgICAgICAgIFJl
ZlB0cjxCaXRtYXBUZXh0dXJlPiByZXBsaWNhU3VyZmFjZSA9IG9wdGlvbnMuc3VyZmFjZU1hbmFn
ZXItPmdldEludGVybWVkaWF0ZVN1cmZhY2UoKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFw
cGVyLT5iaW5kU3VyZmFjZShyZXBsaWNhU3VyZmFjZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMu
dGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKnN1cmZhY2UuZ2V0KCksIHZpZXdwb3J0UmVjdCwg
bV90cmFuc2Zvcm1zLnJlcGxpY2EsIG1fc3RhdGUucmVwbGljYUxheWVyLT5tX29wYWNpdHksIHJl
cGxpY2FNYXNrVGV4dHVyZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+
ZHJhd1RleHR1cmUoKnN1cmZhY2UuZ2V0KCksIHZpZXdwb3J0UmVjdCwgVHJhbnNmb3JtYXRpb25N
YXRyaXgoKSwgMSwgbWFza1RleHR1cmUuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnN1cmZhY2VN
YW5hZ2VyLT5yZWxlYXNlSW50ZXJtZWRpYXRlU3VyZmFjZShzdXJmYWNlLmdldCgpKTsKKyAgICAg
ICAgc3VyZmFjZSA9IHJlcGxpY2FTdXJmYWNlOworICAgIH0KKworICAgIG9wdGlvbnMudGV4dHVy
ZU1hcHBlci0+YmluZFN1cmZhY2Uob3B0aW9ucy5zdXJmYWNlKTsKKworICAgIC8vIERyYXcgdGhl
IHJlZmxlY3Rpb24uCisgICAgaWYgKCF1c2VJbnRlcm1lZGlhdGVCdWZmZXJGb3JSZXBsaWNhKQor
ICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCpzdXJmYWNlLmdldCgp
LCB2aWV3cG9ydFJlY3QsIG1fdHJhbnNmb3Jtcy5yZXBsaWNhLCBtX3N0YXRlLnJlcGxpY2FMYXll
ci0+bV9vcGFjaXR5LCByZXBsaWNhTWFza1RleHR1cmUuZ2V0KCkpOworCisgICAgLy8gRHJhdyB0
aGUgb3JpZ2luYWwuCisgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqc3Vy
ZmFjZS5nZXQoKSwgdmlld3BvcnRSZWN0LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBvcHRpb25z
Lm9wYWNpdHksIG1hc2tUZXh0dXJlLmdldCgpKTsKKworICAgIG9wdGlvbnMuc3VyZmFjZU1hbmFn
ZXItPnJlbGVhc2VJbnRlcm1lZGlhdGVTdXJmYWNlKG1hc2tTdXJmYWNlLmdldCgpKTsKKyAgICBv
cHRpb25zLnN1cmZhY2VNYW5hZ2VyLT5yZWxlYXNlSW50ZXJtZWRpYXRlU3VyZmFjZShyZXBsaWNh
TWFza1N1cmZhY2UuZ2V0KCkpOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OnBhaW50UmVjdXJzaXZlKFRleG1hcFBhaW50T3B0aW9ucyBvcHRpb25zKQor
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRSZWN1cnNpdmUoVGV4dHVyZU1hcHBlclBhaW50
T3B0aW9ucyBvcHRpb25zKQogewotICAgIGJvb2wgaXNEaXJ0eSA9IG1fc3RhdGUuZGlydHk7Ci0g
ICAgbV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOwotCiAgICAgaWYgKChtX3NpemUuaXNFbXB0eSgpICYm
IChtX3N0YXRlLm1hc2tzVG9Cb3VuZHMKLSAgICAgICAgfHwgbV9jaGlsZHJlbi5pc0VtcHR5KCkp
KSB8fCAhbV9zdGF0ZS52aXNpYmxlIHx8IG9wdGlvbnMub3BhY2l0eSA8IDAuMDEgfHwgbV9zdGF0
ZS5vcGFjaXR5IDwgMC4wMSkKKyAgICAgICAgfHwgbV9jaGlsZHJlbi5pc0VtcHR5KCkpKSB8fCAh
bV9zdGF0ZS52aXNpYmxlIHx8IG9wdGlvbnMub3BhY2l0eSA8IDAuMDEgfHwgbV9vcGFjaXR5IDwg
MC4wMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29tcHV0ZVJlcGxpY2FUcmFuc2Zvcm0oKTsK
KyAgICBvcHRpb25zLm9wYWNpdHkgKj0gbV9vcGFjaXR5OworICAgIFJlZlB0cjxCaXRtYXBUZXh0
dXJlPiBzdXJmYWNlOworICAgIGNvbnN0IGJvb2wgbmVlZHNUd29QYXNzID0gKChtX3N0YXRlLnJl
cGxpY2FMYXllciB8fCBtX3N0YXRlLm1hc2tMYXllcikgJiYgIW1fY2hpbGRyZW4uaXNFbXB0eSgp
KSB8fCAobV9vcGFjaXR5IDwgMC45OSAmJiBtX3N0YXRlLm1pZ2h0SGF2ZU92ZXJsYXBzKSB8fCAo
bV9vcGFjaXR5IDwgMC45OSAmJiBtX3N0YXRlLnJlcGxpY2FMYXllcik7CisgICAgY29uc3QgSW50
U2l6ZSB2aWV3cG9ydFNpemUgPSBvcHRpb25zLnRleHR1cmVNYXBwZXItPnZpZXdwb3J0U2l6ZSgp
OworICAgIG9wdGlvbnMuaXNTdXJmYWNlID0gZmFsc2U7CiAKLSAgICBpZiAobV9zdGF0ZS5tYXNr
TGF5ZXIpCi0gICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5tX3N0YXRlLmRpcnR5ID0gZmFsc2U7
CisgICAgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyBvcHRpb25zRm9yRGVzY2VuZGFudHMob3B0
aW9ucyk7CiAKLSAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpIHsKLSAgICAgICAgbV9zdGF0
ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUuZGlydHkgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1fc3Rh
dGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllcikKLSAgICAgICAgICAgIG1fc3RhdGUu
cmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllci0+bV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOwor
ICAgIGlmICghbmVlZHNUd29QYXNzKSB7CisgICAgICAgIHBhaW50U2VsZkFuZENoaWxkcmVuKG9w
dGlvbnMsIG9wdGlvbnNGb3JEZXNjZW5kYW50cyk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBjb25zdCBib29sIGlzU3VyZmFjZSA9IChtX2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2xheWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lM
YXllcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChtX2xheWVyVHlwZSA9PSBSb290
TGF5ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKG9wdGlvbnMudGV4dHVy
ZU1hcHBlci0+YWxsb3dTdXJmYWNlRm9yUm9vdCgpIHx8IG1fc3RhdGUuaGFzU3VyZmFjZURlc2Nl
bmRhbnRzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBGbG9hdFJl
Y3Qgdmlld3BvcnRSZWN0KDAsIDAsIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3cG9ydFNpemUu
aGVpZ2h0KCkpOwogCi0gICAgY29uc3QgSW50UmVjdCBib3VuZGluZ1JlY3Rmcm9tTmVhcmVzdFN1
cmZhY2UgPSBtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0OworICAgIFJlZlB0cjxCaXRt
YXBUZXh0dXJlPiBtYXNrU3VyZmFjZTsKKworICAgIC8vIFRoZSBtYXNrIGhhcyB0byBiZSBhZGp1
c3RlZCB0byB0YXJnZXQgY29vcmRpbmF0ZXMuCisgICAgaWYgKG1fc3RhdGUubWFza0xheWVyKSB7
CisgICAgICAgIG1hc2tTdXJmYWNlID0gb3B0aW9ucy5zdXJmYWNlTWFuYWdlci0+Z2V0SW50ZXJt
ZWRpYXRlU3VyZmFjZSgpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJm
YWNlKG1hc2tTdXJmYWNlLmdldCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5k
cmF3VGV4dHVyZSgqbV9zdGF0ZS5tYXNrTGF5ZXItPnRleHR1cmUoKSwgZW50aXJlUmVjdCgpLCBt
X3RyYW5zZm9ybXMudGFyZ2V0LCAxLjAsIDApOworICAgIH0KIAotICAgIG9wdGlvbnMub3BhY2l0
eSAqPSBtX3N0YXRlLm9wYWNpdHk7CisgICAgc3VyZmFjZSA9IG9wdGlvbnMuc3VyZmFjZU1hbmFn
ZXItPmdldEludGVybWVkaWF0ZVN1cmZhY2UoKTsKKyAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMu
c3VyZmFjZSA9IHN1cmZhY2UuZ2V0KCk7CisgICAgb3B0aW9ucy5pc1N1cmZhY2UgPSB0cnVlOwor
ICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy5vcGFjaXR5ID0gMTsKKyAgICBvcHRpb25zLnRleHR1
cmVNYXBwZXItPmJpbmRTdXJmYWNlKHN1cmZhY2UuZ2V0KCkpOwogCi0gICAgVGV4bWFwUGFpbnRP
cHRpb25zIG9wdGlvbnNGb3JEZXNjZW5kYW50cyhvcHRpb25zKTsKLSAgICBvcHRpb25zRm9yRGVz
Y2VuZGFudHMub3BhY2l0eSA9IGlzU3VyZmFjZSA/IDEgOiBvcHRpb25zLm9wYWNpdHk7Ci0gICAg
b3B0aW9ucy5pc1N1cmZhY2UgPSBpc1N1cmZhY2U7CisgICAgcGFpbnRTZWxmQW5kQ2hpbGRyZW4o
b3B0aW9ucywgb3B0aW9uc0ZvckRlc2NlbmRhbnRzKTsKIAotICAgIGlmIChtX2xheWVyVHlwZSA9
PSBDbGlwTGF5ZXIpIHsKLSAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnZpc2libGVSZWN0
ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKS50cmFuc2xhdGUoLWJvdW5kaW5nUmVjdGZyb21OZWFy
ZXN0U3VyZmFjZS54KCksIC1ib3VuZGluZ1JlY3Rmcm9tTmVhcmVzdFN1cmZhY2UueSgpKS5tYXBS
ZWN0KG9wdGlvbnMudmlzaWJsZVJlY3QpOwotICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMu
c2Npc3NvclJlY3QgPSBJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0
KCkpOworICAgIGlmICghcGFpbnRSZWZsZWN0aW9uKG9wdGlvbnMsIHN1cmZhY2UuZ2V0KCkpKSB7
CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uob3B0aW9ucy5zdXJm
YWNlKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqc3VyZmFj
ZS5nZXQoKSwgdmlld3BvcnRSZWN0LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBvcHRpb25zLm9w
YWNpdHksIDApOwogICAgIH0KIAotICAgIGlmIChtX2xheWVyVHlwZSA9PSBTY2lzc29yTGF5ZXIp
Ci0gICAgICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy5zY2lzc29yUmVjdC5pbnRlcnNlY3QobV90
cmFuc2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVjdCk7Ci0gICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVy
LT5zZXRDbGlwKG9wdGlvbnNGb3JEZXNjZW5kYW50cy5zY2lzc29yUmVjdCk7Ci0KLSAgICBUZXh0
dXJlTWFwcGVyQ2FjaGVMb2NrKG1fdGV4dHVyZS5nZXQoKSk7Ci0gICAgVGV4dHVyZU1hcHBlckNh
Y2hlTG9jayhtX3N1cmZhY2UuZ2V0KCkpOwotICAgIFRleHR1cmVNYXBwZXJDYWNoZUxvY2sobV9y
ZXBsaWNhU3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBvcHRpb25zLmNhY2hlLT5wdXJnZSgpOwotCi0g
ICAgaWYgKGlzU3VyZmFjZSkgewotICAgICAgICBBU1NFUlQobV9zdXJmYWNlKTsKLSAgICAgICAg
aWYgKCFtX3N1cmZhY2UtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGlzRGlydHkgPSB0cnVlOwot
ICAgICAgICBpZiAobV9zdGF0ZS50aWxlZCkgewotICAgICAgICAgICAgbV9zdXJmYWNlLT5yZXNl
dChvcHRpb25zLnZpc2libGVSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBtX3N1cmZhY2UtPnNl
dE9mZnNldChvcHRpb25zLnZpc2libGVSZWN0LmxvY2F0aW9uKCkpOwotICAgICAgICB9IGVsc2Ug
aWYgKGlzRGlydHkpCi0gICAgICAgICAgICBtX3N1cmZhY2UtPnJlc2V0KG1fbGF5ZXJUeXBlID09
IFRyYW5zcGFyZW5jeUxheWVyID8gb3B0aW9ucy5zdXJmYWNlLT5zaXplKCkgOiBtX3NpemUpOwot
ICAgICAgICBvcHRpb25zLmNhY2hlLT5tYXJrKG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgICAgIG9w
dGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UobV9zdXJmYWNlLmdldCgpKTsKLSAgICAg
ICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnN1cmZhY2UgPSBtX3N1cmZhY2UuZ2V0KCk7Ci0gICAg
fSBlbHNlIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIG1fc3VyZmFjZS0+ZGVzdHJveSgpOwotCi0g
ICAgaWYgKGlzRGlydHkgfHwgIWlzU3VyZmFjZSB8fCBtX3N0YXRlLnRpbGVkIHx8ICFtX3N1cmZh
Y2UtPmlzVmFsaWQoKSkKLSAgICAgICAgcGFpbnRTZWxmQW5kQ2hpbGRyZW4ob3B0aW9ucywgb3B0
aW9uc0ZvckRlc2NlbmRhbnRzKTsKLQotICAgIHBhaW50U3VyZmFjZShvcHRpb25zKTsKKyAgICBv
cHRpb25zLnN1cmZhY2VNYW5hZ2VyLT5yZWxlYXNlSW50ZXJtZWRpYXRlU3VyZmFjZShzdXJmYWNl
LmdldCgpKTsKKyAgICBvcHRpb25zLnN1cmZhY2VNYW5hZ2VyLT5yZWxlYXNlSW50ZXJtZWRpYXRl
U3VyZmFjZShtYXNrU3VyZmFjZS5nZXQoKSk7CiB9CiAKIFRleHR1cmVNYXBwZXJOb2RlOjp+VGV4
dHVyZU1hcHBlck5vZGUoKQogewotICAgIHNldE5lZWRzRGlzcGxheSgpOwotICAgIHsKLSAgICAg
ICAgY29uc3QgaW50IGNoaWxkcmVuU2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOwotICAgICAgICBm
b3IgKGludCBpID0gY2hpbGRyZW5TaXplLTE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICBB
U1NFUlQobV9jaGlsZHJlbltpXS0+bV9wYXJlbnQgPT0gdGhpcyk7Ci0gICAgICAgICAgICBtX2No
aWxkcmVuW2ldLT5tX3BhcmVudCA9IDA7Ci0gICAgICAgIH0KLSAgICB9CisgICAgZm9yIChpbnQg
aSA9IG1fY2hpbGRyZW4uc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpCisgICAgICAgIG1fY2hpbGRy
ZW5baV0tPm1fcGFyZW50ID0gMDsKKwogICAgIGlmIChtX3BhcmVudCkKICAgICAgICAgbV9wYXJl
bnQtPm1fY2hpbGRyZW4ucmVtb3ZlKG1fcGFyZW50LT5tX2NoaWxkcmVuLmZpbmQodGhpcykpOwot
ICAgIGlmIChtX2NhY2hlKQotICAgICAgICBkZWxldGUgbV9jYWNoZTsKIH0KIAotdm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6cGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpCit2b2lkIFRleHR1cmVN
YXBwZXJOb2RlOjpzZXRWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGNv
bnN0IExheWVyVHlwZSBwcmV2TGF5ZXJUeXBlID0gbV9sYXllclR5cGU7Ci0gICAgY29tcHV0ZUxh
eWVyVHlwZSgpOwotICAgIGlmIChwcmV2TGF5ZXJUeXBlICE9IG1fbGF5ZXJUeXBlKQotICAgICAg
ICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKLSAgICBpZiAobV90cmFuc2Zvcm1zLmRpcnR5KQotICAg
ICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKLQotICAgIGNvbXB1dGVUcmFuc2Zvcm1hdGlvbnMoKTsK
LSAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIgJiYgIW1fc3RhdGUuZGlydHkpCi0gICAgICAgIG1f
c3RhdGUuZGlydHkgPSBtX3N0YXRlLm1hc2tMYXllci0+bV9zdGF0ZS5kaXJ0eTsKLSAgICBpZiAo
bV9zdGF0ZS5yZXBsaWNhTGF5ZXIgJiYgIW1fc3RhdGUuZGlydHkpCi0gICAgICAgIG1fc3RhdGUu
ZGlydHkgPSBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5kaXJ0eTsKLQotICAgIGNvbnN0
IGludCBzaXplID0gbV9jaGlsZHJlbi5zaXplKCk7Ci0KLSAgICBmb3IgKGludCBpID0gc2l6ZSAt
IDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IG1f
Y2hpbGRyZW5baV07Ci0KLSAgICAgICAgbGF5ZXItPnBlcmZvcm1Qb3N0U3luY09wZXJhdGlvbnMo
KTsKLSAgICAgICAgaWYgKCFtX3N0YXRlLmRpcnR5KQotICAgICAgICAgICAgbV9zdGF0ZS5kaXJ0
eSA9IGxheWVyLT5tX3N0YXRlLmRpcnR5OwotICAgIH0KLSAgICBtX3N0YXRlLmhhc1N1cmZhY2VE
ZXNjZW5kYW50cyA9IGhhc1N1cmZhY2VEZXNjZW5kYW50cygpOwotICAgIGlmIChtX3N0YXRlLmRp
cnR5KQotICAgICAgICBtX3N0YXRlLmRlc2NlbmRhbnRzV2l0aENvbnRlbnQgPSBjb3VudERlc2Nl
bmRhbnRzV2l0aENvbnRlbnQoKTsKKyAgICBtX3N0YXRlLnJvb3RWaXNpYmxlUmVjdCA9IG1fc3Rh
dGUudmlzaWJsZVJlY3QgPSByZWN0OworfQogCi0gICAgaWYgKG1fc3RhdGUucHJlc2VydmVzM0Qp
Ci0gICAgICAgIHNvcnRCeVpPcmRlcihtX2NoaWxkcmVuLCAwLCBzaXplKTsKLSAgICBpZiAobV9z
dGF0ZS5kaXJ0eSkKLSAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7Cit2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciog
Z3JhcGhpY3NMYXllciwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgYm9vbCB0cmF2ZXJz
ZURlc2NlbmRhbnRzKQoreworICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJuYWwoZ3JhcGhp
Y3NMYXllciwgdHJhdmVyc2VEZXNjZW5kYW50cywgdGV4dHVyZU1hcHBlcik7CiB9CiAKLXZvaWQg
VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBib29sIHJlY3Vyc2UpCit2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciog
Z3JhcGhpY3NMYXllciwgYm9vbCB0cmF2ZXJzZURlc2NlbmRhbnRzKQogewotICAgIFRleHR1cmVN
YXBwZXIqIHRleHR1cmVNYXBwZXIgPSByb290TGF5ZXIoKS0+bV9wbGF0Zm9ybUNsaWVudC0+dGV4
dHVyZU1hcHBlcigpOwotICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJuYWwoZ3JhcGhpY3NM
YXllciwgcmVjdXJzZSwgdGV4dHVyZU1hcHBlcik7Ci0gICAgcGVyZm9ybVBvc3RTeW5jT3BlcmF0
aW9ucygpOworICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlKGdyYXBoaWNzTGF5ZXIsIHJvb3RMYXll
cigpLT5tX3RleHR1cmVNYXBwZXIsIHRyYXZlcnNlRGVzY2VuZGFudHMpOwogfQogCiB2b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIp
CiB7Ci0gICAgY29uc3QgaW50IGNoYW5nZU1hc2sgPSBncmFwaGljc0xheWVyLT5jaGFuZ2VNYXNr
KCk7Ci0gICAgaW5pdGlhbGl6ZVRleHR1cmVNYXBwZXIodGV4dHVyZU1hcHBlcik7CisgICAgaW50
IGNoYW5nZU1hc2sgPSBncmFwaGljc0xheWVyLT5jaGFuZ2VNYXNrKCk7CiAgICAgY29uc3QgVGV4
dHVyZU1hcHBlck5vZGU6OkNvbnRlbnREYXRhJiBwZW5kaW5nQ29udGVudCA9IGdyYXBoaWNzTGF5
ZXItPnBlbmRpbmdDb250ZW50KCk7CiAgICAgaWYgKGNoYW5nZU1hc2sgPT0gTm9DaGFuZ2VzICYm
IHBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QuaXNFbXB0eSgpICYmICFwZW5kaW5nQ29u
dGVudC5uZWVkc0Rpc3BsYXkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldE5lZWRzRGlzcGxh
eSgpOwotICAgIGlmIChtX3BhcmVudCkKLSAgICAgICAgbV9wYXJlbnQtPm1fc3RhdGUuZGlydHkg
PSB0cnVlOwotCiAgICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENv
bnRlbnRUeXBlICYmIChjaGFuZ2VNYXNrICYgUGFyZW50Q2hhbmdlKSkgewotICAgICAgICAvLyBU
aGUgV2ViQ29yZSBjb21wb3NpdG9yIG1hbmFnZXMgaXRlbSBvd25lcnNoaXAuIFdlIGhhdmUgdG8g
bWFrZSBzdXJlIGdyYXBoaWNzdmlldyBkb2Vzbid0Ci0gICAgICAgIC8vIHRyeSB0byBzbmF0Y2gg
dGhhdCBvd25lcnNoaXAuCi0KLSAgICAgICAgaWYgKCFncmFwaGljc0xheWVyLT5wYXJlbnQoKSkK
LSAgICAgICAgICAgIG1fcGFyZW50ID0gMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9w
YXJlbnQgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnBhcmVudCgpKTsKKyAg
ICAgICAgbV9wYXJlbnQgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnBhcmVu
dCgpKTsKIAogICAgICAgICBpZiAoIWdyYXBoaWNzTGF5ZXItPnBhcmVudCgpICYmIG1fcGFyZW50
KSB7CiAgICAgICAgICAgICBzaXplX3QgaW5kZXggPSBtX3BhcmVudC0+bV9jaGlsZHJlbi5maW5k
KHRoaXMpOwpAQCAtNzY0LDMyICs1OTksMzAgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3lu
Y0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAg
ICB9CiAKICAgICBpZiAoY2hhbmdlTWFzayAmIENoaWxkcmVuQ2hhbmdlKSB7CisgICAgICAgIGlm
ICh0ZXh0dXJlTWFwcGVyICYmIHRleHR1cmVNYXBwZXItPmFsbG93UGFydGlhbFVwZGF0ZXMoKSkg
eworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgICAgIG1fc3RhdGUucmVwYWludFJlY3QudW5pdGUobV9jaGlsZHJl
bltpXS0+bV90cmFuc2Zvcm1zLmJvdW5kaW5nUmVjdEZyb21Sb290KTsKKyAgICAgICAgfQorCiAg
ICAgICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBncmFwaGljc0xheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBp
ZiAoVGV4dHVyZU1hcHBlck5vZGUqIGNoaWxkID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGlj
c0xheWVyLT5jaGlsZHJlbigpW2ldKSkgewotICAgICAgICAgICAgICAgIGlmICghY2hpbGQpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIG1fY2hpbGRyZW4u
YXBwZW5kKGNoaWxkKTsKLSAgICAgICAgICAgICAgICBjaGlsZC0+bV9wYXJlbnQgPSB0aGlzOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIGNoaWxkID0gdG9U
ZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5jaGlsZHJlbigpW2ldKTsKKyAgICAgICAg
ICAgIGlmICghY2hpbGQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBt
X2NoaWxkcmVuLmFwcGVuZChjaGlsZCk7CisgICAgICAgICAgICBjaGlsZC0+bV9wYXJlbnQgPSB0
aGlzOwogICAgICAgICB9Ci0gICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOwogICAgIH0KIAog
ICAgIGlmIChjaGFuZ2VNYXNrICYgKFNpemVDaGFuZ2UgfCBDb250ZW50c1JlY3RDaGFuZ2UpKSB7
Ci0gICAgICAgIEludFNpemUgd2FudGVkU2l6ZSA9IEludFNpemUoZ3JhcGhpY3NMYXllci0+c2l6
ZSgpLndpZHRoKCksIGdyYXBoaWNzTGF5ZXItPnNpemUoKS5oZWlnaHQoKSk7CisgICAgICAgIEZs
b2F0U2l6ZSB3YW50ZWRTaXplKGdyYXBoaWNzTGF5ZXItPnNpemUoKS53aWR0aCgpLCBncmFwaGlj
c0xheWVyLT5zaXplKCkuaGVpZ2h0KCkpOwogICAgICAgICBpZiAod2FudGVkU2l6ZS5pc0VtcHR5
KCkgJiYgcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKQotICAg
ICAgICAgICAgd2FudGVkU2l6ZSA9IEludFNpemUoZ3JhcGhpY3NMYXllci0+Y29udGVudHNSZWN0
KCkud2lkdGgoKSwgZ3JhcGhpY3NMYXllci0+Y29udGVudHNSZWN0KCkuaGVpZ2h0KCkpOwotCi0g
ICAgICAgIGlmICh3YW50ZWRTaXplICE9IG1fc2l6ZSkgewotICAgICAgICAgICAgbV9zaXplID0g
SW50U2l6ZSh3YW50ZWRTaXplLndpZHRoKCksIHdhbnRlZFNpemUuaGVpZ2h0KCkpOwotICAgICAg
ICAgICAgaWYgKG1fcGxhdGZvcm1DbGllbnQpCi0gICAgICAgICAgICAgICAgbV9wbGF0Zm9ybUNs
aWVudC0+c2V0U2l6ZUNoYW5nZWQobV9zaXplKTsKLSAgICAgICAgICAgIGNvbnN0IGJvb2wgbmVl
ZHNUaWxpbmcgPSBtX3NpemUud2lkdGgoKSA+IDIwMDAgfHwgbV9zaXplLmhlaWdodCgpID4gMjAw
MDsKLSAgICAgICAgICAgIGlmIChtX3N0YXRlLnRpbGVkICE9IG5lZWRzVGlsaW5nKQotICAgICAg
ICAgICAgICAgIG1fc3RhdGUudGlsZWQgPSBuZWVkc1RpbGluZzsKLSAgICAgICAgICAgIG1fc3Rh
dGUuZGlydHkgPSB0cnVlOwotICAgICAgICB9CisgICAgICAgICAgICB3YW50ZWRTaXplID0gRmxv
YXRTaXplKGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzUmVjdCgpLndpZHRoKCksIGdyYXBoaWNzTGF5
ZXItPmNvbnRlbnRzUmVjdCgpLmhlaWdodCgpKTsKKworICAgICAgICBpZiAod2FudGVkU2l6ZSAh
PSBtX3NpemUpCisgICAgICAgICAgICBtX3RpbGVzLmNsZWFyKCk7CisKKyAgICAgICAgbV9zaXpl
ID0gd2FudGVkU2l6ZTsKICAgICB9CiAKICAgICBpZiAoY2hhbmdlTWFzayAmIE1hc2tMYXllckNo
YW5nZSkgewpAQCAtODAyLDI5ICs2MzUsMTUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3lu
Y0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAg
ICAgICAgICAgbGF5ZXItPm1fZWZmZWN0VGFyZ2V0ID0gdGhpczsKICAgICB9CiAKLSAgICBpZiAo
Y2hhbmdlTWFzayAmIChUcmFuc2Zvcm1DaGFuZ2UgfCBTaXplQ2hhbmdlIHwgQW5jaG9yUG9pbnRD
aGFuZ2UgfCBQb3NpdGlvbkNoYW5nZSkpCi0gICAgICAgIG1fdHJhbnNmb3Jtcy5sb2NhbERpcnR5
ID0gdHJ1ZTsKLQotICAgIGlmIChjaGFuZ2VNYXNrICYgKENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdl
IHwgU2l6ZUNoYW5nZSkpCi0gICAgICAgIG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZURpcnR5ID0g
dHJ1ZTsKLQotICAgIGlmIChjaGFuZ2VNYXNrICYgKENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlIHwg
UHJlc2VydmVzM0RDaGFuZ2UgfCBUcmFuc2Zvcm1DaGFuZ2UgfCBBbmNob3JQb2ludENoYW5nZSB8
IFNpemVDaGFuZ2UgfCBDb250ZW50c1JlY3RDaGFuZ2UgfCBCYWNrZmFjZVZpc2liaWxpdHlDaGFu
Z2UgfCBQb3NpdGlvbkNoYW5nZSB8IE1hc2tMYXllckNoYW5nZSB8IERyYXdzQ29udGVudENoYW5n
ZSB8IENvbnRlbnRDaGFuZ2UgfCBSZXBsaWNhTGF5ZXJDaGFuZ2UpKSAgICB7Ci0gICAgICAgIC8v
IER1ZSB0byB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgd2F5IFdlYkNvcmUgaGFuZGxlcyB0
cmFuc2Zvcm1zIGFuZCB0aGUgd2F5IFF0IGhhbmRsZXMgdHJhbnNmb3JtcywKLSAgICAgICAgLy8g
YWxsIHRoZXNlIGVsZW1lbnRzIGFmZmVjdCB0aGUgdHJhbnNmb3JtcyBvZiBhbGwgdGhlIGRlc2Nl
bmRhbnRzLgotICAgICAgICBpbnZhbGlkYXRlVHJhbnNmb3JtKCk7Ci0gICAgfQotCi0gICAgaWYg
KGNoYW5nZU1hc2sgJiBEaXNwbGF5Q2hhbmdlKQotICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1
ZTsKLQorICAgIGlmICh0ZXh0dXJlTWFwcGVyICYmIHRleHR1cmVNYXBwZXItPmFsbG93UGFydGlh
bFVwZGF0ZXMoKSkKKyAgICAgICAgbV9zdGF0ZS5yZXBhaW50UmVjdC51bml0ZShtX3N0YXRlLnJv
b3RWaXNpYmxlUmVjdCk7CiAgICAgbV9zdGF0ZS5tYXNrTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJO
b2RlKGdyYXBoaWNzTGF5ZXItPm1hc2tMYXllcigpKTsKICAgICBtX3N0YXRlLnJlcGxpY2FMYXll
ciA9IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhpY3NMYXllci0+cmVwbGljYUxheWVyKCkpOwog
ICAgIG1fc3RhdGUucG9zID0gZ3JhcGhpY3NMYXllci0+cG9zaXRpb24oKTsKICAgICBtX3N0YXRl
LmFuY2hvclBvaW50ID0gZ3JhcGhpY3NMYXllci0+YW5jaG9yUG9pbnQoKTsKICAgICBtX3N0YXRl
LnNpemUgPSBncmFwaGljc0xheWVyLT5zaXplKCk7Ci0gICAgbV9zdGF0ZS50cmFuc2Zvcm0gPSBn
cmFwaGljc0xheWVyLT50cmFuc2Zvcm0oKTsKICAgICBtX3N0YXRlLmNvbnRlbnRzUmVjdCA9IGdy
YXBoaWNzTGF5ZXItPmNvbnRlbnRzUmVjdCgpOwotICAgIG1fc3RhdGUub3BhY2l0eSA9IGdyYXBo
aWNzTGF5ZXItPm9wYWNpdHkoKTsKKyAgICBtX3N0YXRlLnRyYW5zZm9ybSA9IGdyYXBoaWNzTGF5
ZXItPnRyYW5zZm9ybSgpOwogICAgIG1fc3RhdGUuY29udGVudHNSZWN0ID0gZ3JhcGhpY3NMYXll
ci0+Y29udGVudHNSZWN0KCk7CiAgICAgbV9zdGF0ZS5wcmVzZXJ2ZXMzRCA9IGdyYXBoaWNzTGF5
ZXItPnByZXNlcnZlczNEKCk7CiAgICAgbV9zdGF0ZS5tYXNrc1RvQm91bmRzID0gZ3JhcGhpY3NM
YXllci0+bWFza3NUb0JvdW5kcygpOwpAQCAtODMyLDIyICs2NTEsMzEgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyKiBncmEKICAgICBtX3N0YXRlLmNvbnRlbnRzT3BhcXVlID0gZ3JhcGhpY3NMYXllci0+
Y29udGVudHNPcGFxdWUoKTsKICAgICBtX3N0YXRlLmJhY2tmYWNlVmlzaWJpbGl0eSA9IGdyYXBo
aWNzTGF5ZXItPmJhY2tmYWNlVmlzaWJpbGl0eSgpOwogICAgIG1fc3RhdGUuY2hpbGRyZW5UcmFu
c2Zvcm0gPSBncmFwaGljc0xheWVyLT5jaGlsZHJlblRyYW5zZm9ybSgpOworICAgIG1fc3RhdGUu
b3BhY2l0eSA9IGdyYXBoaWNzTGF5ZXItPm9wYWNpdHkoKTsKICAgICBtX2N1cnJlbnRDb250ZW50
LmNvbnRlbnRUeXBlID0gcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGU7CiAgICAgbV9jdXJyZW50
Q29udGVudC5pbWFnZSA9IHBlbmRpbmdDb250ZW50LmltYWdlOwogICAgIG1fY3VycmVudENvbnRl
bnQubWVkaWEgPSBwZW5kaW5nQ29udGVudC5tZWRpYTsKLSAgICBtX2N1cnJlbnRDb250ZW50LmJh
Y2tncm91bmRDb2xvciA9IHBlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xvcjsKICAgICBtX2N1
cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA9IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5
IHx8IHBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheTsKLSAgICBtX2N1cnJlbnRDb250ZW50Lm5l
ZWRzRGlzcGxheVJlY3QudW5pdGUocGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7Cisg
ICAgaWYgKCFtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSkKKyAgICAgICAgbV9jdXJyZW50
Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0LnVuaXRlKHBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxh
eVJlY3QpOwogCisgICAgbV9vcGFjaXR5ID0gbV9zdGF0ZS5vcGFjaXR5OworICAgIG1fdHJhbnNm
b3Jtcy5iYXNlID0gbV9zdGF0ZS50cmFuc2Zvcm07CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJuYWwoR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIqIGdyYXBoaWNzTGF5ZXIsIGJvb2wgcmVjdXJzZSwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1h
cHBlcikKK2Jvb2wgVGV4dHVyZU1hcHBlck5vZGU6OmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5p
bmdBbmltYXRpb25zKCkgY29uc3QKIHsKLSAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoZ3Jh
cGhpY3NMYXllciwgdGV4dHVyZU1hcHBlcik7CisgICAgcmV0dXJuIGZhbHNlOworfQogCi0gICAg
Z3JhcGhpY3NMYXllci0+ZGlkU3luY2hyb25pemUoKTsKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6
OnN5bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJuYWwoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIq
IGdyYXBoaWNzTGF5ZXIsIGJvb2wgdHJhdmVyc2VEZXNjZW5kYW50cywgVGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hcHBlcikKK3sKKyAgICBpZiAoZ3JhcGhpY3NMYXllcikgeworICAgICAgICBzeW5j
Q29tcG9zaXRpbmdTdGF0ZVNlbGYoZ3JhcGhpY3NMYXllciwgdGV4dHVyZU1hcHBlcik7CisgICAg
ICAgIGdyYXBoaWNzTGF5ZXItPmRpZFN5bmNocm9uaXplKCk7CisgICAgfQogCi0gICAgaWYgKG1f
c3RhdGUubWFza0xheWVyKSB7CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIgJiYgbV9zdGF0ZS5tYXNr
TGF5ZXIpIHsKICAgICAgICAgbV9zdGF0ZS5tYXNrTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRl
SW50ZXJuYWwodG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihncmFwaGljc0xheWVyLT5tYXNr
TGF5ZXIoKSksIGZhbHNlLCB0ZXh0dXJlTWFwcGVyKTsKICAgICAgICAgaWYgKG1fc3RhdGUubWFz
a0xheWVyLT5tX3NpemUuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9zdGF0ZS5tYXNrTGF5ZXIt
Pm1fc2l6ZSA9IG1fc2l6ZTsKQEAgLTg1NiwyMiArNjg0LDQyIEBAIHZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJuYWwoR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIqCiAgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyKQogICAgICAgICBtX3N0YXRlLnJl
cGxpY2FMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbnRlcm5hbCh0b0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyKGdyYXBoaWNzTGF5ZXItPnJlcGxpY2FMYXllcigpKSwgZmFsc2UsIHRleHR1
cmVNYXBwZXIpOwogCi0gICAgaWYgKG1fc3RhdGUuZGlydHkpCi0gICAgICAgIHVwbG9hZFRleHR1
cmVGcm9tQ29udGVudCh0ZXh0dXJlTWFwcGVyLCBtX3N0YXRlLnZpc2libGVSZWN0LCBncmFwaGlj
c0xheWVyKTsKKyAgICBjb21wdXRlQWxsVHJhbnNmb3JtcygpOwogCi0gICAgbV9jdXJyZW50Q29u
dGVudC5uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOwotICAgIG1fY3VycmVudENvbnRlbnQu
bmVlZHNEaXNwbGF5ID0gZmFsc2U7CisgICAgYm9vbCB2aXNpYmxlUmVjdERpcnR5ID0gdHJ1ZTsK
KyAgICBib29sIGFsbG93UGFydGlhbFVwZGF0ZXMgPSB0ZXh0dXJlTWFwcGVyICYmIHRleHR1cmVN
YXBwZXItPmFsbG93UGFydGlhbFVwZGF0ZXMoKTsKKyAgICBpZiAodmlzaWJsZVJlY3REaXJ0eSAm
JiBhbGxvd1BhcnRpYWxVcGRhdGVzKQorICAgICAgICBtX3N0YXRlLnJlcGFpbnRSZWN0LnVuaXRl
KG1fdHJhbnNmb3Jtcy5ib3VuZGluZ1JlY3RGcm9tUm9vdCk7CisgICAgY29tcHV0ZUJvdW5kaW5n
UmVjdEZyb21Sb290SWZOZWVkZWQoKTsKKyAgICBjb21wdXRlUGVyc3BlY3RpdmVUcmFuc2Zvcm1J
Zk5lZWRlZCgpOworICAgIGNvbXB1dGVUaWxlcygpOworICAgIGNvbXB1dGVPdmVybGFwc0lmTmVl
ZGVkKCk7CisgICAgaWYgKHZpc2libGVSZWN0RGlydHkgJiYgYWxsb3dQYXJ0aWFsVXBkYXRlcykK
KyAgICAgICAgbV9zdGF0ZS5yZXBhaW50UmVjdC51bml0ZShtX3RyYW5zZm9ybXMuYm91bmRpbmdS
ZWN0RnJvbVJvb3QpOworCisgICAgaWYgKGdyYXBoaWNzTGF5ZXIpCisgICAgICAgIHJlbmRlckNv
bnRlbnQodGV4dHVyZU1hcHBlciwgZ3JhcGhpY3NMYXllcik7CiAKLSAgICBpZiAoIXJlY3Vyc2Up
CisgICAgaWYgKCF0cmF2ZXJzZURlc2NlbmRhbnRzKQogICAgICAgICByZXR1cm47CiAKLSAgICBW
ZWN0b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuID0gZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4o
KTsKLSAgICBmb3IgKGludCBpID0gY2hpbGRyZW4uc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsK
LSAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGNo
aWxkcmVuW2ldKTsKLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIG5vZGUtPnN5bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJuYWwodG9HcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcihjaGlsZHJlbltpXSksIHRydWUsIHRleHR1cmVNYXBwZXIpOworICAgIGlm
IChncmFwaGljc0xheWVyKSB7CisgICAgICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRy
ZW4gPSBncmFwaGljc0xheWVyLT5jaGlsZHJlbigpOworICAgICAgICBmb3IgKGludCBpID0gY2hp
bGRyZW4uc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIFRleHR1cmVNYXBw
ZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShjaGlsZHJlbltpXSk7CisgICAgICAg
ICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBu
b2RlLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUludGVybmFsKHRvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIoY2hpbGRyZW5baV0pLCB0cnVlLCB0ZXh0dXJlTWFwcGVyKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGkgPSBtX2NoaWxkcmVuLnNpemUoKSAtIDE7IGkg
Pj0gMDsgLS1pKQorICAgICAgICAgICAgbV9jaGlsZHJlbltpXS0+c3luY0NvbXBvc2l0aW5nU3Rh
dGVJbnRlcm5hbCgwLCB0cnVlLCB0ZXh0dXJlTWFwcGVyKTsKICAgICB9Ci19CiAKKyAgICBpZiAo
bV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKKyAgICAgICAgc29ydEJ5Wk9yZGVyKG1fY2hpbGRyZW4sIDAs
IG1fY2hpbGRyZW4uc2l6ZSgpKTsKKworfQogfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2Rl
LmgKaW5kZXggYzVkZWNjMS4uNzExMjUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKQEAgLTI1
LDcgKzI1LDYgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiSW1hZ2Uu
aCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybU9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKQEAg
LTM2LDIyICszNSwyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyOwogY2xhc3MgVGV4dHVyZU1hcHBlck5vZGU7Ci1jbGFzcyBUZXh0
dXJlTWFwcGVyQ2FjaGU7CiBjbGFzcyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjsKK2NsYXNz
IFRleHR1cmVNYXBwZXJTdXJmYWNlTWFuYWdlcjsKIAotc3RydWN0IFRleG1hcFBhaW50T3B0aW9u
cyB7CitjbGFzcyBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zIHsKK3B1YmxpYzoKICAgICBCaXRt
YXBUZXh0dXJlKiBzdXJmYWNlOwogICAgIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXI7Ci0g
ICAgVGV4dHVyZU1hcHBlck5vZGUqIHJvb3RMYXllcjsKKyAgICBUZXh0dXJlTWFwcGVyU3VyZmFj
ZU1hbmFnZXIqIHN1cmZhY2VNYW5hZ2VyOworCiAgICAgZmxvYXQgb3BhY2l0eTsKLSAgICBJbnRS
ZWN0IHNjaXNzb3JSZWN0OwotICAgIEludFJlY3QgdmlzaWJsZVJlY3Q7CiAgICAgYm9vbCBpc1N1
cmZhY2U7Ci0gICAgVGV4dHVyZU1hcHBlckNhY2hlKiBjYWNoZTsKKyAgICBUZXh0dXJlTWFwcGVy
UGFpbnRPcHRpb25zKCkgOiBzdXJmYWNlKDApLCB0ZXh0dXJlTWFwcGVyKDApLCBvcGFjaXR5KDEu
MCksIGlzU3VyZmFjZShmYWxzZSkgeyB9CiB9OwogCi1jbGFzcyBUZXh0dXJlTWFwcGVyTm9kZSA6
IHB1YmxpYyBUZXh0dXJlTWFwcGVyQ29udGVudExheWVyIHsKK2NsYXNzIFRleHR1cmVNYXBwZXJO
b2RlIHsKIAogcHVibGljOgogICAgIC8vIFRoaXMgc2V0IG9mIGZsYWdzIGhlbHAgdXMgZGVmZXIg
d2hpY2ggcHJvcGVydGllcyBvZiB0aGUgbGF5ZXIgaGF2ZSBiZWVuCkBAIC04OCwxNCArODgsMTMg
QEAgcHVibGljOgogICAgIC8vIFRoZSBjb21wb3NpdG9yIGxldHMgdXMgc3BlY2lhbC1jYXNlIGlt
YWdlcyBhbmQgY29sb3JzLCBzbyB3ZSB0cnkgdG8gZG8gc28uCiAgICAgZW51bSBDb250ZW50VHlw
ZSB7IEhUTUxDb250ZW50VHlwZSwgRGlyZWN0SW1hZ2VDb250ZW50VHlwZSwgQ29sb3JDb250ZW50
VHlwZSwgTWVkaWFDb250ZW50VHlwZSwgQ2FudmFzM0RDb250ZW50VHlwZX07CiAgICAgc3RydWN0
IENvbnRlbnREYXRhIHsKLSAgICAgICAgSW50UmVjdCBuZWVkc0Rpc3BsYXlSZWN0OworICAgICAg
ICBGbG9hdFJlY3QgbmVlZHNEaXNwbGF5UmVjdDsKICAgICAgICAgYm9vbCBuZWVkc0Rpc3BsYXk7
CiAgICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsKIAogICAgICAgICBDb250ZW50VHlwZSBj
b250ZW50VHlwZTsKICAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZTsKLSAgICAgICAgVGV4dHVy
ZU1hcHBlck1lZGlhTGF5ZXIqIG1lZGlhOwotCisgICAgICAgIGNvbnN0IFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyKiBtZWRpYTsKICAgICAgICAgQ29udGVudERhdGEoKQogICAgICAgICAgICAg
OiBuZWVkc0Rpc3BsYXkoZmFsc2UpCiAgICAgICAgICAgICAsIGNvbnRlbnRUeXBlKEhUTUxDb250
ZW50VHlwZSkKQEAgLTEwNSwxMDAgKzEwNCwxMDAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAg
fTsKIAorICAgIFRleHR1cmVNYXBwZXJOb2RlKCkKKyAgICAgICAgOiBtX3BhcmVudCgwKSwgbV9l
ZmZlY3RUYXJnZXQoMCksIG1fb3BhY2l0eSgxLjApLCBtX3N1cmZhY2VNYW5hZ2VyKDApLCBtX3Rl
eHR1cmVNYXBwZXIoMCkgeyB9CiAKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSgpOwogICAgIHZpcnR1
YWwgflRleHR1cmVNYXBwZXJOb2RlKCk7CiAKLSAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRl
KEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiwgYm9vbCByZWN1cnNpdmUpOworICAgIHZvaWQg
c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqLCBib29sIHRy
YXZlcnNlRGVzZWNuZGFudHMpOworICAgIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIqLCBUZXh0dXJlTWFwcGVyKiwgYm9vbCB0cmF2ZXJzZURlc2Vj
bmRhbnRzKTsKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKG1fc2l6
ZS53aWR0aCgpICsgLjUsIG1fc2l6ZS5oZWlnaHQoKSArIC41KTsgfQorICAgIHZvaWQgc2V0VHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdm9pZCBzZXRPcGFjaXR5
KGZsb2F0IHZhbHVlKSB7IG1fb3BhY2l0eSA9IHZhbHVlOyB9CisgICAgdm9pZCBzZXRWaXNpYmxl
UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBzZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVN
YXBwZXIqIHRleG1hcCkgeyBtX3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7IH0KKyAgICBib29sIGRl
c2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkgY29uc3Q7CisKKyAgICB2b2lk
IHBhaW50KCk7CisKKyAgICBib29sIG5lZWRzVG9Db21wdXRlQm91bmRpbmdSZWN0KCkgY29uc3Q7
CiAKLXByb3RlY3RlZDoKLSAgICAvLyBSZWltcHMgZnJvbSBUZXh0dXJlTWFwcGVyQ29udGVudExh
eWVyCi0gICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0UGxhdGZvcm1MYXllckNsaWVudChUZXh0dXJlTWFwcGVyTGF5
ZXJDbGllbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoVGV4dHVyZU1hcHBlciosIGNvbnN0
IFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXI6OlBhaW50T3B0aW9ucyYpOworICAgIGNvbnN0IFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBtZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVu
dENvbnRlbnQubWVkaWE7IH0KIAogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyTm9kZSogcm9v
dExheWVyKCk7Ci0gICAgdm9pZCBjbGVhckRpcmVjdEltYWdlKCk7Ci0gICAgdm9pZCBjb21wdXRl
VHJhbnNmb3JtYXRpb25zKCk7Ci0gICAgSW50U2l6ZSBuZWFyZXN0U3VyZmFjZVNpemUoKSBjb25z
dDsKLSAgICB2b2lkIGNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtKCk7Ci0gICAgdm9pZCBjb21wdXRl
TGF5ZXJUeXBlKCk7Ci0gICAgdm9pZCBjb21wdXRlTG9jYWxUcmFuc2Zvcm0oKTsKLSAgICB2b2lk
IGZsYXR0ZW5UbzJEU3BhY2VJZk5lY2Vzc2FyeSgpOwotICAgIHZvaWQgaW5pdGlhbGl6ZVRleHR1
cmVNYXBwZXIoVGV4dHVyZU1hcHBlciopOwotICAgIHZvaWQgaW52YWxpZGF0ZVRyYW5zZm9ybSgp
OworICAgIHZvaWQgY29tcHV0ZUFsbFRyYW5zZm9ybXMoKTsKKyAgICB2b2lkIGNvbXB1dGVWaXNp
YmxlUmVjdElmTmVlZGVkKCk7CisgICAgdm9pZCBjb21wdXRlUGVyc3BlY3RpdmVUcmFuc2Zvcm1J
Zk5lZWRlZCgpOworICAgIHZvaWQgY29tcHV0ZVJlcGxpY2FUcmFuc2Zvcm1JZk5lZWRlZCgpOwor
ICAgIHZvaWQgY29tcHV0ZU92ZXJsYXBzSWZOZWVkZWQoKTsKKyAgICB2b2lkIGNvbXB1dGVMb2Nh
bFRyYW5zZm9ybUlmTmVlZGVkKCk7CisgICAgdm9pZCBjb21wdXRlQm91bmRpbmdSZWN0RnJvbVJv
b3RJZk5lZWRlZCgpOworICAgIHZvaWQgY29tcHV0ZVRpbGVzKCk7CisgICAgaW50IGNvdW50RGVz
Y2VuZGFudHNXaXRoQ29udGVudCgpIGNvbnN0OworICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0Rm9y
VGlsZVJlY3QoY29uc3QgRmxvYXRSZWN0JiB0b3RhbFRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3QpIGNvbnN0OworICAgIHZvaWQgaW52YWxpZGF0ZVZpZXdwb3J0KGNvbnN0IEZs
b2F0UmVjdCYpOwogICAgIHZvaWQgbm90aWZ5Q2hhbmdlKENoYW5nZU1hc2spOwotICAgIHZvaWQg
c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVj
dCk7Ci0gICAgdm9pZCBwZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCk7Ci0gICAgdm9pZCBzeW5j
Q29tcG9zaXRpbmdTdGF0ZUludGVybmFsKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiwgYm9v
bCByZWN1cnNpdmUsIFRleHR1cmVNYXBwZXIqKTsKKyAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0
YXRlSW50ZXJuYWwoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqLCBib29sIHRyYXZlcnNlRGVz
ZWNuZGFudHMsIFRleHR1cmVNYXBwZXIqKTsKICAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRl
U2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgVGV4dHVyZU1h
cHBlciogdGV4dHVyZU1hcHBlcik7Ci0gICAgVGV4dHVyZU1hcHBlckNhY2hlKiBjYWNoZSgpOwot
Ci0gICAgdm9pZCBwYWludFJlY3Vyc2l2ZShUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9ucyk7Ci0g
ICAgYm9vbCBwYWludFJlcGxpY2EoY29uc3QgVGV4bWFwUGFpbnRPcHRpb25zJiBvcHRpb25zKTsK
LSAgICB2b2lkIHBhaW50U3VyZmFjZShjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlvbnMp
OwotICAgIHZvaWQgcGFpbnRTZWxmKGNvbnN0IFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9ucyk7
Ci0gICAgdm9pZCBwYWludFNlbGZBbmRDaGlsZHJlbihjb25zdCBUZXhtYXBQYWludE9wdGlvbnMm
IG9wdGlvbnMsIFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9uc0ZvckRlc2NlbmRhbnRzKTsKLSAg
ICB2b2lkIHVwbG9hZFRleHR1cmVGcm9tQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFw
cGVyLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgR3JhcGhpY3NMYXllciogbGF5ZXIpOwog
Ci0gICAgaW50IGNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpIGNvbnN0OwotICAgIGJvb2wg
aGFzU3VyZmFjZURlc2NlbmRhbnRzKCkgY29uc3Q7CisgICAgc3RhdGljIGludCBjb21wYXJlR3Jh
cGhpY3NMYXllcnNaVmFsdWUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYik7CisgICAgc3Rh
dGljIHZvaWQgc29ydEJ5Wk9yZGVyKFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSogPiYgYXJyYXks
IGludCBmaXJzdCwgaW50IGxhc3QpOwogCi0gICAgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBl
cigpOworICAgIEJpdG1hcFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RpbGVzLmlzRW1w
dHkoKSA/IDAgOiBtX3RpbGVzWzBdLnRleHR1cmUuZ2V0KCk7IH0KIAorICAgIHZvaWQgcGFpbnRS
ZWN1cnNpdmUoVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyk7CisgICAgYm9vbCBwYWludFJlZmxl
Y3Rpb24oY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYsIEJpdG1hcFRleHR1cmUqIHN1
cmZhY2UpOworICAgIHZvaWQgcGFpbnRTZWxmKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlv
bnMmKTsKKyAgICB2b2lkIHBhaW50U2VsZkFuZENoaWxkcmVuKGNvbnN0IFRleHR1cmVNYXBwZXJQ
YWludE9wdGlvbnMmLCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvcHRpb25zRm9yRGVzY2Vu
ZGFudHMpOworICAgIHZvaWQgcmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiwgR3JhcGhpY3NM
YXllciopOwogCi0gICAgc3RhdGljIFRleHR1cmVNYXBwZXJOb2RlKiB0b1RleHR1cmVNYXBwZXJO
b2RlKEdyYXBoaWNzTGF5ZXIqKTsKLSAgICBzdGF0aWMgaW50IGNvbXBhcmVHcmFwaGljc0xheWVy
c1pWYWx1ZShjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKTsKLSAgICBzdGF0aWMgdm9pZCBz
b3J0QnlaT3JkZXIoVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKiA+JiBhcnJheSwgaW50IGZpcnN0
LCBpbnQgbGFzdCk7CiAgICAgc3RydWN0IFRyYW5zZm9ybURhdGEgewotICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBiYXNlLCB0YXJnZXQsIHJlcGxpY2EsIGZvckRlc2NlbmRhbnRzLCBwZXJz
cGVjdGl2ZSwgbG9jYWw7Ci0gICAgICAgIEludFJlY3QgdGFyZ2V0Qm91bmRpbmdSZWN0OworICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0YXJnZXQ7CisgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHJlcGxpY2E7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGZvckRlc2NlbmRh
bnRzOworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbDsKKyAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggYmFzZTsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGVyc3Bl
Y3RpdmU7CisgICAgICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ1JlY3Q7CiAgICAgICAgIGZs
b2F0IGNlbnRlclo7Ci0gICAgICAgIGJvb2wgZGlydHksIGxvY2FsRGlydHksIHBlcnNwZWN0aXZl
RGlydHk7Ci0gICAgICAgIEludFJlY3QgYm91bmRpbmdSZWN0RnJvbVJvb3Q7Ci0gICAgICAgIFRy
YW5zZm9ybURhdGEoKSA6IGRpcnR5KHRydWUpLCBsb2NhbERpcnR5KHRydWUpLCBwZXJzcGVjdGl2
ZURpcnR5KHRydWUpIHsgfQorICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0RnJvbVJvb3Q7
CisgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3RGcm9tUm9vdEZvckRlc2NlbmRhbnRzOwor
ICAgICAgICBUcmFuc2Zvcm1EYXRhKCkgeyB9CiAgICAgfTsKIAogICAgIFRyYW5zZm9ybURhdGEg
bV90cmFuc2Zvcm1zOwogCi0gICAgZW51bSBMYXllclR5cGUgewotICAgICAgICBEZWZhdWx0TGF5
ZXIsCi0gICAgICAgIFJvb3RMYXllciwKLSAgICAgICAgU2Npc3NvckxheWVyLAotICAgICAgICBD
bGlwTGF5ZXIsCi0gICAgICAgIFRyYW5zcGFyZW5jeUxheWVyCi0gICAgfTsKLQotICAgIExheWVy
VHlwZSBtX2xheWVyVHlwZTsKLQotICAgIGlubGluZSBJbnRSZWN0IHRhcmdldFJlY3QoKSBjb25z
dAorICAgIGlubGluZSBGbG9hdFJlY3QgdGFyZ2V0UmVjdCgpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUg
PyBlbnRpcmVSZWN0KCkgOiBtX3N0YXRlLmNvbnRlbnRzUmVjdDsKICAgICB9CiAKLSAgICBpbmxp
bmUgSW50UmVjdCBlbnRpcmVSZWN0KCkgY29uc3QKKyAgICBpbmxpbmUgRmxvYXRSZWN0IGVudGly
ZVJlY3QoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIEludFJlY3QoMCwgMCwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoMCwg
MCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CiAgICAgfQogCi0gICAgaW5saW5l
IEludFJlY3QgcmVwbGljYVJlY3QoKSBjb25zdAorICAgIEZsb2F0U2l6ZSBjb250ZW50U2l6ZSgp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5
TGF5ZXIgPyBJbnRSZWN0KDAsIDAsIG1fbmVhcmVzdFN1cmZhY2VTaXplLndpZHRoKCksIG1fbmVh
cmVzdFN1cmZhY2VTaXplLmhlaWdodCgpKSA6IGVudGlyZVJlY3QoKTsKKyAgICAgICAgcmV0dXJu
IG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSAm
JiBtX2N1cnJlbnRDb250ZW50LmltYWdlID8gbV9jdXJyZW50Q29udGVudC5pbWFnZS0+c2l6ZSgp
IDogbV9zaXplOwogICAgIH0KKyAgICBzdHJ1Y3QgVGlsZSB7CisgICAgICAgIEZsb2F0UmVjdCBy
ZWN0OworICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZTsKKyAgICAgICAgYm9v
bCBuZWVkc1Jlc2V0OworICAgIH07CiAKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbV90ZXh0
dXJlOwotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtX3N1cmZhY2UsIG1fcmVwbGljYVN1cmZh
Y2U7CisgICAgVmVjdG9yPFRpbGU+IG1fdGlsZXM7CiAKICAgICBDb250ZW50RGF0YSBtX2N1cnJl
bnRDb250ZW50OwogCiAgICAgVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKj4gbV9jaGlsZHJlbjsK
ICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbV9wYXJlbnQ7CiAgICAgVGV4dHVyZU1hcHBlck5vZGUq
IG1fZWZmZWN0VGFyZ2V0OwotICAgIEludFNpemUgbV9zaXplLCBtX25lYXJlc3RTdXJmYWNlU2l6
ZTsKKyAgICBGbG9hdFNpemUgbV9zaXplOworICAgIGZsb2F0IG1fb3BhY2l0eTsKICAgICBTdHJp
bmcgbV9uYW1lOwotICAgIFRleHR1cmVNYXBwZXJMYXllckNsaWVudCogbV9wbGF0Zm9ybUNsaWVu
dDsKIAogICAgIHN0cnVjdCBTdGF0ZSB7CiAgICAgICAgIEZsb2F0UG9pbnQgcG9zOwpAQCAtMjA2
LDI5ICsyMDUsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgRmxvYXRTaXplIHNpemU7CiAgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKICAgICAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggY2hpbGRyZW5UcmFuc2Zvcm07Ci0gICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsK
LSAgICAgICAgQ29sb3IgY3VycmVudENvbG9yOwotICAgICAgICBHcmFwaGljc0xheWVyOjpDb21w
b3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gZ2VvT3JpZW50YXRpb247Ci0gICAgICAgIEdy
YXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBjb250ZW50c09y
aWVudGF0aW9uOwogICAgICAgICBmbG9hdCBvcGFjaXR5OwotICAgICAgICBJbnRSZWN0IGNvbnRl
bnRzUmVjdDsKKyAgICAgICAgRmxvYXRSZWN0IGNvbnRlbnRzUmVjdDsKICAgICAgICAgaW50IGRl
c2NlbmRhbnRzV2l0aENvbnRlbnQ7CiAgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBtYXNrTGF5
ZXI7CiAgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiByZXBsaWNhTGF5ZXI7Ci0gICAgICAgIGJv
b2wgcHJlc2VydmVzM0Q7Ci0gICAgICAgIGJvb2wgbWFza3NUb0JvdW5kczsKLSAgICAgICAgYm9v
bCBkcmF3c0NvbnRlbnQ7Ci0gICAgICAgIGJvb2wgY29udGVudHNPcGFxdWU7Ci0gICAgICAgIGJv
b2wgYmFja2ZhY2VWaXNpYmlsaXR5OwotICAgICAgICBib29sIHZpc2libGU7Ci0gICAgICAgIGJv
b2wgZGlydHk7Ci0gICAgICAgIGJvb2wgdGlsZWQ7Ci0gICAgICAgIGJvb2wgaGFzU3VyZmFjZURl
c2NlbmRhbnRzOwotICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0OworICAgICAgICBib29sIHBy
ZXNlcnZlczNEIDogMTsKKyAgICAgICAgYm9vbCBtYXNrc1RvQm91bmRzIDogMTsKKyAgICAgICAg
Ym9vbCBkcmF3c0NvbnRlbnQgOiAxOworICAgICAgICBib29sIGNvbnRlbnRzT3BhcXVlIDogMTsK
KyAgICAgICAgYm9vbCBiYWNrZmFjZVZpc2liaWxpdHkgOiAxOworICAgICAgICBib29sIHZpc2li
bGUgOiAxOworICAgICAgICBib29sIG5lZWRzUmVzZXQ6IDE7CisgICAgICAgIGJvb2wgbWlnaHRI
YXZlT3ZlcmxhcHMgOiAxOworICAgICAgICBib29sIG5lZWRzUmVwYWludDsKKyAgICAgICAgRmxv
YXRSZWN0IHZpc2libGVSZWN0OworICAgICAgICBGbG9hdFJlY3Qgcm9vdFZpc2libGVSZWN0Owor
ICAgICAgICBmbG9hdCBjb250ZW50U2NhbGU7CisgICAgICAgIEZsb2F0UmVjdCByZXBhaW50UmVj
dDsKIAogICAgICAgICBTdGF0ZSgpCiAgICAgICAgICAgICA6IG9wYWNpdHkoMS5mKQotICAgICAg
ICAgICAgLCBkZXNjZW5kYW50c1dpdGhDb250ZW50KDApCiAgICAgICAgICAgICAsIG1hc2tMYXll
cigwKQogICAgICAgICAgICAgLCByZXBsaWNhTGF5ZXIoMCkKICAgICAgICAgICAgICwgcHJlc2Vy
dmVzM0QoZmFsc2UpCkBAIC0yMzcsMTYgKzIzNCwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
LCBjb250ZW50c09wYXF1ZShmYWxzZSkKICAgICAgICAgICAgICwgYmFja2ZhY2VWaXNpYmlsaXR5
KGZhbHNlKQogICAgICAgICAgICAgLCB2aXNpYmxlKHRydWUpCi0gICAgICAgICAgICAsIGRpcnR5
KHRydWUpCi0gICAgICAgICAgICAsIHRpbGVkKGZhbHNlKQotICAgICAgICAgICAgLCBoYXNTdXJm
YWNlRGVzY2VuZGFudHMoZmFsc2UpCisgICAgICAgICAgICAsIG5lZWRzUmVzZXQoZmFsc2UpCisg
ICAgICAgICAgICAsIG1pZ2h0SGF2ZU92ZXJsYXBzKGZhbHNlKQorICAgICAgICAgICAgLCBjb250
ZW50U2NhbGUoMS4wZikKICAgICAgICAgewogICAgICAgICB9CiAgICAgfTsKIAogICAgIFN0YXRl
IG1fc3RhdGU7Ci0gICAgVGV4dHVyZU1hcHBlckNhY2hlKiBtX2NhY2hlOworICAgIFRleHR1cmVN
YXBwZXJTdXJmYWNlTWFuYWdlciogbV9zdXJmYWNlTWFuYWdlcjsKKyAgICBUZXh0dXJlTWFwcGVy
KiBtX3RleHR1cmVNYXBwZXI7CiB9OwogCisKK1RleHR1cmVNYXBwZXJOb2RlKiB0b1RleHR1cmVN
YXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXIqKTsKKwogfQogI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJO
b2RlX2gKLS0gCjEuNi42LnJjMC42My5nNjZhYmMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92902</attachid>
            <date>2011-05-09 18:20:21 -0700</date>
            <delta_ts>2011-05-10 02:28:33 -0700</delta_ts>
            <desc>Patch: build fix for plugins</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>1052</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMzlkZmU4Li4zY2IyZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTEtMDUtMDkgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVGV4
bWFwXVtRdF0gVXBzdHJlYW0gdGV4dHVyZS1tYXBwZXIgY2hhbmdlcyBmcm9tIFF0J3MgV2ViS2l0
MiBicmFuY2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTYwNDM5CisKKyAgICAgICAgRml4IHBsdWdpbiBidWlsZCBvbiBMaW51eC4KKworICAgICAgICBO
byBuZXcgdGVzdHMuIEJ1aWxkIGZpeC4KKworICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5o
OgorCiAyMDExLTA1LTA3ICBOb2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5WaWV3LmgKaW5kZXggNDlhNGI2MS4uYTVjNGI5MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5WaWV3LmgKQEAgLTU4LDYgKzU4LDEwIEBAIHR5cGVkZWYgUGxhdGZvcm1XaWRnZXQg
UGxhdGZvcm1QbHVnaW5XaWRnZXQ7CiAjZW5kaWYKICNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQor
I2lmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllci5oIgorI2VuZGlmCisKICNpbmNsdWRlIDxRR3JhcGhpY3NJdGVtPgogI2luY2x1ZGUgPFFJ
bWFnZT4KIFFUX0JFR0lOX05BTUVTUEFDRQo=
</data>
<flag name="review"
          id="85949"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92911</attachid>
            <date>2011-05-09 20:01:57 -0700</date>
            <delta_ts>2011-05-10 02:33:42 -0700</delta_ts>
            <desc>Patch: add accelerated animation support to TextureMapper</desc>
            <filename>patch-animations.diff</filename>
            <type>text/plain</type>
            <size>25390</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0MjU2ZjFmLi4xYjYxNDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUg
QEAKKzIwMTEtMDUtMDkgIE5vYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtUZXht
YXBdW1F0XSBVcHN0cmVhbSB0ZXh0dXJlLW1hcHBlciBjaGFuZ2VzIGZyb20gUXQncyBXZWJLaXQy
IGJyYW5jaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjA0MzkKKworICAgICAgICBJbXBsZW1lbnQgYW5pbWF0aW9ucyBpbnNpZGUgVGV4dHVyZU1hcHBl
ciwgc28gdGhhdCB3ZSBjYW4gaW50ZXJwb2xhdGUgcmlnaHQgYmVmb3JlCisgICAgICAgIHBhaW50
aW5nLiBUaGlzIGltcHJvdmVzIGFuaW1hdGlvbiBzbW9vdGhuZXNzIG9uIFdlYktpdDEsIGFuZCBp
cyBuZWNlc3NhcnkgZm9yIFdlYktpdDIuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUZXN0cyBp
biBMYXlvdXRUZXN0cy9jb21wb3NpdGluZyBjb3ZlciB0aGlzLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6cmVtb3ZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphbmltYXRpb25TdGFydGVkVGltZXJGaXJlZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2Rl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRp
bmdTdGF0ZVNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnN5bmND
b21wb3NpdGluZ1N0YXRlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ck5vZGU6OmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6Om5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyTm9kZTo6YXBwbHlPcGFjaXR5QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OnNvbHZlRXBzaWxvbik6CisgICAgICAgIChXZWJDb3JlOjpzb2x2ZUN1YmljQmV6aWVyRnVu
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6c29sdmVTdGVwc0Z1bmN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OmFwcGx5VGltaW5nRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlck5vZGU6OmFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjphcHBseUFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJOb2RlOjphcHBseUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6aGFzUnVubmluZ09wYWNpdHlBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6Omhhc1J1bm5pbmdUcmFuc2Zvcm1BbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlTGFzdE1vZGlm
aWVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VGltaW5nRnVuY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Y29weUFuaW1hdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJBbmltYXRpb246OlRleHR1cmVNYXBwZXJBbmltYXRpb24pOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6Y3JlYXRlKToKKwogMjAxMS0wNS0wNyAgTm9h
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyLmNwcAppbmRleCA1NWQxYzM2Li5jNTgyNDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAgR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5ZXJDbGllbnQq
IGNsaWUKICAgICA6IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQogICAgICwgbV9ub2RlKGFkb3B0UHRy
KG5ldyBUZXh0dXJlTWFwcGVyTm9kZSgpKSkKICAgICAsIG1fY2hhbmdlTWFzaygwKQorICAgICwg
bV9hbmltYXRpb25TdGFydGVkVGltZXIodGhpcywgJkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
OjphbmltYXRpb25TdGFydGVkVGltZXJGaXJlZCkKIHsKIH0KIApAQCAtMzUzLDQgKzM1NCw3MSBA
QCBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShHcmFwaGlj
c0xheWVyQ2xpZW50KiBjbGllbnQpCiAgICAgcmV0dXJuIG5ldyBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcihjbGllbnQpOwogfQogCitib29sIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjph
ZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgSW50
U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBTdHJpbmcmIGtleWZy
YW1lc05hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworICAgIEFTU0VSVCgha2V5ZnJhbWVzTmFt
ZS5pc0VtcHR5KCkpOworCisgICAgaWYgKCFhbmltIHx8IGFuaW0tPmlzRW1wdHlPclplcm9EdXJh
dGlvbigpIHx8IHZhbHVlTGlzdC5zaXplKCkgPCAyIHx8ICh2YWx1ZUxpc3QucHJvcGVydHkoKSAh
PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtICYmIHZhbHVlTGlzdC5wcm9wZXJ0eSgp
ICE9IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgLy8gVGhlIHNhbWUgYW5pbWF0aW9uIG5hbWUgY2FuIGJlIHVzZWQgZm9yIHR3byBhbmlt
YXRpb25zIHdpdGggZGlmZmVyZW50IHByb3BlcnRpZXMuCisgICAgICAgIGlmIChtX2FuaW1hdGlv
bnNbaV0tPm5hbWUgIT0ga2V5ZnJhbWVzTmFtZSB8fCBtX2FuaW1hdGlvbnNbaV0tPmtleWZyYW1l
cy5wcm9wZXJ0eSgpICE9IHZhbHVlTGlzdC5wcm9wZXJ0eSgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGEgY29weSBvZiB0aGlzIGFuaW1hdGlv
biwgdGhhdCBtZWFucyB0aGF0IHdlJ3JlIHJlc3VtaW5nIGl0IHJhdGhlciB0aGFuIGFkZGluZyBp
dC4KKyAgICAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJBbmltYXRpb24+JiBhbmltYXRpb24gPSBt
X2FuaW1hdGlvbnNbaV07CisgICAgICAgIGFuaW1hdGlvbi0+YW5pbWF0aW9uID0gQW5pbWF0aW9u
OjpjcmVhdGUoYW5pbSk7CisgICAgICAgIGFuaW1hdGlvbi0+cGF1c2VkID0gZmFsc2U7CisgICAg
ICAgIGFuaW1hdGlvbi0+c3RhcnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpIC0gdGltZU9mZnNl
dDsKKyAgICAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpBbmltYXRpb25DaGFu
Z2UpOworICAgICAgICBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lci5zdGFydE9uZVNob3QoMCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uPiBhbmltYXRpb24gPSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpjcmVhdGUodmFsdWVM
aXN0KTsKKyAgICBhbmltYXRpb24tPmJveFNpemUgPSBib3hTaXplOworICAgIGFuaW1hdGlvbi0+
bmFtZSA9IGtleWZyYW1lc05hbWU7CisgICAgYW5pbWF0aW9uLT5hbmltYXRpb24gPSBBbmltYXRp
b246OmNyZWF0ZShhbmltKTsKKyAgICBhbmltYXRpb24tPnBhdXNlZCA9IGZhbHNlOworICAgIGFu
aW1hdGlvbi0+c3RhcnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpIC0gdGltZU9mZnNldDsKKwor
ICAgIGlmICh2YWx1ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJh
bnNmb3JtKSB7CisgICAgICAgIGJvb2wgaGFzQmlnUm90YXRpb247IC8vIE5vdCB1c2VkLCBidXQg
cmVxdWlyZWQgYXMgYSBwb2ludGVyIHBhcmFtZXRlciBmb3IgdGhlIGZ1bmN0aW9uLgorICAgICAg
ICBmZXRjaFRyYW5zZm9ybU9wZXJhdGlvbkxpc3QodmFsdWVMaXN0LCBhbmltYXRpb24tPmZ1bmN0
aW9uTGlzdCwgYW5pbWF0aW9uLT5saXN0c01hdGNoLCBoYXNCaWdSb3RhdGlvbik7CisgICAgfQor
CisgICAgbV9hbmltYXRpb25zLmFwcGVuZChhbmltYXRpb24pOworICAgIG5vdGlmeUNoYW5nZShU
ZXh0dXJlTWFwcGVyTm9kZTo6QW5pbWF0aW9uQ2hhbmdlKTsKKyAgICBtX2FuaW1hdGlvblN0YXJ0
ZWRUaW1lci5zdGFydE9uZVNob3QoMCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBh
bmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hbmltYXRp
b25zW2ldLT5uYW1lICE9IGFuaW1hdGlvbk5hbWUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgbV9hbmltYXRpb25zW2ldLT5wYXVzZWQgPSB0cnVlOworICAgICAgICBub3RpZnlDaGFu
Z2UoVGV4dHVyZU1hcHBlck5vZGU6OkFuaW1hdGlvbkNoYW5nZSk7CisgICAgfQorfQorCit2b2lk
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lKQoreworICAgIGZvciAoaW50IGkgPSBtX2FuaW1hdGlvbnMuc2l6ZSgp
IC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgLy8gVGhlIHNhbWUgYW5pbWF0aW9uIG5hbWUg
Y2FuIGJlIHVzZWQgZm9yIHR3byBhbmltYXRpb25zIHdpdGggZGlmZmVyZW50IHByb3BlcnRpZXMu
IFdlIHNob3VsZCByZW1vdmUgYm90aC4KKyAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS0+bmFt
ZSAhPSBhbmltYXRpb25OYW1lKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fYW5p
bWF0aW9ucy5yZW1vdmUoaSk7CisgICAgICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9k
ZTo6QW5pbWF0aW9uQ2hhbmdlKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OmFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyPiopCit7CisgICAgY2xpZW50KCktPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQo
dGhpcywgLyogRE9NIHRpbWUgKi8gV1RGOjpjdXJyZW50VGltZSgpKTsKK30KKwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaAppbmRleCA3YjdjZGQyLi5mNzIxYWY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaApAQCAtODQsNiArODQsMTAg
QEAgcHVibGljOgogICAgIGlubGluZSBpbnQgY2hhbmdlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1f
Y2hhbmdlTWFzazsgfQogICAgIHZvaWQgZGlkU3luY2hyb25pemUoKTsKIAorICAgIHZpcnR1YWwg
Ym9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXpl
JiwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiwgZG91YmxlKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiwgZG91YmxlKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYpOworCiAgICAgVGV4dHVyZU1hcHBl
ck5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KIAogcHJpdmF0ZToK
QEAgLTkxLDYgKzk1LDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc3luY1F1ZXVlZDsKICAgICBp
bnQgbV9jaGFuZ2VNYXNrOwogICAgIFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50RGF0YSBtX3Bl
bmRpbmdDb250ZW50OworICAgIFZlY3RvcjxSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4g
PiBtX2FuaW1hdGlvbnM7CisgICAgdm9pZCBhbmltYXRpb25TdGFydGVkVGltZXJGaXJlZChUaW1l
cjxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4qKTsKKyAgICBUaW1lcjxHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcj4gbV9hbmltYXRpb25TdGFydGVkVGltZXI7CiB9OwogCiBpbmxpbmUgc3Rh
dGljIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKaW5kZXgg
MmE4ODVjOS4uMTUzNjkzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCkBAIC01ODYsNyAr
NTg2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxm
KEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKIHsKICAgICBpbnQgY2hhbmdlTWFzayA9
IGdyYXBoaWNzTGF5ZXItPmNoYW5nZU1hc2soKTsKICAgICBjb25zdCBUZXh0dXJlTWFwcGVyTm9k
ZTo6Q29udGVudERhdGEmIHBlbmRpbmdDb250ZW50ID0gZ3JhcGhpY3NMYXllci0+cGVuZGluZ0Nv
bnRlbnQoKTsKLSAgICBpZiAoY2hhbmdlTWFzayA9PSBOb0NoYW5nZXMgJiYgcGVuZGluZ0NvbnRl
bnQubmVlZHNEaXNwbGF5UmVjdC5pc0VtcHR5KCkgJiYgIXBlbmRpbmdDb250ZW50Lm5lZWRzRGlz
cGxheSkKKyAgICBpZiAoY2hhbmdlTWFzayA9PSBOb0NoYW5nZXMgJiYgZ3JhcGhpY3NMYXllci0+
bV9hbmltYXRpb25zLmlzRW1wdHkoKSBwZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXlSZWN0Lmlz
RW1wdHkoKSAmJiAhcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5KQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5
cGUgJiYgKGNoYW5nZU1hc2sgJiBQYXJlbnRDaGFuZ2UpKSB7CkBAIC02MzUsNiArNjM1LDEyIEBA
IHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlciogZ3JhCiAgICAgICAgICAgIGxheWVyLT5tX2VmZmVjdFRhcmdl
dCA9IHRoaXM7CiAgICAgfQogCisgICAgaWYgKGNoYW5nZU1hc2sgJiBBbmltYXRpb25DaGFuZ2Up
IHsKKyAgICAgICAgbV9hbmltYXRpb25zLmNsZWFyKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZ3JhcGhpY3NMYXllci0+bV9hbmltYXRpb25zLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgbV9hbmltYXRpb25zLmFwcGVuZChncmFwaGljc0xheWVyLT5tX2FuaW1hdGlvbnNbaV0p
OworICAgIH0KKwogICAgIGlmICh0ZXh0dXJlTWFwcGVyICYmIHRleHR1cmVNYXBwZXItPmFsbG93
UGFydGlhbFVwZGF0ZXMoKSkKICAgICAgICAgbV9zdGF0ZS5yZXBhaW50UmVjdC51bml0ZShtX3N0
YXRlLnJvb3RWaXNpYmxlUmVjdCk7CiAgICAgbV9zdGF0ZS5tYXNrTGF5ZXIgPSB0b1RleHR1cmVN
YXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPm1hc2tMYXllcigpKTsKQEAgLTY1OSwxNSArNjY1LDI2
NyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYQogICAgIGlmICghbV9jdXJyZW50Q29udGVudC5u
ZWVkc0Rpc3BsYXkpCiAgICAgICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC51
bml0ZShwZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXlSZWN0KTsKIAotICAgIG1fb3BhY2l0eSA9
IG1fc3RhdGUub3BhY2l0eTsKLSAgICBtX3RyYW5zZm9ybXMuYmFzZSA9IG1fc3RhdGUudHJhbnNm
b3JtOworICAgIGlmICghaGFzUnVubmluZ09wYWNpdHlBbmltYXRpb24oKSkKKyAgICAgICAgbV9v
cGFjaXR5ID0gbV9zdGF0ZS5vcGFjaXR5OworICAgIGlmICghaGFzUnVubmluZ1RyYW5zZm9ybUFu
aW1hdGlvbigpKQorICAgICAgICBtX3RyYW5zZm9ybXMuYmFzZSA9IG1fc3RhdGUudHJhbnNmb3Jt
OworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUludGVy
bmFsKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBib29sIHRyYXZl
cnNlRGVzY2VuZGFudHMsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCit7CisgICAgaWYg
KGdyYXBoaWNzTGF5ZXIpIHsKKyAgICAgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKGdyYXBo
aWNzTGF5ZXIsIHRleHR1cmVNYXBwZXIpOworICAgICAgICBncmFwaGljc0xheWVyLT5kaWRTeW5j
aHJvbml6ZSgpOworICAgIH0KKworICAgIGlmIChncmFwaGljc0xheWVyICYmIG1fc3RhdGUubWFz
a0xheWVyKSB7CisgICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZUludGVybmFsKHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoZ3JhcGhpY3NMYXllci0+bWFz
a0xheWVyKCkpLCBmYWxzZSwgdGV4dHVyZU1hcHBlcik7CisgICAgICAgIGlmIChtX3N0YXRlLm1h
c2tMYXllci0+bV9zaXplLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fc3RhdGUubWFza0xheWVy
LT5tX3NpemUgPSBtX3NpemU7CisgICAgfQorCisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVy
KQorICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbnRl
cm5hbCh0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGdyYXBoaWNzTGF5ZXItPnJlcGxpY2FM
YXllcigpKSwgZmFsc2UsIHRleHR1cmVNYXBwZXIpOworCisgICAgY29tcHV0ZUFsbFRyYW5zZm9y
bXMoKTsKKworICAgIGJvb2wgdmlzaWJsZVJlY3REaXJ0eSA9IHRydWU7CisgICAgYm9vbCBhbGxv
d1BhcnRpYWxVcGRhdGVzID0gdGV4dHVyZU1hcHBlciAmJiB0ZXh0dXJlTWFwcGVyLT5hbGxvd1Bh
cnRpYWxVcGRhdGVzKCk7CisgICAgaWYgKHZpc2libGVSZWN0RGlydHkgJiYgYWxsb3dQYXJ0aWFs
VXBkYXRlcykKKyAgICAgICAgbV9zdGF0ZS5yZXBhaW50UmVjdC51bml0ZShtX3RyYW5zZm9ybXMu
Ym91bmRpbmdSZWN0RnJvbVJvb3QpOworICAgIGNvbXB1dGVCb3VuZGluZ1JlY3RGcm9tUm9vdElm
TmVlZGVkKCk7CisgICAgY29tcHV0ZVBlcnNwZWN0aXZlVHJhbnNmb3JtSWZOZWVkZWQoKTsKKyAg
ICBjb21wdXRlVGlsZXMoKTsKKyAgICBjb21wdXRlT3ZlcmxhcHNJZk5lZWRlZCgpOworICAgIGlm
ICh2aXNpYmxlUmVjdERpcnR5ICYmIGFsbG93UGFydGlhbFVwZGF0ZXMpCisgICAgICAgIG1fc3Rh
dGUucmVwYWludFJlY3QudW5pdGUobV90cmFuc2Zvcm1zLmJvdW5kaW5nUmVjdEZyb21Sb290KTsK
KworICAgIGlmIChncmFwaGljc0xheWVyKQorICAgICAgICByZW5kZXJDb250ZW50KHRleHR1cmVN
YXBwZXIsIGdyYXBoaWNzTGF5ZXIpOworCisgICAgaWYgKCF0cmF2ZXJzZURlc2NlbmRhbnRzKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZ3JhcGhpY3NMYXllcikgeworICAgICAgICBWZWN0
b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuID0gZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4oKTsK
KyAgICAgICAgZm9yIChpbnQgaSA9IGNoaWxkcmVuLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7
CisgICAgICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5v
ZGUoY2hpbGRyZW5baV0pOworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgbm9kZS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbnRlcm5h
bCh0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGNoaWxkcmVuW2ldKSwgdHJ1ZSwgdGV4dHVy
ZU1hcHBlcik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGludCBpID0g
bV9jaGlsZHJlbi5zaXplKCkgLSAxOyBpID49IDA7IC0taSkKKyAgICAgICAgICAgIG1fY2hpbGRy
ZW5baV0tPnN5bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJuYWwoMCwgdHJ1ZSwgdGV4dHVyZU1hcHBl
cik7CisgICAgfQorCisgICAgaWYgKG1fc3RhdGUucHJlc2VydmVzM0QpCisgICAgICAgIHNvcnRC
eVpPcmRlcihtX2NoaWxkcmVuLCAwLCBtX2NoaWxkcmVuLnNpemUoKSk7CiB9CiAKIGJvb2wgVGV4
dHVyZU1hcHBlck5vZGU6OmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkg
Y29uc3QKIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAoIW1fYW5pbWF0aW9uc1tpXS0+cGF1c2VkKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2No
aWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldLT5kZXNjZW5k
YW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgZG91YmxlIG5vcm1h
bGl6ZWRBbmltYXRpb25WYWx1ZShkb3VibGUgcnVubmluZ1RpbWUsIGRvdWJsZSBkdXJhdGlvbiwg
Ym9vbCBhbHRlcm5hdGUpCit7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgY29uc3QgaW50IGxvb3BDb3VudCA9IHJ1bm5pbmdUaW1lIC8gZHVyYXRpb247CisgICAg
Y29uc3QgZG91YmxlIGxhc3RGdWxsTG9vcCA9IGR1cmF0aW9uICogZG91YmxlKGxvb3BDb3VudCk7
CisgICAgY29uc3QgZG91YmxlIHJlbWFpbmRlciA9IHJ1bm5pbmdUaW1lIC0gbGFzdEZ1bGxMb29w
OworICAgIGNvbnN0IGRvdWJsZSBub3JtYWxpemVkID0gcmVtYWluZGVyIC8gZHVyYXRpb247Cisg
ICAgcmV0dXJuIChsb29wQ291bnQgJSAyICYmIGFsdGVybmF0ZSkgPyAoMSAtIG5vcm1hbGl6ZWQp
IDogbm9ybWFsaXplZDsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6YXBwbHlPcGFjaXR5
QW5pbWF0aW9uKGZsb2F0IGZyb21PcGFjaXR5LCBmbG9hdCB0b09wYWNpdHksIGRvdWJsZSBwcm9n
cmVzcykKK3sKKyAgICAvLyBPcHRpbWl6YXRpb246IHNwZWNpYWwgY2FzZSB0aGUgZWRnZSB2YWx1
ZXMgKDAgYW5kIDEpLgorICAgIGlmIChwcm9ncmVzcyA9PSAxLjApCisgICAgICAgIHNldE9wYWNp
dHkodG9PcGFjaXR5KTsKKyAgICBlbHNlIGlmICghcHJvZ3Jlc3MpCisgICAgICAgIHNldE9wYWNp
dHkoZnJvbU9wYWNpdHkpOworICAgIGVsc2UKKyAgICAgICAgc2V0T3BhY2l0eShmcm9tT3BhY2l0
eSArIHByb2dyZXNzICogKHRvT3BhY2l0eSAtIGZyb21PcGFjaXR5KSk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgZG91YmxlIHNvbHZlRXBzaWxvbihkb3VibGUgZHVyYXRpb24pCit7CisgICAgcmV0dXJu
IDEuMCAvICgyMDAuMCAqIGR1cmF0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgc29s
dmVDdWJpY0JlemllckZ1bmN0aW9uKHFyZWFsIHAxeCwgcXJlYWwgcDF5LCBxcmVhbCBwMngsIHFy
ZWFsIHAyeSwgZG91YmxlIHQsIGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICBVbml0QmV6aWVyIGJl
emllcihwMXgsIHAxeSwgcDJ4LCBwMnkpOworICAgIHJldHVybiBiZXppZXIuc29sdmUodCwgc29s
dmVFcHNpbG9uKGR1cmF0aW9uKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlU3Rl
cHNGdW5jdGlvbihpbnQgbnVtU3RlcHMsIGJvb2wgc3RlcEF0U3RhcnQsIGRvdWJsZSB0KQorewor
ICAgIGlmIChzdGVwQXRTdGFydCkKKyAgICAgICAgcmV0dXJuIHFNaW4oMS4wLCAoZmxvb3IobnVt
U3RlcHMgKiB0KSArIDEpIC8gbnVtU3RlcHMpOworICAgIHJldHVybiBmbG9vcihudW1TdGVwcyAq
IHQpIC8gbnVtU3RlcHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgYXBwbHlUaW1pbmdGdW5j
dGlvbihjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24sIGZsb2F0IHByb2dyZXNz
LCBkb3VibGUgZHVyYXRpb24pCit7CisgICAgaWYgKCF0aW1pbmdGdW5jdGlvbikKKyAgICAgICAg
cmV0dXJuIHByb2dyZXNzOworCisgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc0N1YmljQmV6aWVy
VGltaW5nRnVuY3Rpb24oKSkgeworICAgICAgICBjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0
aW9uKiBjdGYgPSBzdGF0aWNfY2FzdDxjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4o
dGltaW5nRnVuY3Rpb24pOworICAgICAgICByZXR1cm4gc29sdmVDdWJpY0JlemllckZ1bmN0aW9u
KGN0Zi0+eDEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGYt
PnkxKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RmLT54Migp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0Zi0+eTIoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcywgZHVyYXRpb24p
OworICAgIH0KKworICAgIGlmICh0aW1pbmdGdW5jdGlvbi0+aXNTdGVwc1RpbWluZ0Z1bmN0aW9u
KCkpIHsKKyAgICAgICAgY29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbiogc3RmID0gc3RhdGljX2Nh
c3Q8Y29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsKKyAgICAgICAg
cmV0dXJuIHNvbHZlU3RlcHNGdW5jdGlvbihzdGYtPm51bWJlck9mU3RlcHMoKSwgc3RmLT5zdGVw
QXRTdGFydCgpLCBkb3VibGUocHJvZ3Jlc3MpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcHJvZ3Jl
c3M7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmFwcGx5VHJhbnNmb3JtQW5pbWF0aW9u
KGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiwgY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9ucyogZnJvbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogdG8sIGRvdWJsZSBw
cm9ncmVzcykKK3sKKyAgICAvLyBPcHRpbWl6YXRpb246IHNwZWNpYWwgY2FzZSB0aGUgZWRnZSB2
YWx1ZXMgKDAgYW5kIDEpLgorICAgIGlmIChwcm9ncmVzcyA9PSAxLjAgfHwgIXByb2dyZXNzKSB7
CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKyAgICAgICAgY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9ucyogb3BzID0gcHJvZ3Jlc3MgPyB0byA6IGZyb207CisgICAgICAgIG9w
cy0+YXBwbHkoYW5pbWF0aW9uLmJveFNpemUsIG1hdHJpeCk7CisgICAgICAgIHNldFRyYW5zZm9y
bShtYXRyaXgpOworICAgIH0KKworICAgIGlmICghYW5pbWF0aW9uLmxpc3RzTWF0Y2gpIHsKKyAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdG9NYXRyaXgsIGZyb21NYXRyaXg7CisgICAgICAg
IHRvLT5hcHBseShhbmltYXRpb24uYm94U2l6ZSwgdG9NYXRyaXgpOworICAgICAgICBmcm9tLT5h
cHBseShhbmltYXRpb24uYm94U2l6ZSwgZnJvbU1hdHJpeCk7CisgICAgICAgIHRvTWF0cml4LmJs
ZW5kKGZyb21NYXRyaXgsIHByb2dyZXNzKTsKKyAgICAgICAgc2V0VHJhbnNmb3JtKHRvTWF0cml4
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1h
dHJpeDsKKworICAgIGlmICghdG8tPnNpemUoKSkgeworICAgICAgICBjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb25zKiBzd2FwID0gdG87CisgICAgICAgIHRvID0gZnJvbTsKKyAgICAgICAgZnJvbSA9
IHN3YXA7CisgICAgfSBlbHNlIGlmICghZnJvbS0+c2l6ZSgpKQorICAgICAgICBwcm9ncmVzcyA9
IDEuMCAtIHByb2dyZXNzOworCisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZGVkKCp0byk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRpb24uZnVuY3Rpb25MaXN0LnNpemUo
KTsgKytpKQorICAgICAgICBibGVuZGVkLm9wZXJhdGlvbnMoKVtpXS0+YmxlbmQoZnJvbS0+YXQo
aSksIHByb2dyZXNzLCAhZnJvbS0+YXQoaSkpLT5hcHBseShtYXRyaXgsIGFuaW1hdGlvbi5ib3hT
aXplKTsKKworICAgIHNldFRyYW5zZm9ybShtYXRyaXgpOworfQorCit2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjphcHBseUFuaW1hdGlvbkZyYW1lKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24m
IGFuaW1hdGlvbiwgY29uc3QgQW5pbWF0aW9uVmFsdWUqIGZyb20sIGNvbnN0IEFuaW1hdGlvblZh
bHVlKiB0bywgZmxvYXQgcHJvZ3Jlc3MpCit7CisgICAgc3dpdGNoIChhbmltYXRpb24ua2V5ZnJh
bWVzLnByb3BlcnR5KCkpIHsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5OgorICAg
ICAgICBhcHBseU9wYWNpdHlBbmltYXRpb24oKHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0
aW9uVmFsdWUqPihmcm9tKS0+dmFsdWUoKSksIChzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1h
dGlvblZhbHVlKj4odG8pLT52YWx1ZSgpKSwgcHJvZ3Jlc3MpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtOgorICAgICAgICBhcHBseVRy
YW5zZm9ybUFuaW1hdGlvbihhbmltYXRpb24sIHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFu
aW1hdGlvblZhbHVlKj4oZnJvbSktPnZhbHVlKCksIHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9y
bUFuaW1hdGlvblZhbHVlKj4odG8pLT52YWx1ZSgpLCBwcm9ncmVzcyk7CisgICAgICAgIHJldHVy
bjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmFwcGx5QW5pbWF0aW9uKGNvbnN0IFRleHR1cmVN
YXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiwgZG91YmxlIG5vcm1hbGl6ZWRWYWx1ZSkKK3sKKyAg
ICAvLyBPcHRpbWl6YXRpb246IHNwZWNpYWwgY2FzZSB0aGUgZWRnZSB2YWx1ZXMgKDAgYW5kIDEp
LgorICAgIGlmICghbm9ybWFsaXplZFZhbHVlKSB7CisgICAgICAgIGFwcGx5QW5pbWF0aW9uRnJh
bWUoYW5pbWF0aW9uLCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KDApLCBhbmltYXRpb24ua2V5ZnJh
bWVzLmF0KDEpLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobm9ybWFsaXpl
ZFZhbHVlID09IDEuMCkgeworICAgICAgICBhcHBseUFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvbiwg
YW5pbWF0aW9uLmtleWZyYW1lcy5hdChhbmltYXRpb24ua2V5ZnJhbWVzLnNpemUoKSAtIDIpLCBh
bmltYXRpb24ua2V5ZnJhbWVzLmF0KGFuaW1hdGlvbi5rZXlmcmFtZXMuc2l6ZSgpIC0gMSksIDEp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChhbmltYXRpb24ua2V5ZnJhbWVzLnNp
emUoKSA9PSAyKSB7CisgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IGFwcGx5VGltaW5nRnVuY3Rp
b24oYW5pbWF0aW9uLmFuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS5nZXQoKSwgbm9ybWFsaXpl
ZFZhbHVlLCBhbmltYXRpb24uYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKKyAgICAgICAgYXBwbHlB
bmltYXRpb25GcmFtZShhbmltYXRpb24sIGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoMCksIGFuaW1h
dGlvbi5rZXlmcmFtZXMuYXQoMSksIG5vcm1hbGl6ZWRWYWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1hdGlvbi5rZXlmcmFtZXMu
c2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgIGNvbnN0IEFuaW1hdGlvblZhbHVlKiBmcm9tID0g
YW5pbWF0aW9uLmtleWZyYW1lcy5hdChpKTsKKyAgICAgICAgY29uc3QgQW5pbWF0aW9uVmFsdWUq
IHRvID0gYW5pbWF0aW9uLmtleWZyYW1lcy5hdChpICsgMSk7CisgICAgICAgIGlmIChmcm9tLT5r
ZXlUaW1lKCkgPiBub3JtYWxpemVkVmFsdWUgfHwgdG8tPmtleVRpbWUoKSA8IG5vcm1hbGl6ZWRW
YWx1ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9
IChub3JtYWxpemVkVmFsdWUgLSBmcm9tLT5rZXlUaW1lKCkpIC8gKHRvLT5rZXlUaW1lKCkgLSBm
cm9tLT5rZXlUaW1lKCkpOworICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBhcHBseVRpbWluZ0Z1
bmN0aW9uKGZyb20tPnRpbWluZ0Z1bmN0aW9uKCksIG5vcm1hbGl6ZWRWYWx1ZSwgYW5pbWF0aW9u
LmFuaW1hdGlvbi0+ZHVyYXRpb24oKSk7CisgICAgICAgIGFwcGx5QW5pbWF0aW9uRnJhbWUoYW5p
bWF0aW9uLCBmcm9tLCB0bywgbm9ybWFsaXplZFZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitib29sIFRleHR1cmVNYXBwZXJOb2RlOjpoYXNSdW5uaW5nT3BhY2l0eUFuaW1hdGlv
bigpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0
aW9uID0gKm1fYW5pbWF0aW9uc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKCFhbmltYXRpb24ucGF1
c2VkICYmIGFuaW1hdGlvbi5rZXlmcmFtZXMucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5
T3BhY2l0eSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgVGV4dHVyZU1hcHBlck5vZGU6Omhhc1J1bm5pbmdUcmFuc2Zvcm1Bbmlt
YXRpb24oKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRpb25z
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFu
aW1hdGlvbiA9ICptX2FuaW1hdGlvbnNbaV0uZ2V0KCk7CisgICAgICAgIGlmICghYW5pbWF0aW9u
LnBhdXNlZCAmJiBhbmltYXRpb24ua2V5ZnJhbWVzLnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9w
ZXJ0eVdlYmtpdFRyYW5zZm9ybSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNBbmltYXRp
b25zKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBsYXllcikKK3sKKyAgICBmb3IgKGludCBp
ID0gbV9hbmltYXRpb25zLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIFJlZlB0
cjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiBhbmltYXRpb24gPSBtX2FuaW1hdGlvbnNbaV07CisK
KyAgICAgICAgZG91YmxlIHRvdGFsUnVubmluZ1RpbWUgPSBXVEY6OmN1cnJlbnRUaW1lKCkgLSBh
bmltYXRpb24tPnN0YXJ0VGltZTsKKyAgICAgICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbSA9IGFu
aW1hdGlvbi0+YW5pbWF0aW9uOworICAgICAgICBkb3VibGUgbm9ybWFsaXplZFZhbHVlID0gbm9y
bWFsaXplZEFuaW1hdGlvblZhbHVlKHRvdGFsUnVubmluZ1RpbWUsIGFuaW0tPmR1cmF0aW9uKCks
IHRydWUpOworCisgICAgICAgIGlmIChhbmltLT5pdGVyYXRpb25Db3VudCgpICE9IEFuaW1hdGlv
bjo6SXRlcmF0aW9uQ291bnRJbmZpbml0ZSAmJiB0b3RhbFJ1bm5pbmdUaW1lID49IGFuaW0tPmR1
cmF0aW9uKCkgKiBhbmltLT5pdGVyYXRpb25Db3VudCgpKSB7CisgICAgICAgICAgICAvLyBXZSBh
cHBseSBhbiBhbmltYXRpb24gdGhhdCB2ZXJ5IGNsb3NlIHRvIHRoZSBlZGdlLCBzbyB0aGF0IHRo
ZSBmaW5hbCBmcmFtZSBpcyBhcHBsaWVkLCBvdGVyd2lzZSB3ZSBtaWdodCBnZXQsIGZvciBleGFt
cGxlLCBhbiBvcGFjaXR5IG9mIDAuMDEgd2hpY2ggaXMgc3RpbGwgdmlzaWJsZS4KKyAgICAgICAg
ICAgIGlmIChhbmltLT5maWxsc0ZvcndhcmRzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYW5p
bWF0aW9uLT5rZXlmcmFtZXMucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJh
bnNmb3JtKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnRyYW5zZm9ybSA9IG1fdHJhbnNm
b3Jtcy5iYXNlOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFuaW1hdGlvbi0+a2V5ZnJhbWVz
LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpCisgICAgICAgICAgICAgICAg
ICAgIG1fb3BhY2l0eSA9IG1fc3RhdGUub3BhY2l0eTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbV9hbmltYXRpb25zLnJlbW92ZShpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFhbmltYXRpb24tPnBhdXNlZCkKKyAgICAgICAgICAgIGFw
cGx5QW5pbWF0aW9uKCphbmltYXRpb24uZ2V0KCksIG5vcm1hbGl6ZWRWYWx1ZSk7CisgICAgfQor
fQorCiB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUludGVybmFs
KEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBib29sIHRyYXZlcnNl
RGVzY2VuZGFudHMsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCiB7CiAgICAgaWYgKGdy
YXBoaWNzTGF5ZXIpIHsKQEAgLTY4NCw5ICs5NDIsMTUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVJbnRlcm5hbChHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cioKICAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCiAgICAgICAgIG1fc3RhdGUucmVwbGlj
YUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUludGVybmFsKHRvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIoZ3JhcGhpY3NMYXllci0+cmVwbGljYUxheWVyKCkpLCBmYWxzZSwgdGV4dHVyZU1h
cHBlcik7CiAKKyAgICBzeW5jQW5pbWF0aW9ucyhncmFwaGljc0xheWVyKTsKKwogICAgIGNvbXB1
dGVBbGxUcmFuc2Zvcm1zKCk7CiAKICAgICBib29sIHZpc2libGVSZWN0RGlydHkgPSB0cnVlOwor
I2lmIFRFWFRVUkVfTUFQUEVSX01JTklNQUxfQ09NUFVUQVRJT05TCisgICAgdmlzaWJsZVJlY3RE
aXJ0eSA9IG1fZGlydHlGbGFncy52aXNpYmxlUmVjdDsKKyNlbmRpZgorCiAgICAgYm9vbCBhbGxv
d1BhcnRpYWxVcGRhdGVzID0gdGV4dHVyZU1hcHBlciAmJiB0ZXh0dXJlTWFwcGVyLT5hbGxvd1Bh
cnRpYWxVcGRhdGVzKCk7CiAgICAgaWYgKHZpc2libGVSZWN0RGlydHkgJiYgYWxsb3dQYXJ0aWFs
VXBkYXRlcykKICAgICAgICAgbV9zdGF0ZS5yZXBhaW50UmVjdC51bml0ZShtX3RyYW5zZm9ybXMu
Ym91bmRpbmdSZWN0RnJvbVJvb3QpOwpAQCAtNzIwLDYgKzk4NCw2NiBAQCB2b2lkIFRleHR1cmVN
YXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUludGVybmFsKEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyKgogICAgICAgICBzb3J0QnlaT3JkZXIobV9jaGlsZHJlbiwgMCwgbV9jaGlsZHJl
bi5zaXplKCkpOwogCiB9CisKK0ludFJlY3QgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMYXN0
TW9kaWZpZWRSZWN0KCkKK3sKKyAgICBGbG9hdFJlY3QgcmVjdCA9IG1fc3RhdGUucmVwYWludFJl
Y3Q7CisgICAgaWYgKGhhc1J1bm5pbmdPcGFjaXR5QW5pbWF0aW9uKCkgfHwgaGFzUnVubmluZ1Ry
YW5zZm9ybUFuaW1hdGlvbigpKQorICAgICAgICByZWN0ID0gdGFyZ2V0UmVjdCgpOworICAgIHJl
Y3QgPSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFJlY3QocmVjdCk7CisgICAgbV9zdGF0ZS5yZXBh
aW50UmVjdCA9IEZsb2F0UmVjdCgpOworICAgIGZvciAoaW50IGkgPSBtX2NoaWxkcmVuLnNpemUo
KSAtIDE7IGkgPj0gMDsgLS1pKQorICAgICAgICByZWN0LnVuaXRlKG1fY2hpbGRyZW5baV0tPmNv
bXB1dGVMYXN0TW9kaWZpZWRSZWN0KCkpOworCisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qo
cmVjdCk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiBjb3B5VGltaW5n
RnVuY3Rpb24oY29uc3QgVGltaW5nRnVuY3Rpb24qIHRmdW5jKQoreworICAgIGlmICghdGZ1bmMp
CisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHRmdW5jLT5pc0xpbmVhclRpbWluZ0Z1bmN0
aW9uKCkpCisgICAgICAgIHJldHVybiBMaW5lYXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCk7CisK
KyAgICBpZiAodGZ1bmMtPmlzQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbigpKSB7CisgICAgICAg
IGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qIGJ0ZnVuYyA9IHN0YXRpY19jYXN0PGNv
bnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qPih0ZnVuYyk7CisgICAgICAgIHJldHVybiBD
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoYnRmdW5jLT54MSgpLCBidGZ1bmMtPnkx
KCksIGJ0ZnVuYy0+eDIoKSwgYnRmdW5jLT55MigpKTsKKyAgICB9CisKKyAgICBpZiAodGZ1bmMt
PmlzU3RlcHNUaW1pbmdGdW5jdGlvbigpKSB7CisgICAgICAgIGNvbnN0IFN0ZXBzVGltaW5nRnVu
Y3Rpb24qIHN0ZnVuYyA9IHN0YXRpY19jYXN0PGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qPih0
ZnVuYyk7CisgICAgICAgIHJldHVybiBTdGVwc1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoc3RmdW5j
LT5udW1iZXJPZlN0ZXBzKCksIHN0ZnVuYy0+c3RlcEF0U3RhcnQoKSk7CisgICAgfQorCisgICAg
cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBBbmltYXRpb25WYWx1ZSogY29weUFuaW1hdGlv
blZhbHVlKEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgQW5pbWF0aW9uVmFsdWUq
IHZhbHVlKQoreworICAgIHN3aXRjaCAocHJvcGVydHkpIHsKKyAgICBjYXNlIEFuaW1hdGVkUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm06IHsKKyAgICAgICAgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9u
VmFsdWUqIHRyYW5zZm9ybVZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0
aW9uVmFsdWUqPih2YWx1ZSk7CisgICAgICAgIHJldHVybiBuZXcgVHJhbnNmb3JtQW5pbWF0aW9u
VmFsdWUodHJhbnNmb3JtVmFsdWUtPmtleVRpbWUoKSwgdHJhbnNmb3JtVmFsdWUtPnZhbHVlKCks
IGNvcHlUaW1pbmdGdW5jdGlvbih0cmFuc2Zvcm1WYWx1ZS0+dGltaW5nRnVuY3Rpb24oKSkpOwor
ICAgIH0KKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5OiB7CisgICAgICAgIGNvbnN0
IEZsb2F0QW5pbWF0aW9uVmFsdWUqIGZsb2F0VmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGbG9h
dEFuaW1hdGlvblZhbHVlKj4odmFsdWUpOworICAgICAgICByZXR1cm4gbmV3IEZsb2F0QW5pbWF0
aW9uVmFsdWUoZmxvYXRWYWx1ZS0+a2V5VGltZSgpLCBmbG9hdFZhbHVlLT52YWx1ZSgpLCBjb3B5
VGltaW5nRnVuY3Rpb24oZmxvYXRWYWx1ZS0+dGltaW5nRnVuY3Rpb24oKSkpOworICAgIH0KKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gMDsKK30KKworVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6VGV4dHVyZU1hcHBlckFuaW1h
dGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzKQorICAgIDoga2V5ZnJhbWVzKHZh
bHVlcy5wcm9wZXJ0eSgpKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNp
emUoKTsgKytpKQorICAgICAgICBrZXlmcmFtZXMuaW5zZXJ0KGNvcHlBbmltYXRpb25WYWx1ZSh2
YWx1ZXMucHJvcGVydHkoKSwgdmFsdWVzLmF0KGkpKSk7Cit9CisKIH0KIAogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyTm9kZS5oCmluZGV4IDcxMTI1MmEuLjdlMTBkNDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
Tm9kZS5oCkBAIC01MSw2ICs1MSwyMSBAQCBwdWJsaWM6CiAgICAgVGV4dHVyZU1hcHBlclBhaW50
T3B0aW9ucygpIDogc3VyZmFjZSgwKSwgdGV4dHVyZU1hcHBlcigwKSwgb3BhY2l0eSgxLjApLCBp
c1N1cmZhY2UoZmFsc2UpIHsgfQogfTsKIAorY2xhc3MgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiA6
IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJBbmltYXRpb24+IHsKK3B1YmxpYzoKKyAg
ICBTdHJpbmcgbmFtZTsKKyAgICBLZXlmcmFtZVZhbHVlTGlzdCBrZXlmcmFtZXM7CisgICAgSW50
U2l6ZSBib3hTaXplOworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbjsKKyAgICBib29s
IHBhdXNlZDsKKyAgICBWZWN0b3I8VHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlPiBm
dW5jdGlvbkxpc3Q7CisgICAgYm9vbCBsaXN0c01hdGNoOworICAgIGJvb2wgaGFzQmlnUm90YXRp
b247CisgICAgZG91YmxlIHN0YXJ0VGltZTsKKyAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKGNv
bnN0IEtleWZyYW1lVmFsdWVMaXN0Jik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1h
cHBlckFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKHZhbHVlcykpOyB9Cit9
OworCiBjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZSB7CiAKIHB1YmxpYzoKQEAgLTgzLDcgKzk4LDgg
QEAgcHVibGljOgogICAgICAgICBEaXNwbGF5Q2hhbmdlID0gICAgICAgICAgICAgKDFMIDw8IDE4
KSwKICAgICAgICAgQmFja2dyb3VuZENvbG9yQ2hhbmdlID0gICAgICgxTCA8PCAxOSksCiAKLSAg
ICAgICAgUmVwbGljYUxheWVyQ2hhbmdlID0gICAgICAgICgxTCA8PCAyMCkKKyAgICAgICAgUmVw
bGljYUxheWVyQ2hhbmdlID0gICAgICAgICgxTCA8PCAyMCksCisgICAgICAgIEFuaW1hdGlvbkNo
YW5nZSA9ICAgICAgICAgICAoMUwgPDwgMjEpCiAgICAgfTsKICAgICAvLyBUaGUgY29tcG9zaXRv
ciBsZXRzIHVzIHNwZWNpYWwtY2FzZSBpbWFnZXMgYW5kIGNvbG9ycywgc28gd2UgdHJ5IHRvIGRv
IHNvLgogICAgIGVudW0gQ29udGVudFR5cGUgeyBIVE1MQ29udGVudFR5cGUsIERpcmVjdEltYWdl
Q29udGVudFR5cGUsIENvbG9yQ29udGVudFR5cGUsIE1lZGlhQ29udGVudFR5cGUsIENhbnZhczNE
Q29udGVudFR5cGV9OwpAQCAtMTUyLDYgKzE2OCwxNCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFp
bnRTZWxmQW5kQ2hpbGRyZW4oY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYsIFRleHR1
cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnNGb3JEZXNjZW5kYW50cyk7CiAgICAgdm9pZCBy
ZW5kZXJDb250ZW50KFRleHR1cmVNYXBwZXIqLCBHcmFwaGljc0xheWVyKik7CiAKKyAgICB2b2lk
IHN5bmNBbmltYXRpb25zKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKik7CisgICAgdm9pZCBh
cHBseUFuaW1hdGlvbihjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiwgZG91YmxlIHJ1bm5p
bmdUaW1lKTsKKyAgICB2b2lkIGFwcGx5QW5pbWF0aW9uRnJhbWUoY29uc3QgVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbiYsIGNvbnN0IEFuaW1hdGlvblZhbHVlKiBmcm9tLCBjb25zdCBBbmltYXRpb25W
YWx1ZSogdG8sIGZsb2F0IHByb2dyZXNzKTsKKyAgICB2b2lkIGFwcGx5T3BhY2l0eUFuaW1hdGlv
bihmbG9hdCBmcm9tT3BhY2l0eSwgZmxvYXQgdG9PcGFjaXR5LCBkb3VibGUpOworICAgIHZvaWQg
YXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYsIGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHN0YXJ0LCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
KiBlbmQsIGRvdWJsZSk7CisgICAgYm9vbCBoYXNSdW5uaW5nT3BhY2l0eUFuaW1hdGlvbigpIGNv
bnN0OworICAgIGJvb2wgaGFzUnVubmluZ1RyYW5zZm9ybUFuaW1hdGlvbigpIGNvbnN0OworCiAg
ICAgc3RydWN0IFRyYW5zZm9ybURhdGEgewogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
YXJnZXQ7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlcGxpY2E7CkBAIC0yNDQsNiAr
MjY4LDggQEAgcHJpdmF0ZToKICAgICBTdGF0ZSBtX3N0YXRlOwogICAgIFRleHR1cmVNYXBwZXJT
dXJmYWNlTWFuYWdlciogbV9zdXJmYWNlTWFuYWdlcjsKICAgICBUZXh0dXJlTWFwcGVyKiBtX3Rl
eHR1cmVNYXBwZXI7CisKKyAgICBWZWN0b3I8UmVmUHRyPFRleHR1cmVNYXBwZXJBbmltYXRpb24+
ID4gbV9hbmltYXRpb25zOwogfTsKIAogCg==
</data>
<flag name="review"
          id="85960"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93021</attachid>
            <date>2011-05-10 15:10:18 -0700</date>
            <delta_ts>2011-05-11 02:43:05 -0700</delta_ts>
            <desc>Patch 9: TextureMapperNode refactoring</desc>
            <filename>0001-TextureMapperNode.patch</filename>
            <type>text/plain</type>
            <size>76157</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSA0YzRjODMzMDZiY2Q2ZmUyNTVjYzQ3YTI2MjI2ZGI5MzdkNWQxNWY1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgpEYXRlOiBTdW4sIDggTWF5IDIwMTEgMTk6MDM6MDEgLTA3MDAKU3ViamVjdDogW1BBVENI
IDEvNF0gVGV4dHVyZU1hcHBlck5vZGUKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDc3ICsrLQogLi4uL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgfCAgIDM2ICstCiAuLi4vZ3JhcGhpY3MvdGV4
bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggICB8ICAgMTIgKy0KIC4uLi9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIHwgMTA1NSArKysrKysrKy0t
LS0tLS0tLS0tLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5oICAgfCAgMTgyICsrLS0KIDUgZmlsZXMgY2hhbmdlZCwgNjIyIGluc2VydGlvbnMoKyksIDc0
MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGJjMDY2Ni4uNDI1NmYxZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSw2ICsxLDgxIEBACiAyMDExLTA1LTA3ICBOb2FtIFJvc2VudGhhbCAgPG5vYW0ucm9z
ZW50aGFsQG5va2lhLmNvbT4KIAotICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENo
cmlzdGlhbnNlbi4KKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgW1RleG1hcF1bUXRdIFVwc3RyZWFtIHRleHR1cmUtbWFwcGVyIGNoYW5nZXMgZnJvbSBRdCdz
IFdlYktpdDIgYnJhbmNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02MDQzOQorCisgICAgICAgIFBhdGNoIDkvMTA6IFJlZmFjdG9yIFRleHR1cmVNYXBw
ZXJOb2RlIGZvciBwZXJmb3JtYW5jZSwgcmVhZGFiaWxpdHkgYW5kIGFjY3VyYWN5LgorICAgICAg
ICBDaGFuZ2VzIGluY2x1ZGU6CisgICAgICAgIDEuIFN1cHBvcnQgdGhlIG5ldyBUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllciBmb3IgbWVkaWEgJiBXZWJHTC4KKyAgICAgICAgMi4gVXNlIGEgcG9v
bCBmb3IgaW50ZXJtZWRpYXRlIHN1cmZhY2VzLCB0byBhdm9pZCBjb25zdGFudCBhbGxvY2F0aW5n
L2ZyZWVpbmcgb2YgdGV4dHVyZXMuCisgICAgICAgIDMuIERpdmlkZSBjb21wdXRhdGlvbiBvcGVy
YXRpb25zIHRvIGRpZmZlcmVudCBzbWFsbGVyIGZ1bmN0aW9ucy4KKyAgICAgICAgNC4gR2V0IHJp
ZCBvZiBzY2lzc29yL2NsaXAgbGF5ZXJzLCB1c2UgdHJhbnNmb3JtZWQgY2xpcCBpbnN0ZWFkLgor
ICAgICAgICA1LiBBbGxvdyB0aWxpbmcgZm9yIGJpZyBsYXllcnMuCisKKworICAgICAgICBObyBu
ZXcgdGVzdHMuIFRlc3RzIGluIExheW91dFRlc3RzL2NvbXBvc2l0aW5nIGNvdmVyIHRoaXMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9NZWRpYSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXll
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6Om5vZGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXI6OmdldEludGVybWVkaWF0ZVN1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclN1cmZhY2VNYW5hZ2VyOjpyZWxlYXNlSW50
ZXJtZWRpYXRlU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1RleHR1cmVNYXBwZXJOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpyb290TGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldFRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVBlcnNwZWN0aXZlVHJhbnNmb3Jt
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvdW50RGVz
Y2VuZGFudHNXaXRoQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZTo6Y29tcHV0ZU92ZXJsYXBzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6OmNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMb2NhbFRyYW5zZm9ybUlmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpuZWVkc1RvQ29tcHV0ZUJvdW5k
aW5nUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZUFs
bFRyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1
dGVCb3VuZGluZ1JlY3RGcm9tUm9vdElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpjb21wdXRlVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6OmNvbXB1dGVWaXNpYmxlUmVjdElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjpyZW5kZXJDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJOb2RlOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
Tm9kZTo6dGFyZ2V0UmVjdEZvclRpbGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlOjpwYWludFNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5v
ZGU6OmNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyTm9kZTo6c29ydEJ5Wk9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlOjpwYWludFNlbGZBbmRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyTm9kZTo6cGFpbnRSZWZsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpwYWludFJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyTm9kZTo6flRleHR1cmVNYXBwZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpyZXNldERlc2NlbmRhbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpzZXRDb250ZW50U2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlck5vZGU6OnNldFZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyTm9kZTo6aW52YWxpZGF0ZU92ZXJsYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmlt
YXRpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ck5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQYWludE9wdGlvbnM6OlRl
eHR1cmVNYXBwZXJQYWludE9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckFuaW1hdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2Rl
OjpUZXh0dXJlTWFwcGVyTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0T3BhY2l0
eSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0VGV4dHVyZU1hcHBl
cik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6bWVkaWEpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlck5vZGU6OnRhcmdldFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGU6OmVudGlyZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6OmNvbnRlbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJO
b2RlOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlT3duZWRQdHIpOgor
CisyMDExLTA1LTA3ICBOb2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAogICAgICAgICBbVGV4bWFw
XSBVcHN0cmVhbSB0ZXh0dXJlLW1hcHBlciBjaGFuZ2VzIGZyb20gUXQncyBXZWJLaXQyIGJyYW5j
aAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA0MzkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCmluZGV4IGJiYTEwOWUu
LjVmYjFhYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApA
QCAtNzAsNyArNzAsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVk
c0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGlmIChtX3BlbmRp
bmdDb250ZW50Lm5lZWRzRGlzcGxheSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcGVuZGluZ0Nv
bnRlbnQubmVlZHNEaXNwbGF5UmVjdC51bml0ZShJbnRSZWN0KHJlY3QpKTsKKyAgICBtX3BlbmRp
bmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QudW5pdGUocmVjdCk7CiAgICAgbm90aWZ5Q2hhbmdl
KFRleHR1cmVNYXBwZXJOb2RlOjpEaXNwbGF5Q2hhbmdlKTsKIH0KIApAQCAtMzE5LDU3ICszMTks
MzMgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb0ltYWdl
KEltYWdlKiBpbWFnZSkKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1h
Z2UpOwogfQogCi0vKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKLSovCi12b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IpCi17Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50
Q2hhbmdlKTsKLSAgICBtX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlID0gVGV4dHVyZU1hcHBl
ck5vZGU6OkNvbG9yQ29udGVudFR5cGU7Ci0gICAgbV9wZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5k
Q29sb3IgPSBjb2xvcjsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c0JhY2tncm91bmRD
b2xvcihjb2xvcik7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIG1lZGlhKQordm9pZCBHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb01lZGlhKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyKiBtZWRpYSkKIHsKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvTWVkaWEobWVk
aWEpOwogICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudENoYW5nZSk7
CiAgICAgbV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9IG1lZGlhID8gVGV4dHVyZU1hcHBl
ck5vZGU6Ok1lZGlhQ29udGVudFR5cGUgOiBUZXh0dXJlTWFwcGVyTm9kZTo6SFRNTENvbnRlbnRU
eXBlOwotICAgIGlmIChtZWRpYSkKLSAgICAgICAgbV9wZW5kaW5nQ29udGVudC5tZWRpYSA9IHN0
YXRpY19jYXN0PFRleHR1cmVNYXBwZXJNZWRpYUxheWVyKj4obWVkaWEpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9wZW5kaW5nQ29udGVudC5tZWRpYSA9IDA7Ci19Ci0KLS8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQotKi8KLXZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRl
bnRzT3JpZW50YXRpb24oQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIG9yaWVudGF0
aW9uKQotewotICAgIGlmIChjb250ZW50c09yaWVudGF0aW9uKCkgPT0gb3JpZW50YXRpb24pCi0g
ICAgICAgIHJldHVybjsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRl
bnRzT3JpZW50YXRpb25DaGFuZ2UpOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3Jp
ZW50YXRpb24ob3JpZW50YXRpb24pOworICAgIG1fcGVuZGluZ0NvbnRlbnQubWVkaWEgPSBtZWRp
YTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCiAqLwogdm9pZCBHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkK
IHsKLSAgICBtX25vZGUtPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRoaXMsIGZhbHNlKTsKKyAgICBt
X25vZGUtPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRoaXMpOwogfQogCiAvKiBccmVpbXAgKEdyYXBo
aWNzTGF5ZXIuaCkKICovCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29t
cG9zaXRpbmdTdGF0ZSgpCiB7Ci0gICAgbV9ub2RlLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSh0aGlz
LCB0cnVlKTsKKyAgICBtX25vZGUtPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRoaXMsIFRleHR1cmVN
YXBwZXJOb2RlOjpUcmF2ZXJzZURlc2NlbmRhbnRzKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGlj
c0xheWVyLmgpCiAqLwogUGxhdGZvcm1MYXllciogR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX25vZGUuZ2V0KCk7CisgICAg
cmV0dXJuIGNvbnN0X2Nhc3Q8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqPihub2RlKCktPm1l
ZGlhKCkpOwogfQogCiBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNy
ZWF0ZShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlci5oCmluZGV4IGRjZjQ5MzguLjdiN2NkZDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlci5oCkBAIC00NSw2ICs0NSw3IEBAIHB1YmxpYzoKIAogICAg
IC8vIHJlaW1wcyBmcm9tIEdyYXBoaWNzTGF5ZXIuaAogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c0Rpc3BsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKSB7
IHNldE5lZWRzRGlzcGxheSgpOyB9OwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJ
blJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChHcmFw
aGljc0xheWVyKiBsYXllcik7CiAgICAgdmlydHVhbCBib29sIHNldENoaWxkcmVuKGNvbnN0IFZl
Y3RvcjxHcmFwaGljc0xheWVyKj4mKTsKQEAgLTcyLDI0ICs3MywxOSBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7CiAgICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dENvbnRlbnRzQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7Ci0jaWYgRU5BQkxFKFdFQkdM
KQotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvR3JhcGhpY3NDb250ZXh0M0QoY29uc3Qg
R3JhcGhpY3NDb250ZXh0M0QqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0
M0ROZWVkc0Rpc3BsYXkoKTsKLSNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c09y
aWVudGF0aW9uKENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBvcmllbnRhdGlvbik7
CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogY2Fu
dmFzKSB7IHNldENvbnRlbnRzVG9NZWRpYShjYW52YXMpOyB9CiAgICAgdmlydHVhbCB2b2lkIHN5
bmNDb21wb3NpdGluZ1N0YXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0
cmluZyYgbmFtZSk7CiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkg
Y29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgLypib3hTaXplKi8sIGNvbnN0IEFuaW1hdGlvbiosIGNv
bnN0IFN0cmluZyYgLyprZXlmcmFtZXNOYW1lKi8sIGRvdWJsZSAvKnRpbWVPZmZzZXQqLykgeyBy
ZXR1cm4gZmFsc2U7IH0KLQogICAgIHZvaWQgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2Rl
OjpDaGFuZ2VNYXNrIGNoYW5nZU1hc2spOwogICAgIGlubGluZSBUZXh0dXJlTWFwcGVyTm9kZTo6
Q29udGVudERhdGEmIHBlbmRpbmdDb250ZW50KCkgeyByZXR1cm4gbV9wZW5kaW5nQ29udGVudDsg
fQogICAgIGlubGluZSBpbnQgY2hhbmdlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlTWFz
azsgfQogICAgIHZvaWQgZGlkU3luY2hyb25pemUoKTsKIAorICAgIFRleHR1cmVNYXBwZXJOb2Rl
KiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLmdldCgpOyB9CisKIHByaXZhdGU6CiAgICAg
T3duUHRyPFRleHR1cmVNYXBwZXJOb2RlPiBtX25vZGU7CiAgICAgYm9vbCBtX3N5bmNRdWV1ZWQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcAppbmRleCBiZjUzZTYxLi43MTc5NmYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyTm9kZS5jcHAKQEAgLTIwLDc0MiArMjAsNTcyIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKIAorI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKwogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
LmgiCiAKK25hbWVzcGFjZSB7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IGdUaWxlRGltZW5zaW9u
ID0gMTAyNC4wOworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFRleHR1cmVNYXBw
ZXJDYWNoZSB7CitjbGFzcyBUZXh0dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXIgewogcHVibGljOgot
ICAgIHZvaWQgbWFyayhCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKTsKKyAgICBUZXh0dXJlTWFwcGVy
KiB0ZXh0dXJlTWFwcGVyOworICAgIFZlY3RvcjxSZWZQdHI8Qml0bWFwVGV4dHVyZT4gPiBzdXJm
YWNlczsKKyAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZTsKIAotICAgIGNsYXNzIEVudHJ5IHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlOwotICAgICAg
ICBFbnRyeSgpIDogcHJldmlvdXNDb3N0KDApIHsgfQotICAgICAgICBpbmxpbmUgaW50IGNvbXB1
dGVDb3N0KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCF0ZXh0dXJlIHx8ICF0
ZXh0dXJlLT5pc1ZhbGlkKCkgfHwgdGV4dHVyZS0+aXNQYWNrZWQoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgICAgIGNvbnN0IEludFNpemUgdGV4dHVyZVNpemUgPSB0ZXh0
dXJlLT5zaXplKCk7Ci0gICAgICAgICAgICAvLyBBbiBpbWFnZSdzIGNvc3QgaW4gYnl0ZXMgaXMg
d2lkdGggKiBoZWlnaHQgKiBieXRlcyBwZXIgcGl4ZWwgKDQpLgotICAgICAgICAgICAgcmV0dXJu
IHRleHR1cmVTaXplLndpZHRoKCkgKiB0ZXh0dXJlU2l6ZS5oZWlnaHQoKSAqIDQ7CisgICAgUGFz
c1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBnZXRJbnRlcm1lZGlhdGVTdXJmYWNlKCkKKyAgICB7Cisg
ICAgICAgIEludFNpemUgbmV3Vmlld3BvcnRTaXplID0gdGV4dHVyZU1hcHBlci0+dmlld3BvcnRT
aXplKCk7CisgICAgICAgIGlmIChuZXdWaWV3cG9ydFNpemUgIT0gdmlld3BvcnRTaXplKSB7Cisg
ICAgICAgICAgICB2aWV3cG9ydFNpemUgPSBuZXdWaWV3cG9ydFNpemU7CisgICAgICAgICAgICBz
dXJmYWNlcy5jbGVhcigpOwogICAgICAgICB9Ci0gICAgICAgIEVudHJ5KEJpdG1hcFRleHR1cmUq
IG5ld1RleHR1cmUpCi0gICAgICAgICAgICA6IHRleHR1cmUobmV3VGV4dHVyZSkKLSAgICAgICAg
eworICAgICAgICBpZiAoc3VyZmFjZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gbmV3U3VyZmFjZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUo
KTsKKyAgICAgICAgICAgIG5ld1N1cmZhY2UtPnJlc2V0KHZpZXdwb3J0U2l6ZSwgZmFsc2UpOwor
ICAgICAgICAgICAgcmV0dXJuIG5ld1N1cmZhY2UuZ2V0KCk7CiAgICAgICAgIH0KLSAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEVudHJ5JiBvdGhlcikgY29uc3QgeyByZXR1cm4gdGV4dHVy
ZSA9PSBvdGhlci50ZXh0dXJlOyB9Ci0gICAgICAgIGludCBwcmV2aW91c0Nvc3Q7Ci0gICAgfTsK
KyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHN1cmZhY2UgPSBzdXJmYWNlcy5sYXN0KCk7
CisgICAgICAgIHN1cmZhY2UtPnJlc2V0KHZpZXdwb3J0U2l6ZSwgZmFsc2UpOworICAgICAgICBz
dXJmYWNlcy5yZW1vdmVMYXN0KCk7CisgICAgICAgIHN1cmZhY2UtPmxvY2soKTsKKyAgICAgICAg
cmV0dXJuIHN1cmZhY2UuZ2V0KCk7CisgICAgfQogCi0gICAgVGV4dHVyZU1hcHBlckNhY2hlKCkK
LSAgICAgICAgOiBtX3RvdGFsQ29zdCgwKQorICAgIHZvaWQgcmVsZWFzZUludGVybWVkaWF0ZVN1
cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSkKICAgICB7CisgICAgICAgIGlmICghc3VyZmFj
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3VyZmFjZXMuYXBwZW5kKHN1cmZhY2Up
OworICAgICAgICBzdXJmYWNlLT51bmxvY2soKTsKICAgICB9Ci0KLSAgICB2b2lkIHB1cmdlKCk7
Ci0gICAgVmVjdG9yPEVudHJ5PiBtX2RhdGE7Ci0gICAgaW50IG1fdG90YWxDb3N0OwotI2lmbmRl
ZiBURVhNQVBfVEVYVFVSRV9DQUNIRV9LQlMKLSNkZWZpbmUgVEVYTUFQX1RFWFRVUkVfQ0FDSEVf
S0JTIDI0ICogMTAyNAotI2VuZGlmCi0gICAgc3RhdGljIGNvbnN0IGludCBNYXhDb3N0ID0gVEVY
TUFQX1RFWFRVUkVfQ0FDSEVfS0JTICogMTAyNDsKLSAgICBzdGF0aWMgY29uc3QgaW50IFB1cmdl
QW1vdW50ID0gTWF4Q29zdCAvIDQ7CiB9OwogCitUZXh0dXJlTWFwcGVyTm9kZSogdG9UZXh0dXJl
TWFwcGVyTm9kZShHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICByZXR1cm4gbGF5ZXIgPyB0
b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxheWVyKS0+bm9kZSgpIDogMDsKK30KIAotdm9p
ZCBUZXh0dXJlTWFwcGVyQ2FjaGU6OnB1cmdlKCkKK1RleHR1cmVNYXBwZXJOb2RlKiBUZXh0dXJl
TWFwcGVyTm9kZTo6cm9vdExheWVyKCkKIHsKLSAgICBjb25zdCBpbnQgc2l6ZSA9IG1fZGF0YS5z
aXplKCk7CisgICAgaWYgKG1fZWZmZWN0VGFyZ2V0KQorICAgICAgICByZXR1cm4gbV9lZmZlY3RU
YXJnZXQtPnJvb3RMYXllcigpOworICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgcmV0dXJuIG1f
cGFyZW50LT5yb290TGF5ZXIoKTsKKyAgICByZXR1cm4gdGhpczsKK30KIAotICAgIGlmIChtX3Rv
dGFsQ29zdCA8PSBUZXh0dXJlTWFwcGVyQ2FjaGU6Ok1heENvc3QpCit2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkK
K3sKKyAgICBpZiAobV90cmFuc2Zvcm1zLmJhc2UgPT0gbWF0cml4KQogICAgICAgICByZXR1cm47
CiAKLSAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIHRoZSByaWdodCBjb3VudC4gSXQgbWlnaHQg
YmUgaW5hY2N1cmF0ZSBpZiBjb250ZW50IGNoYW5nZWQgc2l6ZS4KLSAgICAvLyBXZSBvbmx5IGRv
IHRoaXMgd2hlbiB3ZSdyZSBhY3R1YWxseSByZWFkeSB0byBwdXJnZS4KLSAgICBtX3RvdGFsQ29z
dCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIG1fdG90
YWxDb3N0ICs9IG1fZGF0YVtpXS5jb21wdXRlQ29zdCgpOwotCi0gICAgZm9yIChpbnQgaSA9IHNp
emUtMTsgaSA+PSAwICYmIG1fdG90YWxDb3N0ID4gVGV4dHVyZU1hcHBlckNhY2hlOjpNYXhDb3N0
IC0gVGV4dHVyZU1hcHBlckNhY2hlOjpQdXJnZUFtb3VudDsgLS1pKSB7Ci0gICAgICAgIEVudHJ5
JiBlbnRyeSA9IG1fZGF0YVtpXTsKLSAgICAgICAgaWYgKGVudHJ5LnRleHR1cmUtPmlzTG9ja2Vk
KCkgfHwgIWVudHJ5LnRleHR1cmUtPmlzVmFsaWQoKSB8fCBlbnRyeS50ZXh0dXJlLT5pc1BhY2tl
ZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1fdG90YWxDb3N0IC09IGVudHJ5
LnByZXZpb3VzQ29zdDsKLSAgICAgICAgZW50cnkudGV4dHVyZS0+cGFjaygpOwotICAgICAgICBt
X2RhdGEucmVtb3ZlKGkpOwotICAgIH0KKyAgICBtX3RyYW5zZm9ybXMuYmFzZSA9IG1hdHJpeDsK
IH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyQ2FjaGU6Om1hcmsoQml0bWFwVGV4dHVyZSogdGV4dHVy
ZSkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVQZXJzcGVjdGl2ZVRyYW5zZm9ybUlm
TmVlZGVkKCkKIHsKLSAgICBpZiAoIXRleHR1cmUgfHwgIXRleHR1cmUtPmlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgRW50cnkgZW50cnkodGV4dHVyZSk7Ci0gICAgc2l6ZV90IGlu
ZGV4ID0gbV9kYXRhLmZpbmQoZW50cnkpOwotICAgIGlmICghaW5kZXgpCisgICAgaWYgKG1fY2hp
bGRyZW4uaXNFbXB0eSgpIHx8IG1fc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0uaXNJZGVudGl0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgcHJldmlvdXNDb3N0ID0gMDsKLQotICAgIGlm
IChpbmRleCA8IG1fZGF0YS5zaXplKCkpIHsKLSAgICAgICAgcHJldmlvdXNDb3N0ID0gbV9kYXRh
W2luZGV4XS5wcmV2aW91c0Nvc3Q7Ci0gICAgICAgIG1fZGF0YS5yZW1vdmUoaW5kZXgpOwotICAg
IH0KLSAgICBjb25zdCBpbnQgY29zdCA9IGVudHJ5LmNvbXB1dGVDb3N0KCk7Ci0gICAgbV90b3Rh
bENvc3QgLT0gcHJldmlvdXNDb3N0OwotICAgIG1fdG90YWxDb3N0ICs9IChlbnRyeS5wcmV2aW91
c0Nvc3QgPSBjb3N0KTsKLSAgICBtX2RhdGEucHJlcGVuZChlbnRyeSk7CisgICAgY29uc3QgRmxv
YXRQb2ludCBjZW50ZXJQb2ludCA9IEZsb2F0UG9pbnQobV9zaXplLndpZHRoKCkgLyAyLCBtX3Np
emUuaGVpZ2h0KCkgLyAyKTsKKyAgICBtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmUgPSBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpCisgICAgICAgICAgICAudHJhbnNsYXRlKGNlbnRlclBvaW50LngoKSwg
Y2VudGVyUG9pbnQueSgpKQorICAgICAgICAgICAgLm11bHRpcGx5KG1fc3RhdGUuY2hpbGRyZW5U
cmFuc2Zvcm0pCisgICAgICAgICAgICAudHJhbnNsYXRlKC1jZW50ZXJQb2ludC54KCksIC1jZW50
ZXJQb2ludC55KCkpOwogfQogCi1jbGFzcyBUZXh0dXJlTWFwcGVyQ2FjaGVMb2NrIHsKLXB1Ymxp
YzoKLSAgICBUZXh0dXJlTWFwcGVyQ2FjaGVMb2NrKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpIDog
bV90ZXh0dXJlKHRleHR1cmUpCi0gICAgewotICAgICAgICBpZiAobV90ZXh0dXJlKQotICAgICAg
ICAgICAgbV90ZXh0dXJlLT5sb2NrKCk7Ci0gICAgfQotICAgIH5UZXh0dXJlTWFwcGVyQ2FjaGVM
b2NrKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgICAgICBtX3RleHR1
cmUtPnVubG9jaygpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gbV90ZXh0dXJlOwotfTsKLQotCi1UZXh0dXJlTWFwcGVyQ2FjaGUqIFRleHR1cmVNYXBwZXJO
b2RlOjpjYWNoZSgpCitpbnQgVGV4dHVyZU1hcHBlck5vZGU6OmNvdW50RGVzY2VuZGFudHNXaXRo
Q29udGVudCgpIGNvbnN0CiB7Ci0gICAgVGV4dHVyZU1hcHBlck5vZGUqIHJvb3QgPSByb290TGF5
ZXIoKTsKLSAgICBpZiAoIXJvb3QpCisgICAgaWYgKCFtX3N0YXRlLnZpc2libGUgfHwgbV9vcGFj
aXR5IDwgMC4wMSB8fCAoIW1fc2l6ZS53aWR0aCgpICYmICFtX3NpemUuaGVpZ2h0KCkgJiYgbV9z
dGF0ZS5tYXNrc1RvQm91bmRzKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFyb290LT5t
X2NhY2hlKQotICAgICAgICByb290LT5tX2NhY2hlID0gbmV3IFRleHR1cmVNYXBwZXJDYWNoZTsK
LSAgICByZXR1cm4gcm9vdC0+bV9jYWNoZTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEludFJlY3QgcmVjdCkKLXsKLSAgICBpZiAobV9wbGF0Zm9y
bUNsaWVudCkgewotICAgICAgICBpZiAobV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpIHsK
LSAgICAgICAgICAgIG1fcGxhdGZvcm1DbGllbnQtPnNldE5lZWRzRGlzcGxheSgpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHJlY3QuaW50ZXJzZWN0KEludFJlY3Qo
MCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICBpZiAocmVj
dC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fcGxhdGZvcm1DbGll
bnQtPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpbnQgY291bnQgPSAobV9zaXplLndpZHRoKCkgJiYgbV9zaXplLmhlaWdodCgpICYmICht
X3N0YXRlLmRyYXdzQ29udGVudCB8fCBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhU
TUxDb250ZW50VHlwZSkpID8gMSA6IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2No
aWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBjb3VudCArPSBtX2NoaWxkcmVuW2ldLT5jb3Vu
dERlc2NlbmRhbnRzV2l0aENvbnRlbnQoKTsKIAotICAgIGlmICghbV9wYXJlbnQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fcGFyZW50LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Cisg
ICAgcmV0dXJuIGNvdW50OwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXROZWVkc0Rp
c3BsYXkoKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZU92ZXJsYXBzSWZOZWVkZWQo
KQogewotICAgIGlmIChtX2VmZmVjdFRhcmdldCkKLSAgICAgICAgbV9lZmZlY3RUYXJnZXQtPnNl
dE5lZWRzRGlzcGxheSgpOwotICAgIGlmIChtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX3N0YXRlLmRyYXdzQ29udGVu
dCB8fCBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhUTUxDb250ZW50VHlwZSkKLSAg
ICAgICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KG1fdHJhbnNmb3Jtcy50YXJnZXRCb3VuZGluZ1Jl
Y3QpOworICAgIG1fc3RhdGUubWlnaHRIYXZlT3ZlcmxhcHMgPSBjb3VudERlc2NlbmRhbnRzV2l0
aENvbnRlbnQoKSA+IDE7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldFBsYXRmb3Jt
TGF5ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50KiBjbGllbnQpCit2b2lkIFRleHR1
cmVNYXBwZXJOb2RlOjpjb21wdXRlUmVwbGljYVRyYW5zZm9ybUlmTmVlZGVkKCkKIHsKLSAgICBt
X3BsYXRmb3JtQ2xpZW50ID0gY2xpZW50OwotfQorICAgIGlmICghbV9zdGF0ZS5yZXBsaWNhTGF5
ZXIpCisgICAgICAgIHJldHVybjsKIAotaW50IFRleHR1cmVNYXBwZXJOb2RlOjpjb21wYXJlR3Jh
cGhpY3NMYXllcnNaVmFsdWUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKLXsKLSAgICB0
eXBlZGVmIGNvbnN0IFRleHR1cmVNYXBwZXJOb2RlKiBOb2RlUHRyOwotICAgIGNvbnN0IE5vZGVQ
dHIqIG5vZGVBID0gc3RhdGljX2Nhc3Q8Y29uc3QgTm9kZVB0cio+KGEpOwotICAgIGNvbnN0IE5v
ZGVQdHIqIG5vZGVCID0gc3RhdGljX2Nhc3Q8Y29uc3QgTm9kZVB0cio+KGIpOwotICAgIHJldHVy
biBpbnQoKCgqbm9kZUEpLT5tX3RyYW5zZm9ybXMuY2VudGVyWiAtICgqbm9kZUIpLT5tX3RyYW5z
Zm9ybXMuY2VudGVyWikgKiAxMDAwKTsKKyAgICBtX3RyYW5zZm9ybXMucmVwbGljYSA9CisgICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KG1fdHJhbnNmb3Jtcy50YXJnZXQpCisgICAgICAgICAg
ICAubXVsdGlwbHkobV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fdHJhbnNmb3Jtcy5sb2NhbCkKKyAg
ICAgICAgICAgIC5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3RyYW5zZm9ybXMudGFy
Z2V0KS5pbnZlcnNlKCkpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzb3J0QnlaT3Jk
ZXIoVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKiA+JiBhcnJheSwgaW50IGZpcnN0LCBpbnQgbGFz
dCkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMb2NhbFRyYW5zZm9ybUlmTmVlZGVk
KCkKIHsKLSAgICBxc29ydChhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgc2l6ZW9mKFRleHR1
cmVNYXBwZXJOb2RlKiksIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wYXJlR3JhcGhpY3NMYXllcnNa
VmFsdWUpOworICAgIGZsb2F0IG9yaWdpblggPSBtX3N0YXRlLmFuY2hvclBvaW50LngoKSAqIG1f
c2l6ZS53aWR0aCgpOworICAgIGZsb2F0IG9yaWdpblkgPSBtX3N0YXRlLmFuY2hvclBvaW50Lnko
KSAqIG1fc2l6ZS5oZWlnaHQoKTsKKyAgICBtX3RyYW5zZm9ybXMubG9jYWwgPQorICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpCisgICAgICAgIC50cmFuc2xhdGUzZChvcmlnaW5YICsgbV9z
dGF0ZS5wb3MueCgpLCBvcmlnaW5ZICsgbV9zdGF0ZS5wb3MueSgpLCBtX3N0YXRlLmFuY2hvclBv
aW50LnooKSApCisgICAgICAgIC5tdWx0aXBseShtX3RyYW5zZm9ybXMuYmFzZSkKKyAgICAgICAg
LnRyYW5zbGF0ZTNkKC1vcmlnaW5YLCAtb3JpZ2luWSwgLW1fc3RhdGUuYW5jaG9yUG9pbnQueigp
KTsKIH0KIAotYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6aGFzU3VyZmFjZURlc2NlbmRhbnRzKCkg
Y29uc3QKK2Jvb2wgVGV4dHVyZU1hcHBlck5vZGU6Om5lZWRzVG9Db21wdXRlQm91bmRpbmdSZWN0
KCkgY29uc3QKIHsKLSAgICBpZiAobV9sYXllclR5cGUgPT0gQ2xpcExheWVyIHx8IG1fbGF5ZXJU
eXBlID09IFRyYW5zcGFyZW5jeUxheWVyIHx8IG1fc3RhdGUucmVwbGljYUxheWVyKQorICAgIGlm
IChtX3NpemUud2lkdGgoKSA+IGdUaWxlRGltZW5zaW9uIHx8IG1fc2l6ZS5oZWlnaHQoKSA+IGdU
aWxlRGltZW5zaW9uKQogICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW1fc3RhdGUubWFz
a3NUb0JvdW5kcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgaW50IHNpemUg
PSBtX2NoaWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGNoaWxkID0gbV9jaGlsZHJlbltpXSkg
ewotICAgICAgICAgICAgaWYgKGNoaWxkLT5oYXNTdXJmYWNlRGVzY2VuZGFudHMoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWludCBUZXh0dXJlTWFwcGVyTm9kZTo6Y291bnREZXNjZW5kYW50c1dpdGhDb250
ZW50KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fc3RhdGUudmlzaWJsZSB8fCBtX3N0YXRlLm9wYWNp
dHkgPCAwLjAwMSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpbnQgZGVzY2VuZGFudHNXaXRo
Q29udGVudCA9IChtX3N0YXRlLmRyYXdzQ29udGVudCB8fCBtX2N1cnJlbnRDb250ZW50LmNvbnRl
bnRUeXBlICE9IEhUTUxDb250ZW50VHlwZSkgPyAxIDogMDsKLQotICAgIGNvbnN0IGludCBzaXpl
ID0gbV9jaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBjaGlsZCA9IG1fY2hpbGRyZW5baV0p
Ci0gICAgICAgICAgICBkZXNjZW5kYW50c1dpdGhDb250ZW50ICs9IGNoaWxkLT5jb3VudERlc2Nl
bmRhbnRzV2l0aENvbnRlbnQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVzY2VuZGFudHNXaXRo
Q29udGVudDsKLX0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgp
OyArK2kpCisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldLT5uZWVkc1RvQ29tcHV0ZUJvdW5kaW5n
UmVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLVRleHR1cmVNYXBwZXJOb2RlKiBU
ZXh0dXJlTWFwcGVyTm9kZTo6dG9UZXh0dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVyKiBsYXll
cikKLXsKLSAgICByZXR1cm4gbGF5ZXIgPyBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyTm9kZSo+
KGxheWVyLT5wbGF0Zm9ybUxheWVyKCkpIDogMDsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMYXllclR5cGUoKQordm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6Y29tcHV0ZUFsbFRyYW5zZm9ybXMoKQogewotICAgIGNvbnN0IGJvb2wgc2VsZkhh
c0NvbnRlbnQgPSBtX3N0YXRlLmRyYXdzQ29udGVudCB8fCAobV9jdXJyZW50Q29udGVudC5jb250
ZW50VHlwZSAhPSBIVE1MQ29udGVudFR5cGUpOwotICAgIGNvbnN0IGJvb2wgaGFzRGVzY2VuZGFu
dHNXaXRoQ29udGVudCA9IG1fc3RhdGUuZGVzY2VuZGFudHNXaXRoQ29udGVudCAtIChzZWxmSGFz
Q29udGVudCA/IDEgOiAwKTsKLSAgICBjb25zdCBib29sIGhhc1RyYW5zcGFyZW5jeSA9IG1fc3Rh
dGUub3BhY2l0eSA8IDAuOTkgfHwgbV9zdGF0ZS5tYXNrTGF5ZXI7Ci0gICAgY29uc3QgYm9vbCBo
YXNSZXBsaWNhID0gbV9zdGF0ZS5yZXBsaWNhTGF5ZXI7Ci0KLSAgICAvLyAgRGVmYXVsdExheWVy
OiBkcmF3cyBpdHNlbGYgYW5kIGl0cyBjaGlsZHJlbiBkaXJlY3RseSB0byB0aGUgY3VycmVudCBm
cmFtZWJ1ZmZlci4KLSAgICAvLyAgICAgICAgICAgICAgICBhbnkgbGF5ZXIgdGhhdCBkb2Vzbid0
IGNvbmZvcm0gdG8gdGhlIG90aGVyIHJ1bGVzIGlzIGEgRGVmYXVsdExheWVyLgotICAgIG1fbGF5
ZXJUeXBlID0gRGVmYXVsdExheWVyOwotCi0gICAgLy8gIFJvb3RMYXllcjogdGhlIHRvcCBsZXZl
bC4gRHJhd3MgdG8gYSBmcmFtZWJ1ZmZlciwgYW5kIHRoZSB0YXJnZXQgdGV4dHVyZSBkcmF3cyBp
bnRvIHRoZSB2aWV3cG9ydC4KLSAgICAvLyAgICAgICAgICAgIG9ubHkgb25lIGxheWVyIGlzIHRo
ZSByb290IGxheWVyLgotICAgIGlmICghbV9wYXJlbnQgJiYgIW1fZWZmZWN0VGFyZ2V0KSB7Ci0g
ICAgICAgIG1fbGF5ZXJUeXBlID0gUm9vdExheWVyOworICAgIGlmIChtX3NpemUuaXNFbXB0eSgp
ICYmIG1fc3RhdGUubWFza3NUb0JvdW5kcykKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAg
IC8vIEEgbGF5ZXIgd2l0aCBubyBjb250ZW50cyBpcyBhbHdheXMgYSBkZWZhdWx0IGxheWVyLgot
ICAgIGlmICghbV9zdGF0ZS5kZXNjZW5kYW50c1dpdGhDb250ZW50KQotICAgICAgICByZXR1cm47
CisgICAgY29tcHV0ZUxvY2FsVHJhbnNmb3JtSWZOZWVkZWQoKTsKKyAgICBjb21wdXRlUmVwbGlj
YVRyYW5zZm9ybUlmTmVlZGVkKCk7CisgICAgY29tcHV0ZVBlcnNwZWN0aXZlVHJhbnNmb3JtSWZO
ZWVkZWQoKTsKIAotICAgIC8vICBDbGlwTGF5ZXI6IGNyZWF0ZXMgYSBuZXcgZnJhbWVidWZmZXIs
IHRoZSBzaXplIG9mIHRoZSBsYXllciwgYW5kIHRoZW4gcGFpbnRzIGl0IHRvIHRoZSBlbmNsb3Np
bmcgQml0bWFwVGV4dHVyZSB3aXRoIHRoZSBsYXllcidzIHRyYW5zZm9ybS9vcGFjaXR5LgotICAg
IC8vICAgICAgICAgICAgICBBIGNsaXAgbGF5ZXIgaXMgYSBsYXllciB0aGF0IG1hc2tzIHRvIGJv
dW5kcywgZG9lc24ndCBwcmVzZXJ2ZSAzRCwgaGFzIGNoaWxkcmVuLCBhbmQgaGFzIGEgdHJhbnNw
YXJlbmN5L21hc2sgb3IgYSBub24tcmVjdGFuZ3VsYXIgdHJhbnNmb3JtLgotICAgIGlmIChoYXNE
ZXNjZW5kYW50c1dpdGhDb250ZW50ICYmIG1fc3RhdGUubWFza0xheWVyKSB7Ci0gICAgICAgIG1f
bGF5ZXJUeXBlID0gQ2xpcExheWVyOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fdHJh
bnNmb3Jtcy50YXJnZXQgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3BhcmVudCA/IG1fcGFyZW50
LT5tX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMgOiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKS5t
dWx0aXBseShtX3RyYW5zZm9ybXMubG9jYWwpOworICAgIG1fdHJhbnNmb3Jtcy50YXJnZXRCb3Vu
ZGluZ1JlY3QgPSBGbG9hdFJlY3QobV90cmFuc2Zvcm1zLnRhcmdldC5tYXBSZWN0KHRhcmdldFJl
Y3QoKSkpOwogCi0gICAgLy8gIFNjaXNzb3JMYXllcjogZHJhd3MgdG8gdGhlIGN1cnJlbnQgZnJh
bWVidWZmZXIsIGFuZCBhcHBsaWVzIGFuIGV4dHJhIHNjaXNzb3IgYmVmb3JlIGRyYXdpbmcgaXRz
IGNoaWxkcmVuLgotICAgIC8vICAgICAgICAgICAgICAgIEEgc2Npc3NvciBsYXllciBpcyBhIGxh
eWVyIHdpdGggY2hpbGRyZW4gdGhhdCBtYXNrcyB0byBib3VuZHMsIGlzIG5vdCBhIHRyYW5zcGFy
ZW5jeSBsYXllciwgYW5kIGhhcyBhIHJlY3Rhbmd1bGFyIGNsaXAuCi0gICAgaWYgKG1fc3RhdGUu
bWFza3NUb0JvdW5kcyAmJiBoYXNEZXNjZW5kYW50c1dpdGhDb250ZW50KSB7Ci0gICAgICAgIGlm
IChoYXNUcmFuc3BhcmVuY3kgfHwgIW1fc3RhdGUudHJhbnNmb3JtLmlzSWRlbnRpdHlPclRyYW5z
bGF0aW9uKCkgfHwgbV9wYXJlbnQtPm1fc3RhdGUucHJlc2VydmVzM0QpCi0gICAgICAgICAgICBt
X2xheWVyVHlwZSA9IENsaXBMYXllcjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9sYXll
clR5cGUgPSBTY2lzc29yTGF5ZXI7CisgICAgbV9zdGF0ZS52aXNpYmxlID0gbV9zdGF0ZS5iYWNr
ZmFjZVZpc2liaWxpdHkgfHwgbV90cmFuc2Zvcm1zLnRhcmdldC5pbnZlcnNlKCkubTMzKCkgPj0g
MDsKKyAgICBpZiAoIW1fc3RhdGUudmlzaWJsZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAot
ICAgIC8vICBUcmFuc3BhcmVuY3lMYXllcjogY3JlYXRlcyBhIG5ldyBmcmFtZWJ1ZmZlciBpZGV0
aWNhbCBpbiBzaXplIHRvIHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyLiBUaGVuIGRyYXdzIHRoZSBm
YidzIHRleHR1cmUgdG8gdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIgd2l0aCBpZGVudGl0eSB0cmFu
c2Zvcm0uCi0gICAgLy8gICAgICAgICAgICAgICAgICAgICBVc2VkIGZvciBsYXllcnMgd2l0aCBj
aGlsZHJlbiBhbmQgdHJhbnNwYXJlbmN5L21hc2sgdGhhdCBwcmVzZXJ2ZSAzRCBvciBkb24ndCBt
YXNrIHRvIGJvdW5kcy4KLSAgICBpZiAoKGhhc1JlcGxpY2EgJiYgaGFzRGVzY2VuZGFudHNXaXRo
Q29udGVudCkgfHwgKGhhc1JlcGxpY2EgJiYgaGFzVHJhbnNwYXJlbmN5KSB8fCAoaGFzVHJhbnNw
YXJlbmN5ICYmIG1fc3RhdGUuZGVzY2VuZGFudHNXaXRoQ29udGVudCA+IDEpKQotICAgICAgICBt
X2xheWVyVHlwZSA9IFRyYW5zcGFyZW5jeUxheWVyOwotfQorICAgIC8vIFRoaXMgdHJhbnNmb3Jt
IGlzIG9ubHkgYXBwbGllZCBpZiB1c2luZyBhIHR3by1wYXNzIGZvciB0aGUgcmVwbGljYSwgYmVj
YXVzZSB0aGUgdHJhbnNmb3JtIG5lZWRzIHRvIGJlIGFkanVzdGVkIHRvIHRoZSBzaXplIG9mIHRo
ZSBpbnRlcm1lZGlhdGUgc3VyZmFjZSwgaW5zdGVhZiBvZiB0aGUgc2l6ZSBvZiB0aGUgY29udGVu
dCBsYXllci4KKyAgICBpZiAobV9wYXJlbnQgJiYgbV9wYXJlbnQtPm1fc3RhdGUucHJlc2VydmVz
M0QpCisgICAgICAgIG1fdHJhbnNmb3Jtcy5jZW50ZXJaID0gbV90cmFuc2Zvcm1zLnRhcmdldC5t
YXBQb2ludChGbG9hdFBvaW50M0QobV9zaXplLndpZHRoKCkgLyAyLCBtX3NpemUuaGVpZ2h0KCkg
LyAyLCAwKSkueigpOwogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjppbml0aWFsaXplVGV4dHVy
ZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQotewotICAgIGlmIChtX3RleHR1
cmUpCisgICAgaWYgKCFtX2NoaWxkcmVuLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1f
c3VyZmFjZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKLSAgICBtX3JlcGxpY2FT
dXJmYWNlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOwotICAgIG1fdGV4dHVyZSA9
IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKLSAgICBjYWNoZSgpLT5tYXJrKG1fdGV4
dHVyZS5nZXQoKSk7Ci19Ci0KLVRleHR1cmVNYXBwZXJOb2RlOjpUZXh0dXJlTWFwcGVyTm9kZSgp
Ci0gICAgOiBtX2xheWVyVHlwZShEZWZhdWx0TGF5ZXIpCi0gICAgLCBtX3N1cmZhY2UoMCkKLSAg
ICAsIG1fcGFyZW50KDApCi0gICAgLCBtX2VmZmVjdFRhcmdldCgwKQotICAgICwgbV9wbGF0Zm9y
bUNsaWVudCgwKQotICAgICwgbV9jYWNoZSgwKQotewotfQogCi1UZXh0dXJlTWFwcGVyTm9kZSog
VGV4dHVyZU1hcHBlck5vZGU6OnJvb3RMYXllcigpCi17Ci0gICAgaWYgKG1fZWZmZWN0VGFyZ2V0
KQotICAgICAgICByZXR1cm4gbV9lZmZlY3RUYXJnZXQtPnJvb3RMYXllcigpOwotICAgIGlmICht
X3BhcmVudCkKLSAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5yb290TGF5ZXIoKTsKLSAgICByZXR1
cm4gdGhpczsKLX0KKyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMgPSBtX3RyYW5zZm9y
bXMudGFyZ2V0OwogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjppbnZhbGlkYXRlVHJhbnNmb3Jt
KCkKLXsKLSAgICBtX3RyYW5zZm9ybXMuZGlydHkgPSB0cnVlOwotICAgIGlmIChtX2xheWVyVHlw
ZSAhPSBDbGlwTGF5ZXIpCi0gICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOwotICAgIGlmICht
X3N0YXRlLnJlcGxpY2FMYXllcikKLSAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPmludmFs
aWRhdGVUcmFuc2Zvcm0oKTsKLSAgICBjb25zdCBpbnQgc2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgp
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChUZXh0
dXJlTWFwcGVyTm9kZSogbGF5ZXIgPSBtX2NoaWxkcmVuW2ldKQotICAgICAgICAgICAgbGF5ZXIt
PmludmFsaWRhdGVUcmFuc2Zvcm0oKTsKKyAgICBpZiAoIW1fc3RhdGUucHJlc2VydmVzM0QpIHsK
KyAgICAgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzID0gVHJhbnNmb3JtYXRpb25NYXRy
aXgoCisgICAgICAgICAgICAgICAgICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5tMTEo
KSwgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLm0xMigpLCAwLCBtX3RyYW5zZm9ybXMuZm9y
RGVzY2VuZGFudHMubTE0KCksCisgICAgICAgICAgICAgICAgICAgIG1fdHJhbnNmb3Jtcy5mb3JE
ZXNjZW5kYW50cy5tMjEoKSwgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLm0yMigpLCAwLCBt
X3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMubTI0KCksCisgICAgICAgICAgICAgICAgICAgIDAs
IDAsIDEsIDAsCisgICAgICAgICAgICAgICAgICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50
cy5tNDEoKSwgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLm00MigpLCAwLCBtX3RyYW5zZm9y
bXMuZm9yRGVzY2VuZGFudHMubTQ0KCkpOwogICAgIH0KLX0KIAotdm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6Y29tcHV0ZUxvY2FsVHJhbnNmb3JtKCkKLXsKLSAgICBpZiAoIW1fdHJhbnNmb3Jtcy5s
b2NhbERpcnR5KQotICAgICAgICByZXR1cm47Ci0gICAgY29uc3QgZmxvYXQgb3JpZ2luWCA9IG1f
c3RhdGUuYW5jaG9yUG9pbnQueCgpICogbV9zaXplLndpZHRoKCk7Ci0gICAgY29uc3QgZmxvYXQg
b3JpZ2luWSA9IG1fc3RhdGUuYW5jaG9yUG9pbnQueSgpICogbV9zaXplLmhlaWdodCgpOwotICAg
IG1fdHJhbnNmb3Jtcy5sb2NhbCA9Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCkKLSAg
ICAgICAgLnRyYW5zbGF0ZTNkKG9yaWdpblggKyBtX3N0YXRlLnBvcy54KCksIG9yaWdpblkgKyBt
X3N0YXRlLnBvcy55KCksIG1fc3RhdGUuYW5jaG9yUG9pbnQueigpKQotICAgICAgICAubXVsdGlw
bHkobV9zdGF0ZS50cmFuc2Zvcm0pCi0gICAgICAgIC50cmFuc2xhdGUzZCgtb3JpZ2luWCwgLW9y
aWdpblksIC1tX3N0YXRlLmFuY2hvclBvaW50LnooKSk7Ci0gICAgbV90cmFuc2Zvcm1zLmxvY2Fs
RGlydHkgPSBmYWxzZTsKKyAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMubXVsdGlwbHko
bV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
ZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNzYXJ5KCkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNv
bXB1dGVCb3VuZGluZ1JlY3RGcm9tUm9vdElmTmVlZGVkKCkKIHsKLSAgICBpZiAobV9zdGF0ZS5w
cmVzZXJ2ZXMzRCkKKyAgICBpZiAoIW5lZWRzVG9Db21wdXRlQm91bmRpbmdSZWN0KCkpCiAgICAg
ICAgIHJldHVybjsKLQotICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMTMoMCk7
Ci0gICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0yMygwKTsKLSAgICBtX3RyYW5z
Zm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTMxKDApOwotICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNj
ZW5kYW50cy5zZXRNMzIoMCk7Ci0gICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0z
MygxKTsKLSAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTM0KDApOwotICAgIG1f
dHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNNDMoMCk7Ci19Ci0KLUludFNpemUgVGV4dHVy
ZU1hcHBlck5vZGU6Om5lYXJlc3RTdXJmYWNlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fbGF5
ZXJUeXBlID09IENsaXBMYXllciB8fCBtX2xheWVyVHlwZSA9PSBSb290TGF5ZXIpCi0gICAgICAg
IHJldHVybiBtX3N1cmZhY2UgJiYgIW1fc3VyZmFjZS0+c2l6ZSgpLmlzRW1wdHkoKSA/IG1fc3Vy
ZmFjZS0+c2l6ZSgpIDogbV9zaXplOwotICAgIHJldHVybiBtX3BhcmVudC0+bmVhcmVzdFN1cmZh
Y2VTaXplKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVSZXBsaWNhVHJh
bnNmb3JtKCkKLXsKLSAgICBpZiAoIW1fc3RhdGUucmVwbGljYUxheWVyKQorICAgIGlmICghbV9w
YXJlbnQpIHsKKyAgICAgICAgbV90cmFuc2Zvcm1zLmJvdW5kaW5nUmVjdEZyb21Sb290ID0gbV90
cmFuc2Zvcm1zLmJvdW5kaW5nUmVjdEZyb21Sb290Rm9yRGVzY2VuZGFudHMgPSBJbnRSZWN0KDAs
IDAsIC0xLCAtMSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBtX25lYXJlc3RTdXJm
YWNlU2l6ZSA9IG5lYXJlc3RTdXJmYWNlU2l6ZSgpOworICAgIGNvbnN0IEZsb2F0UmVjdCB0YXJn
ZXRSZWN0SW5Sb290Q29vcmRpbmF0ZXMgPSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFJlY3QodGFy
Z2V0UmVjdCgpKTsKIAotICAgIGlmIChtX2xheWVyVHlwZSAhPSBUcmFuc3BhcmVuY3lMYXllcikg
ewotICAgICAgICBtX3RyYW5zZm9ybXMucmVwbGljYSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KG1f
dHJhbnNmb3Jtcy50YXJnZXQpLm11bHRpcGx5KG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3RyYW5z
Zm9ybXMubG9jYWwpOwotICAgICAgICByZXR1cm47CisgICAgY29uc3QgRmxvYXRSZWN0IHBhcmVu
dEJvdW5kaW5nUmVjdCA9IG1fcGFyZW50LT5tX3RyYW5zZm9ybXMuYm91bmRpbmdSZWN0RnJvbVJv
b3RGb3JEZXNjZW5kYW50czsKKyAgICBpZiAocGFyZW50Qm91bmRpbmdSZWN0LndpZHRoKCkgPCAw
KQorICAgICAgICBtX3RyYW5zZm9ybXMuYm91bmRpbmdSZWN0RnJvbVJvb3QgPSB0YXJnZXRSZWN0
SW5Sb290Q29vcmRpbmF0ZXM7CisgICAgZWxzZSB7CisgICAgICAgIG1fdHJhbnNmb3Jtcy5ib3Vu
ZGluZ1JlY3RGcm9tUm9vdEZvckRlc2NlbmRhbnRzID0gbV90cmFuc2Zvcm1zLmJvdW5kaW5nUmVj
dEZyb21Sb290ID0gcGFyZW50Qm91bmRpbmdSZWN0OworICAgICAgICBtX3RyYW5zZm9ybXMuYm91
bmRpbmdSZWN0RnJvbVJvb3QuaW50ZXJzZWN0KHRhcmdldFJlY3RJblJvb3RDb29yZGluYXRlcyk7
CiAgICAgfQotCi0gICAgY29uc3QgZmxvYXQgb3JpZ2luWCA9IG1fdHJhbnNmb3Jtcy50YXJnZXQu
bTQxKCk7Ci0gICAgY29uc3QgZmxvYXQgb3JpZ2luWSA9IG1fdHJhbnNmb3Jtcy50YXJnZXQubTQy
KCk7Ci0gICAgbV90cmFuc2Zvcm1zLnJlcGxpY2EgPQotICAgICAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXgoKQotICAgICAgICAgICAgICAgIC50cmFuc2xhdGUob3JpZ2luWCwgb3JpZ2luWSkK
LSAgICAgICAgICAgICAgICAubXVsdGlwbHkobV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fdHJhbnNm
b3Jtcy5sb2NhbCkKLSAgICAgICAgICAgICAgICAudHJhbnNsYXRlKC1vcmlnaW5YLCAtb3JpZ2lu
WSk7CisgICAgaWYgKG1fc3RhdGUubWFza3NUb0JvdW5kcykKKyAgICAgICAgbV90cmFuc2Zvcm1z
LmJvdW5kaW5nUmVjdEZyb21Sb290Rm9yRGVzY2VuZGFudHMuaW50ZXJzZWN0KG1fdHJhbnNmb3Jt
cy5ib3VuZGluZ1JlY3RGcm9tUm9vdCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNv
bXB1dGVUcmFuc2Zvcm1hdGlvbnMoKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVRp
bGVzKCkKIHsKLSAgICBpZiAoIW1fdHJhbnNmb3Jtcy5kaXJ0eSkKKyAgICBpZiAobV9jdXJyZW50
Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgJiYgIW1fc3RhdGUuZHJhd3ND
b250ZW50KSB7CisgICAgICAgIG1fdGlsZXMuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlc1RvQWRkOworICAgIFZlY3RvcjxpbnQ+IHRp
bGVzVG9SZW1vdmU7CisgICAgY29uc3QgaW50IFRpbGVFcmFzZVRocmVzaG9sZCA9IDY7CisgICAg
RmxvYXRTaXplIHNpemUgPSBjb250ZW50U2l6ZSgpOworICAgIEZsb2F0UmVjdCBjb250ZW50UmVj
dCgwLCAwLCBzaXplLndpZHRoKCkgKiBtX3N0YXRlLmNvbnRlbnRTY2FsZSwgc2l6ZS5oZWlnaHQo
KSAqIG1fc3RhdGUuY29udGVudFNjYWxlKTsKIAotICAgIG1fdHJhbnNmb3Jtcy5kaXJ0eSA9IGZh
bHNlOwotICAgIGlmICgobV9zaXplLmlzRW1wdHkoKSAmJiBtX3N0YXRlLm1hc2tzVG9Cb3VuZHMp
KQotICAgICAgICByZXR1cm47CisgICAgZm9yIChmbG9hdCB5ID0gMDsgeSA8IGNvbnRlbnRSZWN0
LmhlaWdodCgpOyB5ICs9IGdUaWxlRGltZW5zaW9uKSB7CisgICAgICAgIGZvciAoZmxvYXQgeCA9
IDA7IHggPCBjb250ZW50UmVjdC53aWR0aCgpOyB4ICs9IGdUaWxlRGltZW5zaW9uKSB7CisgICAg
ICAgICAgICBGbG9hdFJlY3QgdGlsZVJlY3QoeCwgeSwgZ1RpbGVEaW1lbnNpb24sIGdUaWxlRGlt
ZW5zaW9uKTsKKyAgICAgICAgICAgIHRpbGVSZWN0LmludGVyc2VjdChjb250ZW50UmVjdCk7Cisg
ICAgICAgICAgICBGbG9hdFJlY3QgdGlsZVJlY3RJblJvb3RDb29yZGluYXRlcyA9IHRpbGVSZWN0
OworICAgICAgICAgICAgdGlsZVJlY3RJblJvb3RDb29yZGluYXRlcy5zY2FsZSgxLjAgLyBtX3N0
YXRlLmNvbnRlbnRTY2FsZSk7CisgICAgICAgICAgICB0aWxlUmVjdEluUm9vdENvb3JkaW5hdGVz
ID0gbV90cmFuc2Zvcm1zLnRhcmdldC5tYXBSZWN0KHRpbGVSZWN0SW5Sb290Q29vcmRpbmF0ZXMp
OworICAgICAgICAgICAgc3RhdGljIGJvb2wgc0Rpc2NhcmRIaWRkZW5UaWxlcyA9IGZhbHNlOwor
ICAgICAgICAgICAgLy8gRklYTUU6IGRpc2NhcmQgaGlkZGVuIHRpbGVzLgorICAgICAgICAgICAg
aWYgKCFzRGlzY2FyZEhpZGRlblRpbGVzIHx8ICFuZWVkc1RvQ29tcHV0ZUJvdW5kaW5nUmVjdCgp
IHx8IHRpbGVSZWN0SW5Sb290Q29vcmRpbmF0ZXMuaW50ZXJzZWN0cyhtX3N0YXRlLnZpc2libGVS
ZWN0KSkKKyAgICAgICAgICAgICAgICB0aWxlc1RvQWRkLmFwcGVuZCh0aWxlUmVjdCk7CisgICAg
ICAgIH0KKyAgICB9CiAKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogcGFyZW50ID0gbV9wYXJlbnQ7
Ci0gICAgY29tcHV0ZUxvY2FsVHJhbnNmb3JtKCk7CisgICAgZm9yIChpbnQgaSA9IG1fdGlsZXMu
c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgY29uc3QgRmxvYXRSZWN0IG9sZFRp
bGUgPSBtX3RpbGVzW2ldLnJlY3Q7CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKIAotICAg
IG1fdHJhbnNmb3Jtcy50YXJnZXQgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChwYXJlbnQgPyBwYXJl
bnQtPm1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cyA6IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkp
Lm11bHRpcGx5KG1fdHJhbnNmb3Jtcy5sb2NhbCk7Ci0gICAgbV90cmFuc2Zvcm1zLmZvckRlc2Nl
bmRhbnRzID0gKG1fbGF5ZXJUeXBlID09IENsaXBMYXllciA/IFRyYW5zZm9ybWF0aW9uTWF0cml4
KCkgOiBtX3RyYW5zZm9ybXMudGFyZ2V0KTsKKyAgICAgICAgZm9yIChpbnQgaiA9IHRpbGVzVG9B
ZGQuc2l6ZSgpIC0gMTsgaiA+PSAwOyAtLWopIHsKKyAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVj
dCBuZXdUaWxlID0gdGlsZXNUb0FkZFtqXTsKKyAgICAgICAgICAgIGlmIChvbGRUaWxlICE9IG5l
d1RpbGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICBpZiAobV9lZmZlY3RUYXJn
ZXQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHRpbGVzVG9BZGQucmVtb3ZlKGopOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
IAotICAgIG1fdHJhbnNmb3Jtcy50YXJnZXRCb3VuZGluZ1JlY3QgPSBJbnRSZWN0KG1fdHJhbnNm
b3Jtcy50YXJnZXQubWFwUmVjdChlbnRpcmVSZWN0KCkpKTsKLSAgICBpZiAobV9zdGF0ZS5yZXBs
aWNhTGF5ZXIpCi0gICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5jb21wdXRlVHJhbnNmb3Jt
YXRpb25zKCk7CisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICB0aWxlc1RvUmVtb3Zl
LmFwcGVuZChpKTsKKyAgICB9CiAKLSAgICBmbGF0dGVuVG8yRFNwYWNlSWZOZWNlc3NhcnkoKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVzVG9BZGQuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKCF0aWxlc1RvUmVtb3ZlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgVGlsZSYg
dGlsZSA9IG1fdGlsZXNbdGlsZXNUb1JlbW92ZVswXV07CisgICAgICAgICAgICB0aWxlc1RvUmVt
b3ZlLnJlbW92ZSgwKTsKKyAgICAgICAgICAgIHRpbGUucmVjdCA9IHRpbGVzVG9BZGRbaV07Cisg
ICAgICAgICAgICB0aWxlLm5lZWRzUmVzZXQgPSB0cnVlOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KIAotICAgIGlmICghbV9zdGF0ZS5iYWNrZmFjZVZpc2liaWxpdHkgJiYgbV90
cmFuc2Zvcm1zLnRhcmdldC5pbnZlcnNlKCkubTMzKCkgPCAwKSB7Ci0gICAgICAgIG1fc3RhdGUu
dmlzaWJsZSA9IGZhbHNlOwotICAgICAgICByZXR1cm47CisgICAgICAgIFRpbGUgdGlsZTsKKyAg
ICAgICAgdGlsZS5yZWN0ID0gdGlsZXNUb0FkZFtpXTsKKyAgICAgICAgdGlsZS5uZWVkc1Jlc2V0
ID0gdHJ1ZTsKKyAgICAgICAgbV90aWxlcy5hcHBlbmQodGlsZSk7CiAgICAgfQotICAgIG1fc3Rh
dGUudmlzaWJsZSA9IHRydWU7Ci0KLSAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+bV9zdGF0ZS5w
cmVzZXJ2ZXMzRCkKLSAgICAgICAgbV90cmFuc2Zvcm1zLmNlbnRlclogPSBtX3RyYW5zZm9ybXMu
dGFyZ2V0Lm1hcFBvaW50KEZsb2F0UG9pbnQzRChtX3NpemUud2lkdGgoKSAvIDIsIG1fc2l6ZS5o
ZWlnaHQoKSAvIDIsIDApKS56KCk7CiAKLSAgICBpZiAoIW1fY2hpbGRyZW4uc2l6ZSgpKQotICAg
ICAgICByZXR1cm47CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlc1RvUmVtb3ZlLnNp
emUoKSAmJiBtX3RpbGVzLnNpemUoKSA+IFRpbGVFcmFzZVRocmVzaG9sZDsgKytpKQorICAgICAg
ICBtX3RpbGVzLnJlbW92ZSh0aWxlc1RvUmVtb3ZlW2ldKTsKK30KIAotICAgIGlmIChtX3N0YXRl
LmNoaWxkcmVuVHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6
OmNvbXB1dGVWaXNpYmxlUmVjdElmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW5lZWRzVG9Db21wdXRl
Qm91bmRpbmdSZWN0KCkpCiAgICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3Qgcm9vdFZpc2li
bGVSZWN0OworICAgIGlmICghbV9wYXJlbnQpCisgICAgICAgIHJvb3RWaXNpYmxlUmVjdCA9IG1f
c3RhdGUucm9vdFZpc2libGVSZWN0OworICAgIGVsc2UgaWYgKG1fcGFyZW50KQorICAgICAgICBy
b290VmlzaWJsZVJlY3QgPSBtX3BhcmVudC0+bV9zdGF0ZS5yb290VmlzaWJsZVJlY3Q7CiAKLSAg
ICBjb25zdCBGbG9hdFBvaW50IGNlbnRlclBvaW50ID0gRmxvYXRQb2ludChtX3NpemUud2lkdGgo
KSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIpOwotICAgIGlmIChtX3RyYW5zZm9ybXMucGVyc3Bl
Y3RpdmVEaXJ0eSkKLSAgICAgICAgbV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlID0gVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKQotICAgICAgICAgICAgLnRyYW5zbGF0ZShjZW50ZXJQb2ludC54KCksIGNl
bnRlclBvaW50LnkoKSkKLSAgICAgICAgICAgIC5tdWx0aXBseShtX3N0YXRlLmNoaWxkcmVuVHJh
bnNmb3JtKQotICAgICAgICAgICAgLnRyYW5zbGF0ZSgtY2VudGVyUG9pbnQueCgpLCAtY2VudGVy
UG9pbnQueSgpKTsKLSAgICBtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmVEaXJ0eSA9IGZhbHNlOwot
ICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5tdWx0aXBseShtX3RyYW5zZm9ybXMucGVy
c3BlY3RpdmUpOworICAgIG1fc3RhdGUucm9vdFZpc2libGVSZWN0ID0gcm9vdFZpc2libGVSZWN0
OworICAgIG1fc3RhdGUudmlzaWJsZVJlY3QgPSBtX3N0YXRlLnJvb3RWaXNpYmxlUmVjdDsKKyAg
ICBtX3N0YXRlLnZpc2libGVSZWN0LmludGVyc2VjdChtX3RyYW5zZm9ybXMuYm91bmRpbmdSZWN0
RnJvbVJvb3QpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjp1cGxvYWRUZXh0dXJlRnJv
bUNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgSW50UmVjdCYgdmlz
aWJsZVJlY3QsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
cmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xheWVy
KiBsYXllcikKIHsKLSAgICBpZiAobV9zaXplLmlzRW1wdHkoKSB8fCAhbGF5ZXIpIHsKLSAgICAg
ICAgbV90ZXh0dXJlLT5kZXN0cm95KCk7CisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIWxh
eWVyIHx8ICghbV9zdGF0ZS5kcmF3c0NvbnRlbnQgJiYgbV9jdXJyZW50Q29udGVudC5jb250ZW50
VHlwZSA9PSBIVE1MQ29udGVudFR5cGUpKSB7CisgICAgICAgIG1fdGlsZXMuY2xlYXIoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRU
eXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUpIHsKLSAgICAgICAgaWYgKG1fY3VycmVudENv
bnRlbnQuaW1hZ2UpCi0gICAgICAgICAgICBtX3RleHR1cmUtPnNldENvbnRlbnRzVG9JbWFnZSht
X2N1cnJlbnRDb250ZW50LmltYWdlLmdldCgpKTsKKyAgICBpZiAoIXRleHR1cmVNYXBwZXIpCiAg
ICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50
VHlwZSA9PSBNZWRpYUNvbnRlbnRUeXBlKSB7Ci0gICAgICAgIGlmICghbV9jdXJyZW50Q29udGVu
dC5tZWRpYSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV90ZXh0dXJlLT5yZXNldCht
X3NpemUsIHRydWUpOwotICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1D
b250ZXh0ID0gbV90ZXh0dXJlLT5iZWdpblBhaW50TWVkaWEoKTsKLSAgICAgICAgR3JhcGhpY3ND
b250ZXh0IGNvbnRleHQocGxhdGZvcm1Db250ZXh0KTsKLSAgICAgICAgbV9jdXJyZW50Q29udGVu
dC5tZWRpYS0+cGFpbnQoJmNvbnRleHQpOwotICAgICAgICBtX3RleHR1cmUtPmVuZFBhaW50KCk7
CisgICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gTWVkaWFDb250ZW50VHlw
ZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGNvbnN0IGJvb2wgbmVlZHNSZXNldCA9
IChtX3RleHR1cmUtPmNvbnRlbnRTaXplKCkgIT0gbV9zaXplKSB8fCAhbV90ZXh0dXJlLT5pc1Zh
bGlkKCk7Ci0gICAgaWYgKChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhUTUxDb250
ZW50VHlwZSkKLSAgICAgICAgfHwgKCFtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSAmJiBt
X2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QuaXNFbXB0eSgpICYmICFuZWVkc1Jlc2V0
KSkKLSAgICAgICAgcmV0dXJuOworICAgIC8vIEZJWE1FOiBBZGQgZGlyZWN0bHkgY29tcG9zaXRl
ZCBpbWFnZXMuCisgICAgRmxvYXRSZWN0IGRpcnR5UmVjdCA9IG1fY3VycmVudENvbnRlbnQubmVl
ZHNEaXNwbGF5ID8gZW50aXJlUmVjdCgpIDogbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlS
ZWN0OworICAgIGRpcnR5UmVjdC5zY2FsZShtX3N0YXRlLmNvbnRlbnRTY2FsZSk7CisKKyAgICBm
b3IgKHNpemVfdCB0aWxlSW5kZXggPSAwOyB0aWxlSW5kZXggPCBtX3RpbGVzLnNpemUoKTsgKyt0
aWxlSW5kZXgpIHsKKyAgICAgICAgVGlsZSYgdGlsZSA9IG1fdGlsZXNbdGlsZUluZGV4XTsKKyAg
ICAgICAgRmxvYXRSZWN0IHJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgICAgIGlmICghdGlsZS50ZXh0
dXJlKQorICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4
dHVyZSgpOworICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4mIHRleHR1cmUgPSB0aWxlLnRl
eHR1cmU7CisgICAgICAgIEludFNpemUgdGlsZVNpemUgPSBlbmNsb3NpbmdJbnRSZWN0KHRpbGUu
cmVjdCkuc2l6ZSgpOwogCi0gICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBJbnRSZWN0KDAsIDAsIG1f
c2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAgIGlmICghbmVlZHNSZXNldCAmJiAh
bV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkpCi0gICAgICAgIGRpcnR5UmVjdC5pbnRlcnNl
Y3QobV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0KTsKKyAgICAgICAgaWYgKHRpbGUu
bmVlZHNSZXNldCB8fCB0ZXh0dXJlLT5jb250ZW50U2l6ZSgpICE9IHRpbGVTaXplIHx8ICF0ZXh0
dXJlLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIHRpbGUubmVlZHNSZXNldCA9IGZhbHNlOwor
ICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXQodGlsZVNpemUsIG1fY3VycmVudENvbnRlbnQuY29u
dGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSA/IGZhbHNlIDogbV9zdGF0ZS5jb250
ZW50c09wYXF1ZSk7CisgICAgICAgICAgICByZWN0ID0gdGlsZS5yZWN0OworICAgICAgICB9CisK
KyAgICAgICAgSW50UmVjdCBjb250ZW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodGlsZS5yZWN0
KTsKKyAgICAgICAgY29udGVudFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3QocmVjdCkp
OworICAgICAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICBpZiAobmVlZHNSZXNldCkKLSAgICAgICAgbV90ZXh0dXJlLT5yZXNldChtX3Np
emUsIG1fc3RhdGUuY29udGVudHNPcGFxdWUpOworICAgICAgICBGbG9hdFJlY3QgY29udGVudFJl
Y3RJblRpbGVDb29yZGluYXRlcyA9IGNvbnRlbnRSZWN0OworICAgICAgICBGbG9hdFBvaW50IG9m
ZnNldCgtdGlsZS5yZWN0LngoKSwgLXRpbGUucmVjdC55KCkpOworICAgICAgICBjb250ZW50UmVj
dEluVGlsZUNvb3JkaW5hdGVzLm1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7CiAKLSAgICB7
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KG1fdGV4dHVyZS0+YmVnaW5QYWludChk
aXJ0eVJlY3QpKTsKLSAgICAgICAgaWYgKHRleHR1cmVNYXBwZXIpIHsKKyAgICAgICAgeworICAg
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQodGV4dHVyZS0+YmVnaW5QYWludChlbmNs
b3NpbmdJbnRSZWN0KGNvbnRlbnRSZWN0SW5UaWxlQ29vcmRpbmF0ZXMpKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkodGV4dHVyZU1hcHBlci0+aW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICAgICAgICAgIGNvbnRleHQuc2V0VGV4dERy
YXdpbmdNb2RlKHRleHR1cmVNYXBwZXItPnRleHREcmF3aW5nTW9kZSgpKTsKKyAgICAgICAgICAg
IGNvbnRleHQudHJhbnNsYXRlKG9mZnNldC54KCksIG9mZnNldC55KCkpOworICAgICAgICAgICAg
Y29udGV4dC5zY2FsZShGbG9hdFNpemUobV9zdGF0ZS5jb250ZW50U2NhbGUsIG1fc3RhdGUuY29u
dGVudFNjYWxlKSk7CisgICAgICAgICAgICBGbG9hdFJlY3Qgc2NhbGVkQ29udGVudFJlY3QoY29u
dGVudFJlY3QpOworICAgICAgICAgICAgc2NhbGVkQ29udGVudFJlY3Quc2NhbGUoMS4wIC8gbV9z
dGF0ZS5jb250ZW50U2NhbGUpOworICAgICAgICAgICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29u
dGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkKKyAgICAgICAgICAgICAgICBjb250
ZXh0LmRyYXdJbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBJbnRQb2ludCgwLCAwKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGVuY2xvc2luZ0lu
dFJlY3Qoc2NhbGVkQ29udGVudFJlY3QpKTsKKyAgICAgICAgICAgIHRleHR1cmUtPmVuZFBhaW50
KCk7CiAgICAgICAgIH0KLSAgICAgICAgbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRz
KGNvbnRleHQsIGRpcnR5UmVjdCk7CiAgICAgfQotICAgIG1fdGV4dHVyZS0+ZW5kUGFpbnQoKTsK
KwogICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7CisgICAgbV9jdXJy
ZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0ID0gSW50UmVjdCgpOwogfQogCi0KLXZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OnBhaW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0
IFRleHR1cmVNYXBwZXJDb250ZW50TGF5ZXI6OlBhaW50T3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQg
VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KCkKIHsKLSAgICBBU1NFUlQobV9sYXllclR5cGUgPT0g
Um9vdExheWVyKTsKICAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgVGV4bWFwUGFpbnRPcHRpb25zIG9wdDsKLSAgICBvcHQub3BhY2l0eSA9IDE7Ci0gICAg
b3B0LnJvb3RMYXllciA9IHRoaXM7Ci0gICAgb3B0LnNjaXNzb3JSZWN0ID0gb3B0aW9ucy50YXJn
ZXRSZWN0OwotICAgIG9wdC52aXNpYmxlUmVjdCA9IG9wdGlvbnMudmlzaWJsZVJlY3Q7Ci0gICAg
b3B0LnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVyOwotICAgIG9wdC5zdXJmYWNlID0gMDsK
LSAgICBvcHQuY2FjaGUgPSBtX2NhY2hlOworICAgIGlmICghbV9zdXJmYWNlTWFuYWdlcikKKyAg
ICAgICAgbV9zdXJmYWNlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXI7
CisgICAgbV9zdXJmYWNlTWFuYWdlci0+dGV4dHVyZU1hcHBlciA9IG1fdGV4dHVyZU1hcHBlcjsK
KyAgICBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zIG9wdDsKKyAgICBvcHQuc3VyZmFjZU1hbmFn
ZXIgPSBtX3N1cmZhY2VNYW5hZ2VyOworICAgIG9wdC50ZXh0dXJlTWFwcGVyID0gbV90ZXh0dXJl
TWFwcGVyOworICAgIG9wdC50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKICAgICBwYWlu
dFJlY3Vyc2l2ZShvcHQpOworfQogCi0gICAgaWYgKHRleHR1cmVNYXBwZXItPmFsbG93U3VyZmFj
ZUZvclJvb3QoKSB8fCBtX3N0YXRlLmhhc1N1cmZhY2VEZXNjZW5kYW50cykgewotICAgICAgICB0
ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKLSAgICAgICAgdGV4dHVyZU1hcHBlci0+cGFp
bnRUb1RhcmdldCgqbV9zdXJmYWNlLmdldCgpLCBvcHRpb25zLnZpZXdwb3J0U2l6ZSwgb3B0aW9u
cy50cmFuc2Zvcm0sIG9wdGlvbnMub3BhY2l0eSAqIG1fc3RhdGUub3BhY2l0eSwgb3B0aW9ucy50
YXJnZXRSZWN0KTsKLSAgICB9Ci0gICAgbV9jYWNoZS0+cHVyZ2UoKTsKK0Zsb2F0UmVjdCBUZXh0
dXJlTWFwcGVyTm9kZTo6dGFyZ2V0UmVjdEZvclRpbGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4g
RmxvYXRSZWN0KAorICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpICsgKHRpbGVSZWN0Lngo
KSAtIHRhcmdldFJlY3QueCgpKSAvIG1fc3RhdGUuY29udGVudFNjYWxlLAorICAgICAgICAgICAg
ICAgIHRhcmdldFJlY3QueSgpICsgKHRpbGVSZWN0LnkoKSAtIHRhcmdldFJlY3QueSgpKSAvIG1f
c3RhdGUuY29udGVudFNjYWxlLAorICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCkgLyBt
X3N0YXRlLmNvbnRlbnRTY2FsZSwKKyAgICAgICAgICAgICAgICB0aWxlUmVjdC5oZWlnaHQoKSAv
IG1fc3RhdGUuY29udGVudFNjYWxlKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFp
bnRTZWxmKGNvbnN0IFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgVGV4dHVyZU1h
cHBlck5vZGU6OnBhaW50U2VsZihjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvcHRp
b25zKQogewogICAgIGlmIChtX3NpemUuaXNFbXB0eSgpIHx8ICghbV9zdGF0ZS5kcmF3c0NvbnRl
bnQgJiYgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFza1RleHR1cmU7
CiAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHJlcGxpY2FNYXNrVGV4dHVyZTsKLSAgICBtX3Rl
eHR1cmUtPnVucGFjaygpOwogCi0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1hc2tUZXh0dXJl
ID0gbV9zdGF0ZS5tYXNrTGF5ZXIgPyBtX3N0YXRlLm1hc2tMYXllci0+bV90ZXh0dXJlIDogMDsK
KyAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpCisgICAgICAgIG1hc2tUZXh0dXJlID0gbV9zdGF0
ZS5tYXNrTGF5ZXItPnRleHR1cmUoKTsKICAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIgJiYg
bV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVyKQotICAgICAgICByZXBsaWNh
TWFza1RleHR1cmUgPSBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXItPm1f
dGV4dHVyZTsKKyAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJlID0gbV9zdGF0ZS5yZXBsaWNhTGF5
ZXItPm1fc3RhdGUubWFza0xheWVyLT50ZXh0dXJlKCk7CiAKLSAgICBpZiAobWFza1RleHR1cmUp
Ci0gICAgICAgIG1hc2tUZXh0dXJlLT51bnBhY2soKTsKKyAgICBjb25zdCBmbG9hdCBvcGFjaXR5
ID0gb3B0aW9ucy5pc1N1cmZhY2UgPyAxIDogb3B0aW9ucy5vcGFjaXR5OwogCi0gICAgaWYgKHJl
cGxpY2FNYXNrVGV4dHVyZSkKLSAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJlLT51bnBhY2soKTsK
KyAgICBjb25zdCBGbG9hdFJlY3QgdGFyZ2V0UmVjdCA9IHRoaXMtPnRhcmdldFJlY3QoKTsKIAot
ICAgIGNvbnN0IGZsb2F0IG9wYWNpdHkgPSBvcHRpb25zLmlzU3VyZmFjZSA/IDEgOiBvcHRpb25z
Lm9wYWNpdHk7CisgICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gTWVkaWFD
b250ZW50VHlwZSAmJiBtX2N1cnJlbnRDb250ZW50Lm1lZGlhKSB7CisgICAgICAgIGlmIChtX3N0
YXRlLnJlcGxpY2FMYXllciAmJiAhb3B0aW9ucy5pc1N1cmZhY2UpCisgICAgICAgICAgICBtX2N1
cnJlbnRDb250ZW50Lm1lZGlhLT5wYWludFRvVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVN
YXBwZXIsIHRhcmdldFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3RyYW5zZm9ybXMudGFy
Z2V0KS5tdWx0aXBseShtX3N0YXRlLnJlcGxpY2FMYXllci0+bV90cmFuc2Zvcm1zLmxvY2FsKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wYWNpdHkgKiBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9vcGFjaXR5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGljYU1hc2tU
ZXh0dXJlID8gcmVwbGljYU1hc2tUZXh0dXJlLmdldCgpIDogbWFza1RleHR1cmUuZ2V0KCkpOwor
ICAgICAgICBtX2N1cnJlbnRDb250ZW50Lm1lZGlhLT5wYWludFRvVGV4dHVyZU1hcHBlcihvcHRp
b25zLnRleHR1cmVNYXBwZXIsIHRhcmdldFJlY3QsIG1fdHJhbnNmb3Jtcy50YXJnZXQsIG9wYWNp
dHksIG9wdGlvbnMuaXNTdXJmYWNlID8gMCA6IG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiAhb3B0aW9u
cy5pc1N1cmZhY2UpCi0gICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUo
Km1fdGV4dHVyZS5nZXQoKSwgcmVwbGljYVJlY3QoKSwgbV90cmFuc2Zvcm1zLnJlcGxpY2EsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eSAqIG1fc3RhdGUucmVwbGljYUxheWVyLT5t
X3N0YXRlLm9wYWNpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGljYU1hc2tUZXh0
dXJlID8gcmVwbGljYU1hc2tUZXh0dXJlLmdldCgpIDogbWFza1RleHR1cmUuZ2V0KCkpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90aWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBC
aXRtYXBUZXh0dXJlKiB0ZXh0dXJlID0gbV90aWxlc1tpXS50ZXh0dXJlLmdldCgpOworICAgICAg
ICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIgJiYgIW9wdGlvbnMuaXNTdXJmYWNlKSB7CisgICAg
ICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCp0ZXh0dXJlLCB0YXJn
ZXRSZWN0Rm9yVGlsZVJlY3QodGFyZ2V0UmVjdCwgbV90aWxlc1tpXS5yZWN0KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgobV90cmFuc2Zvcm1zLnRh
cmdldCkubXVsdGlwbHkobV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fdHJhbnNmb3Jtcy5sb2NhbCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHkgKiBtX3N0YXRlLnJlcGxpY2FM
YXllci0+bV9vcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsaWNhTWFz
a1RleHR1cmUgPyByZXBsaWNhTWFza1RleHR1cmUuZ2V0KCkgOiBtYXNrVGV4dHVyZS5nZXQoKSk7
CisgICAgICAgIH0KIAotICAgIGNvbnN0IEludFJlY3QgcmVjdCA9IG1fbGF5ZXJUeXBlID09IENs
aXBMYXllciA/IGVudGlyZVJlY3QoKSA6IHRhcmdldFJlY3QoKTsKLSAgICBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBtX2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIgPyBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpIDogbV90cmFuc2Zvcm1zLnRhcmdldDsKLSAgICBvcHRpb25zLnRl
eHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCptX3RleHR1cmUuZ2V0KCksIHJlY3QsIHRyYW5zZm9y
bSwgb3BhY2l0eSwgb3B0aW9ucy5pc1N1cmZhY2UgPyAwIDogbWFza1RleHR1cmUuZ2V0KCkpOwot
ICAgIG9wdGlvbnMuY2FjaGUtPm1hcmsobV90ZXh0dXJlLmdldCgpKTsKKyAgICAgICAgY29uc3Qg
RmxvYXRSZWN0IHJlY3QgPSB0YXJnZXRSZWN0Rm9yVGlsZVJlY3QodGFyZ2V0UmVjdCwgbV90aWxl
c1tpXS5yZWN0KTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgq
dGV4dHVyZSwgcmVjdCwgbV90cmFuc2Zvcm1zLnRhcmdldCwgb3BhY2l0eSwgb3B0aW9ucy5pc1N1
cmZhY2UgPyAwIDogbWFza1RleHR1cmUuZ2V0KCkpOworICAgIH0KIH0KIAotYm9vbCBUZXh0dXJl
TWFwcGVyTm9kZTo6cGFpbnRSZXBsaWNhKGNvbnN0IFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9u
cykKK2ludCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKGNv
bnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiB7Ci0gICAgQml0bWFwVGV4dHVyZSYgdGV4dHVy
ZSA9ICptX3N1cmZhY2UuZ2V0KCk7Ci0gICAgVGV4dHVyZU1hcHBlck5vZGUqIHJlcGxpY2EgPSBt
X3N0YXRlLnJlcGxpY2FMYXllcjsKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFza1RleHR1
cmU7Ci0gICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBtYXNrID0gbV9zdGF0ZS5tYXNrTGF5ZXIp
Ci0gICAgICAgIG1hc2tUZXh0dXJlID0gbWFzay0+bV90ZXh0dXJlOwotICAgIFJlZlB0cjxCaXRt
YXBUZXh0dXJlPiByZXBsaWNhTWFza1RleHR1cmU7Ci0gICAgaWYgKCFyZXBsaWNhKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAocmVwbGljYSAmJiByZXBsaWNhLT5tX3N0YXRlLm1h
c2tMYXllcikKLSAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJlID0gcmVwbGljYS0+bV9zdGF0ZS5t
YXNrTGF5ZXItPm1fdGV4dHVyZTsKLQotICAgIGlmIChyZXBsaWNhTWFza1RleHR1cmUpCi0gICAg
ICAgIHJlcGxpY2FNYXNrVGV4dHVyZS0+dW5wYWNrKCk7Ci0gICAgQVNTRVJUKG1fcmVwbGljYVN1
cmZhY2UpOwotICAgIG1fcmVwbGljYVN1cmZhY2UtPnJlc2V0KG9wdGlvbnMuc3VyZmFjZS0+c2l6
ZSgpKTsKLSAgICBtX3JlcGxpY2FTdXJmYWNlLT5zZXRPZmZzZXQob3B0aW9ucy5zdXJmYWNlLT5v
ZmZzZXQoKSk7Ci0gICAgb3B0aW9ucy5jYWNoZS0+bWFyayhtX3JlcGxpY2FTdXJmYWNlLmdldCgp
KTsKLSAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG1fcmVwbGljYVN1cmZh
Y2UuZ2V0KCkpOwotICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVy
ZSwgcmVwbGljYVJlY3QoKSwgbV90cmFuc2Zvcm1zLnJlcGxpY2EsIHJlcGxpY2EtPm1fc3RhdGUu
b3BhY2l0eSwgcmVwbGljYU1hc2tUZXh0dXJlID8gcmVwbGljYU1hc2tUZXh0dXJlLmdldCgpIDog
bWFza1RleHR1cmUuZ2V0KCkpOwotICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1
cmUodGV4dHVyZSwgSW50UmVjdChJbnRQb2ludCgwLCAwKSwgb3B0aW9ucy5zdXJmYWNlLT5zaXpl
KCkpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCAxLjBmLCBtYXNrVGV4dHVyZS5nZXQoKSk7Ci0g
ICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShvcHRpb25zLnN1cmZhY2UpOwot
ICAgIG9wdGlvbnMuY2FjaGUtPm1hcmsob3B0aW9ucy5zdXJmYWNlKTsKLSAgICBvcHRpb25zLnRl
eHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCptX3JlcGxpY2FTdXJmYWNlLmdldCgpLCBJbnRSZWN0
KEludFBvaW50KDAsIDApLCBvcHRpb25zLnN1cmZhY2UtPnNpemUoKSksIFRyYW5zZm9ybWF0aW9u
TWF0cml4KCksIG9wdGlvbnMub3BhY2l0eSwgMCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgVGV4
dHVyZU1hcHBlck5vZGUqIGNvbnN0KiBub2RlQSA9IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJO
b2RlKiBjb25zdCo+KGEpOworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBjb25zdCogbm9kZUIgPSBz
dGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyTm9kZSogY29uc3QqPihiKTsKKyAgICByZXR1cm4gaW50
KCgoKm5vZGVBKS0+bV90cmFuc2Zvcm1zLmNlbnRlclogLSAoKm5vZGVCKS0+bV90cmFuc2Zvcm1z
LmNlbnRlclopICogMTAwMCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U3Vy
ZmFjZShjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpzb3J0QnlaT3JkZXIoVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKiA+JiBhcnJheSwg
aW50IGZpcnN0LCBpbnQgbGFzdCkKIHsKLSAgICBpZiAobV9sYXllclR5cGUgPT0gUm9vdExheWVy
IHx8IG1fbGF5ZXJUeXBlID09IERlZmF1bHRMYXllciB8fCBtX2xheWVyVHlwZSA9PSBTY2lzc29y
TGF5ZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBxc29ydChhcnJheS5kYXRhKCksIGFycmF5LnNp
emUoKSwgc2l6ZW9mKFRleHR1cmVNYXBwZXJOb2RlKiksIGNvbXBhcmVHcmFwaGljc0xheWVyc1pW
YWx1ZSk7Cit9CiAKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFza1RleHR1cmU7Ci0gICAg
aWYgKFRleHR1cmVNYXBwZXJOb2RlKiBtYXNrID0gbV9zdGF0ZS5tYXNrTGF5ZXIpCi0gICAgICAg
IG1hc2tUZXh0dXJlID0gbWFzay0+bV90ZXh0dXJlOwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
cGFpbnRTZWxmQW5kQ2hpbGRyZW4oY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYgb3B0
aW9ucywgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYgb3B0aW9uc0ZvckRlc2NlbmRhbnRzKQor
eworICAgIGJvb2wgaGFzQ2xpcCA9IG1fc3RhdGUubWFza3NUb0JvdW5kcyAmJiAhbV9jaGlsZHJl
bi5pc0VtcHR5KCk7CisgICAgaWYgKGhhc0NsaXApCisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1h
cHBlci0+YmVnaW5DbGlwKG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cywgRmxvYXRSZWN0KDAs
IDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKIAotICAgIEFTU0VSVChtX3N1
cmZhY2UpOwotICAgIEJpdG1hcFRleHR1cmUmIHRleHR1cmUgPSAqbV9zdXJmYWNlLmdldCgpOwot
ICAgIGlmIChtYXNrVGV4dHVyZSkKLSAgICAgICAgbWFza1RleHR1cmUtPnVucGFjaygpOwotICAg
IHRleHR1cmUudW5wYWNrKCk7CisgICAgcGFpbnRTZWxmKG9wdGlvbnMpOwogCi0gICAgaWYgKHBh
aW50UmVwbGljYShvcHRpb25zKSkKLSAgICAgICAgcmV0dXJuOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgbV9jaGlsZHJlbltpXS0+cGFp
bnRSZWN1cnNpdmUob3B0aW9uc0ZvckRlc2NlbmRhbnRzKTsKIAotICAgIG9wdGlvbnMudGV4dHVy
ZU1hcHBlci0+YmluZFN1cmZhY2Uob3B0aW9ucy5zdXJmYWNlKTsKLSAgICBvcHRpb25zLnRleHR1
cmVNYXBwZXItPmRyYXdUZXh0dXJlKHRleHR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyID8gSW50UmVjdChJbnRQb2ludCgw
LCAwKSwgb3B0aW9ucy5zdXJmYWNlLT5zaXplKCkpIDoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGFyZ2V0UmVjdCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xheWVy
VHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllciA/IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkgOiBtX3Ry
YW5zZm9ybXMudGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9w
YWNpdHksIG1hc2tUZXh0dXJlLmdldCgpKTsKLSAgICBvcHRpb25zLmNhY2hlLT5tYXJrKCZ0ZXh0
dXJlKTsKKyAgICBpZiAoaGFzQ2xpcCkKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5l
bmRDbGlwKCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZkFuZENoaWxk
cmVuKGNvbnN0IFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9ucywgVGV4bWFwUGFpbnRPcHRpb25z
JiBvcHRpb25zRm9yRGVzY2VuZGFudHMpCitib29sIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFJl
ZmxlY3Rpb24oY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYgb3B0aW9ucywgQml0bWFw
VGV4dHVyZSogY29udGVudFN1cmZhY2UpCiB7Ci0gICAgYm9vbCBkaWRQYWludFNlbGYgPSBmYWxz
ZTsKLSAgICBpZiAoIW1fc3RhdGUucHJlc2VydmVzM0QgfHwgbV9jaGlsZHJlbi5pc0VtcHR5KCkp
IHsKLSAgICAgICAgcGFpbnRTZWxmKG9wdGlvbnMpOwotICAgICAgICBkaWRQYWludFNlbGYgPSB0
cnVlOwotICAgIH0KKyAgICBpZiAoIW1fc3RhdGUucmVwbGljYUxheWVyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAobV9jaGlsZHJlbi5pc0VtcHR5KCkgJiYgIW9wdGlvbnMuaXNT
dXJmYWNlKQotICAgICAgICByZXR1cm47CisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHN1cmZh
Y2UoY29udGVudFN1cmZhY2UpOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtYXNrU3VyZmFj
ZTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gcmVwbGljYU1hc2tTdXJmYWNlOworICAgIFJl
ZlB0cjxCaXRtYXBUZXh0dXJlPiByZXBsaWNhTWFza1RleHR1cmU7CiAKLSAgICBpZiAobV9sYXll
clR5cGUgPT0gU2Npc3NvckxheWVyKQotICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMuc2Np
c3NvclJlY3QuaW50ZXJzZWN0KG1fdHJhbnNmb3Jtcy50YXJnZXQubWFwUmVjdChJbnRSZWN0KDAs
IDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKSk7CisgICAgaWYgKFRleHR1cmVN
YXBwZXJOb2RlKiByZXBsaWNhTWFzayA9IG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm1h
c2tMYXllcikKKyAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJlID0gcmVwbGljYU1hc2stPnRleHR1
cmUoKTsKIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkg
ewotICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbGF5ZXIgPSBtX2NoaWxkcmVuW2ldOwotICAg
ICAgICBpZiAoIWxheWVyKQotICAgICAgICAgICAgY29udGludWU7CisgICAgUmVmUHRyPEJpdG1h
cFRleHR1cmU+IG1hc2tUZXh0dXJlOworICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogbWFzayA9
IG1fc3RhdGUubWFza0xheWVyKQorICAgICAgICBtYXNrVGV4dHVyZSA9IG1hc2stPnRleHR1cmUo
KTsKIAotICAgICAgICBpZiAoIWRpZFBhaW50U2VsZiAmJiBsYXllci0+bV90cmFuc2Zvcm1zLmNl
bnRlclogPj0gMCkgewotICAgICAgICAgICAgcGFpbnRTZWxmKG9wdGlvbnMpOwotICAgICAgICAg
ICAgZGlkUGFpbnRTZWxmID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBsYXllci0+cGFpbnRS
ZWN1cnNpdmUob3B0aW9uc0ZvckRlc2NlbmRhbnRzKTsKLSAgICAgICAgaWYgKG9wdGlvbnMuaXNT
dXJmYWNlKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9zdXJmYWNlKTsKLSAgICAgICAgICAgIG9w
dGlvbnMuY2FjaGUtPm1hcmsobV9zdXJmYWNlLmdldCgpKTsKLSAgICAgICAgICAgIG9wdGlvbnMu
dGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UobV9zdXJmYWNlLmdldCgpKTsKLSAgICAgICAgfQor
ICAgIGNvbnN0IEludFNpemUgdmlld3BvcnRTaXplID0gb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT52
aWV3cG9ydFNpemUoKTsKKyAgICBjb25zdCBib29sIHVzZUludGVybWVkaWF0ZUJ1ZmZlckZvclJl
cGxpY2EgPSBtX3N0YXRlLnJlcGxpY2FMYXllciAmJiBvcHRpb25zLm9wYWNpdHkgPCAwLjk5Owor
ICAgIGNvbnN0IGJvb2wgdXNlSW50ZXJtZWRpYXRlQnVmZmVyRm9yTWFzayA9IG1hc2tUZXh0dXJl
ICYmIHJlcGxpY2FNYXNrVGV4dHVyZTsKKyAgICBjb25zdCBGbG9hdFJlY3Qgdmlld3BvcnRSZWN0
KDAsIDAsIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpOworCisg
ICAgLy8gVGhlIG1hc2sgaGFzIHRvIGJlIGFkanVzdGVkIHRvIHRhcmdldCBjb29yZGluYXRlcy4K
KyAgICBpZiAobWFza1RleHR1cmUpIHsKKyAgICAgICAgbWFza1N1cmZhY2UgPSBvcHRpb25zLnN1
cmZhY2VNYW5hZ2VyLT5nZXRJbnRlcm1lZGlhdGVTdXJmYWNlKCk7CisgICAgICAgIG9wdGlvbnMu
dGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UobWFza1N1cmZhY2UuZ2V0KCkpOworICAgICAgICBv
cHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCptYXNrVGV4dHVyZS5nZXQoKSwgZW50
aXJlUmVjdCgpLCBtX3RyYW5zZm9ybXMudGFyZ2V0LCAxLCAwKTsKKyAgICAgICAgbWFza1RleHR1
cmUgPSBtYXNrU3VyZmFjZTsKKyAgICB9CisKKyAgICAvLyBUaGUgcmVwbGljYSdzIG1hc2sgaGFz
IHRvIGJlIGFkanVzdGVkIHRvIHRhcmdldCBjb29yZGluYXRlcy4KKyAgICBpZiAocmVwbGljYU1h
c2tUZXh0dXJlKSB7CisgICAgICAgIHJlcGxpY2FNYXNrU3VyZmFjZSA9IG9wdGlvbnMuc3VyZmFj
ZU1hbmFnZXItPmdldEludGVybWVkaWF0ZVN1cmZhY2UoKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0
dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShyZXBsaWNhTWFza1N1cmZhY2UuZ2V0KCkpOworICAgICAg
ICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCpyZXBsaWNhTWFza1RleHR1cmUu
Z2V0KCksIGVudGlyZVJlY3QoKSwgbV90cmFuc2Zvcm1zLnRhcmdldCwgMSwgMCk7CisgICAgICAg
IHJlcGxpY2FNYXNrVGV4dHVyZSA9IHJlcGxpY2FNYXNrU3VyZmFjZTsKKyAgICB9CisKKyAgICAv
LyBXZSBtaWdodCBuZWVkIHRvIGFwcGx5IHRoZSBtYXNrIG9mIHRoZSBjb250ZW50IGxheWVyIGJl
Zm9yZSB3ZSBkcmF3IHRoZSByZWZsZWN0aW9uLCBhcyB0aGVyZSBtaWdodCBiZSB5ZXQgYW5vdGhl
ciBtYXNrIGZvciB0aGUgcmVmbGVjdGlvbiBpdHNlbGYuCisgICAgaWYgKHVzZUludGVybWVkaWF0
ZUJ1ZmZlckZvck1hc2spIHsKKyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1hc2tTdXJm
YWNlID0gb3B0aW9ucy5zdXJmYWNlTWFuYWdlci0+Z2V0SW50ZXJtZWRpYXRlU3VyZmFjZSgpOwor
ICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG1hc2tTdXJmYWNlLmdl
dCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqc3VyZmFj
ZS5nZXQoKSwgdmlld3BvcnRSZWN0LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCAxLCBtYXNrVGV4
dHVyZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMuc3VyZmFjZU1hbmFnZXItPnJlbGVhc2VJbnRl
cm1lZGlhdGVTdXJmYWNlKHN1cmZhY2UuZ2V0KCkpOworICAgICAgICBzdXJmYWNlID0gbWFza1N1
cmZhY2U7CisgICAgICAgIG1hc2tUZXh0dXJlLmNsZWFyKCk7CiAgICAgfQotICAgIGlmICghZGlk
UGFpbnRTZWxmKSB7Ci0gICAgICAgIHBhaW50U2VsZihvcHRpb25zKTsKLSAgICAgICAgZGlkUGFp
bnRTZWxmID0gdHJ1ZTsKKworICAgIC8vIFdlIGJsZW5kIHRoZSBsYXllciBhbmQgaXRzIHJlcGxp
Y2EgaW4gYW4gaW50ZXJtZWRpYXRlIGJ1ZmZlciBiZWZvcmUgYmxlbmRpbmcgaW50byB0aGUgdGFy
Z2V0IHN1cmZhY2UuCisgICAgaWYgKHVzZUludGVybWVkaWF0ZUJ1ZmZlckZvclJlcGxpY2EpIHsK
KyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHJlcGxpY2FTdXJmYWNlID0gb3B0aW9ucy5z
dXJmYWNlTWFuYWdlci0+Z2V0SW50ZXJtZWRpYXRlU3VyZmFjZSgpOworICAgICAgICBvcHRpb25z
LnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKHJlcGxpY2FTdXJmYWNlLmdldCgpKTsKKyAgICAg
ICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqc3VyZmFjZS5nZXQoKSwgdmll
d3BvcnRSZWN0LCBtX3RyYW5zZm9ybXMucmVwbGljYSwgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1f
b3BhY2l0eSwgcmVwbGljYU1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0
dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqc3VyZmFjZS5nZXQoKSwgdmlld3BvcnRSZWN0LCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpLCAxLCBtYXNrVGV4dHVyZS5nZXQoKSk7CisgICAgICAgIG9wdGlv
bnMuc3VyZmFjZU1hbmFnZXItPnJlbGVhc2VJbnRlcm1lZGlhdGVTdXJmYWNlKHN1cmZhY2UuZ2V0
KCkpOworICAgICAgICBzdXJmYWNlID0gcmVwbGljYVN1cmZhY2U7CiAgICAgfQorCisgICAgb3B0
aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShvcHRpb25zLnN1cmZhY2UpOworCisgICAg
Ly8gRHJhdyB0aGUgcmVmbGVjdGlvbi4KKyAgICBpZiAoIXVzZUludGVybWVkaWF0ZUJ1ZmZlckZv
clJlcGxpY2EpCisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKnN1
cmZhY2UuZ2V0KCksIHZpZXdwb3J0UmVjdCwgbV90cmFuc2Zvcm1zLnJlcGxpY2EsIG1fc3RhdGUu
cmVwbGljYUxheWVyLT5tX29wYWNpdHksIHJlcGxpY2FNYXNrVGV4dHVyZS5nZXQoKSk7CisKKyAg
ICAvLyBEcmF3IHRoZSBvcmlnaW5hbC4KKyAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdU
ZXh0dXJlKCpzdXJmYWNlLmdldCgpLCB2aWV3cG9ydFJlY3QsIFRyYW5zZm9ybWF0aW9uTWF0cml4
KCksIG9wdGlvbnMub3BhY2l0eSwgbWFza1RleHR1cmUuZ2V0KCkpOworCisgICAgb3B0aW9ucy5z
dXJmYWNlTWFuYWdlci0+cmVsZWFzZUludGVybWVkaWF0ZVN1cmZhY2UobWFza1N1cmZhY2UuZ2V0
KCkpOworICAgIG9wdGlvbnMuc3VyZmFjZU1hbmFnZXItPnJlbGVhc2VJbnRlcm1lZGlhdGVTdXJm
YWNlKHJlcGxpY2FNYXNrU3VyZmFjZS5nZXQoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRSZWN1cnNpdmUoVGV4bWFwUGFpbnRPcHRpb25z
IG9wdGlvbnMpCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFJlY3Vyc2l2ZShUZXh0dXJl
TWFwcGVyUGFpbnRPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgYm9vbCBpc0RpcnR5ID0gbV9zdGF0
ZS5kaXJ0eTsKLSAgICBtX3N0YXRlLmRpcnR5ID0gZmFsc2U7Ci0KICAgICBpZiAoKG1fc2l6ZS5p
c0VtcHR5KCkgJiYgKG1fc3RhdGUubWFza3NUb0JvdW5kcwotICAgICAgICB8fCBtX2NoaWxkcmVu
LmlzRW1wdHkoKSkpIHx8ICFtX3N0YXRlLnZpc2libGUgfHwgb3B0aW9ucy5vcGFjaXR5IDwgMC4w
MSB8fCBtX3N0YXRlLm9wYWNpdHkgPCAwLjAxKQorICAgICAgICB8fCBtX2NoaWxkcmVuLmlzRW1w
dHkoKSkpIHx8ICFtX3N0YXRlLnZpc2libGUgfHwgb3B0aW9ucy5vcGFjaXR5IDwgMC4wMSB8fCBt
X29wYWNpdHkgPCAwLjAxKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb21wdXRlUmVwbGljYVRy
YW5zZm9ybSgpOworICAgIG9wdGlvbnMub3BhY2l0eSAqPSBtX29wYWNpdHk7CisgICAgUmVmUHRy
PEJpdG1hcFRleHR1cmU+IHN1cmZhY2U7CisgICAgY29uc3QgYm9vbCBuZWVkc1R3b1Bhc3MgPSAo
KG1fc3RhdGUucmVwbGljYUxheWVyIHx8IG1fc3RhdGUubWFza0xheWVyKSAmJiAhbV9jaGlsZHJl
bi5pc0VtcHR5KCkpIHx8IChtX29wYWNpdHkgPCAwLjk5ICYmIG1fc3RhdGUubWlnaHRIYXZlT3Zl
cmxhcHMpIHx8IChtX29wYWNpdHkgPCAwLjk5ICYmIG1fc3RhdGUucmVwbGljYUxheWVyKTsKKyAg
ICBjb25zdCBJbnRTaXplIHZpZXdwb3J0U2l6ZSA9IG9wdGlvbnMudGV4dHVyZU1hcHBlci0+dmll
d3BvcnRTaXplKCk7CisgICAgb3B0aW9ucy5pc1N1cmZhY2UgPSBmYWxzZTsKIAotICAgIGlmICht
X3N0YXRlLm1hc2tMYXllcikKLSAgICAgICAgbV9zdGF0ZS5tYXNrTGF5ZXItPm1fc3RhdGUuZGly
dHkgPSBmYWxzZTsKKyAgICBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zIG9wdGlvbnNGb3JEZXNj
ZW5kYW50cyhvcHRpb25zKTsKIAotICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikgewotICAg
ICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOwotICAgICAg
ICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVyKQotICAgICAgICAg
ICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVyLT5tX3N0YXRlLmRpcnR5
ID0gZmFsc2U7CisgICAgaWYgKCFuZWVkc1R3b1Bhc3MpIHsKKyAgICAgICAgcGFpbnRTZWxmQW5k
Q2hpbGRyZW4ob3B0aW9ucywgb3B0aW9uc0ZvckRlc2NlbmRhbnRzKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGNvbnN0IGJvb2wgaXNTdXJmYWNlID0gKG1fbGF5ZXJUeXBlID09IENs
aXBMYXllcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fbGF5ZXJUeXBlID09IFRy
YW5zcGFyZW5jeUxheWVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKG1fbGF5ZXJU
eXBlID09IFJvb3RMYXllcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAob3B0
aW9ucy50ZXh0dXJlTWFwcGVyLT5hbGxvd1N1cmZhY2VGb3JSb290KCkgfHwgbV9zdGF0ZS5oYXNT
dXJmYWNlRGVzY2VuZGFudHMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOwor
ICAgIEZsb2F0UmVjdCB2aWV3cG9ydFJlY3QoMCwgMCwgdmlld3BvcnRTaXplLndpZHRoKCksIHZp
ZXdwb3J0U2l6ZS5oZWlnaHQoKSk7CisKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFza1N1
cmZhY2U7CiAKLSAgICBjb25zdCBJbnRSZWN0IGJvdW5kaW5nUmVjdGZyb21OZWFyZXN0U3VyZmFj
ZSA9IG1fdHJhbnNmb3Jtcy50YXJnZXRCb3VuZGluZ1JlY3Q7CisgICAgLy8gVGhlIG1hc2sgaGFz
IHRvIGJlIGFkanVzdGVkIHRvIHRhcmdldCBjb29yZGluYXRlcy4KKyAgICBpZiAobV9zdGF0ZS5t
YXNrTGF5ZXIpIHsKKyAgICAgICAgbWFza1N1cmZhY2UgPSBvcHRpb25zLnN1cmZhY2VNYW5hZ2Vy
LT5nZXRJbnRlcm1lZGlhdGVTdXJmYWNlKCk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBl
ci0+YmluZFN1cmZhY2UobWFza1N1cmZhY2UuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1
cmVNYXBwZXItPmRyYXdUZXh0dXJlKCptX3N0YXRlLm1hc2tMYXllci0+dGV4dHVyZSgpLCBlbnRp
cmVSZWN0KCksIG1fdHJhbnNmb3Jtcy50YXJnZXQsIDEuMCwgMCk7CisgICAgfQogCi0gICAgb3B0
aW9ucy5vcGFjaXR5ICo9IG1fc3RhdGUub3BhY2l0eTsKKyAgICBzdXJmYWNlID0gb3B0aW9ucy5z
dXJmYWNlTWFuYWdlci0+Z2V0SW50ZXJtZWRpYXRlU3VyZmFjZSgpOworICAgIG9wdGlvbnNGb3JE
ZXNjZW5kYW50cy5zdXJmYWNlID0gc3VyZmFjZS5nZXQoKTsKKyAgICBvcHRpb25zLmlzU3VyZmFj
ZSA9IHRydWU7CisgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLm9wYWNpdHkgPSAxOworICAgIG9w
dGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uoc3VyZmFjZS5nZXQoKSk7CiAKLSAgICBU
ZXhtYXBQYWludE9wdGlvbnMgb3B0aW9uc0ZvckRlc2NlbmRhbnRzKG9wdGlvbnMpOwotICAgIG9w
dGlvbnNGb3JEZXNjZW5kYW50cy5vcGFjaXR5ID0gaXNTdXJmYWNlID8gMSA6IG9wdGlvbnMub3Bh
Y2l0eTsKLSAgICBvcHRpb25zLmlzU3VyZmFjZSA9IGlzU3VyZmFjZTsKKyAgICBwYWludFNlbGZB
bmRDaGlsZHJlbihvcHRpb25zLCBvcHRpb25zRm9yRGVzY2VuZGFudHMpOwogCi0gICAgaWYgKG1f
bGF5ZXJUeXBlID09IENsaXBMYXllcikgewotICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMu
dmlzaWJsZVJlY3QgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLnRyYW5zbGF0ZSgtYm91bmRpbmdS
ZWN0ZnJvbU5lYXJlc3RTdXJmYWNlLngoKSwgLWJvdW5kaW5nUmVjdGZyb21OZWFyZXN0U3VyZmFj
ZS55KCkpLm1hcFJlY3Qob3B0aW9ucy52aXNpYmxlUmVjdCk7Ci0gICAgICAgIG9wdGlvbnNGb3JE
ZXNjZW5kYW50cy5zY2lzc29yUmVjdCA9IEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1f
c2l6ZS5oZWlnaHQoKSk7CisgICAgaWYgKCFwYWludFJlZmxlY3Rpb24ob3B0aW9ucywgc3VyZmFj
ZS5nZXQoKSkpIHsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShv
cHRpb25zLnN1cmZhY2UpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0
dXJlKCpzdXJmYWNlLmdldCgpLCB2aWV3cG9ydFJlY3QsIFRyYW5zZm9ybWF0aW9uTWF0cml4KCks
IG9wdGlvbnMub3BhY2l0eSwgMCk7CiAgICAgfQogCi0gICAgaWYgKG1fbGF5ZXJUeXBlID09IFNj
aXNzb3JMYXllcikKLSAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0Lmlu
dGVyc2VjdChtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0KTsKLSAgICBvcHRpb25zLnRl
eHR1cmVNYXBwZXItPnNldENsaXAob3B0aW9uc0ZvckRlc2NlbmRhbnRzLnNjaXNzb3JSZWN0KTsK
LQotICAgIFRleHR1cmVNYXBwZXJDYWNoZUxvY2sobV90ZXh0dXJlLmdldCgpKTsKLSAgICBUZXh0
dXJlTWFwcGVyQ2FjaGVMb2NrKG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgVGV4dHVyZU1hcHBlckNh
Y2hlTG9jayhtX3JlcGxpY2FTdXJmYWNlLmdldCgpKTsKLQotICAgIG9wdGlvbnMuY2FjaGUtPnB1
cmdlKCk7Ci0KLSAgICBpZiAoaXNTdXJmYWNlKSB7Ci0gICAgICAgIEFTU0VSVChtX3N1cmZhY2Up
OwotICAgICAgICBpZiAoIW1fc3VyZmFjZS0+aXNWYWxpZCgpKQotICAgICAgICAgICAgaXNEaXJ0
eSA9IHRydWU7Ci0gICAgICAgIGlmIChtX3N0YXRlLnRpbGVkKSB7Ci0gICAgICAgICAgICBtX3N1
cmZhY2UtPnJlc2V0KG9wdGlvbnMudmlzaWJsZVJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIG1f
c3VyZmFjZS0+c2V0T2Zmc2V0KG9wdGlvbnMudmlzaWJsZVJlY3QubG9jYXRpb24oKSk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoaXNEaXJ0eSkKLSAgICAgICAgICAgIG1fc3VyZmFjZS0+cmVzZXQobV9s
YXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBvcHRpb25zLnN1cmZhY2UtPnNpemUoKSA6
IG1fc2l6ZSk7Ci0gICAgICAgIG9wdGlvbnMuY2FjaGUtPm1hcmsobV9zdXJmYWNlLmdldCgpKTsK
LSAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShtX3N1cmZhY2UuZ2V0
KCkpOwotICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMuc3VyZmFjZSA9IG1fc3VyZmFjZS5n
ZXQoKTsKLSAgICB9IGVsc2UgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAgbV9zdXJmYWNlLT5kZXN0
cm95KCk7Ci0KLSAgICBpZiAoaXNEaXJ0eSB8fCAhaXNTdXJmYWNlIHx8IG1fc3RhdGUudGlsZWQg
fHwgIW1fc3VyZmFjZS0+aXNWYWxpZCgpKQotICAgICAgICBwYWludFNlbGZBbmRDaGlsZHJlbihv
cHRpb25zLCBvcHRpb25zRm9yRGVzY2VuZGFudHMpOwotCi0gICAgcGFpbnRTdXJmYWNlKG9wdGlv
bnMpOworICAgIG9wdGlvbnMuc3VyZmFjZU1hbmFnZXItPnJlbGVhc2VJbnRlcm1lZGlhdGVTdXJm
YWNlKHN1cmZhY2UuZ2V0KCkpOworICAgIG9wdGlvbnMuc3VyZmFjZU1hbmFnZXItPnJlbGVhc2VJ
bnRlcm1lZGlhdGVTdXJmYWNlKG1hc2tTdXJmYWNlLmdldCgpKTsKIH0KIAogVGV4dHVyZU1hcHBl
ck5vZGU6On5UZXh0dXJlTWFwcGVyTm9kZSgpCiB7Ci0gICAgc2V0TmVlZHNEaXNwbGF5KCk7Ci0g
ICAgewotICAgICAgICBjb25zdCBpbnQgY2hpbGRyZW5TaXplID0gbV9jaGlsZHJlbi5zaXplKCk7
Ci0gICAgICAgIGZvciAoaW50IGkgPSBjaGlsZHJlblNpemUtMTsgaSA+PSAwOyAtLWkpIHsKLSAg
ICAgICAgICAgIEFTU0VSVChtX2NoaWxkcmVuW2ldLT5tX3BhcmVudCA9PSB0aGlzKTsKLSAgICAg
ICAgICAgIG1fY2hpbGRyZW5baV0tPm1fcGFyZW50ID0gMDsKLSAgICAgICAgfQotICAgIH0KKyAg
ICBmb3IgKGludCBpID0gbV9jaGlsZHJlbi5zaXplKCkgLSAxOyBpID49IDA7IC0taSkKKyAgICAg
ICAgbV9jaGlsZHJlbltpXS0+bV9wYXJlbnQgPSAwOworCiAgICAgaWYgKG1fcGFyZW50KQogICAg
ICAgICBtX3BhcmVudC0+bV9jaGlsZHJlbi5yZW1vdmUobV9wYXJlbnQtPm1fY2hpbGRyZW4uZmlu
ZCh0aGlzKSk7Ci0gICAgaWYgKG1fY2FjaGUpCi0gICAgICAgIGRlbGV0ZSBtX2NhY2hlOwogfQog
Ci12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCkKK3Zv
aWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldFZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7Ci0gICAgY29uc3QgTGF5ZXJUeXBlIHByZXZMYXllclR5cGUgPSBtX2xheWVyVHlwZTsKLSAg
ICBjb21wdXRlTGF5ZXJUeXBlKCk7Ci0gICAgaWYgKHByZXZMYXllclR5cGUgIT0gbV9sYXllclR5
cGUpCi0gICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOwotICAgIGlmIChtX3RyYW5zZm9ybXMu
ZGlydHkpCi0gICAgICAgIHNldE5lZWRzRGlzcGxheSgpOwotCi0gICAgY29tcHV0ZVRyYW5zZm9y
bWF0aW9ucygpOwotICAgIGlmIChtX3N0YXRlLm1hc2tMYXllciAmJiAhbV9zdGF0ZS5kaXJ0eSkK
LSAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IG1fc3RhdGUubWFza0xheWVyLT5tX3N0YXRlLmRpcnR5
OwotICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiAhbV9zdGF0ZS5kaXJ0eSkKLSAgICAg
ICAgbV9zdGF0ZS5kaXJ0eSA9IG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLmRpcnR5Owot
Ci0gICAgY29uc3QgaW50IHNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKLQotICAgIGZvciAoaW50
IGkgPSBzaXplIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUq
IGxheWVyID0gbV9jaGlsZHJlbltpXTsKLQotICAgICAgICBsYXllci0+cGVyZm9ybVBvc3RTeW5j
T3BlcmF0aW9ucygpOwotICAgICAgICBpZiAoIW1fc3RhdGUuZGlydHkpCi0gICAgICAgICAgICBt
X3N0YXRlLmRpcnR5ID0gbGF5ZXItPm1fc3RhdGUuZGlydHk7Ci0gICAgfQotICAgIG1fc3RhdGUu
aGFzU3VyZmFjZURlc2NlbmRhbnRzID0gaGFzU3VyZmFjZURlc2NlbmRhbnRzKCk7Ci0gICAgaWYg
KG1fc3RhdGUuZGlydHkpCi0gICAgICAgIG1fc3RhdGUuZGVzY2VuZGFudHNXaXRoQ29udGVudCA9
IGNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpOwotCi0gICAgaWYgKG1fc3RhdGUucHJlc2Vy
dmVzM0QpCi0gICAgICAgIHNvcnRCeVpPcmRlcihtX2NoaWxkcmVuLCAwLCBzaXplKTsKLSAgICBp
ZiAobV9zdGF0ZS5kaXJ0eSkKLSAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbV9zdGF0
ZS5yb290VmlzaWJsZVJlY3QgPSBtX3N0YXRlLnZpc2libGVSZWN0ID0gcmVjdDsKIH0KIAotdm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIGJvb2wgcmVjdXJzZSkKK3ZvaWQgVGV4dHVyZU1h
cHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
KiBncmFwaGljc0xheWVyLCBTeW5jT3B0aW9ucyBvcHRpb25zKQogewotICAgIFRleHR1cmVNYXBw
ZXIqIHRleHR1cmVNYXBwZXIgPSByb290TGF5ZXIoKS0+bV9wbGF0Zm9ybUNsaWVudC0+dGV4dHVy
ZU1hcHBlcigpOwotICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJuYWwoZ3JhcGhpY3NMYXll
ciwgcmVjdXJzZSwgdGV4dHVyZU1hcHBlcik7Ci0gICAgcGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9u
cygpOworICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlKGdyYXBoaWNzTGF5ZXIsIHJvb3RMYXllcigp
LT5tX3RleHR1cmVNYXBwZXIsIG9wdGlvbnMpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJOb2Rl
OjpzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdy
YXBoaWNzTGF5ZXIsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCiB7Ci0gICAgY29uc3Qg
aW50IGNoYW5nZU1hc2sgPSBncmFwaGljc0xheWVyLT5jaGFuZ2VNYXNrKCk7Ci0gICAgaW5pdGlh
bGl6ZVRleHR1cmVNYXBwZXIodGV4dHVyZU1hcHBlcik7CisgICAgaW50IGNoYW5nZU1hc2sgPSBn
cmFwaGljc0xheWVyLT5jaGFuZ2VNYXNrKCk7CiAgICAgY29uc3QgVGV4dHVyZU1hcHBlck5vZGU6
OkNvbnRlbnREYXRhJiBwZW5kaW5nQ29udGVudCA9IGdyYXBoaWNzTGF5ZXItPnBlbmRpbmdDb250
ZW50KCk7CiAgICAgaWYgKGNoYW5nZU1hc2sgPT0gTm9DaGFuZ2VzICYmIHBlbmRpbmdDb250ZW50
Lm5lZWRzRGlzcGxheVJlY3QuaXNFbXB0eSgpICYmICFwZW5kaW5nQ29udGVudC5uZWVkc0Rpc3Bs
YXkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldE5lZWRzRGlzcGxheSgpOwotICAgIGlmICht
X3BhcmVudCkKLSAgICAgICAgbV9wYXJlbnQtPm1fc3RhdGUuZGlydHkgPSB0cnVlOwotCiAgICAg
aWYgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlICYmIChj
aGFuZ2VNYXNrICYgUGFyZW50Q2hhbmdlKSkgewotICAgICAgICAvLyBUaGUgV2ViQ29yZSBjb21w
b3NpdG9yIG1hbmFnZXMgaXRlbSBvd25lcnNoaXAuIFdlIGhhdmUgdG8gbWFrZSBzdXJlIGdyYXBo
aWNzdmlldyBkb2Vzbid0Ci0gICAgICAgIC8vIHRyeSB0byBzbmF0Y2ggdGhhdCBvd25lcnNoaXAu
Ci0KLSAgICAgICAgaWYgKCFncmFwaGljc0xheWVyLT5wYXJlbnQoKSkKLSAgICAgICAgICAgIG1f
cGFyZW50ID0gMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9wYXJlbnQgPSB0b1RleHR1
cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnBhcmVudCgpKTsKKyAgICAgICAgbV9wYXJlbnQg
PSB0b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnBhcmVudCgpKTsKIAogICAgICAg
ICBpZiAoIWdyYXBoaWNzTGF5ZXItPnBhcmVudCgpICYmIG1fcGFyZW50KSB7CiAgICAgICAgICAg
ICBzaXplX3QgaW5kZXggPSBtX3BhcmVudC0+bV9jaGlsZHJlbi5maW5kKHRoaXMpOwpAQCAtNzY2
LDMwICs1OTYsMjMgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3Rh
dGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAgICBpZiAoY2hhbmdlTWFz
ayAmIENoaWxkcmVuQ2hhbmdlKSB7CiAgICAgICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBncmFwaGljc0xheWVyLT5jaGlsZHJlbigpLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGNoaWxkID0gdG9U
ZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5jaGlsZHJlbigpW2ldKSkgewotICAgICAg
ICAgICAgICAgIGlmICghY2hpbGQpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKLSAgICAgICAgICAgICAgICBj
aGlsZC0+bV9wYXJlbnQgPSB0aGlzOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgVGV4dHVy
ZU1hcHBlck5vZGUqIGNoaWxkID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5j
aGlsZHJlbigpW2ldKTsKKyAgICAgICAgICAgIGlmICghY2hpbGQpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZCk7CisgICAgICAg
ICAgICBjaGlsZC0+bV9wYXJlbnQgPSB0aGlzOwogICAgICAgICB9Ci0gICAgICAgIG1fc3RhdGUu
ZGlydHkgPSB0cnVlOwogICAgIH0KIAogICAgIGlmIChjaGFuZ2VNYXNrICYgKFNpemVDaGFuZ2Ug
fCBDb250ZW50c1JlY3RDaGFuZ2UpKSB7Ci0gICAgICAgIEludFNpemUgd2FudGVkU2l6ZSA9IElu
dFNpemUoZ3JhcGhpY3NMYXllci0+c2l6ZSgpLndpZHRoKCksIGdyYXBoaWNzTGF5ZXItPnNpemUo
KS5oZWlnaHQoKSk7CisgICAgICAgIEZsb2F0U2l6ZSB3YW50ZWRTaXplKGdyYXBoaWNzTGF5ZXIt
PnNpemUoKS53aWR0aCgpLCBncmFwaGljc0xheWVyLT5zaXplKCkuaGVpZ2h0KCkpOwogICAgICAg
ICBpZiAod2FudGVkU2l6ZS5pc0VtcHR5KCkgJiYgcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUg
PT0gSFRNTENvbnRlbnRUeXBlKQotICAgICAgICAgICAgd2FudGVkU2l6ZSA9IEludFNpemUoZ3Jh
cGhpY3NMYXllci0+Y29udGVudHNSZWN0KCkud2lkdGgoKSwgZ3JhcGhpY3NMYXllci0+Y29udGVu
dHNSZWN0KCkuaGVpZ2h0KCkpOwotCi0gICAgICAgIGlmICh3YW50ZWRTaXplICE9IG1fc2l6ZSkg
ewotICAgICAgICAgICAgbV9zaXplID0gSW50U2l6ZSh3YW50ZWRTaXplLndpZHRoKCksIHdhbnRl
ZFNpemUuaGVpZ2h0KCkpOwotICAgICAgICAgICAgaWYgKG1fcGxhdGZvcm1DbGllbnQpCi0gICAg
ICAgICAgICAgICAgbV9wbGF0Zm9ybUNsaWVudC0+c2V0U2l6ZUNoYW5nZWQobV9zaXplKTsKLSAg
ICAgICAgICAgIGNvbnN0IGJvb2wgbmVlZHNUaWxpbmcgPSBtX3NpemUud2lkdGgoKSA+IDIwMDAg
fHwgbV9zaXplLmhlaWdodCgpID4gMjAwMDsKLSAgICAgICAgICAgIGlmIChtX3N0YXRlLnRpbGVk
ICE9IG5lZWRzVGlsaW5nKQotICAgICAgICAgICAgICAgIG1fc3RhdGUudGlsZWQgPSBuZWVkc1Rp
bGluZzsKLSAgICAgICAgICAgIG1fc3RhdGUuZGlydHkgPSB0cnVlOwotICAgICAgICB9CisgICAg
ICAgICAgICB3YW50ZWRTaXplID0gRmxvYXRTaXplKGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzUmVj
dCgpLndpZHRoKCksIGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzUmVjdCgpLmhlaWdodCgpKTsKKwor
ICAgICAgICBpZiAod2FudGVkU2l6ZSAhPSBtX3NpemUpCisgICAgICAgICAgICBtX3RpbGVzLmNs
ZWFyKCk7CisKKyAgICAgICAgbV9zaXplID0gd2FudGVkU2l6ZTsKICAgICB9CiAKICAgICBpZiAo
Y2hhbmdlTWFzayAmIE1hc2tMYXllckNoYW5nZSkgewpAQCAtODAyLDI5ICs2MjUsMTMgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAgICAgICAgICAgbGF5ZXItPm1fZWZmZWN0VGFyZ2V0ID0g
dGhpczsKICAgICB9CiAKLSAgICBpZiAoY2hhbmdlTWFzayAmIChUcmFuc2Zvcm1DaGFuZ2UgfCBT
aXplQ2hhbmdlIHwgQW5jaG9yUG9pbnRDaGFuZ2UgfCBQb3NpdGlvbkNoYW5nZSkpCi0gICAgICAg
IG1fdHJhbnNmb3Jtcy5sb2NhbERpcnR5ID0gdHJ1ZTsKLQotICAgIGlmIChjaGFuZ2VNYXNrICYg
KENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlIHwgU2l6ZUNoYW5nZSkpCi0gICAgICAgIG1fdHJhbnNm
b3Jtcy5wZXJzcGVjdGl2ZURpcnR5ID0gdHJ1ZTsKLQotICAgIGlmIChjaGFuZ2VNYXNrICYgKENo
aWxkcmVuVHJhbnNmb3JtQ2hhbmdlIHwgUHJlc2VydmVzM0RDaGFuZ2UgfCBUcmFuc2Zvcm1DaGFu
Z2UgfCBBbmNob3JQb2ludENoYW5nZSB8IFNpemVDaGFuZ2UgfCBDb250ZW50c1JlY3RDaGFuZ2Ug
fCBCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2UgfCBQb3NpdGlvbkNoYW5nZSB8IE1hc2tMYXllckNo
YW5nZSB8IERyYXdzQ29udGVudENoYW5nZSB8IENvbnRlbnRDaGFuZ2UgfCBSZXBsaWNhTGF5ZXJD
aGFuZ2UpKSAgICB7Ci0gICAgICAgIC8vIER1ZSB0byB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0
aGUgd2F5IFdlYkNvcmUgaGFuZGxlcyB0cmFuc2Zvcm1zIGFuZCB0aGUgd2F5IFF0IGhhbmRsZXMg
dHJhbnNmb3JtcywKLSAgICAgICAgLy8gYWxsIHRoZXNlIGVsZW1lbnRzIGFmZmVjdCB0aGUgdHJh
bnNmb3JtcyBvZiBhbGwgdGhlIGRlc2NlbmRhbnRzLgotICAgICAgICBpbnZhbGlkYXRlVHJhbnNm
b3JtKCk7Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZU1hc2sgJiBEaXNwbGF5Q2hhbmdlKQotICAg
ICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKLQogICAgIG1fc3RhdGUubWFza0xheWVyID0gdG9U
ZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5tYXNrTGF5ZXIoKSk7CiAgICAgbV9zdGF0
ZS5yZXBsaWNhTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnJlcGxp
Y2FMYXllcigpKTsKICAgICBtX3N0YXRlLnBvcyA9IGdyYXBoaWNzTGF5ZXItPnBvc2l0aW9uKCk7
CiAgICAgbV9zdGF0ZS5hbmNob3JQb2ludCA9IGdyYXBoaWNzTGF5ZXItPmFuY2hvclBvaW50KCk7
CiAgICAgbV9zdGF0ZS5zaXplID0gZ3JhcGhpY3NMYXllci0+c2l6ZSgpOwotICAgIG1fc3RhdGUu
dHJhbnNmb3JtID0gZ3JhcGhpY3NMYXllci0+dHJhbnNmb3JtKCk7CiAgICAgbV9zdGF0ZS5jb250
ZW50c1JlY3QgPSBncmFwaGljc0xheWVyLT5jb250ZW50c1JlY3QoKTsKLSAgICBtX3N0YXRlLm9w
YWNpdHkgPSBncmFwaGljc0xheWVyLT5vcGFjaXR5KCk7CisgICAgbV9zdGF0ZS50cmFuc2Zvcm0g
PSBncmFwaGljc0xheWVyLT50cmFuc2Zvcm0oKTsKICAgICBtX3N0YXRlLmNvbnRlbnRzUmVjdCA9
IGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzUmVjdCgpOwogICAgIG1fc3RhdGUucHJlc2VydmVzM0Qg
PSBncmFwaGljc0xheWVyLT5wcmVzZXJ2ZXMzRCgpOwogICAgIG1fc3RhdGUubWFza3NUb0JvdW5k
cyA9IGdyYXBoaWNzTGF5ZXItPm1hc2tzVG9Cb3VuZHMoKTsKQEAgLTgzMiw0NiArNjM5LDcwIEBA
IHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlciogZ3JhCiAgICAgbV9zdGF0ZS5jb250ZW50c09wYXF1ZSA9IGdy
YXBoaWNzTGF5ZXItPmNvbnRlbnRzT3BhcXVlKCk7CiAgICAgbV9zdGF0ZS5iYWNrZmFjZVZpc2li
aWxpdHkgPSBncmFwaGljc0xheWVyLT5iYWNrZmFjZVZpc2liaWxpdHkoKTsKICAgICBtX3N0YXRl
LmNoaWxkcmVuVHJhbnNmb3JtID0gZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW5UcmFuc2Zvcm0oKTsK
KyAgICBtX3N0YXRlLm9wYWNpdHkgPSBncmFwaGljc0xheWVyLT5vcGFjaXR5KCk7CiAgICAgbV9j
dXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9IHBlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlOwog
ICAgIG1fY3VycmVudENvbnRlbnQuaW1hZ2UgPSBwZW5kaW5nQ29udGVudC5pbWFnZTsKICAgICBt
X2N1cnJlbnRDb250ZW50Lm1lZGlhID0gcGVuZGluZ0NvbnRlbnQubWVkaWE7Ci0gICAgbV9jdXJy
ZW50Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IgPSBwZW5kaW5nQ29udGVudC5iYWNrZ3JvdW5kQ29s
b3I7CiAgICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBtX2N1cnJlbnRDb250ZW50
Lm5lZWRzRGlzcGxheSB8fCBwZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXk7Ci0gICAgbV9jdXJy
ZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0LnVuaXRlKHBlbmRpbmdDb250ZW50Lm5lZWRzRGlz
cGxheVJlY3QpOworICAgIGlmICghbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkpCisgICAg
ICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC51bml0ZShwZW5kaW5nQ29udGVu
dC5uZWVkc0Rpc3BsYXlSZWN0KTsKKworICAgIG1fb3BhY2l0eSA9IG1fc3RhdGUub3BhY2l0eTsK
KyAgICBtX3RyYW5zZm9ybXMuYmFzZSA9IG1fc3RhdGUudHJhbnNmb3JtOworfQogCitib29sIFRl
eHR1cmVNYXBwZXJOb2RlOjpkZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2Rl
OjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUludGVybmFsKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
KiBncmFwaGljc0xheWVyLCBib29sIHJlY3Vyc2UsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBw
ZXIpCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgVGV4dHVyZU1hcHBlciogdGV4dHVy
ZU1hcHBlciwgU3luY09wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBzeW5jQ29tcG9zaXRpbmdTdGF0
ZVNlbGYoZ3JhcGhpY3NMYXllciwgdGV4dHVyZU1hcHBlcik7CisgICAgaWYgKGdyYXBoaWNzTGF5
ZXIpIHsKKyAgICAgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKGdyYXBoaWNzTGF5ZXIsIHRl
eHR1cmVNYXBwZXIpOworICAgICAgICBncmFwaGljc0xheWVyLT5kaWRTeW5jaHJvbml6ZSgpOwor
ICAgIH0KIAotICAgIGdyYXBoaWNzTGF5ZXItPmRpZFN5bmNocm9uaXplKCk7CisgICAgaWYgKGdy
YXBoaWNzTGF5ZXIgJiYgbV9zdGF0ZS5tYXNrTGF5ZXIpIHsKKyAgICAgICAgbV9zdGF0ZS5tYXNr
TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIo
Z3JhcGhpY3NMYXllci0+bWFza0xheWVyKCkpLCB0ZXh0dXJlTWFwcGVyKTsKIAotICAgIGlmICht
X3N0YXRlLm1hc2tMYXllcikgewotICAgICAgICBtX3N0YXRlLm1hc2tMYXllci0+c3luY0NvbXBv
c2l0aW5nU3RhdGVJbnRlcm5hbCh0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGdyYXBoaWNz
TGF5ZXItPm1hc2tMYXllcigpKSwgZmFsc2UsIHRleHR1cmVNYXBwZXIpOworICAgICAgICAvLyBB
IG1hc2sgbGF5ZXIgaGFzIGl0cyBwYXJlbnQncyBzaXplIGJ5IGRlZmF1bHQsIGluIGNhc2UgaXQn
cyBub3Qgc2V0IHNwZWNpZmljYWxseS4KICAgICAgICAgaWYgKG1fc3RhdGUubWFza0xheWVyLT5t
X3NpemUuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9zdGF0ZS5tYXNrTGF5ZXItPm1fc2l6ZSA9
IG1fc2l6ZTsKICAgICB9CiAKICAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCi0gICAgICAg
IG1fc3RhdGUucmVwbGljYUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUludGVybmFsKHRvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIoZ3JhcGhpY3NMYXllci0+cmVwbGljYUxheWVyKCkpLCBm
YWxzZSwgdGV4dHVyZU1hcHBlcik7CisgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5zeW5j
Q29tcG9zaXRpbmdTdGF0ZSh0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGdyYXBoaWNzTGF5
ZXItPnJlcGxpY2FMYXllcigpKSwgdGV4dHVyZU1hcHBlcik7CiAKLSAgICBpZiAobV9zdGF0ZS5k
aXJ0eSkKLSAgICAgICAgdXBsb2FkVGV4dHVyZUZyb21Db250ZW50KHRleHR1cmVNYXBwZXIsIG1f
c3RhdGUudmlzaWJsZVJlY3QsIGdyYXBoaWNzTGF5ZXIpOworICAgIGNvbXB1dGVBbGxUcmFuc2Zv
cm1zKCk7CisgICAgY29tcHV0ZUJvdW5kaW5nUmVjdEZyb21Sb290SWZOZWVkZWQoKTsKKyAgICBj
b21wdXRlUGVyc3BlY3RpdmVUcmFuc2Zvcm1JZk5lZWRlZCgpOworICAgIGNvbXB1dGVUaWxlcygp
OworICAgIGNvbXB1dGVPdmVybGFwc0lmTmVlZGVkKCk7CiAKLSAgICBtX2N1cnJlbnRDb250ZW50
Lm5lZWRzRGlzcGxheVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgbV9jdXJyZW50Q29udGVudC5uZWVk
c0Rpc3BsYXkgPSBmYWxzZTsKKyAgICBpZiAoZ3JhcGhpY3NMYXllcikKKyAgICAgICAgcmVuZGVy
Q29udGVudCh0ZXh0dXJlTWFwcGVyLCBncmFwaGljc0xheWVyKTsKIAotICAgIGlmICghcmVjdXJz
ZSkKKyAgICBpZiAoIShvcHRpb25zICYgVHJhdmVyc2VEZXNjZW5kYW50cykpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRyZW4gPSBncmFwaGljc0xh
eWVyLT5jaGlsZHJlbigpOwotICAgIGZvciAoaW50IGkgPSBjaGlsZHJlbi5zaXplKCkgLSAxOyBp
ID49IDA7IC0taSkgewotICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVy
ZU1hcHBlck5vZGUoY2hpbGRyZW5baV0pOwotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgbm9kZS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbnRlcm5hbCh0
b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGNoaWxkcmVuW2ldKSwgdHJ1ZSwgdGV4dHVyZU1h
cHBlcik7CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIpIHsKKyAgICAgICAgVmVjdG9yPEdyYXBoaWNz
TGF5ZXIqPiBjaGlsZHJlbiA9IGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVuKCk7CisgICAgICAgIGZv
ciAoaW50IGkgPSBjaGlsZHJlbi5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICAg
ICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGNoaWxkcmVu
W2ldKTsKKyAgICAgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIG5vZGUtPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRvR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIoY2hpbGRyZW5baV0pLCB0ZXh0dXJlTWFwcGVyLCBvcHRpb25zKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGkgPSBtX2NoaWxkcmVuLnNpemUo
KSAtIDE7IGkgPj0gMDsgLS1pKQorICAgICAgICAgICAgbV9jaGlsZHJlbltpXS0+c3luY0NvbXBv
c2l0aW5nU3RhdGUoMCwgdGV4dHVyZU1hcHBlciwgb3B0aW9ucyk7CiAgICAgfQorCisgICAgaWYg
KG1fc3RhdGUucHJlc2VydmVzM0QpCisgICAgICAgIHNvcnRCeVpPcmRlcihtX2NoaWxkcmVuLCAw
LCBtX2NoaWxkcmVuLnNpemUoKSk7CiB9CiAKIH0KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5oCmluZGV4IGM1ZGVjYzEuLjM5MWNhNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCkBAIC0y
NSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkltYWdl
LmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1P
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCkBA
IC0zNiwyMiArMzUsMjMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllcjsKIGNsYXNzIFRleHR1cmVNYXBwZXJOb2RlOwotY2xhc3MgVGV4
dHVyZU1hcHBlckNhY2hlOwogY2xhc3MgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI7CitjbGFz
cyBUZXh0dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXI7CiAKLXN0cnVjdCBUZXhtYXBQYWludE9wdGlv
bnMgeworY2xhc3MgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyB7CitwdWJsaWM6CiAgICAgQml0
bWFwVGV4dHVyZSogc3VyZmFjZTsKICAgICBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyOwot
ICAgIFRleHR1cmVNYXBwZXJOb2RlKiByb290TGF5ZXI7CisgICAgVGV4dHVyZU1hcHBlclN1cmZh
Y2VNYW5hZ2VyKiBzdXJmYWNlTWFuYWdlcjsKKwogICAgIGZsb2F0IG9wYWNpdHk7Ci0gICAgSW50
UmVjdCBzY2lzc29yUmVjdDsKLSAgICBJbnRSZWN0IHZpc2libGVSZWN0OwogICAgIGJvb2wgaXNT
dXJmYWNlOwotICAgIFRleHR1cmVNYXBwZXJDYWNoZSogY2FjaGU7CisgICAgVGV4dHVyZU1hcHBl
clBhaW50T3B0aW9ucygpIDogc3VyZmFjZSgwKSwgdGV4dHVyZU1hcHBlcigwKSwgb3BhY2l0eSgx
LjApLCBpc1N1cmZhY2UoZmFsc2UpIHsgfQogfTsKIAotY2xhc3MgVGV4dHVyZU1hcHBlck5vZGUg
OiBwdWJsaWMgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllciB7CitjbGFzcyBUZXh0dXJlTWFwcGVy
Tm9kZSB7CiAKIHB1YmxpYzoKICAgICAvLyBUaGlzIHNldCBvZiBmbGFncyBoZWxwIHVzIGRlZmVy
IHdoaWNoIHByb3BlcnRpZXMgb2YgdGhlIGxheWVyIGhhdmUgYmVlbgpAQCAtODUsMTcgKzg1LDIx
IEBAIHB1YmxpYzoKIAogICAgICAgICBSZXBsaWNhTGF5ZXJDaGFuZ2UgPSAgICAgICAgKDFMIDw8
IDIwKQogICAgIH07CisKKyAgICBlbnVtIFN5bmNPcHRpb25zIHsKKyAgICAgICAgVHJhdmVyc2VE
ZXNjZW5kYW50cyA9IDEKKyAgICB9OworCiAgICAgLy8gVGhlIGNvbXBvc2l0b3IgbGV0cyB1cyBz
cGVjaWFsLWNhc2UgaW1hZ2VzIGFuZCBjb2xvcnMsIHNvIHdlIHRyeSB0byBkbyBzby4KICAgICBl
bnVtIENvbnRlbnRUeXBlIHsgSFRNTENvbnRlbnRUeXBlLCBEaXJlY3RJbWFnZUNvbnRlbnRUeXBl
LCBDb2xvckNvbnRlbnRUeXBlLCBNZWRpYUNvbnRlbnRUeXBlLCBDYW52YXMzRENvbnRlbnRUeXBl
fTsKICAgICBzdHJ1Y3QgQ29udGVudERhdGEgewotICAgICAgICBJbnRSZWN0IG5lZWRzRGlzcGxh
eVJlY3Q7CisgICAgICAgIEZsb2F0UmVjdCBuZWVkc0Rpc3BsYXlSZWN0OwogICAgICAgICBib29s
IG5lZWRzRGlzcGxheTsKICAgICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwogCiAgICAgICAg
IENvbnRlbnRUeXBlIGNvbnRlbnRUeXBlOwogICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlOwot
ICAgICAgICBUZXh0dXJlTWFwcGVyTWVkaWFMYXllciogbWVkaWE7Ci0KKyAgICAgICAgY29uc3Qg
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIG1lZGlhOwogICAgICAgICBDb250ZW50RGF0YSgp
CiAgICAgICAgICAgICA6IG5lZWRzRGlzcGxheShmYWxzZSkKICAgICAgICAgICAgICwgY29udGVu
dFR5cGUoSFRNTENvbnRlbnRUeXBlKQpAQCAtMTA1LDEwMCArMTA5LDk5IEBAIHB1YmxpYzoKICAg
ICAgICAgfQogICAgIH07CiAKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSgpCisgICAgICAgIDogbV9w
YXJlbnQoMCksIG1fZWZmZWN0VGFyZ2V0KDApLCBtX29wYWNpdHkoMS4wKSwgbV9zdXJmYWNlTWFu
YWdlcigwKSwgbV90ZXh0dXJlTWFwcGVyKDApIHsgfQogCi0gICAgVGV4dHVyZU1hcHBlck5vZGUo
KTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyTm9kZSgpOwogCi0gICAgdm9pZCBzeW5jQ29t
cG9zaXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciosIGJvb2wgcmVjdXJzaXZl
KTsKKyAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyKiwgaW50IHN5bmNPcHRpb25zID0gMCk7CisgICAgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0
ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciosIFRleHR1cmVNYXBwZXIqLCBpbnQgc3luY09w
dGlvbnMgPSAwKTsKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKG1f
c2l6ZS53aWR0aCgpICsgLjUsIG1fc2l6ZS5oZWlnaHQoKSArIC41KTsgfQorICAgIHZvaWQgc2V0
VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdm9pZCBzZXRPcGFj
aXR5KGZsb2F0IHZhbHVlKSB7IG1fb3BhY2l0eSA9IHZhbHVlOyB9CisgICAgdm9pZCBzZXRWaXNp
YmxlUmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBzZXRUZXh0dXJlTWFwcGVyKFRleHR1
cmVNYXBwZXIqIHRleG1hcCkgeyBtX3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7IH0KKyAgICBib29s
IGRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkgY29uc3Q7CiAKLXByb3Rl
Y3RlZDoKLSAgICAvLyBSZWltcHMgZnJvbSBUZXh0dXJlTWFwcGVyQ29udGVudExheWVyCi0gICAg
dmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0UGxhdGZvcm1MYXllckNsaWVudChUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQq
KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoVGV4dHVyZU1hcHBlciosIGNvbnN0IFRleHR1cmVN
YXBwZXJDb250ZW50TGF5ZXI6OlBhaW50T3B0aW9ucyYpOworICAgIHZvaWQgcGFpbnQoKTsKKwor
ICAgIGJvb2wgbmVlZHNUb0NvbXB1dGVCb3VuZGluZ1JlY3QoKSBjb25zdDsKKworICAgIGNvbnN0
IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBtZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vy
cmVudENvbnRlbnQubWVkaWE7IH0KIAogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyTm9kZSog
cm9vdExheWVyKCk7Ci0gICAgdm9pZCBjbGVhckRpcmVjdEltYWdlKCk7Ci0gICAgdm9pZCBjb21w
dXRlVHJhbnNmb3JtYXRpb25zKCk7Ci0gICAgSW50U2l6ZSBuZWFyZXN0U3VyZmFjZVNpemUoKSBj
b25zdDsKLSAgICB2b2lkIGNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtKCk7Ci0gICAgdm9pZCBjb21w
dXRlTGF5ZXJUeXBlKCk7Ci0gICAgdm9pZCBjb21wdXRlTG9jYWxUcmFuc2Zvcm0oKTsKLSAgICB2
b2lkIGZsYXR0ZW5UbzJEU3BhY2VJZk5lY2Vzc2FyeSgpOwotICAgIHZvaWQgaW5pdGlhbGl6ZVRl
eHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciopOwotICAgIHZvaWQgaW52YWxpZGF0ZVRyYW5zZm9y
bSgpOworICAgIHZvaWQgY29tcHV0ZUFsbFRyYW5zZm9ybXMoKTsKKyAgICB2b2lkIGNvbXB1dGVW
aXNpYmxlUmVjdElmTmVlZGVkKCk7CisgICAgdm9pZCBjb21wdXRlUGVyc3BlY3RpdmVUcmFuc2Zv
cm1JZk5lZWRlZCgpOworICAgIHZvaWQgY29tcHV0ZVJlcGxpY2FUcmFuc2Zvcm1JZk5lZWRlZCgp
OworICAgIHZvaWQgY29tcHV0ZU92ZXJsYXBzSWZOZWVkZWQoKTsKKyAgICB2b2lkIGNvbXB1dGVM
b2NhbFRyYW5zZm9ybUlmTmVlZGVkKCk7CisgICAgdm9pZCBjb21wdXRlQm91bmRpbmdSZWN0RnJv
bVJvb3RJZk5lZWRlZCgpOworICAgIHZvaWQgY29tcHV0ZVRpbGVzKCk7CisgICAgaW50IGNvdW50
RGVzY2VuZGFudHNXaXRoQ29udGVudCgpIGNvbnN0OworICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0
Rm9yVGlsZVJlY3QoY29uc3QgRmxvYXRSZWN0JiB0b3RhbFRhcmdldFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QpIGNvbnN0OworICAgIHZvaWQgaW52YWxpZGF0ZVZpZXdwb3J0KGNvbnN0
IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgbm90aWZ5Q2hhbmdlKENoYW5nZU1hc2spOwotICAgIHZv
aWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50
UmVjdCk7Ci0gICAgdm9pZCBwZXJmb3JtUG9zdFN5bmNPcGVyYXRpb25zKCk7Ci0gICAgdm9pZCBz
eW5jQ29tcG9zaXRpbmdTdGF0ZUludGVybmFsKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiwg
Ym9vbCByZWN1cnNpdmUsIFRleHR1cmVNYXBwZXIqKTsKICAgICB2b2lkIHN5bmNDb21wb3NpdGlu
Z1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgVGV4
dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcik7Ci0gICAgVGV4dHVyZU1hcHBlckNhY2hlKiBjYWNo
ZSgpOwogCi0gICAgdm9pZCBwYWludFJlY3Vyc2l2ZShUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9u
cyk7Ci0gICAgYm9vbCBwYWludFJlcGxpY2EoY29uc3QgVGV4bWFwUGFpbnRPcHRpb25zJiBvcHRp
b25zKTsKLSAgICB2b2lkIHBhaW50U3VyZmFjZShjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9w
dGlvbnMpOwotICAgIHZvaWQgcGFpbnRTZWxmKGNvbnN0IFRleG1hcFBhaW50T3B0aW9ucyYgb3B0
aW9ucyk7Ci0gICAgdm9pZCBwYWludFNlbGZBbmRDaGlsZHJlbihjb25zdCBUZXhtYXBQYWludE9w
dGlvbnMmIG9wdGlvbnMsIFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9uc0ZvckRlc2NlbmRhbnRz
KTsKLSAgICB2b2lkIHVwbG9hZFRleHR1cmVGcm9tQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0
dXJlTWFwcGVyLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgR3JhcGhpY3NMYXllciogbGF5
ZXIpOwotCi0gICAgaW50IGNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpIGNvbnN0OwotICAg
IGJvb2wgaGFzU3VyZmFjZURlc2NlbmRhbnRzKCkgY29uc3Q7CisgICAgc3RhdGljIGludCBjb21w
YXJlR3JhcGhpY3NMYXllcnNaVmFsdWUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYik7Cisg
ICAgc3RhdGljIHZvaWQgc29ydEJ5Wk9yZGVyKFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSogPiYg
YXJyYXksIGludCBmaXJzdCwgaW50IGxhc3QpOwogCi0gICAgVGV4dHVyZU1hcHBlciogdGV4dHVy
ZU1hcHBlcigpOworICAgIEJpdG1hcFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RpbGVz
LmlzRW1wdHkoKSA/IDAgOiBtX3RpbGVzWzBdLnRleHR1cmUuZ2V0KCk7IH0KIAorICAgIHZvaWQg
cGFpbnRSZWN1cnNpdmUoVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyk7CisgICAgYm9vbCBwYWlu
dFJlZmxlY3Rpb24oY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYsIEJpdG1hcFRleHR1
cmUqIHN1cmZhY2UpOworICAgIHZvaWQgcGFpbnRTZWxmKGNvbnN0IFRleHR1cmVNYXBwZXJQYWlu
dE9wdGlvbnMmKTsKKyAgICB2b2lkIHBhaW50U2VsZkFuZENoaWxkcmVuKGNvbnN0IFRleHR1cmVN
YXBwZXJQYWludE9wdGlvbnMmLCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvcHRpb25zRm9y
RGVzY2VuZGFudHMpOworICAgIHZvaWQgcmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiwgR3Jh
cGhpY3NMYXllciopOwogCi0gICAgc3RhdGljIFRleHR1cmVNYXBwZXJOb2RlKiB0b1RleHR1cmVN
YXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXIqKTsKLSAgICBzdGF0aWMgaW50IGNvbXBhcmVHcmFwaGlj
c0xheWVyc1pWYWx1ZShjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKTsKLSAgICBzdGF0aWMg
dm9pZCBzb3J0QnlaT3JkZXIoVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKiA+JiBhcnJheSwgaW50
IGZpcnN0LCBpbnQgbGFzdCk7CiAgICAgc3RydWN0IFRyYW5zZm9ybURhdGEgewotICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBiYXNlLCB0YXJnZXQsIHJlcGxpY2EsIGZvckRlc2NlbmRhbnRz
LCBwZXJzcGVjdGl2ZSwgbG9jYWw7Ci0gICAgICAgIEludFJlY3QgdGFyZ2V0Qm91bmRpbmdSZWN0
OworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0YXJnZXQ7CisgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHJlcGxpY2E7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGZvckRl
c2NlbmRhbnRzOworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbDsKKyAgICAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggYmFzZTsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
cGVyc3BlY3RpdmU7CisgICAgICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ1JlY3Q7CiAgICAg
ICAgIGZsb2F0IGNlbnRlclo7Ci0gICAgICAgIGJvb2wgZGlydHksIGxvY2FsRGlydHksIHBlcnNw
ZWN0aXZlRGlydHk7Ci0gICAgICAgIEludFJlY3QgYm91bmRpbmdSZWN0RnJvbVJvb3Q7Ci0gICAg
ICAgIFRyYW5zZm9ybURhdGEoKSA6IGRpcnR5KHRydWUpLCBsb2NhbERpcnR5KHRydWUpLCBwZXJz
cGVjdGl2ZURpcnR5KHRydWUpIHsgfQorICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0RnJv
bVJvb3Q7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3RGcm9tUm9vdEZvckRlc2NlbmRh
bnRzOworICAgICAgICBUcmFuc2Zvcm1EYXRhKCkgeyB9CiAgICAgfTsKIAogICAgIFRyYW5zZm9y
bURhdGEgbV90cmFuc2Zvcm1zOwogCi0gICAgZW51bSBMYXllclR5cGUgewotICAgICAgICBEZWZh
dWx0TGF5ZXIsCi0gICAgICAgIFJvb3RMYXllciwKLSAgICAgICAgU2Npc3NvckxheWVyLAotICAg
ICAgICBDbGlwTGF5ZXIsCi0gICAgICAgIFRyYW5zcGFyZW5jeUxheWVyCi0gICAgfTsKLQotICAg
IExheWVyVHlwZSBtX2xheWVyVHlwZTsKLQotICAgIGlubGluZSBJbnRSZWN0IHRhcmdldFJlY3Qo
KSBjb25zdAorICAgIGlubGluZSBGbG9hdFJlY3QgdGFyZ2V0UmVjdCgpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVu
dFR5cGUgPyBlbnRpcmVSZWN0KCkgOiBtX3N0YXRlLmNvbnRlbnRzUmVjdDsKICAgICB9CiAKLSAg
ICBpbmxpbmUgSW50UmVjdCBlbnRpcmVSZWN0KCkgY29uc3QKKyAgICBpbmxpbmUgRmxvYXRSZWN0
IGVudGlyZVJlY3QoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIEludFJlY3QoMCwgMCwg
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBGbG9hdFJl
Y3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CiAgICAgfQogCi0gICAg
aW5saW5lIEludFJlY3QgcmVwbGljYVJlY3QoKSBjb25zdAorICAgIEZsb2F0U2l6ZSBjb250ZW50
U2l6ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9sYXllclR5cGUgPT0gVHJhbnNw
YXJlbmN5TGF5ZXIgPyBJbnRSZWN0KDAsIDAsIG1fbmVhcmVzdFN1cmZhY2VTaXplLndpZHRoKCks
IG1fbmVhcmVzdFN1cmZhY2VTaXplLmhlaWdodCgpKSA6IGVudGlyZVJlY3QoKTsKKyAgICAgICAg
cmV0dXJuIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50
VHlwZSAmJiBtX2N1cnJlbnRDb250ZW50LmltYWdlID8gbV9jdXJyZW50Q29udGVudC5pbWFnZS0+
c2l6ZSgpIDogbV9zaXplOwogICAgIH0KKyAgICBzdHJ1Y3QgVGlsZSB7CisgICAgICAgIEZsb2F0
UmVjdCByZWN0OworICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZTsKKyAgICAg
ICAgYm9vbCBuZWVkc1Jlc2V0OworICAgIH07CiAKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
bV90ZXh0dXJlOwotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtX3N1cmZhY2UsIG1fcmVwbGlj
YVN1cmZhY2U7CisgICAgVmVjdG9yPFRpbGU+IG1fdGlsZXM7CiAKICAgICBDb250ZW50RGF0YSBt
X2N1cnJlbnRDb250ZW50OwogCiAgICAgVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKj4gbV9jaGls
ZHJlbjsKICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbV9wYXJlbnQ7CiAgICAgVGV4dHVyZU1hcHBl
ck5vZGUqIG1fZWZmZWN0VGFyZ2V0OwotICAgIEludFNpemUgbV9zaXplLCBtX25lYXJlc3RTdXJm
YWNlU2l6ZTsKKyAgICBGbG9hdFNpemUgbV9zaXplOworICAgIGZsb2F0IG1fb3BhY2l0eTsKICAg
ICBTdHJpbmcgbV9uYW1lOwotICAgIFRleHR1cmVNYXBwZXJMYXllckNsaWVudCogbV9wbGF0Zm9y
bUNsaWVudDsKIAogICAgIHN0cnVjdCBTdGF0ZSB7CiAgICAgICAgIEZsb2F0UG9pbnQgcG9zOwpA
QCAtMjA2LDI5ICsyMDksMjYgQEAgcHJpdmF0ZToKICAgICAgICAgRmxvYXRTaXplIHNpemU7CiAg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKICAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggY2hpbGRyZW5UcmFuc2Zvcm07Ci0gICAgICAgIENvbG9yIGJhY2tncm91bmRD
b2xvcjsKLSAgICAgICAgQ29sb3IgY3VycmVudENvbG9yOwotICAgICAgICBHcmFwaGljc0xheWVy
OjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gZ2VvT3JpZW50YXRpb247Ci0gICAg
ICAgIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBjb250
ZW50c09yaWVudGF0aW9uOwogICAgICAgICBmbG9hdCBvcGFjaXR5OwotICAgICAgICBJbnRSZWN0
IGNvbnRlbnRzUmVjdDsKKyAgICAgICAgRmxvYXRSZWN0IGNvbnRlbnRzUmVjdDsKICAgICAgICAg
aW50IGRlc2NlbmRhbnRzV2l0aENvbnRlbnQ7CiAgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBt
YXNrTGF5ZXI7CiAgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiByZXBsaWNhTGF5ZXI7Ci0gICAg
ICAgIGJvb2wgcHJlc2VydmVzM0Q7Ci0gICAgICAgIGJvb2wgbWFza3NUb0JvdW5kczsKLSAgICAg
ICAgYm9vbCBkcmF3c0NvbnRlbnQ7Ci0gICAgICAgIGJvb2wgY29udGVudHNPcGFxdWU7Ci0gICAg
ICAgIGJvb2wgYmFja2ZhY2VWaXNpYmlsaXR5OwotICAgICAgICBib29sIHZpc2libGU7Ci0gICAg
ICAgIGJvb2wgZGlydHk7Ci0gICAgICAgIGJvb2wgdGlsZWQ7Ci0gICAgICAgIGJvb2wgaGFzU3Vy
ZmFjZURlc2NlbmRhbnRzOwotICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0OworICAgICAgICBi
b29sIHByZXNlcnZlczNEIDogMTsKKyAgICAgICAgYm9vbCBtYXNrc1RvQm91bmRzIDogMTsKKyAg
ICAgICAgYm9vbCBkcmF3c0NvbnRlbnQgOiAxOworICAgICAgICBib29sIGNvbnRlbnRzT3BhcXVl
IDogMTsKKyAgICAgICAgYm9vbCBiYWNrZmFjZVZpc2liaWxpdHkgOiAxOworICAgICAgICBib29s
IHZpc2libGUgOiAxOworICAgICAgICBib29sIG5lZWRzUmVzZXQ6IDE7CisgICAgICAgIGJvb2wg
bWlnaHRIYXZlT3ZlcmxhcHMgOiAxOworICAgICAgICBib29sIG5lZWRzUmVwYWludDsKKyAgICAg
ICAgRmxvYXRSZWN0IHZpc2libGVSZWN0OworICAgICAgICBGbG9hdFJlY3Qgcm9vdFZpc2libGVS
ZWN0OworICAgICAgICBmbG9hdCBjb250ZW50U2NhbGU7CiAKICAgICAgICAgU3RhdGUoKQogICAg
ICAgICAgICAgOiBvcGFjaXR5KDEuZikKLSAgICAgICAgICAgICwgZGVzY2VuZGFudHNXaXRoQ29u
dGVudCgwKQogICAgICAgICAgICAgLCBtYXNrTGF5ZXIoMCkKICAgICAgICAgICAgICwgcmVwbGlj
YUxheWVyKDApCiAgICAgICAgICAgICAsIHByZXNlcnZlczNEKGZhbHNlKQpAQCAtMjM3LDE2ICsy
MzcsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICwgY29udGVudHNPcGFxdWUoZmFsc2UpCiAg
ICAgICAgICAgICAsIGJhY2tmYWNlVmlzaWJpbGl0eShmYWxzZSkKICAgICAgICAgICAgICwgdmlz
aWJsZSh0cnVlKQotICAgICAgICAgICAgLCBkaXJ0eSh0cnVlKQotICAgICAgICAgICAgLCB0aWxl
ZChmYWxzZSkKLSAgICAgICAgICAgICwgaGFzU3VyZmFjZURlc2NlbmRhbnRzKGZhbHNlKQorICAg
ICAgICAgICAgLCBuZWVkc1Jlc2V0KGZhbHNlKQorICAgICAgICAgICAgLCBtaWdodEhhdmVPdmVy
bGFwcyhmYWxzZSkKKyAgICAgICAgICAgICwgY29udGVudFNjYWxlKDEuMGYpCiAgICAgICAgIHsK
ICAgICAgICAgfQogICAgIH07CiAKICAgICBTdGF0ZSBtX3N0YXRlOwotICAgIFRleHR1cmVNYXBw
ZXJDYWNoZSogbV9jYWNoZTsKKyAgICBUZXh0dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXIqIG1fc3Vy
ZmFjZU1hbmFnZXI7CisgICAgVGV4dHVyZU1hcHBlciogbV90ZXh0dXJlTWFwcGVyOwogfTsKIAor
CitUZXh0dXJlTWFwcGVyTm9kZSogdG9UZXh0dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVyKik7
CisKIH0KICNlbmRpZiAvLyBUZXh0dXJlTWFwcGVyTm9kZV9oCi0tIAoxLjYuNi5yYzAuNjMuZzY2
YWJjCgo=
</data>
<flag name="review"
          id="86096"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
      

    </bug>

</bugzilla>