<?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>97394</bug_id>
          
          <creation_ts>2012-09-22 08:11:35 -0700</creation_ts>
          <short_desc>[TextureMapper] [WebKit2] Crash in WebCore::BitmapTextureGL::updateContents</short_desc>
          <delta_ts>2012-09-30 09:32:09 -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>WebKitGTK</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>helder.correia</cc>
    
    <cc>jturcotte</cc>
    
    <cc>noam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>726137</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-22 08:11:35 -0700</bug_when>
    <thetext>You can see this by going back and forth from pages that have accelerated compositing to pages that do not.

#0  0x00007f17519d0c20 in WebCore::GraphicsContext3D::makeContextCurrent() ()
   from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#1  0x00007f175155a4b0 in WebCore::GraphicsContext3D::bindTexture(unsigned int, unsigned int) ()
   from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#2  0x00007f17519d1ff1 in WebCore::BitmapTextureGL::updateContents(void const*, WebCore::IntRect const&amp;, WebCore::IntPoint const&amp;, int) () from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#3  0x00007f17519dcca3 in WebCore::TextureMapperTile::updateContents(WebCore::TextureMapper*, WebCore::Image*, WebCore::IntRect const&amp;) () from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#4  0x00007f17519dd5e5 in WebCore::TextureMapperTiledBackingStore::updateContents(WebCore::TextureMapper*, WebCore::Image*, WebCore::FloatSize const&amp;, WebCore::IntRect const&amp;) ()
   from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#5  0x00007f17519e110e in WebCore::TextureMapperLayer::updateBackingStore(WebCore::TextureMapper*, WebCore::GraphicsLayerTextureMapper*) () from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#6  0x00007f17519e1d05 in WebCore::TextureMapperLayer::syncCompositingState(WebCore::GraphicsLayerTextureMapper*, WebCore::TextureMapper*, int) () from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#7  0x00007f17519e1d6d in WebCore::TextureMapperLayer::syncCompositingState(WebCore::GraphicsLayerTextureMapper*, WebCore::TextureMapper*, int) () from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#8  0x00007f17519e1d6d in WebCore::TextureMapperLayer::syncCompositingState(WebCore::GraphicsLayerTextureMapper*, WebCore::TextureMapper*, int) () from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#9  0x00007f17519e1d6d in WebCore::TextureMapperLayer::syncCompositingState(WebCore::GraphicsLayerTextureMapper*, WebCore::TextureMapper*, int) () from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#10 0x00007f17519e1d6d in WebCore::TextureMapperLayer::syncCompositingState(WebCore::GraphicsLayerTextureMapper*, WebCore::TextureMapper*, int) () from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#11 0x00007f17519e1d6d in WebCore::TextureMapperLayer::syncCompositingState(WebCore::GraphicsLayerTextureMapper*, WebCore::TextureMapper*, int) () from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#12 0x00007f17519e1d6d in WebCore::TextureMapperLayer::syncCompositingState(WebCore::GraphicsLayerTextureMapper*, WebCore::TextureMapper*, int) () from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#13 0x00007f17519e1d6d in WebCore::TextureMapperLayer::syncCompositingState(WebCore::GraphicsLayerTextureMapper*, WebCore::TextureMapper*, int) () from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#14 0x00007f17519e1d6d in WebCore::TextureMapperLayer::syncCompositingState(WebCore::GraphicsLayerTextureMapper*, WebCore::TextureMapper*, int) () from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#15 0x00007f17519e1d6d in WebCore::TextureMapperLayer::syncCompositingState(WebCore::GraphicsLayerTextureMapper*, WebCore::TextureMapper*, int) () from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#16 0x00007f17519e1d6d in WebCore::TextureMapperLayer::syncCompositingState(WebCore::GraphicsLayerTextureMapper*, WebCore::TextureMapper*, int) () from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#17 0x00007f17516ea5f7 in WebCore::RenderLayerCompositor::flushPendingLayerChanges(bool) ()
   from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#18 0x00007f17514d6fb4 in WebCore::FrameView::syncCompositingStateForThisFrame(WebCore::Frame*) ()
   from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#19 0x00007f17514d7413 in WebCore::FrameView::syncCompositingStateIncludingSubframes() ()
   from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#20 0x00007f1750ead860 in WebKit::LayerTreeHostGtk::flushAndRenderLayers() ()
   from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#21 0x00007f1750ead8e0 in WebKit::LayerTreeHostGtk::layerFlushTimerFired() ()
   from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#22 0x00007f1750ead929 in WebKit::LayerTreeHostGtk::layerFlushTimerFiredCallback(WebKit::LayerTreeHostGtk*) ()
   from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#23 0x00007f174b200a1b in g_timeout_dispatch (source=&lt;optimized out&gt;, callback=&lt;optimized out&gt;, 
    user_data=&lt;optimized out&gt;) at gmain.c:3882
---Type &lt;return&gt; to continue, or q &lt;return&gt; to quit---
#24 0x00007f174b1ffe53 in g_main_dispatch (context=0x1966f40) at gmain.c:2539
#25 g_main_context_dispatch (context=0x1966f40) at gmain.c:3075
#26 0x00007f174b2001a0 in g_main_context_iterate (dispatch=1, block=&lt;optimized out&gt;, context=0x1966f40, 
    self=&lt;optimized out&gt;) at gmain.c:3146
#27 g_main_context_iterate (context=0x1966f40, block=&lt;optimized out&gt;, dispatch=1, self=&lt;optimized out&gt;) at gmain.c:3083
#28 0x00007f174b20059a in g_main_loop_run (loop=0x19a3000) at gmain.c:3340
#29 0x00007f1750e411ef in WebProcessMainGtk ()
   from /home/martin/WebKit/WebKitBuild/Release/.libs/libwebkit2gtk-3.0.so.0
#30 0x00007f17505b376d in __libc_start_main () from /lib/x86_64-linux-gnu/libc.so.6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727299</commentid>
    <comment_count>1</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-24 22:48:51 -0700</bug_when>
    <thetext>So far it looks like the issue is that while you can change a layer&apos;s TextureMapper, the m_textureMapper members of the BitmapTextureGL instances in the TextureMapperTiledBackingStore are stale. Continuing to investigate...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731230</commentid>
    <comment_count>2</comment_count>
      <attachid>166368</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-29 13:02:08 -0700</bug_when>
    <thetext>Created attachment 166368
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731231</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-29 13:07:44 -0700</bug_when>
    <thetext>I&apos;ve uploaded a patch that I&apos;m not entirely happy with for two reasons:

First, this causes unnecessary texture uploads even when the GraphicsContext3D doesn&apos;t change. For instance, it&apos;s always the current context in GTK+. A better fix might be to have the TexturePool independent of the TextureMapper, I think. This would allow textures to exist within the context of multiple TextureMappers.

Second, I think that this would be slightly simpler if instead of GraphicsLayerTextureMapper owning the backing store for Image* layers, this was just delegated to TexturMapperLayer and shared the &quot;normal&quot; layer path.

Both of these changes would require a much more complicated patch, so I&apos;ve fixed the crash here despite these shortcomings. Fixing a crash takes priority over absolute beauty, but I would like to continue to develop these ideas in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731241</commentid>
    <comment_count>4</comment_count>
      <attachid>166368</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-09-29 13:25:58 -0700</bug_when>
    <thetext>Comment on attachment 166368
Patch

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

Wow, kind of complicated, but probably the only way to achieve what you&apos;re trying to do.
At least in coordinated graphics we don&apos;t really change the textureMapper from underneath...

&gt; Source/WebCore/platform/graphics/texmap/TextureMapper.cpp:67
&gt; +void TextureMapper::notifyDestructionObserversEarly()

How about willBeDestroyed

&gt; Source/WebCore/platform/graphics/texmap/TextureMapper.cpp:69
&gt; +    HashSet&lt;TextureMapperDestructionObserver*&gt;::iterator stop = m_destructionObservers.end();

stop -&gt; end

&gt; Source/WebCore/platform/graphics/texmap/TextureMapper.h:203
&gt; +    void observeTextureMapper(TextureMapper* textureMapper)
&gt; +    {
&gt; +        if (m_observedTextureMapper == textureMapper)
&gt; +            return;
&gt; +
&gt; +        if (m_observedTextureMapper)
&gt; +            m_observedTextureMapper-&gt;removeDestructionObserver(this);
&gt; +
&gt; +        m_observedTextureMapper = textureMapper;
&gt; +
&gt; +        if (m_observedTextureMapper)
&gt; +            m_observedTextureMapper-&gt;addDestructionObserver(this);
&gt; +    }

This is a bit verbose.
I&apos;d rather this be an interface, with the virtual function something like willDestroyTextureMapper(TextureMapper*), and then the client can check if it&apos;s the right one.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapper.h:211
&gt; +    virtual void notifyTextureMapperDestroyed() = 0;

willDestroyTextureMapper

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:532
&gt; +    // If our TextureMapper changed the backing store will be invalid, so we need to
&gt; +    // create a new one and upload the layer contents again.
&gt; +    if (m_backingStore &amp;&amp; !m_backingStore-&gt;isValid()) {
&gt; +        m_backingStore.clear();
&gt; +        m_state.needsDisplay = true;
&gt; +    }

