<?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>87738</bug_id>
          
          <creation_ts>2012-05-29 06:24:35 -0700</creation_ts>
          <short_desc>Make TextureMapper work with GraphicsSurface.</short_desc>
          <delta_ts>2012-06-01 10:29:34 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>87725</dependson>
          <blocked>86214</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zeno Albisser">zeno</reporter>
          <assigned_to name="Zeno Albisser">zeno</assigned_to>
          <cc>andersca</cc>
    
    <cc>noam</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>635946</commentid>
    <comment_count>0</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-05-29 06:24:35 -0700</bug_when>
    <thetext>To be able to directly reuse textures from a GraphicsSurface we need TextureMapper to work with gl texture ids.
On mac the GraphicsSurface is backed by an IOSurface which requires the texture to be a GL_TEXTURE_RECTANGLE_ARB.
Due to this we need new shader programs to allow painting these textures directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635975</commentid>
    <comment_count>1</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-05-29 06:55:35 -0700</bug_when>
    <thetext>wouldn&apos;t this mean we move from triple-buffering to double-buffering, which might cause sync issues?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636029</commentid>
    <comment_count>2</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-05-29 08:03:49 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; wouldn&apos;t this mean we move from triple-buffering to double-buffering, which might cause sync issues?

I&apos;m not sure i follow. How could this cause sync issues?
We are currently rendering into an FBO and then blit the RenderBuffer onto the GraphicsSurface. So I do not see, why we should need an extra blit/copy on the UIProcess side again. Am I missing something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636035</commentid>
    <comment_count>3</comment_count>
      <attachid>144563</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-05-29 08:09:50 -0700</bug_when>
    <thetext>Created attachment 144563
patch for review.

EWS will most likely fail (if executed), because this patch depends on Bug87725, and the according patch has not been landed yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636111</commentid>
    <comment_count>4</comment_count>
      <attachid>144563</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-29 09:33:19 -0700</bug_when>
    <thetext>Comment on attachment 144563
patch for review.

Attachment 144563 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12845566</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636165</commentid>
    <comment_count>5</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-05-29 10:09:41 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; wouldn&apos;t this mean we move from triple-buffering to double-buffering, which might cause sync issues?
&gt; 
&gt; I&apos;m not sure i follow. How could this cause sync issues?
&gt; We are currently rendering into an FBO and then blit the RenderBuffer onto the GraphicsSurface. So I do not see, why we should need an extra blit/copy on the UIProcess side again. Am I missing something?

Probably :)
There are three rythms:
1. The &quot;web&quot; rythim - drawing with JS into the WebGL FBO (this can happen at any time)
2. The &quot;ui&quot; rythm - TextureMapper drawing to the screen (for example during scroll).
3. The &quot;sync&quot; rythm - every frame in the web process has to be synced to the ui process at the same time. This is why we need a scratch buffer, otherwise we&apos;d be able to update the tiles directly.

In your patch you skip the sync rythm, and essentially update the ui-facing texture directly. that means that the canvas texture that&apos;s drawn to the screen is slightly newer than the other textures and geometry parameters that are currently known to TextureMapper. This might cause visible sync issues :)
/me hopes this is not more confusing...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636256</commentid>
    <comment_count>6</comment_count>
      <attachid>144563</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-29 11:19:41 -0700</bug_when>
    <thetext>Comment on attachment 144563
patch for review.

Attachment 144563 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12848572</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637038</commentid>
    <comment_count>7</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-05-30 02:04:15 -0700</bug_when>
    <thetext>
&gt; There are three rythms:
&gt; 1. The &quot;web&quot; rythim - drawing with JS into the WebGL FBO (this can happen at any time)
So after this step we have the &quot;image&quot; in the RenderBuffer.
&gt; 2. The &quot;ui&quot; rythm - TextureMapper drawing to the screen (for example during scroll).
This is where we load the image from the IOSurface/GraphicsSurface.
We always need to rebind the texture in this case. And that is where the image is actually &quot;read&quot; from the IOSurface. I don&apos;t see why we would need another buffer in between.
&gt; 3. The &quot;sync&quot; rythm - every frame in the web process has to be synced to the ui process at the same time. This is why we need a scratch buffer, otherwise we&apos;d be able to update the tiles directly.
This is where we pass the GraphicsSurface token to the UIProcess.
&gt; 
&gt; In your patch you skip the sync rythm, and essentially update the ui-facing texture directly. that means that the canvas texture that&apos;s drawn to the screen is slightly newer than the other textures and geometry parameters that are currently known to TextureMapper. This might cause visible sync issues :)
I don&apos;t think this is the case. I am saving the GraphicsSurface token in the TextureMapperDirectBackingStore, which then later on is used to paint on screen at the same time as all the other content.
But I don&apos;t think this patch is conclusive about that mechanism. Some of the logic is contained in the patch for Bug86214. May be you can take a look at this one, and see if what i am saying makes sense?
Thank you very much! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637183</commentid>
    <comment_count>8</comment_count>
      <attachid>144563</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-05-30 07:09:07 -0700</bug_when>
    <thetext>Comment on attachment 144563
patch for review.

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

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:31
&gt; +void TextureMapperDirectBackingStore::setGraphicsSurface(uint32_t graphicsSurfaceToken, const IntSize&amp; surfaceSize)