Why not observe the textureMapper from TextureMapperLayer, and simply clear the backingStore when it&apos;s destroyed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731244</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-29 13:37:32 -0700</bug_when>
    <thetext>(In reply to comment #4)

&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapper.h:203
&gt; &gt; +    void observeTextureMapper(TextureMapper* textureMapper)
&gt; &gt; +    {
&gt; &gt; +        if (m_observedTextureMapper == textureMapper)
&gt; &gt; +            return;
&gt; &gt; +
&gt; &gt; +        if (m_observedTextureMapper)
&gt; &gt; +            m_observedTextureMapper-&gt;removeDestructionObserver(this);
&gt; &gt; +
&gt; &gt; +        m_observedTextureMapper = textureMapper;
&gt; &gt; +
&gt; &gt; +        if (m_observedTextureMapper)
&gt; &gt; +            m_observedTextureMapper-&gt;addDestructionObserver(this);
&gt; &gt; +    }
&gt; 
&gt; This is a bit verbose.
&gt; I&apos;d rather this be an interface, with the virtual function something like willDestroyTextureMapper(TextureMapper*), and then the client can check if it&apos;s the right one.

One thing I worry about with that kind of approach is that the old TextureMapper could potentially be destroyed after setting the new one. We could guard against this by simply clearing the backing store when the texture mapper changes as well, but it&apos;s a bit less fool-proof.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731246</commentid>
    <comment_count>6</comment_count>
      <attachid>166368</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-09-29 13:40:10 -0700</bug_when>
    <thetext>Comment on attachment 166368
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        to textures obtained from that TextureMapper&apos;s texture pool. Since a GL
&gt; +        BitmapTexture needs to use its owning TextureMapper in the destructor,
&gt; +        we actively notify TextureMapperTiledBackingStores when their original
&gt; +        TextureMappers are destroyed.

Actually, it just needs its GraphicsContext3D. Can&apos;t we keep a reference to that in BTGL, and then it&apos;s ok to do things in the regular destructor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731247</commentid>
    <comment_count>7</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-09-29 13:44:05 -0700</bug_when>
    <thetext>
&gt; One thing I worry about with that kind of approach is that the old TextureMapper could potentially be destroyed after setting the new one. We could guard against this by simply clearing the backing store when the texture mapper changes as well, but it&apos;s a bit less fool-proof.

We should still keep a reference for the TextureMapper in TextureMapperLayer and make sure it&apos;s the right one. I&apos;d rather do that there though, and not inside the observer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731248</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-29 13:45:42 -0700</bug_when>
    <thetext>(In reply to comment #7)

&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        to textures obtained from that TextureMapper&apos;s texture pool. Since a GL
&gt; &gt; +        BitmapTexture needs to use its owning TextureMapper in the destructor,
&gt; &gt; +        we actively notify TextureMapperTiledBackingStores when their original
&gt; &gt; +        TextureMappers are destroyed.
&gt; 
&gt; Actually, it just needs its GraphicsContext3D. Can&apos;t we keep a reference to that in BTGL, and then it&apos;s ok to do things in the regular destructor?

I think this might be the right fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731281</commentid>
    <comment_count>9</comment_count>
      <attachid>166380</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-29 23:15:51 -0700</bug_when>
    <thetext>Created attachment 166380
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731282</commentid>
    <comment_count>10</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-29 23:38:47 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=166380) [details]
&gt; Patch

I&apos;ve posted a new patch using your suggestion. I do not track when the TextureMapper changes. I don&apos;t think it should matter since all TextureMapperGLs are using the &quot;current context&quot; render style.

This still leaves a bug when the TextureMapper is used to render to some other GL context without a sharing context. That&apos;s not something that GTK+ ever does, but I think it should be handled, in a robust way, in another bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731302</commentid>
    <comment_count>11</comment_count>
      <attachid>166380</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-30 09:02:51 -0700</bug_when>
    <thetext>Comment on attachment 166380
Patch

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731304</commentid>
    <comment_count>12</comment_count>
      <attachid>166380</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-30 09:32:05 -0700</bug_when>
    <thetext>Comment on attachment 166380
Patch

Clearing flags on attachment: 166380

Committed r129993: &lt;http://trac.webkit.org/changeset/129993&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731305</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-30 09:32:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166368</attachid>
            <date>2012-09-29 13:02:08 -0700</date>
            <delta_ts>2012-09-29 23:15:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97394-20120929130124.patch</filename>
            <type>text/plain</type>
            <size>13666</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5OTgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWI3MWI2Yzk1NDgwNWQy
NTNiODQ0NzI1ZjY5OWE1ZWJjZWU3ZDA4ZC4uY2U2Y2I1OTJhYjNkZWRiNmRkNzU4YzgwOGZjZGE0
ZWVjYzNkY2NmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTA5LTI5ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBbV2Vi
S2l0Ml0gQ3Jhc2ggaW4gV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTczOTQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIGEgVGV4
dHVyZU1hcHBlciBpcyBkZXN0cm95ZWQsIGxheWVycyBjYW4gc3RpbGwgY29udGFpbiByZWZlcmVu
Y2VzCisgICAgICAgIHRvIHRleHR1cmVzIG9idGFpbmVkIGZyb20gdGhhdCBUZXh0dXJlTWFwcGVy
J3MgdGV4dHVyZSBwb29sLiBTaW5jZSBhIEdMCisgICAgICAgIEJpdG1hcFRleHR1cmUgbmVlZHMg
dG8gdXNlIGl0cyBvd25pbmcgVGV4dHVyZU1hcHBlciBpbiB0aGUgZGVzdHJ1Y3RvciwKKyAgICAg
ICAgd2UgYWN0aXZlbHkgbm90aWZ5IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZXMgd2hl
biB0aGVpciBvcmlnaW5hbAorICAgICAgICBUZXh0dXJlTWFwcGVycyBhcmUgZGVzdHJveWVkLgor
CisgICAgICAgIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmVzIGRvIG5vdCBoYXZlIGFueSBrbm93
bGVkZ2Ugb2YgdGhlIGNsYXNzZXMgdGhhdAorICAgICAgICBvd24gdGhlbSwgc28gd2hlbiB0aGUg
dW5kZXJseWluZyBUZXh0dXJlTWFwcGVyIGlzIGRlc3Ryb3llZCB3ZSBpbnZhbGlkYXRlCisgICAg
ICAgIHRoZSBlbnRpcmUgYmFja2luZyBzdG9yZS4gSXQncyB0aGUgcmVzcG9uc2liaWxpdHkgb2Yg
dGhlIG93bmVyIHJlcGxhY2UgdGhlCisgICAgICAgIGJhY2tpbmcgc3RvcmUgd2l0aCB0aGUgZnJl
c2ggVGV4dHVyZU1hcHBlciBhbmQgY29udGVudHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBS
ZWdyZXNzaW9ucyBhcmUgY292ZXJlZCBieSBleGlzdGluZyBjb21wb3NpdGluZyB0ZXN0cywgYnV0
CisgICAgICAgIHJlcHJvZHVjaW5nIHRoaXMgaXNzdWUgcmVxdWlyZXMgZmFpcmx5IGV4dGVuc2l2
ZSB1c2Ugb2YgbmF2aWdhdGlvbiBhbmQKKyAgICAgICAgdGhlIGJhY2stZm9yd2FyZCBjYWNoZS4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlci5jcHA6IERldGVjdCB3aGVuIHRoZQorICAgICAgICBiYWNraW5nIHN0b3JlIGluIGlu
dmFsaWQgYW5kIHJlcGxhY2UgaXQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXIuY3BwOiBTaWduYWwgdGhlIGRlc3RydWN0aW9uIG9ic2VydmVycy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oOgorICAgICAg
ICAoVGV4dHVyZU1hcHBlckRlc3RydWN0aW9uT2JzZXJ2ZXIpOiBBZGRlZCB0aGlzIGNsYXNzIHdo
aWNoIHRyYWNrcyB0aGUKKyAgICAgICAgbGlmZXRpbWUgb2YgYSBUZXh0dXJlTWFwcGVyLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6
VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlKTogSW5pdGlhbGl6ZQorICAgICAgICB0aGUg
c3RhdGUgdG8gYmUgdmFsaWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyVGlsZWRC
YWNraW5nU3RvcmU6Om5vdGlmeVRleHR1cmVNYXBwZXJEZXN0cm95ZWQpOiBXaGVuIG91ciBUZXh0
dXJlTWFwcGVyCisgICAgICAgIGlzIGR5aW5nLCBkZXN0cm95IG91ciB0aWxlcyBhbmQgaW52YWxp
ZGF0ZSBvdXJzZWx2ZXMuCisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyVGlsZWRCYWNr
aW5nU3RvcmU6OnVwZGF0ZUNvbnRlbnRzKTogV2hlbiB3ZSBhY3R1YWxseSB1cGxvYWQgb3VyCisg
ICAgICAgIGNvbnRlbnRzIHZpYSB0aGUgVGV4dHVyZU1hcHBlciBzdGFydCBvYnNlcnZpbmcgaXRz
IGxpZmV0aW1lLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2lu
Z1N0b3JlOjppc1ZhbGlkKTogQWRkZWQgdGhpcyBiYXNpYyBpbXBsZW1lbnRhdGlvbiB3aGljaCBp
cworICAgICAgICBhbHdheXMgdHJ1ZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJU
aWxlZEJhY2tpbmdTdG9yZTo6aXNWYWxpZCk6IFdlIGFsbG93IG91cnNlbHZlcyB0byBiZSBpbnZh
bGlkLgorICAgICAgICAoVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlKTogV2UgYXJlIG9i
c2VydmVycyBvZiB0aGUgVGV4dHVyZU1hcHBlciBsaWZldGltZS4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJHTDo6flRleHR1cmVNYXBwZXJHTCk6IFNpbmNlIHRoZSBHcmFwaGljc0Nv
bnRleHQzRCB3aWxsIGJlIGRlc3Ryb3llZAorICAgICAgICBieSB0aGUgdGltZSB0aGUgYmFzZSBj
bGFzcyBkZXN0cnVjdG9yIGlzIGNhbGxlZCwgd2UgbmVlZCB0byBub3RpZnkgb2JzZXJ2ZXJzIGVh
cmx5LCBzbyB0aGF0CisgICAgICAgIHRoZXkgY2FuIHVzZSB0aGUgR0MzRC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUpOiBEZXRl
Y3Qgd2hlbiBvdXIgYmFja2luZyBzdG9yZQorICAgICAgICBpcyBpbnZhbGlkIGFuZCByZWNyZWF0
ZSBpdC4KKwogMjAxMi0wOS0yOSAgQnl1bmd3b28gTGVlICA8Ync4MC5sZWVAc2Ftc3VuZy5jb20+
CiAKICAgICAgICAgRml4IGJ1aWxkIHdhcm5pbmcgOiAtV3BhcmVudGhlc2VzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggZjNiMGViNDExMjg0ZGJiZTEy
MmU5ZWM0NzU5ZjViYTkwYjlmODY3Mi4uZWMwNDliMjEyNGVlMWQyZjYwNmU5NmE1NDM0Y2M3MGM4
YTY3NDM1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCkBA
IC0zMjMsNiArMzIzLDExIEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENv
bnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiB2YWx1ZSkKICovCiB2b2lkIEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogeworICAgIC8v
IElmIHRoZSBjb21wb3NpdGVkIGltYWdlIHdhcyBpbnZhbGlkYXRlZCAoYmVjYXVzZSBvdXIgVGV4
dHVyZU1hcHBlciBjaGFuZ2VkKQorICAgIC8vIHdlIG5lZWQgdG8gcmVjcmVhdGUgaXQgdXNpbmcg
ZnJlc2ggVGV4dHVyZU1hcHBlciB0ZXh0dXJlcy4KKyAgICBpZiAobV9jb21wb3NpdGVkSW1hZ2Ug
JiYgIW1fY29tcG9zaXRlZEltYWdlLT5pc1ZhbGlkKCkpCisgICAgICAgIG1fY29tcG9zaXRlZElt
YWdlID0gMDsKKwogICAgIGlmIChpbWFnZSkgewogICAgICAgICAvLyBNYWtlIHRoZSBkZWNpc2lv
biBhYm91dCB3aGV0aGVyIHRoZSBpbWFnZSBoYXMgY2hhbmdlZC4KICAgICAgICAgLy8gVGhpcyBj
b2RlIG1ha2VzIHRoZSBhc3N1bXB0aW9uIHRoYXQgcG9pbnRlciBlcXVhbGl0eSBvbiBhIE5hdGl2
ZUltYWdlUHRyIGlzIGEgdmFsaWQgd2F5IHRvIHRlbGwgaWYgdGhlIGltYWdlIGlzIGNoYW5nZWQu
CkBAIC0zMzEsNyArMzM2LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKICAgICAgICAgaWYgKCFuZXdOYXRpdmVJbWFn
ZVB0cikKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAobmV3TmF0aXZlSW1hZ2VQ
dHIgPT0gbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIpCisgICAgICAgIGlmIChtX2NvbXBvc2l0
ZWRJbWFnZSAmJiBuZXdOYXRpdmVJbWFnZVB0ciA9PSBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0
cikKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBtX2NvbXBvc2l0ZWROYXRpdmVJbWFn
ZVB0ciA9IG5ld05hdGl2ZUltYWdlUHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwCmluZGV4IGNlZTQ1Yjk2
OTA5YjE4YmRkMWMyMGZhMWJjZDYwZDIzNDQ4ZWZiMzYuLjdhY2Q2MjE1NjY2ZGUwZGQwZmFkMGEx
ZDlhZDkzOWNmNjEzMTExMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAKQEAgLTU5LDUgKzU5LDI4IEBA
IFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKEFjY2VsZXJh
dGlvbk1vZGUgbW9kZSkKICAgICByZXR1cm4gcGxhdGZvcm1DcmVhdGVBY2NlbGVyYXRlZCgpOwog
fQogCitUZXh0dXJlTWFwcGVyOjp+VGV4dHVyZU1hcHBlcigpCit7CisgICAgbm90aWZ5RGVzdHJ1
Y3Rpb25PYnNlcnZlcnNFYXJseSgpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXI6Om5vdGlmeURl
c3RydWN0aW9uT2JzZXJ2ZXJzRWFybHkoKQoreworICAgIEhhc2hTZXQ8VGV4dHVyZU1hcHBlckRl
c3RydWN0aW9uT2JzZXJ2ZXIqPjo6aXRlcmF0b3Igc3RvcCA9IG1fZGVzdHJ1Y3Rpb25PYnNlcnZl
cnMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFRleHR1cmVNYXBwZXJEZXN0cnVjdGlvbk9ic2Vy
dmVyKj46Oml0ZXJhdG9yIGl0ID0gbV9kZXN0cnVjdGlvbk9ic2VydmVycy5iZWdpbigpOyBpdCAh
PSBzdG9wOyArK2l0KQorICAgICAgICAoKml0KS0+dGV4dHVyZU1hcHBlckRlc3Ryb3llZCgpOwor
ICAgIG1fZGVzdHJ1Y3Rpb25PYnNlcnZlcnMuY2xlYXIoKTsKK30KKwordm9pZCBUZXh0dXJlTWFw
cGVyOjphZGREZXN0cnVjdGlvbk9ic2VydmVyKFRleHR1cmVNYXBwZXJEZXN0cnVjdGlvbk9ic2Vy
dmVyKiBvYnNlcnZlcikKK3sKKyAgICBtX2Rlc3RydWN0aW9uT2JzZXJ2ZXJzLmFkZChvYnNlcnZl
cik7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlcjo6cmVtb3ZlRGVzdHJ1Y3Rpb25PYnNlcnZlcihU
ZXh0dXJlTWFwcGVyRGVzdHJ1Y3Rpb25PYnNlcnZlciogb2JzZXJ2ZXIpCit7CisgICAgbV9kZXN0
cnVjdGlvbk9ic2VydmVycy5yZW1vdmUob2JzZXJ2ZXIpOworfQorCiB9CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlci5oCmluZGV4IDRhMTEwYjRiY2QxNjIyZDYxMGU3NTJhMjY2YWE0Nzg1MzdkMzE1M2QuLmY5
NDJjMTEzNzQ4NmRlODcwOGQ1OGIzYWI2ZmNkYWRlZjJkMWViN2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaApA
QCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4K
IAogLyoKQEAgLTQ1LDYgKzQ2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVGV4
dHVyZU1hcHBlcjsKK2NsYXNzIFRleHR1cmVNYXBwZXJEZXN0cnVjdGlvbk9ic2VydmVyOwogCiAv
LyBBIDJEIHRleHR1cmUgdGhhdCBjYW4gYmUgdGhlIHRhcmdldCBvZiBzb2Z0d2FyZSBvciBHTCBy
ZW5kZXJpbmcuCiBjbGFzcyBCaXRtYXBUZXh0dXJlICA6IHB1YmxpYyBSZWZDb3VudGVkPEJpdG1h
cFRleHR1cmU+IHsKQEAgLTEwNyw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiB1bnNp
Z25lZCBQYWludEZsYWdzOwogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4g
Y3JlYXRlKEFjY2VsZXJhdGlvbk1vZGUgbmV3TW9kZSA9IFNvZnR3YXJlTW9kZSk7Ci0gICAgdmly
dHVhbCB+VGV4dHVyZU1hcHBlcigpIHsgfQorICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXIoKTsK
IAogICAgIGVudW0gRXhwb3NlZEVkZ2VzIHsKICAgICAgICAgTm9FZGdlcyA9IDAsCkBAIC0xNDUs
NiArMTQ3LDEwIEBAIHB1YmxpYzoKICAgICAvLyBBIHN1cmZhY2UgaXMgcmVsZWFzZWQgaW1wbGlj
aXRseSB3aGVuIGRlcmVmZXJlbmNlZC4KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4
dHVyZT4gYWNxdWlyZVRleHR1cmVGcm9tUG9vbChjb25zdCBJbnRTaXplJik7CiAKKyAgICB2b2lk
IGFkZERlc3RydWN0aW9uT2JzZXJ2ZXIoVGV4dHVyZU1hcHBlckRlc3RydWN0aW9uT2JzZXJ2ZXIq
KTsKKyAgICB2b2lkIHJlbW92ZURlc3RydWN0aW9uT2JzZXJ2ZXIoVGV4dHVyZU1hcHBlckRlc3Ry
dWN0aW9uT2JzZXJ2ZXIqKTsKKyAgICB2b2lkIG5vdGlmeURlc3RydWN0aW9uT2JzZXJ2ZXJzRWFy
bHkoKTsKKwogcHJvdGVjdGVkOgogICAgIFRleHR1cmVNYXBwZXIoQWNjZWxlcmF0aW9uTW9kZSBh
Y2NlbGVyYXRpb25Nb2RlKQogICAgICAgICA6IG1faW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJw
b2xhdGlvbkRlZmF1bHQpCkBAIC0xNjcsNiArMTczLDQ1IEBAIHByaXZhdGU6CiAgICAgVmVjdG9y
PFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IG1fdGV4dHVyZVBvb2w7CiAgICAgR3JhcGhpY3NDb250
ZXh0KiBtX2NvbnRleHQ7CiAgICAgQWNjZWxlcmF0aW9uTW9kZSBtX2FjY2VsZXJhdGlvbk1vZGU7
CisgICAgSGFzaFNldDxUZXh0dXJlTWFwcGVyRGVzdHJ1Y3Rpb25PYnNlcnZlcio+IG1fZGVzdHJ1
Y3Rpb25PYnNlcnZlcnM7Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyRGVzdHJ1Y3Rpb25PYnNl
cnZlciB7CitwdWJsaWM6CisgICAgVGV4dHVyZU1hcHBlckRlc3RydWN0aW9uT2JzZXJ2ZXIoKQor
ICAgICAgICA6IG1fb2JzZXJ2ZWRUZXh0dXJlTWFwcGVyKDApCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgflRleHR1cmVNYXBwZXJEZXN0cnVjdGlvbk9ic2VydmVyKCkKKyAgICB7CisgICAg
ICAgIG9ic2VydmVUZXh0dXJlTWFwcGVyKDApOworICAgIH0KKworICAgIHZvaWQgb2JzZXJ2ZVRl
eHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKKyAgICB7CisgICAgICAg
IGlmIChtX29ic2VydmVkVGV4dHVyZU1hcHBlciA9PSB0ZXh0dXJlTWFwcGVyKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX29ic2VydmVkVGV4dHVyZU1hcHBlcikKKyAgICAg
ICAgICAgIG1fb2JzZXJ2ZWRUZXh0dXJlTWFwcGVyLT5yZW1vdmVEZXN0cnVjdGlvbk9ic2VydmVy
KHRoaXMpOworCisgICAgICAgIG1fb2JzZXJ2ZWRUZXh0dXJlTWFwcGVyID0gdGV4dHVyZU1hcHBl
cjsKKworICAgICAgICBpZiAobV9vYnNlcnZlZFRleHR1cmVNYXBwZXIpCisgICAgICAgICAgICBt
X29ic2VydmVkVGV4dHVyZU1hcHBlci0+YWRkRGVzdHJ1Y3Rpb25PYnNlcnZlcih0aGlzKTsKKyAg
ICB9CisKKyAgICB2b2lkIHRleHR1cmVNYXBwZXJEZXN0cm95ZWQoKQorICAgIHsKKyAgICAgICAg
bV9vYnNlcnZlZFRleHR1cmVNYXBwZXIgPSAwOworICAgICAgICBub3RpZnlUZXh0dXJlTWFwcGVy
RGVzdHJveWVkKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVRleHR1cmVNYXBw
ZXJEZXN0cm95ZWQoKSA9IDA7CisKK3ByaXZhdGU6CisgICAgVGV4dHVyZU1hcHBlciogbV9vYnNl
cnZlZFRleHR1cmVNYXBwZXI7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tp
bmdTdG9yZS5jcHAKaW5kZXggYjI1MzcyY2U2NzhjOTg3MTJmMzFiOWEwOWZlMDRiMWZmNzA3YWVl
Yi4uYjA0NzEyZjZhNTZmYmVmYTEwZmQzMGM2Y2EwY2ZmYmQ3MzNhNGI0NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcApAQCAtMTAyLDYgKzEwMiw3IEBAIHZvaWQg
VGV4dHVyZU1hcHBlclRpbGU6OnBhaW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uCiAKIFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6VGV4
dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlKCkKICAgICA6IG1fZHJhd3NEZWJ1Z0JvcmRlcnMo
ZmFsc2UpCisgICAgLCBtX2lzVmFsaWQodHJ1ZSkKIHsKIH0KIApAQCAtMTE0LDYgKzExNSwxMiBA
QCB2b2lkIFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRlQ29udGVudHNGcm9t
SW1hZ2VJZk5lZWRlZChUZXh0dXJlTWFwcAogICAgIG1faW1hZ2UuY2xlYXIoKTsKIH0KIAordm9p
ZCBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6Om5vdGlmeVRleHR1cmVNYXBwZXJEZXN0
cm95ZWQoKQoreworICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgIG1fdGlsZXMuY2xlYXIoKTsK
K30KKwogdW5zaWduZWQgVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZTo6Y2FsY3VsYXRlRXhwb3Nl
ZFRpbGVFZGdlcyhjb25zdCBGbG9hdFJlY3QmIHRvdGFsUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0
aWxlUmVjdCkKIHsKICAgICB1bnNpZ25lZCBleHBvc2VkRWRnZXMgPSBUZXh0dXJlTWFwcGVyOjpO
b0VkZ2VzOwpAQCAtMjA2LDYgKzIxMyw4IEBAIHZvaWQgVGV4dHVyZU1hcHBlclRpbGVkQmFja2lu
Z1N0b3JlOjpjcmVhdGVPckRlc3Ryb3lUaWxlc0lmTmVlZGVkKGNvbnN0IEZsb2F0U2l6CiAKIHZv
aWQgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjp1cGRhdGVDb250ZW50cyhUZXh0dXJl
TWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBJbWFnZSogaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgdG90
YWxTaXplLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7CisgICAgb2JzZXJ2ZVRleHR1cmVN
YXBwZXIodGV4dHVyZU1hcHBlcik7CisKICAgICBjcmVhdGVPckRlc3Ryb3lUaWxlc0lmTmVlZGVk
KHRvdGFsU2l6ZSwgdGV4dHVyZU1hcHBlci0+bWF4VGV4dHVyZVNpemUoKSwgaW1hZ2UtPmN1cnJl
bnRGcmFtZUhhc0FscGhhKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90aWxlcy5z
aXplKCk7ICsraSkKICAgICAgICAgbV90aWxlc1tpXS51cGRhdGVDb250ZW50cyh0ZXh0dXJlTWFw
cGVyLCBpbWFnZSwgZGlydHlSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9y
ZS5oCmluZGV4IDlkMDAyYjQ4ZTQwNzdlMDAyMjY3MzQ2MmM2ZDk2ZDE0YzA4YWQyMjIuLjgwYTRi
NzVjOTVmNmUxMmQwMmNkNGY1MWJlZjAwZTZhMjgxMjAxMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJCYWNraW5nU3RvcmUuaApAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUoKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBCaXRtYXBUZXh0dXJl
KikgPSAwOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUoKSB7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIHsgcmV0dXJuIHRydWU7IH0KIAogcHJvdGVjdGVkOgog
ICAgIHN0YXRpYyB1bnNpZ25lZCBjYWxjdWxhdGVFeHBvc2VkVGlsZUVkZ2VzKGNvbnN0IEZsb2F0
UmVjdCYgdG90YWxSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0KTsKQEAgLTkyLDcgKzkz
LDcgQEAgcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotY2xhc3MgVGV4dHVy
ZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlIDogcHVibGljIFRleHR1cmVNYXBwZXJCYWNraW5nU3Rv
cmUgeworY2xhc3MgVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlIDogcHVibGljIFRleHR1
cmVNYXBwZXJCYWNraW5nU3RvcmUsIHB1YmxpYyBUZXh0dXJlTWFwcGVyRGVzdHJ1Y3Rpb25PYnNl
cnZlciB7CiBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVDb250ZW50c0Zyb21MYXllcihUZXh0dXJl
TWFwcGVyKiwgR3JhcGhpY3NMYXllciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIH5U
ZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmUoKSB7IH0KQEAgLTEwOCw2ICsxMDksOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRTaG93RGVidWdCb3JkZXJzKGJvb2wgZHJhd3NEZWJ1Z0JvcmRl
cnMpIHsgbV9kcmF3c0RlYnVnQm9yZGVycyA9IGRyYXdzRGVidWdCb3JkZXJzOyB9CiAgICAgdm9p
ZCBzZXREZWJ1Z0JvcmRlcihjb25zdCBDb2xvciYsIGZsb2F0IHdpZHRoKTsKIAorICAgIHZpcnR1
YWwgYm9vbCBpc1ZhbGlkKCkgeyByZXR1cm4gbV9pc1ZhbGlkOyB9CisgICAgdm9pZCBub3RpZnlU
ZXh0dXJlTWFwcGVyRGVzdHJveWVkKCk7CisKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclRp
bGVkQmFja2luZ1N0b3JlKCk7CiAgICAgdm9pZCBjcmVhdGVPckRlc3Ryb3lUaWxlc0lmTmVlZGVk
KGNvbnN0IEZsb2F0U2l6ZSYgYmFja2luZ1N0b3JlU2l6ZSwgY29uc3QgSW50U2l6ZSYgdGlsZVNp
emUsIGJvb2wgaGFzQWxwaGEpOwpAQCAtMTE5LDYgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2RyYXdzRGVidWdCb3JkZXJzOwogICAgIENvbG9yIG1fZGVidWdCb3JkZXJDb2xvcjsKICAg
ICBmbG9hdCBtX2RlYnVnQm9yZGVyV2lkdGg7CisgICAgYm9vbCBtX2lzVmFsaWQ7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDc4M2RjYzkxMGYwNGUwYzA4NmFmZmE4OWM0YTQx
NjY5NGM0NDgwYWEuLmRkODVlNDRlZTk2YzczNDdkMjU1YjNkMjFhYjdkMGI3YzJkYmYyOTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC04NDUsNiArODQ1LDEyIEBAIEludFNpemUgQml0bWFw
VGV4dHVyZUdMOjpzaXplKCkgY29uc3QKIFRleHR1cmVNYXBwZXJHTDo6flRleHR1cmVNYXBwZXJH
TCgpCiB7CiAgICAgY2xlYXJUZXh0dXJlUG9vbCgpOworCisgICAgLy8gV2UgbmVlZCB0byBub3Rp
ZnkgZGVzdHJ1Y3Rpb24gb2JzZXJ2ZXJzIGVhcmx5LCBiZWNhdXNlIHRoZXkgbmVlZCBhY2Nlc3MK
KyAgICAvLyB0byBvdXQgR3JhcGhpY3NDb250ZXh0M0QgaW4gc29tZSBzaXR1YXRpb25zLiBJZiB3
ZSBkaWQgbm90LCB3ZSdkIGFscmVhZHkKKyAgICAvLyBoYXZlIGRlc3Ryb3llZCBpdCBiZWZvcmUg
dGhleSBoYXZlIGEgY2hhbmNlIHRvIHVzZSBpdC4KKyAgICBub3RpZnlEZXN0cnVjdGlvbk9ic2Vy
dmVyc0Vhcmx5KCk7CisKICAgICBkZWxldGUgbV9kYXRhOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
TGF5ZXIuY3BwCmluZGV4IDM2OTU4OTg3ZDNjNDYyNzgwMzQwNDg1NmMxYzcwOTlhODdmZGJjZDcu
LjYzNzZhOTAwNzdkMmU3NmFhNDY2ZTJiYzE3OTI2YmM2NzAzMDhhMzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyTGF5ZXIuY3BwCkBAIC01MjQsNiArNTI0LDEzIEBAIHZvaWQgVGV4dHVyZU1hcHBlckxh
eWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3Jh
cGhpCiAgICAgaWYgKCF0ZXh0dXJlTWFwcGVyKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBJ
ZiBvdXIgVGV4dHVyZU1hcHBlciBjaGFuZ2VkIHRoZSBiYWNraW5nIHN0b3JlIHdpbGwgYmUgaW52
YWxpZCwgc28gd2UgbmVlZCB0bworICAgIC8vIGNyZWF0ZSBhIG5ldyBvbmUgYW5kIHVwbG9hZCB0
aGUgbGF5ZXIgY29udGVudHMgYWdhaW4uCisgICAgaWYgKG1fYmFja2luZ1N0b3JlICYmICFtX2Jh
Y2tpbmdTdG9yZS0+aXNWYWxpZCgpKSB7CisgICAgICAgIG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7
CisgICAgICAgIG1fc3RhdGUubmVlZHNEaXNwbGF5ID0gdHJ1ZTsKKyAgICB9CisKICAgICBpZiAo
Z3JhcGhpY3NMYXllciAmJiAhKG9wdGlvbnMgJiBDb21wdXRhdGlvbnNPbmx5KSkgewogICAgICAg
ICBzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoZ3JhcGhpY3NMYXllciwgdGV4dHVyZU1hcHBlcik7
CiAgICAgICAgIGdyYXBoaWNzTGF5ZXItPmRpZFN5bmNocm9uaXplKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166380</attachid>
            <date>2012-09-29 23:15:51 -0700</date>
            <delta_ts>2012-09-30 09:32:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97394-20120929231506.patch</filename>
            <type>text/plain</type>
            <size>21463</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5OTgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWI3MWI2Yzk1NDgwNWQy
NTNiODQ0NzI1ZjY5OWE1ZWJjZWU3ZDA4ZC4uZjM0MGJjMGU4ZDFhNmQwZjQ2ZDBhNTdiZWMzNjI3
NjNkZTViY2ExYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTA5LTI5ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbVGV4dHVyZU1h
cHBlcl0gW1dlYktpdDJdIENyYXNoIGluIFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6dXBkYXRl
Q29udGVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk3Mzk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2hlbiBhIFRleHR1cmVNYXBwZXIgaXMgZGVzdHJveWVkLCBsYXllcnMgY2FuIHN0aWxsIGNvbnRh
aW4gcmVmZXJlbmNlcworICAgICAgICB0byB0ZXh0dXJlcyBvYnRhaW5lZCBmcm9tIHRoYXQgVGV4
dHVyZU1hcHBlcidzIHRleHR1cmUgcG9vbC4gVHJ5aW5nIHRvCisgICAgICAgIGFjY2VzcyBhbiB1
bnJlZmZlZCBUZXh0dXJlTWFwcGVyIGluIHRoZSBCaXRtYXBUZXh0dXJlJ3MgZGVzdHJ1Y3Rvcgor
ICAgICAgICBjYXVzZXMgYSBjcmFzaC4KKworICAgICAgICBJbnN0ZWFkIG9mIHN0b3JpbmcgYSBy
YXcgcG9pbnRlciB0byBhIFRleHR1cmVNYXBwZXIsIHdlIGNhbiBzaW1wbHkgc3RvcmUKKyAgICAg
ICAgYSByZWZlcmVuY2UgdG8gdGhlIHVuZGVybHlpbmcgR3JhcGhpY3NDb250ZXh0M0QuIEFsbCBU
ZXh0dXJlTWFwcGVyCisgICAgICAgIGltcGxlbWVudGF0aW9ucyB1c2UgdGhlIGN1cnJlbnQgR0wg
Y29udGV4dCBhdCB0aGlzIG1vbWVudCwgc28gb25lIEdDM0QKKyAgICAgICAgcmVmZXJlbmNpbmcg
dGhlIGN1cnJlbnQgY29udGV4dCBpcyB0aGUgc2FtZSBhcyBhbnkgb3RoZXIuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oOiBSZW1vdmUgdGhlIGNs
ZWFyVGV4dHVyZVBvb2wKKyAgICAgICAgbWV0aG9kLiBJdCdzIG5vIGxvbmdlciB1c2VkLgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6YXBwbHlGaWx0ZXJzKTogQWRkIGEgVGV4dHVy
ZU1hcHBlciogYXJndW1lbnQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OkJp
dG1hcFRleHR1cmVHTCk6IEtlZXAgYSByZWZlcmVuY2UgdG8gdGhlCisgICAgICAgIEdyYXBoaWNz
Q29udGV4dDNEIGluc3RlYWQgb2YgdGhlIFRleHR1cmVNYXBwZXIuCisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBUZXh0dXJlR0w6OmRpZFJlc2V0KTogVXNlIHRoZSBHQzNEIHJlZmVyZW5jZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6YXBwbHlGaWx0ZXJzKTogQWNjZXB0
IHRoZSBUZXh0dXJlTWFwcGVyIGFzIGFuIGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwVGV4dHVyZUdMOjppbml0aWFsaXplU3RlbmNpbCk6IFVzZSB0aGUgR0MzRCByZWZlcmVuY2Uu
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVkZWQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6Y3JlYXRlRmJvSWZOZWVkZWQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6YmluZCk6IEFjY2Vw
dCB0aGUgVGV4dHVyZU1hcHBlciBhcyBhbiBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmVHTDo6fkJpdG1hcFRleHR1cmVHTCk6IFVzZSB0aGUgR0MzRCByZWZlcmVuY2Uu
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6On5UZXh0dXJlTWFwcGVyR0wpOiBS
ZW1vdmUgdGhlIGNhbGwgdG8gY2xlYXJUZXh0dXJlUG9vbAorICAgICAgICBhcyBpdCdzIG5vIGxv
bmdlciBuZWNlc3NhcnkuCisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJpbmRT
dXJmYWNlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJHTC5oOgorICAgICAgICAoQml0bWFwVGV4dHVyZUdMKTogS2VlcCBhIEdDM0QgcmVm
ZXJlbmNlIGluc3RlYWQgb2YgYSBUZXh0dXJlTWFwcGVyIHBvaW50ZXIuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXI6OmFwcGx5RmlsdGVycyk6IEFk
ZCBhIFRleHR1cmVNYXBwZXIgYXJndW1lbnQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oOgorICAgICAgICAoQml0bWFwVGV4dHVy
ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5RmlsdGVycyk6IERpdHRv
LgorCiAyMDEyLTA5LTI5ICBCeXVuZ3dvbyBMZWUgIDxidzgwLmxlZUBzYW1zdW5nLmNvbT4KIAog
ICAgICAgICBGaXggYnVpbGQgd2FybmluZyA6IC1XcGFyZW50aGVzZXMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaApp
bmRleCA0YTExMGI0YmNkMTYyMmQ2MTBlNzUyYTI2NmFhNDc4NTM3ZDMxNTNkLi4xN2Q1OTM0NzA3
OGE1NGU3N2MwZTU2OTNiOWQ4NDFhNmIzODUwYTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKQEAgLTg0LDcg
Kzg0LDcgQEAgcHVibGljOgogICAgIGlubGluZSBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1
cm4gIShtX2ZsYWdzICYgU3VwcG9ydHNBbHBoYSk7IH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gYXBwbHlGaWx0ZXJzKGNv
bnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JikgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJl
PiBhcHBseUZpbHRlcnMoVGV4dHVyZU1hcHBlciosIGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRl
bnRUZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikgeyByZXR1cm4gdGhpczsgfQogI2Vu
ZGlmCiAKIHByb3RlY3RlZDoKQEAgLTE1MSw3ICsxNTEsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAg
ICwgbV90ZXh0RHJhd2luZ01vZGUoVGV4dE1vZGVGaWxsKQogICAgICAgICAsIG1fYWNjZWxlcmF0
aW9uTW9kZShhY2NlbGVyYXRpb25Nb2RlKQogICAgIHt9Ci0gICAgdm9pZCBjbGVhclRleHR1cmVQ
b29sKCkgeyBtX3RleHR1cmVQb29sLmNsZWFyKCk7IH0KIAogcHJpdmF0ZToKICNpZiBVU0UoVEVY
VFVSRV9NQVBQRVJfR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDc4M2RjYzkxMGYwNGUw
YzA4NmFmZmE4OWM0YTQxNjY5NGM0NDgwYWEuLjhmMGM2OGQ5OWQzMmQ1ZTM4OGJhNjg3NDgzOTVm
ZWE1MDlmMTBiZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC01NjgsNiArNTY4LDE1IEBA
IHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0oVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0qIHByCiAgICAgZHJhd1F1YWQocXVhZFRvRHJhdywgbW9kZWxW
aWV3TWF0cml4LCBwcm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCBuZWVk
c0JsZW5kaW5nKTsKIH0KIAorQml0bWFwVGV4dHVyZUdMOjpCaXRtYXBUZXh0dXJlR0woVGV4dHVy
ZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyKQorICAgIDogbV9pZCgwKQorICAgICwgbV9mYm8oMCkK
KyAgICAsIG1fcmJvKDApCisgICAgLCBtX3Nob3VsZENsZWFyKHRydWUpCisgICAgLCBtX2NvbnRl
eHQzRCh0ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpKQoreworfQorCiBib29sIEJp
dG1hcFRleHR1cmVHTDo6Y2FuUmV1c2VXaXRoKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwg
RmxhZ3MpCiB7CiAgICAgcmV0dXJuIGNvbnRlbnRzU2l6ZSA9PSBtX3RleHR1cmVTaXplOwpAQCAt
NjExLDEwICs2MjAsOCBAQCBzdGF0aWMgYm9vbCBkcml2ZXJTdXBwb3J0c1N1YkltYWdlKCkKIAog
dm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRpZFJlc2V0KCkKIHsKLSAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOwotCiAg
ICAgaWYgKCFtX2lkKQotICAgICAgICBtX2lkID0gY29udGV4dDNELT5jcmVhdGVUZXh0dXJlKCk7
CisgICAgICAgIG1faWQgPSBtX2NvbnRleHQzRC0+Y3JlYXRlVGV4dHVyZSgpOwogCiAgICAgbV9z
aG91bGRDbGVhciA9IHRydWU7CiAgICAgaWYgKG1fdGV4dHVyZVNpemUgPT0gY29udGVudFNpemUo
KSkKQEAgLTYyMywyMSArNjMwLDE5IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpkaWRSZXNldCgp
CiAgICAgUGxhdGZvcm0zRE9iamVjdCBmb3JtYXQgPSBkcml2ZXJTdXBwb3J0c0JHUkFTd2l6emxp
bmcoKSA/IEdyYXBoaWNzQ29udGV4dDNEOjpCR1JBIDogR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7
CiAKICAgICBtX3RleHR1cmVTaXplID0gY29udGVudFNpemUoKTsKLSAgICBjb250ZXh0M0QtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2lkKTsKLSAgICBjb250
ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5F
QVIpOwotICAgIGNvbnRleHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgY29udGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Ms
IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBjb250ZXh0M0QtPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAg
IGNvbnRleHQzRC0+dGV4SW1hZ2UyRERpcmVjdChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90
ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgZm9ybWF0LCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJB
TlNGRVJfVFlQRSwgMCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX2lkKTsKKyAgICBtX2NvbnRleHQzRC0+dGV4UGFyYW1ldGVy
aShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgbV9jb250ZXh0
M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIp
OworICAgIG1fY29udGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRleHQzRC0+dGV4UGFyYW1ldGVyaShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JB
UF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgbV9jb250ZXh0M0Qt
PnRleEltYWdlMkREaXJlY3QoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUu
aGVpZ2h0KCksIDAsIGZvcm1hdCwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUs
IDApOwogfQogCiAKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhjb25zdCB2
b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgc291
cmNlT2Zmc2V0LCBpbnQgYnl0ZXNQZXJMaW5lKQogewotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7Ci0KICAgICBQ
bGF0Zm9ybTNET2JqZWN0IGdsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci0gICAg
Y29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9p
ZCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBtX2lkKTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0Owog
ICAgIGlmIChkcml2ZXJTdXBwb3J0c0JHUkFTd2l6emxpbmcoKSkKQEAgLTY0Niw3ICs2NTEsNyBA
QCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwg
Y29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdAogICAgICAgICBzd2l6emxlQkdSQVRvUkdCQShyZWlu
dGVycHJldF9jYXN0PHVpbnQzMl90Kj4oY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpLCBJbnRSZWN0
KHNvdXJjZU9mZnNldCwgdGFyZ2V0UmVjdC5zaXplKCkpLCBieXRlc1BlckxpbmUgLyBieXRlc1Bl
clBpeGVsKTsKIAogICAgIGlmIChieXRlc1BlckxpbmUgPT0gdGFyZ2V0UmVjdC53aWR0aCgpIC8g
NCAmJiBzb3VyY2VPZmZzZXQgPT0gSW50UG9pbnQ6Onplcm8oKSkgewotICAgICAgICBjb250ZXh0
M0QtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIHRhcmdl
dFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0
LmhlaWdodCgpLCBnbEZvcm1hdCwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUs
IChjb25zdCBjaGFyKilkYXRhKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPnRleFN1YkltYWdlMkQo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRS
ZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBnbEZvcm1h
dCwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIChjb25zdCBjaGFyKilkYXRh
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjY0LDE5ICs2NjksMTkgQEAgdm9pZCBC
aXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QKICAgICAgICAgICAgIGRzdCArPSB0YXJnZXRCeXRlc1BlckxpbmU7
CiAgICAgICAgIH0KIAotICAgICAgICBjb250ZXh0M0QtPnRleFN1YkltYWdlMkQoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwg
dGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgREVGQVVM
VF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIHRlbXBvcmFyeURhdGEuZGF0YSgpKTsKKyAg
ICAgICAgbV9jb250ZXh0M0QtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0
aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgREVGQVVMVF9URVhUVVJFX1BJWEVM
X1RSQU5TRkVSX1RZUEUsIHRlbXBvcmFyeURhdGEuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogI2lmICFkZWZpbmVkKFRFWE1BUF9PUEVOR0xfRVNfMikKICAgICAvLyBVc2UgdGhl
IE9wZW5HTCBzdWItaW1hZ2UgZXh0ZW5zaW9uLCBub3cgdGhhdCB3ZSBrbm93IGl0J3MgYXZhaWxh
YmxlLgotICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIGJ5
dGVzUGVyTGluZSAvIGJ5dGVzUGVyUGl4ZWwpOwotICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWko
R0xfVU5QQUNLX1NLSVBfUk9XUywgc291cmNlT2Zmc2V0LnkoKSk7Ci0gICAgY29udGV4dDNELT5w
aXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIHNvdXJjZU9mZnNldC54KCkpOwotICAg
IGNvbnRleHQzRC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
MCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRh
cmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNG
RVJfVFlQRSwgKGNvbnN0IGNoYXIqKWRhdGEpOwotICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWko
R0xfVU5QQUNLX1JPV19MRU5HVEgsIDApOwotICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xf
VU5QQUNLX1NLSVBfUk9XUywgMCk7Ci0gICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBB
Q0tfU0tJUF9QSVhFTFMsIDApOworICAgIG1fY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBB
Q0tfUk9XX0xFTkdUSCwgYnl0ZXNQZXJMaW5lIC8gYnl0ZXNQZXJQaXhlbCk7CisgICAgbV9jb250
ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIHNvdXJjZU9mZnNldC55KCkp
OworICAgIG1fY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIHNv
dXJjZU9mZnNldC54KCkpOworICAgIG1fY29udGV4dDNELT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCks
IHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIERFRkFV
TFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciopZGF0YSk7CisgICAg
bV9jb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCAwKTsKKyAgICBt
X2NvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgMCk7CisgICAgbV9j
b250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywgMCk7CiAjZW5kaWYK
IH0KIApAQCAtNzI3LDI1ICs3MzIsMjYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0
ZXJlZChjb25zdCBCaXRtYXBUZXh0dXJlJiBzb3VyY2VUZXh0dXJlLCBjb25zdCBCaXQKICAgICBt
X2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0
cmliKCkpOwogfQogCi1QYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IEJpdG1hcFRleHR1cmVHTDo6
YXBwbHlGaWx0ZXJzKGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQorUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBCaXRt
YXBUZXh0dXJlR0w6OmFwcGx5RmlsdGVycyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBj
b25zdCBCaXRtYXBUZXh0dXJlJiBjb250ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYgZmlsdGVycykKIHsKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gcHJldmlvdXNTdXJmYWNl
ID0gbV90ZXh0dXJlTWFwcGVyLT5kYXRhKCkuY3VycmVudFN1cmZhY2U7CisgICAgVGV4dHVyZU1h
cHBlckdMKiB0ZXh0dXJlTWFwcGVyR0wgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0
ZXh0dXJlTWFwcGVyKTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gcHJldmlvdXNTdXJmYWNl
ID0gdGV4dHVyZU1hcHBlckdMLT5kYXRhKCkuY3VycmVudFN1cmZhY2U7CiAKICAgICBSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gc291cmNlID0gdGhpczsKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
dGFyZ2V0ID0gbV90ZXh0dXJlTWFwcGVyLT5hY3F1aXJlVGV4dHVyZUZyb21Qb29sKG1fdGV4dHVy
ZVNpemUpOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0YXJnZXQgPSB0ZXh0dXJlTWFwcGVy
LT5hY3F1aXJlVGV4dHVyZUZyb21Qb29sKG1fdGV4dHVyZVNpemUpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZmlsdGVycy5zaXplKCk7ICsraSkgewogICAgICAgICBjb25zdCBGaWx0ZXJP
cGVyYXRpb24qIGZpbHRlciA9IGZpbHRlcnMuYXQoaSk7CiAgICAgICAgIEFTU0VSVChmaWx0ZXIp
OwogCi0gICAgICAgIGludCBudW1QYXNzZXMgPSBtX3RleHR1cmVNYXBwZXItPmRhdGEoKS5zaGFy
ZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRQYXNzZXNSZXF1aXJlZEZv
ckZpbHRlcigqZmlsdGVyKTsKKyAgICAgICAgaW50IG51bVBhc3NlcyA9IHRleHR1cmVNYXBwZXJH
TC0+ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFBh
c3Nlc1JlcXVpcmVkRm9yRmlsdGVyKCpmaWx0ZXIpOwogICAgICAgICBmb3IgKGludCBqID0gMDsg
aiA8IG51bVBhc3NlczsgKytqKSB7Ci0gICAgICAgICAgICBtX3RleHR1cmVNYXBwZXItPmJpbmRT
dXJmYWNlKHRhcmdldC5nZXQoKSk7Ci0gICAgICAgICAgICBtX3RleHR1cmVNYXBwZXItPmRyYXdG
aWx0ZXJlZCgoaSB8fCBqKSA/ICpzb3VyY2UgOiBjb250ZW50VGV4dHVyZSwgY29udGVudFRleHR1
cmUsICpmaWx0ZXIsIGopOworICAgICAgICAgICAgdGV4dHVyZU1hcHBlckdMLT5iaW5kU3VyZmFj
ZSh0YXJnZXQuZ2V0KCkpOworICAgICAgICAgICAgdGV4dHVyZU1hcHBlckdMLT5kcmF3RmlsdGVy
ZWQoKGkgfHwgaikgPyAqc291cmNlIDogY29udGVudFRleHR1cmUsIGNvbnRlbnRUZXh0dXJlLCAq
ZmlsdGVyLCBqKTsKICAgICAgICAgICAgIHN0ZDo6c3dhcChzb3VyY2UsIHRhcmdldCk7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBtX3RleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKHByZXZpb3Vz
U3VyZmFjZS5nZXQoKSk7CisgICAgdGV4dHVyZU1hcHBlckdMLT5iaW5kU3VyZmFjZShwcmV2aW91
c1N1cmZhY2UuZ2V0KCkpOwogICAgIHJldHVybiBzb3VyY2U7CiB9CiAjZW5kaWYKQEAgLTc2Niwx
OCArNzcyLDE3IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjppbml0aWFsaXplU3RlbmNpbCgpCiAg
ICAgaWYgKG1fcmJvKQogICAgICAgICByZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOwotICAgIG1f
cmJvID0gY29udGV4dDNELT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKLSAgICBjb250ZXh0M0QtPmJp
bmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9yYm8pOwor
ICAgIG1fcmJvID0gbV9jb250ZXh0M0QtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAgIG1fY29u
dGV4dDNELT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIs
IG1fcmJvKTsKICNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICBjb250ZXh0M0QtPnJlbmRl
cmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4LCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVy
ZVNpemUuaGVpZ2h0KCkpOworICAgIG1fY29udGV4dDNELT5yZW5kZXJidWZmZXJTdG9yYWdlKEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0lOREVYOCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsK
ICNlbHNlCi0gICAgY29udGV4dDNELT5yZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4
dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMLCBtX3Rl
eHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpOworICAgIG1fY29udGV4
dDNELT5yZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIs
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMLCBtX3RleHR1cmVTaXplLndpZHRoKCks
IG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogI2VuZGlmCi0gICAgY29udGV4dDNELT5iaW5kUmVu
ZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOwotICAgIGNvbnRl
eHQzRC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCBtX3Jibyk7Ci0gICAgY29udGV4dDNELT5jbGVhclN0ZW5jaWwo
MCk7Ci0gICAgY29udGV4dDNELT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZG
RVJfQklUKTsKKyAgICBtX2NvbnRleHQzRC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKKyAgICBtX2NvbnRleHQzRC0+ZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBt
X3Jibyk7CisgICAgbV9jb250ZXh0M0QtPmNsZWFyU3RlbmNpbCgwKTsKKyAgICBtX2NvbnRleHQz
RC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCk7CiB9CiAKIHZv
aWQgQml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKCkKQEAgLTc4NSwxMiArNzkwLDEwIEBA
IHZvaWQgQml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKCkKICAgICBpZiAoIW1fc2hvdWxk
Q2xlYXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7Ci0KICAgICBtX2NsaXBT
dGFjay5pbml0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV90ZXh0dXJlU2l6ZSkpOwotICAg
IG1fY2xpcFN0YWNrLmFwcGx5KGNvbnRleHQzRCk7Ci0gICAgY29udGV4dDNELT5jbGVhckNvbG9y
KDAsIDAsIDAsIDApOwotICAgIGNvbnRleHQzRC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX0JVRkZFUl9CSVQpOworICAgIG1fY2xpcFN0YWNrLmFwcGx5KG1fY29udGV4dDNELmdldCgp
KTsKKyAgICBtX2NvbnRleHQzRC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICBtX2NvbnRl
eHQzRC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOwogICAgIG1f
c2hvdWxkQ2xlYXIgPSBmYWxzZTsKIH0KIApAQCAtNzk5LDM3ICs4MDIsMzMgQEAgdm9pZCBCaXRt
YXBUZXh0dXJlR0w6OmNyZWF0ZUZib0lmTmVlZGVkKCkKICAgICBpZiAobV9mYm8pCiAgICAgICAg
IHJldHVybjsKIAotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVN
YXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7Ci0gICAgbV9mYm8gPSBjb250ZXh0M0QtPmNyZWF0
ZUZyYW1lYnVmZmVyKCk7Ci0gICAgY29udGV4dDNELT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgY29udGV4dDNELT5mcmFtZWJ1ZmZl
clRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGlk
KCksIDApOworICAgIG1fZmJvID0gbV9jb250ZXh0M0QtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Cisg
ICAgbV9jb250ZXh0M0QtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG1fZmJvKTsKKyAgICBtX2NvbnRleHQzRC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRU
QUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBpZCgpLCAwKTsKICAgICBt
X3Nob3VsZENsZWFyID0gdHJ1ZTsKIH0KIAotdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmJpbmQoKQor
dm9pZCBCaXRtYXBUZXh0dXJlR0w6OmJpbmQoVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVy
KQogewotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXIt
PmdyYXBoaWNzQ29udGV4dDNEKCk7Ci0gICAgY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKICAgICBjcmVhdGVGYm9JZk5lZWRl
ZCgpOwotICAgIGNvbnRleHQzRC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIGNvbnRleHQzRC0+dmlld3BvcnQoMCwgMCwgbV90ZXh0
dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsKKyAgICBtX2NvbnRleHQz
RC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8p
OworICAgIG1fY29udGV4dDNELT52aWV3cG9ydCgwLCAwLCBtX3RleHR1cmVTaXplLndpZHRoKCks
IG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogICAgIGNsZWFySWZOZWVkZWQoKTsKLSAgICBtX3Rl
eHR1cmVNYXBwZXItPmRhdGEoKS5wcm9qZWN0aW9uTWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1h
dHJpeChtX3RleHR1cmVTaXplLCB0cnVlIC8qIG1pcnJvcmVkICovKTsKLSAgICBtX2NsaXBTdGFj
ay5hcHBseShjb250ZXh0M0QpOworICAgIHRleHR1cmVNYXBwZXItPmRhdGEoKS5wcm9qZWN0aW9u
TWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeChtX3RleHR1cmVTaXplLCB0cnVlIC8qIG1p
cnJvcmVkICovKTsKKyAgICBtX2NsaXBTdGFjay5hcHBseShtX2NvbnRleHQzRC5nZXQoKSk7CiB9
CiAKIEJpdG1hcFRleHR1cmVHTDo6fkJpdG1hcFRleHR1cmVHTCgpCiB7Ci0gICAgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0Qo
KTsKLQogICAgIGlmIChtX2lkKQotICAgICAgICBjb250ZXh0M0QtPmRlbGV0ZVRleHR1cmUobV9p
ZCk7CisgICAgICAgIG1fY29udGV4dDNELT5kZWxldGVUZXh0dXJlKG1faWQpOwogCiAgICAgaWYg
KG1fZmJvKQotICAgICAgICBjb250ZXh0M0QtPmRlbGV0ZUZyYW1lYnVmZmVyKG1fZmJvKTsKKyAg
ICAgICAgbV9jb250ZXh0M0QtPmRlbGV0ZUZyYW1lYnVmZmVyKG1fZmJvKTsKIAogICAgIGlmICht
X3JibykKLSAgICAgICAgY29udGV4dDNELT5kZWxldGVSZW5kZXJidWZmZXIobV9yYm8pOworICAg
ICAgICBtX2NvbnRleHQzRC0+ZGVsZXRlUmVuZGVyYnVmZmVyKG1fcmJvKTsKIH0KIAogYm9vbCBC
aXRtYXBUZXh0dXJlR0w6OmlzVmFsaWQoKSBjb25zdApAQCAtODQ0LDcgKzg0Myw2IEBAIEludFNp
emUgQml0bWFwVGV4dHVyZUdMOjpzaXplKCkgY29uc3QKIAogVGV4dHVyZU1hcHBlckdMOjp+VGV4
dHVyZU1hcHBlckdMKCkKIHsKLSAgICBjbGVhclRleHR1cmVQb29sKCk7CiAgICAgZGVsZXRlIG1f
ZGF0YTsKIH0KIApAQCAtODY1LDcgKzg2Myw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiaW5k
U3VyZmFjZShCaXRtYXBUZXh0dXJlICpzdXJmYWNlKQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUdMKj4oc3VyZmFjZSktPmJpbmQoKTsKKyAg
ICBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlR0wqPihzdXJmYWNlKS0+YmluZCh0aGlzKTsKICAg
ICBkYXRhKCkuY3VycmVudFN1cmZhY2UgPSBzdXJmYWNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgK
aW5kZXggZjE0NmFjY2NiNmUxMjMyYzQ5NDRmMzNiNTg4YTk5ZWE0NTk0ZjYwOC4uNjRiZmZhZmU1
NDI2ZjNmOTc2NjkwNjM2NzNmYTdkODA1YjFkNTk2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaApAQCAt
MTMzLDE5ICsxMzMsMTggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIGNhblJldXNlV2l0aChjb25zdCBJbnRTaXplJiBjb250ZW50
c1NpemUsIEZsYWdzID0gMCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlc2V0KCk7Ci0gICAgdm9p
ZCBiaW5kKCk7CisgICAgdm9pZCBiaW5kKFRleHR1cmVNYXBwZXJHTCopOwogICAgIHZvaWQgaW5p
dGlhbGl6ZVN0ZW5jaWwoKTsKICAgICB+Qml0bWFwVGV4dHVyZUdMKCk7CiAgICAgdmlydHVhbCB1
aW50MzJfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KICAgICB1aW50MzJfdCB0ZXh0dXJl
VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ7IH0K
ICAgICBJbnRTaXplIHRleHR1cmVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlU2l6ZTsg
fQotICAgIHZvaWQgc2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyR0wqIHRleG1hcCkgeyBt
X3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7IH0KICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdl
KiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqLCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IElu
dFBvaW50JiBzb3VyY2VPZmZzZXQsIGludCBieXRlc1BlckxpbmUpOwogICAgIHZpcnR1YWwgYm9v
bCBpc0JhY2tlZEJ5T3BlbkdMKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgRU5BQkxF
KENTU19GSUxURVJTKQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBhcHBs
eUZpbHRlcnMoY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gYXBw
bHlGaWx0ZXJzKFRleHR1cmVNYXBwZXIqLCBjb25zdCBCaXRtYXBUZXh0dXJlJiBjb250ZW50VGV4
dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0x
NTYsMTcgKzE1NSwxMCBAQCBwcml2YXRlOgogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9yYm87CiAg
ICAgYm9vbCBtX3Nob3VsZENsZWFyOwogICAgIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrIG1f
Y2xpcFN0YWNrOwotICAgIFRleHR1cmVNYXBwZXJHTCogbV90ZXh0dXJlTWFwcGVyOworICAgIFJl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0M0Q7CiAKKyAgICBCaXRtYXBUZXh0dXJl
R0woVGV4dHVyZU1hcHBlckdMKik7CiAgICAgQml0bWFwVGV4dHVyZUdMKCk7Ci0gICAgQml0bWFw
VGV4dHVyZUdMKFRleHR1cmVNYXBwZXJHTCogdGV4dHVyZU1hcHBlcikKLSAgICAgICAgOiBtX2lk
KDApCi0gICAgICAgICwgbV9mYm8oMCkKLSAgICAgICAgLCBtX3JibygwKQotICAgICAgICAsIG1f
c2hvdWxkQ2xlYXIodHJ1ZSkKLSAgICAgICAgLCBtX3RleHR1cmVNYXBwZXIodGV4dHVyZU1hcHBl
cikKLSAgICB7Ci0gICAgfQogCiAgICAgdm9pZCBjbGVhcklmTmVlZGVkKCk7CiAgICAgdm9pZCBj
cmVhdGVGYm9JZk5lZWRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNw
cAppbmRleCA5YjBjOWE1NmZkZjUyZTc2ZmQ4ZTkwM2QwODFmMTI2ZWNmMDdlOWEyLi45MjgyOTU5
ZGVlYzk3NDQ0ZmNiZDAxMzllOGI0Mzc4YTY4Y2U2MzNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckltYWdlQnVmZmVyLmNwcApAQCAtMTIxLDcgKzEyMSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ckltYWdlQnVmZmVyOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBj
b25zdCBGCiB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi1QYXNzUmVmUHRyPEJpdG1hcFRl
eHR1cmU+IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6YXBwbHlGaWx0ZXJzKGNvbnN0IEJpdG1h
cFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJz
KQorUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXI6OmFw
cGx5RmlsdGVycyhUZXh0dXJlTWFwcGVyKiwgY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRl
eHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCiB7CiAgICAgUmVmUHRyPEZp
bHRlckVmZmVjdFJlbmRlcmVyPiByZW5kZXJlciA9IEZpbHRlckVmZmVjdFJlbmRlcmVyOjpjcmVh
dGUoKTsKICAgICByZW5kZXJlci0+c2V0U291cmNlSW1hZ2VSZWN0KEZsb2F0UmVjdChGbG9hdFBv
aW50Ojp6ZXJvKCksIGNvbnRlbnRUZXh0dXJlLnNpemUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJJbWFnZUJ1ZmZlci5oCmluZGV4IDcxNTExZmMxMmI0ZjNkNTI5YmJlYzgxNzZlNjYyYzA1NzMw
MDIwNDYuLjdkNTFlODgwNWEzZjJlYzkwMmViNjM5YjYzZDE5MGZkMTYzNmRkZjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
SW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmgKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBj
b25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCB2
b2lkKiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0LCBjb25zdCBJbnRQb2ludCYgc291cmNlT2Zmc2V0
LCBpbnQgYnl0ZXNQZXJMaW5lKTsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgUGFzc1Jl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBhcHBseUZpbHRlcnMoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKKyAgICBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGFw
cGx5RmlsdGVycyhUZXh0dXJlTWFwcGVyKiwgY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmKTsKICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxh
eWVyLmNwcAppbmRleCAzNjk1ODk4N2QzYzQ2Mjc4MDM0MDQ4NTZjMWM3MDk5YTg3ZmRiY2Q3Li43
YTBkNDQ0MzIxYzY4ZWI5YjE5NzJkMjMxMzZmYmYzNGEyZTkwMGMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckxheWVyLmNwcApAQCAtMzQyLDcgKzM0Miw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1h
cFRleHR1cmU+IGFwcGx5RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBU
CiAgICAgICAgIHJldHVybiBzb3VyY2U7CiAKICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gZmls
dGVyU3VyZmFjZSA9IHNob3VsZEtlZXBDb250ZW50VGV4dHVyZShmaWx0ZXJzKSA/IHRleHR1cmVN
YXBwZXItPmFjcXVpcmVUZXh0dXJlRnJvbVBvb2woc291cmNlLT5zaXplKCkpIDogc291cmNlOwot
ICAgIHJldHVybiBmaWx0ZXJTdXJmYWNlLT5hcHBseUZpbHRlcnMoKnNvdXJjZSwgZmlsdGVycyk7
CisgICAgcmV0dXJuIGZpbHRlclN1cmZhY2UtPmFwcGx5RmlsdGVycyh0ZXh0dXJlTWFwcGVyLCAq
c291cmNlLCBmaWx0ZXJzKTsKIH0KICNlbmRpZgogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>