This should be inside #if USE(GRAPHICS_SURFACE)

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:33
&gt; +    if (graphicsSurfaceToken != m_graphicsSurfaceToken) {

Early return

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:36
&gt; +                        GraphicsSurface::SupportsSoftwareRead

Wy do you need SoftwareRead?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:57
&gt; +    static_cast&lt;TextureMapperGL*&gt;(textureMapper)-&gt;drawTextureRectangleARB(m_textureId, 0, m_graphicsSurfaceSize, targetRect, adjustedTransform, opacity, mask);

This is very Mac specific. Maybe it should be inside OS(DARWIN)?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:370
&gt; +void TextureMapperGL::drawTextureRectangleARB(uint32_t texture, Flags flags, const IntSize&amp; textureSize, const FloatRect&amp; targetRect, const TransformationMatrix&amp; modelViewMatrix, float opacity, const BitmapTexture* maskTexture)

Mac specific, I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637424</commentid>
    <comment_count>9</comment_count>
      <attachid>144563</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-05-30 10:58:08 -0700</bug_when>
    <thetext>Comment on attachment 144563
patch for review.

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

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:31
&gt;&gt; +void TextureMapperDirectBackingStore::setGraphicsSurface(uint32_t graphicsSurfaceToken, const IntSize&amp; surfaceSize)
&gt; 
&gt; This should be inside #if USE(GRAPHICS_SURFACE)

fixed.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:33
&gt;&gt; +    if (graphicsSurfaceToken != m_graphicsSurfaceToken) {
&gt; 
&gt; Early return

fixed.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:36
&gt;&gt; +                        GraphicsSurface::SupportsSoftwareRead
&gt; 
&gt; Wy do you need SoftwareRead?

In fact it seems to me &quot;SupportsSharing&quot; is the only that is currently really needed anyway.
I&apos;ll delete &quot;SupportsSoftwareRead&quot;.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:57
&gt;&gt; +    static_cast&lt;TextureMapperGL*&gt;(textureMapper)-&gt;drawTextureRectangleARB(m_textureId, 0, m_graphicsSurfaceSize, targetRect, adjustedTransform, opacity, mask);
&gt; 
&gt; This is very Mac specific. Maybe it should be inside OS(DARWIN)?

fixed.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:370
&gt;&gt; +void TextureMapperGL::drawTextureRectangleARB(uint32_t texture, Flags flags, const IntSize&amp; textureSize, const FloatRect&amp; targetRect, const TransformationMatrix&amp; modelViewMatrix, float opacity, const BitmapTexture* maskTexture)
&gt; 
&gt; Mac specific, I think.

Currently it is only used for Mac. But i don&apos;t see a reason why this code path should remain Mac only. So I would prefer not to ifdef it.
You also suggested to switch TextureMapper for Qt/Mac completely to ARB textures to avoid having duplicate shader programs etc.
It does not seem to be totally straight forward to me, so I would prefer to research that in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637427</commentid>
    <comment_count>10</comment_count>
      <attachid>144868</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-05-30 10:59:17 -0700</bug_when>
    <thetext>Created attachment 144868
patch for review. - fixed issues as commented before.

EWS will not pass, because the blocking bugs need to be landed first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637491</commentid>
    <comment_count>11</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-05-30 11:38:43 -0700</bug_when>
    <thetext>Can you point out the exact point where the contents from the graphics surface are copied to the backing store?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637618</commentid>
    <comment_count>12</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-05-30 13:29:33 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Can you point out the exact point where the contents from the graphics surface are copied to the backing store?

Let me try to to illustrate that in the following call chain:

WebGraphicsLayer::syncCompositingStateForThisLayerOnly()
 -&gt; WebGraphicsLayer::syncCanvas()
  -&gt; LayerTreeHostQt::syncCanvas()
   -&gt; ... IPC ...
    -&gt; LayerTreeHostProxy::syncCanvas()
     -&gt; WebLayerTreeRenderer::syncCanvas()
For this code path up to here, please take a look at Bug87738.

WebLayerTreeRenderer::syncCanvas then creates a TextureMapperDirectBackingStore if necessary, and calls TextureMapperDirectBackingStore::setGraphicsSurface().
This function then creates a GraphicsSurface from the token that was passed as a parameter and stores the texture id in a member variable.

The next time, the function TextureMapperDirectBackingStore::paintToTextureMapper() is being called the texture is then being painted on screen directly using drawTextureRectangleARB() with the previously stored texture id as a parameter.

I hope that answers your question. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637731</commentid>
    <comment_count>13</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-05-30 15:00:36 -0700</bug_when>
    <thetext>&gt; WebLayerTreeRenderer::syncCanvas then creates a TextureMapperDirectBackingStore if necessary, and calls TextureMapperDirectBackingStore::setGraphicsSurface().
&gt; This function then creates a GraphicsSurface from the token that was passed as a parameter and stores the texture id in a member variable.

But we only do that once, and at the next sync we already have a GraphicsSurface. How do you make it sync the next time there&apos;s an update?
Seems to me like that texture remains bound to the surface, in that case we&apos;re double-buffered instead of triple-buffered, which would create a sync issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637809</commentid>
    <comment_count>14</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-05-30 16:29:43 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; WebLayerTreeRenderer::syncCanvas then creates a TextureMapperDirectBackingStore if necessary, and calls TextureMapperDirectBackingStore::setGraphicsSurface().
&gt; &gt; This function then creates a GraphicsSurface from the token that was passed as a parameter and stores the texture id in a member variable.
&gt; 
&gt; But we only do that once, and at the next sync we already have a GraphicsSurface. How do you make it sync the next time there&apos;s an update?
&gt; Seems to me like that texture remains bound to the surface, in that case we&apos;re double-buffered instead of triple-buffered, which would create a sync issue.

This depends on the update.
There are two cases:
1. Regular painting update (a WebGL call is executed). In this case WebGLRenderingContext::markContextChanged() is executed and this marks the according layer as dirty. With the next repaint the TextureMapperDirectBackingStore::paintToTextureMapper() function will be executed which then uses drawTextureRectangleARB() to bind the texture again and paint it on screen. There is no need to recreate the GraphicsSurface or recreate the texture from the GraphicsSurface.
The CGLIOSurface.h header states:
&quot;Put simply, in order for changes done to an IOSurface on context A to become visible to context B, you must flush context A&apos;s command stream (via an explicit call to glFlush, glFlushRenderAPPLE, etc.), and then perform a &apos;bind&apos; (in this case, glBindTexture()) on context B.&quot;

2. Resizing the canvas. In this case creating a new GraphicsSurface is actually necessary. So we create a new one and replace the old one. The token will be different in this case and when TextureMapperDirectBackingStore::setGraphicsSurface() is executed, it will actually create a new GraphicsSurface in the UIProcess as well and the texture id will be updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637814</commentid>
    <comment_count>15</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-05-30 16:35:29 -0700</bug_when>
    <thetext>&gt; 1. Regular painting update (a WebGL call is executed). In this case WebGLRenderingContext::markContextChanged() is executed and this marks the according layer as dirty. With the next repaint the TextureMapperDirectBackingStore::paintToTextureMapper() function will be executed which then uses drawTextureRectangleARB() to bind the texture again and paint it on screen. There is no need to recreate the GraphicsSurface or recreate the texture from the GraphicsSurface.
&gt; The CGLIOSurface.h header states:
&gt; &quot;Put simply, in order for changes done to an IOSurface on context A to become visible to context B, you must flush context A&apos;s command stream (via an explicit call to glFlush, glFlushRenderAPPLE, etc.), and then perform a &apos;bind&apos; (in this case, glBindTexture()) on context B.&quot;

OK, this is a sync issue. It would mean that if the following sequence occurs:
1. we flush the WebGL context in the web process
2. we scroll in the UI process
3. we sync the layers in the web process
4. we sync the layer changes in the UI process

The correct place for the changes from (1) to take affect are after (4). But with your patch they happend at (2). This would create a sync issue if other things in the page update as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638144</commentid>
    <comment_count>16</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-05-31 02:30:37 -0700</bug_when>
    <thetext>&gt; OK, this is a sync issue. It would mean that if the following sequence occurs:
&gt; 1. we flush the WebGL context in the web process
&gt; 2. we scroll in the UI process
&gt; 3. we sync the layers in the web process
&gt; 4. we sync the layer changes in the UI process
&gt; 
&gt; The correct place for the changes from (1) to take affect are after (4). But with your patch they happend at (2). This would create a sync issue if other things in the page update as well.

Okay, I see what you mean. Sorry, it took me a while to understand.
I was just talking to Simon about it, and he proposed to use two GraphicsSurfaces that are then being used alternated. - I&apos;ll give it a try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639235</commentid>
    <comment_count>17</comment_count>
      <attachid>145279</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-06-01 05:47:20 -0700</bug_when>
    <thetext>Created attachment 145279
patch for review. - adding a second GraphicSurface as a buffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639275</commentid>
    <comment_count>18</comment_count>
      <attachid>145279</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-06-01 06:32:08 -0700</bug_when>
    <thetext>Comment on attachment 145279
patch for review. - adding a second GraphicSurface as a buffer.

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

Good! Just a few nitpicks.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:34
&gt; +    if (graphicsSurfaceToken != m_backbufferGraphicsSurfaceToken) {

backbuffer -&gt; backBuffer

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:36
&gt; +                                            | GraphicsSurface::SupportsSharing;

It actually needs TextureTarget and not CopyFromTexture... but I guess we can deal with that when we deal with hardware that makes that distinction.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:52
&gt; +    // Swap front and backbuffer GraphicsSurface.
&gt; +    RefPtr&lt;GraphicsSurface&gt; temp =  m_currentGraphicsSurface;
&gt; +    m_currentGraphicsSurface = m_backbufferGraphicsSurface;
&gt; +    m_backbufferGraphicsSurface = temp;
&gt; +    uint32_t tempToken = m_currentGraphicsSurfaceToken;
&gt; +    m_currentGraphicsSurfaceToken = m_backbufferGraphicsSurfaceToken;
&gt; +    m_backbufferGraphicsSurfaceToken = tempToken;
&gt; +    uint32_t tempTextureId = m_currentTextureId;
&gt; +    m_currentTextureId = m_backbufferTextureId;
&gt; +    m_backbufferTextureId = tempTextureId;

Would be better to have these 3 members in a struct and call std::swap

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:55
&gt; +PassRefPtr&lt;BitmapTexture&gt; TextureMapperDirectBackingStore::texture() const

I think this is not pure virtual, you should be able to simply not override it.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.h:43
&gt; +class TextureMapperDirectBackingStore : public TextureMapperBackingStore {

How about TextureMapperSurfaceBackingStore? It&apos;s a bit more of a direct name :)

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:253
&gt; +    program-&gt;initialize(); // Avoid calling virtual functions in constructor.

Put comment in previous line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639335</commentid>
    <comment_count>19</comment_count>
      <attachid>145279</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-06-01 07:43:39 -0700</bug_when>
    <thetext>Comment on attachment 145279
patch for review. - adding a second GraphicSurface as a buffer.

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

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:34
&gt;&gt; +    if (graphicsSurfaceToken != m_backbufferGraphicsSurfaceToken) {
&gt; 
&gt; backbuffer -&gt; backBuffer

fixed.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:36
&gt;&gt; +                                            | GraphicsSurface::SupportsSharing;
&gt; 
&gt; It actually needs TextureTarget and not CopyFromTexture... but I guess we can deal with that when we deal with hardware that makes that distinction.

fixed.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:52
&gt;&gt; +    m_backbufferTextureId = tempTextureId;
&gt; 
&gt; Would be better to have these 3 members in a struct and call std::swap

added GraphicsSurfaceData structure.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:55
&gt;&gt; +PassRefPtr&lt;BitmapTexture&gt; TextureMapperDirectBackingStore::texture() const
&gt; 
&gt; I think this is not pure virtual, you should be able to simply not override it.

Yes it is. Maybe we could change that instead?
For the moment i just left it the way it is.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.h:43
&gt;&gt; +class TextureMapperDirectBackingStore : public TextureMapperBackingStore {
&gt; 
&gt; How about TextureMapperSurfaceBackingStore? It&apos;s a bit more of a direct name :)

Agree - fixed.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:253
&gt;&gt; +    program-&gt;initialize(); // Avoid calling virtual functions in constructor.
&gt; 
&gt; Put comment in previous line

fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639336</commentid>
    <comment_count>20</comment_count>
      <attachid>145306</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-06-01 07:44:15 -0700</bug_when>
    <thetext>Created attachment 145306
patch for review. - fixed issues as commented before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639412</commentid>
    <comment_count>21</comment_count>
      <attachid>145306</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-06-01 09:04:32 -0700</bug_when>
    <thetext>Comment on attachment 145306
patch for review. - fixed issues as commented before.

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

LGTM with minor nitpicks

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp:41
&gt; +    std::swap(m_backBufferGraphicsSurfaceData, m_currentBufferGraphicsSurfaceData);

current -&gt; front

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.h:56
&gt; +    uint32_t m_textureId;

Id -&gt; ID</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639478</commentid>
    <comment_count>22</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-06-01 10:02:24 -0700</bug_when>
    <thetext>Committed r119247: &lt;http://trac.webkit.org/changeset/119247&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639495</commentid>
    <comment_count>23</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-06-01 10:22:00 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Committed r119247: &lt;http://trac.webkit.org/changeset/119247&gt;

It broke the build on Qt Windows, ARM, MIPS, SH4.
Could you check it, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639500</commentid>
    <comment_count>24</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-06-01 10:29:34 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; It broke the build on Qt Windows, ARM, MIPS, SH4.
&gt; Could you check it, please?

I just landed a bugfix in r119252. - I Hope it will make the bots green again. :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144563</attachid>
            <date>2012-05-29 08:09:50 -0700</date>
            <delta_ts>2012-05-30 10:59:17 -0700</delta_ts>
            <desc>patch for review.</desc>
            <filename>87725_20120529-170746.patch</filename>
            <type>text/plain</type>
            <size>21722</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmYTc4NTU3Li4wNWRhNDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNjUg
QEAKIDIwMTItMDUtMjkgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CiAKKyAgICAg
ICAgTWFrZSBUZXh0dXJlTWFwcGVyIHdvcmsgd2l0aCBHcmFwaGljc1N1cmZhY2UuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzczOAorCisgICAgICAg
IEFkZCBUZXh0dXJlTWFwcGVyRGlyZWN0QmFja2luZ1N0b3JlLCBhIG5ldyBiYWNraW5nIHN0b3Jl
CisgICAgICAgIHRoYXQgYWxsb3dzIHRvIGltcG9ydCB0ZXh0dXJlcyBmcm9tIGEgR3JhcGhpY3NT
dXJmYWNlLgorICAgICAgICBPbiBNYWMgdGhlIEdyYXBoaWNzU3VyZmFjZSBpcyBiYWNrZWQgYnkg
YW4gSU9TdXJmYWNlCisgICAgICAgIHdoaWNoIG11c3QgYmUgdXNlZCB3aXRoIGEgR0xfVEVYVFVS
RV9SRUNUQU5HTEVfQVJCIHRleHR1cmUuCisgICAgICAgIFRoZXJlZm9yZSBpdCBpcyBhbHNvIG5l
Y2Vzc2FyeSB0byBhZGQgbmV3IHNoYWRlciBwcm9ncmFtcworICAgICAgICBmb3IgZGlyZWN0bHkg
cGFpbnRpbmcgdGhlc2UgdGV4dHVyZXMgb24gc2NyZWVuLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICBBZGQgYSBuZXcgVGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGNhbiBkaXJlY3RseQorICAgICAg
ICByZXVzZSB0ZXh0dXJlcyBhcyB0aGV5IGFyZSBiZWluZyBwYXNzZWQgZnJvbSB0aGUgR3JhcGhp
Y3NTdXJmYWNlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckRpcmVjdEJhY2tpbmdT
dG9yZTo6c2V0R3JhcGhpY3NTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJEaXJlY3RCYWNraW5nU3RvcmU6OnRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckRpcmVjdEJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmg6
CisgICAgICAgIChUZXh0dXJlTWFwcGVyRGlyZWN0QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJEaXJlY3RCYWNraW5nU3RvcmU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyRGlyZWN0QmFja2luZ1N0b3JlOjp+VGV4dHVyZU1hcHBl
ckRpcmVjdEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyRGly
ZWN0QmFja2luZ1N0b3JlOjpUZXh0dXJlTWFwcGVyRGlyZWN0QmFja2luZ1N0b3JlKToKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAg
ICAgICBBZGQgYSBkcmF3aW5nIGZ1bmN0aW9uIGZvciB0ZXh0dXJlcyBvZiB0eXBlIEdMX1RFWFRV
UkVfUkVDVEFOR0xFX0FSQi4KKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJh
d1RleHR1cmVSZWN0YW5nbGVBUkIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjppbml0aWFsaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29s
aWRDb2xvcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmZyYWdtZW50U2hhZGVyU291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9w
YWNpdHlBbmRNYXNrOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OmZyYWdt
ZW50U2hhZGVyU291cmNlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oOgorICAgICAgICBBZGQgbmV3IHNoYWRlciBwcm9n
cmFtcyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCIHRleHR1
cmVzLgorICAgICAgICBUaGlzIGlzIG1haW5seSBuZWNlc3NhcnksIGJlY2F1c2UgdGhpcyB0eXBl
IG9mIHRleHR1cmUgdXNlcyBub24tbm9ybWFsaXplZCBjb29yZGluYXRlcy4KKyAgICAgICAgRnVy
dGhlciBtb3ZlIHRoZSBjYWxscyB0byBpbml0aWFsaXplUHJvZ3JhbSgpIGZyb20gdGhlIGNvbnN0
cnVjdG9yIGludG8gYSBzZXBhcmF0ZQorICAgICAgICBpbml0aWFsaXplKCkgZnVuY3Rpb24sIGFz
IGluaXRpYWxpemVQcm9ncmFtKCkgY2FsbHMgdmVydGV4U2hhZGVyU291cmNlKCkgKGFuZCBmcmll
bmRzKQorICAgICAgICBhbmQgd2Ugc2hvdWxkIG5vdCBjYWxsIHZpcnR1YWwgZnVuY3Rpb25zIGlu
IHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjppbml0aWFsaXplKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
U2ltcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSk6CisgICAgICAgIChUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RTaW1wbGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5
QW5kTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9w
YWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKToK
KyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlB
bmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayk6Cisg
ICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IpOgorCisyMDEyLTA1LTI5ICBaZW5vIEFsYmlzc2Vy
ICA8emVub0B3ZWJraXQub3JnPgorCiAgICAgICAgIEdyYXBoaWNzU3VyZmFjZTogYWxsb3cgaW1w
b3J0aW5nIGFuZCBleHBvcnRpbmcgb2YgdGV4dHVyZXMgZGlyZWN0bHkgb24gR1BVIHNpZGUuCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzcyNQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAKaW5kZXggODg3N2JmZS4uMzgy
NThmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcApAQCAtMjEs
MTEgKzIxLDQyIEBACiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgogCiAj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5oIgog
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3ZvaWQg
VGV4dHVyZU1hcHBlckRpcmVjdEJhY2tpbmdTdG9yZTo6c2V0R3JhcGhpY3NTdXJmYWNlKHVpbnQz
Ml90IGdyYXBoaWNzU3VyZmFjZVRva2VuLCBjb25zdCBJbnRTaXplJiBzdXJmYWNlU2l6ZSkKK3sK
KyAgICBpZiAoZ3JhcGhpY3NTdXJmYWNlVG9rZW4gIT0gbV9ncmFwaGljc1N1cmZhY2VUb2tlbikg
eworICAgICAgICBtX2dyYXBoaWNzU3VyZmFjZVRva2VuID0gZ3JhcGhpY3NTdXJmYWNlVG9rZW47
CisgICAgICAgIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3Mgc3VyZmFjZUZsYWdzID0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTb2Z0d2FyZVJlYWQKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHwgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c0NvcHlGcm9t
VGV4dHVyZQorICAgICAgICAgICAgICAgICAgICAgICAgfCBHcmFwaGljc1N1cmZhY2U6OlN1cHBv
cnRzU2hhcmluZzsKKworICAgICAgICBtX2dyYXBoaWNzU3VyZmFjZSA9IEdyYXBoaWNzU3VyZmFj
ZTo6Y3JlYXRlKHN1cmZhY2VTaXplLCBzdXJmYWNlRmxhZ3MsIGdyYXBoaWNzU3VyZmFjZVRva2Vu
KTsKKyAgICAgICAgbV9ncmFwaGljc1N1cmZhY2VTaXplID0gc3VyZmFjZVNpemU7CisgICAgICAg
IG1fdGV4dHVyZUlkID0gbV9ncmFwaGljc1N1cmZhY2UtPmdldFRleHR1cmVJRCgpOworICAgIH0K
K30KKworUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyRGlyZWN0QmFja2lu
Z1N0b3JlOjp0ZXh0dXJlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBqdXN0
IHJldHVybmluZyBhbiBlbXB0eSB0ZXh0dXJlLCB3ZSBzaG91bGQgd3JhcCB0aGUgdGV4dHVyZSBj
b250ZW50cyBpbnRvIGEgQml0bWFwVGV4dHVyZS4KKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
ZW1wdHlUZXh0dXJlOworICAgIHJldHVybiBlbXB0eVRleHR1cmU7Cit9CisKK3ZvaWQgVGV4dHVy
ZU1hcHBlckRpcmVjdEJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1h
cHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0
dXJlKiBtYXNrKQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJhbnNmb3Jt
ID0gdHJhbnNmb3JtOworICAgIGFkanVzdGVkVHJhbnNmb3JtLm11bHRpcGx5KFRyYW5zZm9ybWF0
aW9uTWF0cml4OjpyZWN0VG9SZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIG1fZ3Jh
cGhpY3NTdXJmYWNlU2l6ZSksIHRhcmdldFJlY3QpKTsKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJl
TWFwcGVyR0wqPih0ZXh0dXJlTWFwcGVyKS0+ZHJhd1RleHR1cmVSZWN0YW5nbGVBUkIobV90ZXh0
dXJlSWQsIDAsIG1fZ3JhcGhpY3NTdXJmYWNlU2l6ZSwgdGFyZ2V0UmVjdCwgYWRqdXN0ZWRUcmFu
c2Zvcm0sIG9wYWNpdHksIG1hc2spOworfQorCiB2b2lkIFRleHR1cmVNYXBwZXJUaWxlOjp1cGRh
dGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBJbWFnZSogaW1hZ2UsIGNv
bnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKICAgICBJbnRSZWN0IHRhcmdldFJlY3QgPSBlbmNs
b3NpbmdJbnRSZWN0KG1fcmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUu
aAppbmRleCAzN2EzNjUwLi5jZWFlNmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2lu
Z1N0b3JlLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgVGV4dHVyZU1hcHBlckJhY2tpbmdT
dG9yZV9oCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZh
Y2UuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgpAQCAtMzgsNiArMzksMjYgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUoKSB7IH0KIH07
CiAKK2NsYXNzIFRleHR1cmVNYXBwZXJEaXJlY3RCYWNraW5nU3RvcmUgOiBwdWJsaWMgVGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4
dHVyZU1hcHBlckRpcmVjdEJhY2tpbmdTdG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IFRleHR1cmVNYXBwZXJEaXJlY3RCYWNraW5nU3RvcmUpOyB9CisgICAgdm9pZCBzZXRHcmFw
aGljc1N1cmZhY2UodWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4sIGNvbnN0IEludFNpemUm
IHN1cmZhY2VTaXplKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4
dHVyZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0
dXJlTWFwcGVyKiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
LCBmbG9hdCwgQml0bWFwVGV4dHVyZSopOworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJEaXJl
Y3RCYWNraW5nU3RvcmUoKSB7IH0KK3ByaXZhdGU6CisgICAgVGV4dHVyZU1hcHBlckRpcmVjdEJh
Y2tpbmdTdG9yZSgpCisgICAgICAgIDogbV90ZXh0dXJlSWQoMCkKKyAgICAgICAgLCBtX2dyYXBo
aWNzU3VyZmFjZVRva2VuKDApCisgICAgeyB9CisKKyAgICB1aW50MzJfdCBtX3RleHR1cmVJZDsK
KyAgICBJbnRTaXplIG1fZ3JhcGhpY3NTdXJmYWNlU2l6ZTsKKyAgICB1aW50MzJfdCBtX2dyYXBo
aWNzU3VyZmFjZVRva2VuOworICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U+IG1f
Z3JhcGhpY3NTdXJmYWNlOworCit9OworCiBjbGFzcyBUZXh0dXJlTWFwcGVyVGlsZSB7CiBwdWJs
aWM6CiAgICAgaW5saW5lIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdGV4dHVyZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCAwZjc2NTJj
Li4xMjM0YzM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMjEsNiArMjEsNyBAQAogI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCkBA
IC0zNjYsNiArMzY3LDU5IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25z
dCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmCiAgICAgZHJhd1RleHR1
cmUodGV4dHVyZUdMLmlkKCksIHRleHR1cmVHTC5pc09wYXF1ZSgpID8gMCA6IFN1cHBvcnRzQmxl
bmRpbmcsIHRleHR1cmVHTC5zaXplKCksIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwgbWFz
ayk7CiB9CiAKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVJlY3RhbmdsZUFSQih1
aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFz
a1RleHR1cmUpCit7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBzaGFk
ZXJJbmZvOworICAgIGlmIChtYXNrVGV4dHVyZSkKKyAgICAgICAgc2hhZGVySW5mbyA9IGRhdGEo
KS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9n
cmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0T3BhY2l0eUFuZE1hc2spOworICAg
IGVsc2UKKyAgICAgICAgc2hhZGVySW5mbyA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpSZWN0U2ltcGxlKTsKKworICAgIEdMX0NNRChnbFVzZVByb2dyYW0oc2hhZGVySW5m
by0+aWQoKSkpOworICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlcklu
Zm8tPnZlcnRleEF0dHJpYigpKSk7CisgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhU
VVJFMCkpOworICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FS
QiwgdGV4dHVyZSkpOworICAgIEdMX0NNRChnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAw
KSk7CisgICAgY29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAs
IDF9OworICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVySW5mby0+dmVydGV4
QXR0cmliKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKTsKKworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5w
cm9qZWN0aW9uTWF0cml4KS5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgpLm11bHRpcGx5KFRyYW5z
Zm9ybWF0aW9uTWF0cml4KAorICAgICAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAw
LAorICAgICAgICAgICAgMCwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKKyAgICAgICAgICAg
IDAsIDAsIDEsIDAsCisgICAgICAgICAgICB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCks
IDAsIDEpKTsKKworICAgIGNvbnN0IEdMZmxvYXQgbTRbXSA9IHsKKyAgICAgICAgbWF0cml4Lm0x
MSgpLCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAorICAgICAgICBt
YXRyaXgubTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCisg
ICAgICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5t
MzQoKSwKKyAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwg
bWF0cml4Lm00NCgpCisgICAgfTsKKworICAgIGNvbnN0IEdMZmxvYXQgbTRzcmNbXSA9IHsKKyAg
ICAgICAgdGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLAorICAgICAgICAwLCAoZmxhZ3MgJiBT
aG91bGRGbGlwVGV4dHVyZSkgPyAtdGFyZ2V0UmVjdC5oZWlnaHQoKSA6IHRhcmdldFJlY3QuaGVp
Z2h0KCksIDAsIDAsCisgICAgICAgIDAsIDAsIDEsIDAsCisgICAgICAgIDAsIChmbGFncyAmIFNo
b3VsZEZsaXBUZXh0dXJlKSA/IDEgOiAwLCAwLCAxfTsKKworICAgIEdMX0NNRChnbFVuaWZvcm1N
YXRyaXg0ZnYoc2hhZGVySW5mby0+bWF0cml4VmFyaWFibGUoKSwgMSwgR0xfRkFMU0UsIG00KSk7
CisgICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXJJbmZvLT5zb3VyY2VNYXRyaXhW
YXJpYWJsZSgpLCAxLCBHTF9GQUxTRSwgbTRzcmMpKTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWko
c2hhZGVySW5mby0+c291cmNlVGV4dHVyZVZhcmlhYmxlKCksIDApKTsKKworICAgIHNoYWRlcklu
Zm8tPnByZXBhcmUob3BhY2l0eSwgbWFza1RleHR1cmUpOworCisgICAgYm9vbCBuZWVkc0JsZW5k
aW5nID0gKGZsYWdzICYgU3VwcG9ydHNCbGVuZGluZykgfHwgb3BhY2l0eSA8IDAuOTkgfHwgbWFz
a1RleHR1cmU7CisKKyAgICBpZiAobmVlZHNCbGVuZGluZykgeworICAgICAgICBHTF9DTUQoZ2xC
bGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKSk7CisgICAgICAgIEdMX0NN
RChnbEVuYWJsZShHTF9CTEVORCkpOworICAgIH0gZWxzZQorICAgICAgICBHTF9DTUQoZ2xEaXNh
YmxlKEdMX0JMRU5EKSk7CisKKyAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZB
TiwgMCwgNCkpOworICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJJ
bmZvLT52ZXJ0ZXhBdHRyaWIoKSkpOworfQorCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1Rl
eHR1cmUodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIHRleHR1
cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1
cmUqIG1hc2tUZXh0dXJlKQogewogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bT4gc2hhZGVySW5mbzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCA2MjdlYWU4Li40ZDNkZGVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5oCkBAIC01Miw2ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgZHJhd0JvcmRlcihjb25zdCBDb2xvciYsIGZsb2F0IGJvcmRlcldpZHRoLCBjb25zdCBG
bG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZp
ZXdNYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKSBPVkVSUklERTsKICAgICB2aXJ0dWFs
IHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFw
VGV4dHVyZSogbWFza1RleHR1cmUpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4
dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFz
a1RleHR1cmUpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZVJlY3RhbmdsZUFSQih1aW50
MzJfdCB0ZXh0dXJlLCBGbGFncywgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmll
d01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUp
OwogICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgY29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGJl
Z2luUGFpbnRpbmcoUGFpbnRGbGFncyA9IDApIE9WRVJSSURFOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKaW5kZXggNTZmYTc0Mi4uYzc1ZWRlNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCkBAIC01NSw2ICs1NSwyMCBAQCBz
dGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CiAg
ICAgICAgIH0KICAgICApOwogCitzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2VSZWN0T3BhY2l0eUFuZE1hc2sgPQorICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICAgICAgdW5p
Zm9ybSBzYW1wbGVyMkRSZWN0IFNvdXJjZVRleHR1cmUsIE1hc2tUZXh0dXJlOworICAgICAgICB1
bmlmb3JtIGxvd3AgZmxvYXQgT3BhY2l0eTsKKyAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91
dFRleENvb3JkU291cmNlLCBPdXRUZXhDb29yZE1hc2s7CisgICAgICAgIHZvaWQgbWFpbih2b2lk
KQorICAgICAgICB7CisgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkRSZWN0
KFNvdXJjZVRleHR1cmUsIE91dFRleENvb3JkU291cmNlKTsKKyAgICAgICAgICAgIGxvd3AgdmVj
NCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkRSZWN0KE1hc2tUZXh0dXJlLCBPdXRUZXhDb29yZE1hc2sp
OworICAgICAgICAgICAgbG93cCBmbG9hdCBmcmFnbWVudEFscGhhID0gT3BhY2l0eSAqIG1hc2tD
b2xvci5hOworICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBmcmFn
bWVudEFscGhhLCBjb2xvci5hICogZnJhZ21lbnRBbHBoYSk7CisgICAgICAgIH0KKyAgICApOwor
CiBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQog
ICAgIFZFUlRFWF9TSEFERVIoCiAgICAgICAgIHVuaWZvcm0gbWF0NCBJbk1hdHJpeCwgSW5Tb3Vy
Y2VNYXRyaXg7CkBAIC04MCw2ICs5NCwxOCBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRT
aGFkZXJTb3VyY2VTaW1wbGUgPQogICAgICAgICB9CiAgICAgKTsKIAorc3RhdGljIGNvbnN0IGNo
YXIqIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdFNpbXBsZSA9CisgICAgRlJBR01FTlRfU0hBREVS
KAorICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRFJlY3QgU291cmNlVGV4dHVyZTsKKyAgICAgICAg
dW5pZm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7CisgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBP
dXRUZXhDb29yZFNvdXJjZTsKKyAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRFJlY3QoU291cmNlVGV4dHVyZSwg
T3V0VGV4Q29vcmRTb3VyY2UpOworICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xv
ci5yZ2IgKiBPcGFjaXR5LCBjb2xvci5hICogT3BhY2l0eSk7CisgICAgICAgIH0KKyAgICApOwor
CiBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU2ltcGxlID0KICAgICBWRVJU
RVhfU0hBREVSKAogICAgICAgICB1bmlmb3JtIG1hdDQgSW5NYXRyaXgsIEluU291cmNlTWF0cml4
OwpAQCAtMTMxLDkgKzE1NywxNSBAQCBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZwogICAgIGNhc2Ug
U2ltcGxlOgogICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1w
bGU6OmNyZWF0ZSgpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFJlY3RTaW1wbGU6CisgICAg
ICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0
ZSgpOworICAgICAgICBicmVhazsKICAgICBjYXNlIE9wYWNpdHlBbmRNYXNrOgogICAgICAgICBw
cm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRl
KCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmVjdE9wYWNpdHlBbmRNYXNrOgorICAgICAg
ICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6
OmNyZWF0ZSgpOworICAgICAgICBicmVhazsKICAgICBjYXNlIFNvbGlkQ29sb3I6CiAgICAgICAg
IHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OmNyZWF0ZSgp
OwogICAgICAgICBicmVhazsKQEAgLTE4NiwxMCArMjE4LDEyIEBAIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQogCiBQYXNzUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVNpbXBsZTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNpbXBsZT4gcHJvZ3JhbSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNpbXBsZSgpKTsKKyAgICBwcm9ncmFtLT5pbml0aWFsaXplKCk7IC8vIEF2b2lkIGNh
bGxpbmcgdmlydHVhbCBmdW5jdGlvbnMgaW4gY29uc3RydWN0b3IuCisgICAgcmV0dXJuIHByb2dy
YW0ucmVsZWFzZSgpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKQordm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNpbXBsZTo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsK
ICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9zb3VyY2VNYXRyaXhWYXJpYWJsZSwgIkluU291cmNl
TWF0cml4Iik7CkBAIC0yMTUsMTAgKzI0OSwxMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlOjpwcmVwYXJlKGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cgog
CiBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpjcmVhdGUoKQogewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKCkpOworICAg
IFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IHByb2dyYW0gPSBh
ZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKCkpOworICAg
IHByb2dyYW0tPmluaXRpYWxpemUoKTsgLy8gQXZvaWQgY2FsbGluZyB2aXJ0dWFsIGZ1bmN0aW9u
cyBpbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gcHJvZ3JhbS5yZWxlYXNlKCk7CiB9CiAKLVRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1Tb2xpZENvbG9yKCkKK3ZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENv
bG9yOjppbml0aWFsaXplKCkKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVu
aWZvcm1Mb2NhdGlvbihtX21hdHJpeFZhcmlhYmxlLCAiSW5NYXRyaXgiKTsKQEAgLTIzNSwxMiAr
MjcxLDI2IEBAIGNvbnN0IGNoYXIqIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xv
cjo6ZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdAogICAgIHJldHVybiBmcmFnbWVudFNoYWRl
clNvdXJjZVNvbGlkQ29sb3I7CiB9CiAKK1Bhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1SZWN0U2ltcGxlPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNy
ZWF0ZSgpCit7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBs
ZT4gcHJvZ3JhbSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RT
aW1wbGUoKSk7CisgICAgcHJvZ3JhbS0+aW5pdGlhbGl6ZSgpOyAvLyBBdm9pZCBjYWxsaW5nIHZp
cnR1YWwgZnVuY3Rpb25zIGluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiBwcm9ncmFtLnJlbGVh
c2UoKTsKK30KKworY29uc3QgY2hhciogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2lt
cGxlOjpmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyYWdtZW50
U2hhZGVyU291cmNlUmVjdFNpbXBsZTsKK30KKwogUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNp
dHlBbmRNYXNrOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gcHJvZ3JhbSA9IGFkb3B0UmVmKG5ldyBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCkpOworICAgIHByb2dyYW0t
PmluaXRpYWxpemUoKTsgLy8gQXZvaWQgY2FsbGluZyB2aXJ0dWFsIGZ1bmN0aW9ucyBpbiBjb25z
dHJ1Y3Rvci4KKyAgICByZXR1cm4gcHJvZ3JhbS5yZWxlYXNlKCk7CiB9CiAKLVRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hc2soKQordm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlB
bmRNYXNrOjppbml0aWFsaXplKCkKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdl
dFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeFZhcmlhYmxlLCAiSW5NYXRyaXgiKTsKQEAgLTI3Myw2
ICszMjMsMTggQEAgdm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNr
OjpwcmVwYXJlKGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG0KICAgICBnbEFjdGl2ZVRleHR1cmUo
R0xfVEVYVFVSRTApOwogfQogCitQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
UmVjdE9wYWNpdHlBbmRNYXNrPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5
QW5kTWFzazo6Y3JlYXRlKCkKK3sKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1SZWN0T3BhY2l0eUFuZE1hc2s+IHByb2dyYW0gPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soKSk7CisgICAgcHJvZ3JhbS0+aW5pdGlh
bGl6ZSgpOyAvLyBBdm9pZCBjYWxsaW5nIHZpcnR1YWwgZnVuY3Rpb25zIGluIGNvbnN0cnVjdG9y
LgorICAgIHJldHVybiBwcm9ncmFtLnJlbGVhc2UoKTsKK30KKworY29uc3QgY2hhciogVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OmZyYWdtZW50U2hhZGVyU291
cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0
eUFuZE1hc2s7Cit9CisKIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcigpCiB7CiAgICAgQVNTRVJUKGluaXRpYWxpemVPcGVuR0xTaGltcygpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKaW5kZXggMTYyMjFhYy4uNjgx
ODU1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKQEAgLTU2LDYg
KzU2LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZvaWQgZ2V0VW5pZm9ybUxvY2F0aW9u
KEdMaW50JiB2YXIsIGNvbnN0IGNoYXIqIG5hbWUpOwogICAgIHZvaWQgaW5pdGlhbGl6ZVByb2dy
YW0oKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpIHsgfQogICAgIHZpcnR1YWwgY29u
c3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgY29u
c3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdCA9IDA7CiAKQEAgLTEwMywxMCAr
MTA0LDI0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNpbXBsZT4gY3JlYXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmUoZmxv
YXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSopOwogCitwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCB2b2lkIGluaXRpYWxpemUoKTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHZlcnRleFNoYWRlclNvdXJjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgY2hhciog
ZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdDsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVNpbXBsZSgpOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkgeyB9
CisKKyAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxl
OworfTsKKworY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlIDogcHVi
bGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU+IGNyZWF0
ZSgpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJT
b3VyY2UoKSBjb25zdDsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUo
KSB7IH0KIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1h
c2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewpAQCAtMTE1LDEyICsxMzAs
MjYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGZsb2F0IG9wYWNpdHksIGNv
bnN0IEJpdG1hcFRleHR1cmUqKTsKICAgICBHTGludCBtYXNrVGV4dHVyZVZhcmlhYmxlKCkgY29u
c3QgeyByZXR1cm4gbV9tYXNrVGV4dHVyZVZhcmlhYmxlOyB9CiAKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOworCiBwcml2YXRlOgogICAgIHN0YXRpYyBpbnQgbV9j
bGFzc0lEOwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0
OwotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKTsKKyAgICBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCkgeyB9CiAgICAgR0xpbnQg
bV9tYXNrVGV4dHVyZVZhcmlhYmxlOworCisgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOworfTsKKworY2xhc3MgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s+IGNyZWF0ZSgp
OworCitwcml2YXRlOgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UoKSBjb25zdDsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5k
TWFzaygpIHsgfQogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENv
bG9yIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKQEAgLTEyOCwyMSArMTU3
LDI1IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3I+IGNyZWF0ZSgpOwogICAgIEdMaW50IGNvbG9yVmFyaWFibGUoKSBj
b25zdCB7IHJldHVybiBtX2NvbG9yVmFyaWFibGU7IH0KIAorcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgdm9pZCBpbml0aWFsaXplKCk7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZy
YWdtZW50U2hhZGVyU291cmNlKCkgY29uc3Q7Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1Tb2xpZENvbG9yKCk7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9y
KCkgeyB9CiAgICAgR0xpbnQgbV9jb2xvclZhcmlhYmxlOwogfTsKIAotCiBjbGFzcyBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlciB7CiBwdWJsaWM6CiAgICAgZW51bSBTaGFkZXJUeXBlIHsKICAg
ICAgICAgSW52YWxpZCA9IDAsIC8vIEhhc2hNYXBzIGRvIG5vdCBsaWtlIDAgYXMgYSBrZXkuCiAg
ICAgICAgIFNpbXBsZSwKKyAgICAgICAgUmVjdFNpbXBsZSwKICAgICAgICAgT3BhY2l0eUFuZE1h
c2ssCi0gICAgICAgIFNvbGlkQ29sb3IsCisgICAgICAgIFJlY3RPcGFjaXR5QW5kTWFzaywKKyAg
ICAgICAgU29saWRDb2xvcgogICAgIH07CiAKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cigpOwo=
</data>
<flag name="review"
          id="151437"
          type_id="1"
          status="-"
          setter="noam"
    />
    <flag name="commit-queue"
          id="151446"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144868</attachid>
            <date>2012-05-30 10:59:17 -0700</date>
            <delta_ts>2012-06-01 05:47:20 -0700</delta_ts>
            <desc>patch for review. - fixed issues as commented before.</desc>
            <filename>87725_20120530-195728.patch</filename>
            <type>text/plain</type>
            <size>20866</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmYTc4NTU3Li4wNWRhNDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNjUg
QEAKIDIwMTItMDUtMjkgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CiAKKyAgICAg
ICAgTWFrZSBUZXh0dXJlTWFwcGVyIHdvcmsgd2l0aCBHcmFwaGljc1N1cmZhY2UuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzczOAorCisgICAgICAg
IEFkZCBUZXh0dXJlTWFwcGVyRGlyZWN0QmFja2luZ1N0b3JlLCBhIG5ldyBiYWNraW5nIHN0b3Jl
CisgICAgICAgIHRoYXQgYWxsb3dzIHRvIGltcG9ydCB0ZXh0dXJlcyBmcm9tIGEgR3JhcGhpY3NT
dXJmYWNlLgorICAgICAgICBPbiBNYWMgdGhlIEdyYXBoaWNzU3VyZmFjZSBpcyBiYWNrZWQgYnkg
YW4gSU9TdXJmYWNlCisgICAgICAgIHdoaWNoIG11c3QgYmUgdXNlZCB3aXRoIGEgR0xfVEVYVFVS
RV9SRUNUQU5HTEVfQVJCIHRleHR1cmUuCisgICAgICAgIFRoZXJlZm9yZSBpdCBpcyBhbHNvIG5l
Y2Vzc2FyeSB0byBhZGQgbmV3IHNoYWRlciBwcm9ncmFtcworICAgICAgICBmb3IgZGlyZWN0bHkg
cGFpbnRpbmcgdGhlc2UgdGV4dHVyZXMgb24gc2NyZWVuLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICBBZGQgYSBuZXcgVGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGNhbiBkaXJlY3RseQorICAgICAg
ICByZXVzZSB0ZXh0dXJlcyBhcyB0aGV5IGFyZSBiZWluZyBwYXNzZWQgZnJvbSB0aGUgR3JhcGhp
Y3NTdXJmYWNlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckRpcmVjdEJhY2tpbmdT
dG9yZTo6c2V0R3JhcGhpY3NTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJEaXJlY3RCYWNraW5nU3RvcmU6OnRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckRpcmVjdEJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmg6
CisgICAgICAgIChUZXh0dXJlTWFwcGVyRGlyZWN0QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJEaXJlY3RCYWNraW5nU3RvcmU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyRGlyZWN0QmFja2luZ1N0b3JlOjp+VGV4dHVyZU1hcHBl
ckRpcmVjdEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyRGly
ZWN0QmFja2luZ1N0b3JlOjpUZXh0dXJlTWFwcGVyRGlyZWN0QmFja2luZ1N0b3JlKToKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAg
ICAgICBBZGQgYSBkcmF3aW5nIGZ1bmN0aW9uIGZvciB0ZXh0dXJlcyBvZiB0eXBlIEdMX1RFWFRV
UkVfUkVDVEFOR0xFX0FSQi4KKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJh
d1RleHR1cmVSZWN0YW5nbGVBUkIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjppbml0aWFsaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29s
aWRDb2xvcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmZyYWdtZW50U2hhZGVyU291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9w
YWNpdHlBbmRNYXNrOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OmZyYWdt
ZW50U2hhZGVyU291cmNlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oOgorICAgICAgICBBZGQgbmV3IHNoYWRlciBwcm9n
cmFtcyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCIHRleHR1
cmVzLgorICAgICAgICBUaGlzIGlzIG1haW5seSBuZWNlc3NhcnksIGJlY2F1c2UgdGhpcyB0eXBl
IG9mIHRleHR1cmUgdXNlcyBub24tbm9ybWFsaXplZCBjb29yZGluYXRlcy4KKyAgICAgICAgRnVy
dGhlciBtb3ZlIHRoZSBjYWxscyB0byBpbml0aWFsaXplUHJvZ3JhbSgpIGZyb20gdGhlIGNvbnN0
cnVjdG9yIGludG8gYSBzZXBhcmF0ZQorICAgICAgICBpbml0aWFsaXplKCkgZnVuY3Rpb24sIGFz
IGluaXRpYWxpemVQcm9ncmFtKCkgY2FsbHMgdmVydGV4U2hhZGVyU291cmNlKCkgKGFuZCBmcmll
bmRzKQorICAgICAgICBhbmQgd2Ugc2hvdWxkIG5vdCBjYWxsIHZpcnR1YWwgZnVuY3Rpb25zIGlu
IHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjppbml0aWFsaXplKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
U2ltcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSk6CisgICAgICAgIChUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RTaW1wbGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5
QW5kTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9w
YWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKToK
KyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlB
bmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayk6Cisg
ICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IpOgorCisyMDEyLTA1LTI5ICBaZW5vIEFsYmlzc2Vy
ICA8emVub0B3ZWJraXQub3JnPgorCiAgICAgICAgIEdyYXBoaWNzU3VyZmFjZTogYWxsb3cgaW1w
b3J0aW5nIGFuZCBleHBvcnRpbmcgb2YgdGV4dHVyZXMgZGlyZWN0bHkgb24gR1BVIHNpZGUuCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzcyNQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAKaW5kZXggODg3N2JmZS4uMTI3
NGM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcApAQCAtMjEs
MTEgKzIxLDQ5IEBACiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgogCiAj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5oIgog
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKK3ZvaWQgVGV4dHVyZU1hcHBlckRpcmVjdEJhY2tpbmdTdG9y
ZTo6c2V0R3JhcGhpY3NTdXJmYWNlKHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuLCBjb25z
dCBJbnRTaXplJiBzdXJmYWNlU2l6ZSkKK3sKKyAgICBpZiAoZ3JhcGhpY3NTdXJmYWNlVG9rZW4g
PT0gbV9ncmFwaGljc1N1cmZhY2VUb2tlbikKKyAgICAgICAgcmV0dXJuOworICAgIG1fZ3JhcGhp
Y3NTdXJmYWNlVG9rZW4gPSBncmFwaGljc1N1cmZhY2VUb2tlbjsKKyAgICBHcmFwaGljc1N1cmZh
Y2U6OkZsYWdzIHN1cmZhY2VGbGFncyA9IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNDb3B5RnJv
bVRleHR1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBH
cmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKKworICAgIG1fZ3JhcGhpY3NTdXJmYWNl
ID0gR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoc3VyZmFjZVNpemUsIHN1cmZhY2VGbGFncywgZ3Jh
cGhpY3NTdXJmYWNlVG9rZW4pOworICAgIG1fZ3JhcGhpY3NTdXJmYWNlU2l6ZSA9IHN1cmZhY2VT
aXplOworICAgIG1fdGV4dHVyZUlkID0gbV9ncmFwaGljc1N1cmZhY2UtPmdldFRleHR1cmVJRCgp
OworfQorCitQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJEaXJlY3RCYWNr
aW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIGp1
c3QgcmV0dXJuaW5nIGFuIGVtcHR5IHRleHR1cmUsIHdlIHNob3VsZCB3cmFwIHRoZSB0ZXh0dXJl
IGNvbnRlbnRzIGludG8gYSBCaXRtYXBUZXh0dXJlLgorICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJl
PiBlbXB0eVRleHR1cmU7CisgICAgcmV0dXJuIGVtcHR5VGV4dHVyZTsKK30KKwordm9pZCBUZXh0
dXJlTWFwcGVyRGlyZWN0QmFja2luZ1N0b3JlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJl
TWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRl
eHR1cmUqIG1hc2spCit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYWRqdXN0ZWRUcmFuc2Zv
cm0gPSB0cmFuc2Zvcm07CisgICAgYWRqdXN0ZWRUcmFuc2Zvcm0ubXVsdGlwbHkoVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbV9n
cmFwaGljc1N1cmZhY2VTaXplKSwgdGFyZ2V0UmVjdCkpOworI2lmIE9TKERBUldJTikKKyAgICAv
LyBUaGlzIGlzIHNwZWNpZmljIHRvIHRoZSBNYWMgaW1wbGVtZW50YXRpb24gb2YgR3JhcGhpY3NT
dXJmYWNlLiBJT1N1cmZhY2UgcmVxdWlyZXMgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCIHRvIGJl
IHVzZWQuCisgICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMKj4odGV4dHVyZU1hcHBlcikt
PmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKG1fdGV4dHVyZUlkLCAwLCBtX2dyYXBoaWNzU3VyZmFj
ZVNpemUsIHRhcmdldFJlY3QsIGFkanVzdGVkVHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHRleHR1cmVNYXBwZXIpOworICAgIFVOVVNFRF9QQVJBTShv
cGFjaXR5KTsKKyAgICBVTlVTRURfUEFSQU0obWFzayk7CisjZW5kaWYKK30KKyNlbmRpZgorCiB2
b2lkIFRleHR1cmVNYXBwZXJUaWxlOjp1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0
dXJlTWFwcGVyLCBJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKICAg
ICBJbnRSZWN0IHRhcmdldFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fcmVjdCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaAppbmRleCAzN2EzNjUwLi5hYjFhYzIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNk
ZWZpbmUgVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZV9oCiAKICNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2UuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllci5oIgpAQCAtMzgsNiArMzksMjggQEAgcHVibGljOgogICAgIHZpcnR1YWwgflRleHR1cmVN
YXBwZXJCYWNraW5nU3RvcmUoKSB7IH0KIH07CiAKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkK
K2NsYXNzIFRleHR1cmVNYXBwZXJEaXJlY3RCYWNraW5nU3RvcmUgOiBwdWJsaWMgVGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVy
ZU1hcHBlckRpcmVjdEJhY2tpbmdTdG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IFRleHR1cmVNYXBwZXJEaXJlY3RCYWNraW5nU3RvcmUpOyB9CisgICAgdm9pZCBzZXRHcmFwaGlj
c1N1cmZhY2UodWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4sIGNvbnN0IEludFNpemUmIHN1
cmZhY2VTaXplKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVy
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJl
TWFwcGVyKiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBm
bG9hdCwgQml0bWFwVGV4dHVyZSopOworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJEaXJlY3RC
YWNraW5nU3RvcmUoKSB7IH0KK3ByaXZhdGU6CisgICAgVGV4dHVyZU1hcHBlckRpcmVjdEJhY2tp
bmdTdG9yZSgpCisgICAgICAgIDogbV90ZXh0dXJlSWQoMCkKKyAgICAgICAgLCBtX2dyYXBoaWNz
U3VyZmFjZVRva2VuKDApCisgICAgeyB9CisKKyAgICB1aW50MzJfdCBtX3RleHR1cmVJZDsKKyAg
ICBJbnRTaXplIG1fZ3JhcGhpY3NTdXJmYWNlU2l6ZTsKKyAgICB1aW50MzJfdCBtX2dyYXBoaWNz
U3VyZmFjZVRva2VuOworICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U+IG1fZ3Jh
cGhpY3NTdXJmYWNlOworCit9OworI2VuZGlmCisKIGNsYXNzIFRleHR1cmVNYXBwZXJUaWxlIHsK
IHB1YmxpYzoKICAgICBpbmxpbmUgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0dXJlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDBm
NzY1MmMuLjNlMzFhYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0yMSw2ICsyMSw3IEBA
CiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2UuaCIKICNpbmNsdWRlICJJbWFnZS5oIgog
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVGltZXIu
aCIKQEAgLTM2Niw2ICszNjcsMzQgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJl
KGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYKICAgICBkcmF3
VGV4dHVyZSh0ZXh0dXJlR0wuaWQoKSwgdGV4dHVyZUdMLmlzT3BhcXVlKCkgPyAwIDogU3VwcG9y
dHNCbGVuZGluZywgdGV4dHVyZUdMLnNpemUoKSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5
LCBtYXNrKTsKIH0KIAordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xl
QVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJl
KiBtYXNrVGV4dHVyZSkKK3sKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+
IHNoYWRlckluZm87CisgICAgaWYgKG1hc2tUZXh0dXJlKQorICAgICAgICBzaGFkZXJJbmZvID0g
ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRl
clByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RPcGFjaXR5QW5kTWFzayk7
CisgICAgZWxzZQorICAgICAgICBzaGFkZXJJbmZvID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlJlY3RTaW1wbGUpOworICAgIEdMX0NNRChnbFVzZVByb2dyYW0oc2hhZGVy
SW5mby0+aWQoKSkpOworCisgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hh
ZGVySW5mby0+dmVydGV4QXR0cmliKCkpKTsKKyAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdM
X1RFWFRVUkUwKSk7CisgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5H
TEVfQVJCLCB0ZXh0dXJlKSk7CisgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHNoYWRlckluZm8tPnNv
dXJjZVRleHR1cmVWYXJpYWJsZSgpLCAwKSk7CisKKyAgICBjb25zdCBHTGZsb2F0IG00c3JjW10g
PSB7CisgICAgICAgIHRhcmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKKyAgICAgICAgMCwgKGZs
YWdzICYgU2hvdWxkRmxpcFRleHR1cmUpID8gLXRhcmdldFJlY3QuaGVpZ2h0KCkgOiB0YXJnZXRS
ZWN0LmhlaWdodCgpLCAwLCAwLAorICAgICAgICAwLCAwLCAxLCAwLAorICAgICAgICAwLCAoZmxh
Z3MgJiBTaG91bGRGbGlwVGV4dHVyZSkgPyAxIDogMCwgMCwgMX07CisKKyAgICBHTF9DTUQoZ2xV
bmlmb3JtTWF0cml4NGZ2KHNoYWRlckluZm8tPnNvdXJjZU1hdHJpeFZhcmlhYmxlKCksIDEsIEdM
X0ZBTFNFLCBtNHNyYykpOworCisgICAgc2hhZGVySW5mby0+cHJlcGFyZShvcGFjaXR5LCBtYXNr
VGV4dHVyZSk7CisKKyAgICBib29sIG5lZWRzQmxlbmRpbmcgPSAoZmxhZ3MgJiBTdXBwb3J0c0Js
ZW5kaW5nKSB8fCBvcGFjaXR5IDwgMC45OSB8fCBtYXNrVGV4dHVyZTsKKyAgICBkcmF3UmVjdCh0
YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHNoYWRlckluZm8uZ2V0KCksIEdMX1RSSUFOR0xF
X0ZBTiwgbmVlZHNCbGVuZGluZyk7Cit9CisKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4
dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgdGV4dHVy
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVy
ZSogbWFza1RleHR1cmUpCiB7CiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
PiBzaGFkZXJJbmZvOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4IDYyN2VhZTguLjRkM2RkZWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmgKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiwgZmxvYXQgYm9yZGVyV2lkdGgsIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmll
d01hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
dm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBU
ZXh0dXJlKiBtYXNrVGV4dHVyZSkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0
dXJlKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNr
VGV4dHVyZSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQz
Ml90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7
CiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpIE9W
RVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5QYWludGluZyhQYWludEZsYWdzID0gMCkgT1ZFUlJJREU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAppbmRleCA1NmZhNzQyLi5jNzVlZGU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKQEAgLTU1LDYgKzU1LDIwIEBAIHN0
YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrID0KICAg
ICAgICAgfQogICAgICk7CiAKK3N0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJj
ZVJlY3RPcGFjaXR5QW5kTWFzayA9CisgICAgRlJBR01FTlRfU0hBREVSKAorICAgICAgICB1bmlm
b3JtIHNhbXBsZXIyRFJlY3QgU291cmNlVGV4dHVyZSwgTWFza1RleHR1cmU7CisgICAgICAgIHVu
aWZvcm0gbG93cCBmbG9hdCBPcGFjaXR5OworICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0
VGV4Q29vcmRTb3VyY2UsIE91dFRleENvb3JkTWFzazsKKyAgICAgICAgdm9pZCBtYWluKHZvaWQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRFJlY3Qo
U291cmNlVGV4dHVyZSwgT3V0VGV4Q29vcmRTb3VyY2UpOworICAgICAgICAgICAgbG93cCB2ZWM0
IG1hc2tDb2xvciA9IHRleHR1cmUyRFJlY3QoTWFza1RleHR1cmUsIE91dFRleENvb3JkTWFzayk7
CisgICAgICAgICAgICBsb3dwIGZsb2F0IGZyYWdtZW50QWxwaGEgPSBPcGFjaXR5ICogbWFza0Nv
bG9yLmE7CisgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIGZyYWdt
ZW50QWxwaGEsIGNvbG9yLmEgKiBmcmFnbWVudEFscGhhKTsKKyAgICAgICAgfQorICAgICk7CisK
IHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CiAg
ICAgVkVSVEVYX1NIQURFUigKICAgICAgICAgdW5pZm9ybSBtYXQ0IEluTWF0cml4LCBJblNvdXJj
ZU1hdHJpeDsKQEAgLTgwLDYgKzk0LDE4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNo
YWRlclNvdXJjZVNpbXBsZSA9CiAgICAgICAgIH0KICAgICApOwogCitzdGF0aWMgY29uc3QgY2hh
ciogZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0U2ltcGxlID0KKyAgICBGUkFHTUVOVF9TSEFERVIo
CisgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBTb3VyY2VUZXh0dXJlOworICAgICAgICB1
bmlmb3JtIGxvd3AgZmxvYXQgT3BhY2l0eTsKKyAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91
dFRleENvb3JkU291cmNlOworICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEUmVjdChTb3VyY2VUZXh0dXJlLCBP
dXRUZXhDb29yZFNvdXJjZSk7CisgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9y
LnJnYiAqIE9wYWNpdHksIGNvbG9yLmEgKiBPcGFjaXR5KTsKKyAgICAgICAgfQorICAgICk7CisK
IHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUgPQogICAgIFZFUlRF
WF9TSEFERVIoCiAgICAgICAgIHVuaWZvcm0gbWF0NCBJbk1hdHJpeCwgSW5Tb3VyY2VNYXRyaXg7
CkBAIC0xMzEsOSArMTU3LDE1IEBAIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9nCiAgICAgY2FzZSBT
aW1wbGU6CiAgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBs
ZTo6Y3JlYXRlKCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmVjdFNpbXBsZToKKyAgICAg
ICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRl
KCk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgT3BhY2l0eUFuZE1hc2s6CiAgICAgICAgIHBy
b2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUo
KTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZWN0T3BhY2l0eUFuZE1hc2s6CisgICAgICAg
IHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6
Y3JlYXRlKCk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU29saWRDb2xvcjoKICAgICAgICAg
cHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y3JlYXRlKCk7
CiAgICAgICAgIGJyZWFrOwpAQCAtMTg2LDEwICsyMTgsMTIgQEAgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpCiAKIFBhc3NSZWZQdHI8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
U2ltcGxlOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1TaW1wbGUoKSk7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlKCkpOworICAgIHByb2dyYW0tPmluaXRpYWxpemUoKTsgLy8gQXZvaWQgY2Fs
bGluZyB2aXJ0dWFsIGZ1bmN0aW9ucyBpbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gcHJvZ3Jh
bS5yZWxlYXNlKCk7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpCit2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlOjppbml0aWFsaXplKCkKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwog
ICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJjZU1hdHJpeFZhcmlhYmxlLCAiSW5Tb3VyY2VN
YXRyaXgiKTsKQEAgLTIxNSwxMCArMjQ5LDEyIEBAIHZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1TaW1wbGU6OnByZXBhcmUoZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyCiAK
IFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yPiBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoKSk7CisgICAg
UmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gcHJvZ3JhbSA9IGFk
b3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoKSk7CisgICAg
cHJvZ3JhbS0+aW5pdGlhbGl6ZSgpOyAvLyBBdm9pZCBjYWxsaW5nIHZpcnR1YWwgZnVuY3Rpb25z
IGluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiBwcm9ncmFtLnJlbGVhc2UoKTsKIH0KIAotVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVNvbGlkQ29sb3IoKQordm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29s
b3I6OmluaXRpYWxpemUoKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5p
Zm9ybUxvY2F0aW9uKG1fbWF0cml4VmFyaWFibGUsICJJbk1hdHJpeCIpOwpAQCAtMjM1LDEyICsy
NzEsMjYgQEAgY29uc3QgY2hhciogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9y
OjpmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0CiAgICAgcmV0dXJuIGZyYWdtZW50U2hhZGVy
U291cmNlU29saWRDb2xvcjsKIH0KIAorUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVJlY3RTaW1wbGU+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3Jl
YXRlKCkKK3sKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxl
PiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNp
bXBsZSgpKTsKKyAgICBwcm9ncmFtLT5pbml0aWFsaXplKCk7IC8vIEF2b2lkIGNhbGxpbmcgdmly
dHVhbCBmdW5jdGlvbnMgaW4gY29uc3RydWN0b3IuCisgICAgcmV0dXJuIHByb2dyYW0ucmVsZWFz
ZSgpOworfQorCitjb25zdCBjaGFyKiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1w
bGU6OmZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJhZ21lbnRT
aGFkZXJTb3VyY2VSZWN0U2ltcGxlOworfQorCiBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0
eUFuZE1hc2s6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCkpOworICAgIFJlZlB0cjxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKSk7CisgICAgcHJvZ3JhbS0+
aW5pdGlhbGl6ZSgpOyAvLyBBdm9pZCBjYWxsaW5nIHZpcnR1YWwgZnVuY3Rpb25zIGluIGNvbnN0
cnVjdG9yLgorICAgIHJldHVybiBwcm9ncmFtLnJlbGVhc2UoKTsKIH0KIAotVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1P
cGFjaXR5QW5kTWFzaygpCit2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFu
ZE1hc2s6OmluaXRpYWxpemUoKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0
VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4VmFyaWFibGUsICJJbk1hdHJpeCIpOwpAQCAtMjczLDYg
KzMyMywxOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6
OnByZXBhcmUoZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bQogICAgIGdsQWN0aXZlVGV4dHVyZShH
TF9URVhUVVJFMCk7CiB9CiAKK1Bhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0T3BhY2l0eUFuZE1hc2s+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlB
bmRNYXNrOjpjcmVhdGUoKQoreworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RPcGFjaXR5QW5kTWFzaz4gcHJvZ3JhbSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaygpKTsKKyAgICBwcm9ncmFtLT5pbml0aWFs
aXplKCk7IC8vIEF2b2lkIGNhbGxpbmcgdmlydHVhbCBmdW5jdGlvbnMgaW4gY29uc3RydWN0b3Iu
CisgICAgcmV0dXJuIHByb2dyYW0ucmVsZWFzZSgpOworfQorCitjb25zdCBjaGFyKiBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6ZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UoKSBjb25zdAoreworICAgIHJldHVybiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5
QW5kTWFzazsKK30KKwogVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyKCkKIHsKICAgICBBU1NFUlQoaW5pdGlhbGl6ZU9wZW5HTFNoaW1zKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAppbmRleCAxNjIyMWFjLi42ODE4
NTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaApAQCAtNTYsNiAr
NTYsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBnZXRVbmlmb3JtTG9jYXRpb24o
R0xpbnQmIHZhciwgY29uc3QgY2hhciogbmFtZSk7CiAgICAgdm9pZCBpbml0aWFsaXplUHJvZ3Jh
bSgpOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCkgeyB9CiAgICAgdmlydHVhbCBjb25z
dCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBjb25z
dCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0ID0gMDsKIApAQCAtMTAzLDEwICsx
MDQsMjQgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU2ltcGxlPiBjcmVhdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShmbG9h
dCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKik7CiAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogdmVydGV4U2hhZGVyU291cmNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBm
cmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0OwotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU2ltcGxlKCk7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKSB7IH0K
KworICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU7
Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUgOiBwdWJs
aWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZT4gY3JlYXRl
KCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNv
dXJjZSgpIGNvbnN0OworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgp
IHsgfQogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFz
ayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CkBAIC0xMTUsMTIgKzEzMCwy
NiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmUoZmxvYXQgb3BhY2l0eSwgY29u
c3QgQml0bWFwVGV4dHVyZSopOwogICAgIEdMaW50IG1hc2tUZXh0dXJlVmFyaWFibGUoKSBjb25z
dCB7IHJldHVybiBtX21hc2tUZXh0dXJlVmFyaWFibGU7IH0KIAorcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgdm9pZCBpbml0aWFsaXplKCk7CisKIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBtX2Ns
YXNzSUQ7CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3Q7
Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpOworICAgIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKSB7IH0KICAgICBHTGludCBt
X21hc2tUZXh0dXJlVmFyaWFibGU7CisKKyAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s7Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaz4gY3JlYXRlKCk7
CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJj
ZSgpIGNvbnN0OworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRN
YXNrKCkgeyB9CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29s
b3IgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewpAQCAtMTI4LDIxICsxNTcs
MjUgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU29saWRDb2xvcj4gY3JlYXRlKCk7CiAgICAgR0xpbnQgY29sb3JWYXJpYWJsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29sb3JWYXJpYWJsZTsgfQogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCB2b2lkIGluaXRpYWxpemUoKTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHZlcnRleFNoYWRlclNvdXJjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdDsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVNvbGlkQ29sb3IoKTsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3Io
KSB7IH0KICAgICBHTGludCBtX2NvbG9yVmFyaWFibGU7CiB9OwogCi0KIGNsYXNzIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyIHsKIHB1YmxpYzoKICAgICBlbnVtIFNoYWRlclR5cGUgewogICAg
ICAgICBJbnZhbGlkID0gMCwgLy8gSGFzaE1hcHMgZG8gbm90IGxpa2UgMCBhcyBhIGtleS4KICAg
ICAgICAgU2ltcGxlLAorICAgICAgICBSZWN0U2ltcGxlLAogICAgICAgICBPcGFjaXR5QW5kTWFz
aywKLSAgICAgICAgU29saWRDb2xvciwKKyAgICAgICAgUmVjdE9wYWNpdHlBbmRNYXNrLAorICAg
ICAgICBTb2xpZENvbG9yCiAgICAgfTsKIAogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
KCk7Cg==
</data>
<flag name="review"
          id="151846"
          type_id="1"
          status="-"
          setter="zeno"
    />
    <flag name="commit-queue"
          id="152045"
          type_id="3"
          status="-"
          setter="zeno"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145279</attachid>
            <date>2012-06-01 05:47:20 -0700</date>
            <delta_ts>2012-06-01 07:44:15 -0700</delta_ts>
            <desc>patch for review. - adding a second GraphicSurface as a buffer.</desc>
            <filename>87738_20120601-144340.patch</filename>
            <type>text/plain</type>
            <size>21672</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZWMxMjdkLi4yMzg1MDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMg
QEAKKzIwMTItMDUtMjkgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgTWFrZSBUZXh0dXJlTWFwcGVyIHdvcmsgd2l0aCBHcmFwaGljc1N1cmZhY2UuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzczOAorCisgICAgICAg
IEFkZCBUZXh0dXJlTWFwcGVyRGlyZWN0QmFja2luZ1N0b3JlLCBhIG5ldyBiYWNraW5nIHN0b3Jl
CisgICAgICAgIHRoYXQgYWxsb3dzIHRvIGltcG9ydCB0ZXh0dXJlcyBmcm9tIGEgR3JhcGhpY3NT
dXJmYWNlLgorICAgICAgICBPbiBNYWMgdGhlIEdyYXBoaWNzU3VyZmFjZSBpcyBiYWNrZWQgYnkg
YW4gSU9TdXJmYWNlCisgICAgICAgIHdoaWNoIG11c3QgYmUgdXNlZCB3aXRoIGEgR0xfVEVYVFVS
RV9SRUNUQU5HTEVfQVJCIHRleHR1cmUuCisgICAgICAgIFRoZXJlZm9yZSBpdCBpcyBhbHNvIG5l
Y2Vzc2FyeSB0byBhZGQgbmV3IHNoYWRlciBwcm9ncmFtcworICAgICAgICBmb3IgZGlyZWN0bHkg
cGFpbnRpbmcgdGhlc2UgdGV4dHVyZXMgb24gc2NyZWVuLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICBBZGQgYSBuZXcgVGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGNhbiBkaXJlY3RseQorICAgICAg
ICByZXVzZSB0ZXh0dXJlcyBhcyB0aGV5IGFyZSBiZWluZyBwYXNzZWQgZnJvbSB0aGUgR3JhcGhp
Y3NTdXJmYWNlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckRpcmVjdEJhY2tpbmdT
dG9yZTo6c2V0R3JhcGhpY3NTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJEaXJlY3RCYWNraW5nU3RvcmU6OnRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckRpcmVjdEJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmg6
CisgICAgICAgIChUZXh0dXJlTWFwcGVyRGlyZWN0QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJEaXJlY3RCYWNraW5nU3RvcmU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyRGlyZWN0QmFja2luZ1N0b3JlOjp+VGV4dHVyZU1hcHBl
ckRpcmVjdEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyRGly
ZWN0QmFja2luZ1N0b3JlOjpUZXh0dXJlTWFwcGVyRGlyZWN0QmFja2luZ1N0b3JlKToKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAg
ICAgICBBZGQgYSBkcmF3aW5nIGZ1bmN0aW9uIGZvciB0ZXh0dXJlcyBvZiB0eXBlIEdMX1RFWFRV
UkVfUkVDVEFOR0xFX0FSQi4KKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJh
d1RleHR1cmVSZWN0YW5nbGVBUkIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjppbml0aWFsaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29s
aWRDb2xvcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmZyYWdtZW50U2hhZGVyU291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9w
YWNpdHlBbmRNYXNrOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OmZyYWdt
ZW50U2hhZGVyU291cmNlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oOgorICAgICAgICBBZGQgbmV3IHNoYWRlciBwcm9n
cmFtcyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCIHRleHR1
cmVzLgorICAgICAgICBUaGlzIGlzIG1haW5seSBuZWNlc3NhcnksIGJlY2F1c2UgdGhpcyB0eXBl
IG9mIHRleHR1cmUgdXNlcyBub24tbm9ybWFsaXplZCBjb29yZGluYXRlcy4KKyAgICAgICAgRnVy
dGhlciBtb3ZlIHRoZSBjYWxscyB0byBpbml0aWFsaXplUHJvZ3JhbSgpIGZyb20gdGhlIGNvbnN0
cnVjdG9yIGludG8gYSBzZXBhcmF0ZQorICAgICAgICBpbml0aWFsaXplKCkgZnVuY3Rpb24sIGFz
IGluaXRpYWxpemVQcm9ncmFtKCkgY2FsbHMgdmVydGV4U2hhZGVyU291cmNlKCkgKGFuZCBmcmll
bmRzKQorICAgICAgICBhbmQgd2Ugc2hvdWxkIG5vdCBjYWxsIHZpcnR1YWwgZnVuY3Rpb25zIGlu
IHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjppbml0aWFsaXplKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
U2ltcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSk6CisgICAgICAgIChUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RTaW1wbGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5
QW5kTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9w
YWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKToK
KyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlB
bmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayk6Cisg
ICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IpOgorCiAyMDEyLTA1LTMxICBZb3NoaWZ1bWkgSW5v
dWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1BsYXRmb3JtXSBJbnRyb2R1Y2Ug
RGVjaW1hbCBjbGFzcyBmb3IgTnVtYmVyL1JhbmdlIGlucHV0IHR5cGUuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tp
bmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAKaW5kZXggODg3N2JmZS4uZDJkYjhlMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcApAQCAtMjEsMTEgKzIxLDU5IEBA
CiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgogCiAjaW5jbHVkZSAiR3Jh
cGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJHTC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKK3ZvaWQgVGV4dHVyZU1hcHBlckRpcmVjdEJhY2tpbmdTdG9yZTo6c2V0R3JhcGhp
Y3NTdXJmYWNlKHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuLCBjb25zdCBJbnRTaXplJiBz
dXJmYWNlU2l6ZSkKK3sKKyAgICBpZiAoZ3JhcGhpY3NTdXJmYWNlVG9rZW4gIT0gbV9iYWNrYnVm
ZmVyR3JhcGhpY3NTdXJmYWNlVG9rZW4pIHsKKyAgICAgICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFn
cyBzdXJmYWNlRmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzQ29weUZyb21UZXh0dXJl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR3JhcGhpY3NT
dXJmYWNlOjpTdXBwb3J0c1NoYXJpbmc7CisgICAgICAgIG1fYmFja2J1ZmZlckdyYXBoaWNzU3Vy
ZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHN1cmZhY2VTaXplLCBzdXJmYWNlRmxhZ3Ms
IGdyYXBoaWNzU3VyZmFjZVRva2VuKTsKKyAgICAgICAgbV9iYWNrYnVmZmVyR3JhcGhpY3NTdXJm
YWNlVG9rZW4gPSBncmFwaGljc1N1cmZhY2VUb2tlbjsKKyAgICAgICAgbV9ncmFwaGljc1N1cmZh
Y2VTaXplID0gc3VyZmFjZVNpemU7CisgICAgICAgIG1fYmFja2J1ZmZlclRleHR1cmVJZCA9IG1f
YmFja2J1ZmZlckdyYXBoaWNzU3VyZmFjZS0+Z2V0VGV4dHVyZUlEKCk7CisgICAgfQorCisgICAg
Ly8gU3dhcCBmcm9udCBhbmQgYmFja2J1ZmZlciBHcmFwaGljc1N1cmZhY2UuCisgICAgUmVmUHRy
PEdyYXBoaWNzU3VyZmFjZT4gdGVtcCA9ICBtX2N1cnJlbnRHcmFwaGljc1N1cmZhY2U7CisgICAg
bV9jdXJyZW50R3JhcGhpY3NTdXJmYWNlID0gbV9iYWNrYnVmZmVyR3JhcGhpY3NTdXJmYWNlOwor
ICAgIG1fYmFja2J1ZmZlckdyYXBoaWNzU3VyZmFjZSA9IHRlbXA7CisgICAgdWludDMyX3QgdGVt
cFRva2VuID0gbV9jdXJyZW50R3JhcGhpY3NTdXJmYWNlVG9rZW47CisgICAgbV9jdXJyZW50R3Jh
cGhpY3NTdXJmYWNlVG9rZW4gPSBtX2JhY2tidWZmZXJHcmFwaGljc1N1cmZhY2VUb2tlbjsKKyAg
ICBtX2JhY2tidWZmZXJHcmFwaGljc1N1cmZhY2VUb2tlbiA9IHRlbXBUb2tlbjsKKyAgICB1aW50
MzJfdCB0ZW1wVGV4dHVyZUlkID0gbV9jdXJyZW50VGV4dHVyZUlkOworICAgIG1fY3VycmVudFRl
eHR1cmVJZCA9IG1fYmFja2J1ZmZlclRleHR1cmVJZDsKKyAgICBtX2JhY2tidWZmZXJUZXh0dXJl
SWQgPSB0ZW1wVGV4dHVyZUlkOworfQorCitQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1
cmVNYXBwZXJEaXJlY3RCYWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdAoreworICAgIC8vIEZJ
WE1FOiBJbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIGFuIGVtcHR5IHRleHR1cmUsIHdlIHNob3Vs
ZCB3cmFwIHRoZSB0ZXh0dXJlIGNvbnRlbnRzIGludG8gYSBCaXRtYXBUZXh0dXJlLgorICAgIFJl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBlbXB0eVRleHR1cmU7CisgICAgcmV0dXJuIGVtcHR5VGV4dHVy
ZTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyRGlyZWN0QmFja2luZ1N0b3JlOjpwYWludFRvVGV4
dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0
IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2spCit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggYWRqdXN0ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07CisgICAgYWRqdXN0ZWRUcmFuc2Zvcm0u
bXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KEZsb2F0
UG9pbnQ6Onplcm8oKSwgbV9ncmFwaGljc1N1cmZhY2VTaXplKSwgdGFyZ2V0UmVjdCkpOworI2lm
IE9TKERBUldJTikKKyAgICAvLyBUaGlzIGlzIHNwZWNpZmljIHRvIHRoZSBNYWMgaW1wbGVtZW50
YXRpb24gb2YgR3JhcGhpY3NTdXJmYWNlLiBJT1N1cmZhY2UgcmVxdWlyZXMgR0xfVEVYVFVSRV9S
RUNUQU5HTEVfQVJCIHRvIGJlIHVzZWQuCisgICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdM
Kj4odGV4dHVyZU1hcHBlciktPmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKG1fY3VycmVudFRleHR1
cmVJZCwgMCwgbV9ncmFwaGljc1N1cmZhY2VTaXplLCB0YXJnZXRSZWN0LCBhZGp1c3RlZFRyYW5z
Zm9ybSwgb3BhY2l0eSwgbWFzayk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0ZXh0dXJlTWFw
cGVyKTsKKyAgICBVTlVTRURfUEFSQU0ob3BhY2l0eSk7CisgICAgVU5VU0VEX1BBUkFNKG1hc2sp
OworI2VuZGlmCit9CisjZW5kaWYKKwogdm9pZCBUZXh0dXJlTWFwcGVyVGlsZTo6dXBkYXRlQ29u
dGVudHMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgSW1hZ2UqIGltYWdlLCBjb25zdCBJ
bnRSZWN0JiBkaXJ0eVJlY3QpCiB7CiAgICAgSW50UmVjdCB0YXJnZXRSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdChtX3JlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgKaW5k
ZXggMzdhMzY1MC4uZWFiNzU2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9y
ZS5oCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmVf
aAogCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgi
CiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKQEAgLTM4LDYgKzM5LDMyIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlKCkgeyB9CiB9OwogCisj
aWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCitjbGFzcyBUZXh0dXJlTWFwcGVyRGlyZWN0QmFja2lu
Z1N0b3JlIDogcHVibGljIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJEaXJlY3RCYWNraW5nU3RvcmU+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyRGlyZWN0QmFja2luZ1N0b3Jl
KTsgfQorICAgIHZvaWQgc2V0R3JhcGhpY3NTdXJmYWNlKHVpbnQzMl90IGdyYXBoaWNzU3VyZmFj
ZVRva2VuLCBjb25zdCBJbnRTaXplJiBzdXJmYWNlU2l6ZSk7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIEJpdG1hcFRleHR1cmUqKTsKKyAgICB2aXJ0
dWFsIH5UZXh0dXJlTWFwcGVyRGlyZWN0QmFja2luZ1N0b3JlKCkgeyB9Citwcml2YXRlOgorICAg
IFRleHR1cmVNYXBwZXJEaXJlY3RCYWNraW5nU3RvcmUoKQorICAgICAgICA6IG1fY3VycmVudFRl
eHR1cmVJZCgwKQorICAgICAgICAsIG1fYmFja2J1ZmZlclRleHR1cmVJZCgwKQorICAgICAgICAs
IG1fY3VycmVudEdyYXBoaWNzU3VyZmFjZVRva2VuKDApCisgICAgICAgICwgbV9iYWNrYnVmZmVy
R3JhcGhpY3NTdXJmYWNlVG9rZW4oMCkKKyAgICB7IH0KKworICAgIEludFNpemUgbV9ncmFwaGlj
c1N1cmZhY2VTaXplOworICAgIHVpbnQzMl90IG1fY3VycmVudFRleHR1cmVJZDsKKyAgICB1aW50
MzJfdCBtX2JhY2tidWZmZXJUZXh0dXJlSWQ7CisgICAgdWludDMyX3QgbV9jdXJyZW50R3JhcGhp
Y3NTdXJmYWNlVG9rZW47CisgICAgdWludDMyX3QgbV9iYWNrYnVmZmVyR3JhcGhpY3NTdXJmYWNl
VG9rZW47CisgICAgUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZT4gbV9jdXJyZW50R3Jh
cGhpY3NTdXJmYWNlOworICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U+IG1fYmFj
a2J1ZmZlckdyYXBoaWNzU3VyZmFjZTsKK307CisjZW5kaWYKKwogY2xhc3MgVGV4dHVyZU1hcHBl
clRpbGUgewogcHVibGljOgogICAgIGlubGluZSBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRl
eHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAK
aW5kZXggMGY3NjUyYy4uM2UzMWFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTIxLDYg
KzIxLDcgQEAKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKIAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5oIgogI2luY2x1ZGUgIklt
YWdlLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCIKICNpbmNsdWRl
ICJUaW1lci5oIgpAQCAtMzY2LDYgKzM2NywzNCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJh
d1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0Jgog
ICAgIGRyYXdUZXh0dXJlKHRleHR1cmVHTC5pZCgpLCB0ZXh0dXJlR0wuaXNPcGFxdWUoKSA/IDAg
OiBTdXBwb3J0c0JsZW5kaW5nLCB0ZXh0dXJlR0wuc2l6ZSgpLCB0YXJnZXRSZWN0LCBtYXRyaXgs
IG9wYWNpdHksIG1hc2spOwogfQogCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVS
ZWN0YW5nbGVBUkIodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUm
IHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1h
cFRleHR1cmUqIG1hc2tUZXh0dXJlKQoreworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbT4gc2hhZGVySW5mbzsKKyAgICBpZiAobWFza1RleHR1cmUpCisgICAgICAgIHNoYWRl
ckluZm8gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
Z2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdE9wYWNpdHlB
bmRNYXNrKTsKKyAgICBlbHNlCisgICAgICAgIHNoYWRlckluZm8gPSBkYXRhKCkuc2hhcmVkR0xE
YXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdFNpbXBsZSk7CisgICAgR0xfQ01EKGdsVXNlUHJvZ3Jh
bShzaGFkZXJJbmZvLT5pZCgpKSk7CisKKyAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShzaGFkZXJJbmZvLT52ZXJ0ZXhBdHRyaWIoKSkpOworICAgIEdMX0NNRChnbEFjdGl2ZVRl
eHR1cmUoR0xfVEVYVFVSRTApKTsKKyAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
X1JFQ1RBTkdMRV9BUkIsIHRleHR1cmUpKTsKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWkoc2hhZGVy
SW5mby0+c291cmNlVGV4dHVyZVZhcmlhYmxlKCksIDApKTsKKworICAgIGNvbnN0IEdMZmxvYXQg
bTRzcmNbXSA9IHsKKyAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLAorICAgICAg
ICAwLCAoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkgPyAtdGFyZ2V0UmVjdC5oZWlnaHQoKSA6
IHRhcmdldFJlY3QuaGVpZ2h0KCksIDAsIDAsCisgICAgICAgIDAsIDAsIDEsIDAsCisgICAgICAg
IDAsIChmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSA/IDEgOiAwLCAwLCAxfTsKKworICAgIEdM
X0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVySW5mby0+c291cmNlTWF0cml4VmFyaWFibGUo
KSwgMSwgR0xfRkFMU0UsIG00c3JjKSk7CisKKyAgICBzaGFkZXJJbmZvLT5wcmVwYXJlKG9wYWNp
dHksIG1hc2tUZXh0dXJlKTsKKworICAgIGJvb2wgbmVlZHNCbGVuZGluZyA9IChmbGFncyAmIFN1
cHBvcnRzQmxlbmRpbmcpIHx8IG9wYWNpdHkgPCAwLjk5IHx8IG1hc2tUZXh0dXJlOworICAgIGRy
YXdSZWN0KHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgc2hhZGVySW5mby5nZXQoKSwgR0xf
VFJJQU5HTEVfRkFOLCBuZWVkc0JsZW5kaW5nKTsKK30KKwogdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJbnRTaXpl
JiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRt
YXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKIHsKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0+IHNoYWRlckluZm87CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKaW5kZXggNjI3ZWFlOC4uNGQz
ZGRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaApAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGRyYXdCb3JkZXIoY29uc3QgQ29sb3ImLCBmbG9hdCBib3JkZXJXaWR0aCwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bW9kZWxWaWV3TWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0
IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IEludFNpemUmIHRleHR1
cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1
cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmVSZWN0YW5nbGVB
UkIodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
b2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tU
ZXh0dXJlKTsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3Vy
ZmFjZSkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
dm9pZCBiZWdpblBhaW50aW5nKFBhaW50RmxhZ3MgPSAwKSBPVkVSUklERTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCmluZGV4IDU2ZmE3NDIuLmM3NWVkZTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcApAQCAtNTUsNiArNTUs
MjAgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFuZE1h
c2sgPQogICAgICAgICB9CiAgICAgKTsKIAorc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hh
ZGVyU291cmNlUmVjdE9wYWNpdHlBbmRNYXNrID0KKyAgICBGUkFHTUVOVF9TSEFERVIoCisgICAg
ICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBTb3VyY2VUZXh0dXJlLCBNYXNrVGV4dHVyZTsKKyAg
ICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7CisgICAgICAgIHZhcnlpbmcgaGlnaHAg
dmVjMiBPdXRUZXhDb29yZFNvdXJjZSwgT3V0VGV4Q29vcmRNYXNrOworICAgICAgICB2b2lkIG1h
aW4odm9pZCkKKyAgICAgICAgeworICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVy
ZTJEUmVjdChTb3VyY2VUZXh0dXJlLCBPdXRUZXhDb29yZFNvdXJjZSk7CisgICAgICAgICAgICBs
b3dwIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEUmVjdChNYXNrVGV4dHVyZSwgT3V0VGV4Q29v
cmRNYXNrKTsKKyAgICAgICAgICAgIGxvd3AgZmxvYXQgZnJhZ21lbnRBbHBoYSA9IE9wYWNpdHkg
KiBtYXNrQ29sb3IuYTsKKyAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3Iucmdi
ICogZnJhZ21lbnRBbHBoYSwgY29sb3IuYSAqIGZyYWdtZW50QWxwaGEpOworICAgICAgICB9Cisg
ICAgKTsKKwogc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRN
YXNrID0KICAgICBWRVJURVhfU0hBREVSKAogICAgICAgICB1bmlmb3JtIG1hdDQgSW5NYXRyaXgs
IEluU291cmNlTWF0cml4OwpAQCAtODAsNiArOTQsMTggQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZy
YWdtZW50U2hhZGVyU291cmNlU2ltcGxlID0KICAgICAgICAgfQogICAgICk7CiAKK3N0YXRpYyBj
b25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGUgPQorICAgIEZSQUdNRU5U
X1NIQURFUigKKyAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IFNvdXJjZVRleHR1cmU7Cisg
ICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCBPcGFjaXR5OworICAgICAgICB2YXJ5aW5nIGhpZ2hw
IHZlYzIgT3V0VGV4Q29vcmRTb3VyY2U7CisgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAg
ICB7CisgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkRSZWN0KFNvdXJjZVRl
eHR1cmUsIE91dFRleENvb3JkU291cmNlKTsKKyAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZl
YzQoY29sb3IucmdiICogT3BhY2l0eSwgY29sb3IuYSAqIE9wYWNpdHkpOworICAgICAgICB9Cisg
ICAgKTsKKwogc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSA9CiAg
ICAgVkVSVEVYX1NIQURFUigKICAgICAgICAgdW5pZm9ybSBtYXQ0IEluTWF0cml4LCBJblNvdXJj
ZU1hdHJpeDsKQEAgLTEzMSw5ICsxNTcsMTUgQEAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2cKICAg
ICBjYXNlIFNpbXBsZToKICAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU2ltcGxlOjpjcmVhdGUoKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZWN0U2ltcGxl
OgorICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxl
OjpjcmVhdGUoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPcGFjaXR5QW5kTWFzazoKICAg
ICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6
OmNyZWF0ZSgpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFJlY3RPcGFjaXR5QW5kTWFzazoK
KyAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlB
bmRNYXNrOjpjcmVhdGUoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTb2xpZENvbG9yOgog
ICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpj
cmVhdGUoKTsKICAgICAgICAgYnJlYWs7CkBAIC0xODYsMTAgKzIxOCwxMiBAQCBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCkKIAogUGFzc1Jl
ZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZT4gVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1TaW1wbGU6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1TaW1wbGU+IHByb2dyYW0gPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1TaW1wbGUoKSk7CisgICAgcHJvZ3JhbS0+aW5pdGlhbGl6ZSgpOyAvLyBB
dm9pZCBjYWxsaW5nIHZpcnR1YWwgZnVuY3Rpb25zIGluIGNvbnN0cnVjdG9yLgorICAgIHJldHVy
biBwcm9ncmFtLnJlbGVhc2UoKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1w
bGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkKK3ZvaWQgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1TaW1wbGU6OmluaXRpYWxpemUoKQogewogICAgIGluaXRpYWxpemVQcm9n
cmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlTWF0cml4VmFyaWFibGUsICJJ
blNvdXJjZU1hdHJpeCIpOwpAQCAtMjE1LDEwICsyNDksMTIgQEAgdm9pZCBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNpbXBsZTo6cHJlcGFyZShmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBU
ZXh0dXIKIAogUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y3JlYXRlKCkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcigp
KTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yPiBwcm9n
cmFtID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcigp
KTsKKyAgICBwcm9ncmFtLT5pbml0aWFsaXplKCk7IC8vIEF2b2lkIGNhbGxpbmcgdmlydHVhbCBm
dW5jdGlvbnMgaW4gY29uc3RydWN0b3IuCisgICAgcmV0dXJuIHByb2dyYW0ucmVsZWFzZSgpOwog
fQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU29saWRDb2xvcigpCit2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
U29saWRDb2xvcjo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAg
ICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhWYXJpYWJsZSwgIkluTWF0cml4Iik7CkBAIC0y
MzUsMTIgKzI3MSwyNiBAQCBjb25zdCBjaGFyKiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNv
bGlkQ29sb3I6OmZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3QKICAgICByZXR1cm4gZnJhZ21l
bnRTaGFkZXJTb3VyY2VTb2xpZENvbG9yOwogfQogCitQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdFNpbXBsZT4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2lt
cGxlOjpjcmVhdGUoKQoreworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJl
Y3RTaW1wbGU+IHByb2dyYW0gPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1SZWN0U2ltcGxlKCkpOworICAgIHByb2dyYW0tPmluaXRpYWxpemUoKTsgLy8gQXZvaWQgY2Fs
bGluZyB2aXJ0dWFsIGZ1bmN0aW9ucyBpbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gcHJvZ3Jh
bS5yZWxlYXNlKCk7Cit9CisKK2NvbnN0IGNoYXIqIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
UmVjdFNpbXBsZTo6ZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdAoreworICAgIHJldHVybiBm
cmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGU7Cit9CisKIFBhc3NSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKSk7CisgICAgUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s+IHByb2dyYW0gPSBhZG9wdFJl
ZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpKTsKKyAgICBw
cm9ncmFtLT5pbml0aWFsaXplKCk7IC8vIEF2b2lkIGNhbGxpbmcgdmlydHVhbCBmdW5jdGlvbnMg
aW4gY29uc3RydWN0b3IuCisgICAgcmV0dXJuIHByb2dyYW0ucmVsZWFzZSgpOwogfQogCi1UZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCkKK3ZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1P
cGFjaXR5QW5kTWFzazo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsK
ICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhWYXJpYWJsZSwgIkluTWF0cml4Iik7CkBA
IC0yNzMsNiArMzIzLDE4IEBAIHZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5
QW5kTWFzazo6cHJlcGFyZShmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtCiAgICAgZ2xBY3RpdmVU
ZXh0dXJlKEdMX1RFWFRVUkUwKTsKIH0KIAorUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaz4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSgpCit7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKCkpOworICAgIHByb2dyYW0t
PmluaXRpYWxpemUoKTsgLy8gQXZvaWQgY2FsbGluZyB2aXJ0dWFsIGZ1bmN0aW9ucyBpbiBjb25z
dHJ1Y3Rvci4KKyAgICByZXR1cm4gcHJvZ3JhbS5yZWxlYXNlKCk7Cit9CisKK2NvbnN0IGNoYXIq
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpmcmFnbWVudFNo
YWRlclNvdXJjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyYWdtZW50U2hhZGVyU291cmNlUmVj
dE9wYWNpdHlBbmRNYXNrOworfQorCiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIoKQogewogICAgIEFTU0VSVChpbml0aWFsaXplT3BlbkdMU2hp
bXMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCmluZGV4IDE2MjIx
YWMuLjY4MTg1NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCkBA
IC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2b2lkIGdldFVuaWZvcm1M
b2NhdGlvbihHTGludCYgdmFyLCBjb25zdCBjaGFyKiBuYW1lKTsKICAgICB2b2lkIGluaXRpYWxp
emVQcm9ncmFtKCk7CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKSB7IH0KICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3QgPSAwOwogCkBAIC0x
MDMsMTAgKzEwNCwyNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1TaW1wbGU+IGNyZWF0ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBwcmVw
YXJlKGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqKTsKIAorcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCk7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBj
b25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3Q7Ci0gICAgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1TaW1wbGUoKTsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBs
ZSgpIHsgfQorCisgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVj
dFNpbXBsZTsKK307CisKK2NsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBs
ZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxl
PiBjcmVhdGUoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlKCkgY29uc3Q7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
U2ltcGxlKCkgeyB9CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNp
dHlBbmRNYXNrIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKQEAgLTExNSwx
MiArMTMwLDI2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShmbG9hdCBvcGFj
aXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKik7CiAgICAgR0xpbnQgbWFza1RleHR1cmVWYXJpYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1RleHR1cmVWYXJpYWJsZTsgfQogCitwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKTsKKwogcHJpdmF0ZToKICAgICBzdGF0aWMg
aW50IG1fY2xhc3NJRDsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJj
ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2Uo
KSBjb25zdDsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCk7
CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpIHsgfQogICAg
IEdMaW50IG1fbWFza1RleHR1cmVWYXJpYWJsZTsKKworICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazsKK307CisKK2NsYXNzIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrIDogcHVibGljIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrPiBj
cmVhdGUoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hh
ZGVyU291cmNlKCkgY29uc3Q7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3Bh
Y2l0eUFuZE1hc2soKSB7IH0KIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
U29saWRDb2xvciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CkBAIC0xMjgs
MjEgKzE1NywyNSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1Tb2xpZENvbG9yPiBjcmVhdGUoKTsKICAgICBHTGludCBjb2xvclZhcmlh
YmxlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclZhcmlhYmxlOyB9CiAKK3Byb3RlY3RlZDoKKyAg
ICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgY29u
c3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBj
aGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0OwotICAgIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU29saWRDb2xvcigpOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29s
aWRDb2xvcigpIHsgfQogICAgIEdMaW50IG1fY29sb3JWYXJpYWJsZTsKIH07CiAKLQogY2xhc3Mg
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgewogcHVibGljOgogICAgIGVudW0gU2hhZGVyVHlw
ZSB7CiAgICAgICAgIEludmFsaWQgPSAwLCAvLyBIYXNoTWFwcyBkbyBub3QgbGlrZSAwIGFzIGEg
a2V5LgogICAgICAgICBTaW1wbGUsCisgICAgICAgIFJlY3RTaW1wbGUsCiAgICAgICAgIE9wYWNp
dHlBbmRNYXNrLAotICAgICAgICBTb2xpZENvbG9yLAorICAgICAgICBSZWN0T3BhY2l0eUFuZE1h
c2ssCisgICAgICAgIFNvbGlkQ29sb3IKICAgICB9OwogCiAgICAgVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIoKTsK
</data>
<flag name="review"
          id="152357"
          type_id="1"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145306</attachid>
            <date>2012-06-01 07:44:15 -0700</date>
            <delta_ts>2012-06-01 09:04:32 -0700</delta_ts>
            <desc>patch for review. - fixed issues as commented before.</desc>
            <filename>87738_20120601-163925.patch</filename>
            <type>text/plain</type>
            <size>21437</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZWMxMjdkLi5lMDA5NTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYg
QEAKKzIwMTItMDYtMDEgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgTWFrZSBUZXh0dXJlTWFwcGVyIHdvcmsgd2l0aCBHcmFwaGljc1N1cmZhY2UuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzczOAorCisgICAgICAg
IEFkZCBUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZSwgYSBuZXcgYmFja2luZyBzdG9y
ZQorICAgICAgICB0aGF0IGFsbG93cyB0byBpbXBvcnQgdGV4dHVyZXMgZnJvbSBhIEdyYXBoaWNz
U3VyZmFjZS4KKyAgICAgICAgT24gTWFjIHRoZSBHcmFwaGljc1N1cmZhY2UgaXMgYmFja2VkIGJ5
IGFuIElPU3VyZmFjZQorICAgICAgICB3aGljaCBtdXN0IGJlIHVzZWQgd2l0aCBhIEdMX1RFWFRV
UkVfUkVDVEFOR0xFX0FSQiB0ZXh0dXJlLgorICAgICAgICBUaGVyZWZvcmUgaXQgaXMgYWxzbyBu
ZWNlc3NhcnkgdG8gYWRkIG5ldyBzaGFkZXIgcHJvZ3JhbXMKKyAgICAgICAgZm9yIGRpcmVjdGx5
IHBhaW50aW5nIHRoZXNlIHRleHR1cmVzIG9uIHNjcmVlbi4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgQWRkIGEgbmV3IFRleHR1cmVN
YXBwZXJCYWNraW5nU3RvcmUgaW1wbGVtZW50YXRpb24gdGhhdCBjYW4gZGlyZWN0bHkKKyAgICAg
ICAgcmV1c2UgdGV4dHVyZXMgYXMgdGhleSBhcmUgYmVpbmcgcGFzc2VkIGZyb20gdGhlIEdyYXBo
aWNzU3VyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2lu
Z1N0b3JlOjpzZXRHcmFwaGljc1N1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OnRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9y
ZS5oOgorICAgICAgICAoR3JhcGhpY3NTdXJmYWNlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc1N1cmZhY2VEYXRhOjpzZXRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzU3VyZmFjZURhdGE6OkdyYXBoaWNzU3VyZmFjZURhdGEpOgorICAgICAgICAoVGV4dHVyZU1h
cHBlclN1cmZhY2VCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
clN1cmZhY2VCYWNraW5nU3RvcmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6flRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3Jl
OjpUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZSk6CisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgQWRkIGEgZHJh
d2luZyBmdW5jdGlvbiBmb3IgdGV4dHVyZXMgb2YgdHlwZSBHTF9URVhUVVJFX1JFQ1RBTkdMRV9B
UkIuCisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFu
Z2xlQVJCKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OmdldFNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OmluaXRp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
U2ltcGxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1SZWN0U2ltcGxlOjpmcmFnbWVudFNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RPcGFjaXR5QW5kTWFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpmcmFnbWVudFNoYWRlclNvdXJj
ZSk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIuaDoKKyAgICAgICAgQWRkIG5ldyBzaGFkZXIgcHJvZ3JhbXMgdGhhdCBjYW4g
YmUgdXNlZCB3aXRoIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiB0ZXh0dXJlcy4KKyAgICAgICAg
VGhpcyBpcyBtYWlubHkgbmVjZXNzYXJ5LCBiZWNhdXNlIHRoaXMgdHlwZSBvZiB0ZXh0dXJlIHVz
ZXMgbm9uLW5vcm1hbGl6ZWQgY29vcmRpbmF0ZXMuCisgICAgICAgIEZ1cnRoZXIgbW92ZSB0aGUg
Y2FsbHMgdG8gaW5pdGlhbGl6ZVByb2dyYW0oKSBmcm9tIHRoZSBjb25zdHJ1Y3RvciBpbnRvIGEg
c2VwYXJhdGUKKyAgICAgICAgaW5pdGlhbGl6ZSgpIGZ1bmN0aW9uLCBhcyBpbml0aWFsaXplUHJv
Z3JhbSgpIGNhbGxzIHZlcnRleFNoYWRlclNvdXJjZSgpIChhbmQgZnJpZW5kcykKKyAgICAgICAg
YW5kIHdlIHNob3VsZCBub3QgY2FsbCB2aXJ0dWFsIGZ1bmN0aW9ucyBpbiB0aGUgY29uc3RydWN0
b3IuCisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aW5pdGlh
bGl6ZSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1TaW1wbGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1SZWN0U2ltcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKToK
KyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayk6CisgICAgICAgIChUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2spOgorICAgICAgICAoVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1Tb2xpZENvbG9yKToKKwogMjAxMi0wNS0zMSAgWW9zaGlmdW1pIElub3VlICA8eW9zaW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtQbGF0Zm9ybV0gSW50cm9kdWNlIERlY2ltYWwgY2xhc3Mg
Zm9yIE51bWJlci9SYW5nZSBpbnB1dCB0eXBlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmUuY3BwCmluZGV4IDg4NzdiZmUuLmEzOTdjNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAKQEAgLTIxLDExICsyMSw0OCBAQAogI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2UuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgog
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCit2b2lk
IFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlOjpzZXRHcmFwaGljc1N1cmZhY2UodWlu
dDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4sIGNvbnN0IEludFNpemUmIHN1cmZhY2VTaXplKQor
eworICAgIGlmIChncmFwaGljc1N1cmZhY2VUb2tlbiAhPSBtX2JhY2tCdWZmZXJHcmFwaGljc1N1
cmZhY2VEYXRhLm1fZ3JhcGhpY3NTdXJmYWNlVG9rZW4pIHsKKyAgICAgICAgR3JhcGhpY3NTdXJm
YWNlOjpGbGFncyBzdXJmYWNlRmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVy
ZVRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdy
YXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOworICAgICAgICBtX2JhY2tCdWZmZXJHcmFw
aGljc1N1cmZhY2VEYXRhLnNldFN1cmZhY2UoR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoc3VyZmFj
ZVNpemUsIHN1cmZhY2VGbGFncywgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pKTsKKyAgICAgICAgbV9n
cmFwaGljc1N1cmZhY2VTaXplID0gc3VyZmFjZVNpemU7CisgICAgfQorCisgICAgc3RkOjpzd2Fw
KG1fYmFja0J1ZmZlckdyYXBoaWNzU3VyZmFjZURhdGEsIG1fY3VycmVudEJ1ZmZlckdyYXBoaWNz
U3VyZmFjZURhdGEpOworfQorCitQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBw
ZXJTdXJmYWNlQmFja2luZ1N0b3JlOjp0ZXh0dXJlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTog
SW5zdGVhZCBvZiBqdXN0IHJldHVybmluZyBhbiBlbXB0eSB0ZXh0dXJlLCB3ZSBzaG91bGQgd3Jh
cCB0aGUgdGV4dHVyZSBjb250ZW50cyBpbnRvIGEgQml0bWFwVGV4dHVyZS4KKyAgICBSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gZW1wdHlUZXh0dXJlOworICAgIHJldHVybiBlbXB0eVRleHR1cmU7Cit9
CisKK3ZvaWQgVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJl
TWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3Bh
Y2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBh
ZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKKyAgICBhZGp1c3RlZFRyYW5zZm9ybS5tdWx0
aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChGbG9hdFJlY3QoRmxvYXRQb2lu
dDo6emVybygpLCBtX2dyYXBoaWNzU3VyZmFjZVNpemUpLCB0YXJnZXRSZWN0KSk7CisjaWYgT1Mo
REFSV0lOKQorICAgIC8vIFRoaXMgaXMgc3BlY2lmaWMgdG8gdGhlIE1hYyBpbXBsZW1lbnRhdGlv
biBvZiBHcmFwaGljc1N1cmZhY2UuIElPU3VyZmFjZSByZXF1aXJlcyBHTF9URVhUVVJFX1JFQ1RB
TkdMRV9BUkIgdG8gYmUgdXNlZC4KKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0
ZXh0dXJlTWFwcGVyKS0+ZHJhd1RleHR1cmVSZWN0YW5nbGVBUkIobV9jdXJyZW50QnVmZmVyR3Jh
cGhpY3NTdXJmYWNlRGF0YS5tX3RleHR1cmVJZCwgMCwgbV9ncmFwaGljc1N1cmZhY2VTaXplLCB0
YXJnZXRSZWN0LCBhZGp1c3RlZFRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzayk7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTSh0ZXh0dXJlTWFwcGVyKTsKKyAgICBVTlVTRURfUEFSQU0ob3BhY2l0eSk7
CisgICAgVU5VU0VEX1BBUkFNKG1hc2spOworI2VuZGlmCit9CisjZW5kaWYKKwogdm9pZCBUZXh0
dXJlTWFwcGVyVGlsZTo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBl
ciwgSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7CiAgICAgSW50UmVj
dCB0YXJnZXRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX3JlY3QpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5n
U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyQmFja2luZ1N0b3JlLmgKaW5kZXggMzdhMzY1MC4uYjZlNjYwNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIFRl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmVfaAogCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIK
QEAgLTM4LDYgKzM5LDM5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyQmFj
a2luZ1N0b3JlKCkgeyB9CiB9OwogCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCitzdHJ1Y3Qg
R3JhcGhpY3NTdXJmYWNlRGF0YSB7CisgICAgdm9pZCBzZXRTdXJmYWNlKFBhc3NSZWZQdHI8R3Jh
cGhpY3NTdXJmYWNlPiBzdXJmYWNlKQorICAgIHsKKyAgICAgICAgbV9ncmFwaGljc1N1cmZhY2Ug
PSBzdXJmYWNlOworICAgICAgICBtX2dyYXBoaWNzU3VyZmFjZVRva2VuID0gbV9ncmFwaGljc1N1
cmZhY2UtPmV4cG9ydFRva2VuKCk7CisgICAgICAgIG1fdGV4dHVyZUlkID0gbV9ncmFwaGljc1N1
cmZhY2UtPmdldFRleHR1cmVJRCgpOworICAgIH0KKworICAgIEdyYXBoaWNzU3VyZmFjZURhdGEo
KQorICAgICAgICA6IG1fdGV4dHVyZUlkKDApCisgICAgICAgICwgbV9ncmFwaGljc1N1cmZhY2VU
b2tlbigwKQorICAgIHsgfQorCisgICAgdWludDMyX3QgbV90ZXh0dXJlSWQ7CisgICAgdWludDMy
X3QgbV9ncmFwaGljc1N1cmZhY2VUb2tlbjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NT
dXJmYWNlPiBtX2dyYXBoaWNzU3VyZmFjZTsKK307CisKK2NsYXNzIFRleHR1cmVNYXBwZXJTdXJm
YWNlQmFja2luZ1N0b3JlIDogcHVibGljIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0
b3JlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclN1cmZhY2VC
YWNraW5nU3RvcmUpOyB9CisgICAgdm9pZCBzZXRHcmFwaGljc1N1cmZhY2UodWludDMyX3QgZ3Jh
cGhpY3NTdXJmYWNlVG9rZW4sIGNvbnN0IEludFNpemUmIHN1cmZhY2VTaXplKTsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgQml0bWFwVGV4dHVyZSop
OworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlKCkgeyB9Citw
cml2YXRlOgorICAgIEludFNpemUgbV9ncmFwaGljc1N1cmZhY2VTaXplOworICAgIEdyYXBoaWNz
U3VyZmFjZURhdGEgbV9jdXJyZW50QnVmZmVyR3JhcGhpY3NTdXJmYWNlRGF0YTsKKyAgICBHcmFw
aGljc1N1cmZhY2VEYXRhIG1fYmFja0J1ZmZlckdyYXBoaWNzU3VyZmFjZURhdGE7Cit9OworI2Vu
ZGlmCisKIGNsYXNzIFRleHR1cmVNYXBwZXJUaWxlIHsKIHB1YmxpYzoKICAgICBpbmxpbmUgUGFz
c1JlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJl
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDBmNzY1MmMuLjNlMzFhYzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ckdMLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1N1cmZhY2UuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTM2Niw2ICszNjcsMzQgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRl
eHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYKICAgICBkcmF3VGV4dHVyZSh0ZXh0dXJlR0wuaWQoKSwg
dGV4dHVyZUdMLmlzT3BhcXVlKCkgPyAwIDogU3VwcG9ydHNCbGVuZGluZywgdGV4dHVyZUdMLnNp
emUoKSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5LCBtYXNrKTsKIH0KIAordm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZs
YWdzIGZsYWdzLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBm
bG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKK3sKKyAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHNoYWRlckluZm87CisgICAgaWYgKG1h
c2tUZXh0dXJlKQorICAgICAgICBzaGFkZXJJbmZvID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlJlY3RPcGFjaXR5QW5kTWFzayk7CisgICAgZWxzZQorICAgICAgICBzaGFk
ZXJJbmZvID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
LmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RTaW1wbGUp
OworICAgIEdMX0NNRChnbFVzZVByb2dyYW0oc2hhZGVySW5mby0+aWQoKSkpOworCisgICAgR0xf
Q01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVySW5mby0+dmVydGV4QXR0cmliKCkp
KTsKKyAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSk7CisgICAgR0xfQ01E
KGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCB0ZXh0dXJlKSk7CisgICAg
R0xfQ01EKGdsVW5pZm9ybTFpKHNoYWRlckluZm8tPnNvdXJjZVRleHR1cmVWYXJpYWJsZSgpLCAw
KSk7CisKKyAgICBjb25zdCBHTGZsb2F0IG00c3JjW10gPSB7CisgICAgICAgIHRhcmdldFJlY3Qu
d2lkdGgoKSwgMCwgMCwgMCwKKyAgICAgICAgMCwgKGZsYWdzICYgU2hvdWxkRmxpcFRleHR1cmUp
ID8gLXRhcmdldFJlY3QuaGVpZ2h0KCkgOiB0YXJnZXRSZWN0LmhlaWdodCgpLCAwLCAwLAorICAg
ICAgICAwLCAwLCAxLCAwLAorICAgICAgICAwLCAoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkg
PyAxIDogMCwgMCwgMX07CisKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlcklu
Zm8tPnNvdXJjZU1hdHJpeFZhcmlhYmxlKCksIDEsIEdMX0ZBTFNFLCBtNHNyYykpOworCisgICAg
c2hhZGVySW5mby0+cHJlcGFyZShvcGFjaXR5LCBtYXNrVGV4dHVyZSk7CisKKyAgICBib29sIG5l
ZWRzQmxlbmRpbmcgPSAoZmxhZ3MgJiBTdXBwb3J0c0JsZW5kaW5nKSB8fCBvcGFjaXR5IDwgMC45
OSB8fCBtYXNrVGV4dHVyZTsKKyAgICBkcmF3UmVjdCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRy
aXgsIHNoYWRlckluZm8uZ2V0KCksIEdMX1RSSUFOR0xFX0ZBTiwgbmVlZHNCbGVuZGluZyk7Cit9
CisKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBG
bGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwg
ZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCiB7CiAgICAg
UmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBzaGFkZXJJbmZvOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHTC5oCmluZGV4IDYyN2VhZTguLjRkM2RkZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKQEAgLTUy
LDYgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3Qm9yZGVyKGNvbnN0IENv
bG9yJiwgZmxvYXQgYm9yZGVyV2lkdGgsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCA9IFRyYW5zZm9ybWF0aW9u
TWF0cml4KCkpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBC
aXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIEZs
YWdzLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBv
cGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CisgICAgdmlydHVhbCB2
b2lkIGRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25z
dCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBj
b25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRT
dXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9p
ZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3Qm
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5QYWludGluZyhQYWludEZsYWdzID0g
MCkgT1ZFUlJJREU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcApp
bmRleCA1NmZhNzQyLi5lOGJmYmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5jcHAKQEAgLTU1LDYgKzU1LDIwIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVu
dFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrID0KICAgICAgICAgfQogICAgICk7CiAKK3N0YXRp
YyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5kTWFzayA9Cisg
ICAgRlJBR01FTlRfU0hBREVSKAorICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRFJlY3QgU291cmNl
VGV4dHVyZSwgTWFza1RleHR1cmU7CisgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCBPcGFjaXR5
OworICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4Q29vcmRTb3VyY2UsIE91dFRleENv
b3JkTWFzazsKKyAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRFJlY3QoU291cmNlVGV4dHVyZSwgT3V0VGV4Q29v
cmRTb3VyY2UpOworICAgICAgICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRFJl
Y3QoTWFza1RleHR1cmUsIE91dFRleENvb3JkTWFzayk7CisgICAgICAgICAgICBsb3dwIGZsb2F0
IGZyYWdtZW50QWxwaGEgPSBPcGFjaXR5ICogbWFza0NvbG9yLmE7CisgICAgICAgICAgICBnbF9G
cmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIGZyYWdtZW50QWxwaGEsIGNvbG9yLmEgKiBmcmFn
bWVudEFscGhhKTsKKyAgICAgICAgfQorICAgICk7CisKIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0
ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CiAgICAgVkVSVEVYX1NIQURFUigKICAgICAg
ICAgdW5pZm9ybSBtYXQ0IEluTWF0cml4LCBJblNvdXJjZU1hdHJpeDsKQEAgLTgwLDYgKzk0LDE4
IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZSA9CiAgICAg
ICAgIH0KICAgICApOwogCitzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VS
ZWN0U2ltcGxlID0KKyAgICBGUkFHTUVOVF9TSEFERVIoCisgICAgICAgIHVuaWZvcm0gc2FtcGxl
cjJEUmVjdCBTb3VyY2VUZXh0dXJlOworICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgT3BhY2l0
eTsKKyAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIE91dFRleENvb3JkU291cmNlOworICAgICAg
ICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgeworICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9y
ID0gdGV4dHVyZTJEUmVjdChTb3VyY2VUZXh0dXJlLCBPdXRUZXhDb29yZFNvdXJjZSk7CisgICAg
ICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIE9wYWNpdHksIGNvbG9yLmEg
KiBPcGFjaXR5KTsKKyAgICAgICAgfQorICAgICk7CisKIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0
ZXhTaGFkZXJTb3VyY2VTaW1wbGUgPQogICAgIFZFUlRFWF9TSEFERVIoCiAgICAgICAgIHVuaWZv
cm0gbWF0NCBJbk1hdHJpeCwgSW5Tb3VyY2VNYXRyaXg7CkBAIC0xMzEsOSArMTU3LDE1IEBAIFBh
c3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpnZXRTaGFkZXJQcm9nCiAgICAgY2FzZSBTaW1wbGU6CiAgICAgICAgIHByb2dyYW0g
PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKCk7CiAgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUmVjdFNpbXBsZToKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRlKCk7CisgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgT3BhY2l0eUFuZE1hc2s6CiAgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUoKTsKICAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBSZWN0T3BhY2l0eUFuZE1hc2s6CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6Y3JlYXRlKCk7CisgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgU29saWRDb2xvcjoKICAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y3JlYXRlKCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTg2
LDEwICsyMTgsMTMgQEAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSgpCiAKIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1T
aW1wbGU+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpjcmVhdGUoKQogewotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKSk7
CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlPiBwcm9ncmFtID0g
YWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkpOworICAgIC8v
IEF2b2lkIGNhbGxpbmcgdmlydHVhbCBmdW5jdGlvbnMgaW4gY29uc3RydWN0b3IuCisgICAgcHJv
Z3JhbS0+aW5pdGlhbGl6ZSgpOworICAgIHJldHVybiBwcm9ncmFtLnJlbGVhc2UoKTsKIH0KIAot
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU2ltcGxlKCkKK3ZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmluaXRp
YWxpemUoKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0
aW9uKG1fc291cmNlTWF0cml4VmFyaWFibGUsICJJblNvdXJjZU1hdHJpeCIpOwpAQCAtMjE1LDEw
ICsyNTAsMTMgQEAgdm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6cHJlcGFy
ZShmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXIKIAogUGFzc1JlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
U29saWRDb2xvcjo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcigpKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1Tb2xpZENvbG9yPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcigpKTsKKyAgICAvLyBBdm9pZCBjYWxsaW5nIHZp
cnR1YWwgZnVuY3Rpb25zIGluIGNvbnN0cnVjdG9yLgorICAgIHByb2dyYW0tPmluaXRpYWxpemUo
KTsKKyAgICByZXR1cm4gcHJvZ3JhbS5yZWxlYXNlKCk7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9y
KCkKK3ZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjppbml0aWFsaXpl
KCkKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVuaWZvcm1Mb2NhdGlvbiht
X21hdHJpeFZhcmlhYmxlLCAiSW5NYXRyaXgiKTsKQEAgLTIzNSwxMiArMjczLDI4IEBAIGNvbnN0
IGNoYXIqIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6ZnJhZ21lbnRTaGFk
ZXJTb3VyY2UoKSBjb25zdAogICAgIHJldHVybiBmcmFnbWVudFNoYWRlclNvdXJjZVNvbGlkQ29s
b3I7CiB9CiAKK1Bhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxl
PiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0ZSgpCit7CisgICAg
UmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZT4gcHJvZ3JhbSA9IGFk
b3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKSk7CisgICAg
Ly8gQXZvaWQgY2FsbGluZyB2aXJ0dWFsIGZ1bmN0aW9ucyBpbiBjb25zdHJ1Y3Rvci4KKyAgICBw
cm9ncmFtLT5pbml0aWFsaXplKCk7CisgICAgcmV0dXJuIHByb2dyYW0ucmVsZWFzZSgpOworfQor
Citjb25zdCBjaGFyKiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmZyYWdt
ZW50U2hhZGVyU291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJhZ21lbnRTaGFkZXJTb3Vy
Y2VSZWN0U2ltcGxlOworfQorCiBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hc2s+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6
OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCkpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbU9wYWNpdHlBbmRNYXNrPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKSk7CisgICAgLy8gQXZvaWQgY2FsbGluZyB2
aXJ0dWFsIGZ1bmN0aW9ucyBpbiBjb25zdHJ1Y3Rvci4KKyAgICBwcm9ncmFtLT5pbml0aWFsaXpl
KCk7CisgICAgcmV0dXJuIHByb2dyYW0ucmVsZWFzZSgpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNp
dHlBbmRNYXNrKCkKK3ZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFz
azo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlm
b3JtTG9jYXRpb24obV9tYXRyaXhWYXJpYWJsZSwgIkluTWF0cml4Iik7CkBAIC0yNzMsNiArMzI3
LDE5IEBAIHZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6cHJl
cGFyZShmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtCiAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RF
WFRVUkUwKTsKIH0KIAorUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RP
cGFjaXR5QW5kTWFzaz4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1h
c2s6OmNyZWF0ZSgpCit7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVj
dE9wYWNpdHlBbmRNYXNrPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKCkpOworICAgIC8vIEF2b2lkIGNhbGxpbmcgdmly
dHVhbCBmdW5jdGlvbnMgaW4gY29uc3RydWN0b3IuCisgICAgcHJvZ3JhbS0+aW5pdGlhbGl6ZSgp
OworICAgIHJldHVybiBwcm9ncmFtLnJlbGVhc2UoKTsKK30KKworY29uc3QgY2hhciogVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OmZyYWdtZW50U2hhZGVyU291
cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0
eUFuZE1hc2s7Cit9CisKIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcigpCiB7CiAgICAgQVNTRVJUKGluaXRpYWxpemVPcGVuR0xTaGltcygpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKaW5kZXggMTYyMjFhYy4uNjgx
ODU1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKQEAgLTU2LDYg
KzU2LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZvaWQgZ2V0VW5pZm9ybUxvY2F0aW9u
KEdMaW50JiB2YXIsIGNvbnN0IGNoYXIqIG5hbWUpOwogICAgIHZvaWQgaW5pdGlhbGl6ZVByb2dy
YW0oKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpIHsgfQogICAgIHZpcnR1YWwgY29u
c3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgY29u
c3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdCA9IDA7CiAKQEAgLTEwMywxMCAr
MTA0LDI0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNpbXBsZT4gY3JlYXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmUoZmxv
YXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSopOwogCitwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCB2b2lkIGluaXRpYWxpemUoKTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHZlcnRleFNoYWRlclNvdXJjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgY2hhciog
ZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdDsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVNpbXBsZSgpOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkgeyB9
CisKKyAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxl
OworfTsKKworY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlIDogcHVi
bGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU+IGNyZWF0
ZSgpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJT
b3VyY2UoKSBjb25zdDsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUo
KSB7IH0KIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1h
c2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewpAQCAtMTE1LDEyICsxMzAs
MjYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGZsb2F0IG9wYWNpdHksIGNv
bnN0IEJpdG1hcFRleHR1cmUqKTsKICAgICBHTGludCBtYXNrVGV4dHVyZVZhcmlhYmxlKCkgY29u
c3QgeyByZXR1cm4gbV9tYXNrVGV4dHVyZVZhcmlhYmxlOyB9CiAKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOworCiBwcml2YXRlOgogICAgIHN0YXRpYyBpbnQgbV9j
bGFzc0lEOwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0
OwotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKTsKKyAgICBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCkgeyB9CiAgICAgR0xpbnQg
bV9tYXNrVGV4dHVyZVZhcmlhYmxlOworCisgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOworfTsKKworY2xhc3MgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s+IGNyZWF0ZSgp
OworCitwcml2YXRlOgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UoKSBjb25zdDsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5k
TWFzaygpIHsgfQogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENv
bG9yIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKQEAgLTEyOCwyMSArMTU3
LDI1IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3I+IGNyZWF0ZSgpOwogICAgIEdMaW50IGNvbG9yVmFyaWFibGUoKSBj
b25zdCB7IHJldHVybiBtX2NvbG9yVmFyaWFibGU7IH0KIAorcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgdm9pZCBpbml0aWFsaXplKCk7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZy
YWdtZW50U2hhZGVyU291cmNlKCkgY29uc3Q7Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1Tb2xpZENvbG9yKCk7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9y
KCkgeyB9CiAgICAgR0xpbnQgbV9jb2xvclZhcmlhYmxlOwogfTsKIAotCiBjbGFzcyBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlciB7CiBwdWJsaWM6CiAgICAgZW51bSBTaGFkZXJUeXBlIHsKICAg
ICAgICAgSW52YWxpZCA9IDAsIC8vIEhhc2hNYXBzIGRvIG5vdCBsaWtlIDAgYXMgYSBrZXkuCiAg
ICAgICAgIFNpbXBsZSwKKyAgICAgICAgUmVjdFNpbXBsZSwKICAgICAgICAgT3BhY2l0eUFuZE1h
c2ssCi0gICAgICAgIFNvbGlkQ29sb3IsCisgICAgICAgIFJlY3RPcGFjaXR5QW5kTWFzaywKKyAg
ICAgICAgU29saWRDb2xvcgogICAgIH07CiAKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cigpOwo=
</data>
<flag name="review"
          id="152395"
          type_id="1"
          status="+"
          setter="noam"
    />
          </attachment>
      

    </bug>

</bugzilla>