<?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>39461</bug_id>
          
          <creation_ts>2010-05-20 17:30:04 -0700</creation_ts>
          <short_desc>Need to implement Tiling for large compositing layers</short_desc>
          <delta_ts>2010-05-21 18:24:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          <cc>adele</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>228652</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-05-20 17:30:04 -0700</bug_when>
    <thetext>If a compositing layer gets too big on Windows, D3D can&apos;t render it. We need to limit layer sizes to 2k x 2k like we do on Mac and do tiling above that.

Test cases will be included in forthcoming patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228660</commentid>
    <comment_count>1</comment_count>
      <attachid>56653</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-05-20 17:45:24 -0700</bug_when>
    <thetext>Created attachment 56653
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228662</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-20 17:46:59 -0700</bug_when>
    <thetext>Attachment 56653 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/platform/graphics/win/WKCACFLayer.h:168:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/win/WKCACFLayer.h:203:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/win/WebTiledLayer.cpp:228:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 3 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228691</commentid>
    <comment_count>3</comment_count>
      <attachid>56653</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-05-20 18:58:51 -0700</bug_when>
    <thetext>Comment on attachment 56653
Patch


&gt; Index: WebCore/WebCore.vcproj/WebCore.vcproj
&gt; ===================================================================
&gt; --- WebCore/WebCore.vcproj/WebCore.vcproj	(revision 59629)
&gt; +++ WebCore/WebCore.vcproj/WebCore.vcproj	(working copy)
&gt; @@ -23867,6 +23867,22 @@
&gt;  						&gt;
&gt;  					&lt;/File&gt;

&gt;  				&lt;/File&gt;
&gt;  				&lt;File
&gt; -					RelativePath=&quot;$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBDatabase.cpp&quot;
&gt; +					RelativePath=&quot;..\bindings\js\JSIDBAnyCustom.cpp&quot;
&gt;  					&gt;

etc. Lots of cruft here that should not be committed.

&gt; Index: WebCore/platform/graphics/win/WKCACFLayer.h
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/win/WKCACFLayer.h	(revision 59629)
&gt; +++ WebCore/platform/graphics/win/WKCACFLayer.h	(working copy)
&gt; @@ -60,12 +60,13 @@
&gt;      virtual ~WKCACFLayer();
&gt;  
&gt;      virtual void setNeedsRender() { }
&gt; -    virtual void drawInContext(PlatformGraphicsContext*) { }
&gt; +    virtual void drawInContext(PlatformGraphicsContext*, bool flipy) { }

flipy is a bad name, and boolean parameters are hard to understand at the call site. Would be better with an enum.

&gt;      virtual void setNeedsDisplay(const CGRect* dirtyRect);
&gt;      void setNeedsDisplay();
&gt;  
&gt;      // Makes this layer the root when the passed context is rendered
&gt;      void becomeRootLayerForContext(CACFContextRef);
&gt; +    void resignRootLayerForContext(CACFContextRef);

I don&apos;t understand the need for this method. Why isn&apos;t the CACFContextSetLayer*( call just in WKCACFLayerRenderer?

&gt; +    // This should be overridden if the subclass needs to manipulate the layer hierarchy, along with the
&gt; +    // protected sublayerAtIndex and indexOfSublayer functions
&gt; +    virtual void insertSublayer(PassRefPtr&lt;WKCACFLayer&gt;, size_t index);
&gt; +
&gt; +    // These function are specified in terms of The above function
&gt;      void addSublayer(PassRefPtr&lt;WKCACFLayer&gt; sublayer);
&gt; -    void insertSublayer(PassRefPtr&lt;WKCACFLayer&gt;, size_t index);
&gt;      void insertSublayerAboveLayer(PassRefPtr&lt;WKCACFLayer&gt;, const WKCACFLayer* reference);
&gt;      void insertSublayerBelowLayer(PassRefPtr&lt;WKCACFLayer&gt;, const WKCACFLayer* reference);
&gt;      void replaceSublayer(WKCACFLayer* reference, PassRefPtr&lt;WKCACFLayer&gt;);
&gt; +
&gt; +    virtual void setSublayersFromLayer(WKCACFLayer* source);

I&apos;d like to see a clear separation between &quot;core&quot; and &quot;wrapper&quot; sublayer-related methods. I think the &quot;core&quot; methods should be private/protected, and only the wrapper methods callable from elsewhere. They should have distinct naming.

&gt; +    virtual size_t numSublayers() const
&gt; +    {
&gt; +        CFArrayRef sublayers = CACFLayerGetSublayers(layer());
&gt; +        return sublayers ? CFArrayGetCount(sublayers) : 0;
&gt; +    }

sublayerCount might be a better name.

&gt; -    void setBounds(const CGRect&amp;);
&gt; +    virtual void setBounds(const CGRect&amp;);
&gt;      CGRect bounds() const { return CACFLayerGetBounds(layer()); }
&gt;  

&gt; -    void setFrame(const CGRect&amp;);
&gt; -    CGRect frame() const { return CACFLayerGetFrame(layer()); }

It looks like you did something with frame/bounds methods, but the changelog doesn&apos;t explain it.

&gt; +    virtual void setPosition(const CGPoint&amp; position) { CACFLayerSetPosition(layer(), position); setNeedsCommit(); }

Shame that the subclass needs to remember to all setNeedsCommit() too in these virtual methods.

&gt; -    const WKCACFLayer* sublayerAtIndex(int) const;
&gt; +    virtual WKCACFLayer* sublayerAtIndex(int) const;

Why is the return value no longer const?

Out of time, will resume later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228900</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-05-21 07:36:58 -0700</bug_when>
    <thetext>rdar://problem/7988188</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228953</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-05-21 09:39:34 -0700</bug_when>
    <thetext>...
&gt; &gt;      virtual void setNeedsDisplay(const CGRect* dirtyRect);
&gt; &gt;      void setNeedsDisplay();
&gt; &gt;  
&gt; &gt;      // Makes this layer the root when the passed context is rendered
&gt; &gt;      void becomeRootLayerForContext(CACFContextRef);
&gt; &gt; +    void resignRootLayerForContext(CACFContextRef);
&gt; 
&gt; I don&apos;t understand the need for this method. Why isn&apos;t the CACFContextSetLayer*( call just in WKCACFLayerRenderer?

I wanted to keep the API symmetrical and avoid more CACF calls in WKCACFRenderLayer

I&apos;ve incorporated all your other changes. Patch soon</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228965</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-05-21 10:01:13 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; ...
&gt; &gt; &gt;      // Makes this layer the root when the passed context is rendered
&gt; &gt; &gt;      void becomeRootLayerForContext(CACFContextRef);
&gt; &gt; &gt; +    void resignRootLayerForContext(CACFContextRef);
&gt; &gt; 
&gt; &gt; I don&apos;t understand the need for this method. Why isn&apos;t the CACFContextSetLayer*( call just in WKCACFLayerRenderer?
&gt; 
&gt; I wanted to keep the API symmetrical and avoid more CACF calls in WKCACFRenderLayer

But it doesn&apos;t make sense to call resignRootLayerForContext() on anything other than the layer is is already the root layer, so both these should really be methods on the context, not on the layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228966</commentid>
    <comment_count>7</comment_count>
      <attachid>56719</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-05-21 10:03:27 -0700</bug_when>
    <thetext>Created attachment 56719
Replacement patch with Simon&apos;s comments addressed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228969</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-21 10:07:04 -0700</bug_when>
    <thetext>Attachment 56719 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/platform/graphics/win/WKCACFLayer.h:164:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/win/WKCACFLayer.h:199:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/win/WebTiledLayer.cpp:221:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 3 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229017</commentid>
    <comment_count>9</comment_count>
      <attachid>56719</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-05-21 11:25:11 -0700</bug_when>
    <thetext>Comment on attachment 56719
Replacement patch with Simon&apos;s comments addressed

&gt; Index: WebCore/platform/graphics/win/WebTiledLayer.h
&gt; ===================================================================
&gt; +    virtual void setBounds(const CGRect&amp;);
&gt; +    virtual void setPosition(const CGPoint&amp; position);
&gt; +    virtual void setTransform(const CATransform3D&amp; transform);

No need to name the arguments there.

&gt; +    int numTiles() const;

Maybe tileCount() to match sublayerCount().

&gt; Index: WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp
&gt; ===================================================================
&gt;      if (m_context) {
&gt; +        m_rootLayer-&gt;resignRootLayerForContext(m_context.get());

This still seems backwards.

&gt; Index: WebCore/platform/graphics/win/WKCACFLayer.cpp
&gt; ===================================================================

&gt; +void  WKCACFLayer::setSublayersFromLayer(WKCACFLayer* source)

I don&apos;t like the name of this method; it&apos;s really moving the sublayers, no just setting them. So it would be better as
  adoptSublayers()
or
  moveSublayers()

&gt; Index: WebCore/platform/graphics/win/WebTiledLayer.cpp
&gt; ===================================================================

&gt; +PassRefPtr&lt;WebTiledLayer&gt; WebTiledLayer::create(const CGSize&amp; tileSize, GraphicsLayer* owner)
&gt; +{
&gt; +    if (!WKCACFLayerRenderer::acceleratedCompositingAvailable())
&gt; +        return 0;

This seems like an odd place to check acceleratedCompositingAvailable(). Surely you&apos;d never get here if it is disabled? An assertion might be more appropriate.

&gt; +WebTiledLayer::WebTiledLayer(const CGSize&amp; tileSize, GraphicsLayer* owner)
&gt; +    : WebLayer(WKCACFLayer::Layer, owner)
&gt; +{
&gt; +    // Tiled layers are placed in a child layer that is always the first child of the TiledLayer
&gt; +    RetainPtr&lt;CACFLayerRef&gt; tiles(AdoptCF, CACFLayerCreate(kCACFLayer));
&gt; +    CACFLayerInsertSublayer(layer(), tiles.get(), 0);

I think &apos;tiles&apos; should be &apos;tileContainer&apos; here, or tileParent to be consistent with your other naming.

&gt; +void WebTiledLayer::setTransform(const CATransform3D&amp; transform)
&gt; +{
&gt; +    WebLayer::setTransform(transform);
&gt; +    updateTiles();
&gt; +}

Why no check for transform change? You may end up updating tiles for the identity transform a lot.

&gt; +void WebTiledLayer::setNeedsDisplay(const CGRect* dirtyRect)
&gt; +{
&gt; +    // FIXME: Only setNeedsDisplay for tiles that are currently visible
&gt; +    int numTileLayers = numTiles();
&gt; +    for (int i = 0; i &lt; numTileLayers; ++i)
&gt; +        CACFLayerSetNeedsDisplay(tileAtIndex(i), dirtyRect);

This seems wrong. Don&apos;t you need to map dirtyRect into the coordinate space of each tile? You should at least intersect the dirty rect with each tile to avoid dirtying tiles that don&apos;t intersect the dirty rect.

&gt; +size_t WebTiledLayer::internalSublayerCount() const
&gt; +{
&gt; +    ASSERT(WebLayer::internalSublayerCount() &gt; 0);
&gt; +    return WebLayer::internalSublayerCount() - 1;
&gt; +}

I&apos;d like to see a comment here to explain the magic -1.

&gt; +void WebTiledLayer::internalInsertSublayer(PassRefPtr&lt;WKCACFLayer&gt; layer, size_t index)
&gt; +{
&gt; +    WebLayer::internalInsertSublayer(layer, index + 1);
&gt; +}
&gt; +
&gt; +WKCACFLayer* WebTiledLayer::internalSublayerAtIndex(int i) const
&gt; +{
&gt; +    return WebLayer::internalSublayerAtIndex(i + 1);
&gt; +}
&gt; +
&gt; +int WebTiledLayer::internalIndexOfSublayer(const WKCACFLayer* layer)
&gt; +{
&gt; +    int i = WebLayer::internalIndexOfSublayer(layer);
&gt; +    return (i &gt; 0) ? i - 1 : -1;
&gt; +}

Ditto for these.

&gt; +CACFLayerRef WebTiledLayer::tileParent() const
&gt; +{
&gt; +    CFArrayRef sublayers = CACFLayerGetSublayers(layer());
&gt; +    ASSERT(sublayers &amp;&amp; CFArrayGetCount(sublayers) &gt; 0);
&gt; +    return static_cast&lt;CACFLayerRef&gt;(const_cast&lt;void*&gt;(CFArrayGetValueAtIndex(sublayers, 0)));
&gt; +}

Is that really the most efficient way to get the first child?

&gt; +void WebTiledLayer::addTile()
&gt; +{
&gt; +    CACFLayerRef layerTileParent = tileParent();
&gt; +    RetainPtr&lt;CACFLayerRef&gt; newLayer(AdoptCF, CACFLayerCreate(kCACFLayer));
&gt; +    CACFLayerSetAnchorPoint(newLayer.get(), CGPointMake(0, 1));
&gt; +    CACFLayerSetUserData(newLayer.get(), this);
&gt; +    CACFLayerSetDisplayCallback(newLayer.get(), tileDisplayCallback);
&gt; +    CACFLayerInsertSublayer(tileParent(), newLayer.get(), numTiles());

Use your layerTileParent local variable. Even the, it&apos;s a shame to have to call
tileParent() every time addTile() is called (which happens in a loop in updateTiles()). Maybe pass the tileParent in, or just keep tileParent in a member var?

&gt; +void WebTiledLayer::removeTile()
&gt; +{
&gt; +    CACFLayerRemoveFromSuperlayer(tileAtIndex(numTiles() - 1));
&gt; +}

This is weird. Why just remove the last one?

&gt; +CACFLayerRef WebTiledLayer::tileAtIndex(int index)
&gt; +{
&gt; +    CFArrayRef sublayers = CACFLayerGetSublayers(tileParent());
&gt; +    if (!sublayers || index &lt; 0 || numTiles() &lt;= index)
&gt; +        return 0;

Easier to read as index &lt; 0 || index &gt;= numTiles()

&gt; +void WebTiledLayer::updateTiles()
&gt; +{
&gt; +    // FIXME: In addition to redoing the number of tiles, we need to only render and have backing
&gt; +    // store for visible layers
&gt; +    CGRect layerBounds = bounds();
&gt; +    int numTilesHorizontal = ceil(layerBounds.size.width / (float) m_tileSize.width);
&gt; +    int numTilesVertical = ceil(layerBounds.size.height / (float) m_tileSize.height);

m_tileSize is CGFloats already. No need to cast.

&gt; +    int numTilesTotal = numTilesHorizontal * numTilesVertical;

Chance of integer overflow here.

&gt; +    int numTilesToChange = numTilesTotal - numTiles();
&gt; +    if (numTilesToChange &gt;= 0) {
&gt; +        // Add new tiles
&gt; +        for (int i = 0; i &lt; numTilesToChange; ++i)
&gt; +            addTile();
&gt; +    } else {
&gt; +        // Remove old tiles
&gt; +        numTilesToChange = -numTilesToChange;
&gt; +        for (int i = 0; i &lt; numTilesToChange; ++i)
&gt; +            removeTile();
&gt; +    }

Seems that batch-add and batch-remove would be worth doing for efficiency.

&gt; +    // Set coordinates for all tiles
&gt; +    for (int i = 0; i &lt; numTilesHorizontal; ++i) {
&gt; +        for (int j = 0; j &lt; numTilesVertical; ++j) {
&gt; +            CACFLayerRef tile = tileAtIndex(i * numTilesVertical + j);
&gt; +            CACFLayerSetPosition(tile, CGPointMake(i * m_tileSize.width, j * m_tileSize.height));
&gt; +            int width = min(m_tileSize.width, layerBounds.size.width - i * m_tileSize.width);
&gt; +            int height = min(m_tileSize.height, layerBounds.size.height - j * m_tileSize.height);
&gt; +            CACFLayerSetBounds(tile, CGRectMake(0, 0, width, height));
&gt; +
&gt; +            // Flip Y
&gt; +            CATransform3D transform = CATransform3DMakeScale(1, -1, 1);
&gt; +            CATransform3DTranslate(transform, 0, height, 0);
&gt; +            CACFLayerSetTransform(tile, transform);

I don&apos;t understand why we need Y-flipping here. The entire layer hierarchy is already flipped.

&gt; +
&gt; +            String name = &quot;Tile (&quot; + String::number(i) + &quot;,&quot; + String::number(j) + &quot;)&quot;;
&gt; +            CACFLayerSetName(tile, RetainPtr&lt;CFStringRef&gt;(AdoptCF, name.createCFString()).get());

Name-setting should be debug-only.

Why doesn&apos;t updateTiles() do a setNeedsDisplay() on the tiles?
Can this be optimized to only add/remove tiles at the edges, to avoid having to redraw all the times when the size changes?

&gt; +void WebTiledLayer::drawTile(CACFLayerRef tile, CGContextRef context)
&gt; +{
&gt; +    CGRect tileBounds = CACFLayerGetBounds(tile);
&gt; +    CGPoint tilePosition = CACFLayerGetPosition(tile);
&gt; +
&gt; +    CGContextSaveGState(context);
&gt; +
&gt; +    //int y = bounds().size.height - tilePosition.y - tileBounds.size.height;

Don&apos;t commit commnted-out code.

&gt; +    int y = tilePosition.y;

No need for this local variable.

&gt; Index: LayoutTests/platform/win/compositing/huge-layer-expected.txt
&gt; ===================================================================
&gt; --- LayoutTests/platform/win/compositing/huge-layer-expected.txt	(revision 0)
&gt; +++ LayoutTests/platform/win/compositing/huge-layer-expected.txt	(revision 0)
&gt; @@ -0,0 +1,45 @@
&gt; +The yellow box should be large enough to scroll off the bottom. There should be a red box on the first page and a blue box near the bottom of the yellow box. This tests that we can support very large compositing layers.
&gt; +
&gt; +(GraphicsLayer
&gt; +  (position 0.00 0.00)
&gt; +  (anchor 0.50 0.50)
&gt; +  (bounds 785.00 5111.00)
&gt; +  (opacity 1.00)
&gt; +  (usingTiledLayer 0)
&gt; +  (preserves3D 0)
&gt; +  (drawsContent 0)
&gt; +  (backfaceVisibility visible)
&gt; +  (backgroundColor none)
&gt; +  (transform identity)
&gt; +  (children 1
&gt; +    (GraphicsLayer
&gt; +      (position 0.00 0.00)
&gt; +      (anchor 0.50 0.50)
&gt; +      (bounds 785.00 5111.00)
&gt; +      (opacity 1.00)
&gt; +      (usingTiledLayer 0)
&gt; +      (preserves3D 0)
&gt; +      (drawsContent 0)
&gt; +      (backfaceVisibility visible)
&gt; +      (backgroundColor none)
&gt; +      (transform identity)
&gt; +      (childrenTransform identity)
&gt; +      (children 1
&gt; +        (GraphicsLayer
&gt; +          (position 8.00 68.00)
&gt; +          (anchor 0.50 0.50)
&gt; +          (bounds 502.00 5002.00)
&gt; +          (opacity 1.00)
&gt; +          (usingTiledLayer 1)
&gt; +          (preserves3D 0)
&gt; +          (drawsContent 1)
&gt; +          (backfaceVisibility visible)
&gt; +          (backgroundColor none)
&gt; +          (transform identity)
&gt; +          (childrenTransform identity)
&gt; +        )
&gt; +      )
&gt; +    )
&gt; +  )
&gt; +)

Does this test really test anything useful? Would it have passed before the tiled layer changes?

If you&apos;re just testing that it doesn&apos;t crash, the test should say that.

&gt; Index: LayoutTests/platform/win/compositing/huge-layer-add-remove-child-expected.txt
&gt; ===================================================================

Same comments about this test. You&apos;re dumping GraphicsLayers, not WKCACALayers, so I&apos;m not sure the test would reveal the kind of failure you need it to.

&gt; Index: LayoutTests/platform/win/compositing/huge-layer-with-layer-children-resize-expected.txt
&gt; ===================================================================

Same.

&gt; Index: LayoutTests/platform/win/compositing/huge-layer-with-layer-children-expected.txt
&gt; ===================================================================

Same

&gt; Index: LayoutTests/platform/win/compositing/huge-layer-resize-expected.txt
&gt; ===================================================================

Same.

r- because I think WebTiledLayer::setNeedsDisplay() is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229163</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-05-21 16:27:41 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; ...
&gt; 
&gt; Does this test really test anything useful? Would it have passed before the tiled layer changes?
&gt; 
&gt; If you&apos;re just testing that it doesn&apos;t crash, the test should say that.
&gt; 
&gt; &gt; Index: LayoutTests/platform/win/compositing/huge-layer-add-remove-child-expected.txt
&gt; &gt; ===================================================================
&gt; 
&gt; Same comments about this test. You&apos;re dumping GraphicsLayers, not WKCACALayers, so I&apos;m not sure the test would reveal the kind of failure you need it to.
&gt; 
&gt; &gt; Index: LayoutTests/platform/win/compositing/huge-layer-with-layer-children-resize-expected.txt
&gt; &gt; ===================================================================
&gt; 
&gt; Same.
&gt; 
&gt; &gt; Index: LayoutTests/platform/win/compositing/huge-layer-with-layer-children-expected.txt
&gt; &gt; ===================================================================
&gt; 
&gt; Same
&gt; 
&gt; &gt; Index: LayoutTests/platform/win/compositing/huge-layer-resize-expected.txt
&gt; &gt; ===================================================================
&gt; 
&gt; Same.
&gt;

These are the best tests I can do given the current capabilities of DRT. They will fail without my changes, if only because usingTiledLayer will never be 1. No time to do any better right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229185</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-05-21 17:11:49 -0700</bug_when>
    <thetext>(In reply to comment #9)
...
&gt; &gt; +CACFLayerRef WebTiledLayer::tileParent() const
&gt; &gt; +{
&gt; &gt; +    CFArrayRef sublayers = CACFLayerGetSublayers(layer());
&gt; &gt; +    ASSERT(sublayers &amp;&amp; CFArrayGetCount(sublayers) &gt; 0);
&gt; &gt; +    return static_cast&lt;CACFLayerRef&gt;(const_cast&lt;void*&gt;(CFArrayGetValueAtIndex(sublayers, 0)));
&gt; &gt; +}
&gt; 
&gt; Is that really the most efficient way to get the first child?

As opposed to some sort of getFirstChild call? I don&apos;t see one in any of the CACF API.

&gt;...
&gt; &gt; +void WebTiledLayer::removeTile()
&gt; &gt; +{
&gt; &gt; +    CACFLayerRemoveFromSuperlayer(tileAtIndex(numTiles() - 1));
&gt; &gt; +}
&gt; 
&gt; This is weird. Why just remove the last one?

This is done in a loop to get rid of tiles no longer needed. I&apos;m removing them from the end to avoid needing to move existing array elements.

&gt;...
&gt; &gt; +    int numTilesTotal = numTilesHorizontal * numTilesVertical;
&gt; 
&gt; Chance of integer overflow here.

I will be adding logic to handle max number of tiles when this patch is landed. That will take care of any overflow issues.

&gt; 
&gt; &gt; +    int numTilesToChange = numTilesTotal - numTiles();
&gt; &gt; +    if (numTilesToChange &gt;= 0) {
&gt; &gt; +        // Add new tiles
&gt; &gt; +        for (int i = 0; i &lt; numTilesToChange; ++i)
&gt; &gt; +            addTile();
&gt; &gt; +    } else {
&gt; &gt; +        // Remove old tiles
&gt; &gt; +        numTilesToChange = -numTilesToChange;
&gt; &gt; +        for (int i = 0; i &lt; numTilesToChange; ++i)
&gt; &gt; +            removeTile();
&gt; &gt; +    }
&gt; 
&gt; Seems that batch-add and batch-remove would be worth doing for efficiency.

True. But that would be more work, and I think this is sufficient for now.

&gt; 
&gt; &gt; +    // Set coordinates for all tiles
&gt; &gt; +    for (int i = 0; i &lt; numTilesHorizontal; ++i) {
&gt; &gt; +        for (int j = 0; j &lt; numTilesVertical; ++j) {
&gt; &gt; +            CACFLayerRef tile = tileAtIndex(i * numTilesVertical + j);
&gt; &gt; +            CACFLayerSetPosition(tile, CGPointMake(i * m_tileSize.width, j * m_tileSize.height));
&gt; &gt; +            int width = min(m_tileSize.width, layerBounds.size.width - i * m_tileSize.width);
&gt; &gt; +            int height = min(m_tileSize.height, layerBounds.size.height - j * m_tileSize.height);
&gt; &gt; +            CACFLayerSetBounds(tile, CGRectMake(0, 0, width, height));
&gt; &gt; +
&gt; &gt; +            // Flip Y
&gt; &gt; +            CATransform3D transform = CATransform3DMakeScale(1, -1, 1);
&gt; &gt; +            CATransform3DTranslate(transform, 0, height, 0);
&gt; &gt; +            CACFLayerSetTransform(tile, transform);
&gt; 
&gt; I don&apos;t understand why we need Y-flipping here. The entire layer hierarchy is already flipped.

I added a comment about it.

&gt;...
&gt; 
&gt; Why doesn&apos;t updateTiles() do a setNeedsDisplay() on the tiles?
&gt; Can this be optimized to only add/remove tiles at the edges, to avoid having to redraw all the times when the size changes?

Everything it&apos;s called from (which is currently only setBounds) will do the appropriate setNeedsDisplay, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229187</commentid>
    <comment_count>12</comment_count>
      <attachid>56766</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-05-21 17:18:08 -0700</bug_when>
    <thetext>Created attachment 56766
Replacement patch with more issues addressed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229191</commentid>
    <comment_count>13</comment_count>
      <attachid>56766</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-05-21 17:33:05 -0700</bug_when>
    <thetext>Comment on attachment 56766
Replacement patch with more issues addressed

&gt; Index: WebCore/platform/graphics/win/WKCACFLayer.h
&gt; ===================================================================

&gt; +    void setNeedsDisplay(const CGRect* dirtyRect)
&gt; +    {
&gt; +        internalSetNeedsDisplay(dirtyRect);
&gt; +        setNeedsCommit();
&gt; +    }
&gt; +
&gt; +    void setNeedsDisplay() { setNeedsDisplay(0); }

Why not just void setNeedsDisplay(const CGRect* dirtyRect = 0)? No need for another method.

&gt; Index: WebCore/platform/graphics/win/WebTiledLayer.cpp
&gt; ===================================================================

&gt; +WebTiledLayer::WebTiledLayer(const CGSize&amp; tileSize, GraphicsLayer* owner)
&gt; +    : WebLayer(WKCACFLayer::Layer, owner)
&gt; +{
&gt; +    // Tiled layers are placed in a child layer that is always the first child of the TiledLayer
&gt; +    RetainPtr&lt;CACFLayerRef&gt; tileParent(AdoptCF, CACFLayerCreate(kCACFLayer));
&gt; +    CACFLayerInsertSublayer(layer(), tileParent.get(), 0);
&gt; +
&gt; +    m_tileSize = tileSize;

Use an intializer: m_tileSize(tileSize).

&gt; +CACFLayerRef WebTiledLayer::tileParent() const
&gt; +{
&gt; +    CFArrayRef sublayers = CACFLayerGetSublayers(layer());
&gt; +    ASSERT(sublayers &amp;&amp; CFArrayGetCount(sublayers) &gt; 0);
&gt; +    return static_cast&lt;CACFLayerRef&gt;(const_cast&lt;void*&gt;(CFArrayGetValueAtIndex(sublayers, 0)));
&gt; +}

I think it&apos;s worth keeping tileParent in a member variable. Up to you.
r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229200</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-05-21 18:24:45 -0700</bug_when>
    <thetext>Landed http://trac.webkit.org/changeset/59982</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56653</attachid>
            <date>2010-05-20 17:45:24 -0700</date>
            <delta_ts>2010-05-21 10:03:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>39461.patch</filename>
            <type>text/plain</type>
            <size>85623</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTg3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODUgQEAKKzIwMTAtMDUtMjAgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElt
cGxlbWVudCB0aWxlZCBjb21wb3NpdGluZyBsYXllcnMgb24gV2luZG93cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0NjEKKyAgICAgICAgCisgICAg
ICAgIFRoaXMgYWRkcyBhIHRpbGluZyBpbXBsZW1lbnRhdGlvbiBzaW1pbGFyIChmcm9tIGEgR3Jh
cGhpY3NMYXllciBzdGFuZHBvaW50KQorICAgICAgICB0byB0aGUgb25lIGZvciBNYWMuIEJ1dCB3
aGVyZSBNYWMgdXNlcyB0aGUgZXhpc3RpbmcgQ0FUaWxlZExheWVyLCBJJ3ZlIGhhZAorICAgICAg
ICB0byBpbXBsZW1lbnQgb25lLiBJZiBhIGxheWVyIGlzIGdyZWF0ZXIgdGhlbiAyayB4IDJrLCBJ
IHNwbGl0IGl0IGludG8gYW4KKyAgICAgICAgYXJyYXkgb2YgNTEyIHggNTEyIHRpbGVzLiBUaGVz
ZSB0aWxlcyBhcmUgcG9zaXRpb25lZCBpbiB0aGUgY29ycmVjdCBwbGFjZSAKKyAgICAgICAgZm9y
IHRoZSBUaWxlZExheWVyJ3MgY29udGVudC4gV2hlbiBzZXROZWVkc0Rpc3BsYXkgaXMgY2FsbGVk
IG9uIHRoZSBUaWxlZExheWVyCisgICAgICAgIHRoZSB0aWxlcycgc2V0TmVlZERpc3BsYXkgbWV0
aG9kcyBhcmUgY2FsbGVkLiBFYWNoIHRpbGUgY2xpcHMgYW5kIHBvc2l0aW9ucyB0aGUKKyAgICAg
ICAgQ0dDb250ZXh0IGFwcHJvcHJpYXRlbHkgYW5kIHRoZW4gcmVuZGVycyB0aGUgbGF5ZXIuIAor
ICAgICAgICAKKyAgICAgICAgTXVjaCBvcHRpbWl6YXRpb24gaXMgcG9zc2libGUuIE1vc3Qgc2ln
bmlmaWNhbnRseSByaWdodCBub3cgYWxsIHRpbGVzIGFyZQorICAgICAgICByZW5kZXJlZCB3aGV0
aGVyIHZpc2libGUgb3Igbm90LiBXZSBuZWVkIHRvIG9ubHkgcmVuZGVyIHRpbGVzIHRoYXQgYXJl
IAorICAgICAgICBjdXJyZW50bHkgdmlzaWJsZS4KKworICAgICAgICBUZXN0czogY29tcG9zaXRp
bmcvaHVnZS1sYXllci1hZGQtcmVtb3ZlLWNoaWxkLmh0bWwKKyAgICAgICAgICAgICAgIGNvbXBv
c2l0aW5nL2h1Z2UtbGF5ZXItcmVzaXplLmh0bWwKKyAgICAgICAgICAgICAgIGNvbXBvc2l0aW5n
L2h1Z2UtbGF5ZXItd2l0aC1sYXllci1jaGlsZHJlbi1yZXNpemUuaHRtbAorICAgICAgICAgICAg
ICAgY29tcG9zaXRpbmcvaHVnZS1sYXllci13aXRoLWxheWVyLWNoaWxkcmVuLmh0bWwKKyAgICAg
ICAgICAgICAgIGNvbXBvc2l0aW5nL2h1Z2UtbGF5ZXIuaHRtbAorCisgICAgICAgICogV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzTGF5ZXJDQUNGLmNwcDogQWRkZWQgdGlsaW5nIGNvZGUgc2ltaWxhciB0byBHcmFw
aGljc0xheWVyQ0EKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQUNGOjpyZXF1aXJl
c1RpbGVkTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBQ0Y6OnN3YXBG
cm9tT3JUb1RpbGVkTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBQ0Y6
OnVwZGF0ZUxheWVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0FDRjo6
dXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0xheWVyQ0FDRi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9X
S0NBQ0ZMYXllci5jcHA6IE1hZGUgc29tZSBtZXRob2RzIHZpcnR1YWwgc28gV2ViVGlsZWRMYXll
ciBjYW4gb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQWxzbyBhZGRlZCBzdWJsYXllciBzZXR0aW5nIGFuZCBtYW5pcHVsYXRpb24gbWV0
aG9kcyBuZWVkZWQgZm9yIHRpbGluZworICAgICAgICAoV2ViQ29yZTo6ZGlzcGxheUNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyOjpyZXNpZ25Sb290TGF5ZXJGb3JDb250
ZXh0KTogQWRkaW5nIHRvIGZpeCBhIGNyYXNoIGV4cG9zZWQgd2hlbiB0aWxpbmcgY29kZSBpcyBh
Y3RpdmUuCisgICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZMYXllcjo6c2V0U3VibGF5ZXJzRnJvbUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyOjpzdWJsYXllckF0SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6V0tDQUNGTGF5ZXI6OmluZGV4T2ZTdWJsYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpXS0NBQ0ZMYXllcjo6c2V0Qm91bmRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vV0tDQUNGTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVy
OjpkcmF3SW5Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyOjpudW1TdWJs
YXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNGTGF5ZXI6OnNldERvdWJsZVNpZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyOjpzZXRQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpXS0NBQ0ZMYXllcjo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OldL
Q0FDRkxheWVyOjpsYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dLQ0FD
RkxheWVyUmVuZGVyZXIuY3BwOiBGaXggYSBjcmFzaCBleHBvc2VkIHdoZW4gdGlsaW5nIGNvZGUg
aXMgYWN0aXZlCisgICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZMYXllclJlbmRlcmVyOjpjcmVhdGVS
ZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZMYXllclJlbmRlcmVyOjpkZXN0cm95
UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNGTGF5ZXJSZW5kZXJlcjo6cmVzaXpl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vV2ViTGF5ZXIuY3BwOiBBZGRlZC4g
U3BsaXQgdGhpcyBvdXQgZnJvbSBHcmFwaGljc0xheWVyQ0FDRiBzbyBpdCBjb3VsZCBiZSBzdWJj
bGFzc2VkIGJ5IFdlYlRpbGVkTGF5ZXIKKyAgICAgICAgKFdlYkNvcmU6OldlYkxheWVyOjpzZXRO
ZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTGF5ZXI6OmRyYXdJbkNvbnRleHQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9XZWJMYXllci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkxheWVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
TGF5ZXI6OldlYkxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vV2ViVGls
ZWRMYXllci5jcHA6IEFkZGVkLiBXaGVyZSBhbGwgdGhlIHRpbGUgY29uc3RydWN0aW9uIGFuZCBy
ZW5kZXJpbmcgaXMgZG9uZQorICAgICAgICAoV2ViQ29yZTo6V2ViVGlsZWRMYXllcjo6dGlsZURp
c3BsYXlDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpXZWJUaWxlZExheWVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViVGlsZWRMYXllcjo6V2ViVGlsZWRMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJUaWxlZExheWVyOjp+V2ViVGlsZWRMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJUaWxlZExheWVyOjpzZXRCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
VGlsZWRMYXllcjo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViVGlsZWRMYXll
cjo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlRpbGVkTGF5ZXI6OnNldE5l
ZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJUaWxlZExheWVyOjpudW1TdWJsYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViVGlsZWRMYXllcjo6c2V0U3VibGF5ZXJzRnJvbUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlRpbGVkTGF5ZXI6OnJlbW92ZUFsbFN1YmxheWVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJUaWxlZExheWVyOjpzZXRTdWJsYXllcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViVGlsZWRMYXllcjo6aW5zZXJ0U3VibGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViVGlsZWRMYXllcjo6c3VibGF5ZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYlRpbGVkTGF5ZXI6OmluZGV4T2ZTdWJsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJUaWxlZExheWVyOjp0aWxlUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlRpbGVkTGF5
ZXI6OmFkZFRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViVGlsZWRMYXllcjo6cmVtb3ZlVGls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJUaWxlZExheWVyOjp0aWxlQXRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJUaWxlZExheWVyOjpudW1UaWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJUaWxlZExheWVyOjp1cGRhdGVUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJUaWxl
ZExheWVyOjpkcmF3VGlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dlYlRp
bGVkTGF5ZXIuaDogQWRkZWQuCisKIDIwMTAtMDUtMjAgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEh5YXR0LgpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA1OTYyOSkKKysrIFdlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzODY3LDYg
KzIzODY3LDIyIEBACiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KKwkJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFdlYkxheWVyLmNwcCINCisJ
CQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFdlYkxheWVyLmgiDQorCQkJCQkJPg0KKwkJCQkJPC9G
aWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXHdpblxXZWJUaWxlZExheWVyLmNwcCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJ
CQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFdl
YlRpbGVkTGF5ZXIuaCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KIAkJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFdLQ0FDRkNvbnRleHRG
bHVzaGVyLmNwcCINCiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQpAQCAtMzgwMTYsNyArMzgwMzIs
NyBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0
aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xK
U0lEQkRhdGFiYXNlLmNwcCINCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNJ
REJBbnlDdXN0b20uY3BwIg0KIAkJCQkJPg0KIAkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQogCQkJ
CQkJTmFtZT0iRGVidWd8V2luMzIiDQpAQCAtMzgwNjgsMTIgKzM4MDg0LDggQEAKIAkJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRp
dmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3Vy
Y2VzXEpTSURCRGF0YWJhc2UuaCINCisJCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXRE
aXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU0lEQkRhdGFiYXNlLmNwcCIN
CiAJCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIk
KFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTSURC
RGF0YWJhc2VFcnJvci5jcHAiDQotCQkJCQk+DQogCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCiAJ
CQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCiAJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIN
CkBAIC0zODEyNCwxMSArMzgxMzYsMTEgQEAKIAkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJ
CQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1
dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTSURCRGF0YWJhc2VFcnJv
ci5oIg0KKwkJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVj
dE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTSURCRGF0YWJhc2UuaCINCiAJCQkJCT4NCiAJCQkJPC9G
aWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilc
b2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTSURCRGF0YWJhc2VFeGNlcHRpb24u
Y3BwIg0KKwkJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVj
dE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTSURCRGF0YWJhc2VFcnJvci5jcHAiDQogCQkJCQk+DQog
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCiAJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCkBAIC0z
ODE4MCwxMSArMzgxOTIsMTEgQEAKIAkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9G
aWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilc
b2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTSURCRGF0YWJhc2VFeGNlcHRpb24u
aCINCisJCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3RO
YW1lKVxEZXJpdmVkU291cmNlc1xKU0lEQkRhdGFiYXNlRXJyb3IuaCINCiAJCQkJCT4NCiAJCQkJ
PC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERp
cilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTSURCRGF0YWJhc2VSZXF1ZXN0
LmNwcCINCisJCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2pl
Y3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCINCiAJCQkJ
CT4NCiAJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KIAkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0K
QEAgLTM4MjM2LDExICszODI0OCwxMSBAQAogCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJ
CQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0
RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNJREJEYXRhYmFzZVJlcXVl
c3QuaCINCisJCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2pl
Y3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU0lEQkRhdGFiYXNlRXhjZXB0aW9uLmgiDQogCQkJCQk+
DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRP
dXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU0lEQkVycm9yRXZl
bnQuY3BwIg0KKwkJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJv
amVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTSURCRGF0YWJhc2VSZXF1ZXN0LmNwcCINCiAJCQkJ
CT4NCiAJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KIAkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0K
QEAgLTM4MjkyLDExICszODMwNCwxMSBAQAogCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJ
CQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0
RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNJREJFcnJvckV2ZW50Lmgi
DQorCQkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFt
ZSlcRGVyaXZlZFNvdXJjZXNcSlNJREJEYXRhYmFzZVJlcXVlc3QuaCINCiAJCQkJCT4NCiAJCQkJ
PC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERp
cilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTSURCRXZlbnQuY3BwIg0KKwkJ
CQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERl
cml2ZWRTb3VyY2VzXEpTSURCRXJyb3JFdmVudC5jcHAiDQogCQkJCQk+DQogCQkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24NCiAJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCkBAIC0zODM0OCwxMSArMzgz
NjAsMTEgQEAKIAkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8
RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVj
dE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTSURCRXZlbnQuaCINCisJCQkJCVJlbGF0aXZlUGF0aD0i
JChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU0lE
QkVycm9yRXZlbnQuaCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJ
UmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2
ZWRTb3VyY2VzXEpTSURCUmVxdWVzdC5jcHAiDQorCQkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0
T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNJREJFdmVudC5j
cHAiDQogCQkJCQk+DQogCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCiAJCQkJCQlOYW1lPSJEZWJ1
Z3xXaW4zMiINCkBAIC0zODQwNCwxMSArMzg0MTYsMTEgQEAKIAkJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIkKFdl
YktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTSURCUmVx
dWVzdC5oIg0KKwkJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJv
amVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTSURCRXZlbnQuaCINCiAJCQkJCT4NCiAJCQkJPC9G
aWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilc
b2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTSURCU3VjY2Vzc0V2ZW50LmNwcCIN
CisJCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1l
KVxEZXJpdmVkU291cmNlc1xKU0lEQlJlcXVlc3QuY3BwIg0KIAkJCQkJPg0KIAkJCQkJPEZpbGVD
b25maWd1cmF0aW9uDQogCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQpAQCAtMzg0NjAsMTEgKzM4
NDcyLDExIEBACiAJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJ
PEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2pl
Y3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU0lEQlN1Y2Nlc3NFdmVudC5oIg0KKwkJCQkJUmVsYXRp
dmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3Vy
Y2VzXEpTSURCUmVxdWVzdC5oIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQot
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTSURCQW55Q3VzdG9tLmNwcCINCisJ
CQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxE
ZXJpdmVkU291cmNlc1xKU0lEQlN1Y2Nlc3NFdmVudC5jcHAiDQogCQkJCQk+DQogCQkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24NCiAJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCkBAIC0zODUxNiw2ICsz
ODUyOCwxMCBAQAogCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJ
CTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9q
ZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNJREJTdWNjZXNzRXZlbnQuaCINCisJCQkJCT4NCisJ
CQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xq
c1xKU0ltYWdlQ29uc3RydWN0b3IuY3BwIg0KIAkJCQkJPg0KIAkJCQkJPEZpbGVDb25maWd1cmF0
aW9uDQpAQCAtNDE4NjAsMTUgKzQxODc2LDE1IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJ
CQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRJbnN0YW5j
ZS5oIg0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRHQ0V2ZW50LmNw
cCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRHQ0V2ZW50LmNwcCINCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5cYmluZGluZ3NcanNcU2NyaXB0R0NFdmVudC5oIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQog
CQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdEdDRXZl
bnQuaCINCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcU2NyaXB0SW5zdGFuY2Uu
aCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KQEAgLTQzOTI1LDIzICs0Mzk0
MSwyMyBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQk8L0ZpbHRlcj4NCi0gICAgICAgIDxGaWx0
ZXINCi0gICAgICAgICAgICBOYW1lPSJzdHJpbmdzIg0KLSAgICAgICAgICAgID4NCi0gICAgICAg
ICAgICA8RmlsZQ0KLSAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0
RGlyKVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmVcQXRvbWljU3RyaW5nLmNwcCINCi0g
ICAgICAgICAgICAgICAgPg0KLSAgICAgICAgICAgIDwvRmlsZT4NCi0gICAgICAgICAgICA8Rmls
ZQ0KLSAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxpbmNs
dWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmVcU3RyaW5nSW1wbC5jcHAiDQotICAgICAgICAgICAg
ICAgID4NCi0gICAgICAgICAgICA8L0ZpbGU+DQotICAgICAgICAgICAgPEZpbGUNCi0gICAgICAg
ICAgICAgICAgUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxwcml2YXRl
XEphdmFTY3JpcHRDb3JlXFdURlN0cmluZy5jcHAiDQotICAgICAgICAgICAgICAgID4NCi0gICAg
ICAgICAgICA8L0ZpbGU+DQotICAgICAgICA8L0ZpbHRlcj4NCiAJCTxGaWx0ZXINCisJCQlOYW1l
PSJzdHJpbmdzIg0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0
T3V0cHV0RGlyKVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmVcQXRvbWljU3RyaW5nLmNw
cCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9IiQo
V2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmVcU3RyaW5nSW1w
bC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIkKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3JlXFdURlN0
cmluZy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXIN
CiAJCQlOYW1lPSJicmlkZ2UiDQogCQkJPg0KIAkJCTxGaWxlDQpAQCAtNDQzNDAsNiArNDQzNTYs
MTAgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcaGVscFNjcmVlbi5jc3MiDQorCQkJCQk+DQorCQkJ
CTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxIZWxwU2NyZWVuLmpzIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpAQCAtNDQzNjAs
MTAgKzQ0MzgwLDYgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcaGVscFNjcmVlbi5jc3MiDQotCQkJ
CQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxpbnNwZWN0b3IuY3NzIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XS0NBQ0ZMYXllci5oCShyZXZp
c2lvbiA1OTYyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dLQ0FDRkxheWVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEyICs2MCwxMyBAQAogICAgIHZpcnR1YWwgfldLQ0FD
RkxheWVyKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZW5kZXIoKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd0luQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3SW5Db250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kiwg
Ym9vbCBmbGlweSkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBD
R1JlY3QqIGRpcnR5UmVjdCk7CiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKIAogICAgIC8v
IE1ha2VzIHRoaXMgbGF5ZXIgdGhlIHJvb3Qgd2hlbiB0aGUgcGFzc2VkIGNvbnRleHQgaXMgcmVu
ZGVyZWQKICAgICB2b2lkIGJlY29tZVJvb3RMYXllckZvckNvbnRleHQoQ0FDRkNvbnRleHRSZWYp
OworICAgIHZvaWQgcmVzaWduUm9vdExheWVyRm9yQ29udGV4dChDQUNGQ29udGV4dFJlZik7CiAK
ICAgICBzdGF0aWMgUmV0YWluUHRyPENGVHlwZVJlZj4gY2ZWYWx1ZShmbG9hdCB2YWx1ZSkgeyBy
ZXR1cm4gUmV0YWluUHRyPENGVHlwZVJlZj4oQWRvcHRDRiwgQ0ZOdW1iZXJDcmVhdGUoMCwga0NG
TnVtYmVyRmxvYXQzMlR5cGUsICZ2YWx1ZSkpOyB9CiAgICAgc3RhdGljIFJldGFpblB0cjxDRlR5
cGVSZWY+IGNmVmFsdWUoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQpAQCAtMTEy
LDEzICsxMTMsMjYgQEAKIAogICAgIGJvb2wgaXNUcmFuc2Zvcm1MYXllcigpIGNvbnN0OwogCisg
ICAgLy8gVGhpcyBzaG91bGQgYmUgb3ZlcnJpZGRlbiBpZiB0aGUgc3ViY2xhc3MgbmVlZHMgdG8g
bWFuaXB1bGF0ZSB0aGUgbGF5ZXIgaGllcmFyY2h5LCBhbG9uZyB3aXRoIHRoZQorICAgIC8vIHBy
b3RlY3RlZCBzdWJsYXllckF0SW5kZXggYW5kIGluZGV4T2ZTdWJsYXllciBmdW5jdGlvbnMKKyAg
ICB2aXJ0dWFsIHZvaWQgaW5zZXJ0U3VibGF5ZXIoUGFzc1JlZlB0cjxXS0NBQ0ZMYXllcj4sIHNp
emVfdCBpbmRleCk7CisKKyAgICAvLyBUaGVzZSBmdW5jdGlvbiBhcmUgc3BlY2lmaWVkIGluIHRl
cm1zIG9mIFRoZSBhYm92ZSBmdW5jdGlvbgogICAgIHZvaWQgYWRkU3VibGF5ZXIoUGFzc1JlZlB0
cjxXS0NBQ0ZMYXllcj4gc3VibGF5ZXIpOwotICAgIHZvaWQgaW5zZXJ0U3VibGF5ZXIoUGFzc1Jl
ZlB0cjxXS0NBQ0ZMYXllcj4sIHNpemVfdCBpbmRleCk7CiAgICAgdm9pZCBpbnNlcnRTdWJsYXll
ckFib3ZlTGF5ZXIoUGFzc1JlZlB0cjxXS0NBQ0ZMYXllcj4sIGNvbnN0IFdLQ0FDRkxheWVyKiBy
ZWZlcmVuY2UpOwogICAgIHZvaWQgaW5zZXJ0U3VibGF5ZXJCZWxvd0xheWVyKFBhc3NSZWZQdHI8
V0tDQUNGTGF5ZXI+LCBjb25zdCBXS0NBQ0ZMYXllciogcmVmZXJlbmNlKTsKICAgICB2b2lkIHJl
cGxhY2VTdWJsYXllcihXS0NBQ0ZMYXllciogcmVmZXJlbmNlLCBQYXNzUmVmUHRyPFdLQ0FDRkxh
eWVyPik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3VibGF5ZXJzRnJvbUxheWVyKFdLQ0FDRkxh
eWVyKiBzb3VyY2UpOworCiAgICAgdm9pZCByZW1vdmVGcm9tU3VwZXJsYXllcigpOwogCisgICAg
dmlydHVhbCBzaXplX3QgbnVtU3VibGF5ZXJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIENGQXJy
YXlSZWYgc3VibGF5ZXJzID0gQ0FDRkxheWVyR2V0U3VibGF5ZXJzKGxheWVyKCkpOworICAgICAg
ICByZXR1cm4gc3VibGF5ZXJzID8gQ0ZBcnJheUdldENvdW50KHN1YmxheWVycykgOiAwOworICAg
IH0KKwogICAgIFdLQ0FDRkxheWVyKiBhbmNlc3Rvck9yU2VsZldpdGhTdXBlcmxheWVyKFdLQ0FD
RkxheWVyKikgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBDR1Bv
aW50JiBwKSB7IENBQ0ZMYXllclNldEFuY2hvclBvaW50KGxheWVyKCksIHApOyBzZXROZWVkc0Nv
bW1pdCgpOyB9CkBAIC0xMzYsNyArMTUwLDcgQEAKICAgICB2b2lkIHNldEJvcmRlcldpZHRoKENH
RmxvYXQgd2lkdGgpIHsgQ0FDRkxheWVyU2V0Qm9yZGVyV2lkdGgobGF5ZXIoKSwgd2lkdGgpOyBz
ZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgQ0dGbG9hdCBib3JkZXJXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIENBQ0ZMYXllckdldEJvcmRlcldpZHRoKGxheWVyKCkpOyB9CiAKLSAgICB2b2lkIHNldEJv
dW5kcyhjb25zdCBDR1JlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm91bmRzKGNvbnN0IENH
UmVjdCYpOwogICAgIENHUmVjdCBib3VuZHMoKSBjb25zdCB7IHJldHVybiBDQUNGTGF5ZXJHZXRC
b3VuZHMobGF5ZXIoKSk7IH0KIAogICAgIHZvaWQgc2V0Q2xlYXJzQ29udGV4dChib29sIGNsZWFy
cykgeyBDQUNGTGF5ZXJTZXRDbGVhcnNDb250ZXh0KGxheWVyKCksIGNsZWFycyk7IHNldE5lZWRz
Q29tbWl0KCk7IH0KQEAgLTE1MSw3ICsxNjUsNyBAQAogICAgIHZvaWQgc2V0Q29udGVudHNHcmF2
aXR5KENvbnRlbnRzR3Jhdml0eVR5cGUpOwogICAgIENvbnRlbnRzR3Jhdml0eVR5cGUgY29udGVu
dHNHcmF2aXR5KCkgY29uc3Q7CiAgICAgICAgIAotICAgIHZvaWQgc2V0RG91YmxlU2lkZWQoYm9v
bCBiKSB7IENBQ0ZMYXllclNldERvdWJsZVNpZGVkKGxheWVyKCksIGIpOyBzZXROZWVkc0NvbW1p
dCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldERvdWJsZVNpZGVkKGJvb2wgYikgeyBDQUNGTGF5
ZXJTZXREb3VibGVTaWRlZChsYXllcigpLCBiKTsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGJv
b2wgZG91YmxlU2lkZWQoKSBjb25zdCB7IHJldHVybiBDQUNGTGF5ZXJJc0RvdWJsZVNpZGVkKGxh
eWVyKCkpOyB9CiAKICAgICB2b2lkIHNldEVkZ2VBbnRpYWxpYXNpbmdNYXNrKHVpbnQzMl90IG1h
c2spIHsgQ0FDRkxheWVyU2V0RWRnZUFudGlhbGlhc2luZ01hc2sobGF5ZXIoKSwgbWFzayk7IHNl
dE5lZWRzQ29tbWl0KCk7IH0KQEAgLTE2MCw5ICsxNzQsNiBAQAogICAgIHZvaWQgc2V0RmlsdGVy
cyhDRkFycmF5UmVmIGZpbHRlcnMpIHsgQ0FDRkxheWVyU2V0RmlsdGVycyhsYXllcigpLCBmaWx0
ZXJzKTsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIENGQXJyYXlSZWYgZmlsdGVycygpIGNvbnN0
IHsgcmV0dXJuIENBQ0ZMYXllckdldEZpbHRlcnMobGF5ZXIoKSk7IH0KIAotICAgIHZvaWQgc2V0
RnJhbWUoY29uc3QgQ0dSZWN0Jik7Ci0gICAgQ0dSZWN0IGZyYW1lKCkgY29uc3QgeyByZXR1cm4g
Q0FDRkxheWVyR2V0RnJhbWUobGF5ZXIoKSk7IH0KLQogICAgIHZvaWQgc2V0SGlkZGVuKGJvb2wg
aGlkZGVuKSB7IENBQ0ZMYXllclNldEhpZGRlbihsYXllcigpLCBoaWRkZW4pOyBzZXROZWVkc0Nv
bW1pdCgpOyB9CiAgICAgYm9vbCBpc0hpZGRlbigpIGNvbnN0IHsgcmV0dXJuIENBQ0ZMYXllcklz
SGlkZGVuKGxheWVyKCkpOyB9CiAKQEAgLTE4OSw3ICsyMDAsNyBAQAogICAgIHZvaWQgc2V0T3Bh
cXVlKGJvb2wgYikgeyBDQUNGTGF5ZXJTZXRPcGFxdWUobGF5ZXIoKSwgYik7IHNldE5lZWRzQ29t
bWl0KCk7IH0KICAgICBib29sIG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIENBQ0ZMYXllcklzT3Bh
cXVlKGxheWVyKCkpOyB9CiAKLSAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IENHUG9pbnQmIHBv
c2l0aW9uKSB7IENBQ0ZMYXllclNldFBvc2l0aW9uKGxheWVyKCksIHBvc2l0aW9uKTsgc2V0TmVl
ZHNDb21taXQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBDR1BvaW50
JiBwb3NpdGlvbikgeyBDQUNGTGF5ZXJTZXRQb3NpdGlvbihsYXllcigpLCBwb3NpdGlvbik7IHNl
dE5lZWRzQ29tbWl0KCk7IH0KICAgICBDR1BvaW50IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4g
Q0FDRkxheWVyR2V0UG9zaXRpb24obGF5ZXIoKSk7IH0KIAogICAgIHZvaWQgc2V0WlBvc2l0aW9u
KENHRmxvYXQgcG9zaXRpb24pIHsgQ0FDRkxheWVyU2V0WlBvc2l0aW9uKGxheWVyKCksIHBvc2l0
aW9uKTsgc2V0TmVlZHNDb21taXQoKTsgfQpAQCAtMjA2LDE2ICsyMTcsMTUgQEAKICAgICB2b2lk
IHNldFNvcnRzU3VibGF5ZXJzKGJvb2wgc29ydHMpIHsgQ0FDRkxheWVyU2V0U29ydHNTdWJsYXll
cnMobGF5ZXIoKSwgc29ydHMpOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgYm9vbCBzb3J0c1N1
YmxheWVycygpIGNvbnN0IHsgcmV0dXJuIENBQ0ZMYXllckdldFNvcnRzU3VibGF5ZXJzKGxheWVy
KCkpOyB9CiAKLSAgICB2b2lkIHJlbW92ZUFsbFN1YmxheWVycygpOwotICAgIAotICAgIHZvaWQg
c2V0U3VibGF5ZXJzKGNvbnN0IFZlY3RvcjxSZWZQdHI8V0tDQUNGTGF5ZXI+ID4mKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsU3VibGF5ZXJzKCk7CisgICAgdmlydHVhbCB2b2lkIHNldFN1
YmxheWVycyhjb25zdCBWZWN0b3I8UmVmUHRyPFdLQ0FDRkxheWVyPiA+Jik7CiAKICAgICB2b2lk
IHNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IENBVHJhbnNmb3JtM0QmIHRyYW5zZm9ybSkgeyBD
QUNGTGF5ZXJTZXRTdWJsYXllclRyYW5zZm9ybShsYXllcigpLCB0cmFuc2Zvcm0pOyBzZXROZWVk
c0NvbW1pdCgpOyB9CiAgICAgQ0FUcmFuc2Zvcm0zRCBzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIENBQ0ZMYXllckdldFN1YmxheWVyVHJhbnNmb3JtKGxheWVyKCkpOyB9CiAKICAg
ICBXS0NBQ0ZMYXllciogc3VwZXJsYXllcigpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRUcmFuc2Zv
cm0oY29uc3QgQ0FUcmFuc2Zvcm0zRCYgdHJhbnNmb3JtKSB7IENBQ0ZMYXllclNldFRyYW5zZm9y
bShsYXllcigpLCB0cmFuc2Zvcm0pOyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgdmlydHVhbCB2
b2lkIHNldFRyYW5zZm9ybShjb25zdCBDQVRyYW5zZm9ybTNEJiB0cmFuc2Zvcm0pIHsgQ0FDRkxh
eWVyU2V0VHJhbnNmb3JtKGxheWVyKCksIHRyYW5zZm9ybSk7IHNldE5lZWRzQ29tbWl0KCk7IH0K
ICAgICBDQVRyYW5zZm9ybTNEIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIENBQ0ZMYXllckdl
dFRyYW5zZm9ybShsYXllcigpKTsgfQogCiAgICAgdm9pZCBzZXRHZW9tZXRyeUZsaXBwZWQoYm9v
bCBmbGlwcGVkKSB7IENBQ0ZMYXllclNldEdlb21ldHJ5RmxpcHBlZChsYXllcigpLCBmbGlwcGVk
KTsgc2V0TmVlZHNDb21taXQoKTsgfQpAQCAtMjMxLDIwICsyNDEsMTMgQEAKIAogICAgIHZvaWQg
c2V0TmVlZHNDb21taXQoKTsKIAotcHJpdmF0ZToKLSAgICBDQUNGTGF5ZXJSZWYgbGF5ZXIoKSBj
b25zdCB7IHJldHVybiBtX2xheWVyLmdldCgpOyB9Ci0gICAgc2l6ZV90IG51bVN1YmxheWVycygp
IGNvbnN0Ci0gICAgewotICAgICAgICBDRkFycmF5UmVmIHN1YmxheWVycyA9IENBQ0ZMYXllckdl
dFN1YmxheWVycyhsYXllcigpKTsKLSAgICAgICAgcmV0dXJuIHN1YmxheWVycyA/IENGQXJyYXlH
ZXRDb3VudChzdWJsYXllcnMpIDogMDsKLSAgICB9Ci0KLSAgICBjb25zdCBXS0NBQ0ZMYXllciog
c3VibGF5ZXJBdEluZGV4KGludCkgY29uc3Q7CisgICAgdmlydHVhbCBXS0NBQ0ZMYXllciogc3Vi
bGF5ZXJBdEluZGV4KGludCkgY29uc3Q7CiAgICAgCiAgICAgLy8gUmV0dXJucyB0aGUgaW5kZXgg
b2YgdGhlIHBhc3NlZCBsYXllciBpbiB0aGlzIGxheWVyJ3Mgc3VibGF5ZXJzIGxpc3QKICAgICAv
LyBvciAtMSBpZiBub3QgZm91bmQKLSAgICBpbnQgaW5kZXhPZlN1YmxheWVyKGNvbnN0IFdLQ0FD
RkxheWVyKik7CisgICAgdmlydHVhbCBpbnQgaW5kZXhPZlN1YmxheWVyKGNvbnN0IFdLQ0FDRkxh
eWVyKik7CiAKKyAgICBDQUNGTGF5ZXJSZWYgbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVy
LmdldCgpOyB9CiAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSByZW1vdmVG
cm9tU3VwZXJsYXllci4KICAgICB2b2lkIHJlbW92ZVN1YmxheWVyKGNvbnN0IFdLQ0FDRkxheWVy
Kik7CiAKQEAgLTI1Myw2ICsyNTYsNyBAQAogICAgIHZvaWQgcHJpbnRMYXllcihpbnQgaW5kZW50
KSBjb25zdDsKICNlbmRpZgogCitwcml2YXRlOgogICAgIFJldGFpblB0cjxDQUNGTGF5ZXJSZWY+
IG1fbGF5ZXI7CiAgICAgYm9vbCBtX25lZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlOwogfTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dlYlRpbGVkTGF5ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XZWJUaWxlZExheWVyLmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XZWJUaWxlZExheWVy
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV2ViVGlsZWRMYXllcl9o
CisjZGVmaW5lIFdlYlRpbGVkTGF5ZXJfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorCisjaW5jbHVkZSAiV2ViTGF5ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBXZWJUaWxlZExheWVyIDogcHVibGljIFdlYkxheWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXZWJUaWxlZExheWVyPiBjcmVhdGUoY29uc3QgQ0dTaXplJiB0aWxlU2l6
ZSwgR3JhcGhpY3NMYXllciogb3duZXIpOworCisgICAgdmlydHVhbCB+V2ViVGlsZWRMYXllcigp
OworCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBDR1JlY3QqIGRpcnR5
UmVjdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm91bmRzKGNvbnN0IENHUmVjdCYpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBDR1BvaW50JiBwb3NpdGlvbik7CisgICAg
dmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBDQVRyYW5zZm9ybTNEJiB0cmFuc2Zvcm0p
OworCisgICAgdmlydHVhbCBzaXplX3QgbnVtU3VibGF5ZXJzKCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHNldFN1YmxheWVyc0Zyb21MYXllcihXS0NBQ0ZMYXllciogc291cmNlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgaW5zZXJ0U3VibGF5ZXIoUGFzc1JlZlB0cjxXS0NBQ0ZMYXllcj4sIHNpemVf
dCBpbmRleCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsU3VibGF5ZXJzKCk7CisgICAg
dmlydHVhbCB2b2lkIHNldFN1YmxheWVycyhjb25zdCBWZWN0b3I8UmVmUHRyPFdLQ0FDRkxheWVy
PiA+Jik7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJUaWxlZExheWVyKGNvbnN0IENHU2l6ZSYgdGls
ZVNpemUsIEdyYXBoaWNzTGF5ZXIqIG93bmVyKTsKKworICAgIHZpcnR1YWwgV0tDQUNGTGF5ZXIq
IHN1YmxheWVyQXRJbmRleChpbnQpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGluZGV4T2ZTdWJs
YXllcihjb25zdCBXS0NBQ0ZMYXllciopOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHRp
bGVEaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmLCBDR0NvbnRleHRSZWYpOworICAgIHZvaWQg
ZHJhd1RpbGUoQ0FDRkxheWVyUmVmLCBDR0NvbnRleHRSZWYpOworCisgICAgQ0FDRkxheWVyUmVm
IFdlYlRpbGVkTGF5ZXI6OnRpbGVQYXJlbnQoKSBjb25zdDsKKyAgICB2b2lkIGFkZFRpbGUoKTsK
KyAgICB2b2lkIHJlbW92ZVRpbGUoKTsKKyAgICBDQUNGTGF5ZXJSZWYgdGlsZUF0SW5kZXgoaW50
KTsKKyAgICBpbnQgbnVtVGlsZXMoKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlVGlsZXMoKTsK
KworICAgIENHU2l6ZSBtX3RpbGVTaXplOworfTsKKworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYgLy8gV2ViVGlsZWRMYXllcl9oCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XZWJUaWxlZExheWVy
LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV2ViTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XZWJMYXllci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV2ViTGF5ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBXZWJMYXllcl9oCisjZGVmaW5lIFdlYkxheWVyX2gKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIldLQ0FDRkxheWVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NMYXllcjsKKworY2xhc3MgV2Vi
TGF5ZXIgOiBwdWJsaWMgV0tDQUNGTGF5ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdLQ0FDRkxheWVyPiBjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgR3JhcGhpY3NMYXll
ciogb3duZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkxheWVyKGxh
eWVyVHlwZSwgb3duZXIpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNw
bGF5KGNvbnN0IENHUmVjdCogZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0luQ29u
dGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCosIGJvb2wgZmxpcHkpOworCitwcm90ZWN0ZWQ6
CisgICAgV2ViTGF5ZXIoTGF5ZXJUeXBlIGxheWVyVHlwZSwgR3JhcGhpY3NMYXllciogb3duZXIp
CisgICAgIDogV0tDQUNGTGF5ZXIobGF5ZXJUeXBlKQorICAgICAsIG1fb3duZXIob3duZXIpCisg
ICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0xheWVyKiBtX293bmVyOworfTsK
KworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYg
Ly8gV2ViTGF5ZXJfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vV2ViTGF5ZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICAr
ICoKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyQ0FD
Ri5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
TGF5ZXJDQUNGLmgJKHJldmlzaW9uIDU5NjI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NMYXllckNBQ0YuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsNiArOTgsOSBA
QAogICAgIFdLQ0FDRkxheWVyKiBob3N0TGF5ZXJGb3JTdWJsYXllcnMoKSBjb25zdDsKICAgICBX
S0NBQ0ZMYXllciogbGF5ZXJGb3JTdXBlcmxheWVyKCkgY29uc3Q7CiAKKyAgICBib29sIHJlcXVp
cmVzVGlsZWRMYXllcihjb25zdCBGbG9hdFNpemUmKSBjb25zdDsKKyAgICB2b2lkIHN3YXBGcm9t
T3JUb1RpbGVkTGF5ZXIoYm9vbCB1c2VUaWxlZExheWVyKTsKKwogICAgIENvbXBvc2l0aW5nQ29v
cmRpbmF0ZXNPcmllbnRhdGlvbiBkZWZhdWx0Q29udGVudHNPcmllbnRhdGlvbigpIGNvbnN0Owog
ICAgIHZvaWQgdXBkYXRlU3VibGF5ZXJMaXN0KCk7CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0
aW9uKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XS0NBQ0ZMYXllclJl
bmRlcmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9X
S0NBQ0ZMYXllclJlbmRlcmVyLmNwcAkocmV2aXNpb24gNTk2MjkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9XS0NBQ0ZMYXllclJlbmRlcmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzc3LDYgKzM3Nyw3IEBACiAgICAgbV9yb290TGF5ZXItPmFkZFN1YmxheWVyKG1fY2xpcExh
eWVyKTsKICAgICBtX2NsaXBMYXllci0+YWRkU3VibGF5ZXIobV9zY3JvbGxMYXllcik7CiAgICAg
bV9jbGlwTGF5ZXItPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgbV9yb290TGF5ZXItPnNl
dEFuY2hvclBvaW50KENHUG9pbnRNYWtlKDAsIDApKTsKICAgICBtX3Njcm9sbExheWVyLT5zZXRB
bmNob3JQb2ludChDR1BvaW50TWFrZSgwLCAxKSk7CiAgICAgbV9jbGlwTGF5ZXItPnNldEFuY2hv
clBvaW50KENHUG9pbnRNYWtlKDAsIDEpKTsKIApAQCAtMzg3LDcgKzM4OCw3IEBACiAjZW5kaWYK
IAogICAgIGlmIChJc1dpbmRvdyhtX2hvc3RXaW5kb3cpKQotICAgICAgICBtX3Jvb3RMYXllci0+
c2V0RnJhbWUoYm91bmRzKCkpOworICAgICAgICBtX3Jvb3RMYXllci0+c2V0Qm91bmRzKGJvdW5k
cygpKTsKIAogICAgIGlmIChtX2NvbnRleHQpCiAgICAgICAgIG1fcm9vdExheWVyLT5iZWNvbWVS
b290TGF5ZXJGb3JDb250ZXh0KG1fY29udGV4dC5nZXQoKSk7CkBAIC0zOTgsNiArMzk5LDcgQEAK
IHZvaWQgV0tDQUNGTGF5ZXJSZW5kZXJlcjo6ZGVzdHJveVJlbmRlcmVyKCkKIHsKICAgICBpZiAo
bV9jb250ZXh0KSB7CisgICAgICAgIG1fcm9vdExheWVyLT5yZXNpZ25Sb290TGF5ZXJGb3JDb250
ZXh0KG1fY29udGV4dC5nZXQoKSk7CiAgICAgICAgIHdpbmRvd3NGb3JDb250ZXh0cygpLnJlbW92
ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgICAgICBXS0NBQ0ZDb250ZXh0Rmx1c2hlcjo6c2hhcmVk
KCkucmVtb3ZlQ29udGV4dChtX2NvbnRleHQuZ2V0KCkpOwogICAgIH0KQEAgLTQyOCw3ICs0MzAs
NyBAQAogICAgIHJlc2V0RGV2aWNlKENoYW5nZWRXaW5kb3dTaXplKTsKIAogICAgIGlmIChtX3Jv
b3RMYXllcikgewotICAgICAgICBtX3Jvb3RMYXllci0+c2V0RnJhbWUoYm91bmRzKCkpOworICAg
ICAgICBtX3Jvb3RMYXllci0+c2V0Qm91bmRzKGJvdW5kcygpKTsKICAgICAgICAgV0tDQUNGQ29u
dGV4dEZsdXNoZXI6OnNoYXJlZCgpLmZsdXNoQWxsQ29udGV4dHMoKTsKICAgICAgICAgdXBkYXRl
U2Nyb2xsRnJhbWUoKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9XS0NBQ0ZMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vV0tDQUNGTGF5ZXIuY3BwCShyZXZpc2lvbiA1OTYyOSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1dLQ0FDRkxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyAr
NDgsNyBAQAogc3RhdGljIHZvaWQgZGlzcGxheUNhbGxiYWNrKENBQ0ZMYXllclJlZiBsYXllciwg
Q0dDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUX0FSRyhsYXllciwgV0tDQUNGTGF5
ZXI6OmxheWVyKGxheWVyKSk7Ci0gICAgV0tDQUNGTGF5ZXI6OmxheWVyKGxheWVyKS0+ZHJhd0lu
Q29udGV4dChjb250ZXh0KTsKKyAgICBXS0NBQ0ZMYXllcjo6bGF5ZXIobGF5ZXIpLT5kcmF3SW5D
b250ZXh0KGNvbnRleHQsIGZhbHNlKTsKIH0KIAogc3RhdGljIENGU3RyaW5nUmVmIHRvQ0FDRkxh
eWVyVHlwZShXS0NBQ0ZMYXllcjo6TGF5ZXJUeXBlIHR5cGUpCkBAIC0xNzUsNiArMTc1LDExIEBA
CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAordm9pZCBXS0NBQ0ZMYXllcjo6cmVzaWduUm9v
dExheWVyRm9yQ29udGV4dChDQUNGQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIENBQ0ZDb250
ZXh0U2V0TGF5ZXIoY29udGV4dCwgMCk7Cit9CisKIHZvaWQgV0tDQUNGTGF5ZXI6OnNldE5lZWRz
Q29tbWl0KCkKIHsKICAgICBXS0NBQ0ZMYXllciogcm9vdCA9IHJvb3RMYXllcigpOwpAQCAtMjY0
LDYgKzI2OSwxOSBAQAogICAgIH0KIH0KIAordm9pZCAgV0tDQUNGTGF5ZXI6OnNldFN1YmxheWVy
c0Zyb21MYXllcihXS0NBQ0ZMYXllciogc291cmNlKQoreworICAgIC8vIFdlIHdpbGwgdXNlIHNl
dFN1YmxheWVycygpIGJlY2F1c2UgaXQgcHJvcGVybHkgbnVsbHMKKyAgICAvLyBvdXQgdGhlIHN1
cGVybGF5ZXIgcG9pbnRlci4KKyAgICBWZWN0b3I8UmVmUHRyPFdLQ0FDRkxheWVyPiA+IHN1Ymxh
eWVyczsKKyAgICBzaXplX3QgbiA9IHNvdXJjZS0+bnVtU3VibGF5ZXJzKCk7CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkKKyAgICAgICAgc3VibGF5ZXJzLmFwcGVuZChzb3Vy
Y2UtPnN1YmxheWVyQXRJbmRleChpKSk7CisKKyAgICBzZXRTdWJsYXllcnMoc3VibGF5ZXJzKTsK
K30KKwogdm9pZCBXS0NBQ0ZMYXllcjo6cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKQogewogICAgIFdL
Q0FDRkxheWVyKiBzdXBlcmxheWVyID0gdGhpcy0+c3VwZXJsYXllcigpOwpAQCAtMjc0LDEwICsy
OTIsMTAgQEAKICAgICBzdXBlcmxheWVyLT5zZXROZWVkc0NvbW1pdCgpOwogfQogCi1jb25zdCBX
S0NBQ0ZMYXllciogV0tDQUNGTGF5ZXI6OnN1YmxheWVyQXRJbmRleChpbnQgaW5kZXgpIGNvbnN0
CitXS0NBQ0ZMYXllciogV0tDQUNGTGF5ZXI6OnN1YmxheWVyQXRJbmRleChpbnQgaW5kZXgpIGNv
bnN0CiB7CiAgICAgQ0ZBcnJheVJlZiBzdWJsYXllcnMgPSBDQUNGTGF5ZXJHZXRTdWJsYXllcnMo
bGF5ZXIoKSk7Ci0gICAgaWYgKGluZGV4IDwgMCB8fCBDRkFycmF5R2V0Q291bnQoc3VibGF5ZXJz
KSA8PSBpbmRleCkKKyAgICBpZiAoIXN1YmxheWVycyB8fCBpbmRleCA8IDAgfHwgQ0ZBcnJheUdl
dENvdW50KHN1YmxheWVycykgPD0gaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAg
IHJldHVybiBsYXllcihzdGF0aWNfY2FzdDxDQUNGTGF5ZXJSZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+
KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoc3VibGF5ZXJzLCBpbmRleCkpKSk7CkBAIC0yOTAsNiAr
MzA4LDkgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgQ0ZBcnJheVJlZiBzdWJsYXllcnMg
PSBDQUNGTGF5ZXJHZXRTdWJsYXllcnMobGF5ZXIoKSk7CisgICAgaWYgKCFzdWJsYXllcnMpCisg
ICAgICAgIHJldHVybiAtMTsKKwogICAgIHNpemVfdCBuID0gQ0ZBcnJheUdldENvdW50KHN1Ymxh
eWVycyk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkKQEAgLTMyMSwxOSAr
MzQyLDYgQEAKICAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKLXZvaWQgV0tDQUNGTGF5
ZXI6OnNldEZyYW1lKGNvbnN0IENHUmVjdCYgcmVjdCkKLXsKLSAgICBDR1JlY3Qgb2xkRnJhbWUg
PSBmcmFtZSgpOwotICAgIGlmIChDR1JlY3RFcXVhbFRvUmVjdChyZWN0LCBvbGRGcmFtZSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIENBQ0ZMYXllclNldEZyYW1lKGxheWVyKCksIHJlY3QpOwot
ICAgIHNldE5lZWRzQ29tbWl0KCk7Ci0KLSAgICBpZiAobV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0No
YW5nZSkKLSAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7Ci19Ci0KIHZvaWQgV0tDQUNGTGF5ZXI6
OnNldENvbnRlbnRzR3Jhdml0eShDb250ZW50c0dyYXZpdHlUeXBlIHR5cGUpCiB7CiAgICAgQ0FD
RkxheWVyU2V0Q29udGVudHNHcmF2aXR5KGxheWVyKCksIHRvQ0FDRkNvbnRlbnRzR3Jhdml0eVR5
cGUodHlwZSkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV2ViVGlsZWRM
YXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV2Vi
VGlsZWRMYXllci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9XZWJUaWxlZExheWVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwor
I2luY2x1ZGUgIldlYlRpbGVkTGF5ZXIuaCIKKworI2luY2x1ZGUgIldLQ0FDRkxheWVyUmVuZGVy
ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCit2
b2lkIFdlYlRpbGVkTGF5ZXI6OnRpbGVEaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGxheWVy
LCBDR0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBzdGF0aWNfY2FzdDxXZWJUaWxlZExheWVy
Kj4oQ0FDRkxheWVyR2V0VXNlckRhdGEobGF5ZXIpKS0+ZHJhd1RpbGUobGF5ZXIsIGNvbnRleHQp
OworfQorCitQYXNzUmVmUHRyPFdlYlRpbGVkTGF5ZXI+IFdlYlRpbGVkTGF5ZXI6OmNyZWF0ZShj
b25zdCBDR1NpemUmIHRpbGVTaXplLCBHcmFwaGljc0xheWVyKiBvd25lcikKK3sKKyAgICBpZiAo
IVdLQ0FDRkxheWVyUmVuZGVyZXI6OmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdBdmFpbGFibGUoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJUaWxlZExheWVy
KHRpbGVTaXplLCBvd25lcikpOworfQorCitXZWJUaWxlZExheWVyOjpXZWJUaWxlZExheWVyKGNv
bnN0IENHU2l6ZSYgdGlsZVNpemUsIEdyYXBoaWNzTGF5ZXIqIG93bmVyKQorICAgIDogV2ViTGF5
ZXIoV0tDQUNGTGF5ZXI6OkxheWVyLCBvd25lcikKK3sKKyAgICAvLyBUaWxlZCBsYXllcnMgYXJl
IHBsYWNlZCBpbiBhIGNoaWxkIGxheWVyIHRoYXQgaXMgYWx3YXlzIHRoZSBmaXJzdCBjaGlsZCBv
ZiB0aGUgVGlsZWRMYXllcgorICAgIFJldGFpblB0cjxDQUNGTGF5ZXJSZWY+IHRpbGVzKEFkb3B0
Q0YsIENBQ0ZMYXllckNyZWF0ZShrQ0FDRkxheWVyKSk7CisgICAgQ0FDRkxheWVySW5zZXJ0U3Vi
bGF5ZXIobGF5ZXIoKSwgdGlsZXMuZ2V0KCksIDApOworCisgICAgbV90aWxlU2l6ZSA9IHRpbGVT
aXplOworICAgIHVwZGF0ZVRpbGVzKCk7Cit9CisKK1dlYlRpbGVkTGF5ZXI6On5XZWJUaWxlZExh
eWVyKCkKK3sKK30KKwordm9pZCBXZWJUaWxlZExheWVyOjpzZXRCb3VuZHMoY29uc3QgQ0dSZWN0
JiByZWN0KQoreworICAgIGlmIChDR1JlY3RFcXVhbFRvUmVjdChyZWN0LCBib3VuZHMoKSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFdlYkxheWVyOjpzZXRCb3VuZHMocmVjdCk7CisgICAgdXBk
YXRlVGlsZXMoKTsKK30KKwordm9pZCBXZWJUaWxlZExheWVyOjpzZXRQb3NpdGlvbihjb25zdCBD
R1BvaW50JiBwb2ludCkKK3sKKyAgICBpZiAoQ0dQb2ludEVxdWFsVG9Qb2ludChwb2ludCwgcG9z
aXRpb24oKSkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkxheWVyOjpzZXRQb3NpdGlvbihw
b2ludCk7CisgICAgdXBkYXRlVGlsZXMoKTsKK30KKwordm9pZCBXZWJUaWxlZExheWVyOjpzZXRU
cmFuc2Zvcm0oY29uc3QgQ0FUcmFuc2Zvcm0zRCYgdHJhbnNmb3JtKQoreworICAgIFdlYkxheWVy
OjpzZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICB1cGRhdGVUaWxlcygpOworfQorCit2b2lk
IFdlYlRpbGVkTGF5ZXI6OnNldE5lZWRzRGlzcGxheShjb25zdCBDR1JlY3QqIGRpcnR5UmVjdCkK
K3sKKyAgICAvLyBGSVhNRTogT25seSBzZXROZWVkc0Rpc3BsYXkgZm9yIHRpbGVzIHRoYXQgYXJl
IGN1cnJlbnRseSB2aXNpYmxlCisgICAgaW50IG51bVRpbGVMYXllcnMgPSBudW1UaWxlcygpOwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGlsZUxheWVyczsgKytpKQorICAgICAgICBDQUNG
TGF5ZXJTZXROZWVkc0Rpc3BsYXkodGlsZUF0SW5kZXgoaSksIGRpcnR5UmVjdCk7Cit9CisKK3Np
emVfdCBXZWJUaWxlZExheWVyOjpudW1TdWJsYXllcnMoKSBjb25zdAoreworICAgIEFTU0VSVChX
ZWJMYXllcjo6bnVtU3VibGF5ZXJzKCkgPiAwKTsKKyAgICByZXR1cm4gV2ViTGF5ZXI6Om51bVN1
YmxheWVycygpIC0gMTsKK30KKwordm9pZCBXZWJUaWxlZExheWVyOjpzZXRTdWJsYXllcnNGcm9t
TGF5ZXIoV0tDQUNGTGF5ZXIqIHNvdXJjZSkKK3sKKyAgICAvLyBQcmVzZXJ2ZSB0aGUgdGlsZSBw
YXJlbnQKKyAgICBSZXRhaW5QdHI8Q0FDRkxheWVyUmVmPiBwYXJlbnQgPSB0aWxlUGFyZW50KCk7
CisgICAgV2ViTGF5ZXI6OnNldFN1YmxheWVyc0Zyb21MYXllcihzb3VyY2UpOworICAgIENBQ0ZM
YXllckluc2VydFN1YmxheWVyKGxheWVyKCksIHBhcmVudC5nZXQoKSwgMCk7Cit9CisKK3ZvaWQg
V2ViVGlsZWRMYXllcjo6cmVtb3ZlQWxsU3VibGF5ZXJzKCkKK3sKKyAgICAvLyBQcmVzZXJ2ZSB0
aGUgdGlsZSBwYXJlbnQKKyAgICBSZXRhaW5QdHI8Q0FDRkxheWVyUmVmPiBwYXJlbnQgPSB0aWxl
UGFyZW50KCk7CisgICAgV2ViTGF5ZXI6OnJlbW92ZUFsbFN1YmxheWVycygpOworICAgIENBQ0ZM
YXllckluc2VydFN1YmxheWVyKGxheWVyKCksIHBhcmVudC5nZXQoKSwgMCk7Cit9CisKK3ZvaWQg
V2ViVGlsZWRMYXllcjo6c2V0U3VibGF5ZXJzKGNvbnN0IFZlY3RvcjxSZWZQdHI8V0tDQUNGTGF5
ZXI+ID4mIHN1YmxheWVycykKK3sKKyAgICAvLyBQcmVzZXJ2ZSB0aGUgdGlsZSBwYXJlbnQKKyAg
ICBSZXRhaW5QdHI8Q0FDRkxheWVyUmVmPiBwYXJlbnQgPSB0aWxlUGFyZW50KCk7CisgICAgV2Vi
TGF5ZXI6OnNldFN1YmxheWVycyhzdWJsYXllcnMpOworICAgIENBQ0ZMYXllckluc2VydFN1Ymxh
eWVyKGxheWVyKCksIHBhcmVudC5nZXQoKSwgMCk7Cit9CisKK3ZvaWQgV2ViVGlsZWRMYXllcjo6
aW5zZXJ0U3VibGF5ZXIoUGFzc1JlZlB0cjxXS0NBQ0ZMYXllcj4gbGF5ZXIsIHNpemVfdCBpbmRl
eCkKK3sKKyAgICBXZWJMYXllcjo6aW5zZXJ0U3VibGF5ZXIobGF5ZXIsIGluZGV4ICsgMSk7Cit9
CisKK1dLQ0FDRkxheWVyKiBXZWJUaWxlZExheWVyOjpzdWJsYXllckF0SW5kZXgoaW50IGkpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFdlYkxheWVyOjpzdWJsYXllckF0SW5kZXgoaSArIDEpOworfQor
CitpbnQgV2ViVGlsZWRMYXllcjo6aW5kZXhPZlN1YmxheWVyKGNvbnN0IFdLQ0FDRkxheWVyKiBs
YXllcikKK3sKKyAgICBpbnQgaSA9IFdlYkxheWVyOjppbmRleE9mU3VibGF5ZXIobGF5ZXIpOwor
ICAgIHJldHVybiAoaSA+IDApID8gaSAtIDEgOiAtMTsKK30KKworQ0FDRkxheWVyUmVmIFdlYlRp
bGVkTGF5ZXI6OnRpbGVQYXJlbnQoKSBjb25zdAoreworICAgIENGQXJyYXlSZWYgc3VibGF5ZXJz
ID0gQ0FDRkxheWVyR2V0U3VibGF5ZXJzKGxheWVyKCkpOworICAgIEFTU0VSVChzdWJsYXllcnMg
JiYgQ0ZBcnJheUdldENvdW50KHN1YmxheWVycykgPiAwKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Q0FDRkxheWVyUmVmPihjb25zdF9jYXN0PHZvaWQqPihDRkFycmF5R2V0VmFsdWVBdEluZGV4
KHN1YmxheWVycywgMCkpKTsKK30KKwordm9pZCBXZWJUaWxlZExheWVyOjphZGRUaWxlKCkKK3sK
KyAgICBDQUNGTGF5ZXJSZWYgbGF5ZXJUaWxlUGFyZW50ID0gdGlsZVBhcmVudCgpOworICAgIFJl
dGFpblB0cjxDQUNGTGF5ZXJSZWY+IG5ld0xheWVyKEFkb3B0Q0YsIENBQ0ZMYXllckNyZWF0ZShr
Q0FDRkxheWVyKSk7CisgICAgQ0FDRkxheWVyU2V0QW5jaG9yUG9pbnQobmV3TGF5ZXIuZ2V0KCks
IENHUG9pbnRNYWtlKDAsIDEpKTsKKyAgICBDQUNGTGF5ZXJTZXRVc2VyRGF0YShuZXdMYXllci5n
ZXQoKSwgdGhpcyk7CisgICAgQ0FDRkxheWVyU2V0RGlzcGxheUNhbGxiYWNrKG5ld0xheWVyLmdl
dCgpLCB0aWxlRGlzcGxheUNhbGxiYWNrKTsKKyAgICBDQUNGTGF5ZXJJbnNlcnRTdWJsYXllcih0
aWxlUGFyZW50KCksIG5ld0xheWVyLmdldCgpLCBudW1UaWxlcygpKTsKK30KKwordm9pZCBXZWJU
aWxlZExheWVyOjpyZW1vdmVUaWxlKCkKK3sKKyAgICBDQUNGTGF5ZXJSZW1vdmVGcm9tU3VwZXJs
YXllcih0aWxlQXRJbmRleChudW1UaWxlcygpIC0gMSkpOworfQorCitDQUNGTGF5ZXJSZWYgV2Vi
VGlsZWRMYXllcjo6dGlsZUF0SW5kZXgoaW50IGluZGV4KQoreworICAgIENGQXJyYXlSZWYgc3Vi
bGF5ZXJzID0gQ0FDRkxheWVyR2V0U3VibGF5ZXJzKHRpbGVQYXJlbnQoKSk7CisgICAgaWYgKCFz
dWJsYXllcnMgfHwgaW5kZXggPCAwIHx8IG51bVRpbGVzKCkgPD0gaW5kZXgpCisgICAgICAgIHJl
dHVybiAwOworICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxDQUNGTGF5ZXJSZWY+KGNvbnN0
X2Nhc3Q8dm9pZCo+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoc3VibGF5ZXJzLCBpbmRleCkpKTsK
K30KKworaW50IFdlYlRpbGVkTGF5ZXI6Om51bVRpbGVzKCkgY29uc3QKK3sKKyAgICBDRkFycmF5
UmVmIHN1YmxheWVycyA9IENBQ0ZMYXllckdldFN1YmxheWVycyh0aWxlUGFyZW50KCkpOworICAg
IHJldHVybiBzdWJsYXllcnMgPyBDRkFycmF5R2V0Q291bnQoc3VibGF5ZXJzKSA6IDA7Cit9CisK
K3ZvaWQgV2ViVGlsZWRMYXllcjo6dXBkYXRlVGlsZXMoKQoreworICAgIC8vIEZJWE1FOiBJbiBh
ZGRpdGlvbiB0byByZWRvaW5nIHRoZSBudW1iZXIgb2YgdGlsZXMsIHdlIG5lZWQgdG8gb25seSBy
ZW5kZXIgYW5kIGhhdmUgYmFja2luZworICAgIC8vIHN0b3JlIGZvciB2aXNpYmxlIGxheWVycwor
ICAgIENHUmVjdCBsYXllckJvdW5kcyA9IGJvdW5kcygpOworICAgIGludCBudW1UaWxlc0hvcml6
b250YWwgPSBjZWlsKGxheWVyQm91bmRzLnNpemUud2lkdGggLyAoZmxvYXQpIG1fdGlsZVNpemUu
d2lkdGgpOworICAgIGludCBudW1UaWxlc1ZlcnRpY2FsID0gY2VpbChsYXllckJvdW5kcy5zaXpl
LmhlaWdodCAvIChmbG9hdCkgbV90aWxlU2l6ZS5oZWlnaHQpOworICAgIGludCBudW1UaWxlc1Rv
dGFsID0gbnVtVGlsZXNIb3Jpem9udGFsICogbnVtVGlsZXNWZXJ0aWNhbDsKKworICAgIGludCBu
dW1UaWxlc1RvQ2hhbmdlID0gbnVtVGlsZXNUb3RhbCAtIG51bVRpbGVzKCk7CisgICAgaWYgKG51
bVRpbGVzVG9DaGFuZ2UgPj0gMCkgeworICAgICAgICAvLyBBZGQgbmV3IHRpbGVzCisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGlsZXNUb0NoYW5nZTsgKytpKQorICAgICAgICAgICAg
YWRkVGlsZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFJlbW92ZSBvbGQgdGlsZXMKKyAg
ICAgICAgbnVtVGlsZXNUb0NoYW5nZSA9IC1udW1UaWxlc1RvQ2hhbmdlOworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG51bVRpbGVzVG9DaGFuZ2U7ICsraSkKKyAgICAgICAgICAgIHJlbW92
ZVRpbGUoKTsKKyAgICB9CisKKyAgICAvLyBTZXQgY29vcmRpbmF0ZXMgZm9yIGFsbCB0aWxlcwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGlsZXNIb3Jpem9udGFsOyArK2kpIHsKKyAgICAg
ICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1UaWxlc1ZlcnRpY2FsOyArK2opIHsKKyAgICAgICAg
ICAgIENBQ0ZMYXllclJlZiB0aWxlID0gdGlsZUF0SW5kZXgoaSAqIG51bVRpbGVzVmVydGljYWwg
KyBqKTsKKyAgICAgICAgICAgIENBQ0ZMYXllclNldFBvc2l0aW9uKHRpbGUsIENHUG9pbnRNYWtl
KGkgKiBtX3RpbGVTaXplLndpZHRoLCBqICogbV90aWxlU2l6ZS5oZWlnaHQpKTsKKyAgICAgICAg
ICAgIGludCB3aWR0aCA9IG1pbihtX3RpbGVTaXplLndpZHRoLCBsYXllckJvdW5kcy5zaXplLndp
ZHRoIC0gaSAqIG1fdGlsZVNpemUud2lkdGgpOworICAgICAgICAgICAgaW50IGhlaWdodCA9IG1p
bihtX3RpbGVTaXplLmhlaWdodCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQgLSBqICogbV90aWxl
U2l6ZS5oZWlnaHQpOworICAgICAgICAgICAgQ0FDRkxheWVyU2V0Qm91bmRzKHRpbGUsIENHUmVj
dE1ha2UoMCwgMCwgd2lkdGgsIGhlaWdodCkpOworCisgICAgICAgICAgICAvLyBGbGlwIFkKKyAg
ICAgICAgICAgIENBVHJhbnNmb3JtM0QgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRE1ha2VTY2Fs
ZSgxLCAtMSwgMSk7CisgICAgICAgICAgICBDQVRyYW5zZm9ybTNEVHJhbnNsYXRlKHRyYW5zZm9y
bSwgMCwgaGVpZ2h0LCAwKTsKKyAgICAgICAgICAgIENBQ0ZMYXllclNldFRyYW5zZm9ybSh0aWxl
LCB0cmFuc2Zvcm0pOworCisgICAgICAgICAgICBTdHJpbmcgbmFtZSA9ICJUaWxlICgiICsgU3Ry
aW5nOjpudW1iZXIoaSkgKyAiLCIgKyBTdHJpbmc6Om51bWJlcihqKSArICIpIjsKKyAgICAgICAg
ICAgIENBQ0ZMYXllclNldE5hbWUodGlsZSwgUmV0YWluUHRyPENGU3RyaW5nUmVmPihBZG9wdENG
LCBuYW1lLmNyZWF0ZUNGU3RyaW5nKCkpLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBXZWJUaWxlZExheWVyOjpkcmF3VGlsZShDQUNGTGF5ZXJSZWYgdGlsZSwgQ0dDb250ZXh0
UmVmIGNvbnRleHQpCit7CisgICAgQ0dSZWN0IHRpbGVCb3VuZHMgPSBDQUNGTGF5ZXJHZXRCb3Vu
ZHModGlsZSk7CisgICAgQ0dQb2ludCB0aWxlUG9zaXRpb24gPSBDQUNGTGF5ZXJHZXRQb3NpdGlv
bih0aWxlKTsKKworICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisKKyAgICAvL2lu
dCB5ID0gYm91bmRzKCkuc2l6ZS5oZWlnaHQgLSB0aWxlUG9zaXRpb24ueSAtIHRpbGVCb3VuZHMu
c2l6ZS5oZWlnaHQ7CisgICAgaW50IHkgPSB0aWxlUG9zaXRpb24ueTsKKworICAgIC8vIFRyYW5z
Zm9ybSBjb250ZXh0IHRvIGJlIGF0IHRoZSBvcmlnaW4gb2YgdGhlIHBhcmVudCBsYXllcgorICAg
IENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAtdGlsZVBvc2l0aW9uLngsIC15KTsKKwor
ICAgIC8vIFNldCB0aGUgY29udGV4dCBjbGlwcGluZyByZWN0YW5nbGUgdG8gdGhlIGN1cnJlbnQg
dGlsZQorICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0TWFrZSh0aWxlUG9z
aXRpb24ueCwgeSwgdGlsZUJvdW5kcy5zaXplLndpZHRoLCB0aWxlQm91bmRzLnNpemUuaGVpZ2h0
KSk7CisKKyAgICAvLyBEcmF3IHRoZSB0aWxlCisgICAgZHJhd0luQ29udGV4dChjb250ZXh0LCB0
cnVlKTsKKworICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Cit9CisKK30KKwor
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKClByb3BlcnR5IGNoYW5nZXMg
b246IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dlYlRpbGVkTGF5ZXIuY3BwCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJDQUNGLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyQ0FDRi5jcHAJKHJldmlzaW9u
IDU5NjI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NMYXllckNB
Q0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw4IEBACiAjaW5jbHVkZSAiSW1hZ2Uu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIK
LSNpbmNsdWRlICJXS0NBQ0ZMYXllci5oIgorI2luY2x1ZGUgIldlYkxheWVyLmgiCisjaW5jbHVk
ZSAiV2ViVGlsZWRMYXllci5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1
ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBA
IC00NSwxMTYgKzQ2LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViTGF5
ZXIgOiBwdWJsaWMgV0tDQUNGTGF5ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdLQ0FDRkxheWVyPiBjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgR3JhcGhpY3NMYXllckNB
Q0YqIG93bmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJMYXllcihs
YXllclR5cGUsIG93bmVyKSk7Ci0gICAgfQorLy8gVGhlIHRocmVzaG9sZCB3aWR0aCBvciBoZWln
aHQgYWJvdmUgd2hpY2ggYSB0aWxlZCBsYXllciB3aWxsIGJlIHVzZWQuIFRoaXMgc2hvdWxkIGJl
CisvLyBsYXJnZSBlbm91Z2ggdG8gYXZvaWQgdGlsZWQgbGF5ZXJzIGZvciBtb3N0IEdyYXBoaWNz
TGF5ZXJzLCBidXQgbGVzcyB0aGFuIHRoZSBEM0QKKy8vIHRleHR1cmUgc2l6ZSBsaW1pdCBvbiBh
bGwgc3VwcG9ydGVkIGhhcmR3YXJlLgorc3RhdGljIGNvbnN0IGludCBjTWF4UGl4ZWxEaW1lbnNp
b24gPSAyMDAwOwogCi0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBDR1Jl
Y3QqIGRpcnR5UmVjdCkKLSAgICB7Ci0gICAgICAgIGlmIChtX293bmVyKSB7Ci0gICAgICAgICAg
ICBpZiAobV9vd25lci0+c2hvd1JlcGFpbnRDb3VudGVyKCkpIHsKLSAgICAgICAgICAgICAgICBD
R1JlY3QgbGF5ZXJCb3VuZHMgPSBib3VuZHMoKTsKLSAgICAgICAgICAgICAgICBDR1JlY3QgcmVw
YWludENvdW50ZXJSZWN0ID0gbGF5ZXJCb3VuZHM7Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXNz
dW1lIGEgbWF4aW11bSBvZiA0IGRpZ2l0cyBhbmQgYSBmb250IHNpemUgb2YgMjIuCi0gICAgICAg
ICAgICAgICAgcmVwYWludENvdW50ZXJSZWN0LnNpemUud2lkdGggPSA0ODsKLSAgICAgICAgICAg
ICAgICByZXBhaW50Q291bnRlclJlY3Quc2l6ZS5oZWlnaHQgPSAyNTsKLSAgICAgICAgICAgICAg
ICBpZiAobV9vd25lci0+Y29udGVudHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duKQotICAgICAgICAgICAgICAgICAg
ICByZXBhaW50Q291bnRlclJlY3Qub3JpZ2luLnkgPSBsYXllckJvdW5kcy5zaXplLmhlaWdodCAt
IChsYXllckJvdW5kcy5vcmlnaW4ueSArIHJlcGFpbnRDb3VudGVyUmVjdC5zaXplLmhlaWdodCk7
Ci0gICAgICAgICAgICAgICAgV0tDQUNGTGF5ZXI6OnNldE5lZWRzRGlzcGxheSgmcmVwYWludENv
dW50ZXJSZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkaXJ0eVJlY3QgJiYg
bV9vd25lci0+Y29udGVudHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6
OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duKSB7Ci0gICAgICAgICAgICAgICAgQ0dSZWN0
IGZsaXBwZWREaXJ0eVJlY3QgPSAqZGlydHlSZWN0OwotICAgICAgICAgICAgICAgIGZsaXBwZWRE
aXJ0eVJlY3Qub3JpZ2luLnkgPSBib3VuZHMoKS5zaXplLmhlaWdodCAtIChmbGlwcGVkRGlydHlS
ZWN0Lm9yaWdpbi55ICsgZmxpcHBlZERpcnR5UmVjdC5zaXplLmhlaWdodCk7Ci0gICAgICAgICAg
ICAgICAgV0tDQUNGTGF5ZXI6OnNldE5lZWRzRGlzcGxheSgmZmxpcHBlZERpcnR5UmVjdCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IFdLQ0FDRkxheWVyOjpzZXROZWVkc0Rpc3BsYXkoZGlydHlSZWN0KTsKLSAgICB9CisvLyBUaGUg
d2lkdGggYW5kIGhlaWdodCBvZiBhIHNpbmdsZSB0aWxlIGluIGEgdGlsZWQgbGF5ZXIuIFNob3Vs
ZCBiZSBsYXJnZSBlbm91Z2ggdG8KKy8vIGF2b2lkIGxvdHMgb2Ygc21hbGwgdGlsZXMgKGFuZCB0
aGVyZWZvcmUgbG90cyBvZiBkcmF3aW5nIGNhbGxiYWNrcyksIGJ1dCBzbWFsbCBlbm91Z2gKKy8v
IHRvIGtlZXAgdGhlIG92ZXJhbGwgdGlsZSBjb3N0IGxvdy4KK3N0YXRpYyBjb25zdCBpbnQgY1Rp
bGVkTGF5ZXJUaWxlU2l6ZSA9IDUxMjsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3SW5Db250ZXh0
KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgaWYgKCFt
X293bmVyKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENHQ29udGV4dFNhdmVHU3Rh
dGUoY29udGV4dCk7Ci0KLSAgICAgICAgQ0dSZWN0IGxheWVyQm91bmRzID0gYm91bmRzKCk7Ci0g
ICAgICAgIGlmIChtX293bmVyLT5jb250ZW50c09yaWVudGF0aW9uKCkgPT0gV2ViQ29yZTo6R3Jh
cGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc1RvcERvd24pIHsKLSAgICAgICAgICAg
IENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKLSAgICAgICAgICAgIENHQ29udGV4
dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKG1fb3duZXItPmNsaWVudCgpKSB7Ci0gICAgICAgICAgICBH
cmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwotCi0gICAgICAgICAgICAv
LyBJdCdzIGltcG9ydGFudCB0byBnZXQgdGhlIGNsaXAgZnJvbSB0aGUgY29udGV4dCwgYmVjYXVz
ZSBpdCBtYXkgYmUgc2lnbmlmaWNhbnRseQotICAgICAgICAgICAgLy8gc21hbGxlciB0aGFuIHRo
ZSBsYXllciBib3VuZHMgKGUuZy4gdGlsZWQgbGF5ZXJzKQotICAgICAgICAgICAgQ0dSZWN0IGNs
aXBCb3VuZHMgPSBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCk7Ci0gICAgICAg
ICAgICBJbnRSZWN0IGNsaXAoZW5jbG9zaW5nSW50UmVjdChjbGlwQm91bmRzKSk7Ci0gICAgICAg
ICAgICBtX293bmVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhncmFwaGljc0NvbnRleHQs
IGNsaXApOwotICAgICAgICB9Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgICAgICAgICAvLyBGSVhNRTogaWRl
YWxseSB3ZSdkIGF2b2lkIGNhbGxpbmcgLXNldE5lZWRzRGlzcGxheSBvbiBhIGxheWVyIHRoYXQg
aXMgYSBwbGFpbiBjb2xvciwKLSAgICAgICAgICAgIC8vIHNvIENBIG5ldmVyIG1ha2VzIGJhY2tp
bmcgc3RvcmUgZm9yIGl0ICh3aGljaCBpcyB3aGF0IC1zZXROZWVkc0Rpc3BsYXkgd2lsbCBkbyBh
Ym92ZSkuCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMC4w
ZiwgMS4wZiwgMC4wZiwgMS4wZik7Ci0gICAgICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250
ZXh0LCBsYXllckJvdW5kcyk7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGlmIChtX293
bmVyLT5zaG93UmVwYWludENvdW50ZXIoKSkgewotICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBT
dHJpbmc6OmZvcm1hdCgiJWQiLCBtX293bmVyLT5pbmNyZW1lbnRSZXBhaW50Q291bnQoKSk7Owot
Ci0gICAgICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwotICAgICAgICAgICAg
Q0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEuMGYsIDAuMGYsIDAuMGYsIDAuOGYp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBDR1JlY3QgYUJvdW5kcyA9IGxheWVyQm91bmRz
OwotCi0gICAgICAgICAgICBhQm91bmRzLnNpemUud2lkdGggPSAxMCArIDEyICogdGV4dC5sZW5n
dGgoKTsKLSAgICAgICAgICAgIGFCb3VuZHMuc2l6ZS5oZWlnaHQgPSAyNTsKLSAgICAgICAgICAg
IENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIGFCb3VuZHMpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKLQotICAgICAgICAgICAgTk9OQ0xJRU5UTUVU
UklDUyBtZXRyaWNzOwotICAgICAgICAgICAgbWV0cmljcy5jYlNpemUgPSBzaXplb2YobWV0cmlj
cyk7Ci0gICAgICAgICAgICBTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUTk9OQ0xJRU5UTUVU
UklDUywgbWV0cmljcy5jYlNpemUsICZtZXRyaWNzLCAwKTsKLSAgICAgICAgICAgIEZvbnRGYW1p
bHkgZmFtaWx5OwotICAgICAgICAgICAgZmFtaWx5LnNldEZhbWlseShtZXRyaWNzLmxmU21DYXB0
aW9uRm9udC5sZkZhY2VOYW1lKTsKLSAgICAgICAgICAgIGRlc2Muc2V0RmFtaWx5KGZhbWlseSk7
Ci0KLSAgICAgICAgICAgIGRlc2Muc2V0Q29tcHV0ZWRTaXplKDIyKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgRm9udCBmb250ID0gRm9udChkZXNjLCAwLCAwKTsKLSAgICAgICAgICAgIGZv
bnQudXBkYXRlKDApOwotCi0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgY2coY29udGV4dCk7
Ci0gICAgICAgICAgICBjZy5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrLCBEZXZpY2VDb2xvclNw
YWNlKTsKLSAgICAgICAgICAgIGNnLmRyYXdUZXh0KGZvbnQsIFRleHRSdW4odGV4dCksIEludFBv
aW50KGFCb3VuZHMub3JpZ2luLnggKyAzLCBhQm91bmRzLm9yaWdpbi55ICsgMjApKTsKLQotICAg
ICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsgICAgICAgIAotICAgICAg
ICB9Ci0KLSAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKLSAgICB9Ci0K
LXByb3RlY3RlZDoKLSAgICBXZWJMYXllcihMYXllclR5cGUgbGF5ZXJUeXBlLCBHcmFwaGljc0xh
eWVyQ0FDRiogb3duZXIpCi0gICAgIDogV0tDQUNGTGF5ZXIobGF5ZXJUeXBlKQotICAgICAsIG1f
b3duZXIob3duZXIpCi0gICAgewotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0xheWVy
KiBtX293bmVyOwotfTsKLQogc3RhdGljIGlubGluZSB2b2lkIGNvcHlUcmFuc2Zvcm0oQ0FUcmFu
c2Zvcm0zRCYgdG9UM0QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQogewogICAgIHRv
VDNELm0xMSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQodC5tMTEoKSk7CkBAIC01MzcsNiArNDM4
LDY0IEBACiAgICAgfQogfQogCitib29sIEdyYXBoaWNzTGF5ZXJDQUNGOjpyZXF1aXJlc1RpbGVk
TGF5ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplKSBjb25zdAoreworICAgIGlmICghbV9kcmF3c0Nv
bnRlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBjYXRjaCB6ZXJv
LXNpemUgaGVpZ2h0IG9yIHdpZHRoIGhlcmUgKG9yIGVhcmxpZXIpPworICAgIHJldHVybiBzaXpl
LndpZHRoKCkgPiBjTWF4UGl4ZWxEaW1lbnNpb24gfHwgc2l6ZS5oZWlnaHQoKSA+IGNNYXhQaXhl
bERpbWVuc2lvbjsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ0FDRjo6c3dhcEZyb21PclRvVGls
ZWRMYXllcihib29sIHVzZVRpbGVkTGF5ZXIpCit7CisgICAgaWYgKHVzZVRpbGVkTGF5ZXIgPT0g
bV91c2luZ1RpbGVkTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIENHU2l6ZSB0aWxlU2l6
ZSA9IENHU2l6ZU1ha2UoY1RpbGVkTGF5ZXJUaWxlU2l6ZSwgY1RpbGVkTGF5ZXJUaWxlU2l6ZSk7
CisKKyAgICBSZWZQdHI8V0tDQUNGTGF5ZXI+IG9sZExheWVyID0gbV9sYXllcjsKKyAgICBpZiAo
dXNlVGlsZWRMYXllcikKKyAgICAgICAgbV9sYXllciA9IFdlYlRpbGVkTGF5ZXI6OmNyZWF0ZSh0
aWxlU2l6ZSwgdGhpcyk7CisgICAgZWxzZQorICAgICAgICBtX2xheWVyID0gV2ViTGF5ZXI6OmNy
ZWF0ZShXS0NBQ0ZMYXllcjo6TGF5ZXIsIHRoaXMpOworICAgIAorICAgIG1fdXNpbmdUaWxlZExh
eWVyID0gdXNlVGlsZWRMYXllcjsKKworICAgIGlmICh1c2VUaWxlZExheWVyKSB7CisgICAgICAg
IGlmIChHcmFwaGljc0xheWVyOjpjb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24oKSA9
PSBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzQm90dG9tVXApCisgICAgICAg
ICAgICBtX2xheWVyLT5zZXRDb250ZW50c0dyYXZpdHkoV0tDQUNGTGF5ZXI6OkJvdHRvbUxlZnQp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2xheWVyLT5zZXRDb250ZW50c0dyYXZpdHko
V0tDQUNGTGF5ZXI6OlRvcExlZnQpOworICAgIH0KKyAgICAKKyAgICBtX2xheWVyLT5zZXRTdWJs
YXllcnNGcm9tTGF5ZXIob2xkTGF5ZXIuZ2V0KCkpOworICAgIGlmIChvbGRMYXllci0+c3VwZXJs
YXllcigpKQorICAgICAgICBvbGRMYXllci0+c3VwZXJsYXllcigpLT5yZXBsYWNlU3VibGF5ZXIo
b2xkTGF5ZXIuZ2V0KCksIG1fbGF5ZXIuZ2V0KCkpOworICAgIAorICAgIHVwZGF0ZUxheWVyUG9z
aXRpb24oKTsKKyAgICB1cGRhdGVMYXllclNpemUoKTsKKyAgICB1cGRhdGVBbmNob3JQb2ludCgp
OworICAgIHVwZGF0ZVRyYW5zZm9ybSgpOworICAgIHVwZGF0ZUNoaWxkcmVuVHJhbnNmb3JtKCk7
CisgICAgdXBkYXRlTWFza3NUb0JvdW5kcygpOworICAgIHVwZGF0ZUNvbnRlbnRzT3BhcXVlKCk7
CisgICAgdXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCk7CisgICAgdXBkYXRlTGF5ZXJCYWNrZ3Jv
dW5kQ29sb3IoKTsKKyAgICAKKyAgICB1cGRhdGVPcGFjaXR5T25MYXllcigpOworICAgIAorI2lm
bmRlZiBOREVCVUcKKyAgICBTdHJpbmcgbmFtZSA9IFN0cmluZzo6Zm9ybWF0KCJDQUxheWVyKCVw
KSBHcmFwaGljc0xheWVyKCVwKSAlcyIsIG1fbGF5ZXIuZ2V0KCksIHRoaXMsIG1fdXNpbmdUaWxl
ZExheWVyID8gIltUaWxlZCBMYXllcl0gIiA6ICIiKSArIG1fbmFtZTsKKyAgICBtX2xheWVyLT5z
ZXROYW1lKG5hbWUpOworI2VuZGlmCisKKyAgICAvLyBuZWVkIHRvIHRlbGwgbmV3IGxheWVyIHRv
IGRyYXcgaXRzZWxmCisgICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgCisgICAgdXBkYXRlRGVi
dWdJbmRpY2F0b3JzKCk7Cit9CisKIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0
ZXNPcmllbnRhdGlvbiBHcmFwaGljc0xheWVyQ0FDRjo6ZGVmYXVsdENvbnRlbnRzT3JpZW50YXRp
b24oKSBjb25zdAogewogICAgIHJldHVybiBDb21wb3NpdGluZ0Nvb3JkaW5hdGVzVG9wRG93bjsK
QEAgLTYwMCw2ICs1NTksMTAgQEAKICAgICAgICAgbV9sYXllci0+c2V0UG9zaXRpb24oY2VudGVy
UG9pbnQpOwogICAgIH0KICAgICAKKyAgICBib29sIG5lZWRUaWxlZExheWVyID0gcmVxdWlyZXNU
aWxlZExheWVyKG1fc2l6ZSk7CisgICAgaWYgKG5lZWRUaWxlZExheWVyICE9IG1fdXNpbmdUaWxl
ZExheWVyKQorICAgICAgICBzd2FwRnJvbU9yVG9UaWxlZExheWVyKG5lZWRUaWxlZExheWVyKTsK
KyAgICAKICAgICBtX2xheWVyLT5zZXRCb3VuZHMocmVjdCk7CiAgICAgCiAgICAgLy8gTm90ZSB0
aGF0IHdlIGRvbid0IHJlc2l6ZSBtX2NvbnRlbnRzTGF5ZXIuIEl0J3MgdXAgdGhlIGNhbGxlciB0
byBkbyB0aGF0LgpAQCAtNjk5LDYgKzY2MiwxMCBAQAogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQUNG
Ojp1cGRhdGVMYXllckRyYXdzQ29udGVudCgpCiB7CisgICAgYm9vbCBuZWVkVGlsZWRMYXllciA9
IHJlcXVpcmVzVGlsZWRMYXllcihtX3NpemUpOworICAgIGlmIChuZWVkVGlsZWRMYXllciAhPSBt
X3VzaW5nVGlsZWRMYXllcikKKyAgICAgICAgc3dhcEZyb21PclRvVGlsZWRMYXllcihuZWVkVGls
ZWRMYXllcik7CisKICAgICBpZiAobV9kcmF3c0NvbnRlbnQpCiAgICAgICAgIG1fbGF5ZXItPnNl
dE5lZWRzRGlzcGxheSgpOwogICAgIGVsc2UKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1dlYkxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9XZWJMYXllci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9XZWJMYXllci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisK
KyNpbmNsdWRlICJXZWJMYXllci5oIgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2Ug
c3RkOworCit2b2lkIFdlYkxheWVyOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgQ0dSZWN0KiBkaXJ0
eVJlY3QpCit7CisgICAgaWYgKG1fb3duZXIpIHsKKyAgICAgICAgaWYgKG1fb3duZXItPnNob3dS
ZXBhaW50Q291bnRlcigpKSB7CisgICAgICAgICAgICBDR1JlY3QgbGF5ZXJCb3VuZHMgPSBib3Vu
ZHMoKTsKKyAgICAgICAgICAgIENHUmVjdCByZXBhaW50Q291bnRlclJlY3QgPSBsYXllckJvdW5k
czsKKyAgICAgICAgICAgIC8vIFdlIGFzc3VtZSBhIG1heGltdW0gb2YgNCBkaWdpdHMgYW5kIGEg
Zm9udCBzaXplIG9mIDIyLgorICAgICAgICAgICAgcmVwYWludENvdW50ZXJSZWN0LnNpemUud2lk
dGggPSA0ODsKKyAgICAgICAgICAgIHJlcGFpbnRDb3VudGVyUmVjdC5zaXplLmhlaWdodCA9IDI1
OworICAgICAgICAgICAgaWYgKG1fb3duZXItPmNvbnRlbnRzT3JpZW50YXRpb24oKSA9PSBXZWJD
b3JlOjpHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzVG9wRG93bikKKyAgICAg
ICAgICAgICAgICByZXBhaW50Q291bnRlclJlY3Qub3JpZ2luLnkgPSBsYXllckJvdW5kcy5zaXpl
LmhlaWdodCAtIChsYXllckJvdW5kcy5vcmlnaW4ueSArIHJlcGFpbnRDb3VudGVyUmVjdC5zaXpl
LmhlaWdodCk7CisgICAgICAgICAgICBXS0NBQ0ZMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCZyZXBh
aW50Q291bnRlclJlY3QpOworICAgICAgICB9CisgICAgICAgIGlmIChkaXJ0eVJlY3QgJiYgbV9v
d25lci0+Y29udGVudHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duKSB7CisgICAgICAgICAgICBDR1JlY3QgZmxpcHBl
ZERpcnR5UmVjdCA9ICpkaXJ0eVJlY3Q7CisgICAgICAgICAgICBmbGlwcGVkRGlydHlSZWN0Lm9y
aWdpbi55ID0gYm91bmRzKCkuc2l6ZS5oZWlnaHQgLSAoZmxpcHBlZERpcnR5UmVjdC5vcmlnaW4u
eSArIGZsaXBwZWREaXJ0eVJlY3Quc2l6ZS5oZWlnaHQpOworICAgICAgICAgICAgV0tDQUNGTGF5
ZXI6OnNldE5lZWRzRGlzcGxheSgmZmxpcHBlZERpcnR5UmVjdCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisgICAgV0tDQUNGTGF5ZXI6OnNldE5lZWRzRGlzcGxheShk
aXJ0eVJlY3QpOworfQorCit2b2lkIFdlYkxheWVyOjpkcmF3SW5Db250ZXh0KFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBib29sIGZsaXB5KQoreworICAgIGlmICghbV9vd25lcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKKwor
ICAgIENHUmVjdCBsYXllckJvdW5kcyA9IGJvdW5kcygpOworICAgIGlmICgobV9vd25lci0+Y29u
dGVudHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0ZXNUb3BEb3duKSBeIGZsaXB5KSB7CisgICAgICAgIENHQ29udGV4dFNjYWxlQ1RN
KGNvbnRleHQsIDEsIC0xKTsKKyAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQs
IDAsIC1sYXllckJvdW5kcy5zaXplLmhlaWdodCk7CisgICAgfQorCisgICAgaWYgKG1fb3duZXIt
PmNsaWVudCgpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29u
dGV4dCk7CisKKyAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZyb20g
dGhlIGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5IGJlIHNpZ25pZmljYW50bHkKKyAgICAgICAgLy8g
c21hbGxlciB0aGFuIHRoZSBsYXllciBib3VuZHMgKGUuZy4gdGlsZWQgbGF5ZXJzKQorICAgICAg
ICBDR1JlY3QgY2xpcEJvdW5kcyA9IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0
KTsKKyAgICAgICAgSW50UmVjdCBjbGlwKGVuY2xvc2luZ0ludFJlY3QoY2xpcEJvdW5kcykpOwor
ICAgICAgICBtX293bmVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhncmFwaGljc0NvbnRl
eHQsIGNsaXApOworICAgIH0KKyNpZm5kZWYgTkRFQlVHCisgICAgZWxzZSB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIC8vIEZJWE1FOiBpZGVhbGx5IHdlJ2QgYXZv
aWQgY2FsbGluZyAtc2V0TmVlZHNEaXNwbGF5IG9uIGEgbGF5ZXIgdGhhdCBpcyBhIHBsYWluIGNv
bG9yLAorICAgICAgICAvLyBzbyBDQSBuZXZlciBtYWtlcyBiYWNraW5nIHN0b3JlIGZvciBpdCAo
d2hpY2ggaXMgd2hhdCAtc2V0TmVlZHNEaXNwbGF5IHdpbGwgZG8gYWJvdmUpLgorICAgICAgICBD
R0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMC4wZiwgMS4wZiwgMC4wZiwgMS4wZik7
CisgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIGxheWVyQm91bmRzKTsKKyAgICB9
CisjZW5kaWYKKworICAgIGlmIChtX293bmVyLT5zaG93UmVwYWludENvdW50ZXIoKSkgeworICAg
ICAgICBTdHJpbmcgdGV4dCA9IFN0cmluZzo6Zm9ybWF0KCIlZCIsIG1fb3duZXItPmluY3JlbWVu
dFJlcGFpbnRDb3VudCgpKTs7CisKKyAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0
KTsKKyAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEuMGYsIDAuMGYs
IDAuMGYsIDAuOGYpOworICAgICAgICAKKyAgICAgICAgQ0dSZWN0IGFCb3VuZHMgPSBsYXllckJv
dW5kczsKKworICAgICAgICBhQm91bmRzLnNpemUud2lkdGggPSAxMCArIDEyICogdGV4dC5sZW5n
dGgoKTsKKyAgICAgICAgYUJvdW5kcy5zaXplLmhlaWdodCA9IDI1OworICAgICAgICBDR0NvbnRl
eHRGaWxsUmVjdChjb250ZXh0LCBhQm91bmRzKTsKKyAgICAgICAgCisgICAgICAgIEZvbnREZXNj
cmlwdGlvbiBkZXNjOworCisgICAgICAgIE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsKKyAgICAg
ICAgbWV0cmljcy5jYlNpemUgPSBzaXplb2YobWV0cmljcyk7CisgICAgICAgIFN5c3RlbVBhcmFt
ZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBtZXRyaWNzLmNiU2l6ZSwgJm1ldHJp
Y3MsIDApOworICAgICAgICBGb250RmFtaWx5IGZhbWlseTsKKyAgICAgICAgZmFtaWx5LnNldEZh
bWlseShtZXRyaWNzLmxmU21DYXB0aW9uRm9udC5sZkZhY2VOYW1lKTsKKyAgICAgICAgZGVzYy5z
ZXRGYW1pbHkoZmFtaWx5KTsKKworICAgICAgICBkZXNjLnNldENvbXB1dGVkU2l6ZSgyMik7Cisg
ICAgICAgIAorICAgICAgICBGb250IGZvbnQgPSBGb250KGRlc2MsIDAsIDApOworICAgICAgICBm
b250LnVwZGF0ZSgwKTsKKworICAgICAgICBHcmFwaGljc0NvbnRleHQgY2coY29udGV4dCk7Cisg
ICAgICAgIGNnLnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIERldmljZUNvbG9yU3BhY2UpOwor
ICAgICAgICBjZy5kcmF3VGV4dChmb250LCBUZXh0UnVuKHRleHQpLCBJbnRQb2ludChhQm91bmRz
Lm9yaWdpbi54ICsgMywgYUJvdW5kcy5vcmlnaW4ueSArIDIwKSk7CisKKyAgICAgICAgQ0dDb250
ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsgICAgICAgIAorICAgIH0KKworICAgIENHQ29udGV4
dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Cit9CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1dlYkxheWVyLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJs
ZQogICArICoKCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vY29tcG9zaXRpbmcvaHVn
ZS1sYXllci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2luL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACitUaGUgeWVsbG93IGJveCBzaG91bGQg
YmUgbGFyZ2UgZW5vdWdoIHRvIHNjcm9sbCBvZmYgdGhlIGJvdHRvbS4gVGhlcmUgc2hvdWxkIGJl
IGEgcmVkIGJveCBvbiB0aGUgZmlyc3QgcGFnZSBhbmQgYSBibHVlIGJveCBuZWFyIHRoZSBib3R0
b20gb2YgdGhlIHllbGxvdyBib3guIFRoaXMgdGVzdHMgdGhhdCB3ZSBjYW4gc3VwcG9ydCB2ZXJ5
IGxhcmdlIGNvbXBvc2l0aW5nIGxheWVycy4KKworKEdyYXBoaWNzTGF5ZXIKKyAgKHBvc2l0aW9u
IDAuMDAgMC4wMCkKKyAgKGFuY2hvciAwLjUwIDAuNTApCisgIChib3VuZHMgNzg1LjAwIDUxMTEu
MDApCisgIChvcGFjaXR5IDEuMDApCisgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgKHByZXNlcnZl
czNEIDApCisgIChkcmF3c0NvbnRlbnQgMCkKKyAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxl
KQorICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgIChj
aGlsZHJlbiAxCisgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgIChwb3NpdGlvbiAwLjAwIDAuMDAp
CisgICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAgIChib3VuZHMgNzg1LjAwIDUxMTEuMDAp
CisgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAg
KHByZXNlcnZlczNEIDApCisgICAgICAoZHJhd3NDb250ZW50IDApCisgICAgICAoYmFja2ZhY2VW
aXNpYmlsaXR5IHZpc2libGUpCisgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAgICAo
dHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQor
ICAgICAgKGNoaWxkcmVuIDEKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAocG9z
aXRpb24gOC4wMCA2OC4wMCkKKyAgICAgICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAgICAg
ICAoYm91bmRzIDUwMi4wMCA1MDAyLjAwKQorICAgICAgICAgIChvcGFjaXR5IDEuMDApCisgICAg
ICAgICAgKHVzaW5nVGlsZWRMYXllciAxKQorICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAg
ICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZp
c2libGUpCisgICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAgICh0cmFu
c2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQor
ICAgICAgICApCisgICAgICApCisgICAgKQorICApCispCisKSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbi9jb21wb3NpdGluZy9odWdlLWxheWVyLWFkZC1yZW1vdmUtY2hpbGQtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9jb21wb3NpdGlu
Zy9odWdlLWxheWVyLWFkZC1yZW1vdmUtY2hpbGQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItYWRkLXJl
bW92ZS1jaGlsZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM2IEBACitU
aGUgeWVsbG93IGJveCBzaG91bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIHNjcm9sbCBvZmYgdGhlIGJv
dHRvbS4gQXQgdGhlIHN0YXJ0IHRoZXJlIHNob3VsZCBiZSBubyBjaGlsZC4gQWZ0ZXIgMTAwbXMg
YSByZWQgYm94IGlzIGFkZGVkIGFuZCBhZnRlciAxMDBtcyBtb3JlIGl0IHNob3VsZCBiZSByZW1v
dmVkLiBUaGlzIHRlc3RzIHRoYXQgd2UgY2FuIHN1cHBvcnQgdmVyeSBsYXJnZSBjb21wb3NpdGlu
ZyBsYXllcnMgd2l0aCBkeW5hbWljYWxseSBhZGRlZCBhbmQgcmVtb3ZlZCBjaGlsZCBjb21wb3Np
dGluZyBsYXllcnMuCisKK0ZpcnN0IChubyBjaGlsZHJlbik6CisoR3JhcGhpY3NMYXllcgorICAo
cG9zaXRpb24gMC4wMCAwLjAwKQorICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgKGJvdW5kcyA3ODUu
MDAgNTEyOS4wMCkKKyAgKG9wYWNpdHkgMS4wMCkKKyAgKHVzaW5nVGlsZWRMYXllciAwKQorICAo
cHJlc2VydmVzM0QgMCkKKyAgKGRyYXdzQ29udGVudCAwKQorICAoYmFja2ZhY2VWaXNpYmlsaXR5
IHZpc2libGUpCisgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgKHRyYW5zZm9ybSBpZGVudGl0
eSkKKyAgKGNoaWxkcmVuIDEKKyAgICAoR3JhcGhpY3NMYXllcgorICAgICAgKHBvc2l0aW9uIDAu
MDAgMC4wMCkKKyAgICAgIChhbmNob3IgMC41MCAwLjUwKQorICAgICAgKGJvdW5kcyA3ODUuMDAg
NTEyOS4wMCkKKyAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAodXNpbmdUaWxlZExheWVyIDAp
CisgICAgICAocHJlc2VydmVzM0QgMCkKKyAgICAgIChkcmF3c0NvbnRlbnQgMCkKKyAgICAgIChi
YWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkK
KyAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRl
bnRpdHkpCisgICAgICAoY2hpbGRyZW4gMQorICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAg
ICAgIChwb3NpdGlvbiA4LjAwIDg2LjAwKQorICAgICAgICAgIChhbmNob3IgMC41MCAwLjUwKQor
ICAgICAgICAgIChib3VuZHMgNTAyLjAwIDUwMDIuMDApCisgICAgICAgICAgKG9wYWNpdHkgMS4w
MCkKKyAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDEpCisgICAgICAgICAgKHByZXNlcnZlczNE
IDApCisgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICAgIChiYWNrZmFjZVZpc2li
aWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAgICAg
ICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRl
bnRpdHkpCisgICAgICAgICkKKyAgICAgICkKKyAgICApCisgICkKKykKKworCitTZWNvbmQgKGNo
aWxkIGFkZGVkKToKKyhHcmFwaGljc0xheWVyCisgIChwb3NpdGlvbiAwLjAwIDAuMDApCisgIChh
bmNob3IgMC41MCAwLjUwKQorICAoYm91bmRzIDc4NS4wMCA1MTI5LjAwKQorICAob3BhY2l0eSAx
LjAwKQorICAodXNpbmdUaWxlZExheWVyIDApCisgIChwcmVzZXJ2ZXMzRCAwKQorICAoZHJhd3ND
b250ZW50IDApCisgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgKGJhY2tncm91bmRD
b2xvciBub25lKQorICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAoY2hpbGRyZW4gMQorICAgIChH
cmFwaGljc0xheWVyCisgICAgICAocG9zaXRpb24gMC4wMCAwLjAwKQorICAgICAgKGFuY2hvciAw
LjUwIDAuNTApCisgICAgICAoYm91bmRzIDc4NS4wMCA1MTI5LjAwKQorICAgICAgKG9wYWNpdHkg
MS4wMCkKKyAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAgIChwcmVzZXJ2ZXMzRCAwKQor
ICAgICAgKGRyYXdzQ29udGVudCAwKQorICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxl
KQorICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgKHRyYW5zZm9ybSBpZGVudGl0
eSkKKyAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGlsZHJlbiAx
CisgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgKHBvc2l0aW9uIDguMDAgODYuMDAp
CisgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAgKGJvdW5kcyA1MDIuMDAg
NTAwMi4wMCkKKyAgICAgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgICAgICh1c2luZ1RpbGVk
TGF5ZXIgMSkKKyAgICAgICAgICAocHJlc2VydmVzM0QgMCkKKyAgICAgICAgICAoZHJhd3NDb250
ZW50IDEpCisgICAgICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgICAg
IChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQor
ICAgICAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgKQorICAgICAg
KQorICAgICkKKyAgKQorKQorCisKK1RoaXJkIChjaGlsZCByZW1vdmVkKToKKyhHcmFwaGljc0xh
eWVyCisgIChwb3NpdGlvbiAwLjAwIDAuMDApCisgIChhbmNob3IgMC41MCAwLjUwKQorICAoYm91
bmRzIDc4NS4wMCA1MTI5LjAwKQorICAob3BhY2l0eSAxLjAwKQorICAodXNpbmdUaWxlZExheWVy
IDApCisgIChwcmVzZXJ2ZXMzRCAwKQorICAoZHJhd3NDb250ZW50IDApCisgIChiYWNrZmFjZVZp
c2liaWxpdHkgdmlzaWJsZSkKKyAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAodHJhbnNmb3Jt
IGlkZW50aXR5KQorICAoY2hpbGRyZW4gMQorICAgIChHcmFwaGljc0xheWVyCisgICAgICAocG9z
aXRpb24gMC4wMCAwLjAwKQorICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAoYm91bmRz
IDc4NS4wMCA1MTI5LjAwKQorICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAgICh1c2luZ1RpbGVk
TGF5ZXIgMCkKKyAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgKGRyYXdzQ29udGVudCAwKQor
ICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgKGJhY2tncm91bmRDb2xv
ciBub25lKQorICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGlsZHJlblRyYW5z
Zm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGlsZHJlbiAxCisgICAgICAgIChHcmFwaGljc0xheWVy
CisgICAgICAgICAgKHBvc2l0aW9uIDguMDAgODYuMDApCisgICAgICAgICAgKGFuY2hvciAwLjUw
IDAuNTApCisgICAgICAgICAgKGJvdW5kcyA1MDIuMDAgNTAwMi4wMCkKKyAgICAgICAgICAob3Bh
Y2l0eSAxLjAwKQorICAgICAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMSkKKyAgICAgICAgICAocHJl
c2VydmVzM0QgMCkKKyAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICAgKGJhY2tm
YWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkK
KyAgICAgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgIChjaGlsZHJlblRyYW5z
Zm9ybSBpZGVudGl0eSkKKyAgICAgICAgKQorICAgICAgKQorICAgICkKKyAgKQorKQorCkluZGV4
OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vY29tcG9zaXRpbmcvaHVnZS1sYXllci13aXRoLWxh
eWVyLWNoaWxkcmVuLXJlc2l6ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2luL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItd2l0aC1sYXllci1jaGlsZHJl
bi1yZXNpemUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItd2l0aC1sYXllci1jaGlsZHJlbi1yZXNpemUt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyMCBAQAorVGhlIHllbGxvdyBi
b3ggc2hvdWxkIGJlIDUwMCB4IDUwMCBvbiBzdGFydHVwLiBUaGVuIGl0IHNob3VsZCBzdHJldGNo
IHRvIGJlIDUwMCB4IDUwMDAsIHRoZW4gc2hyaW5rIGJhY2sgZG93biB0byA1MDAgeCA1MDAuIFRo
aXMgdGVzdHMgdGhhdCB3ZSBjYW4gcmVzaXplIHRvIGEgaHVnZSBsYXllciBhbmQgYmFjayBhZ2Fp
biBhbmQgc3RpbGwgbWFpbnRhaW4gaW50ZWdyaXR5IG9mIHRoZSBsYXllciB0cmVlLgorCitGaXJz
dCAoc21hbGwgbGF5ZXIpOgorKEdyYXBoaWNzTGF5ZXIKKyAgKHBvc2l0aW9uIDAuMDAgMC4wMCkK
KyAgKGFuY2hvciAwLjUwIDAuNTApCisgIChib3VuZHMgNzg1LjAwIDYxMS4wMCkKKyAgKG9wYWNp
dHkgMS4wMCkKKyAgKHVzaW5nVGlsZWRMYXllciAwKQorICAocHJlc2VydmVzM0QgMCkKKyAgKGRy
YXdzQ29udGVudCAwKQorICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgIChiYWNrZ3Jv
dW5kQ29sb3Igbm9uZSkKKyAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgKGNoaWxkcmVuIDEKKyAg
ICAoR3JhcGhpY3NMYXllcgorICAgICAgKHBvc2l0aW9uIDAuMDAgMC4wMCkKKyAgICAgIChhbmNo
b3IgMC41MCAwLjUwKQorICAgICAgKGJvdW5kcyA3ODUuMDAgNjExLjAwKQorICAgICAgKG9wYWNp
dHkgMS4wMCkKKyAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAgIChwcmVzZXJ2ZXMzRCAw
KQorICAgICAgKGRyYXdzQ29udGVudCAwKQorICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNp
YmxlKQorICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgKHRyYW5zZm9ybSBpZGVu
dGl0eSkKKyAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGlsZHJl
biAxCisgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgKHBvc2l0aW9uIDguMDAgNjgu
MDApCisgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAgKGJvdW5kcyA1MDIu
MDAgNTAyLjAwKQorICAgICAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAgICAgKHVzaW5nVGls
ZWRMYXllciAwKQorICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgICAgIChkcmF3c0Nv
bnRlbnQgMSkKKyAgICAgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAg
ICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkp
CisgICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgIChjaGls
ZHJlbiAyCisgICAgICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgICAgICAocG9zaXRp
b24gNTEuMDAgMTAxLjAwKQorICAgICAgICAgICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAg
ICAgICAgICAgKGJvdW5kcyAyMDAuMDAgMjAwLjAwKQorICAgICAgICAgICAgICAob3BhY2l0eSAx
LjAwKQorICAgICAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDApCisgICAgICAgICAgICAgIChw
cmVzZXJ2ZXMzRCAwKQorICAgICAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICAg
ICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAgICAgKGJhY2tncm91
bmRDb2xvciBub25lKQorICAgICAgICAgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAg
ICAgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgICApCisgICAg
ICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgICAgICAocG9zaXRpb24gMjc2LjAwIDIw
MS4wMCkKKyAgICAgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAgICAgIChi
b3VuZHMgMjAwLjAwIDIwMC4wMCkKKyAgICAgICAgICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAg
ICAgICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgICAgICAgICAocHJlc2VydmVzM0Qg
MCkKKyAgICAgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICAgICAgICAoYmFja2Zh
Y2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAgICAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9u
ZSkKKyAgICAgICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICAgKGNo
aWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgICAgKQorICAgICAgICAgICkKKyAg
ICAgICAgKQorICAgICAgKQorICAgICkKKyAgKQorKQorCisKK1NlY29uZCAoaHVnZSBsYXllcik6
CisoR3JhcGhpY3NMYXllcgorICAocG9zaXRpb24gMC4wMCAwLjAwKQorICAoYW5jaG9yIDAuNTAg
MC41MCkKKyAgKGJvdW5kcyA3ODUuMDAgNTExMS4wMCkKKyAgKG9wYWNpdHkgMS4wMCkKKyAgKHVz
aW5nVGlsZWRMYXllciAwKQorICAocHJlc2VydmVzM0QgMCkKKyAgKGRyYXdzQ29udGVudCAwKQor
ICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkK
KyAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgKGNoaWxkcmVuIDEKKyAgICAoR3JhcGhpY3NMYXll
cgorICAgICAgKHBvc2l0aW9uIDAuMDAgMC4wMCkKKyAgICAgIChhbmNob3IgMC41MCAwLjUwKQor
ICAgICAgKGJvdW5kcyA3ODUuMDAgNTExMS4wMCkKKyAgICAgIChvcGFjaXR5IDEuMDApCisgICAg
ICAodXNpbmdUaWxlZExheWVyIDApCisgICAgICAocHJlc2VydmVzM0QgMCkKKyAgICAgIChkcmF3
c0NvbnRlbnQgMCkKKyAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgIChi
YWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAo
Y2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAoY2hpbGRyZW4gMQorICAgICAgICAo
R3JhcGhpY3NMYXllcgorICAgICAgICAgIChwb3NpdGlvbiA4LjAwIDY4LjAwKQorICAgICAgICAg
IChhbmNob3IgMC41MCAwLjUwKQorICAgICAgICAgIChib3VuZHMgNTAyLjAwIDUwMDIuMDApCisg
ICAgICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDEpCisg
ICAgICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAg
ICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAoYmFja2dyb3Vu
ZENvbG9yIG5vbmUpCisgICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAo
Y2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgKGNoaWxkcmVuIDIKKyAgICAg
ICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgICAgIChwb3NpdGlvbiA1MS4wMCAxMDEu
MDApCisgICAgICAgICAgICAgIChhbmNob3IgMC41MCAwLjUwKQorICAgICAgICAgICAgICAoYm91
bmRzIDIwMC4wMCAyMDAuMDApCisgICAgICAgICAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAg
ICAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAgICAgICAgICAgKHByZXNlcnZlczNEIDAp
CisgICAgICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgICAgICAgKGJhY2tmYWNl
VmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgICAgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUp
CisgICAgICAgICAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgICAgIChjaGls
ZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIChHcmFw
aGljc0xheWVyCisgICAgICAgICAgICAgIChwb3NpdGlvbiAyNzYuMDAgNDcwMS4wMCkKKyAgICAg
ICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAgICAgIChib3VuZHMgMjAwLjAw
IDIwMC4wMCkKKyAgICAgICAgICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAgICAgICAgICAgKHVz
aW5nVGlsZWRMYXllciAwKQorICAgICAgICAgICAgICAocHJlc2VydmVzM0QgMCkKKyAgICAgICAg
ICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICAgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5
IHZpc2libGUpCisgICAgICAgICAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAgICAg
ICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICAgKGNoaWxkcmVuVHJhbnNm
b3JtIGlkZW50aXR5KQorICAgICAgICAgICAgKQorICAgICAgICAgICkKKyAgICAgICAgKQorICAg
ICAgKQorICAgICkKKyAgKQorKQorCisKK1RoaXJkIChzbWFsbCBsYXllcik6CisoR3JhcGhpY3NM
YXllcgorICAocG9zaXRpb24gMC4wMCAwLjAwKQorICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgKGJv
dW5kcyA3ODUuMDAgNjExLjAwKQorICAob3BhY2l0eSAxLjAwKQorICAodXNpbmdUaWxlZExheWVy
IDApCisgIChwcmVzZXJ2ZXMzRCAwKQorICAoZHJhd3NDb250ZW50IDApCisgIChiYWNrZmFjZVZp
c2liaWxpdHkgdmlzaWJsZSkKKyAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAodHJhbnNmb3Jt
IGlkZW50aXR5KQorICAoY2hpbGRyZW4gMQorICAgIChHcmFwaGljc0xheWVyCisgICAgICAocG9z
aXRpb24gMC4wMCAwLjAwKQorICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAoYm91bmRz
IDc4NS4wMCA2MTEuMDApCisgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgKHVzaW5nVGlsZWRM
YXllciAwKQorICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAoZHJhd3NDb250ZW50IDApCisg
ICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAoYmFja2dyb3VuZENvbG9y
IG5vbmUpCisgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgKGNoaWxkcmVuVHJhbnNm
b3JtIGlkZW50aXR5KQorICAgICAgKGNoaWxkcmVuIDEKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIK
KyAgICAgICAgICAocG9zaXRpb24gOC4wMCA2OC4wMCkKKyAgICAgICAgICAoYW5jaG9yIDAuNTAg
MC41MCkKKyAgICAgICAgICAoYm91bmRzIDUwMi4wMCA1MDIuMDApCisgICAgICAgICAgKG9wYWNp
dHkgMS4wMCkKKyAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDApCisgICAgICAgICAgKHByZXNl
cnZlczNEIDApCisgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICAgIChiYWNrZmFj
ZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisg
ICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAoY2hpbGRyZW5UcmFuc2Zv
cm0gaWRlbnRpdHkpCisgICAgICAgICAgKGNoaWxkcmVuIDIKKyAgICAgICAgICAgIChHcmFwaGlj
c0xheWVyCisgICAgICAgICAgICAgIChwb3NpdGlvbiA1MS4wMCAxMDEuMDApCisgICAgICAgICAg
ICAgIChhbmNob3IgMC41MCAwLjUwKQorICAgICAgICAgICAgICAoYm91bmRzIDIwMC4wMCAyMDAu
MDApCisgICAgICAgICAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAgICAgICAgICh1c2luZ1Rp
bGVkTGF5ZXIgMCkKKyAgICAgICAgICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAgICAgICAg
IChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNp
YmxlKQorICAgICAgICAgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAgICAgICAgICAg
ICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBp
ZGVudGl0eSkKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIChHcmFwaGljc0xheWVyCisgICAg
ICAgICAgICAgIChwb3NpdGlvbiAyNzYuMDAgMjAxLjAwKQorICAgICAgICAgICAgICAoYW5jaG9y
IDAuNTAgMC41MCkKKyAgICAgICAgICAgICAgKGJvdW5kcyAyMDAuMDAgMjAwLjAwKQorICAgICAg
ICAgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDAp
CisgICAgICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgICAgICAgICAoZHJhd3NDb250
ZW50IDEpCisgICAgICAgICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAg
ICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAgICAgICAodHJhbnNmb3Jt
IGlkZW50aXR5KQorICAgICAgICAgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisg
ICAgICAgICAgICApCisgICAgICAgICAgKQorICAgICAgICApCisgICAgICApCisgICAgKQorICAp
CispCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9odWdlLWxh
eWVyLXdpdGgtbGF5ZXItY2hpbGRyZW4tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9odWdlLWxheWVyLXdpdGgtbGF5ZXItY2hp
bGRyZW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2luL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItd2l0aC1sYXllci1jaGlsZHJlbi1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKK1RoZSB5ZWxsb3cgYm94IHNob3VsZCBi
ZSBsYXJnZSBlbm91Z2ggdG8gc2Nyb2xsIG9mZiB0aGUgYm90dG9tLiBUaGVyZSBzaG91bGQgYmUg
YSByZWQgYm94IG9uIHRoZSBmaXJzdCBwYWdlIGFuZCBhIGJsdWUgYm94IG5lYXIgdGhlIGJvdHRv
bSBvZiB0aGUgeWVsbG93IGJveC4gVGhpcyB0ZXN0cyB0aGF0IHdlIGNhbiBzdXBwb3J0IHZlcnkg
bGFyZ2UgY29tcG9zaXRpbmcgbGF5ZXJzIHdpdGggY2hpbGQgY29tcG9zaXRpbmcgbGF5ZXJzLgor
CitUaGlzIGlzIHNvbWUgdGV4dAorKEdyYXBoaWNzTGF5ZXIKKyAgKHBvc2l0aW9uIDAuMDAgMC4w
MCkKKyAgKGFuY2hvciAwLjUwIDAuNTApCisgIChib3VuZHMgNzg1LjAwIDUxMjkuMDApCisgIChv
cGFjaXR5IDEuMDApCisgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgKHByZXNlcnZlczNEIDApCisg
IChkcmF3c0NvbnRlbnQgMCkKKyAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAoYmFj
a2dyb3VuZENvbG9yIG5vbmUpCisgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgIChjaGlsZHJlbiAx
CisgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgIChwb3NpdGlvbiAwLjAwIDAuMDApCisgICAgICAo
YW5jaG9yIDAuNTAgMC41MCkKKyAgICAgIChib3VuZHMgNzg1LjAwIDUxMjkuMDApCisgICAgICAo
b3BhY2l0eSAxLjAwKQorICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgKHByZXNlcnZl
czNEIDApCisgICAgICAoZHJhd3NDb250ZW50IDApCisgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5
IHZpc2libGUpCisgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAgICAodHJhbnNmb3Jt
IGlkZW50aXR5KQorICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgKGNo
aWxkcmVuIDEKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAocG9zaXRpb24gOC4w
MCA4Ni4wMCkKKyAgICAgICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAgICAgICAoYm91bmRz
IDUwMi4wMCA1MDAyLjAwKQorICAgICAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAgICAgKHVz
aW5nVGlsZWRMYXllciAxKQorICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgICAgIChk
cmF3c0NvbnRlbnQgMSkKKyAgICAgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisg
ICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAgICh0cmFuc2Zvcm0gaWRl
bnRpdHkpCisgICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAg
IChjaGlsZHJlbiAyCisgICAgICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgICAgICAo
cG9zaXRpb24gNTEuMDAgMTAxLjAwKQorICAgICAgICAgICAgICAoYW5jaG9yIDAuNTAgMC41MCkK
KyAgICAgICAgICAgICAgKGJvdW5kcyAyMDAuMDAgMjAwLjAwKQorICAgICAgICAgICAgICAob3Bh
Y2l0eSAxLjAwKQorICAgICAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDApCisgICAgICAgICAg
ICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAg
ICAgICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAgICAgKGJh
Y2tncm91bmRDb2xvciBub25lKQorICAgICAgICAgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQor
ICAgICAgICAgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgICAp
CisgICAgICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgICAgICAocG9zaXRpb24gNTEu
MDAgNDcwMS4wMCkKKyAgICAgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAg
ICAgIChib3VuZHMgMjAwLjAwIDIwMC4wMCkKKyAgICAgICAgICAgICAgKG9wYWNpdHkgMS4wMCkK
KyAgICAgICAgICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgICAgICAgICAocHJlc2Vy
dmVzM0QgMCkKKyAgICAgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICAgICAgICAo
YmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAgICAgICAgIChiYWNrZ3JvdW5kQ29s
b3Igbm9uZSkKKyAgICAgICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAg
ICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgICAgKQorICAgICAgICAg
ICkKKyAgICAgICAgKQorICAgICAgKQorICAgICkKKyAgKQorKQorCkluZGV4OiBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW4vY29tcG9zaXRpbmcvaHVnZS1sYXllci1yZXNpemUtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9odWdl
LWxheWVyLXJlc2l6ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS93aW4vY29tcG9zaXRpbmcvaHVnZS1sYXllci1yZXNpemUtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNiBAQAorVGhlIHllbGxvdyBib3ggc2hvdWxkIGJlIDUw
MCB4IDUwMCBvbiBzdGFydHVwLiBUaGVuIGl0IHNob3VsZCBzdHJldGNoIHRvIGJlIDUwMCB4IDUw
MDAsIHRoZW4gc2hyaW5rIGJhY2sgZG93biB0byA1MDAgeCA1MDAuIFRoaXMgdGVzdHMgdGhhdCB3
ZSBjYW4gcmVzaXplIHRvIGEgaHVnZSBsYXllciBhbmQgYmFjayBhZ2FpbiBhbmQgc3RpbGwgbWFp
bnRhaW4gaW50ZWdyaXR5IG9mIHRoZSBsYXllciB0cmVlLgorCitGaXJzdCAoc21hbGwgbGF5ZXIp
OgorKEdyYXBoaWNzTGF5ZXIKKyAgKHBvc2l0aW9uIDAuMDAgMC4wMCkKKyAgKGFuY2hvciAwLjUw
IDAuNTApCisgIChib3VuZHMgNzg1LjAwIDYxMS4wMCkKKyAgKG9wYWNpdHkgMS4wMCkKKyAgKHVz
aW5nVGlsZWRMYXllciAwKQorICAocHJlc2VydmVzM0QgMCkKKyAgKGRyYXdzQ29udGVudCAwKQor
ICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkK
KyAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgKGNoaWxkcmVuIDEKKyAgICAoR3JhcGhpY3NMYXll
cgorICAgICAgKHBvc2l0aW9uIDAuMDAgMC4wMCkKKyAgICAgIChhbmNob3IgMC41MCAwLjUwKQor
ICAgICAgKGJvdW5kcyA3ODUuMDAgNjExLjAwKQorICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAg
ICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgKGRyYXdz
Q29udGVudCAwKQorICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgKGJh
Y2tncm91bmRDb2xvciBub25lKQorICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChj
aGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGlsZHJlbiAxCisgICAgICAgIChH
cmFwaGljc0xheWVyCisgICAgICAgICAgKHBvc2l0aW9uIDguMDAgNjguMDApCisgICAgICAgICAg
KGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAgKGJvdW5kcyA1MDIuMDAgNTAyLjAwKQorICAg
ICAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAg
ICAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAg
ICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAgICAgKGJhY2tncm91bmRD
b2xvciBub25lKQorICAgICAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgKGNo
aWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICApCisgICAgICApCisgICAgKQorICAp
CispCisKKworU2Vjb25kIChodWdlIGxheWVyKToKKyhHcmFwaGljc0xheWVyCisgIChwb3NpdGlv
biAwLjAwIDAuMDApCisgIChhbmNob3IgMC41MCAwLjUwKQorICAoYm91bmRzIDc4NS4wMCA1MTEx
LjAwKQorICAob3BhY2l0eSAxLjAwKQorICAodXNpbmdUaWxlZExheWVyIDApCisgIChwcmVzZXJ2
ZXMzRCAwKQorICAoZHJhd3NDb250ZW50IDApCisgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJs
ZSkKKyAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAo
Y2hpbGRyZW4gMQorICAgIChHcmFwaGljc0xheWVyCisgICAgICAocG9zaXRpb24gMC4wMCAwLjAw
KQorICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAoYm91bmRzIDc4NS4wMCA1MTExLjAw
KQorICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAg
IChwcmVzZXJ2ZXMzRCAwKQorICAgICAgKGRyYXdzQ29udGVudCAwKQorICAgICAgKGJhY2tmYWNl
VmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAg
KHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkK
KyAgICAgIChjaGlsZHJlbiAxCisgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgKHBv
c2l0aW9uIDguMDAgNjguMDApCisgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAg
ICAgKGJvdW5kcyA1MDIuMDAgNTAwMi4wMCkKKyAgICAgICAgICAob3BhY2l0eSAxLjAwKQorICAg
ICAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMSkKKyAgICAgICAgICAocHJlc2VydmVzM0QgMCkKKyAg
ICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2
aXNpYmxlKQorICAgICAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAgICAgICAodHJh
bnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkK
KyAgICAgICAgKQorICAgICAgKQorICAgICkKKyAgKQorKQorCisKK1RoaXJkIChzbWFsbCBsYXll
cik6CisoR3JhcGhpY3NMYXllcgorICAocG9zaXRpb24gMC4wMCAwLjAwKQorICAoYW5jaG9yIDAu
NTAgMC41MCkKKyAgKGJvdW5kcyA3ODUuMDAgNjExLjAwKQorICAob3BhY2l0eSAxLjAwKQorICAo
dXNpbmdUaWxlZExheWVyIDApCisgIChwcmVzZXJ2ZXMzRCAwKQorICAoZHJhd3NDb250ZW50IDAp
CisgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgKGJhY2tncm91bmRDb2xvciBub25l
KQorICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAoY2hpbGRyZW4gMQorICAgIChHcmFwaGljc0xh
eWVyCisgICAgICAocG9zaXRpb24gMC4wMCAwLjAwKQorICAgICAgKGFuY2hvciAwLjUwIDAuNTAp
CisgICAgICAoYm91bmRzIDc4NS4wMCA2MTEuMDApCisgICAgICAob3BhY2l0eSAxLjAwKQorICAg
ICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAoZHJh
d3NDb250ZW50IDApCisgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAo
YmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAg
KGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgKGNoaWxkcmVuIDEKKyAgICAgICAg
KEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAocG9zaXRpb24gOC4wMCA2OC4wMCkKKyAgICAgICAg
ICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAgICAgICAoYm91bmRzIDUwMi4wMCA1MDIuMDApCisg
ICAgICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDApCisg
ICAgICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAg
ICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAoYmFja2dyb3Vu
ZENvbG9yIG5vbmUpCisgICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAo
Y2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICkKKyAgICAgICkKKyAgICApCisg
ICkKKykKKwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTk4NzYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOSBAQAorMjAxMC0wNS0yMCAgQ2hyaXMgTWFy
cmluICA8Y21hcnJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHRpbGVkIGNvbXBvc2l0aW5nIGxheWVycyBvbiBX
aW5kb3dzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
OTQ2MQorICAgICAgICAKKyAgICAgICAgVGhlc2UgdGVzdHMgc2hvdyBzZXZlcmFsIGNhcGFiaWxp
dGllcywgaW5jbHVkaW5nIHNpbXBsZSBodWdlIGxheWVycywKKyAgICAgICAgcmVzaXppbmcgZnJv
bSBzbWFsbCB0byBodWdlIGFuZCBiYWNrIGFnYWluLCBodWdlIGxheWVycyB3aXRoCisgICAgICAg
IGxheWVyIGNoaWxkcmVuLCByZXNpemluZyBodWdlIGxheWVycyB3aXRoIGxheWVyIGNoaWxkcmVu
IGFuZCAKKyAgICAgICAgYWRkaW5nIGFuZCByZW1vdmluZyBjaGlsZHJlbiBmcm9tIGh1Z2UgbGF5
ZXJzLgorICAgICAgICAKKyAgICAgICAgRXhwZWN0ZWQgcmVzdWx0cyBhcmUgb2YgdGhlIHJlc3Vs
dGluZyBjb21wb3NpdGluZyBsYXllciB0cmVlIHNvCisgICAgICAgIHRoZXkgYXJlIFdpbmRvd3Mg
c3BlY2lmaWMuIEdlbmVyYWwgcmVzdWx0cyB3aWxsIGJlIG5lZWRlZCBmb3IgTWFjLgorCisgICAg
ICAgICogY29tcG9zaXRpbmcvaHVnZS1sYXllci1hZGQtcmVtb3ZlLWNoaWxkLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGNvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItcmVzaXplLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGNvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItd2l0aC1sYXllci1jaGlsZHJlbi1yZXNp
emUuaHRtbDogQWRkZWQuCisgICAgICAgICogY29tcG9zaXRpbmcvaHVnZS1sYXllci13aXRoLWxh
eWVyLWNoaWxkcmVuLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNvbXBvc2l0aW5nL2h1Z2UtbGF5
ZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vd2luL2NvbXBvc2l0aW5nL2h1Z2Ut
bGF5ZXItYWRkLXJlbW92ZS1jaGlsZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL3dpbi9jb21wb3NpdGluZy9odWdlLWxheWVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vd2luL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItcmVzaXplLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vd2luL2NvbXBvc2l0aW5nL2h1Z2Ut
bGF5ZXItd2l0aC1sYXllci1jaGlsZHJlbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9odWdlLWxheWVyLXdpdGgtbGF5ZXItY2hpbGRyZW4t
cmVzaXplLWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMTAtMDUtMjAgIERhbiBCZXJuc3RlaW4g
IDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEh5YXR0LgpJbmRl
eDogTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvaHVnZS1sYXllci1yZXNpemUuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9odWdlLWxheWVyLXJlc2l6ZS5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvaHVnZS1sYXllci1yZXNpemUu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKyAgPGhlYWQ+CisgICAgPHRpdGxlPlRlc3Qgb2YgdmVyeSBsYXJnZSBsYXllciByZXNpemlu
ZzwvdGl0bGU+CisKKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgor
CisgICAgI2NvbnRhaW5lciB7CisgICAgICB3aWR0aDogNTAwcHg7CisgICAgICBoZWlnaHQ6IDUw
MHB4OworICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CisgICAgICBiYWNrZ3JvdW5kLWNv
bG9yOiB5ZWxsb3c7CisgICAgICAtd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVaKDApOworICAg
IH0KKyAgICAKKyAgICAuYm94IHsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAg
ICBsZWZ0OjUwcHg7CisgICAgICAgIHdpZHRoOiAyMDBweDsKKyAgICAgICAgaGVpZ2h0OiAyMDBw
eDsKKyAgICB9CisgICAgCisgICAgLmF0LXRoZS10b3AgeworICAgICAgICB0b3A6IDEwMHB4Owor
ICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7CisgICAgfQorICAgIDwvc3R5bGU+CisgICAg
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXN1bHQg
PSAiIjsKKworICAgICAgICBmdW5jdGlvbiB0ZXN0T25Mb2FkKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gU21hbGwgbGF5ZXIgZmlyc3QKKyAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJGaXJzdCAoc21hbGwgbGF5ZXIp
Ojxicj4iICsgbGF5b3V0VGVzdENvbnRyb2xsZXIubGF5ZXJUcmVlQXNUZXh0KCk7CisgICAgICAg
ICAgICB9LCAwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSHVnZSBsYXllciBzZWNv
bmQKKyAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5zdHlsZS5oZWlnaHQg
PSAiNTAwMHB4IjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBMZXQgaXQg
cmVuZGVyCisgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIjxicj48YnI+U2Vjb25kIChodWdlIGxheWVy
KTo8YnI+IiArIGxheW91dFRlc3RDb250cm9sbGVyLmxheWVyVHJlZUFzVGV4dCgpOworICAgICAg
ICAgICAgICAgIH0sIDApOworICAgICAgICAgICAgfSwgMTAwKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gU21hbGwgbGF5ZXIgdGhpcmQKKyAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdjb250YWluZXInKS5zdHlsZS5oZWlnaHQgPSAiNTAwcHgiOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIC8vIExldCBpdCByZW5kZXIKKyAgICAgICAgICAgICAgICB3aW5kb3cu
c2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9
ICI8YnI+PGJyPlRoaXJkIChzbWFsbCBsYXllcik6PGJyPiIgKyBsYXlvdXRUZXN0Q29udHJvbGxl
ci5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdsYXllcnMnKS5pbm5lckhUTUwgPSByZXN1bHQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICAgIH0sIDIwMCk7
CisgICAgICAgIH0KKyAgICAgIAorICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9h
ZCcsIHRlc3RPbkxvYWQsIGZhbHNlKTsKKyAgICA8L3NjcmlwdD4KKyAgPC9oZWFkPgorICA8Ym9k
eT4KKyAgICAgIDxwPgorICAgICAgICBUaGUgeWVsbG93IGJveCBzaG91bGQgYmUgNTAwIHggNTAw
IG9uIHN0YXJ0dXAuIFRoZW4gaXQgc2hvdWxkIAorICAgICAgICBzdHJldGNoIHRvIGJlIDUwMCB4
IDUwMDAsIHRoZW4gc2hyaW5rIGJhY2sgZG93biB0byA1MDAgeCA1MDAuIAorICAgICAgICBUaGlz
IHRlc3RzIHRoYXQgd2UgY2FuIHJlc2l6ZSB0byBhIGh1Z2UgbGF5ZXIgYW5kIGJhY2sgYWdhaW4K
KyAgICAgICAgYW5kIHN0aWxsIG1haW50YWluIGludGVncml0eSBvZiB0aGUgbGF5ZXIgdHJlZS4K
KyAgICAgIDwvcD4KKyAgICAgICAgPGRpdiBpZD0iY29udGFpbmVyIj4KKyAgICAgICAgICA8ZGl2
IGNsYXNzPSJib3ggYXQtdGhlLXRvcCI+PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8
cHJlIGlkPSJsYXllcnMiPkxheWVyIHRyZWUgYXBwZWFycyBoZXJlIGluIERSVC48L3ByZT4KKyAg
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvaHVnZS1sYXll
ci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXIu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXIu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKyAgPGhlYWQ+CisgICAgPHRpdGxlPlRlc3Qgb2YgdmVyeSBsYXJnZSBsYXllcjwvdGl0bGU+
CisKKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorCisgICAgI2Nv
bnRhaW5lciB7CisgICAgICB3aWR0aDogNTAwcHg7CisgICAgICBoZWlnaHQ6IDUwMDBweDsKKyAg
ICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOworICAgICAgYmFja2dyb3VuZC1jb2xvcjogeWVs
bG93OworICAgICAgLXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWigwKTsKKyAgICB9CisgICAg
CisgICAgLmJveCB7CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgbGVmdDo1
MHB4OworICAgICAgICB3aWR0aDogMjAwcHg7CisgICAgICAgIGhlaWdodDogMjAwcHg7CisgICAg
fQorICAgIAorICAgIC5hdC10aGUtdG9wIHsKKyAgICAgICAgdG9wOiAxMDBweDsKKyAgICAgICAg
YmFja2dyb3VuZC1jb2xvcjogcmVkOworICAgIH0KKyAgICAKKyAgICAuYXQtdGhlLWJvdHRvbSB7
CisgICAgICAgIHRvcDo0NzAwcHg7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsdWU7Cisg
ICAgfSAgIAorICAgIDwvc3R5bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IGNoYXJzZXQ9InV0Zi04Ij4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB9
CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdE9uTG9hZCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2xheWVycycpLmlubmVySFRNTCA9IGxheW91dFRlc3RDb250cm9sbGVy
LmxheWVyVHJlZUFzVGV4dCgpOworICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgMCk7
CisgICAgICAgIH0KKyAgICAgIAorICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9h
ZCcsIHRlc3RPbkxvYWQsIGZhbHNlKTsKKyAgICA8L3NjcmlwdD4KKyAgPC9oZWFkPgorICA8Ym9k
eT4KKyAgICAgIDxwPgorICAgICAgICBUaGUgeWVsbG93IGJveCBzaG91bGQgYmUgbGFyZ2UgZW5v
dWdoIHRvIHNjcm9sbCBvZmYgdGhlIGJvdHRvbS4KKyAgICAgICAgVGhlcmUgc2hvdWxkIGJlIGEg
cmVkIGJveCBvbiB0aGUgZmlyc3QgcGFnZSBhbmQgYSBibHVlIGJveAorICAgICAgICBuZWFyIHRo
ZSBib3R0b20gb2YgdGhlIHllbGxvdyBib3guIFRoaXMgdGVzdHMgdGhhdCB3ZSBjYW4gc3VwcG9y
dAorICAgICAgICB2ZXJ5IGxhcmdlIGNvbXBvc2l0aW5nIGxheWVycy4KKyAgICAgIDwvcD4KKyAg
ICAgICAgPGRpdiBpZD0iY29udGFpbmVyIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJib3ggYXQt
dGhlLXRvcCI+PC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0iYm94IGF0LXRoZS1ib3R0b20i
PjwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPHByZSBpZD0ibGF5ZXJzIj5MYXllciB0
cmVlIGFwcGVhcnMgaGVyZSBpbiBEUlQuPC9wcmU+CisgIDwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItYWRkLXJlbW92ZS1jaGlsZC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItYWRkLXJl
bW92ZS1jaGlsZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcv
aHVnZS1sYXllci1hZGQtcmVtb3ZlLWNoaWxkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
ODcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDx0aXRsZT5UZXN0
IG9mIHZlcnkgbGFyZ2UgbGF5ZXIgd2l0aCBhZGRlZCBhbmQgcmVtb3ZlZCBjaGlsZDwvdGl0bGU+
CisKKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorCisgICAgI2Nv
bnRhaW5lciB7CisgICAgICB3aWR0aDogNTAwcHg7CisgICAgICBoZWlnaHQ6IDUwMDBweDsKKyAg
ICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOworICAgICAgYmFja2dyb3VuZC1jb2xvcjogeWVs
bG93OworICAgICAgLXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWigwKTsKKyAgICB9CisgICAg
CisgICAgLmJveCB7CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgbGVmdDo1
MHB4OworICAgICAgICB3aWR0aDogMjAwcHg7CisgICAgICAgIGhlaWdodDogMjAwcHg7CisgICAg
fQorICAgIAorICAgIC5hdC10aGUtdG9wIHsKKyAgICAgICAgdG9wOiAxMDBweDsKKyAgICAgICAg
YmFja2dyb3VuZC1jb2xvcjogcmVkOworICAgIH0KKyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+CisgICAgICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0ID0gIiI7CisK
KyAgICAgICAgZnVuY3Rpb24gdGVzdE9uTG9hZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IEZpcnN0IHdpdGggbm8ga2lkcworICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gIkZpcnN0IChubyBjaGlsZHJlbik6PGJyPiIg
KyBsYXlvdXRUZXN0Q29udHJvbGxlci5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgICAgIH0s
IDApOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTZWNvbmQgYWRkIGtpZAorICAgICAg
ICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFy
IGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAgICAgIGJv
eC5jbGFzc05hbWUgPSAiYm94IGF0LXRoZS10b3AiOworICAgICAgICAgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5hcHBlbmRDaGlsZChib3gpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIC8vIExldCBpdCByZW5kZXIKKyAgICAgICAgICAgICAg
ICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCArPSAiPGJyPjxicj5TZWNvbmQgKGNoaWxkIGFkZGVkKTo8YnI+IiArIGxheW91dFRlc3RD
b250cm9sbGVyLmxheWVyVHJlZUFzVGV4dCgpOworICAgICAgICAgICAgICAgIH0sIDApOworICAg
ICAgICAgICAgfSwgMTAwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcmQgcmVt
b3ZlIGtpZAorICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250
YWluZXInKTsKKyAgICAgICAgICAgICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY29udGFpbmVy
Lmxhc3RDaGlsZCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gTGV0IGl0
IHJlbmRlcgorICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIjxicj48YnI+VGhpcmQgKGNoaWxkIHJl
bW92ZWQpOjxicj4iICsgbGF5b3V0VGVzdENvbnRyb2xsZXIubGF5ZXJUcmVlQXNUZXh0KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5ZXJzJyku
aW5uZXJIVE1MID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfSwgMCk7CisgICAgICAgICAgICB9LCAyMDApOworICAgICAgICB9CisgICAgICAKKyAg
ICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0ZXN0T25Mb2FkLCBmYWxzZSk7
CisgICAgPC9zY3JpcHQ+CisgIDwvaGVhZD4KKyAgPGJvZHk+CisgICAgICA8cD4KKyAgICAgICAg
VGhlIHllbGxvdyBib3ggc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0byBzY3JvbGwgb2ZmIHRoZSBi
b3R0b20uCisgICAgICAgIEF0IHRoZSBzdGFydCB0aGVyZSBzaG91bGQgYmUgbm8gY2hpbGQuIEFm
dGVyIDEwMG1zIGEgcmVkIGJveCBpcyAKKyAgICAgICAgYWRkZWQgYW5kIGFmdGVyIDEwMG1zIG1v
cmUgaXQgc2hvdWxkIGJlIHJlbW92ZWQuIFRoaXMgdGVzdHMgdGhhdCAKKyAgICAgICAgd2UgY2Fu
IHN1cHBvcnQgdmVyeSBsYXJnZSBjb21wb3NpdGluZyBsYXllcnMgd2l0aCBkeW5hbWljYWxseSBh
ZGRlZCAKKyAgICAgICAgYW5kIHJlbW92ZWQgY2hpbGQgY29tcG9zaXRpbmcgbGF5ZXJzLgorICAg
ICAgPC9wPgorICAgICAgICA8ZGl2IGlkPSJjb250YWluZXIiPjwvZGl2PgorICAgICAgICA8cHJl
IGlkPSJsYXllcnMiPkxheWVyIHRyZWUgYXBwZWFycyBoZXJlIGluIERSVC48L3ByZT4KKyAgPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvaHVnZS1sYXllci13
aXRoLWxheWVyLWNoaWxkcmVuLXJlc2l6ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItd2l0aC1sYXllci1jaGlsZHJlbi1yZXNpemUuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItd2l0aC1s
YXllci1jaGlsZHJlbi1yZXNpemUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPHRpdGxlPlRlc3Qgb2YgdmVy
eSBsYXJnZSBsYXllciByZXNpemluZyB3aXRoIGxheWVyIGNoaWxkcmVuPC90aXRsZT4KKworICAg
IDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+CisKKyAgICAjY29udGFpbmVy
IHsKKyAgICAgIHdpZHRoOiA1MDBweDsKKyAgICAgIGhlaWdodDogNTAwcHg7CisgICAgICBib3Jk
ZXI6IDFweCBzb2xpZCBibGFjazsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6IHllbGxvdzsKKyAg
ICAgIC13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVooMCk7CisgICAgfQorICAgIAorICAgIC5i
b3ggeworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgIGxlZnQ6NTBweDsKKyAg
ICAgICAgd2lkdGg6IDIwMHB4OworICAgICAgICBoZWlnaHQ6IDIwMHB4OworICAgICAgICAtd2Vi
a2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVaKDApOworICAgIH0KKyAgICAKKyAgICAuYXQtdGhlLXRv
cCB7CisgICAgICAgIHRvcDogMTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsK
KyAgICB9CisgICAgCisgICAgLmF0LXRoZS1ib3R0b20geworICAgICAgICB0b3A6MjAwcHg7Cisg
ICAgICAgIGxlZnQ6IDI3NXB4OworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlOworICAg
IH0gICAKKyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBj
aGFyc2V0PSJ1dGYtOCI+CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgcmVzdWx0ID0gIiI7CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdE9u
TG9hZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFNtYWxsIGxheWVyIGZpcnN0CisgICAg
ICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSAiRmlyc3QgKHNtYWxsIGxheWVyKTo8YnI+IiArIGxheW91dFRlc3RDb250cm9sbGVyLmxh
eWVyVHJlZUFzVGV4dCgpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIEh1Z2UgbGF5ZXIgc2Vjb25kCisgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91
dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
Y29udGFpbmVyJykuc3R5bGUuaGVpZ2h0ID0gIjUwMDBweCI7CisgICAgICAgICAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JsdWUtYm94Jykuc3R5bGUudG9wID0gIjQ3MDBweCI7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gTGV0IGl0IHJlbmRlcgorICAgICAg
ICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ICs9ICI8YnI+PGJyPlNlY29uZCAoaHVnZSBsYXllcik6PGJyPiIgKyBsYXlv
dXRUZXN0Q29udHJvbGxlci5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgICAgICAgICB9LCAw
KTsKKyAgICAgICAgICAgIH0sIDEwMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNt
YWxsIGxheWVyIHRoaXJkCisgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJyku
c3R5bGUuaGVpZ2h0ID0gIjUwMHB4IjsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnYmx1ZS1ib3gnKS5zdHlsZS50b3AgPSAiMjAwcHgiOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8vIExldCBpdCByZW5kZXIKKyAgICAgICAgICAgICAgICB3aW5k
b3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ICs9ICI8YnI+PGJyPlRoaXJkIChzbWFsbCBsYXllcik6PGJyPiIgKyBsYXlvdXRUZXN0Q29udHJv
bGxlci5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdsYXllcnMnKS5pbm5lckhUTUwgPSByZXN1bHQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICAgIH0sIDIw
MCk7CisgICAgICAgIH0KKyAgICAgIAorICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcign
bG9hZCcsIHRlc3RPbkxvYWQsIGZhbHNlKTsKKyAgICA8L3NjcmlwdD4KKyAgPC9oZWFkPgorICA8
Ym9keT4KKyAgICAgIDxwPgorICAgICAgICBUaGUgeWVsbG93IGJveCBzaG91bGQgYmUgNTAwIHgg
NTAwIG9uIHN0YXJ0dXAuIFRoZW4gaXQgc2hvdWxkIAorICAgICAgICBzdHJldGNoIHRvIGJlIDUw
MCB4IDUwMDAsIHRoZW4gc2hyaW5rIGJhY2sgZG93biB0byA1MDAgeCA1MDAuIAorICAgICAgICBU
aGlzIHRlc3RzIHRoYXQgd2UgY2FuIHJlc2l6ZSB0byBhIGh1Z2UgbGF5ZXIgYW5kIGJhY2sgYWdh
aW4KKyAgICAgICAgYW5kIHN0aWxsIG1haW50YWluIGludGVncml0eSBvZiB0aGUgbGF5ZXIgdHJl
ZS4KKyAgICAgIDwvcD4KKyAgICAgICAgPGRpdiBpZD0iY29udGFpbmVyIj4KKyAgICAgICAgICA8
ZGl2IGNsYXNzPSJib3ggYXQtdGhlLXRvcCI+PC9kaXY+CisgICAgICAgICAgPGRpdiBpZD0iYmx1
ZS1ib3giIGNsYXNzPSJib3ggYXQtdGhlLWJvdHRvbSI+PC9kaXY+CisgICAgICAgIDwvZGl2Pgor
ICAgICAgICA8cHJlIGlkPSJsYXllcnMiPkxheWVyIHRyZWUgYXBwZWFycyBoZXJlIGluIERSVC48
L3ByZT4KKyAgPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcv
aHVnZS1sYXllci13aXRoLWxheWVyLWNoaWxkcmVuLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvY29tcG9zaXRpbmcvaHVnZS1sYXllci13aXRoLWxheWVyLWNoaWxkcmVuLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9odWdlLWxheWVyLXdpdGgtbGF5
ZXItY2hpbGRyZW4uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NyBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPHRpdGxlPlRlc3Qgb2YgdmVyeSBsYXJnZSBs
YXllciB3aXRoIGxheWVyIGNoaWxkcmVuPC90aXRsZT4KKworICAgIDxzdHlsZSB0eXBlPSJ0ZXh0
L2NzcyIgbWVkaWE9InNjcmVlbiI+CisKKyAgICAjY29udGFpbmVyIHsKKyAgICAgIHdpZHRoOiA1
MDBweDsKKyAgICAgIGhlaWdodDogNTAwMHB4OworICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxh
Y2s7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7CisgICAgICAtd2Via2l0LXRyYW5z
Zm9ybTp0cmFuc2xhdGVaKDApOworICAgIH0KKyAgICAKKyAgICAuYm94IHsKKyAgICAgICAgcG9z
aXRpb246IGFic29sdXRlOworICAgICAgICBsZWZ0OjUwcHg7CisgICAgICAgIHdpZHRoOiAyMDBw
eDsKKyAgICAgICAgaGVpZ2h0OiAyMDBweDsKKyAgICAgIC13ZWJraXQtdHJhbnNmb3JtOnRyYW5z
bGF0ZVooMCk7CisgICAgfQorICAgIAorICAgIC5hdC10aGUtdG9wIHsKKyAgICAgICAgdG9wOiAx
MDBweDsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworICAgIH0KKyAgICAKKyAgICAu
YXQtdGhlLWJvdHRvbSB7CisgICAgICAgIHRvcDo0NzAwcHg7CisgICAgICAgIGJhY2tncm91bmQt
Y29sb3I6IGJsdWU7CisgICAgfSAgIAorICAgIDwvc3R5bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdE9uTG9hZCgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheWVycycpLmlubmVySFRNTCA9IGxheW91
dFRlc3RDb250cm9sbGVyLmxheWVyVHJlZUFzVGV4dCgpOworICAgICAgICAgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSwgMCk7CisgICAgICAgIH0KKyAgICAgIAorICAgICAgICB3aW5kb3cuYWRkRXZl
bnRMaXN0ZW5lcignbG9hZCcsIHRlc3RPbkxvYWQsIGZhbHNlKTsKKyAgICA8L3NjcmlwdD4KKyAg
PC9oZWFkPgorICA8Ym9keT4KKyAgICAgIDxwPgorICAgICAgICBUaGUgeWVsbG93IGJveCBzaG91
bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIHNjcm9sbCBvZmYgdGhlIGJvdHRvbS4KKyAgICAgICAgVGhl
cmUgc2hvdWxkIGJlIGEgcmVkIGJveCBvbiB0aGUgZmlyc3QgcGFnZSBhbmQgYSBibHVlIGJveAor
ICAgICAgICBuZWFyIHRoZSBib3R0b20gb2YgdGhlIHllbGxvdyBib3guIFRoaXMgdGVzdHMgdGhh
dCB3ZSBjYW4gc3VwcG9ydAorICAgICAgICB2ZXJ5IGxhcmdlIGNvbXBvc2l0aW5nIGxheWVycyB3
aXRoIGNoaWxkIGNvbXBvc2l0aW5nIGxheWVycy4KKyAgICAgIDwvcD4KKyAgICAgICAgPGRpdiBp
ZD0iY29udGFpbmVyIj4KKyAgICAgICAgVGhpcyBpcyBzb21lIHRleHQKKyAgICAgICAgICA8ZGl2
IGNsYXNzPSJib3ggYXQtdGhlLXRvcCI+PC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0iYm94
IGF0LXRoZS1ib3R0b20iPjwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPHByZSBpZD0i
bGF5ZXJzIj5MYXllciB0cmVlIGFwcGVhcnMgaGVyZSBpbiBEUlQuPC9wcmU+CisgIDwvYm9keT4K
KzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56719</attachid>
            <date>2010-05-21 10:03:27 -0700</date>
            <delta_ts>2010-05-21 17:18:08 -0700</delta_ts>
            <desc>Replacement patch with Simon&apos;s comments addressed</desc>
            <filename>39461.patch</filename>
            <type>text/plain</type>
            <size>81786</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTkzNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTUgQEAKKzIwMTAtMDUtMjEgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElt
cGxlbWVudCB0aWxlZCBjb21wb3NpdGluZyBsYXllcnMgb24gV2luZG93cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0NjEKKyAgICAgICAgCisgICAg
ICAgIFRoaXMgYWRkcyBhIHRpbGluZyBpbXBsZW1lbnRhdGlvbiBzaW1pbGFyIChmcm9tIGEgR3Jh
cGhpY3NMYXllciBzdGFuZHBvaW50KQorICAgICAgICB0byB0aGUgb25lIGZvciBNYWMuIEJ1dCB3
aGVyZSBNYWMgdXNlcyB0aGUgZXhpc3RpbmcgQ0FUaWxlZExheWVyLCBJJ3ZlIGhhZAorICAgICAg
ICB0byBpbXBsZW1lbnQgb25lLiBJZiBhIGxheWVyIGlzIGdyZWF0ZXIgdGhlbiAyayB4IDJrLCBJ
IHNwbGl0IGl0IGludG8gYW4KKyAgICAgICAgYXJyYXkgb2YgNTEyIHggNTEyIHRpbGVzLiBUaGVz
ZSB0aWxlcyBhcmUgcG9zaXRpb25lZCBpbiB0aGUgY29ycmVjdCBwbGFjZSAKKyAgICAgICAgZm9y
IHRoZSBUaWxlZExheWVyJ3MgY29udGVudC4gV2hlbiBzZXROZWVkc0Rpc3BsYXkgaXMgY2FsbGVk
IG9uIHRoZSBUaWxlZExheWVyCisgICAgICAgIHRoZSB0aWxlcycgc2V0TmVlZERpc3BsYXkgbWV0
aG9kcyBhcmUgY2FsbGVkLiBFYWNoIHRpbGUgY2xpcHMgYW5kIHBvc2l0aW9ucyB0aGUKKyAgICAg
ICAgQ0dDb250ZXh0IGFwcHJvcHJpYXRlbHkgYW5kIHRoZW4gcmVuZGVycyB0aGUgbGF5ZXIuCisg
ICAgICAgIAorICAgICAgICBJIGFsc28gZ290IHJpZCBvZiBhbGwgZnJhbWUoKS9zZXRGcmFtZSgp
IEFQSSB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBjYWxscyB0bworICAgICAgICBvdmVycmlkZSBm
b3IgdGlsaW5nLgorICAgICAgICAKKyAgICAgICAgTXVjaCBvcHRpbWl6YXRpb24gaXMgcG9zc2li
bGUuIE1vc3Qgc2lnbmlmaWNhbnRseSByaWdodCBub3cgYWxsIHRpbGVzIGFyZQorICAgICAgICBy
ZW5kZXJlZCB3aGV0aGVyIHZpc2libGUgb3Igbm90LiBXZSBuZWVkIHRvIG9ubHkgcmVuZGVyIHRp
bGVzIHRoYXQgYXJlIAorICAgICAgICBjdXJyZW50bHkgdmlzaWJsZS4KKworICAgICAgICBUZXN0
czogY29tcG9zaXRpbmcvaHVnZS1sYXllci1hZGQtcmVtb3ZlLWNoaWxkLmh0bWwKKyAgICAgICAg
ICAgICAgIGNvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItcmVzaXplLmh0bWwKKyAgICAgICAgICAgICAg
IGNvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItd2l0aC1sYXllci1jaGlsZHJlbi1yZXNpemUuaHRtbAor
ICAgICAgICAgICAgICAgY29tcG9zaXRpbmcvaHVnZS1sYXllci13aXRoLWxheWVyLWNoaWxkcmVu
Lmh0bWwKKyAgICAgICAgICAgICAgIGNvbXBvc2l0aW5nL2h1Z2UtbGF5ZXIuaHRtbAorCisgICAg
ICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJDQUNGLmNwcDogQWRkZWQgdGlsaW5nIGNvZGUgc2lt
aWxhciB0byBHcmFwaGljc0xheWVyQ0EKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
QUNGOjpyZXF1aXJlc1RpbGVkTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBQ0Y6OnN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNBQ0Y6OnVwZGF0ZUxheWVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ0FDRjo6dXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyQ0FDRi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9XS0NBQ0ZMYXllci5jcHA6IE1hZGUgc29tZSBtZXRob2RzIHZpcnR1YWwgc28g
V2ViVGlsZWRMYXllciBjYW4gb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQWxzbyBhZGRlZCBzdWJsYXllciBzZXR0aW5nIGFuZCBtYW5p
cHVsYXRpb24gbWV0aG9kcyBuZWVkZWQgZm9yIHRpbGluZworICAgICAgICAoV2ViQ29yZTo6V0tD
QUNGTGF5ZXI6OnJlc2lnblJvb3RMYXllckZvckNvbnRleHQpOiBBZGRpbmcgdG8gZml4IGEgY3Jh
c2ggZXhwb3NlZCB3aGVuIHRpbGluZyBjb2RlIGlzIGFjdGl2ZS4KKyAgICAgICAgKFdlYkNvcmU6
OldLQ0FDRkxheWVyOjphZGRTdWJsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZMYXll
cjo6aW50ZXJuYWxJbnNlcnRTdWJsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZMYXll
cjo6aW5zZXJ0U3VibGF5ZXJBYm92ZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxh
eWVyOjppbnNlcnRTdWJsYXllckJlbG93TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNG
TGF5ZXI6OnJlcGxhY2VTdWJsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZMYXllcjo6
aW50ZXJuYWxTdWJsYXllckNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyOjpz
ZXRTdWJsYXllcnNGcm9tTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNGTGF5ZXI6Omlu
dGVybmFsU3VibGF5ZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyOjpp
bnRlcm5hbEluZGV4T2ZTdWJsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZMYXllcjo6
aW50ZXJuYWxSZW1vdmVBbGxTdWJsYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNGTGF5
ZXI6OmludGVybmFsU2V0U3VibGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVy
OjpwcmludExheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyOjpyZW1vdmVBbGxTdWJsYXllcnMp
OgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNGTGF5ZXI6OnNldFN1YmxheWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpXS0NBQ0ZMYXllcjo6aW5zZXJ0U3VibGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V0tDQUNGTGF5ZXI6OnN1YmxheWVyQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNG
TGF5ZXI6OnNldERvdWJsZVNpZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyOjpz
ZXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZMYXllcjo6c2V0VHJhbnNmb3Jt
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXJSZW5kZXJlci5j
cHA6IEZpeCBhIGNyYXNoIGV4cG9zZWQgd2hlbiB0aWxpbmcgY29kZSBpcyBhY3RpdmUKKyAgICAg
ICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyUmVuZGVyZXI6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyUmVuZGVyZXI6OmRlc3Ryb3lSZW5kZXJlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXS0NBQ0ZMYXllclJlbmRlcmVyOjpyZXNpemUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9XZWJMYXllci5jcHA6IEFkZGVkLiBTcGxpdCB0aGlzIG91dCBm
cm9tIEdyYXBoaWNzTGF5ZXJDQUNGIHNvIGl0IGNvdWxkIGJlIHN1YmNsYXNzZWQgYnkgV2ViVGls
ZWRMYXllcgorICAgICAgICAoV2ViQ29yZTo6V2ViTGF5ZXI6OnNldE5lZWRzRGlzcGxheSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJMYXllcjo6ZHJhd0luQ29udGV4dCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1dlYkxheWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
V2ViTGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJMYXllcjo6V2ViTGF5ZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9XZWJUaWxlZExheWVyLmNwcDogQWRk
ZWQuIFdoZXJlIGFsbCB0aGUgdGlsZSBjb25zdHJ1Y3Rpb24gYW5kIHJlbmRlcmluZyBpcyBkb25l
CisgICAgICAgIChXZWJDb3JlOjpXZWJUaWxlZExheWVyOjp0aWxlRGlzcGxheUNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYlRpbGVkTGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJUaWxlZExheWVyOjpXZWJUaWxlZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YlRpbGVkTGF5ZXI6On5XZWJUaWxlZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlRpbGVk
TGF5ZXI6OnNldEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJUaWxlZExheWVyOjpzZXRQ
b3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJUaWxlZExheWVyOjpzZXRUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6V2ViVGlsZWRMYXllcjo6c2V0TmVlZHNEaXNwbGF5KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlRpbGVkTGF5ZXI6OmludGVybmFsU3VibGF5ZXJDb3VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJUaWxlZExheWVyOjppbnRlcm5hbFJlbW92ZUFsbFN1YmxheWVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJUaWxlZExheWVyOjppbnRlcm5hbFNldFN1YmxheWVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJUaWxlZExheWVyOjppbnRlcm5hbEluc2VydFN1Ymxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlRpbGVkTGF5ZXI6OmludGVybmFsU3VibGF5ZXJB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlRpbGVkTGF5ZXI6OmludGVybmFsSW5kZXhP
ZlN1YmxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlRpbGVkTGF5ZXI6OnRpbGVQYXJlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViVGlsZWRMYXllcjo6YWRkVGlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJUaWxlZExheWVyOjpyZW1vdmVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YlRpbGVkTGF5ZXI6OnRpbGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlRpbGVkTGF5
ZXI6Om51bVRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlRpbGVkTGF5ZXI6OnVwZGF0ZVRp
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlRpbGVkTGF5ZXI6OmRyYXdUaWxlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vV2ViVGlsZWRMYXllci5oOiBBZGRlZC4KKwogMjAx
MC0wNS0yMSAgU3RldmUgQmxvY2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCShyZXZpc2lvbiA1OTYyOSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzODY3LDYgKzIzODY3LDIyIEBACiAJCQkJ
CQk+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFdlYkxheWVyLmNwcCINCisJCQkJCQk+DQorCQkJCQk8L0Zp
bGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3Ncd2luXFdlYkxheWVyLmgiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUN
CisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxXZWJUaWxlZExh
eWVyLmNwcCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFdlYlRpbGVkTGF5ZXIuaCINCisJ
CQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFdLQ0FDRkNvbnRleHRGbHVzaGVyLmNwcCINCiAJCQkJ
CQk+DQogCQkJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
V0tDQUNGTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9XS0NBQ0ZMYXllci5oCShyZXZpc2lvbiA1OTYyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1dLQ0FDRkxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEyICs2MCwxNCBA
QAogICAgIHZpcnR1YWwgfldLQ0FDRkxheWVyKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVl
ZHNSZW5kZXIoKSB7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBkcmF3SW5Db250ZXh0KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheShj
b25zdCBDR1JlY3QqIGRpcnR5UmVjdCk7CiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKIAog
ICAgIC8vIE1ha2VzIHRoaXMgbGF5ZXIgdGhlIHJvb3Qgd2hlbiB0aGUgcGFzc2VkIGNvbnRleHQg
aXMgcmVuZGVyZWQKICAgICB2b2lkIGJlY29tZVJvb3RMYXllckZvckNvbnRleHQoQ0FDRkNvbnRl
eHRSZWYpOworICAgIHZvaWQgcmVzaWduUm9vdExheWVyRm9yQ29udGV4dChDQUNGQ29udGV4dFJl
Zik7CiAKICAgICBzdGF0aWMgUmV0YWluUHRyPENGVHlwZVJlZj4gY2ZWYWx1ZShmbG9hdCB2YWx1
ZSkgeyByZXR1cm4gUmV0YWluUHRyPENGVHlwZVJlZj4oQWRvcHRDRiwgQ0ZOdW1iZXJDcmVhdGUo
MCwga0NGTnVtYmVyRmxvYXQzMlR5cGUsICZ2YWx1ZSkpOyB9CiAgICAgc3RhdGljIFJldGFpblB0
cjxDRlR5cGVSZWY+IGNmVmFsdWUoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQpA
QCAtMTEzLDEwICsxMTUsMTggQEAKICAgICBib29sIGlzVHJhbnNmb3JtTGF5ZXIoKSBjb25zdDsK
IAogICAgIHZvaWQgYWRkU3VibGF5ZXIoUGFzc1JlZlB0cjxXS0NBQ0ZMYXllcj4gc3VibGF5ZXIp
OwotICAgIHZvaWQgaW5zZXJ0U3VibGF5ZXIoUGFzc1JlZlB0cjxXS0NBQ0ZMYXllcj4sIHNpemVf
dCBpbmRleCk7CiAgICAgdm9pZCBpbnNlcnRTdWJsYXllckFib3ZlTGF5ZXIoUGFzc1JlZlB0cjxX
S0NBQ0ZMYXllcj4sIGNvbnN0IFdLQ0FDRkxheWVyKiByZWZlcmVuY2UpOwogICAgIHZvaWQgaW5z
ZXJ0U3VibGF5ZXJCZWxvd0xheWVyKFBhc3NSZWZQdHI8V0tDQUNGTGF5ZXI+LCBjb25zdCBXS0NB
Q0ZMYXllciogcmVmZXJlbmNlKTsKICAgICB2b2lkIHJlcGxhY2VTdWJsYXllcihXS0NBQ0ZMYXll
ciogcmVmZXJlbmNlLCBQYXNzUmVmUHRyPFdLQ0FDRkxheWVyPik7CisgICAgdm9pZCBzZXRTdWJs
YXllcnNGcm9tTGF5ZXIoV0tDQUNGTGF5ZXIqIHNvdXJjZSk7CisKKyAgICB2b2lkIHJlbW92ZUFs
bFN1YmxheWVycygpIHsgaW50ZXJuYWxSZW1vdmVBbGxTdWJsYXllcnMoKTsgfQorICAgIHZvaWQg
c2V0U3VibGF5ZXJzKGNvbnN0IFZlY3RvcjxSZWZQdHI8V0tDQUNGTGF5ZXI+ID4mIHN1YmxheWVy
cykgeyBpbnRlcm5hbFNldFN1YmxheWVycyhzdWJsYXllcnMpOyB9CisKKyAgICB2b2lkIGluc2Vy
dFN1YmxheWVyKFBhc3NSZWZQdHI8V0tDQUNGTGF5ZXI+IGxheWVyLCBzaXplX3QgaW5kZXgpIHsg
aW50ZXJuYWxJbnNlcnRTdWJsYXllcihsYXllciwgaW5kZXgpOyB9CisKKyAgICBzaXplX3Qgc3Vi
bGF5ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsU3VibGF5ZXJDb3VudCgpOyB9CisK
ICAgICB2b2lkIHJlbW92ZUZyb21TdXBlcmxheWVyKCk7CiAKICAgICBXS0NBQ0ZMYXllciogYW5j
ZXN0b3JPclNlbGZXaXRoU3VwZXJsYXllcihXS0NBQ0ZMYXllciopIGNvbnN0OwpAQCAtMTM2LDcg
KzE0Niw3IEBACiAgICAgdm9pZCBzZXRCb3JkZXJXaWR0aChDR0Zsb2F0IHdpZHRoKSB7IENBQ0ZM
YXllclNldEJvcmRlcldpZHRoKGxheWVyKCksIHdpZHRoKTsgc2V0TmVlZHNDb21taXQoKTsgfQog
ICAgIENHRmxvYXQgYm9yZGVyV2lkdGgoKSBjb25zdCB7IHJldHVybiBDQUNGTGF5ZXJHZXRCb3Jk
ZXJXaWR0aChsYXllcigpKTsgfQogCi0gICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgQ0dSZWN0Jik7
CisgICAgdmlydHVhbCB2b2lkIHNldEJvdW5kcyhjb25zdCBDR1JlY3QmKTsKICAgICBDR1JlY3Qg
Ym91bmRzKCkgY29uc3QgeyByZXR1cm4gQ0FDRkxheWVyR2V0Qm91bmRzKGxheWVyKCkpOyB9CiAK
ICAgICB2b2lkIHNldENsZWFyc0NvbnRleHQoYm9vbCBjbGVhcnMpIHsgQ0FDRkxheWVyU2V0Q2xl
YXJzQ29udGV4dChsYXllcigpLCBjbGVhcnMpOyBzZXROZWVkc0NvbW1pdCgpOyB9CkBAIC0xNTEs
NyArMTYxLDcgQEAKICAgICB2b2lkIHNldENvbnRlbnRzR3Jhdml0eShDb250ZW50c0dyYXZpdHlU
eXBlKTsKICAgICBDb250ZW50c0dyYXZpdHlUeXBlIGNvbnRlbnRzR3Jhdml0eSgpIGNvbnN0Owog
ICAgICAgICAKLSAgICB2b2lkIHNldERvdWJsZVNpZGVkKGJvb2wgYikgeyBDQUNGTGF5ZXJTZXRE
b3VibGVTaWRlZChsYXllcigpLCBiKTsgc2V0TmVlZHNDb21taXQoKTsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZXREb3VibGVTaWRlZChib29sIGIpIHsgQ0FDRkxheWVyU2V0RG91YmxlU2lkZWQobGF5
ZXIoKSwgYik7IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBib29sIGRvdWJsZVNpZGVkKCkgY29u
c3QgeyByZXR1cm4gQ0FDRkxheWVySXNEb3VibGVTaWRlZChsYXllcigpKTsgfQogCiAgICAgdm9p
ZCBzZXRFZGdlQW50aWFsaWFzaW5nTWFzayh1aW50MzJfdCBtYXNrKSB7IENBQ0ZMYXllclNldEVk
Z2VBbnRpYWxpYXNpbmdNYXNrKGxheWVyKCksIG1hc2spOyBzZXROZWVkc0NvbW1pdCgpOyB9CkBA
IC0xNjAsOSArMTcwLDYgQEAKICAgICB2b2lkIHNldEZpbHRlcnMoQ0ZBcnJheVJlZiBmaWx0ZXJz
KSB7IENBQ0ZMYXllclNldEZpbHRlcnMobGF5ZXIoKSwgZmlsdGVycyk7IHNldE5lZWRzQ29tbWl0
KCk7IH0KICAgICBDRkFycmF5UmVmIGZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBDQUNGTGF5ZXJH
ZXRGaWx0ZXJzKGxheWVyKCkpOyB9CiAKLSAgICB2b2lkIHNldEZyYW1lKGNvbnN0IENHUmVjdCYp
OwotICAgIENHUmVjdCBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIENBQ0ZMYXllckdldEZyYW1lKGxh
eWVyKCkpOyB9Ci0KICAgICB2b2lkIHNldEhpZGRlbihib29sIGhpZGRlbikgeyBDQUNGTGF5ZXJT
ZXRIaWRkZW4obGF5ZXIoKSwgaGlkZGVuKTsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGJvb2wg
aXNIaWRkZW4oKSBjb25zdCB7IHJldHVybiBDQUNGTGF5ZXJJc0hpZGRlbihsYXllcigpKTsgfQog
CkBAIC0xODksNyArMTk2LDcgQEAKICAgICB2b2lkIHNldE9wYXF1ZShib29sIGIpIHsgQ0FDRkxh
eWVyU2V0T3BhcXVlKGxheWVyKCksIGIpOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgYm9vbCBv
cGFxdWUoKSBjb25zdCB7IHJldHVybiBDQUNGTGF5ZXJJc09wYXF1ZShsYXllcigpKTsgfQogCi0g
ICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBDR1BvaW50JiBwb3NpdGlvbikgeyBDQUNGTGF5ZXJT
ZXRQb3NpdGlvbihsYXllcigpLCBwb3NpdGlvbik7IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgQ0dQb2ludCYgcG9zaXRpb24pIHsgQ0FDRkxh
eWVyU2V0UG9zaXRpb24obGF5ZXIoKSwgcG9zaXRpb24pOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAg
ICAgQ0dQb2ludCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIENBQ0ZMYXllckdldFBvc2l0aW9u
KGxheWVyKCkpOyB9CiAKICAgICB2b2lkIHNldFpQb3NpdGlvbihDR0Zsb2F0IHBvc2l0aW9uKSB7
IENBQ0ZMYXllclNldFpQb3NpdGlvbihsYXllcigpLCBwb3NpdGlvbik7IHNldE5lZWRzQ29tbWl0
KCk7IH0KQEAgLTIwNiwxNiArMjEzLDEyIEBACiAgICAgdm9pZCBzZXRTb3J0c1N1YmxheWVycyhi
b29sIHNvcnRzKSB7IENBQ0ZMYXllclNldFNvcnRzU3VibGF5ZXJzKGxheWVyKCksIHNvcnRzKTsg
c2V0TmVlZHNDb21taXQoKTsgfQogICAgIGJvb2wgc29ydHNTdWJsYXllcnMoKSBjb25zdCB7IHJl
dHVybiBDQUNGTGF5ZXJHZXRTb3J0c1N1YmxheWVycyhsYXllcigpKTsgfQogCi0gICAgdm9pZCBy
ZW1vdmVBbGxTdWJsYXllcnMoKTsKLSAgICAKLSAgICB2b2lkIHNldFN1YmxheWVycyhjb25zdCBW
ZWN0b3I8UmVmUHRyPFdLQ0FDRkxheWVyPiA+Jik7Ci0KICAgICB2b2lkIHNldFN1YmxheWVyVHJh
bnNmb3JtKGNvbnN0IENBVHJhbnNmb3JtM0QmIHRyYW5zZm9ybSkgeyBDQUNGTGF5ZXJTZXRTdWJs
YXllclRyYW5zZm9ybShsYXllcigpLCB0cmFuc2Zvcm0pOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAg
ICAgQ0FUcmFuc2Zvcm0zRCBzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIENBQ0ZM
YXllckdldFN1YmxheWVyVHJhbnNmb3JtKGxheWVyKCkpOyB9CiAKICAgICBXS0NBQ0ZMYXllciog
c3VwZXJsYXllcigpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgQ0FUcmFu
c2Zvcm0zRCYgdHJhbnNmb3JtKSB7IENBQ0ZMYXllclNldFRyYW5zZm9ybShsYXllcigpLCB0cmFu
c2Zvcm0pOyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9y
bShjb25zdCBDQVRyYW5zZm9ybTNEJiB0cmFuc2Zvcm0pIHsgQ0FDRkxheWVyU2V0VHJhbnNmb3Jt
KGxheWVyKCksIHRyYW5zZm9ybSk7IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBDQVRyYW5zZm9y
bTNEIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIENBQ0ZMYXllckdldFRyYW5zZm9ybShsYXll
cigpKTsgfQogCiAgICAgdm9pZCBzZXRHZW9tZXRyeUZsaXBwZWQoYm9vbCBmbGlwcGVkKSB7IENB
Q0ZMYXllclNldEdlb21ldHJ5RmxpcHBlZChsYXllcigpLCBmbGlwcGVkKTsgc2V0TmVlZHNDb21t
aXQoKTsgfQpAQCAtMjMxLDI4ICsyMzQsMjggQEAKIAogICAgIHZvaWQgc2V0TmVlZHNDb21taXQo
KTsKIAotcHJpdmF0ZToKICAgICBDQUNGTGF5ZXJSZWYgbGF5ZXIoKSBjb25zdCB7IHJldHVybiBt
X2xheWVyLmdldCgpOyB9Ci0gICAgc2l6ZV90IG51bVN1YmxheWVycygpIGNvbnN0Ci0gICAgewot
ICAgICAgICBDRkFycmF5UmVmIHN1YmxheWVycyA9IENBQ0ZMYXllckdldFN1YmxheWVycyhsYXll
cigpKTsKLSAgICAgICAgcmV0dXJuIHN1YmxheWVycyA/IENGQXJyYXlHZXRDb3VudChzdWJsYXll
cnMpIDogMDsKLSAgICB9CisgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSBy
ZW1vdmVGcm9tU3VwZXJsYXllci4KKyAgICB2b2lkIHJlbW92ZVN1YmxheWVyKGNvbnN0IFdLQ0FD
RkxheWVyKik7CiAKLSAgICBjb25zdCBXS0NBQ0ZMYXllciogc3VibGF5ZXJBdEluZGV4KGludCkg
Y29uc3Q7Ci0gICAgCisgICAgLy8gTWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGZvciBzdWJsYXll
ciBtYW5hZ2VtZW50CisgICAgdmlydHVhbCBXS0NBQ0ZMYXllciogaW50ZXJuYWxTdWJsYXllckF0
SW5kZXgoaW50KSBjb25zdDsKKwogICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBwYXNz
ZWQgbGF5ZXIgaW4gdGhpcyBsYXllcidzIHN1YmxheWVycyBsaXN0CiAgICAgLy8gb3IgLTEgaWYg
bm90IGZvdW5kCi0gICAgaW50IGluZGV4T2ZTdWJsYXllcihjb25zdCBXS0NBQ0ZMYXllciopOwor
ICAgIHZpcnR1YWwgaW50IGludGVybmFsSW5kZXhPZlN1YmxheWVyKGNvbnN0IFdLQ0FDRkxheWVy
Kik7CiAKLSAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHJlbW92ZUZyb21T
dXBlcmxheWVyLgotICAgIHZvaWQgcmVtb3ZlU3VibGF5ZXIoY29uc3QgV0tDQUNGTGF5ZXIqKTsK
KyAgICB2aXJ0dWFsIHNpemVfdCBpbnRlcm5hbFN1YmxheWVyQ291bnQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgaW50ZXJuYWxJbnNlcnRTdWJsYXllcihQYXNzUmVmUHRyPFdLQ0FDRkxheWVy
Piwgc2l6ZV90IGluZGV4KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxSZW1vdmVBbGxTdWJs
YXllcnMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxTZXRTdWJsYXllcnMoY29uc3QgVmVj
dG9yPFJlZlB0cjxXS0NBQ0ZMYXllcj4gPiYpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIC8vIFBy
aW50IHRoaXMgbGF5ZXIgYW5kIGl0cyBjaGlsZHJlbiB0byB0aGUgY29uc29sZQogICAgIHZvaWQg
cHJpbnRMYXllcihpbnQgaW5kZW50KSBjb25zdDsKICNlbmRpZgogCitwcml2YXRlOgogICAgIFJl
dGFpblB0cjxDQUNGTGF5ZXJSZWY+IG1fbGF5ZXI7CiAgICAgYm9vbCBtX25lZWRzRGlzcGxheU9u
Qm91bmRzQ2hhbmdlOwogfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dl
YlRpbGVkTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9XZWJUaWxlZExheWVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9XZWJUaWxlZExheWVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgV2ViVGlsZWRMYXllcl9oCisjZGVmaW5lIFdlYlRpbGVkTGF5ZXJfaAorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiV2ViTGF5ZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXZWJUaWxlZExheWVyIDogcHVibGljIFdlYkxheWVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJUaWxlZExheWVyPiBjcmVhdGUo
Y29uc3QgQ0dTaXplJiB0aWxlU2l6ZSwgR3JhcGhpY3NMYXllciogb3duZXIpOworCisgICAgdmly
dHVhbCB+V2ViVGlsZWRMYXllcigpOworCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxh
eShjb25zdCBDR1JlY3QqIGRpcnR5UmVjdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm91bmRz
KGNvbnN0IENHUmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBDR1Bv
aW50JiBwb3NpdGlvbik7CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBDQVRy
YW5zZm9ybTNEJiB0cmFuc2Zvcm0pOworCitwcm90ZWN0ZWQ6CisgICAgV2ViVGlsZWRMYXllcihj
b25zdCBDR1NpemUmIHRpbGVTaXplLCBHcmFwaGljc0xheWVyKiBvd25lcik7CisKKyAgICAvLyBP
dmVycmlkZGVuIGZyb20gV0tDQUNGTGF5ZXIKKyAgICB2aXJ0dWFsIFdLQ0FDRkxheWVyKiBpbnRl
cm5hbFN1YmxheWVyQXRJbmRleChpbnQpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGludGVybmFs
SW5kZXhPZlN1YmxheWVyKGNvbnN0IFdLQ0FDRkxheWVyKik7CisKKyAgICB2aXJ0dWFsIHNpemVf
dCBpbnRlcm5hbFN1YmxheWVyQ291bnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJu
YWxJbnNlcnRTdWJsYXllcihQYXNzUmVmUHRyPFdLQ0FDRkxheWVyPiwgc2l6ZV90IGluZGV4KTsK
KworICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbFJlbW92ZUFsbFN1YmxheWVycygpOworICAgIHZp
cnR1YWwgdm9pZCBpbnRlcm5hbFNldFN1YmxheWVycyhjb25zdCBWZWN0b3I8UmVmUHRyPFdLQ0FD
RkxheWVyPiA+Jik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgdGlsZURpc3BsYXlDYWxs
YmFjayhDQUNGTGF5ZXJSZWYsIENHQ29udGV4dFJlZik7CisgICAgdm9pZCBkcmF3VGlsZShDQUNG
TGF5ZXJSZWYsIENHQ29udGV4dFJlZik7CisKKyAgICBDQUNGTGF5ZXJSZWYgV2ViVGlsZWRMYXll
cjo6dGlsZVBhcmVudCgpIGNvbnN0OworICAgIHZvaWQgYWRkVGlsZSgpOworICAgIHZvaWQgcmVt
b3ZlVGlsZSgpOworICAgIENBQ0ZMYXllclJlZiB0aWxlQXRJbmRleChpbnQpOworICAgIGludCBu
dW1UaWxlcygpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGVUaWxlcygpOworCisgICAgQ0dTaXpl
IG1fdGlsZVNpemU7Cit9OworCit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisKKyNlbmRpZiAvLyBXZWJUaWxlZExheWVyX2gKClByb3BlcnR5IGNoYW5nZXMgb246
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dlYlRpbGVkTGF5ZXIuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9XZWJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1dlYkxheWVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9XZWJMYXllci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFdlYkxheWVyX2gKKyNkZWZpbmUgV2ViTGF5ZXJfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiV0tDQUNGTGF5ZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBHcmFwaGljc0xheWVyOworCitjbGFzcyBXZWJMYXllciA6IHB1Ymxp
YyBXS0NBQ0ZMYXllciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V0tDQUNGTGF5
ZXI+IGNyZWF0ZShMYXllclR5cGUgbGF5ZXJUeXBlLCBHcmFwaGljc0xheWVyKiBvd25lcikKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViTGF5ZXIobGF5ZXJUeXBlLCBvd25l
cikpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgQ0dS
ZWN0KiBkaXJ0eVJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3SW5Db250ZXh0KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0Kik7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJMYXllcihMYXllclR5cGUg
bGF5ZXJUeXBlLCBHcmFwaGljc0xheWVyKiBvd25lcikKKyAgICAgOiBXS0NBQ0ZMYXllcihsYXll
clR5cGUpCisgICAgICwgbV9vd25lcihvd25lcikKKyAgICB7CisgICAgfQorCisgICAgR3JhcGhp
Y3NMYXllciogbV9vd25lcjsKK307CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKworI2VuZGlmIC8vIFdlYkxheWVyX2gKClByb3BlcnR5IGNoYW5nZXMgb246
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dlYkxheWVyLmgKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NMYXllckNBQ0YuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyQ0FDRi5oCShyZXZpc2lvbiA1OTYyOSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJDQUNGLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk4LDYgKzk4LDkgQEAKICAgICBXS0NBQ0ZMYXllciogaG9zdExheWVyRm9yU3Vi
bGF5ZXJzKCkgY29uc3Q7CiAgICAgV0tDQUNGTGF5ZXIqIGxheWVyRm9yU3VwZXJsYXllcigpIGNv
bnN0OwogCisgICAgYm9vbCByZXF1aXJlc1RpbGVkTGF5ZXIoY29uc3QgRmxvYXRTaXplJikgY29u
c3Q7CisgICAgdm9pZCBzd2FwRnJvbU9yVG9UaWxlZExheWVyKGJvb2wgdXNlVGlsZWRMYXllcik7
CisKICAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gZGVmYXVsdENvbnRlbnRz
T3JpZW50YXRpb24oKSBjb25zdDsKICAgICB2b2lkIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwogICAg
IHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbigpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vV0tDQUNGTGF5ZXJSZW5kZXJlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXJSZW5kZXJlci5jcHAJKHJldmlzaW9uIDU5
NjI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXJSZW5kZXJl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Nyw2ICszNzcsNyBAQAogICAgIG1fcm9vdExheWVy
LT5hZGRTdWJsYXllcihtX2NsaXBMYXllcik7CiAgICAgbV9jbGlwTGF5ZXItPmFkZFN1YmxheWVy
KG1fc2Nyb2xsTGF5ZXIpOwogICAgIG1fY2xpcExheWVyLT5zZXRNYXNrc1RvQm91bmRzKHRydWUp
OworICAgIG1fcm9vdExheWVyLT5zZXRBbmNob3JQb2ludChDR1BvaW50TWFrZSgwLCAwKSk7CiAg
ICAgbV9zY3JvbGxMYXllci0+c2V0QW5jaG9yUG9pbnQoQ0dQb2ludE1ha2UoMCwgMSkpOwogICAg
IG1fY2xpcExheWVyLT5zZXRBbmNob3JQb2ludChDR1BvaW50TWFrZSgwLCAxKSk7CiAKQEAgLTM4
Nyw3ICszODgsNyBAQAogI2VuZGlmCiAKICAgICBpZiAoSXNXaW5kb3cobV9ob3N0V2luZG93KSkK
LSAgICAgICAgbV9yb290TGF5ZXItPnNldEZyYW1lKGJvdW5kcygpKTsKKyAgICAgICAgbV9yb290
TGF5ZXItPnNldEJvdW5kcyhib3VuZHMoKSk7CiAKICAgICBpZiAobV9jb250ZXh0KQogICAgICAg
ICBtX3Jvb3RMYXllci0+YmVjb21lUm9vdExheWVyRm9yQ29udGV4dChtX2NvbnRleHQuZ2V0KCkp
OwpAQCAtMzk4LDYgKzM5OSw3IEBACiB2b2lkIFdLQ0FDRkxheWVyUmVuZGVyZXI6OmRlc3Ryb3lS
ZW5kZXJlcigpCiB7CiAgICAgaWYgKG1fY29udGV4dCkgeworICAgICAgICBtX3Jvb3RMYXllci0+
cmVzaWduUm9vdExheWVyRm9yQ29udGV4dChtX2NvbnRleHQuZ2V0KCkpOwogICAgICAgICB3aW5k
b3dzRm9yQ29udGV4dHMoKS5yZW1vdmUobV9jb250ZXh0LmdldCgpKTsKICAgICAgICAgV0tDQUNG
Q29udGV4dEZsdXNoZXI6OnNoYXJlZCgpLnJlbW92ZUNvbnRleHQobV9jb250ZXh0LmdldCgpKTsK
ICAgICB9CkBAIC00MjgsNyArNDMwLDcgQEAKICAgICByZXNldERldmljZShDaGFuZ2VkV2luZG93
U2l6ZSk7CiAKICAgICBpZiAobV9yb290TGF5ZXIpIHsKLSAgICAgICAgbV9yb290TGF5ZXItPnNl
dEZyYW1lKGJvdW5kcygpKTsKKyAgICAgICAgbV9yb290TGF5ZXItPnNldEJvdW5kcyhib3VuZHMo
KSk7CiAgICAgICAgIFdLQ0FDRkNvbnRleHRGbHVzaGVyOjpzaGFyZWQoKS5mbHVzaEFsbENvbnRl
eHRzKCk7CiAgICAgICAgIHVwZGF0ZVNjcm9sbEZyYW1lKCk7CiAgICAgfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dLQ0FDRkxheWVyLmNwcAkocmV2aXNpb24gNTk2
MjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XS0NBQ0ZMYXllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3NSw2ICsxNzUsMTEgQEAKICAgICBzZXROZWVkc0NvbW1pdCgpOwog
fQogCit2b2lkIFdLQ0FDRkxheWVyOjpyZXNpZ25Sb290TGF5ZXJGb3JDb250ZXh0KENBQ0ZDb250
ZXh0UmVmIGNvbnRleHQpCit7CisgICAgQ0FDRkNvbnRleHRTZXRMYXllcihjb250ZXh0LCAwKTsK
K30KKwogdm9pZCBXS0NBQ0ZMYXllcjo6c2V0TmVlZHNDb21taXQoKQogewogICAgIFdLQ0FDRkxh
eWVyKiByb290ID0gcm9vdExheWVyKCk7CkBAIC0yMDAsMTIgKzIwNSwxMiBAQAogCiB2b2lkIFdL
Q0FDRkxheWVyOjphZGRTdWJsYXllcihQYXNzUmVmUHRyPFdLQ0FDRkxheWVyPiBzdWJsYXllcikK
IHsKLSAgICBpbnNlcnRTdWJsYXllcihzdWJsYXllciwgbnVtU3VibGF5ZXJzKCkpOworICAgIGlu
c2VydFN1YmxheWVyKHN1YmxheWVyLCBzdWJsYXllckNvdW50KCkpOwogfQogCi12b2lkIFdLQ0FD
RkxheWVyOjppbnNlcnRTdWJsYXllcihQYXNzUmVmUHRyPFdLQ0FDRkxheWVyPiBzdWJsYXllciwg
c2l6ZV90IGluZGV4KQordm9pZCBXS0NBQ0ZMYXllcjo6aW50ZXJuYWxJbnNlcnRTdWJsYXllcihQ
YXNzUmVmUHRyPFdLQ0FDRkxheWVyPiBzdWJsYXllciwgc2l6ZV90IGluZGV4KQogewotICAgIGlu
ZGV4ID0gbWluKGluZGV4LCBudW1TdWJsYXllcnMoKSk7CisgICAgaW5kZXggPSBtaW4oaW5kZXgs
IHN1YmxheWVyQ291bnQoKSk7CiAgICAgc3VibGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7
CiAgICAgQ0FDRkxheWVySW5zZXJ0U3VibGF5ZXIobGF5ZXIoKSwgc3VibGF5ZXItPmxheWVyKCks
IGluZGV4KTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwpAQCAtMjE4LDcgKzIyMyw3IEBACiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnQgcmVmZXJlbmNlSW5kZXggPSBpbmRleE9mU3Vi
bGF5ZXIocmVmZXJlbmNlKTsKKyAgICBpbnQgcmVmZXJlbmNlSW5kZXggPSBpbnRlcm5hbEluZGV4
T2ZTdWJsYXllcihyZWZlcmVuY2UpOwogICAgIGlmIChyZWZlcmVuY2VJbmRleCA9PSAtMSkgewog
ICAgICAgICBhZGRTdWJsYXllcihzdWJsYXllcik7CiAgICAgICAgIHJldHVybjsKQEAgLTIzNCw3
ICsyMzksNyBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW50IHJlZmVyZW5jZUlu
ZGV4ID0gaW5kZXhPZlN1YmxheWVyKHJlZmVyZW5jZSk7CisgICAgaW50IHJlZmVyZW5jZUluZGV4
ID0gaW50ZXJuYWxJbmRleE9mU3VibGF5ZXIocmVmZXJlbmNlKTsKICAgICBpZiAocmVmZXJlbmNl
SW5kZXggPT0gLTEpIHsKICAgICAgICAgYWRkU3VibGF5ZXIoc3VibGF5ZXIpOwogICAgICAgICBy
ZXR1cm47CkBAIC0yNTEsNyArMjU2LDcgQEAKICAgICBpZiAocmVmZXJlbmNlID09IG5ld0xheWVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgcmVmZXJlbmNlSW5kZXggPSBpbmRleE9mU3Vi
bGF5ZXIocmVmZXJlbmNlKTsKKyAgICBpbnQgcmVmZXJlbmNlSW5kZXggPSBpbnRlcm5hbEluZGV4
T2ZTdWJsYXllcihyZWZlcmVuY2UpOwogICAgIEFTU0VSVChyZWZlcmVuY2VJbmRleCAhPSAtMSk7
CiAgICAgaWYgKHJlZmVyZW5jZUluZGV4ID09IC0xKQogICAgICAgICByZXR1cm47CkBAIC0yNjQs
NiArMjY5LDI1IEBACiAgICAgfQogfQogCitzaXplX3QgV0tDQUNGTGF5ZXI6OmludGVybmFsU3Vi
bGF5ZXJDb3VudCgpIGNvbnN0Cit7CisgICAgQ0ZBcnJheVJlZiBzdWJsYXllcnMgPSBDQUNGTGF5
ZXJHZXRTdWJsYXllcnMobGF5ZXIoKSk7CisgICAgcmV0dXJuIHN1YmxheWVycyA/IENGQXJyYXlH
ZXRDb3VudChzdWJsYXllcnMpIDogMDsKK30KKwordm9pZCAgV0tDQUNGTGF5ZXI6OnNldFN1Ymxh
eWVyc0Zyb21MYXllcihXS0NBQ0ZMYXllciogc291cmNlKQoreworICAgIC8vIFdlIHdpbGwgdXNl
IHNldFN1YmxheWVycygpIGJlY2F1c2UgaXQgcHJvcGVybHkgbnVsbHMKKyAgICAvLyBvdXQgdGhl
IHN1cGVybGF5ZXIgcG9pbnRlci4KKyAgICBWZWN0b3I8UmVmUHRyPFdLQ0FDRkxheWVyPiA+IHN1
YmxheWVyczsKKyAgICBzaXplX3QgbiA9IHNvdXJjZS0+c3VibGF5ZXJDb3VudCgpOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICAgIHN1YmxheWVycy5hcHBlbmQo
c291cmNlLT5pbnRlcm5hbFN1YmxheWVyQXRJbmRleChpKSk7CisKKyAgICBzZXRTdWJsYXllcnMo
c3VibGF5ZXJzKTsKK30KKwogdm9pZCBXS0NBQ0ZMYXllcjo6cmVtb3ZlRnJvbVN1cGVybGF5ZXIo
KQogewogICAgIFdLQ0FDRkxheWVyKiBzdXBlcmxheWVyID0gdGhpcy0+c3VwZXJsYXllcigpOwpA
QCAtMjc0LDIyICsyOTgsMjUgQEAKICAgICBzdXBlcmxheWVyLT5zZXROZWVkc0NvbW1pdCgpOwog
fQogCi1jb25zdCBXS0NBQ0ZMYXllciogV0tDQUNGTGF5ZXI6OnN1YmxheWVyQXRJbmRleChpbnQg
aW5kZXgpIGNvbnN0CitXS0NBQ0ZMYXllciogV0tDQUNGTGF5ZXI6OmludGVybmFsU3VibGF5ZXJB
dEluZGV4KGludCBpbmRleCkgY29uc3QKIHsKICAgICBDRkFycmF5UmVmIHN1YmxheWVycyA9IENB
Q0ZMYXllckdldFN1YmxheWVycyhsYXllcigpKTsKLSAgICBpZiAoaW5kZXggPCAwIHx8IENGQXJy
YXlHZXRDb3VudChzdWJsYXllcnMpIDw9IGluZGV4KQorICAgIGlmICghc3VibGF5ZXJzIHx8IGlu
ZGV4IDwgMCB8fCBDRkFycmF5R2V0Q291bnQoc3VibGF5ZXJzKSA8PSBpbmRleCkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgCiAgICAgcmV0dXJuIGxheWVyKHN0YXRpY19jYXN0PENBQ0ZMYXllclJl
Zj4oY29uc3RfY2FzdDx2b2lkKj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChzdWJsYXllcnMsIGlu
ZGV4KSkpKTsKIH0KIAotaW50IFdLQ0FDRkxheWVyOjppbmRleE9mU3VibGF5ZXIoY29uc3QgV0tD
QUNGTGF5ZXIqIHJlZmVyZW5jZSkKK2ludCBXS0NBQ0ZMYXllcjo6aW50ZXJuYWxJbmRleE9mU3Vi
bGF5ZXIoY29uc3QgV0tDQUNGTGF5ZXIqIHJlZmVyZW5jZSkKIHsKICAgICBDQUNGTGF5ZXJSZWYg
cmVmID0gcmVmZXJlbmNlLT5sYXllcigpOwogICAgIGlmICghcmVmKQogICAgICAgICByZXR1cm4g
LTE7CiAKICAgICBDRkFycmF5UmVmIHN1YmxheWVycyA9IENBQ0ZMYXllckdldFN1YmxheWVycyhs
YXllcigpKTsKKyAgICBpZiAoIXN1YmxheWVycykKKyAgICAgICAgcmV0dXJuIC0xOworCiAgICAg
c2l6ZV90IG4gPSBDRkFycmF5R2V0Q291bnQoc3VibGF5ZXJzKTsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbjsgKytpKQpAQCAtMzIxLDE5ICszNDgsNiBAQAogICAgICAgICBzZXROZWVk
c0Rpc3BsYXkoKTsKIH0KIAotdm9pZCBXS0NBQ0ZMYXllcjo6c2V0RnJhbWUoY29uc3QgQ0dSZWN0
JiByZWN0KQotewotICAgIENHUmVjdCBvbGRGcmFtZSA9IGZyYW1lKCk7Ci0gICAgaWYgKENHUmVj
dEVxdWFsVG9SZWN0KHJlY3QsIG9sZEZyYW1lKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0FD
RkxheWVyU2V0RnJhbWUobGF5ZXIoKSwgcmVjdCk7Ci0gICAgc2V0TmVlZHNDb21taXQoKTsKLQot
ICAgIGlmIChtX25lZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlKQotICAgICAgICBzZXROZWVkc0Rp
c3BsYXkoKTsKLX0KLQogdm9pZCBXS0NBQ0ZMYXllcjo6c2V0Q29udGVudHNHcmF2aXR5KENvbnRl
bnRzR3Jhdml0eVR5cGUgdHlwZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRDb250ZW50c0dyYXZpdHko
bGF5ZXIoKSwgdG9DQUNGQ29udGVudHNHcmF2aXR5VHlwZSh0eXBlKSk7CkBAIC0zNzQsMTMgKzM4
OCwxMyBAQAogICAgIHJldHVybiBsYXllcjsKIH0KIAotdm9pZCBXS0NBQ0ZMYXllcjo6cmVtb3Zl
QWxsU3VibGF5ZXJzKCkKK3ZvaWQgV0tDQUNGTGF5ZXI6OmludGVybmFsUmVtb3ZlQWxsU3VibGF5
ZXJzKCkKIHsKICAgICBDQUNGTGF5ZXJTZXRTdWJsYXllcnMobGF5ZXIoKSwgMCk7CiAgICAgc2V0
TmVlZHNDb21taXQoKTsKIH0KIAotdm9pZCBXS0NBQ0ZMYXllcjo6c2V0U3VibGF5ZXJzKGNvbnN0
IFZlY3RvcjxSZWZQdHI8V0tDQUNGTGF5ZXI+ID4mIHN1YmxheWVycykKK3ZvaWQgV0tDQUNGTGF5
ZXI6OmludGVybmFsU2V0U3VibGF5ZXJzKGNvbnN0IFZlY3RvcjxSZWZQdHI8V0tDQUNGTGF5ZXI+
ID4mIHN1YmxheWVycykKIHsKICAgICAvLyBSZW1vdmUgYWxsIHRoZSBjdXJyZW50IHN1YmxheWVy
cyBhbmQgYWRkIHRoZSBwYXNzZWQgbGF5ZXJzCiAgICAgQ0FDRkxheWVyU2V0U3VibGF5ZXJzKGxh
eWVyKCksIDApOwpAQCAtNTAyLDEyICs1MTYsMTIgQEAKICAgICB9CiAKICAgICAvLyBQcmludCBz
dWJsYXllcnMgaWYgbmVlZGVkCi0gICAgaW50IG4gPSBudW1TdWJsYXllcnMoKTsKKyAgICBpbnQg
biA9IHN1YmxheWVyQ291bnQoKTsKICAgICBpZiAobiA+IDApIHsKICAgICAgICAgcHJpbnRJbmRl
bnQoaW5kZW50ICsgMSk7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKHN1YmxheWVyc1xuIik7
CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQotICAgICAgICAgICAgc3VibGF5
ZXJBdEluZGV4KGkpLT5wcmludExheWVyKGluZGVudCArIDIpOworICAgICAgICAgICAgaW50ZXJu
YWxTdWJsYXllckF0SW5kZXgoaSktPnByaW50TGF5ZXIoaW5kZW50ICsgMik7CiAKICAgICAgICAg
cHJpbnRJbmRlbnQoaW5kZW50ICsgMSk7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKVxuIik7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XZWJUaWxlZExheWVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XZWJUaWxlZExheWVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dlYlRp
bGVkTGF5ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAi
V2ViVGlsZWRMYXllci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUg
IldLQ0FDRkxheWVyUmVuZGVyZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBu
YW1lc3BhY2Ugc3RkOworCit2b2lkIFdlYlRpbGVkTGF5ZXI6OnRpbGVEaXNwbGF5Q2FsbGJhY2so
Q0FDRkxheWVyUmVmIGxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBzdGF0aWNf
Y2FzdDxXZWJUaWxlZExheWVyKj4oQ0FDRkxheWVyR2V0VXNlckRhdGEobGF5ZXIpKS0+ZHJhd1Rp
bGUobGF5ZXIsIGNvbnRleHQpOworfQorCitQYXNzUmVmUHRyPFdlYlRpbGVkTGF5ZXI+IFdlYlRp
bGVkTGF5ZXI6OmNyZWF0ZShjb25zdCBDR1NpemUmIHRpbGVTaXplLCBHcmFwaGljc0xheWVyKiBv
d25lcikKK3sKKyAgICBpZiAoIVdLQ0FDRkxheWVyUmVuZGVyZXI6OmFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXZWJUaWxlZExheWVyKHRpbGVTaXplLCBvd25lcikpOworfQorCitXZWJUaWxlZExheWVy
OjpXZWJUaWxlZExheWVyKGNvbnN0IENHU2l6ZSYgdGlsZVNpemUsIEdyYXBoaWNzTGF5ZXIqIG93
bmVyKQorICAgIDogV2ViTGF5ZXIoV0tDQUNGTGF5ZXI6OkxheWVyLCBvd25lcikKK3sKKyAgICAv
LyBUaWxlZCBsYXllcnMgYXJlIHBsYWNlZCBpbiBhIGNoaWxkIGxheWVyIHRoYXQgaXMgYWx3YXlz
IHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgVGlsZWRMYXllcgorICAgIFJldGFpblB0cjxDQUNGTGF5
ZXJSZWY+IHRpbGVzKEFkb3B0Q0YsIENBQ0ZMYXllckNyZWF0ZShrQ0FDRkxheWVyKSk7CisgICAg
Q0FDRkxheWVySW5zZXJ0U3VibGF5ZXIobGF5ZXIoKSwgdGlsZXMuZ2V0KCksIDApOworCisgICAg
bV90aWxlU2l6ZSA9IHRpbGVTaXplOworICAgIHVwZGF0ZVRpbGVzKCk7Cit9CisKK1dlYlRpbGVk
TGF5ZXI6On5XZWJUaWxlZExheWVyKCkKK3sKK30KKwordm9pZCBXZWJUaWxlZExheWVyOjpzZXRC
b3VuZHMoY29uc3QgQ0dSZWN0JiByZWN0KQoreworICAgIGlmIChDR1JlY3RFcXVhbFRvUmVjdChy
ZWN0LCBib3VuZHMoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkxheWVyOjpzZXRCb3Vu
ZHMocmVjdCk7CisgICAgdXBkYXRlVGlsZXMoKTsKK30KKwordm9pZCBXZWJUaWxlZExheWVyOjpz
ZXRQb3NpdGlvbihjb25zdCBDR1BvaW50JiBwb2ludCkKK3sKKyAgICBpZiAoQ0dQb2ludEVxdWFs
VG9Qb2ludChwb2ludCwgcG9zaXRpb24oKSkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkxh
eWVyOjpzZXRQb3NpdGlvbihwb2ludCk7CisgICAgdXBkYXRlVGlsZXMoKTsKK30KKwordm9pZCBX
ZWJUaWxlZExheWVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgQ0FUcmFuc2Zvcm0zRCYgdHJhbnNmb3Jt
KQoreworICAgIFdlYkxheWVyOjpzZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICB1cGRhdGVU
aWxlcygpOworfQorCit2b2lkIFdlYlRpbGVkTGF5ZXI6OnNldE5lZWRzRGlzcGxheShjb25zdCBD
R1JlY3QqIGRpcnR5UmVjdCkKK3sKKyAgICAvLyBGSVhNRTogT25seSBzZXROZWVkc0Rpc3BsYXkg
Zm9yIHRpbGVzIHRoYXQgYXJlIGN1cnJlbnRseSB2aXNpYmxlCisgICAgaW50IG51bVRpbGVMYXll
cnMgPSBudW1UaWxlcygpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGlsZUxheWVyczsg
KytpKQorICAgICAgICBDQUNGTGF5ZXJTZXROZWVkc0Rpc3BsYXkodGlsZUF0SW5kZXgoaSksIGRp
cnR5UmVjdCk7Cit9CisKK3NpemVfdCBXZWJUaWxlZExheWVyOjppbnRlcm5hbFN1YmxheWVyQ291
bnQoKSBjb25zdAoreworICAgIEFTU0VSVChXZWJMYXllcjo6aW50ZXJuYWxTdWJsYXllckNvdW50
KCkgPiAwKTsKKyAgICByZXR1cm4gV2ViTGF5ZXI6OmludGVybmFsU3VibGF5ZXJDb3VudCgpIC0g
MTsKK30KKwordm9pZCBXZWJUaWxlZExheWVyOjppbnRlcm5hbFJlbW92ZUFsbFN1YmxheWVycygp
Cit7CisgICAgLy8gUHJlc2VydmUgdGhlIHRpbGUgcGFyZW50CisgICAgUmV0YWluUHRyPENBQ0ZM
YXllclJlZj4gcGFyZW50ID0gdGlsZVBhcmVudCgpOworICAgIFdlYkxheWVyOjppbnRlcm5hbFJl
bW92ZUFsbFN1YmxheWVycygpOworICAgIENBQ0ZMYXllckluc2VydFN1YmxheWVyKGxheWVyKCks
IHBhcmVudC5nZXQoKSwgMCk7Cit9CisKK3ZvaWQgV2ViVGlsZWRMYXllcjo6aW50ZXJuYWxTZXRT
dWJsYXllcnMoY29uc3QgVmVjdG9yPFJlZlB0cjxXS0NBQ0ZMYXllcj4gPiYgc3VibGF5ZXJzKQor
eworICAgIC8vIFByZXNlcnZlIHRoZSB0aWxlIHBhcmVudAorICAgIFJldGFpblB0cjxDQUNGTGF5
ZXJSZWY+IHBhcmVudCA9IHRpbGVQYXJlbnQoKTsKKyAgICBXZWJMYXllcjo6aW50ZXJuYWxTZXRT
dWJsYXllcnMoc3VibGF5ZXJzKTsKKyAgICBDQUNGTGF5ZXJJbnNlcnRTdWJsYXllcihsYXllcigp
LCBwYXJlbnQuZ2V0KCksIDApOworfQorCit2b2lkIFdlYlRpbGVkTGF5ZXI6OmludGVybmFsSW5z
ZXJ0U3VibGF5ZXIoUGFzc1JlZlB0cjxXS0NBQ0ZMYXllcj4gbGF5ZXIsIHNpemVfdCBpbmRleCkK
K3sKKyAgICBXZWJMYXllcjo6aW50ZXJuYWxJbnNlcnRTdWJsYXllcihsYXllciwgaW5kZXggKyAx
KTsKK30KKworV0tDQUNGTGF5ZXIqIFdlYlRpbGVkTGF5ZXI6OmludGVybmFsU3VibGF5ZXJBdElu
ZGV4KGludCBpKSBjb25zdAoreworICAgIHJldHVybiBXZWJMYXllcjo6aW50ZXJuYWxTdWJsYXll
ckF0SW5kZXgoaSArIDEpOworfQorCitpbnQgV2ViVGlsZWRMYXllcjo6aW50ZXJuYWxJbmRleE9m
U3VibGF5ZXIoY29uc3QgV0tDQUNGTGF5ZXIqIGxheWVyKQoreworICAgIGludCBpID0gV2ViTGF5
ZXI6OmludGVybmFsSW5kZXhPZlN1YmxheWVyKGxheWVyKTsKKyAgICByZXR1cm4gKGkgPiAwKSA/
IGkgLSAxIDogLTE7Cit9CisKK0NBQ0ZMYXllclJlZiBXZWJUaWxlZExheWVyOjp0aWxlUGFyZW50
KCkgY29uc3QKK3sKKyAgICBDRkFycmF5UmVmIHN1YmxheWVycyA9IENBQ0ZMYXllckdldFN1Ymxh
eWVycyhsYXllcigpKTsKKyAgICBBU1NFUlQoc3VibGF5ZXJzICYmIENGQXJyYXlHZXRDb3VudChz
dWJsYXllcnMpID4gMCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENBQ0ZMYXllclJlZj4oY29u
c3RfY2FzdDx2b2lkKj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChzdWJsYXllcnMsIDApKSk7Cit9
CisKK3ZvaWQgV2ViVGlsZWRMYXllcjo6YWRkVGlsZSgpCit7CisgICAgQ0FDRkxheWVyUmVmIGxh
eWVyVGlsZVBhcmVudCA9IHRpbGVQYXJlbnQoKTsKKyAgICBSZXRhaW5QdHI8Q0FDRkxheWVyUmVm
PiBuZXdMYXllcihBZG9wdENGLCBDQUNGTGF5ZXJDcmVhdGUoa0NBQ0ZMYXllcikpOworICAgIENB
Q0ZMYXllclNldEFuY2hvclBvaW50KG5ld0xheWVyLmdldCgpLCBDR1BvaW50TWFrZSgwLCAxKSk7
CisgICAgQ0FDRkxheWVyU2V0VXNlckRhdGEobmV3TGF5ZXIuZ2V0KCksIHRoaXMpOworICAgIENB
Q0ZMYXllclNldERpc3BsYXlDYWxsYmFjayhuZXdMYXllci5nZXQoKSwgdGlsZURpc3BsYXlDYWxs
YmFjayk7CisgICAgQ0FDRkxheWVySW5zZXJ0U3VibGF5ZXIodGlsZVBhcmVudCgpLCBuZXdMYXll
ci5nZXQoKSwgbnVtVGlsZXMoKSk7Cit9CisKK3ZvaWQgV2ViVGlsZWRMYXllcjo6cmVtb3ZlVGls
ZSgpCit7CisgICAgQ0FDRkxheWVyUmVtb3ZlRnJvbVN1cGVybGF5ZXIodGlsZUF0SW5kZXgobnVt
VGlsZXMoKSAtIDEpKTsKK30KKworQ0FDRkxheWVyUmVmIFdlYlRpbGVkTGF5ZXI6OnRpbGVBdElu
ZGV4KGludCBpbmRleCkKK3sKKyAgICBDRkFycmF5UmVmIHN1YmxheWVycyA9IENBQ0ZMYXllckdl
dFN1YmxheWVycyh0aWxlUGFyZW50KCkpOworICAgIGlmICghc3VibGF5ZXJzIHx8IGluZGV4IDwg
MCB8fCBudW1UaWxlcygpIDw9IGluZGV4KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q0FDRkxheWVyUmVmPihjb25zdF9jYXN0PHZvaWQqPihDRkFycmF5
R2V0VmFsdWVBdEluZGV4KHN1YmxheWVycywgaW5kZXgpKSk7Cit9CisKK2ludCBXZWJUaWxlZExh
eWVyOjpudW1UaWxlcygpIGNvbnN0Cit7CisgICAgQ0ZBcnJheVJlZiBzdWJsYXllcnMgPSBDQUNG
TGF5ZXJHZXRTdWJsYXllcnModGlsZVBhcmVudCgpKTsKKyAgICByZXR1cm4gc3VibGF5ZXJzID8g
Q0ZBcnJheUdldENvdW50KHN1YmxheWVycykgOiAwOworfQorCit2b2lkIFdlYlRpbGVkTGF5ZXI6
OnVwZGF0ZVRpbGVzKCkKK3sKKyAgICAvLyBGSVhNRTogSW4gYWRkaXRpb24gdG8gcmVkb2luZyB0
aGUgbnVtYmVyIG9mIHRpbGVzLCB3ZSBuZWVkIHRvIG9ubHkgcmVuZGVyIGFuZCBoYXZlIGJhY2tp
bmcKKyAgICAvLyBzdG9yZSBmb3IgdmlzaWJsZSBsYXllcnMKKyAgICBDR1JlY3QgbGF5ZXJCb3Vu
ZHMgPSBib3VuZHMoKTsKKyAgICBpbnQgbnVtVGlsZXNIb3Jpem9udGFsID0gY2VpbChsYXllckJv
dW5kcy5zaXplLndpZHRoIC8gKGZsb2F0KSBtX3RpbGVTaXplLndpZHRoKTsKKyAgICBpbnQgbnVt
VGlsZXNWZXJ0aWNhbCA9IGNlaWwobGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQgLyAoZmxvYXQpIG1f
dGlsZVNpemUuaGVpZ2h0KTsKKyAgICBpbnQgbnVtVGlsZXNUb3RhbCA9IG51bVRpbGVzSG9yaXpv
bnRhbCAqIG51bVRpbGVzVmVydGljYWw7CisKKyAgICBpbnQgbnVtVGlsZXNUb0NoYW5nZSA9IG51
bVRpbGVzVG90YWwgLSBudW1UaWxlcygpOworICAgIGlmIChudW1UaWxlc1RvQ2hhbmdlID49IDAp
IHsKKyAgICAgICAgLy8gQWRkIG5ldyB0aWxlcworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bVRpbGVzVG9DaGFuZ2U7ICsraSkKKyAgICAgICAgICAgIGFkZFRpbGUoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBSZW1vdmUgb2xkIHRpbGVzCisgICAgICAgIG51bVRpbGVzVG9DaGFu
Z2UgPSAtbnVtVGlsZXNUb0NoYW5nZTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1U
aWxlc1RvQ2hhbmdlOyArK2kpCisgICAgICAgICAgICByZW1vdmVUaWxlKCk7CisgICAgfQorCisg
ICAgLy8gU2V0IGNvb3JkaW5hdGVzIGZvciBhbGwgdGlsZXMKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bVRpbGVzSG9yaXpvbnRhbDsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBq
IDwgbnVtVGlsZXNWZXJ0aWNhbDsgKytqKSB7CisgICAgICAgICAgICBDQUNGTGF5ZXJSZWYgdGls
ZSA9IHRpbGVBdEluZGV4KGkgKiBudW1UaWxlc1ZlcnRpY2FsICsgaik7CisgICAgICAgICAgICBD
QUNGTGF5ZXJTZXRQb3NpdGlvbih0aWxlLCBDR1BvaW50TWFrZShpICogbV90aWxlU2l6ZS53aWR0
aCwgaiAqIG1fdGlsZVNpemUuaGVpZ2h0KSk7CisgICAgICAgICAgICBpbnQgd2lkdGggPSBtaW4o
bV90aWxlU2l6ZS53aWR0aCwgbGF5ZXJCb3VuZHMuc2l6ZS53aWR0aCAtIGkgKiBtX3RpbGVTaXpl
LndpZHRoKTsKKyAgICAgICAgICAgIGludCBoZWlnaHQgPSBtaW4obV90aWxlU2l6ZS5oZWlnaHQs
IGxheWVyQm91bmRzLnNpemUuaGVpZ2h0IC0gaiAqIG1fdGlsZVNpemUuaGVpZ2h0KTsKKyAgICAg
ICAgICAgIENBQ0ZMYXllclNldEJvdW5kcyh0aWxlLCBDR1JlY3RNYWtlKDAsIDAsIHdpZHRoLCBo
ZWlnaHQpKTsKKworICAgICAgICAgICAgLy8gRmxpcCBZCisgICAgICAgICAgICBDQVRyYW5zZm9y
bTNEIHRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RNYWtlU2NhbGUoMSwgLTEsIDEpOworICAgICAg
ICAgICAgQ0FUcmFuc2Zvcm0zRFRyYW5zbGF0ZSh0cmFuc2Zvcm0sIDAsIGhlaWdodCwgMCk7Cisg
ICAgICAgICAgICBDQUNGTGF5ZXJTZXRUcmFuc2Zvcm0odGlsZSwgdHJhbnNmb3JtKTsKKworICAg
ICAgICAgICAgU3RyaW5nIG5hbWUgPSAiVGlsZSAoIiArIFN0cmluZzo6bnVtYmVyKGkpICsgIiwi
ICsgU3RyaW5nOjpudW1iZXIoaikgKyAiKSI7CisgICAgICAgICAgICBDQUNGTGF5ZXJTZXROYW1l
KHRpbGUsIFJldGFpblB0cjxDRlN0cmluZ1JlZj4oQWRvcHRDRiwgbmFtZS5jcmVhdGVDRlN0cmlu
ZygpKS5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgV2ViVGlsZWRMYXllcjo6
ZHJhd1RpbGUoQ0FDRkxheWVyUmVmIHRpbGUsIENHQ29udGV4dFJlZiBjb250ZXh0KQoreworICAg
IENHUmVjdCB0aWxlQm91bmRzID0gQ0FDRkxheWVyR2V0Qm91bmRzKHRpbGUpOworICAgIENHUG9p
bnQgdGlsZVBvc2l0aW9uID0gQ0FDRkxheWVyR2V0UG9zaXRpb24odGlsZSk7CisKKyAgICBDR0Nv
bnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworCisgICAgLy9pbnQgeSA9IGJvdW5kcygpLnNpemUu
aGVpZ2h0IC0gdGlsZVBvc2l0aW9uLnkgLSB0aWxlQm91bmRzLnNpemUuaGVpZ2h0OworICAgIGlu
dCB5ID0gdGlsZVBvc2l0aW9uLnk7CisKKyAgICAvLyBUcmFuc2Zvcm0gY29udGV4dCB0byBiZSBh
dCB0aGUgb3JpZ2luIG9mIHRoZSBwYXJlbnQgbGF5ZXIKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVD
VE0oY29udGV4dCwgLXRpbGVQb3NpdGlvbi54LCAteSk7CisKKyAgICAvLyBTZXQgdGhlIGNvbnRl
eHQgY2xpcHBpbmcgcmVjdGFuZ2xlIHRvIHRoZSBjdXJyZW50IHRpbGUKKyAgICBDR0NvbnRleHRD
bGlwVG9SZWN0KGNvbnRleHQsIENHUmVjdE1ha2UodGlsZVBvc2l0aW9uLngsIHksIHRpbGVCb3Vu
ZHMuc2l6ZS53aWR0aCwgdGlsZUJvdW5kcy5zaXplLmhlaWdodCkpOworCisgICAgaWYgKG1fb3du
ZXItPmNvbnRlbnRzT3JpZW50YXRpb24oKSA9PSBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpDb21w
b3NpdGluZ0Nvb3JkaW5hdGVzVG9wRG93bikgeworICAgICAgICAvLyBJZiB0aGUgbGF5ZXIgaXMg
cmVuZGVyaW5nIHRvcC1kb3duLCBpdCB3aWxsIGZsaXAgdGhlIGNvb3JkaW5hdGVzIGluIHkuIFRp
bGVkIGxheWVycyBhcmUKKyAgICAgICAgLy8gYWxyZWFkeSBmbGlwcGluZywgc28gd2UgbmVlZCB0
byB1bmRvIHRoYXQgaGVyZS4KKyAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQs
IDAsIGJvdW5kcygpLnNpemUuaGVpZ2h0KTsKKyAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29u
dGV4dCwgMSwgLTEpOworICAgIH0KKworICAgIC8vIERyYXcgdGhlIHRpbGUKKyAgICBkcmF3SW5D
b250ZXh0KGNvbnRleHQpOworCisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsK
K30KKworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV2ViVGlsZWRMYXll
ci5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NMYXllckNBQ0YuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJDQUNGLmNw
cAkocmV2aXNpb24gNTk2MjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0xheWVyQ0FDRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDggQEAKICNpbmNs
dWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3lz
dGVtVGltZS5oIgotI2luY2x1ZGUgIldLQ0FDRkxheWVyLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXIu
aCIKKyNpbmNsdWRlICJXZWJUaWxlZExheWVyLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KQEAgLTQ1LDExNiArNDYsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBXZWJMYXllciA6IHB1YmxpYyBXS0NBQ0ZMYXllciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8V0tDQUNGTGF5ZXI+IGNyZWF0ZShMYXllclR5cGUgbGF5ZXJUeXBlLCBHcmFw
aGljc0xheWVyQ0FDRiogb3duZXIpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFdlYkxheWVyKGxheWVyVHlwZSwgb3duZXIpKTsKLSAgICB9CisvLyBUaGUgdGhyZXNob2xkIHdp
ZHRoIG9yIGhlaWdodCBhYm92ZSB3aGljaCBhIHRpbGVkIGxheWVyIHdpbGwgYmUgdXNlZC4gVGhp
cyBzaG91bGQgYmUKKy8vIGxhcmdlIGVub3VnaCB0byBhdm9pZCB0aWxlZCBsYXllcnMgZm9yIG1v
c3QgR3JhcGhpY3NMYXllcnMsIGJ1dCBsZXNzIHRoYW4gdGhlIEQzRAorLy8gdGV4dHVyZSBzaXpl
IGxpbWl0IG9uIGFsbCBzdXBwb3J0ZWQgaGFyZHdhcmUuCitzdGF0aWMgY29uc3QgaW50IGNNYXhQ
aXhlbERpbWVuc2lvbiA9IDIwMDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5
KGNvbnN0IENHUmVjdCogZGlydHlSZWN0KQotICAgIHsKLSAgICAgICAgaWYgKG1fb3duZXIpIHsK
LSAgICAgICAgICAgIGlmIChtX293bmVyLT5zaG93UmVwYWludENvdW50ZXIoKSkgewotICAgICAg
ICAgICAgICAgIENHUmVjdCBsYXllckJvdW5kcyA9IGJvdW5kcygpOwotICAgICAgICAgICAgICAg
IENHUmVjdCByZXBhaW50Q291bnRlclJlY3QgPSBsYXllckJvdW5kczsKLSAgICAgICAgICAgICAg
ICAvLyBXZSBhc3N1bWUgYSBtYXhpbXVtIG9mIDQgZGlnaXRzIGFuZCBhIGZvbnQgc2l6ZSBvZiAy
Mi4KLSAgICAgICAgICAgICAgICByZXBhaW50Q291bnRlclJlY3Quc2l6ZS53aWR0aCA9IDQ4Owot
ICAgICAgICAgICAgICAgIHJlcGFpbnRDb3VudGVyUmVjdC5zaXplLmhlaWdodCA9IDI1OwotICAg
ICAgICAgICAgICAgIGlmIChtX293bmVyLT5jb250ZW50c09yaWVudGF0aW9uKCkgPT0gV2ViQ29y
ZTo6R3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc1RvcERvd24pCi0gICAgICAg
ICAgICAgICAgICAgIHJlcGFpbnRDb3VudGVyUmVjdC5vcmlnaW4ueSA9IGxheWVyQm91bmRzLnNp
emUuaGVpZ2h0IC0gKGxheWVyQm91bmRzLm9yaWdpbi55ICsgcmVwYWludENvdW50ZXJSZWN0LnNp
emUuaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBXS0NBQ0ZMYXllcjo6c2V0TmVlZHNEaXNwbGF5
KCZyZXBhaW50Q291bnRlclJlY3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRp
cnR5UmVjdCAmJiBtX293bmVyLT5jb250ZW50c09yaWVudGF0aW9uKCkgPT0gV2ViQ29yZTo6R3Jh
cGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc1RvcERvd24pIHsKLSAgICAgICAgICAg
ICAgICBDR1JlY3QgZmxpcHBlZERpcnR5UmVjdCA9ICpkaXJ0eVJlY3Q7Ci0gICAgICAgICAgICAg
ICAgZmxpcHBlZERpcnR5UmVjdC5vcmlnaW4ueSA9IGJvdW5kcygpLnNpemUuaGVpZ2h0IC0gKGZs
aXBwZWREaXJ0eVJlY3Qub3JpZ2luLnkgKyBmbGlwcGVkRGlydHlSZWN0LnNpemUuaGVpZ2h0KTsK
LSAgICAgICAgICAgICAgICBXS0NBQ0ZMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCZmbGlwcGVkRGly
dHlSZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgV0tDQUNGTGF5ZXI6OnNldE5lZWRzRGlzcGxheShkaXJ0eVJlY3QpOwotICAg
IH0KKy8vIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIGEgc2luZ2xlIHRpbGUgaW4gYSB0aWxlZCBs
YXllci4gU2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0bworLy8gYXZvaWQgbG90cyBvZiBzbWFsbCB0
aWxlcyAoYW5kIHRoZXJlZm9yZSBsb3RzIG9mIGRyYXdpbmcgY2FsbGJhY2tzKSwgYnV0IHNtYWxs
IGVub3VnaAorLy8gdG8ga2VlcCB0aGUgb3ZlcmFsbCB0aWxlIGNvc3QgbG93Lgorc3RhdGljIGNv
bnN0IGludCBjVGlsZWRMYXllclRpbGVTaXplID0gNTEyOwogCi0gICAgdmlydHVhbCB2b2lkIGRy
YXdJbkNvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi0gICAgewotICAg
ICAgICBpZiAoIW1fb3duZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKLQotICAgICAgICBDR1JlY3QgbGF5ZXJCb3VuZHMgPSBi
b3VuZHMoKTsKLSAgICAgICAgaWYgKG1fb3duZXItPmNvbnRlbnRzT3JpZW50YXRpb24oKSA9PSBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzVG9wRG93bikgewot
ICAgICAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwotICAgICAgICAg
ICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1sYXllckJvdW5kcy5zaXplLmhl
aWdodCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9vd25lci0+Y2xpZW50KCkpIHsKLSAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7Ci0KLSAg
ICAgICAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGdldCB0aGUgY2xpcCBmcm9tIHRoZSBjb250
ZXh0LCBiZWNhdXNlIGl0IG1heSBiZSBzaWduaWZpY2FudGx5Ci0gICAgICAgICAgICAvLyBzbWFs
bGVyIHRoYW4gdGhlIGxheWVyIGJvdW5kcyAoZS5nLiB0aWxlZCBsYXllcnMpCi0gICAgICAgICAg
ICBDR1JlY3QgY2xpcEJvdW5kcyA9IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0
KTsKLSAgICAgICAgICAgIEludFJlY3QgY2xpcChlbmNsb3NpbmdJbnRSZWN0KGNsaXBCb3VuZHMp
KTsKLSAgICAgICAgICAgIG1fb3duZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGdyYXBo
aWNzQ29udGV4dCwgY2xpcCk7Ci0gICAgICAgIH0KLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICAgICAgICAgIC8v
IEZJWE1FOiBpZGVhbGx5IHdlJ2QgYXZvaWQgY2FsbGluZyAtc2V0TmVlZHNEaXNwbGF5IG9uIGEg
bGF5ZXIgdGhhdCBpcyBhIHBsYWluIGNvbG9yLAotICAgICAgICAgICAgLy8gc28gQ0EgbmV2ZXIg
bWFrZXMgYmFja2luZyBzdG9yZSBmb3IgaXQgKHdoaWNoIGlzIHdoYXQgLXNldE5lZWRzRGlzcGxh
eSB3aWxsIGRvIGFib3ZlKS4KLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihj
b250ZXh0LCAwLjBmLCAxLjBmLCAwLjBmLCAxLjBmKTsKLSAgICAgICAgICAgIENHQ29udGV4dEZp
bGxSZWN0KGNvbnRleHQsIGxheWVyQm91bmRzKTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAg
ICAgaWYgKG1fb3duZXItPnNob3dSZXBhaW50Q291bnRlcigpKSB7Ci0gICAgICAgICAgICBTdHJp
bmcgdGV4dCA9IFN0cmluZzo6Zm9ybWF0KCIlZCIsIG1fb3duZXItPmluY3JlbWVudFJlcGFpbnRD
b3VudCgpKTs7Ci0KLSAgICAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0g
ICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMS4wZiwgMC4wZiwg
MC4wZiwgMC44Zik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIENHUmVjdCBhQm91bmRzID0g
bGF5ZXJCb3VuZHM7Ci0KLSAgICAgICAgICAgIGFCb3VuZHMuc2l6ZS53aWR0aCA9IDEwICsgMTIg
KiB0ZXh0Lmxlbmd0aCgpOwotICAgICAgICAgICAgYUJvdW5kcy5zaXplLmhlaWdodCA9IDI1Owot
ICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgYUJvdW5kcyk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjOwotCi0gICAgICAgICAgICBO
T05DTElFTlRNRVRSSUNTIG1ldHJpY3M7Ci0gICAgICAgICAgICBtZXRyaWNzLmNiU2l6ZSA9IHNp
emVvZihtZXRyaWNzKTsKLSAgICAgICAgICAgIFN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRO
T05DTElFTlRNRVRSSUNTLCBtZXRyaWNzLmNiU2l6ZSwgJm1ldHJpY3MsIDApOwotICAgICAgICAg
ICAgRm9udEZhbWlseSBmYW1pbHk7Ci0gICAgICAgICAgICBmYW1pbHkuc2V0RmFtaWx5KG1ldHJp
Y3MubGZTbUNhcHRpb25Gb250LmxmRmFjZU5hbWUpOwotICAgICAgICAgICAgZGVzYy5zZXRGYW1p
bHkoZmFtaWx5KTsKLQotICAgICAgICAgICAgZGVzYy5zZXRDb21wdXRlZFNpemUoMjIpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBGb250IGZvbnQgPSBGb250KGRlc2MsIDAsIDApOwotICAg
ICAgICAgICAgZm9udC51cGRhdGUoMCk7Ci0KLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBj
Zyhjb250ZXh0KTsKLSAgICAgICAgICAgIGNnLnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIERl
dmljZUNvbG9yU3BhY2UpOwotICAgICAgICAgICAgY2cuZHJhd1RleHQoZm9udCwgVGV4dFJ1bih0
ZXh0KSwgSW50UG9pbnQoYUJvdW5kcy5vcmlnaW4ueCArIDMsIGFCb3VuZHMub3JpZ2luLnkgKyAy
MCkpOwotCi0gICAgICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOyAgICAg
ICAgCi0gICAgICAgIH0KLQotICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQp
OwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIFdlYkxheWVyKExheWVyVHlwZSBsYXllclR5cGUs
IEdyYXBoaWNzTGF5ZXJDQUNGKiBvd25lcikKLSAgICAgOiBXS0NBQ0ZMYXllcihsYXllclR5cGUp
Ci0gICAgICwgbV9vd25lcihvd25lcikKLSAgICB7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEdy
YXBoaWNzTGF5ZXIqIG1fb3duZXI7Ci19OwotCiBzdGF0aWMgaW5saW5lIHZvaWQgY29weVRyYW5z
Zm9ybShDQVRyYW5zZm9ybTNEJiB0b1QzRCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQp
CiB7CiAgICAgdG9UM0QubTExID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdCh0Lm0xMSgpKTsKQEAg
LTUzNyw2ICs0MzgsNjQgQEAKICAgICB9CiB9CiAKK2Jvb2wgR3JhcGhpY3NMYXllckNBQ0Y6OnJl
cXVpcmVzVGlsZWRMYXllcihjb25zdCBGbG9hdFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYg
KCFtX2RyYXdzQ29udGVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6
IGNhdGNoIHplcm8tc2l6ZSBoZWlnaHQgb3Igd2lkdGggaGVyZSAob3IgZWFybGllcik/CisgICAg
cmV0dXJuIHNpemUud2lkdGgoKSA+IGNNYXhQaXhlbERpbWVuc2lvbiB8fCBzaXplLmhlaWdodCgp
ID4gY01heFBpeGVsRGltZW5zaW9uOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDQUNGOjpzd2Fw
RnJvbU9yVG9UaWxlZExheWVyKGJvb2wgdXNlVGlsZWRMYXllcikKK3sKKyAgICBpZiAodXNlVGls
ZWRMYXllciA9PSBtX3VzaW5nVGlsZWRMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dT
aXplIHRpbGVTaXplID0gQ0dTaXplTWFrZShjVGlsZWRMYXllclRpbGVTaXplLCBjVGlsZWRMYXll
clRpbGVTaXplKTsKKworICAgIFJlZlB0cjxXS0NBQ0ZMYXllcj4gb2xkTGF5ZXIgPSBtX2xheWVy
OworICAgIGlmICh1c2VUaWxlZExheWVyKQorICAgICAgICBtX2xheWVyID0gV2ViVGlsZWRMYXll
cjo6Y3JlYXRlKHRpbGVTaXplLCB0aGlzKTsKKyAgICBlbHNlCisgICAgICAgIG1fbGF5ZXIgPSBX
ZWJMYXllcjo6Y3JlYXRlKFdLQ0FDRkxheWVyOjpMYXllciwgdGhpcyk7CisgICAgCisgICAgbV91
c2luZ1RpbGVkTGF5ZXIgPSB1c2VUaWxlZExheWVyOworCisgICAgaWYgKHVzZVRpbGVkTGF5ZXIp
IHsKKyAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXI6OmNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmll
bnRhdGlvbigpID09IEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNCb3R0b21V
cCkKKyAgICAgICAgICAgIG1fbGF5ZXItPnNldENvbnRlbnRzR3Jhdml0eShXS0NBQ0ZMYXllcjo6
Qm90dG9tTGVmdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbGF5ZXItPnNldENvbnRl
bnRzR3Jhdml0eShXS0NBQ0ZMYXllcjo6VG9wTGVmdCk7CisgICAgfQorICAgIAorICAgIG1fbGF5
ZXItPnNldFN1YmxheWVyc0Zyb21MYXllcihvbGRMYXllci5nZXQoKSk7CisgICAgaWYgKG9sZExh
eWVyLT5zdXBlcmxheWVyKCkpCisgICAgICAgIG9sZExheWVyLT5zdXBlcmxheWVyKCktPnJlcGxh
Y2VTdWJsYXllcihvbGRMYXllci5nZXQoKSwgbV9sYXllci5nZXQoKSk7CisgICAgCisgICAgdXBk
YXRlTGF5ZXJQb3NpdGlvbigpOworICAgIHVwZGF0ZUxheWVyU2l6ZSgpOworICAgIHVwZGF0ZUFu
Y2hvclBvaW50KCk7CisgICAgdXBkYXRlVHJhbnNmb3JtKCk7CisgICAgdXBkYXRlQ2hpbGRyZW5U
cmFuc2Zvcm0oKTsKKyAgICB1cGRhdGVNYXNrc1RvQm91bmRzKCk7CisgICAgdXBkYXRlQ29udGVu
dHNPcGFxdWUoKTsKKyAgICB1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKTsKKyAgICB1cGRhdGVM
YXllckJhY2tncm91bmRDb2xvcigpOworICAgIAorICAgIHVwZGF0ZU9wYWNpdHlPbkxheWVyKCk7
CisgICAgCisjaWZuZGVmIE5ERUJVRworICAgIFN0cmluZyBuYW1lID0gU3RyaW5nOjpmb3JtYXQo
IkNBTGF5ZXIoJXApIEdyYXBoaWNzTGF5ZXIoJXApICVzIiwgbV9sYXllci5nZXQoKSwgdGhpcywg
bV91c2luZ1RpbGVkTGF5ZXIgPyAiW1RpbGVkIExheWVyXSAiIDogIiIpICsgbV9uYW1lOworICAg
IG1fbGF5ZXItPnNldE5hbWUobmFtZSk7CisjZW5kaWYKKworICAgIC8vIG5lZWQgdG8gdGVsbCBu
ZXcgbGF5ZXIgdG8gZHJhdyBpdHNlbGYKKyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAKKyAg
ICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKK30KKwogR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRp
bmdDb29yZGluYXRlc09yaWVudGF0aW9uIEdyYXBoaWNzTGF5ZXJDQUNGOjpkZWZhdWx0Q29udGVu
dHNPcmllbnRhdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENvbXBvc2l0aW5nQ29vcmRpbmF0
ZXNUb3BEb3duOwpAQCAtNjAwLDYgKzU1OSwxMCBAQAogICAgICAgICBtX2xheWVyLT5zZXRQb3Np
dGlvbihjZW50ZXJQb2ludCk7CiAgICAgfQogICAgIAorICAgIGJvb2wgbmVlZFRpbGVkTGF5ZXIg
PSByZXF1aXJlc1RpbGVkTGF5ZXIobV9zaXplKTsKKyAgICBpZiAobmVlZFRpbGVkTGF5ZXIgIT0g
bV91c2luZ1RpbGVkTGF5ZXIpCisgICAgICAgIHN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIobmVlZFRp
bGVkTGF5ZXIpOworICAgIAogICAgIG1fbGF5ZXItPnNldEJvdW5kcyhyZWN0KTsKICAgICAKICAg
ICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgcmVzaXplIG1fY29udGVudHNMYXllci4gSXQncyB1cCB0
aGUgY2FsbGVyIHRvIGRvIHRoYXQuCkBAIC02OTksNiArNjYyLDEwIEBACiAKIHZvaWQgR3JhcGhp
Y3NMYXllckNBQ0Y6OnVwZGF0ZUxheWVyRHJhd3NDb250ZW50KCkKIHsKKyAgICBib29sIG5lZWRU
aWxlZExheWVyID0gcmVxdWlyZXNUaWxlZExheWVyKG1fc2l6ZSk7CisgICAgaWYgKG5lZWRUaWxl
ZExheWVyICE9IG1fdXNpbmdUaWxlZExheWVyKQorICAgICAgICBzd2FwRnJvbU9yVG9UaWxlZExh
eWVyKG5lZWRUaWxlZExheWVyKTsKKwogICAgIGlmIChtX2RyYXdzQ29udGVudCkKICAgICAgICAg
bV9sYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgZWxzZQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vV2ViTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1dlYkxheWVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dlYkxheWVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKworI2luY2x1ZGUgIldlYkxheWVyLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5n
IG5hbWVzcGFjZSBzdGQ7CisKK3ZvaWQgV2ViTGF5ZXI6OnNldE5lZWRzRGlzcGxheShjb25zdCBD
R1JlY3QqIGRpcnR5UmVjdCkKK3sKKyAgICBpZiAobV9vd25lcikgeworICAgICAgICBpZiAobV9v
d25lci0+c2hvd1JlcGFpbnRDb3VudGVyKCkpIHsKKyAgICAgICAgICAgIENHUmVjdCBsYXllckJv
dW5kcyA9IGJvdW5kcygpOworICAgICAgICAgICAgQ0dSZWN0IHJlcGFpbnRDb3VudGVyUmVjdCA9
IGxheWVyQm91bmRzOworICAgICAgICAgICAgLy8gV2UgYXNzdW1lIGEgbWF4aW11bSBvZiA0IGRp
Z2l0cyBhbmQgYSBmb250IHNpemUgb2YgMjIuCisgICAgICAgICAgICByZXBhaW50Q291bnRlclJl
Y3Quc2l6ZS53aWR0aCA9IDQ4OworICAgICAgICAgICAgcmVwYWludENvdW50ZXJSZWN0LnNpemUu
aGVpZ2h0ID0gMjU7CisgICAgICAgICAgICBpZiAobV9vd25lci0+Y29udGVudHNPcmllbnRhdGlv
bigpID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BE
b3duKQorICAgICAgICAgICAgICAgIHJlcGFpbnRDb3VudGVyUmVjdC5vcmlnaW4ueSA9IGxheWVy
Qm91bmRzLnNpemUuaGVpZ2h0IC0gKGxheWVyQm91bmRzLm9yaWdpbi55ICsgcmVwYWludENvdW50
ZXJSZWN0LnNpemUuaGVpZ2h0KTsKKyAgICAgICAgICAgIFdLQ0FDRkxheWVyOjpzZXROZWVkc0Rp
c3BsYXkoJnJlcGFpbnRDb3VudGVyUmVjdCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRpcnR5
UmVjdCAmJiBtX293bmVyLT5jb250ZW50c09yaWVudGF0aW9uKCkgPT0gV2ViQ29yZTo6R3JhcGhp
Y3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc1RvcERvd24pIHsKKyAgICAgICAgICAgIENH
UmVjdCBmbGlwcGVkRGlydHlSZWN0ID0gKmRpcnR5UmVjdDsKKyAgICAgICAgICAgIGZsaXBwZWRE
aXJ0eVJlY3Qub3JpZ2luLnkgPSBib3VuZHMoKS5zaXplLmhlaWdodCAtIChmbGlwcGVkRGlydHlS
ZWN0Lm9yaWdpbi55ICsgZmxpcHBlZERpcnR5UmVjdC5zaXplLmhlaWdodCk7CisgICAgICAgICAg
ICBXS0NBQ0ZMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCZmbGlwcGVkRGlydHlSZWN0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBXS0NBQ0ZMYXllcjo6c2V0TmVl
ZHNEaXNwbGF5KGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OmRyYXdJbkNvbnRleHQo
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgaWYgKCFtX293bmVyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworCisg
ICAgQ0dSZWN0IGxheWVyQm91bmRzID0gYm91bmRzKCk7CisgICAgaWYgKG1fb3duZXItPmNvbnRl
bnRzT3JpZW50YXRpb24oKSA9PSBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nv
b3JkaW5hdGVzVG9wRG93bikgeworICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAx
LCAtMSk7CisgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtbGF5ZXJC
b3VuZHMuc2l6ZS5oZWlnaHQpOworICAgIH0KKworICAgIGlmIChtX293bmVyLT5jbGllbnQoKSkg
eworICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOworCisg
ICAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGdldCB0aGUgY2xpcCBmcm9tIHRoZSBjb250ZXh0
LCBiZWNhdXNlIGl0IG1heSBiZSBzaWduaWZpY2FudGx5CisgICAgICAgIC8vIHNtYWxsZXIgdGhh
biB0aGUgbGF5ZXIgYm91bmRzIChlLmcuIHRpbGVkIGxheWVycykKKyAgICAgICAgQ0dSZWN0IGNs
aXBCb3VuZHMgPSBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCk7CisgICAgICAg
IEludFJlY3QgY2xpcChlbmNsb3NpbmdJbnRSZWN0KGNsaXBCb3VuZHMpKTsKKyAgICAgICAgbV9v
d25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBjbGlwKTsK
KyAgICB9CisjaWZuZGVmIE5ERUJVRworICAgIGVsc2UgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKworICAgICAgICAvLyBGSVhNRTogaWRlYWxseSB3ZSdkIGF2b2lkIGNhbGxpbmcg
LXNldE5lZWRzRGlzcGxheSBvbiBhIGxheWVyIHRoYXQgaXMgYSBwbGFpbiBjb2xvciwKKyAgICAg
ICAgLy8gc28gQ0EgbmV2ZXIgbWFrZXMgYmFja2luZyBzdG9yZSBmb3IgaXQgKHdoaWNoIGlzIHdo
YXQgLXNldE5lZWRzRGlzcGxheSB3aWxsIGRvIGFib3ZlKS4KKyAgICAgICAgQ0dDb250ZXh0U2V0
UkdCRmlsbENvbG9yKGNvbnRleHQsIDAuMGYsIDEuMGYsIDAuMGYsIDEuMGYpOworICAgICAgICBD
R0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBsYXllckJvdW5kcyk7CisgICAgfQorI2VuZGlmCisK
KyAgICBpZiAobV9vd25lci0+c2hvd1JlcGFpbnRDb3VudGVyKCkpIHsKKyAgICAgICAgU3RyaW5n
IHRleHQgPSBTdHJpbmc6OmZvcm1hdCgiJWQiLCBtX293bmVyLT5pbmNyZW1lbnRSZXBhaW50Q291
bnQoKSk7OworCisgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisgICAgICAg
IENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAxLjBmLCAwLjBmLCAwLjBmLCAwLjhm
KTsKKyAgICAgICAgCisgICAgICAgIENHUmVjdCBhQm91bmRzID0gbGF5ZXJCb3VuZHM7CisKKyAg
ICAgICAgYUJvdW5kcy5zaXplLndpZHRoID0gMTAgKyAxMiAqIHRleHQubGVuZ3RoKCk7CisgICAg
ICAgIGFCb3VuZHMuc2l6ZS5oZWlnaHQgPSAyNTsKKyAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3Qo
Y29udGV4dCwgYUJvdW5kcyk7CisgICAgICAgIAorICAgICAgICBGb250RGVzY3JpcHRpb24gZGVz
YzsKKworICAgICAgICBOT05DTElFTlRNRVRSSUNTIG1ldHJpY3M7CisgICAgICAgIG1ldHJpY3Mu
Y2JTaXplID0gc2l6ZW9mKG1ldHJpY3MpOworICAgICAgICBTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhT
UElfR0VUTk9OQ0xJRU5UTUVUUklDUywgbWV0cmljcy5jYlNpemUsICZtZXRyaWNzLCAwKTsKKyAg
ICAgICAgRm9udEZhbWlseSBmYW1pbHk7CisgICAgICAgIGZhbWlseS5zZXRGYW1pbHkobWV0cmlj
cy5sZlNtQ2FwdGlvbkZvbnQubGZGYWNlTmFtZSk7CisgICAgICAgIGRlc2Muc2V0RmFtaWx5KGZh
bWlseSk7CisKKyAgICAgICAgZGVzYy5zZXRDb21wdXRlZFNpemUoMjIpOworICAgICAgICAKKyAg
ICAgICAgRm9udCBmb250ID0gRm9udChkZXNjLCAwLCAwKTsKKyAgICAgICAgZm9udC51cGRhdGUo
MCk7CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNnKGNvbnRleHQpOworICAgICAgICBjZy5z
ZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrLCBEZXZpY2VDb2xvclNwYWNlKTsKKyAgICAgICAgY2cu
ZHJhd1RleHQoZm9udCwgVGV4dFJ1bih0ZXh0KSwgSW50UG9pbnQoYUJvdW5kcy5vcmlnaW4ueCAr
IDMsIGFCb3VuZHMub3JpZ2luLnkgKyAyMCkpOworCisgICAgICAgIENHQ29udGV4dFJlc3RvcmVH
U3RhdGUoY29udGV4dCk7ICAgICAgICAKKyAgICB9CisKKyAgICBDR0NvbnRleHRSZXN0b3JlR1N0
YXRlKGNvbnRleHQpOworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9XZWJMYXllci5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJ
bmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9jb21wb3Np
dGluZy9odWdlLWxheWVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9odWdlLWxheWVyLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NSBAQAorVGhlIHllbGxvdyBib3ggc2hvdWxkIGJlIGxhcmdlIGVu
b3VnaCB0byBzY3JvbGwgb2ZmIHRoZSBib3R0b20uIFRoZXJlIHNob3VsZCBiZSBhIHJlZCBib3gg
b24gdGhlIGZpcnN0IHBhZ2UgYW5kIGEgYmx1ZSBib3ggbmVhciB0aGUgYm90dG9tIG9mIHRoZSB5
ZWxsb3cgYm94LiBUaGlzIHRlc3RzIHRoYXQgd2UgY2FuIHN1cHBvcnQgdmVyeSBsYXJnZSBjb21w
b3NpdGluZyBsYXllcnMuCisKKyhHcmFwaGljc0xheWVyCisgIChwb3NpdGlvbiAwLjAwIDAuMDAp
CisgIChhbmNob3IgMC41MCAwLjUwKQorICAoYm91bmRzIDc4NS4wMCA1MTExLjAwKQorICAob3Bh
Y2l0eSAxLjAwKQorICAodXNpbmdUaWxlZExheWVyIDApCisgIChwcmVzZXJ2ZXMzRCAwKQorICAo
ZHJhd3NDb250ZW50IDApCisgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgKGJhY2tn
cm91bmRDb2xvciBub25lKQorICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAoY2hpbGRyZW4gMQor
ICAgIChHcmFwaGljc0xheWVyCisgICAgICAocG9zaXRpb24gMC4wMCAwLjAwKQorICAgICAgKGFu
Y2hvciAwLjUwIDAuNTApCisgICAgICAoYm91bmRzIDc4NS4wMCA1MTExLjAwKQorICAgICAgKG9w
YWNpdHkgMS4wMCkKKyAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAgIChwcmVzZXJ2ZXMz
RCAwKQorICAgICAgKGRyYXdzQ29udGVudCAwKQorICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2
aXNpYmxlKQorICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgKHRyYW5zZm9ybSBp
ZGVudGl0eSkKKyAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGls
ZHJlbiAxCisgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgKHBvc2l0aW9uIDguMDAg
NjguMDApCisgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAgKGJvdW5kcyA1
MDIuMDAgNTAwMi4wMCkKKyAgICAgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgICAgICh1c2lu
Z1RpbGVkTGF5ZXIgMSkKKyAgICAgICAgICAocHJlc2VydmVzM0QgMCkKKyAgICAgICAgICAoZHJh
d3NDb250ZW50IDEpCisgICAgICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAg
ICAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAgICAgICAodHJhbnNmb3JtIGlkZW50
aXR5KQorICAgICAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgKQor
ICAgICAgKQorICAgICkKKyAgKQorKQorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4v
Y29tcG9zaXRpbmcvaHVnZS1sYXllci1hZGQtcmVtb3ZlLWNoaWxkLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vY29tcG9zaXRpbmcvaHVnZS1sYXll
ci1hZGQtcmVtb3ZlLWNoaWxkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9odWdlLWxheWVyLWFkZC1yZW1vdmUtY2hpbGQt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNiBAQAorVGhlIHllbGxvdyBi
b3ggc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0byBzY3JvbGwgb2ZmIHRoZSBib3R0b20uIEF0IHRo
ZSBzdGFydCB0aGVyZSBzaG91bGQgYmUgbm8gY2hpbGQuIEFmdGVyIDEwMG1zIGEgcmVkIGJveCBp
cyBhZGRlZCBhbmQgYWZ0ZXIgMTAwbXMgbW9yZSBpdCBzaG91bGQgYmUgcmVtb3ZlZC4gVGhpcyB0
ZXN0cyB0aGF0IHdlIGNhbiBzdXBwb3J0IHZlcnkgbGFyZ2UgY29tcG9zaXRpbmcgbGF5ZXJzIHdp
dGggZHluYW1pY2FsbHkgYWRkZWQgYW5kIHJlbW92ZWQgY2hpbGQgY29tcG9zaXRpbmcgbGF5ZXJz
LgorCitGaXJzdCAobm8gY2hpbGRyZW4pOgorKEdyYXBoaWNzTGF5ZXIKKyAgKHBvc2l0aW9uIDAu
MDAgMC4wMCkKKyAgKGFuY2hvciAwLjUwIDAuNTApCisgIChib3VuZHMgNzg1LjAwIDUxMjkuMDAp
CisgIChvcGFjaXR5IDEuMDApCisgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgKHByZXNlcnZlczNE
IDApCisgIChkcmF3c0NvbnRlbnQgMCkKKyAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQor
ICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgIChjaGls
ZHJlbiAxCisgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgIChwb3NpdGlvbiAwLjAwIDAuMDApCisg
ICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAgIChib3VuZHMgNzg1LjAwIDUxMjkuMDApCisg
ICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgKHBy
ZXNlcnZlczNEIDApCisgICAgICAoZHJhd3NDb250ZW50IDApCisgICAgICAoYmFja2ZhY2VWaXNp
YmlsaXR5IHZpc2libGUpCisgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAgICAodHJh
bnNmb3JtIGlkZW50aXR5KQorICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAg
ICAgKGNoaWxkcmVuIDEKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAocG9zaXRp
b24gOC4wMCA4Ni4wMCkKKyAgICAgICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAgICAgICAo
Ym91bmRzIDUwMi4wMCA1MDAyLjAwKQorICAgICAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAg
ICAgKHVzaW5nVGlsZWRMYXllciAxKQorICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAg
ICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2li
bGUpCisgICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAgICh0cmFuc2Zv
cm0gaWRlbnRpdHkpCisgICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAg
ICAgICApCisgICAgICApCisgICAgKQorICApCispCisKKworU2Vjb25kIChjaGlsZCBhZGRlZCk6
CisoR3JhcGhpY3NMYXllcgorICAocG9zaXRpb24gMC4wMCAwLjAwKQorICAoYW5jaG9yIDAuNTAg
MC41MCkKKyAgKGJvdW5kcyA3ODUuMDAgNTEyOS4wMCkKKyAgKG9wYWNpdHkgMS4wMCkKKyAgKHVz
aW5nVGlsZWRMYXllciAwKQorICAocHJlc2VydmVzM0QgMCkKKyAgKGRyYXdzQ29udGVudCAwKQor
ICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkK
KyAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgKGNoaWxkcmVuIDEKKyAgICAoR3JhcGhpY3NMYXll
cgorICAgICAgKHBvc2l0aW9uIDAuMDAgMC4wMCkKKyAgICAgIChhbmNob3IgMC41MCAwLjUwKQor
ICAgICAgKGJvdW5kcyA3ODUuMDAgNTEyOS4wMCkKKyAgICAgIChvcGFjaXR5IDEuMDApCisgICAg
ICAodXNpbmdUaWxlZExheWVyIDApCisgICAgICAocHJlc2VydmVzM0QgMCkKKyAgICAgIChkcmF3
c0NvbnRlbnQgMCkKKyAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgIChi
YWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAo
Y2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAoY2hpbGRyZW4gMQorICAgICAgICAo
R3JhcGhpY3NMYXllcgorICAgICAgICAgIChwb3NpdGlvbiA4LjAwIDg2LjAwKQorICAgICAgICAg
IChhbmNob3IgMC41MCAwLjUwKQorICAgICAgICAgIChib3VuZHMgNTAyLjAwIDUwMDIuMDApCisg
ICAgICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDEpCisg
ICAgICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAg
ICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAoYmFja2dyb3Vu
ZENvbG9yIG5vbmUpCisgICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAo
Y2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICkKKyAgICAgICkKKyAgICApCisg
ICkKKykKKworCitUaGlyZCAoY2hpbGQgcmVtb3ZlZCk6CisoR3JhcGhpY3NMYXllcgorICAocG9z
aXRpb24gMC4wMCAwLjAwKQorICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgKGJvdW5kcyA3ODUuMDAg
NTEyOS4wMCkKKyAgKG9wYWNpdHkgMS4wMCkKKyAgKHVzaW5nVGlsZWRMYXllciAwKQorICAocHJl
c2VydmVzM0QgMCkKKyAgKGRyYXdzQ29udGVudCAwKQorICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZp
c2libGUpCisgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgKHRyYW5zZm9ybSBpZGVudGl0eSkK
KyAgKGNoaWxkcmVuIDEKKyAgICAoR3JhcGhpY3NMYXllcgorICAgICAgKHBvc2l0aW9uIDAuMDAg
MC4wMCkKKyAgICAgIChhbmNob3IgMC41MCAwLjUwKQorICAgICAgKGJvdW5kcyA3ODUuMDAgNTEy
OS4wMCkKKyAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAodXNpbmdUaWxlZExheWVyIDApCisg
ICAgICAocHJlc2VydmVzM0QgMCkKKyAgICAgIChkcmF3c0NvbnRlbnQgMCkKKyAgICAgIChiYWNr
ZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAg
ICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRp
dHkpCisgICAgICAoY2hpbGRyZW4gMQorICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAg
IChwb3NpdGlvbiA4LjAwIDg2LjAwKQorICAgICAgICAgIChhbmNob3IgMC41MCAwLjUwKQorICAg
ICAgICAgIChib3VuZHMgNTAyLjAwIDUwMDIuMDApCisgICAgICAgICAgKG9wYWNpdHkgMS4wMCkK
KyAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDEpCisgICAgICAgICAgKHByZXNlcnZlczNEIDAp
CisgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICAgIChiYWNrZmFjZVZpc2liaWxp
dHkgdmlzaWJsZSkKKyAgICAgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAgICAgICAg
KHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRp
dHkpCisgICAgICAgICkKKyAgICAgICkKKyAgICApCisgICkKKykKKwpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2luL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItd2l0aC1sYXllci1jaGlsZHJl
bi1yZXNpemUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbi9jb21wb3NpdGluZy9odWdlLWxheWVyLXdpdGgtbGF5ZXItY2hpbGRyZW4tcmVzaXplLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9jb21w
b3NpdGluZy9odWdlLWxheWVyLXdpdGgtbGF5ZXItY2hpbGRyZW4tcmVzaXplLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjAgQEAKK1RoZSB5ZWxsb3cgYm94IHNob3VsZCBi
ZSA1MDAgeCA1MDAgb24gc3RhcnR1cC4gVGhlbiBpdCBzaG91bGQgc3RyZXRjaCB0byBiZSA1MDAg
eCA1MDAwLCB0aGVuIHNocmluayBiYWNrIGRvd24gdG8gNTAwIHggNTAwLiBUaGlzIHRlc3RzIHRo
YXQgd2UgY2FuIHJlc2l6ZSB0byBhIGh1Z2UgbGF5ZXIgYW5kIGJhY2sgYWdhaW4gYW5kIHN0aWxs
IG1haW50YWluIGludGVncml0eSBvZiB0aGUgbGF5ZXIgdHJlZS4KKworRmlyc3QgKHNtYWxsIGxh
eWVyKToKKyhHcmFwaGljc0xheWVyCisgIChwb3NpdGlvbiAwLjAwIDAuMDApCisgIChhbmNob3Ig
MC41MCAwLjUwKQorICAoYm91bmRzIDc4NS4wMCA2MTEuMDApCisgIChvcGFjaXR5IDEuMDApCisg
ICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgKHByZXNlcnZlczNEIDApCisgIChkcmF3c0NvbnRlbnQg
MCkKKyAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAoYmFja2dyb3VuZENvbG9yIG5v
bmUpCisgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgIChjaGlsZHJlbiAxCisgICAgKEdyYXBoaWNz
TGF5ZXIKKyAgICAgIChwb3NpdGlvbiAwLjAwIDAuMDApCisgICAgICAoYW5jaG9yIDAuNTAgMC41
MCkKKyAgICAgIChib3VuZHMgNzg1LjAwIDYxMS4wMCkKKyAgICAgIChvcGFjaXR5IDEuMDApCisg
ICAgICAodXNpbmdUaWxlZExheWVyIDApCisgICAgICAocHJlc2VydmVzM0QgMCkKKyAgICAgIChk
cmF3c0NvbnRlbnQgMCkKKyAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAg
IChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAg
ICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAoY2hpbGRyZW4gMQorICAgICAg
ICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgIChwb3NpdGlvbiA4LjAwIDY4LjAwKQorICAgICAg
ICAgIChhbmNob3IgMC41MCAwLjUwKQorICAgICAgICAgIChib3VuZHMgNTAyLjAwIDUwMi4wMCkK
KyAgICAgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkK
KyAgICAgICAgICAocHJlc2VydmVzM0QgMCkKKyAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisg
ICAgICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgICAgIChiYWNrZ3Jv
dW5kQ29sb3Igbm9uZSkKKyAgICAgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAg
IChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAoY2hpbGRyZW4gMgorICAg
ICAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAgICAgKHBvc2l0aW9uIDUxLjAwIDEw
MS4wMCkKKyAgICAgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAgICAgIChi
b3VuZHMgMjAwLjAwIDIwMC4wMCkKKyAgICAgICAgICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAg
ICAgICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgICAgICAgICAocHJlc2VydmVzM0Qg
MCkKKyAgICAgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICAgICAgICAoYmFja2Zh
Y2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAgICAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9u
ZSkKKyAgICAgICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICAgKGNo
aWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgICAgKQorICAgICAgICAgICAgKEdy
YXBoaWNzTGF5ZXIKKyAgICAgICAgICAgICAgKHBvc2l0aW9uIDI3Ni4wMCAyMDEuMDApCisgICAg
ICAgICAgICAgIChhbmNob3IgMC41MCAwLjUwKQorICAgICAgICAgICAgICAoYm91bmRzIDIwMC4w
MCAyMDAuMDApCisgICAgICAgICAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAgICAgICAgICh1
c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAgICAgICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAg
ICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0
eSB2aXNpYmxlKQorICAgICAgICAgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAgICAg
ICAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgICAgIChjaGlsZHJlblRyYW5z
Zm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICAgICkKKyAg
ICAgICkKKyAgICApCisgICkKKykKKworCitTZWNvbmQgKGh1Z2UgbGF5ZXIpOgorKEdyYXBoaWNz
TGF5ZXIKKyAgKHBvc2l0aW9uIDAuMDAgMC4wMCkKKyAgKGFuY2hvciAwLjUwIDAuNTApCisgIChi
b3VuZHMgNzg1LjAwIDUxMTEuMDApCisgIChvcGFjaXR5IDEuMDApCisgICh1c2luZ1RpbGVkTGF5
ZXIgMCkKKyAgKHByZXNlcnZlczNEIDApCisgIChkcmF3c0NvbnRlbnQgMCkKKyAgKGJhY2tmYWNl
VmlzaWJpbGl0eSB2aXNpYmxlKQorICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICh0cmFuc2Zv
cm0gaWRlbnRpdHkpCisgIChjaGlsZHJlbiAxCisgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgIChw
b3NpdGlvbiAwLjAwIDAuMDApCisgICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAgIChib3Vu
ZHMgNzg1LjAwIDUxMTEuMDApCisgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgKHVzaW5nVGls
ZWRMYXllciAwKQorICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAoZHJhd3NDb250ZW50IDAp
CisgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAoYmFja2dyb3VuZENv
bG9yIG5vbmUpCisgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgKGNoaWxkcmVuVHJh
bnNmb3JtIGlkZW50aXR5KQorICAgICAgKGNoaWxkcmVuIDEKKyAgICAgICAgKEdyYXBoaWNzTGF5
ZXIKKyAgICAgICAgICAocG9zaXRpb24gOC4wMCA2OC4wMCkKKyAgICAgICAgICAoYW5jaG9yIDAu
NTAgMC41MCkKKyAgICAgICAgICAoYm91bmRzIDUwMi4wMCA1MDAyLjAwKQorICAgICAgICAgIChv
cGFjaXR5IDEuMDApCisgICAgICAgICAgKHVzaW5nVGlsZWRMYXllciAxKQorICAgICAgICAgIChw
cmVzZXJ2ZXMzRCAwKQorICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgICAoYmFj
a2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25l
KQorICAgICAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgKGNoaWxkcmVuVHJh
bnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgIChjaGlsZHJlbiAyCisgICAgICAgICAgICAoR3Jh
cGhpY3NMYXllcgorICAgICAgICAgICAgICAocG9zaXRpb24gNTEuMDAgMTAxLjAwKQorICAgICAg
ICAgICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAgICAgICAgICAgKGJvdW5kcyAyMDAuMDAg
MjAwLjAwKQorICAgICAgICAgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgICAgICAgICAodXNp
bmdUaWxlZExheWVyIDApCisgICAgICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgICAg
ICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkg
dmlzaWJsZSkKKyAgICAgICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAg
ICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgICAgICAoY2hpbGRyZW5UcmFuc2Zv
cm0gaWRlbnRpdHkpCisgICAgICAgICAgICApCisgICAgICAgICAgICAoR3JhcGhpY3NMYXllcgor
ICAgICAgICAgICAgICAocG9zaXRpb24gMjc2LjAwIDQ3MDEuMDApCisgICAgICAgICAgICAgIChh
bmNob3IgMC41MCAwLjUwKQorICAgICAgICAgICAgICAoYm91bmRzIDIwMC4wMCAyMDAuMDApCisg
ICAgICAgICAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAgICAgICAgICh1c2luZ1RpbGVkTGF5
ZXIgMCkKKyAgICAgICAgICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAgICAgICAgIChkcmF3
c0NvbnRlbnQgMSkKKyAgICAgICAgICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQor
ICAgICAgICAgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAgICAgICAgICAgICh0cmFu
c2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0
eSkKKyAgICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICAgICkKKyAgICAgICkKKyAgICAp
CisgICkKKykKKworCitUaGlyZCAoc21hbGwgbGF5ZXIpOgorKEdyYXBoaWNzTGF5ZXIKKyAgKHBv
c2l0aW9uIDAuMDAgMC4wMCkKKyAgKGFuY2hvciAwLjUwIDAuNTApCisgIChib3VuZHMgNzg1LjAw
IDYxMS4wMCkKKyAgKG9wYWNpdHkgMS4wMCkKKyAgKHVzaW5nVGlsZWRMYXllciAwKQorICAocHJl
c2VydmVzM0QgMCkKKyAgKGRyYXdzQ29udGVudCAwKQorICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZp
c2libGUpCisgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgKHRyYW5zZm9ybSBpZGVudGl0eSkK
KyAgKGNoaWxkcmVuIDEKKyAgICAoR3JhcGhpY3NMYXllcgorICAgICAgKHBvc2l0aW9uIDAuMDAg
MC4wMCkKKyAgICAgIChhbmNob3IgMC41MCAwLjUwKQorICAgICAgKGJvdW5kcyA3ODUuMDAgNjEx
LjAwKQorICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAg
ICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgKGRyYXdzQ29udGVudCAwKQorICAgICAgKGJhY2tm
YWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAg
ICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0
eSkKKyAgICAgIChjaGlsZHJlbiAxCisgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAg
KHBvc2l0aW9uIDguMDAgNjguMDApCisgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAg
ICAgICAgKGJvdW5kcyA1MDIuMDAgNTAyLjAwKQorICAgICAgICAgIChvcGFjaXR5IDEuMDApCisg
ICAgICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQor
ICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5
IHZpc2libGUpCisgICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAgICh0
cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5
KQorICAgICAgICAgIChjaGlsZHJlbiAyCisgICAgICAgICAgICAoR3JhcGhpY3NMYXllcgorICAg
ICAgICAgICAgICAocG9zaXRpb24gNTEuMDAgMTAxLjAwKQorICAgICAgICAgICAgICAoYW5jaG9y
IDAuNTAgMC41MCkKKyAgICAgICAgICAgICAgKGJvdW5kcyAyMDAuMDAgMjAwLjAwKQorICAgICAg
ICAgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDAp
CisgICAgICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgICAgICAgICAoZHJhd3NDb250
ZW50IDEpCisgICAgICAgICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAg
ICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAgICAgICAodHJhbnNmb3Jt
IGlkZW50aXR5KQorICAgICAgICAgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisg
ICAgICAgICAgICApCisgICAgICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgICAgICAo
cG9zaXRpb24gMjc2LjAwIDIwMS4wMCkKKyAgICAgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTAp
CisgICAgICAgICAgICAgIChib3VuZHMgMjAwLjAwIDIwMC4wMCkKKyAgICAgICAgICAgICAgKG9w
YWNpdHkgMS4wMCkKKyAgICAgICAgICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgICAg
ICAgICAocHJlc2VydmVzM0QgMCkKKyAgICAgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAg
ICAgICAgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAgICAgICAgIChi
YWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAgICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkK
KyAgICAgICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgICAg
KQorICAgICAgICAgICkKKyAgICAgICAgKQorICAgICAgKQorICAgICkKKyAgKQorKQorCkluZGV4
OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vY29tcG9zaXRpbmcvaHVnZS1sYXllci13aXRoLWxh
eWVyLWNoaWxkcmVuLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS93aW4vY29tcG9zaXRpbmcvaHVnZS1sYXllci13aXRoLWxheWVyLWNoaWxkcmVuLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9jb21wb3Np
dGluZy9odWdlLWxheWVyLXdpdGgtbGF5ZXItY2hpbGRyZW4tZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDc0IEBACitUaGUgeWVsbG93IGJveCBzaG91bGQgYmUgbGFyZ2UgZW5v
dWdoIHRvIHNjcm9sbCBvZmYgdGhlIGJvdHRvbS4gVGhlcmUgc2hvdWxkIGJlIGEgcmVkIGJveCBv
biB0aGUgZmlyc3QgcGFnZSBhbmQgYSBibHVlIGJveCBuZWFyIHRoZSBib3R0b20gb2YgdGhlIHll
bGxvdyBib3guIFRoaXMgdGVzdHMgdGhhdCB3ZSBjYW4gc3VwcG9ydCB2ZXJ5IGxhcmdlIGNvbXBv
c2l0aW5nIGxheWVycyB3aXRoIGNoaWxkIGNvbXBvc2l0aW5nIGxheWVycy4KKworVGhpcyBpcyBz
b21lIHRleHQKKyhHcmFwaGljc0xheWVyCisgIChwb3NpdGlvbiAwLjAwIDAuMDApCisgIChhbmNo
b3IgMC41MCAwLjUwKQorICAoYm91bmRzIDc4NS4wMCA1MTI5LjAwKQorICAob3BhY2l0eSAxLjAw
KQorICAodXNpbmdUaWxlZExheWVyIDApCisgIChwcmVzZXJ2ZXMzRCAwKQorICAoZHJhd3NDb250
ZW50IDApCisgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgKGJhY2tncm91bmRDb2xv
ciBub25lKQorICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAoY2hpbGRyZW4gMQorICAgIChHcmFw
aGljc0xheWVyCisgICAgICAocG9zaXRpb24gMC4wMCAwLjAwKQorICAgICAgKGFuY2hvciAwLjUw
IDAuNTApCisgICAgICAoYm91bmRzIDc4NS4wMCA1MTI5LjAwKQorICAgICAgKG9wYWNpdHkgMS4w
MCkKKyAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAg
ICAgKGRyYXdzQ29udGVudCAwKQorICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQor
ICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkK
KyAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGlsZHJlbiAxCisg
ICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgKHBvc2l0aW9uIDguMDAgODYuMDApCisg
ICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAgKGJvdW5kcyA1MDIuMDAgNTAw
Mi4wMCkKKyAgICAgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgICAgICh1c2luZ1RpbGVkTGF5
ZXIgMSkKKyAgICAgICAgICAocHJlc2VydmVzM0QgMCkKKyAgICAgICAgICAoZHJhd3NDb250ZW50
IDEpCisgICAgICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgICAgIChi
YWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAg
ICAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAoY2hpbGRyZW4g
MgorICAgICAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAgICAgKHBvc2l0aW9uIDUx
LjAwIDEwMS4wMCkKKyAgICAgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAg
ICAgIChib3VuZHMgMjAwLjAwIDIwMC4wMCkKKyAgICAgICAgICAgICAgKG9wYWNpdHkgMS4wMCkK
KyAgICAgICAgICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgICAgICAgICAocHJlc2Vy
dmVzM0QgMCkKKyAgICAgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICAgICAgICAo
YmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAgICAgICAgIChiYWNrZ3JvdW5kQ29s
b3Igbm9uZSkKKyAgICAgICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAg
ICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgICAgKQorICAgICAgICAg
ICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAgICAgKHBvc2l0aW9uIDUxLjAwIDQ3MDEuMDAp
CisgICAgICAgICAgICAgIChhbmNob3IgMC41MCAwLjUwKQorICAgICAgICAgICAgICAoYm91bmRz
IDIwMC4wMCAyMDAuMDApCisgICAgICAgICAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAgICAg
ICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAgICAgICAgICAgKHByZXNlcnZlczNEIDApCisg
ICAgICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgICAgICAgKGJhY2tmYWNlVmlz
aWJpbGl0eSB2aXNpYmxlKQorICAgICAgICAgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisg
ICAgICAgICAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgICAgIChjaGlsZHJl
blRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICAg
ICkKKyAgICAgICkKKyAgICApCisgICkKKykKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2luL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItcmVzaXplLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vY29tcG9zaXRpbmcvaHVnZS1sYXllci1yZXNp
emUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2lu
L2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItcmVzaXplLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMzYgQEAKK1RoZSB5ZWxsb3cgYm94IHNob3VsZCBiZSA1MDAgeCA1MDAgb24g
c3RhcnR1cC4gVGhlbiBpdCBzaG91bGQgc3RyZXRjaCB0byBiZSA1MDAgeCA1MDAwLCB0aGVuIHNo
cmluayBiYWNrIGRvd24gdG8gNTAwIHggNTAwLiBUaGlzIHRlc3RzIHRoYXQgd2UgY2FuIHJlc2l6
ZSB0byBhIGh1Z2UgbGF5ZXIgYW5kIGJhY2sgYWdhaW4gYW5kIHN0aWxsIG1haW50YWluIGludGVn
cml0eSBvZiB0aGUgbGF5ZXIgdHJlZS4KKworRmlyc3QgKHNtYWxsIGxheWVyKToKKyhHcmFwaGlj
c0xheWVyCisgIChwb3NpdGlvbiAwLjAwIDAuMDApCisgIChhbmNob3IgMC41MCAwLjUwKQorICAo
Ym91bmRzIDc4NS4wMCA2MTEuMDApCisgIChvcGFjaXR5IDEuMDApCisgICh1c2luZ1RpbGVkTGF5
ZXIgMCkKKyAgKHByZXNlcnZlczNEIDApCisgIChkcmF3c0NvbnRlbnQgMCkKKyAgKGJhY2tmYWNl
VmlzaWJpbGl0eSB2aXNpYmxlKQorICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICh0cmFuc2Zv
cm0gaWRlbnRpdHkpCisgIChjaGlsZHJlbiAxCisgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgIChw
b3NpdGlvbiAwLjAwIDAuMDApCisgICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAgIChib3Vu
ZHMgNzg1LjAwIDYxMS4wMCkKKyAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAodXNpbmdUaWxl
ZExheWVyIDApCisgICAgICAocHJlc2VydmVzM0QgMCkKKyAgICAgIChkcmF3c0NvbnRlbnQgMCkK
KyAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgIChiYWNrZ3JvdW5kQ29s
b3Igbm9uZSkKKyAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAoY2hpbGRyZW5UcmFu
c2Zvcm0gaWRlbnRpdHkpCisgICAgICAoY2hpbGRyZW4gMQorICAgICAgICAoR3JhcGhpY3NMYXll
cgorICAgICAgICAgIChwb3NpdGlvbiA4LjAwIDY4LjAwKQorICAgICAgICAgIChhbmNob3IgMC41
MCAwLjUwKQorICAgICAgICAgIChib3VuZHMgNTAyLjAwIDUwMi4wMCkKKyAgICAgICAgICAob3Bh
Y2l0eSAxLjAwKQorICAgICAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAgICAgICAocHJl
c2VydmVzM0QgMCkKKyAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICAgKGJhY2tm
YWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkK
KyAgICAgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgIChjaGlsZHJlblRyYW5z
Zm9ybSBpZGVudGl0eSkKKyAgICAgICAgKQorICAgICAgKQorICAgICkKKyAgKQorKQorCisKK1Nl
Y29uZCAoaHVnZSBsYXllcik6CisoR3JhcGhpY3NMYXllcgorICAocG9zaXRpb24gMC4wMCAwLjAw
KQorICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgKGJvdW5kcyA3ODUuMDAgNTExMS4wMCkKKyAgKG9w
YWNpdHkgMS4wMCkKKyAgKHVzaW5nVGlsZWRMYXllciAwKQorICAocHJlc2VydmVzM0QgMCkKKyAg
KGRyYXdzQ29udGVudCAwKQorICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgIChiYWNr
Z3JvdW5kQ29sb3Igbm9uZSkKKyAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgKGNoaWxkcmVuIDEK
KyAgICAoR3JhcGhpY3NMYXllcgorICAgICAgKHBvc2l0aW9uIDAuMDAgMC4wMCkKKyAgICAgIChh
bmNob3IgMC41MCAwLjUwKQorICAgICAgKGJvdW5kcyA3ODUuMDAgNTExMS4wMCkKKyAgICAgIChv
cGFjaXR5IDEuMDApCisgICAgICAodXNpbmdUaWxlZExheWVyIDApCisgICAgICAocHJlc2VydmVz
M0QgMCkKKyAgICAgIChkcmF3c0NvbnRlbnQgMCkKKyAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkg
dmlzaWJsZSkKKyAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAgICh0cmFuc2Zvcm0g
aWRlbnRpdHkpCisgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAoY2hp
bGRyZW4gMQorICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgIChwb3NpdGlvbiA4LjAw
IDY4LjAwKQorICAgICAgICAgIChhbmNob3IgMC41MCAwLjUwKQorICAgICAgICAgIChib3VuZHMg
NTAyLjAwIDUwMDIuMDApCisgICAgICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAgICAgICAodXNp
bmdUaWxlZExheWVyIDEpCisgICAgICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAgICAgKGRy
YXdzQ29udGVudCAxKQorICAgICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAg
ICAgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAgICAgICAgKHRyYW5zZm9ybSBpZGVu
dGl0eSkKKyAgICAgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICkK
KyAgICAgICkKKyAgICApCisgICkKKykKKworCitUaGlyZCAoc21hbGwgbGF5ZXIpOgorKEdyYXBo
aWNzTGF5ZXIKKyAgKHBvc2l0aW9uIDAuMDAgMC4wMCkKKyAgKGFuY2hvciAwLjUwIDAuNTApCisg
IChib3VuZHMgNzg1LjAwIDYxMS4wMCkKKyAgKG9wYWNpdHkgMS4wMCkKKyAgKHVzaW5nVGlsZWRM
YXllciAwKQorICAocHJlc2VydmVzM0QgMCkKKyAgKGRyYXdzQ29udGVudCAwKQorICAoYmFja2Zh
Y2VWaXNpYmlsaXR5IHZpc2libGUpCisgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgKHRyYW5z
Zm9ybSBpZGVudGl0eSkKKyAgKGNoaWxkcmVuIDEKKyAgICAoR3JhcGhpY3NMYXllcgorICAgICAg
KHBvc2l0aW9uIDAuMDAgMC4wMCkKKyAgICAgIChhbmNob3IgMC41MCAwLjUwKQorICAgICAgKGJv
dW5kcyA3ODUuMDAgNjExLjAwKQorICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAgICh1c2luZ1Rp
bGVkTGF5ZXIgMCkKKyAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgKGRyYXdzQ29udGVudCAw
KQorICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgKGJhY2tncm91bmRD
b2xvciBub25lKQorICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGlsZHJlblRy
YW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGlsZHJlbiAxCisgICAgICAgIChHcmFwaGljc0xh
eWVyCisgICAgICAgICAgKHBvc2l0aW9uIDguMDAgNjguMDApCisgICAgICAgICAgKGFuY2hvciAw
LjUwIDAuNTApCisgICAgICAgICAgKGJvdW5kcyA1MDIuMDAgNTAyLjAwKQorICAgICAgICAgIChv
cGFjaXR5IDEuMDApCisgICAgICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgICAgIChw
cmVzZXJ2ZXMzRCAwKQorICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgICAoYmFj
a2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25l
KQorICAgICAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgKGNoaWxkcmVuVHJh
bnNmb3JtIGlkZW50aXR5KQorICAgICAgICApCisgICAgICApCisgICAgKQorICApCispCisKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDU5OTM3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTAtMDUtMjAgIENocmlzIE1hcnJpbiAgPGNtYXJy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEltcGxlbWVudCB0aWxlZCBjb21wb3NpdGluZyBsYXllcnMgb24gV2luZG93cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0NjEKKyAgICAg
ICAgCisgICAgICAgIFRoZXNlIHRlc3RzIHNob3cgc2V2ZXJhbCBjYXBhYmlsaXRpZXMsIGluY2x1
ZGluZyBzaW1wbGUgaHVnZSBsYXllcnMsCisgICAgICAgIHJlc2l6aW5nIGZyb20gc21hbGwgdG8g
aHVnZSBhbmQgYmFjayBhZ2FpbiwgaHVnZSBsYXllcnMgd2l0aAorICAgICAgICBsYXllciBjaGls
ZHJlbiwgcmVzaXppbmcgaHVnZSBsYXllcnMgd2l0aCBsYXllciBjaGlsZHJlbiBhbmQgCisgICAg
ICAgIGFkZGluZyBhbmQgcmVtb3ZpbmcgY2hpbGRyZW4gZnJvbSBodWdlIGxheWVycy4KKyAgICAg
ICAgCisgICAgICAgIEV4cGVjdGVkIHJlc3VsdHMgYXJlIG9mIHRoZSByZXN1bHRpbmcgY29tcG9z
aXRpbmcgbGF5ZXIgdHJlZSBzbworICAgICAgICB0aGV5IGFyZSBXaW5kb3dzIHNwZWNpZmljLiBH
ZW5lcmFsIHJlc3VsdHMgd2lsbCBiZSBuZWVkZWQgZm9yIE1hYy4KKworICAgICAgICAqIGNvbXBv
c2l0aW5nL2h1Z2UtbGF5ZXItYWRkLXJlbW92ZS1jaGlsZC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBjb21wb3NpdGluZy9odWdlLWxheWVyLXJlc2l6ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBj
b21wb3NpdGluZy9odWdlLWxheWVyLXdpdGgtbGF5ZXItY2hpbGRyZW4tcmVzaXplLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGNvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItd2l0aC1sYXllci1jaGlsZHJl
bi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBjb21wb3NpdGluZy9odWdlLWxheWVyLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9odWdlLWxheWVyLWFkZC1y
ZW1vdmUtY2hpbGQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4v
Y29tcG9zaXRpbmcvaHVnZS1sYXllci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL3dpbi9jb21wb3NpdGluZy9odWdlLWxheWVyLXJlc2l6ZS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9odWdlLWxheWVyLXdpdGgt
bGF5ZXItY2hpbGRyZW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93
aW4vY29tcG9zaXRpbmcvaHVnZS1sYXllci13aXRoLWxheWVyLWNoaWxkcmVuLXJlc2l6ZS1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorCiAyMDEwLTA1LTIxICBKdWxpZSBQYXJlbnQgIDxqcGFyZW50QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLgpJbmRleDogTGF5b3V0VGVzdHMvY29t
cG9zaXRpbmcvaHVnZS1sYXllci1yZXNpemUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9jb21wb3NpdGluZy9odWdlLWxheWVyLXJlc2l6ZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvY29tcG9zaXRpbmcvaHVnZS1sYXllci1yZXNpemUuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw4NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAg
PHRpdGxlPlRlc3Qgb2YgdmVyeSBsYXJnZSBsYXllciByZXNpemluZzwvdGl0bGU+CisKKyAgICA8
c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorCisgICAgI2NvbnRhaW5lciB7
CisgICAgICB3aWR0aDogNTAwcHg7CisgICAgICBoZWlnaHQ6IDUwMHB4OworICAgICAgYm9yZGVy
OiAxcHggc29saWQgYmxhY2s7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7CisgICAg
ICAtd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVaKDApOworICAgIH0KKyAgICAKKyAgICAuYm94
IHsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgICBsZWZ0OjUwcHg7CisgICAg
ICAgIHdpZHRoOiAyMDBweDsKKyAgICAgICAgaGVpZ2h0OiAyMDBweDsKKyAgICB9CisgICAgCisg
ICAgLmF0LXRoZS10b3AgeworICAgICAgICB0b3A6IDEwMHB4OworICAgICAgICBiYWNrZ3JvdW5k
LWNvbG9yOiByZWQ7CisgICAgfQorICAgIDwvc3R5bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXN1bHQgPSAiIjsKKworICAgICAgICBm
dW5jdGlvbiB0ZXN0T25Mb2FkKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU21hbGwgbGF5
ZXIgZmlyc3QKKyAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9ICJGaXJzdCAoc21hbGwgbGF5ZXIpOjxicj4iICsgbGF5b3V0VGVz
dENvbnRyb2xsZXIubGF5ZXJUcmVlQXNUZXh0KCk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gSHVnZSBsYXllciBzZWNvbmQKKyAgICAgICAgICAgIHdp
bmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5zdHlsZS5oZWlnaHQgPSAiNTAwMHB4IjsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBMZXQgaXQgcmVuZGVyCisgICAgICAgICAg
ICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgKz0gIjxicj48YnI+U2Vjb25kIChodWdlIGxheWVyKTo8YnI+IiArIGxheW91dFRl
c3RDb250cm9sbGVyLmxheWVyVHJlZUFzVGV4dCgpOworICAgICAgICAgICAgICAgIH0sIDApOwor
ICAgICAgICAgICAgfSwgMTAwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU21hbGwg
bGF5ZXIgdGhpcmQKKyAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5zdHls
ZS5oZWlnaHQgPSAiNTAwcHgiOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8v
IExldCBpdCByZW5kZXIKKyAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICI8YnI+PGJyPlRoaXJkIChz
bWFsbCBsYXllcik6PGJyPiIgKyBsYXlvdXRUZXN0Q29udHJvbGxlci5sYXllclRyZWVBc1RleHQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXll
cnMnKS5pbm5lckhUTUwgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICAgIH0sIDIwMCk7CisgICAgICAgIH0KKyAgICAg
IAorICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRlc3RPbkxvYWQsIGZh
bHNlKTsKKyAgICA8L3NjcmlwdD4KKyAgPC9oZWFkPgorICA8Ym9keT4KKyAgICAgIDxwPgorICAg
ICAgICBUaGUgeWVsbG93IGJveCBzaG91bGQgYmUgNTAwIHggNTAwIG9uIHN0YXJ0dXAuIFRoZW4g
aXQgc2hvdWxkIAorICAgICAgICBzdHJldGNoIHRvIGJlIDUwMCB4IDUwMDAsIHRoZW4gc2hyaW5r
IGJhY2sgZG93biB0byA1MDAgeCA1MDAuIAorICAgICAgICBUaGlzIHRlc3RzIHRoYXQgd2UgY2Fu
IHJlc2l6ZSB0byBhIGh1Z2UgbGF5ZXIgYW5kIGJhY2sgYWdhaW4KKyAgICAgICAgYW5kIHN0aWxs
IG1haW50YWluIGludGVncml0eSBvZiB0aGUgbGF5ZXIgdHJlZS4KKyAgICAgIDwvcD4KKyAgICAg
ICAgPGRpdiBpZD0iY29udGFpbmVyIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJib3ggYXQtdGhl
LXRvcCI+PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8cHJlIGlkPSJsYXllcnMiPkxh
eWVyIHRyZWUgYXBwZWFycyBoZXJlIGluIERSVC48L3ByZT4KKyAgPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvaHVnZS1sYXllci5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXIuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXIuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAg
PHRpdGxlPlRlc3Qgb2YgdmVyeSBsYXJnZSBsYXllcjwvdGl0bGU+CisKKyAgICA8c3R5bGUgdHlw
ZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorCisgICAgI2NvbnRhaW5lciB7CisgICAgICB3
aWR0aDogNTAwcHg7CisgICAgICBoZWlnaHQ6IDUwMDBweDsKKyAgICAgIGJvcmRlcjogMXB4IHNv
bGlkIGJsYWNrOworICAgICAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OworICAgICAgLXdlYmtp
dC10cmFuc2Zvcm06dHJhbnNsYXRlWigwKTsKKyAgICB9CisgICAgCisgICAgLmJveCB7CisgICAg
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgbGVmdDo1MHB4OworICAgICAgICB3aWR0
aDogMjAwcHg7CisgICAgICAgIGhlaWdodDogMjAwcHg7CisgICAgfQorICAgIAorICAgIC5hdC10
aGUtdG9wIHsKKyAgICAgICAgdG9wOiAxMDBweDsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjog
cmVkOworICAgIH0KKyAgICAKKyAgICAuYXQtdGhlLWJvdHRvbSB7CisgICAgICAgIHRvcDo0NzAw
cHg7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsdWU7CisgICAgfSAgIAorICAgIDwvc3R5
bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4K
KyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rp
b24gdGVzdE9uTG9hZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xh
eWVycycpLmlubmVySFRNTCA9IGxheW91dFRlc3RDb250cm9sbGVyLmxheWVyVHJlZUFzVGV4dCgp
OworICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0KKyAgICAg
IAorICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRlc3RPbkxvYWQsIGZh
bHNlKTsKKyAgICA8L3NjcmlwdD4KKyAgPC9oZWFkPgorICA8Ym9keT4KKyAgICAgIDxwPgorICAg
ICAgICBUaGUgeWVsbG93IGJveCBzaG91bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIHNjcm9sbCBvZmYg
dGhlIGJvdHRvbS4KKyAgICAgICAgVGhlcmUgc2hvdWxkIGJlIGEgcmVkIGJveCBvbiB0aGUgZmly
c3QgcGFnZSBhbmQgYSBibHVlIGJveAorICAgICAgICBuZWFyIHRoZSBib3R0b20gb2YgdGhlIHll
bGxvdyBib3guIFRoaXMgdGVzdHMgdGhhdCB3ZSBjYW4gc3VwcG9ydAorICAgICAgICB2ZXJ5IGxh
cmdlIGNvbXBvc2l0aW5nIGxheWVycy4KKyAgICAgIDwvcD4KKyAgICAgICAgPGRpdiBpZD0iY29u
dGFpbmVyIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJib3ggYXQtdGhlLXRvcCI+PC9kaXY+Cisg
ICAgICAgICAgPGRpdiBjbGFzcz0iYm94IGF0LXRoZS1ib3R0b20iPjwvZGl2PgorICAgICAgICA8
L2Rpdj4KKyAgICAgICAgPHByZSBpZD0ibGF5ZXJzIj5MYXllciB0cmVlIGFwcGVhcnMgaGVyZSBp
biBEUlQuPC9wcmU+CisgIDwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2NvbXBv
c2l0aW5nL2h1Z2UtbGF5ZXItYWRkLXJlbW92ZS1jaGlsZC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItYWRkLXJlbW92ZS1jaGlsZC5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvaHVnZS1sYXllci1hZGQtcmVt
b3ZlLWNoaWxkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODcgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDx0aXRsZT5UZXN0IG9mIHZlcnkgbGFyZ2UgbGF5
ZXIgd2l0aCBhZGRlZCBhbmQgcmVtb3ZlZCBjaGlsZDwvdGl0bGU+CisKKyAgICA8c3R5bGUgdHlw
ZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorCisgICAgI2NvbnRhaW5lciB7CisgICAgICB3
aWR0aDogNTAwcHg7CisgICAgICBoZWlnaHQ6IDUwMDBweDsKKyAgICAgIGJvcmRlcjogMXB4IHNv
bGlkIGJsYWNrOworICAgICAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OworICAgICAgLXdlYmtp
dC10cmFuc2Zvcm06dHJhbnNsYXRlWigwKTsKKyAgICB9CisgICAgCisgICAgLmJveCB7CisgICAg
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgbGVmdDo1MHB4OworICAgICAgICB3aWR0
aDogMjAwcHg7CisgICAgICAgIGhlaWdodDogMjAwcHg7CisgICAgfQorICAgIAorICAgIC5hdC10
aGUtdG9wIHsKKyAgICAgICAgdG9wOiAxMDBweDsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjog
cmVkOworICAgIH0KKyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBjaGFyc2V0PSJ1dGYtOCI+CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0ID0gIiI7CisKKyAgICAgICAgZnVuY3Rpb24g
dGVzdE9uTG9hZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZpcnN0IHdpdGggbm8ga2lk
cworICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gIkZpcnN0IChubyBjaGlsZHJlbik6PGJyPiIgKyBsYXlvdXRUZXN0Q29udHJv
bGxlci5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBTZWNvbmQgYWRkIGtpZAorICAgICAgICAgICAgd2luZG93LnNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGJveCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAgICAgIGJveC5jbGFzc05hbWUgPSAiYm94
IGF0LXRoZS10b3AiOworICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdj
b250YWluZXInKS5hcHBlbmRDaGlsZChib3gpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIC8vIExldCBpdCByZW5kZXIKKyAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91
dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiPGJyPjxicj5T
ZWNvbmQgKGNoaWxkIGFkZGVkKTo8YnI+IiArIGxheW91dFRlc3RDb250cm9sbGVyLmxheWVyVHJl
ZUFzVGV4dCgpOworICAgICAgICAgICAgICAgIH0sIDApOworICAgICAgICAgICAgfSwgMTAwKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcmQgcmVtb3ZlIGtpZAorICAgICAgICAg
ICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGNv
bnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKTsKKyAgICAgICAg
ICAgICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY29udGFpbmVyLmxhc3RDaGlsZCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gTGV0IGl0IHJlbmRlcgorICAgICAgICAg
ICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgKz0gIjxicj48YnI+VGhpcmQgKGNoaWxkIHJlbW92ZWQpOjxicj4iICsgbGF5
b3V0VGVzdENvbnRyb2xsZXIubGF5ZXJUcmVlQXNUZXh0KCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5ZXJzJykuaW5uZXJIVE1MID0gcmVzdWx0
OworICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwgMCk7CisgICAg
ICAgICAgICB9LCAyMDApOworICAgICAgICB9CisgICAgICAKKyAgICAgICAgd2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoJ2xvYWQnLCB0ZXN0T25Mb2FkLCBmYWxzZSk7CisgICAgPC9zY3JpcHQ+Cisg
IDwvaGVhZD4KKyAgPGJvZHk+CisgICAgICA8cD4KKyAgICAgICAgVGhlIHllbGxvdyBib3ggc2hv
dWxkIGJlIGxhcmdlIGVub3VnaCB0byBzY3JvbGwgb2ZmIHRoZSBib3R0b20uCisgICAgICAgIEF0
IHRoZSBzdGFydCB0aGVyZSBzaG91bGQgYmUgbm8gY2hpbGQuIEFmdGVyIDEwMG1zIGEgcmVkIGJv
eCBpcyAKKyAgICAgICAgYWRkZWQgYW5kIGFmdGVyIDEwMG1zIG1vcmUgaXQgc2hvdWxkIGJlIHJl
bW92ZWQuIFRoaXMgdGVzdHMgdGhhdCAKKyAgICAgICAgd2UgY2FuIHN1cHBvcnQgdmVyeSBsYXJn
ZSBjb21wb3NpdGluZyBsYXllcnMgd2l0aCBkeW5hbWljYWxseSBhZGRlZCAKKyAgICAgICAgYW5k
IHJlbW92ZWQgY2hpbGQgY29tcG9zaXRpbmcgbGF5ZXJzLgorICAgICAgPC9wPgorICAgICAgICA8
ZGl2IGlkPSJjb250YWluZXIiPjwvZGl2PgorICAgICAgICA8cHJlIGlkPSJsYXllcnMiPkxheWVy
IHRyZWUgYXBwZWFycyBoZXJlIGluIERSVC48L3ByZT4KKyAgPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvaHVnZS1sYXllci13aXRoLWxheWVyLWNoaWxkcmVu
LXJlc2l6ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2h1Z2Ut
bGF5ZXItd2l0aC1sYXllci1jaGlsZHJlbi1yZXNpemUuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItd2l0aC1sYXllci1jaGlsZHJlbi1yZXNp
emUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKyAgPGhlYWQ+CisgICAgPHRpdGxlPlRlc3Qgb2YgdmVyeSBsYXJnZSBsYXllciByZXNp
emluZyB3aXRoIGxheWVyIGNoaWxkcmVuPC90aXRsZT4KKworICAgIDxzdHlsZSB0eXBlPSJ0ZXh0
L2NzcyIgbWVkaWE9InNjcmVlbiI+CisKKyAgICAjY29udGFpbmVyIHsKKyAgICAgIHdpZHRoOiA1
MDBweDsKKyAgICAgIGhlaWdodDogNTAwcHg7CisgICAgICBib3JkZXI6IDFweCBzb2xpZCBibGFj
azsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6IHllbGxvdzsKKyAgICAgIC13ZWJraXQtdHJhbnNm
b3JtOnRyYW5zbGF0ZVooMCk7CisgICAgfQorICAgIAorICAgIC5ib3ggeworICAgICAgICBwb3Np
dGlvbjogYWJzb2x1dGU7CisgICAgICAgIGxlZnQ6NTBweDsKKyAgICAgICAgd2lkdGg6IDIwMHB4
OworICAgICAgICBoZWlnaHQ6IDIwMHB4OworICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTp0cmFu
c2xhdGVaKDApOworICAgIH0KKyAgICAKKyAgICAuYXQtdGhlLXRvcCB7CisgICAgICAgIHRvcDog
MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKKyAgICB9CisgICAgCisgICAg
LmF0LXRoZS1ib3R0b20geworICAgICAgICB0b3A6MjAwcHg7CisgICAgICAgIGxlZnQ6IDI3NXB4
OworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlOworICAgIH0gICAKKyAgICA8L3N0eWxl
PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+Cisg
ICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cmVzdWx0ID0gIiI7CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdE9uTG9hZCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIFNtYWxsIGxheWVyIGZpcnN0CisgICAgICAgICAgICB3aW5kb3cuc2V0
VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAiRmlyc3QgKHNtYWxs
IGxheWVyKTo8YnI+IiArIGxheW91dFRlc3RDb250cm9sbGVyLmxheWVyVHJlZUFzVGV4dCgpOwor
ICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEh1Z2UgbGF5
ZXIgc2Vjb25kCisgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuc3R5bGUu
aGVpZ2h0ID0gIjUwMDBweCI7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2JsdWUtYm94Jykuc3R5bGUudG9wID0gIjQ3MDBweCI7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgLy8gTGV0IGl0IHJlbmRlcgorICAgICAgICAgICAgICAgIHdpbmRvdy5z
ZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICI8
YnI+PGJyPlNlY29uZCAoaHVnZSBsYXllcik6PGJyPiIgKyBsYXlvdXRUZXN0Q29udHJvbGxlci5s
YXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICAgIH0s
IDEwMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNtYWxsIGxheWVyIHRoaXJkCisg
ICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuc3R5bGUuaGVpZ2h0ID0gIjUw
MHB4IjsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmx1ZS1ib3gn
KS5zdHlsZS50b3AgPSAiMjAwcHgiOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IC8vIExldCBpdCByZW5kZXIKKyAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICI8YnI+PGJyPlRoaXJk
IChzbWFsbCBsYXllcik6PGJyPiIgKyBsYXlvdXRUZXN0Q29udHJvbGxlci5sYXllclRyZWVBc1Rl
eHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCds
YXllcnMnKS5pbm5lckhUTUwgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICAgIH0sIDIwMCk7CisgICAgICAgIH0KKyAg
ICAgIAorICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRlc3RPbkxvYWQs
IGZhbHNlKTsKKyAgICA8L3NjcmlwdD4KKyAgPC9oZWFkPgorICA8Ym9keT4KKyAgICAgIDxwPgor
ICAgICAgICBUaGUgeWVsbG93IGJveCBzaG91bGQgYmUgNTAwIHggNTAwIG9uIHN0YXJ0dXAuIFRo
ZW4gaXQgc2hvdWxkIAorICAgICAgICBzdHJldGNoIHRvIGJlIDUwMCB4IDUwMDAsIHRoZW4gc2hy
aW5rIGJhY2sgZG93biB0byA1MDAgeCA1MDAuIAorICAgICAgICBUaGlzIHRlc3RzIHRoYXQgd2Ug
Y2FuIHJlc2l6ZSB0byBhIGh1Z2UgbGF5ZXIgYW5kIGJhY2sgYWdhaW4KKyAgICAgICAgYW5kIHN0
aWxsIG1haW50YWluIGludGVncml0eSBvZiB0aGUgbGF5ZXIgdHJlZS4KKyAgICAgIDwvcD4KKyAg
ICAgICAgPGRpdiBpZD0iY29udGFpbmVyIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJib3ggYXQt
dGhlLXRvcCI+PC9kaXY+CisgICAgICAgICAgPGRpdiBpZD0iYmx1ZS1ib3giIGNsYXNzPSJib3gg
YXQtdGhlLWJvdHRvbSI+PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8cHJlIGlkPSJs
YXllcnMiPkxheWVyIHRyZWUgYXBwZWFycyBoZXJlIGluIERSVC48L3ByZT4KKyAgPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvaHVnZS1sYXllci13aXRoLWxh
eWVyLWNoaWxkcmVuLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcv
aHVnZS1sYXllci13aXRoLWxheWVyLWNoaWxkcmVuLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9jb21wb3NpdGluZy9odWdlLWxheWVyLXdpdGgtbGF5ZXItY2hpbGRyZW4uaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAg
PGhlYWQ+CisgICAgPHRpdGxlPlRlc3Qgb2YgdmVyeSBsYXJnZSBsYXllciB3aXRoIGxheWVyIGNo
aWxkcmVuPC90aXRsZT4KKworICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVl
biI+CisKKyAgICAjY29udGFpbmVyIHsKKyAgICAgIHdpZHRoOiA1MDBweDsKKyAgICAgIGhlaWdo
dDogNTAwMHB4OworICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CisgICAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiB5ZWxsb3c7CisgICAgICAtd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVaKDAp
OworICAgIH0KKyAgICAKKyAgICAuYm94IHsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwor
ICAgICAgICBsZWZ0OjUwcHg7CisgICAgICAgIHdpZHRoOiAyMDBweDsKKyAgICAgICAgaGVpZ2h0
OiAyMDBweDsKKyAgICAgIC13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVooMCk7CisgICAgfQor
ICAgIAorICAgIC5hdC10aGUtdG9wIHsKKyAgICAgICAgdG9wOiAxMDBweDsKKyAgICAgICAgYmFj
a2dyb3VuZC1jb2xvcjogcmVkOworICAgIH0KKyAgICAKKyAgICAuYXQtdGhlLWJvdHRvbSB7Cisg
ICAgICAgIHRvcDo0NzAwcHg7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsdWU7CisgICAg
fSAgIAorICAgIDwvc3R5bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNo
YXJzZXQ9InV0Zi04Ij4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB9CisK
KyAgICAgICAgZnVuY3Rpb24gdGVzdE9uTG9hZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdp
bmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2xheWVycycpLmlubmVySFRNTCA9IGxheW91dFRlc3RDb250cm9sbGVyLmxh
eWVyVHJlZUFzVGV4dCgpOworICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgMCk7Cisg
ICAgICAgIH0KKyAgICAgIAorICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcs
IHRlc3RPbkxvYWQsIGZhbHNlKTsKKyAgICA8L3NjcmlwdD4KKyAgPC9oZWFkPgorICA8Ym9keT4K
KyAgICAgIDxwPgorICAgICAgICBUaGUgeWVsbG93IGJveCBzaG91bGQgYmUgbGFyZ2UgZW5vdWdo
IHRvIHNjcm9sbCBvZmYgdGhlIGJvdHRvbS4KKyAgICAgICAgVGhlcmUgc2hvdWxkIGJlIGEgcmVk
IGJveCBvbiB0aGUgZmlyc3QgcGFnZSBhbmQgYSBibHVlIGJveAorICAgICAgICBuZWFyIHRoZSBi
b3R0b20gb2YgdGhlIHllbGxvdyBib3guIFRoaXMgdGVzdHMgdGhhdCB3ZSBjYW4gc3VwcG9ydAor
ICAgICAgICB2ZXJ5IGxhcmdlIGNvbXBvc2l0aW5nIGxheWVycyB3aXRoIGNoaWxkIGNvbXBvc2l0
aW5nIGxheWVycy4KKyAgICAgIDwvcD4KKyAgICAgICAgPGRpdiBpZD0iY29udGFpbmVyIj4KKyAg
ICAgICAgVGhpcyBpcyBzb21lIHRleHQKKyAgICAgICAgICA8ZGl2IGNsYXNzPSJib3ggYXQtdGhl
LXRvcCI+PC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0iYm94IGF0LXRoZS1ib3R0b20iPjwv
ZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPHByZSBpZD0ibGF5ZXJzIj5MYXllciB0cmVl
IGFwcGVhcnMgaGVyZSBpbiBEUlQuPC9wcmU+CisgIDwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="41189"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56766</attachid>
            <date>2010-05-21 17:18:08 -0700</date>
            <delta_ts>2010-05-21 17:33:05 -0700</delta_ts>
            <desc>Replacement patch with more issues addressed</desc>
            <filename>39461.patch</filename>
            <type>text/plain</type>
            <size>81361</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTk3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTEgQEAKKzIwMTAtMDUtMjEgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElt
cGxlbWVudCB0aWxlZCBjb21wb3NpdGluZyBsYXllcnMgb24gV2luZG93cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0NjEKKyAgICAgICAgCisgICAg
ICAgIFRoaXMgYWRkcyBhIHRpbGluZyBpbXBsZW1lbnRhdGlvbiBzaW1pbGFyIChmcm9tIGEgR3Jh
cGhpY3NMYXllciBzdGFuZHBvaW50KQorICAgICAgICB0byB0aGUgb25lIGZvciBNYWMuIEJ1dCB3
aGVyZSBNYWMgdXNlcyB0aGUgZXhpc3RpbmcgQ0FUaWxlZExheWVyLCBJJ3ZlIGhhZAorICAgICAg
ICB0byBpbXBsZW1lbnQgb25lLiBJZiBhIGxheWVyIGlzIGdyZWF0ZXIgdGhlbiAyayB4IDJrLCBJ
IHNwbGl0IGl0IGludG8gYW4KKyAgICAgICAgYXJyYXkgb2YgNTEyIHggNTEyIHRpbGVzLiBUaGVz
ZSB0aWxlcyBhcmUgcG9zaXRpb25lZCBpbiB0aGUgY29ycmVjdCBwbGFjZSAKKyAgICAgICAgZm9y
IHRoZSBUaWxlZExheWVyJ3MgY29udGVudC4gV2hlbiBzZXROZWVkc0Rpc3BsYXkgaXMgY2FsbGVk
IG9uIHRoZSBUaWxlZExheWVyCisgICAgICAgIHRoZSB0aWxlcycgc2V0TmVlZERpc3BsYXkgbWV0
aG9kcyBhcmUgY2FsbGVkLiBFYWNoIHRpbGUgY2xpcHMgYW5kIHBvc2l0aW9ucyB0aGUKKyAgICAg
ICAgQ0dDb250ZXh0IGFwcHJvcHJpYXRlbHkgYW5kIHRoZW4gcmVuZGVycyB0aGUgbGF5ZXIuCisg
ICAgICAgIAorICAgICAgICBJIGFsc28gZ290IHJpZCBvZiBhbGwgZnJhbWUoKS9zZXRGcmFtZSgp
IEFQSSB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBjYWxscyB0bworICAgICAgICBvdmVycmlkZSBm
b3IgdGlsaW5nLgorICAgICAgICAKKyAgICAgICAgTXVjaCBvcHRpbWl6YXRpb24gaXMgcG9zc2li
bGUuIE1vc3Qgc2lnbmlmaWNhbnRseSByaWdodCBub3cgYWxsIHRpbGVzIGFyZQorICAgICAgICBy
ZW5kZXJlZCB3aGV0aGVyIHZpc2libGUgb3Igbm90LiBXZSBuZWVkIHRvIG9ubHkgcmVuZGVyIHRp
bGVzIHRoYXQgYXJlIAorICAgICAgICBjdXJyZW50bHkgdmlzaWJsZS4KKworICAgICAgICBUZXN0
czogY29tcG9zaXRpbmcvaHVnZS1sYXllci1hZGQtcmVtb3ZlLWNoaWxkLmh0bWwKKyAgICAgICAg
ICAgICAgIGNvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItcmVzaXplLmh0bWwKKyAgICAgICAgICAgICAg
IGNvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItd2l0aC1sYXllci1jaGlsZHJlbi1yZXNpemUuaHRtbAor
ICAgICAgICAgICAgICAgY29tcG9zaXRpbmcvaHVnZS1sYXllci13aXRoLWxheWVyLWNoaWxkcmVu
Lmh0bWwKKyAgICAgICAgICAgICAgIGNvbXBvc2l0aW5nL2h1Z2UtbGF5ZXIuaHRtbAorCisgICAg
ICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJDQUNGLmNwcDogQWRkZWQgdGlsaW5nIGNvZGUgc2lt
aWxhciB0byBHcmFwaGljc0xheWVyQ0EKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
QUNGOjpyZXF1aXJlc1RpbGVkTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBQ0Y6OnN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNBQ0Y6OnVwZGF0ZUxheWVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ0FDRjo6dXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyQ0FDRi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9XS0NBQ0ZMYXllci5jcHA6IE1hZGUgc29tZSBtZXRob2RzIHZpcnR1YWwgc28g
V2ViVGlsZWRMYXllciBjYW4gb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQWxzbyBhZGRlZCBzdWJsYXllciBzZXR0aW5nIGFuZCBtYW5p
cHVsYXRpb24gbWV0aG9kcyBuZWVkZWQgZm9yIHRpbGluZworICAgICAgICAoV2ViQ29yZTo6V0tD
QUNGTGF5ZXI6OmFkZFN1YmxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyOjpp
bnRlcm5hbEluc2VydFN1YmxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyOjpp
bnNlcnRTdWJsYXllckFib3ZlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNGTGF5ZXI6
Omluc2VydFN1YmxheWVyQmVsb3dMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZMYXll
cjo6cmVwbGFjZVN1YmxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyOjppbnRl
cm5hbFN1YmxheWVyQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNGTGF5ZXI6OmFkb3B0
U3VibGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyOjppbnRlcm5hbFN1Ymxh
eWVyQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZMYXllcjo6aW50ZXJuYWxJbmRl
eE9mU3VibGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNGTGF5ZXI6OmludGVybmFsUmVt
b3ZlQWxsU3VibGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyOjppbnRlcm5h
bFNldFN1YmxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZMYXllcjo6aW50ZXJuYWxT
ZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNGTGF5ZXI6OnByaW50TGF5
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9XS0NBQ0ZMYXllci5oOgorICAg
ICAgICAoV2ViQ29yZTo6V0tDQUNGTGF5ZXI6OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpXS0NBQ0ZMYXllcjo6cmVtb3ZlQWxsU3VibGF5ZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OldLQ0FDRkxheWVyOjpzZXRTdWJsYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNG
TGF5ZXI6Omluc2VydFN1YmxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyOjpz
dWJsYXllckNvdW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5
ZXJSZW5kZXJlci5jcHA6IEZpeCBhIGNyYXNoIGV4cG9zZWQgd2hlbiB0aWxpbmcgY29kZSBpcyBh
Y3RpdmUKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyUmVuZGVyZXI6OmNyZWF0ZVJlbmRl
cmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRkxheWVyUmVuZGVyZXI6OmRlc3Ryb3lSZW5k
ZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZMYXllclJlbmRlcmVyOjpyZXNpemUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9XZWJMYXllci5jcHA6IEFkZGVkLiBTcGxp
dCB0aGlzIG91dCBmcm9tIEdyYXBoaWNzTGF5ZXJDQUNGIHNvIGl0IGNvdWxkIGJlIHN1YmNsYXNz
ZWQgYnkgV2ViVGlsZWRMYXllcgorICAgICAgICAoV2ViQ29yZTo6V2ViTGF5ZXI6OmludGVybmFs
U2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkxheWVyOjpkcmF3SW5Db250
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vV2ViTGF5ZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpXZWJMYXllcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkxheWVyOjpXZWJMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dl
YlRpbGVkTGF5ZXIuY3BwOiBBZGRlZC4gV2hlcmUgYWxsIHRoZSB0aWxlIGNvbnN0cnVjdGlvbiBh
bmQgcmVuZGVyaW5nIGlzIGRvbmUKKyAgICAgICAgKFdlYkNvcmU6OldlYlRpbGVkTGF5ZXI6OnRp
bGVEaXNwbGF5Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6V2ViVGlsZWRMYXllcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlRpbGVkTGF5ZXI6OldlYlRpbGVkTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViVGlsZWRMYXllcjo6fldlYlRpbGVkTGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViVGlsZWRMYXllcjo6c2V0Qm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYlRpbGVkTGF5ZXI6OmludGVybmFsU2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYlRpbGVkTGF5ZXI6OmludGVybmFsU3VibGF5ZXJDb3VudCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJUaWxlZExheWVyOjppbnRlcm5hbFJlbW92ZUFsbFN1YmxheWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJUaWxlZExheWVyOjppbnRlcm5hbFNldFN1YmxheWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJUaWxlZExheWVyOjppbnRlcm5hbEluc2VydFN1YmxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlRpbGVkTGF5ZXI6OmludGVybmFsU3VibGF5ZXJBdEluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlRpbGVkTGF5ZXI6OmludGVybmFsSW5kZXhPZlN1YmxheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYlRpbGVkTGF5ZXI6OnRpbGVQYXJlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViVGlsZWRMYXllcjo6YWRkVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJU
aWxlZExheWVyOjpyZW1vdmVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlRpbGVkTGF5ZXI6
OnRpbGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlRpbGVkTGF5ZXI6OnRpbGVDb3Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJUaWxlZExheWVyOjp1cGRhdGVUaWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJUaWxlZExheWVyOjpkcmF3VGlsZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1dlYlRpbGVkTGF5ZXIuaDogQWRkZWQuCisKIDIwMTAtMDUtMjEgIEdl
b2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2
aXNpb24gNTk2MjkpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzg2Nyw2ICsyMzg2NywyMiBAQAogCQkJCQkJPg0KIAkJCQkJPC9G
aWxlPg0KIAkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXHdpblxXZWJMYXllci5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZp
bGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxXZWJMYXll
ci5oIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cV2ViVGlsZWRMYXllci5jcHAiDQorCQkJ
CQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXHdpblxXZWJUaWxlZExheWVyLmgiDQorCQkJCQkJPg0KKwkJCQkJ
PC9GaWxlPg0KKwkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXHdpblxXS0NBQ0ZDb250ZXh0Rmx1c2hlci5jcHAiDQogCQkJCQkJPg0KIAkJCQkJPC9G
aWxlPg0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dLQ0FDRkxheWVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXIu
aAkocmV2aXNpb24gNTk2MjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XS0NB
Q0ZMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMCArNjAsMTcgQEAKICAgICB2aXJ0dWFs
IH5XS0NBQ0ZMYXllcigpOwogCiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVuZGVyKCkgeyB9
CisKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0luQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCopIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgQ0dSZWN0KiBk
aXJ0eVJlY3QpOwotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAKKyAgICB2b2lkIHNldE5l
ZWRzRGlzcGxheShjb25zdCBDR1JlY3QqIGRpcnR5UmVjdCkKKyAgICB7CisgICAgICAgIGludGVy
bmFsU2V0TmVlZHNEaXNwbGF5KGRpcnR5UmVjdCk7CisgICAgICAgIHNldE5lZWRzQ29tbWl0KCk7
CisgICAgfQorCisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSB7IHNldE5lZWRzRGlzcGxheSgw
KTsgfQorCiAgICAgLy8gTWFrZXMgdGhpcyBsYXllciB0aGUgcm9vdCB3aGVuIHRoZSBwYXNzZWQg
Y29udGV4dCBpcyByZW5kZXJlZAogICAgIHZvaWQgYmVjb21lUm9vdExheWVyRm9yQ29udGV4dChD
QUNGQ29udGV4dFJlZik7CiAKQEAgLTExMywxMCArMTIwLDE4IEBACiAgICAgYm9vbCBpc1RyYW5z
Zm9ybUxheWVyKCkgY29uc3Q7CiAKICAgICB2b2lkIGFkZFN1YmxheWVyKFBhc3NSZWZQdHI8V0tD
QUNGTGF5ZXI+IHN1YmxheWVyKTsKLSAgICB2b2lkIGluc2VydFN1YmxheWVyKFBhc3NSZWZQdHI8
V0tDQUNGTGF5ZXI+LCBzaXplX3QgaW5kZXgpOwogICAgIHZvaWQgaW5zZXJ0U3VibGF5ZXJBYm92
ZUxheWVyKFBhc3NSZWZQdHI8V0tDQUNGTGF5ZXI+LCBjb25zdCBXS0NBQ0ZMYXllciogcmVmZXJl
bmNlKTsKICAgICB2b2lkIGluc2VydFN1YmxheWVyQmVsb3dMYXllcihQYXNzUmVmUHRyPFdLQ0FD
RkxheWVyPiwgY29uc3QgV0tDQUNGTGF5ZXIqIHJlZmVyZW5jZSk7CiAgICAgdm9pZCByZXBsYWNl
U3VibGF5ZXIoV0tDQUNGTGF5ZXIqIHJlZmVyZW5jZSwgUGFzc1JlZlB0cjxXS0NBQ0ZMYXllcj4p
OworICAgIHZvaWQgYWRvcHRTdWJsYXllcnMoV0tDQUNGTGF5ZXIqIHNvdXJjZSk7CisKKyAgICB2
b2lkIHJlbW92ZUFsbFN1YmxheWVycygpIHsgaW50ZXJuYWxSZW1vdmVBbGxTdWJsYXllcnMoKTsg
fQorICAgIHZvaWQgc2V0U3VibGF5ZXJzKGNvbnN0IFZlY3RvcjxSZWZQdHI8V0tDQUNGTGF5ZXI+
ID4mIHN1YmxheWVycykgeyBpbnRlcm5hbFNldFN1YmxheWVycyhzdWJsYXllcnMpOyB9CisKKyAg
ICB2b2lkIGluc2VydFN1YmxheWVyKFBhc3NSZWZQdHI8V0tDQUNGTGF5ZXI+IGxheWVyLCBzaXpl
X3QgaW5kZXgpIHsgaW50ZXJuYWxJbnNlcnRTdWJsYXllcihsYXllciwgaW5kZXgpOyB9CisKKyAg
ICBzaXplX3Qgc3VibGF5ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsU3VibGF5ZXJD
b3VudCgpOyB9CisKICAgICB2b2lkIHJlbW92ZUZyb21TdXBlcmxheWVyKCk7CiAKICAgICBXS0NB
Q0ZMYXllciogYW5jZXN0b3JPclNlbGZXaXRoU3VwZXJsYXllcihXS0NBQ0ZMYXllciopIGNvbnN0
OwpAQCAtMTM2LDcgKzE1MSw3IEBACiAgICAgdm9pZCBzZXRCb3JkZXJXaWR0aChDR0Zsb2F0IHdp
ZHRoKSB7IENBQ0ZMYXllclNldEJvcmRlcldpZHRoKGxheWVyKCksIHdpZHRoKTsgc2V0TmVlZHND
b21taXQoKTsgfQogICAgIENHRmxvYXQgYm9yZGVyV2lkdGgoKSBjb25zdCB7IHJldHVybiBDQUNG
TGF5ZXJHZXRCb3JkZXJXaWR0aChsYXllcigpKTsgfQogCi0gICAgdm9pZCBzZXRCb3VuZHMoY29u
c3QgQ0dSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNldEJvdW5kcyhjb25zdCBDR1JlY3QmKTsK
ICAgICBDR1JlY3QgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gQ0FDRkxheWVyR2V0Qm91bmRzKGxh
eWVyKCkpOyB9CiAKICAgICB2b2lkIHNldENsZWFyc0NvbnRleHQoYm9vbCBjbGVhcnMpIHsgQ0FD
RkxheWVyU2V0Q2xlYXJzQ29udGV4dChsYXllcigpLCBjbGVhcnMpOyBzZXROZWVkc0NvbW1pdCgp
OyB9CkBAIC0xNjAsOSArMTc1LDYgQEAKICAgICB2b2lkIHNldEZpbHRlcnMoQ0ZBcnJheVJlZiBm
aWx0ZXJzKSB7IENBQ0ZMYXllclNldEZpbHRlcnMobGF5ZXIoKSwgZmlsdGVycyk7IHNldE5lZWRz
Q29tbWl0KCk7IH0KICAgICBDRkFycmF5UmVmIGZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBDQUNG
TGF5ZXJHZXRGaWx0ZXJzKGxheWVyKCkpOyB9CiAKLSAgICB2b2lkIHNldEZyYW1lKGNvbnN0IENH
UmVjdCYpOwotICAgIENHUmVjdCBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIENBQ0ZMYXllckdldEZy
YW1lKGxheWVyKCkpOyB9Ci0KICAgICB2b2lkIHNldEhpZGRlbihib29sIGhpZGRlbikgeyBDQUNG
TGF5ZXJTZXRIaWRkZW4obGF5ZXIoKSwgaGlkZGVuKTsgc2V0TmVlZHNDb21taXQoKTsgfQogICAg
IGJvb2wgaXNIaWRkZW4oKSBjb25zdCB7IHJldHVybiBDQUNGTGF5ZXJJc0hpZGRlbihsYXllcigp
KTsgfQogCkBAIC0yMDYsMTAgKzIxOCw2IEBACiAgICAgdm9pZCBzZXRTb3J0c1N1YmxheWVycyhi
b29sIHNvcnRzKSB7IENBQ0ZMYXllclNldFNvcnRzU3VibGF5ZXJzKGxheWVyKCksIHNvcnRzKTsg
c2V0TmVlZHNDb21taXQoKTsgfQogICAgIGJvb2wgc29ydHNTdWJsYXllcnMoKSBjb25zdCB7IHJl
dHVybiBDQUNGTGF5ZXJHZXRTb3J0c1N1YmxheWVycyhsYXllcigpKTsgfQogCi0gICAgdm9pZCBy
ZW1vdmVBbGxTdWJsYXllcnMoKTsKLSAgICAKLSAgICB2b2lkIHNldFN1YmxheWVycyhjb25zdCBW
ZWN0b3I8UmVmUHRyPFdLQ0FDRkxheWVyPiA+Jik7Ci0KICAgICB2b2lkIHNldFN1YmxheWVyVHJh
bnNmb3JtKGNvbnN0IENBVHJhbnNmb3JtM0QmIHRyYW5zZm9ybSkgeyBDQUNGTGF5ZXJTZXRTdWJs
YXllclRyYW5zZm9ybShsYXllcigpLCB0cmFuc2Zvcm0pOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAg
ICAgQ0FUcmFuc2Zvcm0zRCBzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIENBQ0ZM
YXllckdldFN1YmxheWVyVHJhbnNmb3JtKGxheWVyKCkpOyB9CiAKQEAgLTIzMSwyOCArMjM5LDMw
IEBACiAKICAgICB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAKLXByaXZhdGU6CiAgICAgQ0FDRkxh
eWVyUmVmIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllci5nZXQoKTsgfQotICAgIHNpemVf
dCBudW1TdWJsYXllcnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgQ0ZBcnJheVJlZiBzdWJsYXll
cnMgPSBDQUNGTGF5ZXJHZXRTdWJsYXllcnMobGF5ZXIoKSk7Ci0gICAgICAgIHJldHVybiBzdWJs
YXllcnMgPyBDRkFycmF5R2V0Q291bnQoc3VibGF5ZXJzKSA6IDA7Ci0gICAgfQorICAgIC8vIFRo
aXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gcmVtb3ZlRnJvbVN1cGVybGF5ZXIuCisgICAg
dm9pZCByZW1vdmVTdWJsYXllcihjb25zdCBXS0NBQ0ZMYXllciopOwogCi0gICAgY29uc3QgV0tD
QUNGTGF5ZXIqIHN1YmxheWVyQXRJbmRleChpbnQpIGNvbnN0OwotICAgIAorICAgIC8vIE1ldGhv
ZHMgdG8gYmUgb3ZlcnJpZGRlbiBmb3Igc3VibGF5ZXIgYW5kIHJlbmRlcmluZyBtYW5hZ2VtZW50
CisgICAgdmlydHVhbCBXS0NBQ0ZMYXllciogaW50ZXJuYWxTdWJsYXllckF0SW5kZXgoaW50KSBj
b25zdDsKKwogICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBwYXNzZWQgbGF5ZXIgaW4g
dGhpcyBsYXllcidzIHN1YmxheWVycyBsaXN0CiAgICAgLy8gb3IgLTEgaWYgbm90IGZvdW5kCi0g
ICAgaW50IGluZGV4T2ZTdWJsYXllcihjb25zdCBXS0NBQ0ZMYXllciopOworICAgIHZpcnR1YWwg
aW50IGludGVybmFsSW5kZXhPZlN1YmxheWVyKGNvbnN0IFdLQ0FDRkxheWVyKik7CiAKLSAgICAv
LyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHJlbW92ZUZyb21TdXBlcmxheWVyLgot
ICAgIHZvaWQgcmVtb3ZlU3VibGF5ZXIoY29uc3QgV0tDQUNGTGF5ZXIqKTsKKyAgICB2aXJ0dWFs
IHNpemVfdCBpbnRlcm5hbFN1YmxheWVyQ291bnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
aW50ZXJuYWxJbnNlcnRTdWJsYXllcihQYXNzUmVmUHRyPFdLQ0FDRkxheWVyPiwgc2l6ZV90IGlu
ZGV4KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxSZW1vdmVBbGxTdWJsYXllcnMoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxTZXRTdWJsYXllcnMoY29uc3QgVmVjdG9yPFJlZlB0cjxX
S0NBQ0ZMYXllcj4gPiYpOwogCisgICAgdmlydHVhbCB2b2lkIGludGVybmFsU2V0TmVlZHNEaXNw
bGF5KGNvbnN0IENHUmVjdCogZGlydHlSZWN0KTsKKwogI2lmbmRlZiBOREVCVUcKICAgICAvLyBQ
cmludCB0aGlzIGxheWVyIGFuZCBpdHMgY2hpbGRyZW4gdG8gdGhlIGNvbnNvbGUKICAgICB2b2lk
IHByaW50TGF5ZXIoaW50IGluZGVudCkgY29uc3Q7CiAjZW5kaWYKIAorcHJpdmF0ZToKICAgICBS
ZXRhaW5QdHI8Q0FDRkxheWVyUmVmPiBtX2xheWVyOwogICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXlP
bkJvdW5kc0NoYW5nZTsKIH07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9X
ZWJUaWxlZExheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vV2ViVGlsZWRMYXllci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vV2ViVGlsZWRMYXllci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIFdlYlRpbGVkTGF5ZXJfaAorI2RlZmluZSBXZWJUaWxlZExheWVyX2gKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIldlYkxheWVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViVGlsZWRMYXllciA6IHB1YmxpYyBXZWJMYXll
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViVGlsZWRMYXllcj4gY3JlYXRl
KGNvbnN0IENHU2l6ZSYgdGlsZVNpemUsIEdyYXBoaWNzTGF5ZXIqIG93bmVyKTsKKworICAgIHZp
cnR1YWwgfldlYlRpbGVkTGF5ZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRCb3VuZHMoY29u
c3QgQ0dSZWN0Jik7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJUaWxlZExheWVyKGNvbnN0IENHU2l6
ZSYgdGlsZVNpemUsIEdyYXBoaWNzTGF5ZXIqIG93bmVyKTsKKworICAgIC8vIE92ZXJyaWRkZW4g
ZnJvbSBXS0NBQ0ZMYXllcgorICAgIHZpcnR1YWwgV0tDQUNGTGF5ZXIqIGludGVybmFsU3VibGF5
ZXJBdEluZGV4KGludCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgaW50ZXJuYWxJbmRleE9mU3Vi
bGF5ZXIoY29uc3QgV0tDQUNGTGF5ZXIqKTsKKworICAgIHZpcnR1YWwgc2l6ZV90IGludGVybmFs
U3VibGF5ZXJDb3VudCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbEluc2VydFN1
YmxheWVyKFBhc3NSZWZQdHI8V0tDQUNGTGF5ZXI+LCBzaXplX3QgaW5kZXgpOworCisgICAgdmly
dHVhbCB2b2lkIGludGVybmFsUmVtb3ZlQWxsU3VibGF5ZXJzKCk7CisgICAgdmlydHVhbCB2b2lk
IGludGVybmFsU2V0U3VibGF5ZXJzKGNvbnN0IFZlY3RvcjxSZWZQdHI8V0tDQUNGTGF5ZXI+ID4m
KTsKKworICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbFNldE5lZWRzRGlzcGxheShjb25zdCBDR1Jl
Y3QqIGRpcnR5UmVjdCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgdGlsZURpc3BsYXlD
YWxsYmFjayhDQUNGTGF5ZXJSZWYsIENHQ29udGV4dFJlZik7CisgICAgdm9pZCBkcmF3VGlsZShD
QUNGTGF5ZXJSZWYsIENHQ29udGV4dFJlZik7CisKKyAgICBDQUNGTGF5ZXJSZWYgV2ViVGlsZWRM
YXllcjo6dGlsZVBhcmVudCgpIGNvbnN0OworICAgIHZvaWQgYWRkVGlsZShDQUNGTGF5ZXJSZWYg
bGF5ZXJUaWxlUGFyZW50KTsKKyAgICB2b2lkIHJlbW92ZVRpbGUoKTsKKyAgICBDQUNGTGF5ZXJS
ZWYgdGlsZUF0SW5kZXgoaW50KTsKKyAgICBpbnQgdGlsZUNvdW50KCkgY29uc3Q7CisKKyAgICB2
b2lkIHVwZGF0ZVRpbGVzKCk7CisKKyAgICBDR1NpemUgbV90aWxlU2l6ZTsKK307CisKK30KKwor
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmIC8vIFdlYlRp
bGVkTGF5ZXJfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vV2ViVGlsZWRMYXllci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAg
ICsgKgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dlYkxheWVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV2ViTGF5ZXIuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dlYkxheWVyLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV2ViTGF5ZXJfaAorI2RlZmluZSBX
ZWJMYXllcl9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRl
ICJXS0NBQ0ZMYXllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNz
TGF5ZXI7CisKK2NsYXNzIFdlYkxheWVyIDogcHVibGljIFdLQ0FDRkxheWVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXS0NBQ0ZMYXllcj4gY3JlYXRlKExheWVyVHlwZSBsYXll
clR5cGUsIEdyYXBoaWNzTGF5ZXIqIG93bmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBXZWJMYXllcihsYXllclR5cGUsIG93bmVyKSk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGRyYXdJbkNvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTsKKworcHJvdGVj
dGVkOgorICAgIFdlYkxheWVyKExheWVyVHlwZSBsYXllclR5cGUsIEdyYXBoaWNzTGF5ZXIqIG93
bmVyKQorICAgICA6IFdLQ0FDRkxheWVyKGxheWVyVHlwZSkKKyAgICAgLCBtX293bmVyKG93bmVy
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxTZXROZWVkc0Rpc3Bs
YXkoY29uc3QgQ0dSZWN0KiBkaXJ0eVJlY3QpOworCisgICAgR3JhcGhpY3NMYXllciogbV9vd25l
cjsKK307CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwor
I2VuZGlmIC8vIFdlYkxheWVyX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1dlYkxheWVyLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFi
bGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NM
YXllckNBQ0YuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0xheWVyQ0FDRi5oCShyZXZpc2lvbiA1OTYyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJDQUNGLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYg
Kzk4LDkgQEAKICAgICBXS0NBQ0ZMYXllciogaG9zdExheWVyRm9yU3VibGF5ZXJzKCkgY29uc3Q7
CiAgICAgV0tDQUNGTGF5ZXIqIGxheWVyRm9yU3VwZXJsYXllcigpIGNvbnN0OwogCisgICAgYm9v
bCByZXF1aXJlc1RpbGVkTGF5ZXIoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7CisgICAgdm9pZCBz
d2FwRnJvbU9yVG9UaWxlZExheWVyKGJvb2wgdXNlVGlsZWRMYXllcik7CisKICAgICBDb21wb3Np
dGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gZGVmYXVsdENvbnRlbnRzT3JpZW50YXRpb24oKSBj
b25zdDsKICAgICB2b2lkIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwogICAgIHZvaWQgdXBkYXRlTGF5
ZXJQb3NpdGlvbigpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNG
TGF5ZXJSZW5kZXJlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vV0tDQUNGTGF5ZXJSZW5kZXJlci5jcHAJKHJldmlzaW9uIDU5NjI5KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXJSZW5kZXJlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3Nyw2ICszNzcsNyBAQAogICAgIG1fcm9vdExheWVyLT5hZGRTdWJsYXllciht
X2NsaXBMYXllcik7CiAgICAgbV9jbGlwTGF5ZXItPmFkZFN1YmxheWVyKG1fc2Nyb2xsTGF5ZXIp
OwogICAgIG1fY2xpcExheWVyLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworICAgIG1fcm9vdExh
eWVyLT5zZXRBbmNob3JQb2ludChDR1BvaW50TWFrZSgwLCAwKSk7CiAgICAgbV9zY3JvbGxMYXll
ci0+c2V0QW5jaG9yUG9pbnQoQ0dQb2ludE1ha2UoMCwgMSkpOwogICAgIG1fY2xpcExheWVyLT5z
ZXRBbmNob3JQb2ludChDR1BvaW50TWFrZSgwLCAxKSk7CiAKQEAgLTM4Nyw3ICszODgsNyBAQAog
I2VuZGlmCiAKICAgICBpZiAoSXNXaW5kb3cobV9ob3N0V2luZG93KSkKLSAgICAgICAgbV9yb290
TGF5ZXItPnNldEZyYW1lKGJvdW5kcygpKTsKKyAgICAgICAgbV9yb290TGF5ZXItPnNldEJvdW5k
cyhib3VuZHMoKSk7CiAKICAgICBpZiAobV9jb250ZXh0KQogICAgICAgICBtX3Jvb3RMYXllci0+
YmVjb21lUm9vdExheWVyRm9yQ29udGV4dChtX2NvbnRleHQuZ2V0KCkpOwpAQCAtMzk4LDYgKzM5
OSw3IEBACiB2b2lkIFdLQ0FDRkxheWVyUmVuZGVyZXI6OmRlc3Ryb3lSZW5kZXJlcigpCiB7CiAg
ICAgaWYgKG1fY29udGV4dCkgeworICAgICAgICBDQUNGQ29udGV4dFNldExheWVyKG1fY29udGV4
dC5nZXQoKSwgMCk7CiAgICAgICAgIHdpbmRvd3NGb3JDb250ZXh0cygpLnJlbW92ZShtX2NvbnRl
eHQuZ2V0KCkpOwogICAgICAgICBXS0NBQ0ZDb250ZXh0Rmx1c2hlcjo6c2hhcmVkKCkucmVtb3Zl
Q29udGV4dChtX2NvbnRleHQuZ2V0KCkpOwogICAgIH0KQEAgLTQyOCw3ICs0MzAsNyBAQAogICAg
IHJlc2V0RGV2aWNlKENoYW5nZWRXaW5kb3dTaXplKTsKIAogICAgIGlmIChtX3Jvb3RMYXllcikg
ewotICAgICAgICBtX3Jvb3RMYXllci0+c2V0RnJhbWUoYm91bmRzKCkpOworICAgICAgICBtX3Jv
b3RMYXllci0+c2V0Qm91bmRzKGJvdW5kcygpKTsKICAgICAgICAgV0tDQUNGQ29udGV4dEZsdXNo
ZXI6OnNoYXJlZCgpLmZsdXNoQWxsQ29udGV4dHMoKTsKICAgICAgICAgdXBkYXRlU2Nyb2xsRnJh
bWUoKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XS0NBQ0ZM
YXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tD
QUNGTGF5ZXIuY3BwCShyZXZpc2lvbiA1OTYyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1dLQ0FDRkxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDEyICsyMDAsMTIg
QEAKIAogdm9pZCBXS0NBQ0ZMYXllcjo6YWRkU3VibGF5ZXIoUGFzc1JlZlB0cjxXS0NBQ0ZMYXll
cj4gc3VibGF5ZXIpCiB7Ci0gICAgaW5zZXJ0U3VibGF5ZXIoc3VibGF5ZXIsIG51bVN1YmxheWVy
cygpKTsKKyAgICBpbnNlcnRTdWJsYXllcihzdWJsYXllciwgc3VibGF5ZXJDb3VudCgpKTsKIH0K
IAotdm9pZCBXS0NBQ0ZMYXllcjo6aW5zZXJ0U3VibGF5ZXIoUGFzc1JlZlB0cjxXS0NBQ0ZMYXll
cj4gc3VibGF5ZXIsIHNpemVfdCBpbmRleCkKK3ZvaWQgV0tDQUNGTGF5ZXI6OmludGVybmFsSW5z
ZXJ0U3VibGF5ZXIoUGFzc1JlZlB0cjxXS0NBQ0ZMYXllcj4gc3VibGF5ZXIsIHNpemVfdCBpbmRl
eCkKIHsKLSAgICBpbmRleCA9IG1pbihpbmRleCwgbnVtU3VibGF5ZXJzKCkpOworICAgIGluZGV4
ID0gbWluKGluZGV4LCBzdWJsYXllckNvdW50KCkpOwogICAgIHN1YmxheWVyLT5yZW1vdmVGcm9t
U3VwZXJsYXllcigpOwogICAgIENBQ0ZMYXllckluc2VydFN1YmxheWVyKGxheWVyKCksIHN1Ymxh
eWVyLT5sYXllcigpLCBpbmRleCk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKQEAgLTIxOCw3ICsy
MTgsNyBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW50IHJlZmVyZW5jZUluZGV4
ID0gaW5kZXhPZlN1YmxheWVyKHJlZmVyZW5jZSk7CisgICAgaW50IHJlZmVyZW5jZUluZGV4ID0g
aW50ZXJuYWxJbmRleE9mU3VibGF5ZXIocmVmZXJlbmNlKTsKICAgICBpZiAocmVmZXJlbmNlSW5k
ZXggPT0gLTEpIHsKICAgICAgICAgYWRkU3VibGF5ZXIoc3VibGF5ZXIpOwogICAgICAgICByZXR1
cm47CkBAIC0yMzQsNyArMjM0LDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlu
dCByZWZlcmVuY2VJbmRleCA9IGluZGV4T2ZTdWJsYXllcihyZWZlcmVuY2UpOworICAgIGludCBy
ZWZlcmVuY2VJbmRleCA9IGludGVybmFsSW5kZXhPZlN1YmxheWVyKHJlZmVyZW5jZSk7CiAgICAg
aWYgKHJlZmVyZW5jZUluZGV4ID09IC0xKSB7CiAgICAgICAgIGFkZFN1YmxheWVyKHN1YmxheWVy
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjUxLDcgKzI1MSw3IEBACiAgICAgaWYgKHJlZmVyZW5j
ZSA9PSBuZXdMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHJlZmVyZW5jZUluZGV4
ID0gaW5kZXhPZlN1YmxheWVyKHJlZmVyZW5jZSk7CisgICAgaW50IHJlZmVyZW5jZUluZGV4ID0g
aW50ZXJuYWxJbmRleE9mU3VibGF5ZXIocmVmZXJlbmNlKTsKICAgICBBU1NFUlQocmVmZXJlbmNl
SW5kZXggIT0gLTEpOwogICAgIGlmIChyZWZlcmVuY2VJbmRleCA9PSAtMSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjY0LDYgKzI2NCwyNSBAQAogICAgIH0KIH0KIAorc2l6ZV90IFdLQ0FDRkxheWVy
OjppbnRlcm5hbFN1YmxheWVyQ291bnQoKSBjb25zdAoreworICAgIENGQXJyYXlSZWYgc3VibGF5
ZXJzID0gQ0FDRkxheWVyR2V0U3VibGF5ZXJzKGxheWVyKCkpOworICAgIHJldHVybiBzdWJsYXll
cnMgPyBDRkFycmF5R2V0Q291bnQoc3VibGF5ZXJzKSA6IDA7Cit9CisKK3ZvaWQgIFdLQ0FDRkxh
eWVyOjphZG9wdFN1YmxheWVycyhXS0NBQ0ZMYXllciogc291cmNlKQoreworICAgIC8vIFdlIHdp
bGwgdXNlIHNldFN1YmxheWVycygpIGJlY2F1c2UgaXQgcHJvcGVybHkgbnVsbHMKKyAgICAvLyBv
dXQgdGhlIHN1cGVybGF5ZXIgcG9pbnRlci4KKyAgICBWZWN0b3I8UmVmUHRyPFdLQ0FDRkxheWVy
PiA+IHN1YmxheWVyczsKKyAgICBzaXplX3QgbiA9IHNvdXJjZS0+c3VibGF5ZXJDb3VudCgpOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICAgIHN1YmxheWVycy5h
cHBlbmQoc291cmNlLT5pbnRlcm5hbFN1YmxheWVyQXRJbmRleChpKSk7CisKKyAgICBzZXRTdWJs
YXllcnMoc3VibGF5ZXJzKTsKK30KKwogdm9pZCBXS0NBQ0ZMYXllcjo6cmVtb3ZlRnJvbVN1cGVy
bGF5ZXIoKQogewogICAgIFdLQ0FDRkxheWVyKiBzdXBlcmxheWVyID0gdGhpcy0+c3VwZXJsYXll
cigpOwpAQCAtMjc0LDIyICsyOTMsMjUgQEAKICAgICBzdXBlcmxheWVyLT5zZXROZWVkc0NvbW1p
dCgpOwogfQogCi1jb25zdCBXS0NBQ0ZMYXllciogV0tDQUNGTGF5ZXI6OnN1YmxheWVyQXRJbmRl
eChpbnQgaW5kZXgpIGNvbnN0CitXS0NBQ0ZMYXllciogV0tDQUNGTGF5ZXI6OmludGVybmFsU3Vi
bGF5ZXJBdEluZGV4KGludCBpbmRleCkgY29uc3QKIHsKICAgICBDRkFycmF5UmVmIHN1YmxheWVy
cyA9IENBQ0ZMYXllckdldFN1YmxheWVycyhsYXllcigpKTsKLSAgICBpZiAoaW5kZXggPCAwIHx8
IENGQXJyYXlHZXRDb3VudChzdWJsYXllcnMpIDw9IGluZGV4KQorICAgIGlmICghc3VibGF5ZXJz
IHx8IGluZGV4IDwgMCB8fCBDRkFycmF5R2V0Q291bnQoc3VibGF5ZXJzKSA8PSBpbmRleCkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgcmV0dXJuIGxheWVyKHN0YXRpY19jYXN0PENBQ0ZM
YXllclJlZj4oY29uc3RfY2FzdDx2b2lkKj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChzdWJsYXll
cnMsIGluZGV4KSkpKTsKIH0KIAotaW50IFdLQ0FDRkxheWVyOjppbmRleE9mU3VibGF5ZXIoY29u
c3QgV0tDQUNGTGF5ZXIqIHJlZmVyZW5jZSkKK2ludCBXS0NBQ0ZMYXllcjo6aW50ZXJuYWxJbmRl
eE9mU3VibGF5ZXIoY29uc3QgV0tDQUNGTGF5ZXIqIHJlZmVyZW5jZSkKIHsKICAgICBDQUNGTGF5
ZXJSZWYgcmVmID0gcmVmZXJlbmNlLT5sYXllcigpOwogICAgIGlmICghcmVmKQogICAgICAgICBy
ZXR1cm4gLTE7CiAKICAgICBDRkFycmF5UmVmIHN1YmxheWVycyA9IENBQ0ZMYXllckdldFN1Ymxh
eWVycyhsYXllcigpKTsKKyAgICBpZiAoIXN1YmxheWVycykKKyAgICAgICAgcmV0dXJuIC0xOwor
CiAgICAgc2l6ZV90IG4gPSBDRkFycmF5R2V0Q291bnQoc3VibGF5ZXJzKTsKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKQpAQCAtMzIxLDE5ICszNDMsNiBAQAogICAgICAgICBz
ZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAotdm9pZCBXS0NBQ0ZMYXllcjo6c2V0RnJhbWUoY29uc3Qg
Q0dSZWN0JiByZWN0KQotewotICAgIENHUmVjdCBvbGRGcmFtZSA9IGZyYW1lKCk7Ci0gICAgaWYg
KENHUmVjdEVxdWFsVG9SZWN0KHJlY3QsIG9sZEZyYW1lKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQ0FDRkxheWVyU2V0RnJhbWUobGF5ZXIoKSwgcmVjdCk7Ci0gICAgc2V0TmVlZHNDb21taXQo
KTsKLQotICAgIGlmIChtX25lZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlKQotICAgICAgICBzZXRO
ZWVkc0Rpc3BsYXkoKTsKLX0KLQogdm9pZCBXS0NBQ0ZMYXllcjo6c2V0Q29udGVudHNHcmF2aXR5
KENvbnRlbnRzR3Jhdml0eVR5cGUgdHlwZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRDb250ZW50c0dy
YXZpdHkobGF5ZXIoKSwgdG9DQUNGQ29udGVudHNHcmF2aXR5VHlwZSh0eXBlKSk7CkBAIC0zNzQs
MTMgKzM4MywxMyBAQAogICAgIHJldHVybiBsYXllcjsKIH0KIAotdm9pZCBXS0NBQ0ZMYXllcjo6
cmVtb3ZlQWxsU3VibGF5ZXJzKCkKK3ZvaWQgV0tDQUNGTGF5ZXI6OmludGVybmFsUmVtb3ZlQWxs
U3VibGF5ZXJzKCkKIHsKICAgICBDQUNGTGF5ZXJTZXRTdWJsYXllcnMobGF5ZXIoKSwgMCk7CiAg
ICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9pZCBXS0NBQ0ZMYXllcjo6c2V0U3VibGF5ZXJz
KGNvbnN0IFZlY3RvcjxSZWZQdHI8V0tDQUNGTGF5ZXI+ID4mIHN1YmxheWVycykKK3ZvaWQgV0tD
QUNGTGF5ZXI6OmludGVybmFsU2V0U3VibGF5ZXJzKGNvbnN0IFZlY3RvcjxSZWZQdHI8V0tDQUNG
TGF5ZXI+ID4mIHN1YmxheWVycykKIHsKICAgICAvLyBSZW1vdmUgYWxsIHRoZSBjdXJyZW50IHN1
YmxheWVycyBhbmQgYWRkIHRoZSBwYXNzZWQgbGF5ZXJzCiAgICAgQ0FDRkxheWVyU2V0U3VibGF5
ZXJzKGxheWVyKCksIDApOwpAQCAtNDA0LDE3ICs0MTMsMTEgQEAKICAgICByZXR1cm4gV0tDQUNG
TGF5ZXI6OmxheWVyKHN1cGVyKTsKIH0KIAotdm9pZCBXS0NBQ0ZMYXllcjo6c2V0TmVlZHNEaXNw
bGF5KGNvbnN0IENHUmVjdCogZGlydHlSZWN0KQordm9pZCBXS0NBQ0ZMYXllcjo6aW50ZXJuYWxT
ZXROZWVkc0Rpc3BsYXkoY29uc3QgQ0dSZWN0KiBkaXJ0eVJlY3QpCiB7CiAgICAgQ0FDRkxheWVy
U2V0TmVlZHNEaXNwbGF5KGxheWVyKCksIGRpcnR5UmVjdCk7Ci0gICAgc2V0TmVlZHNDb21taXQo
KTsKIH0KIAotdm9pZCBXS0NBQ0ZMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBzZXRO
ZWVkc0Rpc3BsYXkoMCk7Ci19Ci0KICNpZm5kZWYgTkRFQlVHCiBzdGF0aWMgdm9pZCBwcmludElu
ZGVudChpbnQgaW5kZW50KQogewpAQCAtNTAyLDEyICs1MDUsMTIgQEAKICAgICB9CiAKICAgICAv
LyBQcmludCBzdWJsYXllcnMgaWYgbmVlZGVkCi0gICAgaW50IG4gPSBudW1TdWJsYXllcnMoKTsK
KyAgICBpbnQgbiA9IHN1YmxheWVyQ291bnQoKTsKICAgICBpZiAobiA+IDApIHsKICAgICAgICAg
cHJpbnRJbmRlbnQoaW5kZW50ICsgMSk7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKHN1Ymxh
eWVyc1xuIik7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQotICAgICAgICAg
ICAgc3VibGF5ZXJBdEluZGV4KGkpLT5wcmludExheWVyKGluZGVudCArIDIpOworICAgICAgICAg
ICAgaW50ZXJuYWxTdWJsYXllckF0SW5kZXgoaSktPnByaW50TGF5ZXIoaW5kZW50ICsgMik7CiAK
ICAgICAgICAgcHJpbnRJbmRlbnQoaW5kZW50ICsgMSk7CiAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiKVxuIik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XZWJUaWxlZExh
eWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XZWJU
aWxlZExheWVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1dlYlRpbGVkTGF5ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisj
aW5jbHVkZSAiV2ViVGlsZWRMYXllci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgor
I2luY2x1ZGUgIldLQ0FDRkxheWVyUmVuZGVyZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCit2b2lkIFdlYlRpbGVkTGF5ZXI6OnRpbGVEaXNwbGF5
Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAg
ICBzdGF0aWNfY2FzdDxXZWJUaWxlZExheWVyKj4oQ0FDRkxheWVyR2V0VXNlckRhdGEobGF5ZXIp
KS0+ZHJhd1RpbGUobGF5ZXIsIGNvbnRleHQpOworfQorCitQYXNzUmVmUHRyPFdlYlRpbGVkTGF5
ZXI+IFdlYlRpbGVkTGF5ZXI6OmNyZWF0ZShjb25zdCBDR1NpemUmIHRpbGVTaXplLCBHcmFwaGlj
c0xheWVyKiBvd25lcikKK3sKKyAgICBBU1NFUlQoV0tDQUNGTGF5ZXJSZW5kZXJlcjo6YWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0F2YWlsYWJsZSgpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdl
YlRpbGVkTGF5ZXIodGlsZVNpemUsIG93bmVyKSk7Cit9CisKK1dlYlRpbGVkTGF5ZXI6OldlYlRp
bGVkTGF5ZXIoY29uc3QgQ0dTaXplJiB0aWxlU2l6ZSwgR3JhcGhpY3NMYXllciogb3duZXIpCisg
ICAgOiBXZWJMYXllcihXS0NBQ0ZMYXllcjo6TGF5ZXIsIG93bmVyKQoreworICAgIC8vIFRpbGVk
IGxheWVycyBhcmUgcGxhY2VkIGluIGEgY2hpbGQgbGF5ZXIgdGhhdCBpcyBhbHdheXMgdGhlIGZp
cnN0IGNoaWxkIG9mIHRoZSBUaWxlZExheWVyCisgICAgUmV0YWluUHRyPENBQ0ZMYXllclJlZj4g
dGlsZVBhcmVudChBZG9wdENGLCBDQUNGTGF5ZXJDcmVhdGUoa0NBQ0ZMYXllcikpOworICAgIENB
Q0ZMYXllckluc2VydFN1YmxheWVyKGxheWVyKCksIHRpbGVQYXJlbnQuZ2V0KCksIDApOworCisg
ICAgbV90aWxlU2l6ZSA9IHRpbGVTaXplOworICAgIHVwZGF0ZVRpbGVzKCk7Cit9CisKK1dlYlRp
bGVkTGF5ZXI6On5XZWJUaWxlZExheWVyKCkKK3sKK30KKwordm9pZCBXZWJUaWxlZExheWVyOjpz
ZXRCb3VuZHMoY29uc3QgQ0dSZWN0JiByZWN0KQoreworICAgIGlmIChDR1JlY3RFcXVhbFRvUmVj
dChyZWN0LCBib3VuZHMoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkxheWVyOjpzZXRC
b3VuZHMocmVjdCk7CisgICAgdXBkYXRlVGlsZXMoKTsKK30KKwordm9pZCBXZWJUaWxlZExheWVy
OjppbnRlcm5hbFNldE5lZWRzRGlzcGxheShjb25zdCBDR1JlY3QqIGRpcnR5UmVjdCkKK3sKKyAg
ICAvLyBGSVhNRTogT25seSBzZXROZWVkc0Rpc3BsYXkgZm9yIHRpbGVzIHRoYXQgYXJlIGN1cnJl
bnRseSB2aXNpYmxlCisgICAgaW50IG51bVRpbGVMYXllcnMgPSB0aWxlQ291bnQoKTsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bVRpbGVMYXllcnM7ICsraSkKKyAgICAgICAgQ0FDRkxheWVy
U2V0TmVlZHNEaXNwbGF5KHRpbGVBdEluZGV4KGkpLCBkaXJ0eVJlY3QpOworCisgICAgaWYgKG1f
b3duZXItPnNob3dSZXBhaW50Q291bnRlcigpKSB7CisgICAgICAgIENHUmVjdCBsYXllckJvdW5k
cyA9IGJvdW5kcygpOworICAgICAgICBDR1JlY3QgaW5kaWNhdG9yUmVjdCA9IENHUmVjdE1ha2Uo
bGF5ZXJCb3VuZHMub3JpZ2luLngsIGxheWVyQm91bmRzLm9yaWdpbi55LCA4MCwgMjUpOworICAg
ICAgICBDQUNGTGF5ZXJTZXROZWVkc0Rpc3BsYXkodGlsZUF0SW5kZXgoMCksICZpbmRpY2F0b3JS
ZWN0KTsKKyAgICB9Cit9CisKK3NpemVfdCBXZWJUaWxlZExheWVyOjppbnRlcm5hbFN1YmxheWVy
Q291bnQoKSBjb25zdAoreworICAgIEFTU0VSVChXZWJMYXllcjo6aW50ZXJuYWxTdWJsYXllckNv
dW50KCkgPiAwKTsKKworICAgIC8vIFN1YnRyYWN0IDEgdG8gYWNjb3VudCBmb3IgdGhlIHRpbGUg
cGFyZW50IGxheWVyCisgICAgcmV0dXJuIFdlYkxheWVyOjppbnRlcm5hbFN1YmxheWVyQ291bnQo
KSAtIDE7Cit9CisKK3ZvaWQgV2ViVGlsZWRMYXllcjo6aW50ZXJuYWxSZW1vdmVBbGxTdWJsYXll
cnMoKQoreworICAgIC8vIFByZXNlcnZlIHRoZSB0aWxlIHBhcmVudAorICAgIFJldGFpblB0cjxD
QUNGTGF5ZXJSZWY+IHBhcmVudCA9IHRpbGVQYXJlbnQoKTsKKyAgICBXZWJMYXllcjo6aW50ZXJu
YWxSZW1vdmVBbGxTdWJsYXllcnMoKTsKKyAgICBDQUNGTGF5ZXJJbnNlcnRTdWJsYXllcihsYXll
cigpLCBwYXJlbnQuZ2V0KCksIDApOworfQorCit2b2lkIFdlYlRpbGVkTGF5ZXI6OmludGVybmFs
U2V0U3VibGF5ZXJzKGNvbnN0IFZlY3RvcjxSZWZQdHI8V0tDQUNGTGF5ZXI+ID4mIHN1YmxheWVy
cykKK3sKKyAgICAvLyBQcmVzZXJ2ZSB0aGUgdGlsZSBwYXJlbnQKKyAgICBSZXRhaW5QdHI8Q0FD
RkxheWVyUmVmPiBwYXJlbnQgPSB0aWxlUGFyZW50KCk7CisgICAgV2ViTGF5ZXI6OmludGVybmFs
U2V0U3VibGF5ZXJzKHN1YmxheWVycyk7CisgICAgQ0FDRkxheWVySW5zZXJ0U3VibGF5ZXIobGF5
ZXIoKSwgcGFyZW50LmdldCgpLCAwKTsKK30KKwordm9pZCBXZWJUaWxlZExheWVyOjppbnRlcm5h
bEluc2VydFN1YmxheWVyKFBhc3NSZWZQdHI8V0tDQUNGTGF5ZXI+IGxheWVyLCBzaXplX3QgaW5k
ZXgpCit7CisgICAgLy8gQWRkIDEgdG8gYWNjb3VudCBmb3IgdGhlIHRpbGUgcGFyZW50IGxheWVy
CisgICAgV2ViTGF5ZXI6OmludGVybmFsSW5zZXJ0U3VibGF5ZXIobGF5ZXIsIGluZGV4ICsgMSk7
Cit9CisKK1dLQ0FDRkxheWVyKiBXZWJUaWxlZExheWVyOjppbnRlcm5hbFN1YmxheWVyQXRJbmRl
eChpbnQgaSkgY29uc3QKK3sKKyAgICAvLyBBZGQgMSB0byBhY2NvdW50IGZvciB0aGUgdGlsZSBw
YXJlbnQgbGF5ZXIKKyAgICByZXR1cm4gV2ViTGF5ZXI6OmludGVybmFsU3VibGF5ZXJBdEluZGV4
KGkgKyAxKTsKK30KKworaW50IFdlYlRpbGVkTGF5ZXI6OmludGVybmFsSW5kZXhPZlN1YmxheWVy
KGNvbnN0IFdLQ0FDRkxheWVyKiBsYXllcikKK3sKKyAgICBpbnQgaSA9IFdlYkxheWVyOjppbnRl
cm5hbEluZGV4T2ZTdWJsYXllcihsYXllcik7CisKKyAgICAvLyBBZGQgMSB0byBhY2NvdW50IGZv
ciB0aGUgdGlsZSBwYXJlbnQgbGF5ZXIgKGJ1dCBiZSBzYWZlIGFib3V0IGl0KQorICAgIHJldHVy
biAoaSA+IDApID8gaSAtIDEgOiAtMTsKK30KKworQ0FDRkxheWVyUmVmIFdlYlRpbGVkTGF5ZXI6
OnRpbGVQYXJlbnQoKSBjb25zdAoreworICAgIENGQXJyYXlSZWYgc3VibGF5ZXJzID0gQ0FDRkxh
eWVyR2V0U3VibGF5ZXJzKGxheWVyKCkpOworICAgIEFTU0VSVChzdWJsYXllcnMgJiYgQ0ZBcnJh
eUdldENvdW50KHN1YmxheWVycykgPiAwKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0FDRkxh
eWVyUmVmPihjb25zdF9jYXN0PHZvaWQqPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHN1YmxheWVy
cywgMCkpKTsKK30KKwordm9pZCBXZWJUaWxlZExheWVyOjphZGRUaWxlKENBQ0ZMYXllclJlZiBs
YXllclRpbGVQYXJlbnQpCit7CisgICAgUmV0YWluUHRyPENBQ0ZMYXllclJlZj4gbmV3TGF5ZXIo
QWRvcHRDRiwgQ0FDRkxheWVyQ3JlYXRlKGtDQUNGTGF5ZXIpKTsKKyAgICBDQUNGTGF5ZXJTZXRB
bmNob3JQb2ludChuZXdMYXllci5nZXQoKSwgQ0dQb2ludE1ha2UoMCwgMSkpOworICAgIENBQ0ZM
YXllclNldFVzZXJEYXRhKG5ld0xheWVyLmdldCgpLCB0aGlzKTsKKyAgICBDQUNGTGF5ZXJTZXRE
aXNwbGF5Q2FsbGJhY2sobmV3TGF5ZXIuZ2V0KCksIHRpbGVEaXNwbGF5Q2FsbGJhY2spOworCisg
ICAgQ0ZBcnJheVJlZiBzdWJsYXllcnMgPSBDQUNGTGF5ZXJHZXRTdWJsYXllcnMobGF5ZXJUaWxl
UGFyZW50KTsKKyAgICBDQUNGTGF5ZXJJbnNlcnRTdWJsYXllcihsYXllclRpbGVQYXJlbnQsIG5l
d0xheWVyLmdldCgpLCBzdWJsYXllcnMgPyBDRkFycmF5R2V0Q291bnQoc3VibGF5ZXJzKSA6IDAp
OworCisgICAgaWYgKG1fb3duZXItPnNob3dEZWJ1Z0JvcmRlcnMoKSkgeworICAgICAgICBDR0Nv
bG9yUmVmIGJvcmRlckNvbG9yID0gY3JlYXRlQ0dDb2xvcihDb2xvcigxMjgsIDAsIDEyOCwgMTgw
KSk7CisgICAgICAgIENBQ0ZMYXllclNldEJvcmRlckNvbG9yKG5ld0xheWVyLmdldCgpLCBib3Jk
ZXJDb2xvcik7CisgICAgICAgIENHQ29sb3JSZWxlYXNlKGJvcmRlckNvbG9yKTsKKyAgICAgICAg
Q0FDRkxheWVyU2V0Qm9yZGVyV2lkdGgobmV3TGF5ZXIuZ2V0KCksIDIpOworICAgIH0KK30KKwor
dm9pZCBXZWJUaWxlZExheWVyOjpyZW1vdmVUaWxlKCkKK3sKKyAgICBDQUNGTGF5ZXJSZW1vdmVG
cm9tU3VwZXJsYXllcih0aWxlQXRJbmRleCh0aWxlQ291bnQoKSAtIDEpKTsKK30KKworQ0FDRkxh
eWVyUmVmIFdlYlRpbGVkTGF5ZXI6OnRpbGVBdEluZGV4KGludCBpbmRleCkKK3sKKyAgICBDRkFy
cmF5UmVmIHN1YmxheWVycyA9IENBQ0ZMYXllckdldFN1YmxheWVycyh0aWxlUGFyZW50KCkpOwor
ICAgIGlmICghc3VibGF5ZXJzIHx8IGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aWxlQ291bnQoKSAp
CisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxDQUNGTGF5
ZXJSZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoc3VibGF5ZXJz
LCBpbmRleCkpKTsKK30KKworaW50IFdlYlRpbGVkTGF5ZXI6OnRpbGVDb3VudCgpIGNvbnN0Cit7
CisgICAgQ0ZBcnJheVJlZiBzdWJsYXllcnMgPSBDQUNGTGF5ZXJHZXRTdWJsYXllcnModGlsZVBh
cmVudCgpKTsKKyAgICByZXR1cm4gc3VibGF5ZXJzID8gQ0ZBcnJheUdldENvdW50KHN1YmxheWVy
cykgOiAwOworfQorCit2b2lkIFdlYlRpbGVkTGF5ZXI6OnVwZGF0ZVRpbGVzKCkKK3sKKyAgICAv
LyBGSVhNRTogSW4gYWRkaXRpb24gdG8gcmVkb2luZyB0aGUgbnVtYmVyIG9mIHRpbGVzLCB3ZSBu
ZWVkIHRvIG9ubHkgcmVuZGVyIGFuZCBoYXZlIGJhY2tpbmcKKyAgICAvLyBzdG9yZSBmb3Igdmlz
aWJsZSBsYXllcnMKKyAgICBDR1JlY3QgbGF5ZXJCb3VuZHMgPSBib3VuZHMoKTsKKyAgICBpbnQg
bnVtVGlsZXNIb3Jpem9udGFsID0gY2VpbChsYXllckJvdW5kcy5zaXplLndpZHRoIC8gbV90aWxl
U2l6ZS53aWR0aCk7CisgICAgaW50IG51bVRpbGVzVmVydGljYWwgPSBjZWlsKGxheWVyQm91bmRz
LnNpemUuaGVpZ2h0IC8gbV90aWxlU2l6ZS5oZWlnaHQpOworICAgIGludCBudW1UaWxlc1RvdGFs
ID0gbnVtVGlsZXNIb3Jpem9udGFsICogbnVtVGlsZXNWZXJ0aWNhbDsKKyAgICBDQUNGTGF5ZXJS
ZWYgbGF5ZXJUaWxlUGFyZW50ID0gdGlsZVBhcmVudCgpOworCisgICAgaW50IG51bVRpbGVzVG9D
aGFuZ2UgPSBudW1UaWxlc1RvdGFsIC0gdGlsZUNvdW50KCk7CisgICAgaWYgKG51bVRpbGVzVG9D
aGFuZ2UgPj0gMCkgeworICAgICAgICAvLyBBZGQgbmV3IHRpbGVzCisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbnVtVGlsZXNUb0NoYW5nZTsgKytpKQorICAgICAgICAgICAgYWRkVGlsZShs
YXllclRpbGVQYXJlbnQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFJlbW92ZSBvbGQgdGls
ZXMKKyAgICAgICAgbnVtVGlsZXNUb0NoYW5nZSA9IC1udW1UaWxlc1RvQ2hhbmdlOworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bVRpbGVzVG9DaGFuZ2U7ICsraSkKKyAgICAgICAgICAg
IHJlbW92ZVRpbGUoKTsKKyAgICB9CisKKyAgICAvLyBTZXQgY29vcmRpbmF0ZXMgZm9yIGFsbCB0
aWxlcworICAgIENGQXJyYXlSZWYgdGlsZUFycmF5ID0gQ0FDRkxheWVyR2V0U3VibGF5ZXJzKGxh
eWVyVGlsZVBhcmVudCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVRpbGVzSG9yaXpv
bnRhbDsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtVGlsZXNWZXJ0aWNh
bDsgKytqKSB7CisgICAgICAgICAgICBDQUNGTGF5ZXJSZWYgdGlsZSA9IHN0YXRpY19jYXN0PENB
Q0ZMYXllclJlZj4oY29uc3RfY2FzdDx2b2lkKj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleCh0aWxl
QXJyYXksIGkgKiBudW1UaWxlc1ZlcnRpY2FsICsgaikpKTsKKyAgICAgICAgICAgIENBQ0ZMYXll
clNldFBvc2l0aW9uKHRpbGUsIENHUG9pbnRNYWtlKGkgKiBtX3RpbGVTaXplLndpZHRoLCBqICog
bV90aWxlU2l6ZS5oZWlnaHQpKTsKKyAgICAgICAgICAgIGludCB3aWR0aCA9IG1pbihtX3RpbGVT
aXplLndpZHRoLCBsYXllckJvdW5kcy5zaXplLndpZHRoIC0gaSAqIG1fdGlsZVNpemUud2lkdGgp
OworICAgICAgICAgICAgaW50IGhlaWdodCA9IG1pbihtX3RpbGVTaXplLmhlaWdodCwgbGF5ZXJC
b3VuZHMuc2l6ZS5oZWlnaHQgLSBqICogbV90aWxlU2l6ZS5oZWlnaHQpOworICAgICAgICAgICAg
Q0FDRkxheWVyU2V0Qm91bmRzKHRpbGUsIENHUmVjdE1ha2UoaSAqIG1fdGlsZVNpemUud2lkdGgs
IGogKiBtX3RpbGVTaXplLmhlaWdodCwgd2lkdGgsIGhlaWdodCkpOworCisgICAgICAgICAgICAv
LyBGbGlwIFkgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIGZsaXBwaW5nIHRoYXQgaGFwcGVucyBkdXJp
bmcgcmVuZGVyIHRvIG1hdGNoIHRoZSBDRyBjb250ZXh0IGNvb3JkaW5hdGUgc3BhY2UKKyAgICAg
ICAgICAgIENBVHJhbnNmb3JtM0QgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRE1ha2VTY2FsZSgx
LCAtMSwgMSk7CisgICAgICAgICAgICBDQVRyYW5zZm9ybTNEVHJhbnNsYXRlKHRyYW5zZm9ybSwg
MCwgaGVpZ2h0LCAwKTsKKyAgICAgICAgICAgIENBQ0ZMYXllclNldFRyYW5zZm9ybSh0aWxlLCB0
cmFuc2Zvcm0pOworCisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSAi
VGlsZSAoIiArIFN0cmluZzo6bnVtYmVyKGkpICsgIiwiICsgU3RyaW5nOjpudW1iZXIoaikgKyAi
KSI7CisgICAgICAgICAgICBDQUNGTGF5ZXJTZXROYW1lKHRpbGUsIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4oQWRvcHRDRiwgbmFtZS5jcmVhdGVDRlN0cmluZygpKS5nZXQoKSk7CisjZW5kaWYKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBXZWJUaWxlZExheWVyOjpkcmF3VGlsZShDQUNGTGF5
ZXJSZWYgdGlsZSwgQ0dDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgQ0dQb2ludCB0aWxlUG9z
aXRpb24gPSBDQUNGTGF5ZXJHZXRQb3NpdGlvbih0aWxlKTsKKyAgICBDR1JlY3QgdGlsZUJvdW5k
cyA9IENBQ0ZMYXllckdldEJvdW5kcyh0aWxlKTsKKworICAgIENHQ29udGV4dFNhdmVHU3RhdGUo
Y29udGV4dCk7CisKKyAgICAvLyBUcmFuc2Zvcm0gY29udGV4dCB0byBiZSBhdCB0aGUgb3JpZ2lu
IG9mIHRoZSBwYXJlbnQgbGF5ZXIKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwg
LXRpbGVQb3NpdGlvbi54LCAtdGlsZVBvc2l0aW9uLnkpOworCisgICAgLy8gU2V0IHRoZSBjb250
ZXh0IGNsaXBwaW5nIHJlY3RhbmdsZSB0byB0aGUgY3VycmVudCB0aWxlCisgICAgQ0dDb250ZXh0
Q2xpcFRvUmVjdChjb250ZXh0LCBDR1JlY3RNYWtlKHRpbGVQb3NpdGlvbi54LCB0aWxlUG9zaXRp
b24ueSwgdGlsZUJvdW5kcy5zaXplLndpZHRoLCB0aWxlQm91bmRzLnNpemUuaGVpZ2h0KSk7CisK
KyAgICBpZiAobV9vd25lci0+Y29udGVudHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duKSB7CisgICAgICAgIC8vIElm
IHRoZSBsYXllciBpcyByZW5kZXJpbmcgdG9wLWRvd24sIGl0IHdpbGwgZmxpcCB0aGUgY29vcmRp
bmF0ZXMgaW4geS4gVGlsZWQgbGF5ZXJzIGFyZQorICAgICAgICAvLyBhbHJlYWR5IGZsaXBwaW5n
LCBzbyB3ZSBuZWVkIHRvIHVuZG8gdGhhdCBoZXJlLgorICAgICAgICBDR0NvbnRleHRUcmFuc2xh
dGVDVE0oY29udGV4dCwgMCwgYm91bmRzKCkuc2l6ZS5oZWlnaHQpOworICAgICAgICBDR0NvbnRl
eHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7CisgICAgfQorCisgICAgLy8gRHJhdyB0aGUgdGls
ZQorICAgIGRyYXdJbkNvbnRleHQoY29udGV4dCk7CisKKyAgICBDR0NvbnRleHRSZXN0b3JlR1N0
YXRlKGNvbnRleHQpOworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9XZWJUaWxlZExheWVyLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICAr
ICoKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyQ0FD
Ri5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NMYXllckNBQ0YuY3BwCShyZXZpc2lvbiA1OTYyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJDQUNGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyAr
MzYsOCBAQAogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCi0jaW5jbHVkZSAiV0tDQUNGTGF5ZXIuaCIKKyNpbmNs
dWRlICJXZWJMYXllci5oIgorI2luY2x1ZGUgIldlYlRpbGVkTGF5ZXIuaCIKICNpbmNsdWRlIDx3
dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtNDUsMTE2ICs0NiwxNiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFdlYkxheWVyIDogcHVibGljIFdLQ0FDRkxheWVyIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXS0NBQ0ZMYXllcj4gY3JlYXRlKExheWVyVHlwZSBs
YXllclR5cGUsIEdyYXBoaWNzTGF5ZXJDQUNGKiBvd25lcikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgV2ViTGF5ZXIobGF5ZXJUeXBlLCBvd25lcikpOwotICAgIH0KKy8vIFRo
ZSB0aHJlc2hvbGQgd2lkdGggb3IgaGVpZ2h0IGFib3ZlIHdoaWNoIGEgdGlsZWQgbGF5ZXIgd2ls
bCBiZSB1c2VkLiBUaGlzIHNob3VsZCBiZQorLy8gbGFyZ2UgZW5vdWdoIHRvIGF2b2lkIHRpbGVk
IGxheWVycyBmb3IgbW9zdCBHcmFwaGljc0xheWVycywgYnV0IGxlc3MgdGhhbiB0aGUgRDNECisv
LyB0ZXh0dXJlIHNpemUgbGltaXQgb24gYWxsIHN1cHBvcnRlZCBoYXJkd2FyZS4KK3N0YXRpYyBj
b25zdCBpbnQgY01heFBpeGVsRGltZW5zaW9uID0gMjAwMDsKIAotICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc0Rpc3BsYXkoY29uc3QgQ0dSZWN0KiBkaXJ0eVJlY3QpCi0gICAgewotICAgICAgICBp
ZiAobV9vd25lcikgewotICAgICAgICAgICAgaWYgKG1fb3duZXItPnNob3dSZXBhaW50Q291bnRl
cigpKSB7Ci0gICAgICAgICAgICAgICAgQ0dSZWN0IGxheWVyQm91bmRzID0gYm91bmRzKCk7Ci0g
ICAgICAgICAgICAgICAgQ0dSZWN0IHJlcGFpbnRDb3VudGVyUmVjdCA9IGxheWVyQm91bmRzOwot
ICAgICAgICAgICAgICAgIC8vIFdlIGFzc3VtZSBhIG1heGltdW0gb2YgNCBkaWdpdHMgYW5kIGEg
Zm9udCBzaXplIG9mIDIyLgotICAgICAgICAgICAgICAgIHJlcGFpbnRDb3VudGVyUmVjdC5zaXpl
LndpZHRoID0gNDg7Ci0gICAgICAgICAgICAgICAgcmVwYWludENvdW50ZXJSZWN0LnNpemUuaGVp
Z2h0ID0gMjU7Ci0gICAgICAgICAgICAgICAgaWYgKG1fb3duZXItPmNvbnRlbnRzT3JpZW50YXRp
b24oKSA9PSBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzVG9w
RG93bikKLSAgICAgICAgICAgICAgICAgICAgcmVwYWludENvdW50ZXJSZWN0Lm9yaWdpbi55ID0g
bGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQgLSAobGF5ZXJCb3VuZHMub3JpZ2luLnkgKyByZXBhaW50
Q291bnRlclJlY3Quc2l6ZS5oZWlnaHQpOwotICAgICAgICAgICAgICAgIFdLQ0FDRkxheWVyOjpz
ZXROZWVkc0Rpc3BsYXkoJnJlcGFpbnRDb3VudGVyUmVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoZGlydHlSZWN0ICYmIG1fb3duZXItPmNvbnRlbnRzT3JpZW50YXRpb24oKSA9
PSBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzVG9wRG93bikg
ewotICAgICAgICAgICAgICAgIENHUmVjdCBmbGlwcGVkRGlydHlSZWN0ID0gKmRpcnR5UmVjdDsK
LSAgICAgICAgICAgICAgICBmbGlwcGVkRGlydHlSZWN0Lm9yaWdpbi55ID0gYm91bmRzKCkuc2l6
ZS5oZWlnaHQgLSAoZmxpcHBlZERpcnR5UmVjdC5vcmlnaW4ueSArIGZsaXBwZWREaXJ0eVJlY3Qu
c2l6ZS5oZWlnaHQpOwotICAgICAgICAgICAgICAgIFdLQ0FDRkxheWVyOjpzZXROZWVkc0Rpc3Bs
YXkoJmZsaXBwZWREaXJ0eVJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBXS0NBQ0ZMYXllcjo6c2V0TmVlZHNEaXNwbGF5KGRp
cnR5UmVjdCk7Ci0gICAgfQorLy8gVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgYSBzaW5nbGUgdGls
ZSBpbiBhIHRpbGVkIGxheWVyLiBTaG91bGQgYmUgbGFyZ2UgZW5vdWdoIHRvCisvLyBhdm9pZCBs
b3RzIG9mIHNtYWxsIHRpbGVzIChhbmQgdGhlcmVmb3JlIGxvdHMgb2YgZHJhd2luZyBjYWxsYmFj
a3MpLCBidXQgc21hbGwgZW5vdWdoCisvLyB0byBrZWVwIHRoZSBvdmVyYWxsIHRpbGUgY29zdCBs
b3cuCitzdGF0aWMgY29uc3QgaW50IGNUaWxlZExheWVyVGlsZVNpemUgPSA1MTI7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd0luQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4
dCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9vd25lcikKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwotCi0gICAgICAgIENHUmVjdCBs
YXllckJvdW5kcyA9IGJvdW5kcygpOwotICAgICAgICBpZiAobV9vd25lci0+Y29udGVudHNPcmll
bnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0
ZXNUb3BEb3duKSB7Ci0gICAgICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAt
MSk7Ci0gICAgICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLWxheWVy
Qm91bmRzLnNpemUuaGVpZ2h0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX293bmVyLT5j
bGllbnQoKSkgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChj
b250ZXh0KTsKLQotICAgICAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBjbGlw
IGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5IGJlIHNpZ25pZmljYW50bHkKLSAgICAg
ICAgICAgIC8vIHNtYWxsZXIgdGhhbiB0aGUgbGF5ZXIgYm91bmRzIChlLmcuIHRpbGVkIGxheWVy
cykKLSAgICAgICAgICAgIENHUmVjdCBjbGlwQm91bmRzID0gQ0dDb250ZXh0R2V0Q2xpcEJvdW5k
aW5nQm94KGNvbnRleHQpOwotICAgICAgICAgICAgSW50UmVjdCBjbGlwKGVuY2xvc2luZ0ludFJl
Y3QoY2xpcEJvdW5kcykpOwotICAgICAgICAgICAgbV9vd25lci0+cGFpbnRHcmFwaGljc0xheWVy
Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBjbGlwKTsKLSAgICAgICAgfQotI2lmbmRlZiBOREVC
VUcKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQot
ICAgICAgICAgICAgLy8gRklYTUU6IGlkZWFsbHkgd2UnZCBhdm9pZCBjYWxsaW5nIC1zZXROZWVk
c0Rpc3BsYXkgb24gYSBsYXllciB0aGF0IGlzIGEgcGxhaW4gY29sb3IsCi0gICAgICAgICAgICAv
LyBzbyBDQSBuZXZlciBtYWtlcyBiYWNraW5nIHN0b3JlIGZvciBpdCAod2hpY2ggaXMgd2hhdCAt
c2V0TmVlZHNEaXNwbGF5IHdpbGwgZG8gYWJvdmUpLgotICAgICAgICAgICAgQ0dDb250ZXh0U2V0
UkdCRmlsbENvbG9yKGNvbnRleHQsIDAuMGYsIDEuMGYsIDAuMGYsIDEuMGYpOwotICAgICAgICAg
ICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgbGF5ZXJCb3VuZHMpOwotICAgICAgICB9Ci0j
ZW5kaWYKLQotICAgICAgICBpZiAobV9vd25lci0+c2hvd1JlcGFpbnRDb3VudGVyKCkpIHsKLSAg
ICAgICAgICAgIFN0cmluZyB0ZXh0ID0gU3RyaW5nOjpmb3JtYXQoIiVkIiwgbV9vd25lci0+aW5j
cmVtZW50UmVwYWludENvdW50KCkpOzsKLQotICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0
ZShjb250ZXh0KTsKLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0
LCAxLjBmLCAwLjBmLCAwLjBmLCAwLjhmKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ0dS
ZWN0IGFCb3VuZHMgPSBsYXllckJvdW5kczsKLQotICAgICAgICAgICAgYUJvdW5kcy5zaXplLndp
ZHRoID0gMTAgKyAxMiAqIHRleHQubGVuZ3RoKCk7Ci0gICAgICAgICAgICBhQm91bmRzLnNpemUu
aGVpZ2h0ID0gMjU7Ci0gICAgICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBhQm91
bmRzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGRlc2M7Ci0K
LSAgICAgICAgICAgIE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsKLSAgICAgICAgICAgIG1ldHJp
Y3MuY2JTaXplID0gc2l6ZW9mKG1ldHJpY3MpOwotICAgICAgICAgICAgU3lzdGVtUGFyYW1ldGVy
c0luZm8oU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1MsIG1ldHJpY3MuY2JTaXplLCAmbWV0cmljcywg
MCk7Ci0gICAgICAgICAgICBGb250RmFtaWx5IGZhbWlseTsKLSAgICAgICAgICAgIGZhbWlseS5z
ZXRGYW1pbHkobWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQubGZGYWNlTmFtZSk7Ci0gICAgICAgICAg
ICBkZXNjLnNldEZhbWlseShmYW1pbHkpOwotCi0gICAgICAgICAgICBkZXNjLnNldENvbXB1dGVk
U2l6ZSgyMik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEZvbnQgZm9udCA9IEZvbnQoZGVz
YywgMCwgMCk7Ci0gICAgICAgICAgICBmb250LnVwZGF0ZSgwKTsKLQotICAgICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0IGNnKGNvbnRleHQpOwotICAgICAgICAgICAgY2cuc2V0RmlsbENvbG9yKENv
bG9yOjpibGFjaywgRGV2aWNlQ29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBjZy5kcmF3VGV4dChm
b250LCBUZXh0UnVuKHRleHQpLCBJbnRQb2ludChhQm91bmRzLm9yaWdpbi54ICsgMywgYUJvdW5k
cy5vcmlnaW4ueSArIDIwKSk7Ci0KLSAgICAgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUo
Y29udGV4dCk7ICAgICAgICAKLSAgICAgICAgfQotCi0gICAgICAgIENHQ29udGV4dFJlc3RvcmVH
U3RhdGUoY29udGV4dCk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgV2ViTGF5ZXIoTGF5ZXJU
eXBlIGxheWVyVHlwZSwgR3JhcGhpY3NMYXllckNBQ0YqIG93bmVyKQotICAgICA6IFdLQ0FDRkxh
eWVyKGxheWVyVHlwZSkKLSAgICAgLCBtX293bmVyKG93bmVyKQotICAgIHsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgR3JhcGhpY3NMYXllciogbV9vd25lcjsKLX07Ci0KIHN0YXRpYyBpbmxpbmUg
dm9pZCBjb3B5VHJhbnNmb3JtKENBVHJhbnNmb3JtM0QmIHRvVDNELCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdCkKIHsKICAgICB0b1QzRC5tMTEgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KHQubTExKCkpOwpAQCAtNTM3LDYgKzQzOCw2NCBAQAogICAgIH0KIH0KIAorYm9vbCBHcmFwaGlj
c0xheWVyQ0FDRjo6cmVxdWlyZXNUaWxlZExheWVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29u
c3QKK3sKKyAgICBpZiAoIW1fZHJhd3NDb250ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAvLyBGSVhNRTogY2F0Y2ggemVyby1zaXplIGhlaWdodCBvciB3aWR0aCBoZXJlIChvciBl
YXJsaWVyKT8KKyAgICByZXR1cm4gc2l6ZS53aWR0aCgpID4gY01heFBpeGVsRGltZW5zaW9uIHx8
IHNpemUuaGVpZ2h0KCkgPiBjTWF4UGl4ZWxEaW1lbnNpb247Cit9CisKK3ZvaWQgR3JhcGhpY3NM
YXllckNBQ0Y6OnN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIoYm9vbCB1c2VUaWxlZExheWVyKQorewor
ICAgIGlmICh1c2VUaWxlZExheWVyID09IG1fdXNpbmdUaWxlZExheWVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBDR1NpemUgdGlsZVNpemUgPSBDR1NpemVNYWtlKGNUaWxlZExheWVyVGlsZVNp
emUsIGNUaWxlZExheWVyVGlsZVNpemUpOworCisgICAgUmVmUHRyPFdLQ0FDRkxheWVyPiBvbGRM
YXllciA9IG1fbGF5ZXI7CisgICAgaWYgKHVzZVRpbGVkTGF5ZXIpCisgICAgICAgIG1fbGF5ZXIg
PSBXZWJUaWxlZExheWVyOjpjcmVhdGUodGlsZVNpemUsIHRoaXMpOworICAgIGVsc2UKKyAgICAg
ICAgbV9sYXllciA9IFdlYkxheWVyOjpjcmVhdGUoV0tDQUNGTGF5ZXI6OkxheWVyLCB0aGlzKTsK
KyAgICAKKyAgICBtX3VzaW5nVGlsZWRMYXllciA9IHVzZVRpbGVkTGF5ZXI7CisKKyAgICBpZiAo
dXNlVGlsZWRMYXllcikgeworICAgICAgICBpZiAoR3JhcGhpY3NMYXllcjo6Y29tcG9zaXRpbmdD
b29yZGluYXRlc09yaWVudGF0aW9uKCkgPT0gR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29y
ZGluYXRlc0JvdHRvbVVwKQorICAgICAgICAgICAgbV9sYXllci0+c2V0Q29udGVudHNHcmF2aXR5
KFdLQ0FDRkxheWVyOjpCb3R0b21MZWZ0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9s
YXllci0+c2V0Q29udGVudHNHcmF2aXR5KFdLQ0FDRkxheWVyOjpUb3BMZWZ0KTsKKyAgICB9Cisg
ICAgCisgICAgbV9sYXllci0+YWRvcHRTdWJsYXllcnMob2xkTGF5ZXIuZ2V0KCkpOworICAgIGlm
IChvbGRMYXllci0+c3VwZXJsYXllcigpKQorICAgICAgICBvbGRMYXllci0+c3VwZXJsYXllcigp
LT5yZXBsYWNlU3VibGF5ZXIob2xkTGF5ZXIuZ2V0KCksIG1fbGF5ZXIuZ2V0KCkpOworICAgIAor
ICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKKyAgICB1cGRhdGVMYXllclNpemUoKTsKKyAgICB1
cGRhdGVBbmNob3JQb2ludCgpOworICAgIHVwZGF0ZVRyYW5zZm9ybSgpOworICAgIHVwZGF0ZUNo
aWxkcmVuVHJhbnNmb3JtKCk7CisgICAgdXBkYXRlTWFza3NUb0JvdW5kcygpOworICAgIHVwZGF0
ZUNvbnRlbnRzT3BhcXVlKCk7CisgICAgdXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCk7CisgICAg
dXBkYXRlTGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICAKKyAgICB1cGRhdGVPcGFjaXR5T25M
YXllcigpOworICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICBTdHJpbmcgbmFtZSA9IFN0cmluZzo6
Zm9ybWF0KCJDQUxheWVyKCVwKSBHcmFwaGljc0xheWVyKCVwKSAlcyIsIG1fbGF5ZXIuZ2V0KCks
IHRoaXMsIG1fdXNpbmdUaWxlZExheWVyID8gIltUaWxlZCBMYXllcl0gIiA6ICIiKSArIG1fbmFt
ZTsKKyAgICBtX2xheWVyLT5zZXROYW1lKG5hbWUpOworI2VuZGlmCisKKyAgICAvLyBuZWVkIHRv
IHRlbGwgbmV3IGxheWVyIHRvIGRyYXcgaXRzZWxmCisgICAgc2V0TmVlZHNEaXNwbGF5KCk7Cisg
ICAgCisgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7Cit9CisKIEdyYXBoaWNzTGF5ZXI6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBHcmFwaGljc0xheWVyQ0FDRjo6ZGVmYXVs
dENvbnRlbnRzT3JpZW50YXRpb24oKSBjb25zdAogewogICAgIHJldHVybiBDb21wb3NpdGluZ0Nv
b3JkaW5hdGVzVG9wRG93bjsKQEAgLTYwMCw2ICs1NTksMTAgQEAKICAgICAgICAgbV9sYXllci0+
c2V0UG9zaXRpb24oY2VudGVyUG9pbnQpOwogICAgIH0KICAgICAKKyAgICBib29sIG5lZWRUaWxl
ZExheWVyID0gcmVxdWlyZXNUaWxlZExheWVyKG1fc2l6ZSk7CisgICAgaWYgKG5lZWRUaWxlZExh
eWVyICE9IG1fdXNpbmdUaWxlZExheWVyKQorICAgICAgICBzd2FwRnJvbU9yVG9UaWxlZExheWVy
KG5lZWRUaWxlZExheWVyKTsKKyAgICAKICAgICBtX2xheWVyLT5zZXRCb3VuZHMocmVjdCk7CiAg
ICAgCiAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IHJlc2l6ZSBtX2NvbnRlbnRzTGF5ZXIuIEl0
J3MgdXAgdGhlIGNhbGxlciB0byBkbyB0aGF0LgpAQCAtNjk5LDYgKzY2MiwxMCBAQAogCiB2b2lk
IEdyYXBoaWNzTGF5ZXJDQUNGOjp1cGRhdGVMYXllckRyYXdzQ29udGVudCgpCiB7CisgICAgYm9v
bCBuZWVkVGlsZWRMYXllciA9IHJlcXVpcmVzVGlsZWRMYXllcihtX3NpemUpOworICAgIGlmIChu
ZWVkVGlsZWRMYXllciAhPSBtX3VzaW5nVGlsZWRMYXllcikKKyAgICAgICAgc3dhcEZyb21PclRv
VGlsZWRMYXllcihuZWVkVGlsZWRMYXllcik7CisKICAgICBpZiAobV9kcmF3c0NvbnRlbnQpCiAg
ICAgICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogICAgIGVsc2UKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dlYkxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XZWJMYXllci5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XZWJMYXllci5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJXZWJMYXllci5oIgorCisjaW5jbHVkZSAiRm9u
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCit2b2lkIFdlYkxheWVyOjppbnRlcm5hbFNldE5lZWRz
RGlzcGxheShjb25zdCBDR1JlY3QqIGRpcnR5UmVjdCkKK3sKKyAgICBpZiAobV9vd25lcikgewor
ICAgICAgICBpZiAobV9vd25lci0+c2hvd1JlcGFpbnRDb3VudGVyKCkpIHsKKyAgICAgICAgICAg
IENHUmVjdCBsYXllckJvdW5kcyA9IGJvdW5kcygpOworICAgICAgICAgICAgQ0dSZWN0IHJlcGFp
bnRDb3VudGVyUmVjdCA9IGxheWVyQm91bmRzOworICAgICAgICAgICAgLy8gV2UgYXNzdW1lIGEg
bWF4aW11bSBvZiA0IGRpZ2l0cyBhbmQgYSBmb250IHNpemUgb2YgMTguCisgICAgICAgICAgICBy
ZXBhaW50Q291bnRlclJlY3Quc2l6ZS53aWR0aCA9IDgwOworICAgICAgICAgICAgcmVwYWludENv
dW50ZXJSZWN0LnNpemUuaGVpZ2h0ID0gMjI7CisgICAgICAgICAgICBpZiAobV9vd25lci0+Y29u
dGVudHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0ZXNUb3BEb3duKQorICAgICAgICAgICAgICAgIHJlcGFpbnRDb3VudGVyUmVjdC5v
cmlnaW4ueSA9IGxheWVyQm91bmRzLnNpemUuaGVpZ2h0IC0gKGxheWVyQm91bmRzLm9yaWdpbi55
ICsgcmVwYWludENvdW50ZXJSZWN0LnNpemUuaGVpZ2h0KTsKKyAgICAgICAgICAgIFdLQ0FDRkxh
eWVyOjppbnRlcm5hbFNldE5lZWRzRGlzcGxheSgmcmVwYWludENvdW50ZXJSZWN0KTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoZGlydHlSZWN0ICYmIG1fb3duZXItPmNvbnRlbnRzT3JpZW50YXRp
b24oKSA9PSBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzVG9w
RG93bikgeworICAgICAgICAgICAgQ0dSZWN0IGZsaXBwZWREaXJ0eVJlY3QgPSAqZGlydHlSZWN0
OworICAgICAgICAgICAgZmxpcHBlZERpcnR5UmVjdC5vcmlnaW4ueSA9IGJvdW5kcygpLnNpemUu
aGVpZ2h0IC0gKGZsaXBwZWREaXJ0eVJlY3Qub3JpZ2luLnkgKyBmbGlwcGVkRGlydHlSZWN0LnNp
emUuaGVpZ2h0KTsKKyAgICAgICAgICAgIFdLQ0FDRkxheWVyOjppbnRlcm5hbFNldE5lZWRzRGlz
cGxheSgmZmxpcHBlZERpcnR5UmVjdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBXS0NBQ0ZMYXllcjo6aW50ZXJuYWxTZXROZWVkc0Rpc3BsYXkoZGlydHlS
ZWN0KTsKK30KKwordm9pZCBXZWJMYXllcjo6ZHJhd0luQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCogY29udGV4dCkKK3sKKyAgICBpZiAoIW1fb3duZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisKKyAgICBDR1JlY3QgbGF5ZXJC
b3VuZHMgPSBib3VuZHMoKTsKKyAgICBpZiAobV9vd25lci0+Y29udGVudHNPcmllbnRhdGlvbigp
ID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3du
KSB7CisgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKKyAgICAgICAg
Q0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1sYXllckJvdW5kcy5zaXplLmhlaWdo
dCk7CisgICAgfQorCisgICAgaWYgKG1fb3duZXItPmNsaWVudCgpKSB7CisgICAgICAgIEdyYXBo
aWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisKKyAgICAgICAgLy8gSXQncyBp
bXBvcnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5
IGJlIHNpZ25pZmljYW50bHkKKyAgICAgICAgLy8gc21hbGxlciB0aGFuIHRoZSBsYXllciBib3Vu
ZHMgKGUuZy4gdGlsZWQgbGF5ZXJzKQorICAgICAgICBDR1JlY3QgY2xpcEJvdW5kcyA9IENHQ29u
dGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KTsKKyAgICAgICAgSW50UmVjdCBjbGlwKGVu
Y2xvc2luZ0ludFJlY3QoY2xpcEJvdW5kcykpOworICAgICAgICBtX293bmVyLT5wYWludEdyYXBo
aWNzTGF5ZXJDb250ZW50cyhncmFwaGljc0NvbnRleHQsIGNsaXApOworICAgIH0KKyNpZm5kZWYg
TkRFQlVHCisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAg
ICAgIC8vIEZJWE1FOiBpZGVhbGx5IHdlJ2QgYXZvaWQgY2FsbGluZyAtc2V0TmVlZHNEaXNwbGF5
IG9uIGEgbGF5ZXIgdGhhdCBpcyBhIHBsYWluIGNvbG9yLAorICAgICAgICAvLyBzbyBDQSBuZXZl
ciBtYWtlcyBiYWNraW5nIHN0b3JlIGZvciBpdCAod2hpY2ggaXMgd2hhdCAtc2V0TmVlZHNEaXNw
bGF5IHdpbGwgZG8gYWJvdmUpLgorICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29u
dGV4dCwgMC4wZiwgMS4wZiwgMC4wZiwgMS4wZik7CisgICAgICAgIENHQ29udGV4dEZpbGxSZWN0
KGNvbnRleHQsIGxheWVyQm91bmRzKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChtX293bmVy
LT5zaG93UmVwYWludENvdW50ZXIoKSkgeworICAgICAgICBTdHJpbmcgdGV4dCA9IFN0cmluZzo6
Zm9ybWF0KCIlZCIsIG1fb3duZXItPmluY3JlbWVudFJlcGFpbnRDb3VudCgpKTs7CisKKyAgICAg
ICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKKworICAgICAgICAvLyBNYWtlIHRoZSBi
YWNrZ3JvdW5kIG9mIHRoZSBjb3VudGVyIHRoZSBzYW1lIGFzIHRoZSBib3JkZXIgY29sb3IsCisg
ICAgICAgIC8vIHVubGVzcyB0aGVyZSBpcyBubyBib3JkZXIsIHRoZW4gbWFrZSBpdCByZWQKKyAg
ICAgICAgZmxvYXQgYm9yZGVyV2lkdGggPSBDQUNGTGF5ZXJHZXRCb3JkZXJXaWR0aChsYXllcigp
KTsKKyAgICAgICAgaWYgKGJvcmRlcldpZHRoID4gMCkgeworICAgICAgICAgICAgQ0dDb2xvclJl
ZiBib3JkZXJDb2xvciA9IENBQ0ZMYXllckdldEJvcmRlckNvbG9yKGxheWVyKCkpOworICAgICAg
ICAgICAgY29uc3QgQ0dGbG9hdCogY29sb3JzID0gQ0dDb2xvckdldENvbXBvbmVudHMoYm9yZGVy
Q29sb3IpOworICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIGNv
bG9yc1swXSwgY29sb3JzWzFdLCBjb2xvcnNbMl0sIGNvbG9yc1szXSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEuMGYsIDAu
MGYsIDAuMGYsIDAuOGYpOworICAgICAgICAKKyAgICAgICAgQ0dSZWN0IGFCb3VuZHMgPSBsYXll
ckJvdW5kczsKKworICAgICAgICBhQm91bmRzLnNpemUud2lkdGggPSAxMCArIDEwICogdGV4dC5s
ZW5ndGgoKTsKKyAgICAgICAgYUJvdW5kcy5zaXplLmhlaWdodCA9IDIyOworICAgICAgICBDR0Nv
bnRleHRGaWxsUmVjdChjb250ZXh0LCBhQm91bmRzKTsKKyAgICAgICAgCisgICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBkZXNjOworCisgICAgICAgIE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsKKyAg
ICAgICAgbWV0cmljcy5jYlNpemUgPSBzaXplb2YobWV0cmljcyk7CisgICAgICAgIFN5c3RlbVBh
cmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBtZXRyaWNzLmNiU2l6ZSwgJm1l
dHJpY3MsIDApOworICAgICAgICBGb250RmFtaWx5IGZhbWlseTsKKyAgICAgICAgZmFtaWx5LnNl
dEZhbWlseShtZXRyaWNzLmxmU21DYXB0aW9uRm9udC5sZkZhY2VOYW1lKTsKKyAgICAgICAgZGVz
Yy5zZXRGYW1pbHkoZmFtaWx5KTsKKworICAgICAgICBkZXNjLnNldENvbXB1dGVkU2l6ZSgxOCk7
CisgICAgICAgIAorICAgICAgICBGb250IGZvbnQgPSBGb250KGRlc2MsIDAsIDApOworICAgICAg
ICBmb250LnVwZGF0ZSgwKTsKKworICAgICAgICBHcmFwaGljc0NvbnRleHQgY2coY29udGV4dCk7
CisgICAgICAgIGNnLnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIERldmljZUNvbG9yU3BhY2Up
OworICAgICAgICBjZy5kcmF3VGV4dChmb250LCBUZXh0UnVuKHRleHQpLCBJbnRQb2ludChhQm91
bmRzLm9yaWdpbi54ICsgNSwgYUJvdW5kcy5vcmlnaW4ueSArIDE3KSk7CisKKyAgICAgICAgQ0dD
b250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsgICAgICAgIAorICAgIH0KKworICAgIENHQ29u
dGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Cit9CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1dlYkxheWVyLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0
YWJsZQogICArICoKCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vY29tcG9zaXRpbmcv
aHVnZS1sYXllci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACitUaGUgeWVsbG93IGJveCBzaG91
bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIHNjcm9sbCBvZmYgdGhlIGJvdHRvbS4gVGhlcmUgc2hvdWxk
IGJlIGEgcmVkIGJveCBvbiB0aGUgZmlyc3QgcGFnZSBhbmQgYSBibHVlIGJveCBuZWFyIHRoZSBi
b3R0b20gb2YgdGhlIHllbGxvdyBib3guIFRoaXMgdGVzdHMgdGhhdCB3ZSBjYW4gc3VwcG9ydCB2
ZXJ5IGxhcmdlIGNvbXBvc2l0aW5nIGxheWVycy4KKworKEdyYXBoaWNzTGF5ZXIKKyAgKHBvc2l0
aW9uIDAuMDAgMC4wMCkKKyAgKGFuY2hvciAwLjUwIDAuNTApCisgIChib3VuZHMgNzg1LjAwIDUx
MTEuMDApCisgIChvcGFjaXR5IDEuMDApCisgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgKHByZXNl
cnZlczNEIDApCisgIChkcmF3c0NvbnRlbnQgMCkKKyAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNp
YmxlKQorICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisg
IChjaGlsZHJlbiAxCisgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgIChwb3NpdGlvbiAwLjAwIDAu
MDApCisgICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAgIChib3VuZHMgNzg1LjAwIDUxMTEu
MDApCisgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAg
ICAgKHByZXNlcnZlczNEIDApCisgICAgICAoZHJhd3NDb250ZW50IDApCisgICAgICAoYmFja2Zh
Y2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAg
ICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5
KQorICAgICAgKGNoaWxkcmVuIDEKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAo
cG9zaXRpb24gOC4wMCA2OC4wMCkKKyAgICAgICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAg
ICAgICAoYm91bmRzIDUwMi4wMCA1MDAyLjAwKQorICAgICAgICAgIChvcGFjaXR5IDEuMDApCisg
ICAgICAgICAgKHVzaW5nVGlsZWRMYXllciAxKQorICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQor
ICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5
IHZpc2libGUpCisgICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAgICh0
cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5
KQorICAgICAgICApCisgICAgICApCisgICAgKQorICApCispCisKSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9odWdlLWxheWVyLWFkZC1yZW1vdmUtY2hpbGQtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9jb21wb3Np
dGluZy9odWdlLWxheWVyLWFkZC1yZW1vdmUtY2hpbGQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItYWRk
LXJlbW92ZS1jaGlsZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM2IEBA
CitUaGUgeWVsbG93IGJveCBzaG91bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIHNjcm9sbCBvZmYgdGhl
IGJvdHRvbS4gQXQgdGhlIHN0YXJ0IHRoZXJlIHNob3VsZCBiZSBubyBjaGlsZC4gQWZ0ZXIgMTAw
bXMgYSByZWQgYm94IGlzIGFkZGVkIGFuZCBhZnRlciAxMDBtcyBtb3JlIGl0IHNob3VsZCBiZSBy
ZW1vdmVkLiBUaGlzIHRlc3RzIHRoYXQgd2UgY2FuIHN1cHBvcnQgdmVyeSBsYXJnZSBjb21wb3Np
dGluZyBsYXllcnMgd2l0aCBkeW5hbWljYWxseSBhZGRlZCBhbmQgcmVtb3ZlZCBjaGlsZCBjb21w
b3NpdGluZyBsYXllcnMuCisKK0ZpcnN0IChubyBjaGlsZHJlbik6CisoR3JhcGhpY3NMYXllcgor
ICAocG9zaXRpb24gMC4wMCAwLjAwKQorICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgKGJvdW5kcyA3
ODUuMDAgNTEyOS4wMCkKKyAgKG9wYWNpdHkgMS4wMCkKKyAgKHVzaW5nVGlsZWRMYXllciAwKQor
ICAocHJlc2VydmVzM0QgMCkKKyAgKGRyYXdzQ29udGVudCAwKQorICAoYmFja2ZhY2VWaXNpYmls
aXR5IHZpc2libGUpCisgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgKHRyYW5zZm9ybSBpZGVu
dGl0eSkKKyAgKGNoaWxkcmVuIDEKKyAgICAoR3JhcGhpY3NMYXllcgorICAgICAgKHBvc2l0aW9u
IDAuMDAgMC4wMCkKKyAgICAgIChhbmNob3IgMC41MCAwLjUwKQorICAgICAgKGJvdW5kcyA3ODUu
MDAgNTEyOS4wMCkKKyAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAodXNpbmdUaWxlZExheWVy
IDApCisgICAgICAocHJlc2VydmVzM0QgMCkKKyAgICAgIChkcmF3c0NvbnRlbnQgMCkKKyAgICAg
IChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9u
ZSkKKyAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0g
aWRlbnRpdHkpCisgICAgICAoY2hpbGRyZW4gMQorICAgICAgICAoR3JhcGhpY3NMYXllcgorICAg
ICAgICAgIChwb3NpdGlvbiA4LjAwIDg2LjAwKQorICAgICAgICAgIChhbmNob3IgMC41MCAwLjUw
KQorICAgICAgICAgIChib3VuZHMgNTAyLjAwIDUwMDIuMDApCisgICAgICAgICAgKG9wYWNpdHkg
MS4wMCkKKyAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDEpCisgICAgICAgICAgKHByZXNlcnZl
czNEIDApCisgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICAgIChiYWNrZmFjZVZp
c2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAg
ICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0g
aWRlbnRpdHkpCisgICAgICAgICkKKyAgICAgICkKKyAgICApCisgICkKKykKKworCitTZWNvbmQg
KGNoaWxkIGFkZGVkKToKKyhHcmFwaGljc0xheWVyCisgIChwb3NpdGlvbiAwLjAwIDAuMDApCisg
IChhbmNob3IgMC41MCAwLjUwKQorICAoYm91bmRzIDc4NS4wMCA1MTI5LjAwKQorICAob3BhY2l0
eSAxLjAwKQorICAodXNpbmdUaWxlZExheWVyIDApCisgIChwcmVzZXJ2ZXMzRCAwKQorICAoZHJh
d3NDb250ZW50IDApCisgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgKGJhY2tncm91
bmRDb2xvciBub25lKQorICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAoY2hpbGRyZW4gMQorICAg
IChHcmFwaGljc0xheWVyCisgICAgICAocG9zaXRpb24gMC4wMCAwLjAwKQorICAgICAgKGFuY2hv
ciAwLjUwIDAuNTApCisgICAgICAoYm91bmRzIDc4NS4wMCA1MTI5LjAwKQorICAgICAgKG9wYWNp
dHkgMS4wMCkKKyAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAgIChwcmVzZXJ2ZXMzRCAw
KQorICAgICAgKGRyYXdzQ29udGVudCAwKQorICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNp
YmxlKQorICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgKHRyYW5zZm9ybSBpZGVu
dGl0eSkKKyAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGlsZHJl
biAxCisgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgKHBvc2l0aW9uIDguMDAgODYu
MDApCisgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAgKGJvdW5kcyA1MDIu
MDAgNTAwMi4wMCkKKyAgICAgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgICAgICh1c2luZ1Rp
bGVkTGF5ZXIgMSkKKyAgICAgICAgICAocHJlc2VydmVzM0QgMCkKKyAgICAgICAgICAoZHJhd3ND
b250ZW50IDEpCisgICAgICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAg
ICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAgICAgICAodHJhbnNmb3JtIGlkZW50aXR5
KQorICAgICAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgKQorICAg
ICAgKQorICAgICkKKyAgKQorKQorCisKK1RoaXJkIChjaGlsZCByZW1vdmVkKToKKyhHcmFwaGlj
c0xheWVyCisgIChwb3NpdGlvbiAwLjAwIDAuMDApCisgIChhbmNob3IgMC41MCAwLjUwKQorICAo
Ym91bmRzIDc4NS4wMCA1MTI5LjAwKQorICAob3BhY2l0eSAxLjAwKQorICAodXNpbmdUaWxlZExh
eWVyIDApCisgIChwcmVzZXJ2ZXMzRCAwKQorICAoZHJhd3NDb250ZW50IDApCisgIChiYWNrZmFj
ZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAodHJhbnNm
b3JtIGlkZW50aXR5KQorICAoY2hpbGRyZW4gMQorICAgIChHcmFwaGljc0xheWVyCisgICAgICAo
cG9zaXRpb24gMC4wMCAwLjAwKQorICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAoYm91
bmRzIDc4NS4wMCA1MTI5LjAwKQorICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAgICh1c2luZ1Rp
bGVkTGF5ZXIgMCkKKyAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgKGRyYXdzQ29udGVudCAw
KQorICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgKGJhY2tncm91bmRD
b2xvciBub25lKQorICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGlsZHJlblRy
YW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGlsZHJlbiAxCisgICAgICAgIChHcmFwaGljc0xh
eWVyCisgICAgICAgICAgKHBvc2l0aW9uIDguMDAgODYuMDApCisgICAgICAgICAgKGFuY2hvciAw
LjUwIDAuNTApCisgICAgICAgICAgKGJvdW5kcyA1MDIuMDAgNTAwMi4wMCkKKyAgICAgICAgICAo
b3BhY2l0eSAxLjAwKQorICAgICAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMSkKKyAgICAgICAgICAo
cHJlc2VydmVzM0QgMCkKKyAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICAgKGJh
Y2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9u
ZSkKKyAgICAgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgIChjaGlsZHJlblRy
YW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgKQorICAgICAgKQorICAgICkKKyAgKQorKQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vY29tcG9zaXRpbmcvaHVnZS1sYXllci13aXRo
LWxheWVyLWNoaWxkcmVuLXJlc2l6ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vd2luL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItd2l0aC1sYXllci1jaGls
ZHJlbi1yZXNpemUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2luL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItd2l0aC1sYXllci1jaGlsZHJlbi1yZXNp
emUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyMCBAQAorVGhlIHllbGxv
dyBib3ggc2hvdWxkIGJlIDUwMCB4IDUwMCBvbiBzdGFydHVwLiBUaGVuIGl0IHNob3VsZCBzdHJl
dGNoIHRvIGJlIDUwMCB4IDUwMDAsIHRoZW4gc2hyaW5rIGJhY2sgZG93biB0byA1MDAgeCA1MDAu
IFRoaXMgdGVzdHMgdGhhdCB3ZSBjYW4gcmVzaXplIHRvIGEgaHVnZSBsYXllciBhbmQgYmFjayBh
Z2FpbiBhbmQgc3RpbGwgbWFpbnRhaW4gaW50ZWdyaXR5IG9mIHRoZSBsYXllciB0cmVlLgorCitG
aXJzdCAoc21hbGwgbGF5ZXIpOgorKEdyYXBoaWNzTGF5ZXIKKyAgKHBvc2l0aW9uIDAuMDAgMC4w
MCkKKyAgKGFuY2hvciAwLjUwIDAuNTApCisgIChib3VuZHMgNzg1LjAwIDYxMS4wMCkKKyAgKG9w
YWNpdHkgMS4wMCkKKyAgKHVzaW5nVGlsZWRMYXllciAwKQorICAocHJlc2VydmVzM0QgMCkKKyAg
KGRyYXdzQ29udGVudCAwKQorICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgIChiYWNr
Z3JvdW5kQ29sb3Igbm9uZSkKKyAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgKGNoaWxkcmVuIDEK
KyAgICAoR3JhcGhpY3NMYXllcgorICAgICAgKHBvc2l0aW9uIDAuMDAgMC4wMCkKKyAgICAgIChh
bmNob3IgMC41MCAwLjUwKQorICAgICAgKGJvdW5kcyA3ODUuMDAgNjExLjAwKQorICAgICAgKG9w
YWNpdHkgMS4wMCkKKyAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAgIChwcmVzZXJ2ZXMz
RCAwKQorICAgICAgKGRyYXdzQ29udGVudCAwKQorICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2
aXNpYmxlKQorICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgKHRyYW5zZm9ybSBp
ZGVudGl0eSkKKyAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGls
ZHJlbiAxCisgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgKHBvc2l0aW9uIDguMDAg
NjguMDApCisgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAgKGJvdW5kcyA1
MDIuMDAgNTAyLjAwKQorICAgICAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAgICAgKHVzaW5n
VGlsZWRMYXllciAwKQorICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgICAgIChkcmF3
c0NvbnRlbnQgMSkKKyAgICAgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAg
ICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAgICh0cmFuc2Zvcm0gaWRlbnRp
dHkpCisgICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgIChj
aGlsZHJlbiAyCisgICAgICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgICAgICAocG9z
aXRpb24gNTEuMDAgMTAxLjAwKQorICAgICAgICAgICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAg
ICAgICAgICAgICAgKGJvdW5kcyAyMDAuMDAgMjAwLjAwKQorICAgICAgICAgICAgICAob3BhY2l0
eSAxLjAwKQorICAgICAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDApCisgICAgICAgICAgICAg
IChwcmVzZXJ2ZXMzRCAwKQorICAgICAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAg
ICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAgICAgKGJhY2tn
cm91bmRDb2xvciBub25lKQorICAgICAgICAgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAg
ICAgICAgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgICApCisg
ICAgICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgICAgICAocG9zaXRpb24gMjc2LjAw
IDIwMS4wMCkKKyAgICAgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAgICAg
IChib3VuZHMgMjAwLjAwIDIwMC4wMCkKKyAgICAgICAgICAgICAgKG9wYWNpdHkgMS4wMCkKKyAg
ICAgICAgICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgICAgICAgICAocHJlc2VydmVz
M0QgMCkKKyAgICAgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICAgICAgICAoYmFj
a2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAgICAgICAgIChiYWNrZ3JvdW5kQ29sb3Ig
bm9uZSkKKyAgICAgICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICAg
KGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgICAgKQorICAgICAgICAgICkK
KyAgICAgICAgKQorICAgICAgKQorICAgICkKKyAgKQorKQorCisKK1NlY29uZCAoaHVnZSBsYXll
cik6CisoR3JhcGhpY3NMYXllcgorICAocG9zaXRpb24gMC4wMCAwLjAwKQorICAoYW5jaG9yIDAu
NTAgMC41MCkKKyAgKGJvdW5kcyA3ODUuMDAgNTExMS4wMCkKKyAgKG9wYWNpdHkgMS4wMCkKKyAg
KHVzaW5nVGlsZWRMYXllciAwKQorICAocHJlc2VydmVzM0QgMCkKKyAgKGRyYXdzQ29udGVudCAw
KQorICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgIChiYWNrZ3JvdW5kQ29sb3Igbm9u
ZSkKKyAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgKGNoaWxkcmVuIDEKKyAgICAoR3JhcGhpY3NM
YXllcgorICAgICAgKHBvc2l0aW9uIDAuMDAgMC4wMCkKKyAgICAgIChhbmNob3IgMC41MCAwLjUw
KQorICAgICAgKGJvdW5kcyA3ODUuMDAgNTExMS4wMCkKKyAgICAgIChvcGFjaXR5IDEuMDApCisg
ICAgICAodXNpbmdUaWxlZExheWVyIDApCisgICAgICAocHJlc2VydmVzM0QgMCkKKyAgICAgIChk
cmF3c0NvbnRlbnQgMCkKKyAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAg
IChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAg
ICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAoY2hpbGRyZW4gMQorICAgICAg
ICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgIChwb3NpdGlvbiA4LjAwIDY4LjAwKQorICAgICAg
ICAgIChhbmNob3IgMC41MCAwLjUwKQorICAgICAgICAgIChib3VuZHMgNTAyLjAwIDUwMDIuMDAp
CisgICAgICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDEp
CisgICAgICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQor
ICAgICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAoYmFja2dy
b3VuZENvbG9yIG5vbmUpCisgICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAg
ICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgKGNoaWxkcmVuIDIKKyAg
ICAgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgICAgIChwb3NpdGlvbiA1MS4wMCAx
MDEuMDApCisgICAgICAgICAgICAgIChhbmNob3IgMC41MCAwLjUwKQorICAgICAgICAgICAgICAo
Ym91bmRzIDIwMC4wMCAyMDAuMDApCisgICAgICAgICAgICAgIChvcGFjaXR5IDEuMDApCisgICAg
ICAgICAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAgICAgICAgICAgKHByZXNlcnZlczNE
IDApCisgICAgICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgICAgICAgKGJhY2tm
YWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgICAgICAgICAoYmFja2dyb3VuZENvbG9yIG5v
bmUpCisgICAgICAgICAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgICAgIChj
aGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIChH
cmFwaGljc0xheWVyCisgICAgICAgICAgICAgIChwb3NpdGlvbiAyNzYuMDAgNDcwMS4wMCkKKyAg
ICAgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAgICAgIChib3VuZHMgMjAw
LjAwIDIwMC4wMCkKKyAgICAgICAgICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAgICAgICAgICAg
KHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgICAgICAgICAocHJlc2VydmVzM0QgMCkKKyAgICAg
ICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICAgICAgICAoYmFja2ZhY2VWaXNpYmls
aXR5IHZpc2libGUpCisgICAgICAgICAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAg
ICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICAgKGNoaWxkcmVuVHJh
bnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgICAgKQorICAgICAgICAgICkKKyAgICAgICAgKQor
ICAgICAgKQorICAgICkKKyAgKQorKQorCisKK1RoaXJkIChzbWFsbCBsYXllcik6CisoR3JhcGhp
Y3NMYXllcgorICAocG9zaXRpb24gMC4wMCAwLjAwKQorICAoYW5jaG9yIDAuNTAgMC41MCkKKyAg
KGJvdW5kcyA3ODUuMDAgNjExLjAwKQorICAob3BhY2l0eSAxLjAwKQorICAodXNpbmdUaWxlZExh
eWVyIDApCisgIChwcmVzZXJ2ZXMzRCAwKQorICAoZHJhd3NDb250ZW50IDApCisgIChiYWNrZmFj
ZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAodHJhbnNm
b3JtIGlkZW50aXR5KQorICAoY2hpbGRyZW4gMQorICAgIChHcmFwaGljc0xheWVyCisgICAgICAo
cG9zaXRpb24gMC4wMCAwLjAwKQorICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAoYm91
bmRzIDc4NS4wMCA2MTEuMDApCisgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgKHVzaW5nVGls
ZWRMYXllciAwKQorICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAoZHJhd3NDb250ZW50IDAp
CisgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAoYmFja2dyb3VuZENv
bG9yIG5vbmUpCisgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgKGNoaWxkcmVuVHJh
bnNmb3JtIGlkZW50aXR5KQorICAgICAgKGNoaWxkcmVuIDEKKyAgICAgICAgKEdyYXBoaWNzTGF5
ZXIKKyAgICAgICAgICAocG9zaXRpb24gOC4wMCA2OC4wMCkKKyAgICAgICAgICAoYW5jaG9yIDAu
NTAgMC41MCkKKyAgICAgICAgICAoYm91bmRzIDUwMi4wMCA1MDIuMDApCisgICAgICAgICAgKG9w
YWNpdHkgMS4wMCkKKyAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDApCisgICAgICAgICAgKHBy
ZXNlcnZlczNEIDApCisgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICAgIChiYWNr
ZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUp
CisgICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAoY2hpbGRyZW5UcmFu
c2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgKGNoaWxkcmVuIDIKKyAgICAgICAgICAgIChHcmFw
aGljc0xheWVyCisgICAgICAgICAgICAgIChwb3NpdGlvbiA1MS4wMCAxMDEuMDApCisgICAgICAg
ICAgICAgIChhbmNob3IgMC41MCAwLjUwKQorICAgICAgICAgICAgICAoYm91bmRzIDIwMC4wMCAy
MDAuMDApCisgICAgICAgICAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAgICAgICAgICh1c2lu
Z1RpbGVkTGF5ZXIgMCkKKyAgICAgICAgICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAgICAg
ICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2
aXNpYmxlKQorICAgICAgICAgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAgICAgICAg
ICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgICAgIChjaGlsZHJlblRyYW5zZm9y
bSBpZGVudGl0eSkKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIChHcmFwaGljc0xheWVyCisg
ICAgICAgICAgICAgIChwb3NpdGlvbiAyNzYuMDAgMjAxLjAwKQorICAgICAgICAgICAgICAoYW5j
aG9yIDAuNTAgMC41MCkKKyAgICAgICAgICAgICAgKGJvdW5kcyAyMDAuMDAgMjAwLjAwKQorICAg
ICAgICAgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgICAgICAgICAodXNpbmdUaWxlZExheWVy
IDApCisgICAgICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgICAgICAgICAoZHJhd3ND
b250ZW50IDEpCisgICAgICAgICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAg
ICAgICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAgICAgICAodHJhbnNm
b3JtIGlkZW50aXR5KQorICAgICAgICAgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkp
CisgICAgICAgICAgICApCisgICAgICAgICAgKQorICAgICAgICApCisgICAgICApCisgICAgKQor
ICApCispCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9odWdl
LWxheWVyLXdpdGgtbGF5ZXItY2hpbGRyZW4tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9odWdlLWxheWVyLXdpdGgtbGF5ZXIt
Y2hpbGRyZW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItd2l0aC1sYXllci1jaGlsZHJlbi1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKK1RoZSB5ZWxsb3cgYm94IHNob3Vs
ZCBiZSBsYXJnZSBlbm91Z2ggdG8gc2Nyb2xsIG9mZiB0aGUgYm90dG9tLiBUaGVyZSBzaG91bGQg
YmUgYSByZWQgYm94IG9uIHRoZSBmaXJzdCBwYWdlIGFuZCBhIGJsdWUgYm94IG5lYXIgdGhlIGJv
dHRvbSBvZiB0aGUgeWVsbG93IGJveC4gVGhpcyB0ZXN0cyB0aGF0IHdlIGNhbiBzdXBwb3J0IHZl
cnkgbGFyZ2UgY29tcG9zaXRpbmcgbGF5ZXJzIHdpdGggY2hpbGQgY29tcG9zaXRpbmcgbGF5ZXJz
LgorCitUaGlzIGlzIHNvbWUgdGV4dAorKEdyYXBoaWNzTGF5ZXIKKyAgKHBvc2l0aW9uIDAuMDAg
MC4wMCkKKyAgKGFuY2hvciAwLjUwIDAuNTApCisgIChib3VuZHMgNzg1LjAwIDUxMjkuMDApCisg
IChvcGFjaXR5IDEuMDApCisgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgKHByZXNlcnZlczNEIDAp
CisgIChkcmF3c0NvbnRlbnQgMCkKKyAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAo
YmFja2dyb3VuZENvbG9yIG5vbmUpCisgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgIChjaGlsZHJl
biAxCisgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgIChwb3NpdGlvbiAwLjAwIDAuMDApCisgICAg
ICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAgIChib3VuZHMgNzg1LjAwIDUxMjkuMDApCisgICAg
ICAob3BhY2l0eSAxLjAwKQorICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgKHByZXNl
cnZlczNEIDApCisgICAgICAoZHJhd3NDb250ZW50IDApCisgICAgICAoYmFja2ZhY2VWaXNpYmls
aXR5IHZpc2libGUpCisgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAgICAodHJhbnNm
b3JtIGlkZW50aXR5KQorICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAg
KGNoaWxkcmVuIDEKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAocG9zaXRpb24g
OC4wMCA4Ni4wMCkKKyAgICAgICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAgICAgICAoYm91
bmRzIDUwMi4wMCA1MDAyLjAwKQorICAgICAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAgICAg
KHVzaW5nVGlsZWRMYXllciAxKQorICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgICAg
IChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUp
CisgICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAgICh0cmFuc2Zvcm0g
aWRlbnRpdHkpCisgICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAg
ICAgIChjaGlsZHJlbiAyCisgICAgICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgICAg
ICAocG9zaXRpb24gNTEuMDAgMTAxLjAwKQorICAgICAgICAgICAgICAoYW5jaG9yIDAuNTAgMC41
MCkKKyAgICAgICAgICAgICAgKGJvdW5kcyAyMDAuMDAgMjAwLjAwKQorICAgICAgICAgICAgICAo
b3BhY2l0eSAxLjAwKQorICAgICAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDApCisgICAgICAg
ICAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisg
ICAgICAgICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAgICAg
KGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAgICAgICAodHJhbnNmb3JtIGlkZW50aXR5
KQorICAgICAgICAgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAg
ICApCisgICAgICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgICAgICAocG9zaXRpb24g
NTEuMDAgNDcwMS4wMCkKKyAgICAgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAg
ICAgICAgIChib3VuZHMgMjAwLjAwIDIwMC4wMCkKKyAgICAgICAgICAgICAgKG9wYWNpdHkgMS4w
MCkKKyAgICAgICAgICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgICAgICAgICAocHJl
c2VydmVzM0QgMCkKKyAgICAgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICAgICAg
ICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAgICAgICAgIChiYWNrZ3JvdW5k
Q29sb3Igbm9uZSkKKyAgICAgICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAg
ICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgICAgKQorICAgICAg
ICAgICkKKyAgICAgICAgKQorICAgICAgKQorICAgICkKKyAgKQorKQorCkluZGV4OiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93aW4vY29tcG9zaXRpbmcvaHVnZS1sYXllci1yZXNpemUtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9o
dWdlLWxheWVyLXJlc2l6ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW4vY29tcG9zaXRpbmcvaHVnZS1sYXllci1yZXNpemUtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNiBAQAorVGhlIHllbGxvdyBib3ggc2hvdWxkIGJl
IDUwMCB4IDUwMCBvbiBzdGFydHVwLiBUaGVuIGl0IHNob3VsZCBzdHJldGNoIHRvIGJlIDUwMCB4
IDUwMDAsIHRoZW4gc2hyaW5rIGJhY2sgZG93biB0byA1MDAgeCA1MDAuIFRoaXMgdGVzdHMgdGhh
dCB3ZSBjYW4gcmVzaXplIHRvIGEgaHVnZSBsYXllciBhbmQgYmFjayBhZ2FpbiBhbmQgc3RpbGwg
bWFpbnRhaW4gaW50ZWdyaXR5IG9mIHRoZSBsYXllciB0cmVlLgorCitGaXJzdCAoc21hbGwgbGF5
ZXIpOgorKEdyYXBoaWNzTGF5ZXIKKyAgKHBvc2l0aW9uIDAuMDAgMC4wMCkKKyAgKGFuY2hvciAw
LjUwIDAuNTApCisgIChib3VuZHMgNzg1LjAwIDYxMS4wMCkKKyAgKG9wYWNpdHkgMS4wMCkKKyAg
KHVzaW5nVGlsZWRMYXllciAwKQorICAocHJlc2VydmVzM0QgMCkKKyAgKGRyYXdzQ29udGVudCAw
KQorICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgIChiYWNrZ3JvdW5kQ29sb3Igbm9u
ZSkKKyAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgKGNoaWxkcmVuIDEKKyAgICAoR3JhcGhpY3NM
YXllcgorICAgICAgKHBvc2l0aW9uIDAuMDAgMC4wMCkKKyAgICAgIChhbmNob3IgMC41MCAwLjUw
KQorICAgICAgKGJvdW5kcyA3ODUuMDAgNjExLjAwKQorICAgICAgKG9wYWNpdHkgMS4wMCkKKyAg
ICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgKGRy
YXdzQ29udGVudCAwKQorICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAg
KGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAg
IChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGlsZHJlbiAxCisgICAgICAg
IChHcmFwaGljc0xheWVyCisgICAgICAgICAgKHBvc2l0aW9uIDguMDAgNjguMDApCisgICAgICAg
ICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAgKGJvdW5kcyA1MDIuMDAgNTAyLjAwKQor
ICAgICAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQor
ICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAg
ICAgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAgICAgKGJhY2tncm91
bmRDb2xvciBub25lKQorICAgICAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAg
KGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICApCisgICAgICApCisgICAgKQor
ICApCispCisKKworU2Vjb25kIChodWdlIGxheWVyKToKKyhHcmFwaGljc0xheWVyCisgIChwb3Np
dGlvbiAwLjAwIDAuMDApCisgIChhbmNob3IgMC41MCAwLjUwKQorICAoYm91bmRzIDc4NS4wMCA1
MTExLjAwKQorICAob3BhY2l0eSAxLjAwKQorICAodXNpbmdUaWxlZExheWVyIDApCisgIChwcmVz
ZXJ2ZXMzRCAwKQorICAoZHJhd3NDb250ZW50IDApCisgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlz
aWJsZSkKKyAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAodHJhbnNmb3JtIGlkZW50aXR5KQor
ICAoY2hpbGRyZW4gMQorICAgIChHcmFwaGljc0xheWVyCisgICAgICAocG9zaXRpb24gMC4wMCAw
LjAwKQorICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAoYm91bmRzIDc4NS4wMCA1MTEx
LjAwKQorICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAg
ICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgKGRyYXdzQ29udGVudCAwKQorICAgICAgKGJhY2tm
YWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAg
ICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0
eSkKKyAgICAgIChjaGlsZHJlbiAxCisgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAg
KHBvc2l0aW9uIDguMDAgNjguMDApCisgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAg
ICAgICAgKGJvdW5kcyA1MDIuMDAgNTAwMi4wMCkKKyAgICAgICAgICAob3BhY2l0eSAxLjAwKQor
ICAgICAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMSkKKyAgICAgICAgICAocHJlc2VydmVzM0QgMCkK
KyAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0
eSB2aXNpYmxlKQorICAgICAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAgICAgICAo
dHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0
eSkKKyAgICAgICAgKQorICAgICAgKQorICAgICkKKyAgKQorKQorCisKK1RoaXJkIChzbWFsbCBs
YXllcik6CisoR3JhcGhpY3NMYXllcgorICAocG9zaXRpb24gMC4wMCAwLjAwKQorICAoYW5jaG9y
IDAuNTAgMC41MCkKKyAgKGJvdW5kcyA3ODUuMDAgNjExLjAwKQorICAob3BhY2l0eSAxLjAwKQor
ICAodXNpbmdUaWxlZExheWVyIDApCisgIChwcmVzZXJ2ZXMzRCAwKQorICAoZHJhd3NDb250ZW50
IDApCisgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgKGJhY2tncm91bmRDb2xvciBu
b25lKQorICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAoY2hpbGRyZW4gMQorICAgIChHcmFwaGlj
c0xheWVyCisgICAgICAocG9zaXRpb24gMC4wMCAwLjAwKQorICAgICAgKGFuY2hvciAwLjUwIDAu
NTApCisgICAgICAoYm91bmRzIDc4NS4wMCA2MTEuMDApCisgICAgICAob3BhY2l0eSAxLjAwKQor
ICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAo
ZHJhd3NDb250ZW50IDApCisgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAg
ICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAg
ICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgKGNoaWxkcmVuIDEKKyAgICAg
ICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAocG9zaXRpb24gOC4wMCA2OC4wMCkKKyAgICAg
ICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAgICAgICAoYm91bmRzIDUwMi4wMCA1MDIuMDAp
CisgICAgICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDAp
CisgICAgICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQor
ICAgICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAoYmFja2dy
b3VuZENvbG9yIG5vbmUpCisgICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAg
ICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICkKKyAgICAgICkKKyAgICAp
CisgICkKKykKKwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTk5NzcpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOSBAQAorMjAxMC0wNS0yMSAgQ2hyaXMg
TWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHRpbGVkIGNvbXBvc2l0aW5nIGxheWVycyBv
biBXaW5kb3dzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zOTQ2MQorICAgICAgICAKKyAgICAgICAgVGhlc2UgdGVzdHMgc2hvdyBzZXZlcmFsIGNhcGFi
aWxpdGllcywgaW5jbHVkaW5nIHNpbXBsZSBodWdlIGxheWVycywKKyAgICAgICAgcmVzaXppbmcg
ZnJvbSBzbWFsbCB0byBodWdlIGFuZCBiYWNrIGFnYWluLCBodWdlIGxheWVycyB3aXRoCisgICAg
ICAgIGxheWVyIGNoaWxkcmVuLCByZXNpemluZyBodWdlIGxheWVycyB3aXRoIGxheWVyIGNoaWxk
cmVuIGFuZCAKKyAgICAgICAgYWRkaW5nIGFuZCByZW1vdmluZyBjaGlsZHJlbiBmcm9tIGh1Z2Ug
bGF5ZXJzLgorICAgICAgICAKKyAgICAgICAgRXhwZWN0ZWQgcmVzdWx0cyBhcmUgb2YgdGhlIHJl
c3VsdGluZyBjb21wb3NpdGluZyBsYXllciB0cmVlIHNvCisgICAgICAgIHRoZXkgYXJlIFdpbmRv
d3Mgc3BlY2lmaWMuIEdlbmVyYWwgcmVzdWx0cyB3aWxsIGJlIG5lZWRlZCBmb3IgTWFjLgorCisg
ICAgICAgICogY29tcG9zaXRpbmcvaHVnZS1sYXllci1hZGQtcmVtb3ZlLWNoaWxkLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGNvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItcmVzaXplLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGNvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItd2l0aC1sYXllci1jaGlsZHJlbi1y
ZXNpemUuaHRtbDogQWRkZWQuCisgICAgICAgICogY29tcG9zaXRpbmcvaHVnZS1sYXllci13aXRo
LWxheWVyLWNoaWxkcmVuLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNvbXBvc2l0aW5nL2h1Z2Ut
bGF5ZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vd2luL2NvbXBvc2l0aW5nL2h1
Z2UtbGF5ZXItYWRkLXJlbW92ZS1jaGlsZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9odWdlLWxheWVyLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vd2luL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItcmVzaXplLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vd2luL2NvbXBvc2l0aW5nL2h1
Z2UtbGF5ZXItd2l0aC1sYXllci1jaGlsZHJlbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9odWdlLWxheWVyLXdpdGgtbGF5ZXItY2hpbGRy
ZW4tcmVzaXplLWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMTAtMDUtMjEgIEdlb2ZmcmV5IEdh
cmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KSW5kZXg6IExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItcmVzaXplLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvaHVnZS1sYXllci1yZXNpemUu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXIt
cmVzaXplLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODUgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+CisgIDxoZWFkPgorICAgIDx0aXRsZT5UZXN0IG9mIHZlcnkgbGFyZ2UgbGF5ZXIg
cmVzaXppbmc8L3RpdGxlPgorCisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2Ny
ZWVuIj4KKworICAgICNjb250YWluZXIgeworICAgICAgd2lkdGg6IDUwMHB4OworICAgICAgaGVp
Z2h0OiA1MDBweDsKKyAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOworICAgICAgYmFja2dy
b3VuZC1jb2xvcjogeWVsbG93OworICAgICAgLXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWigw
KTsKKyAgICB9CisgICAgCisgICAgLmJveCB7CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICAgICAgbGVmdDo1MHB4OworICAgICAgICB3aWR0aDogMjAwcHg7CisgICAgICAgIGhlaWdo
dDogMjAwcHg7CisgICAgfQorICAgIAorICAgIC5hdC10aGUtdG9wIHsKKyAgICAgICAgdG9wOiAx
MDBweDsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworICAgIH0KKyAgICA8L3N0eWxl
PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+Cisg
ICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cmVzdWx0ID0gIiI7CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdE9uTG9hZCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIFNtYWxsIGxheWVyIGZpcnN0CisgICAgICAgICAgICB3aW5kb3cuc2V0
VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAiRmlyc3QgKHNtYWxs
IGxheWVyKTo8YnI+IiArIGxheW91dFRlc3RDb250cm9sbGVyLmxheWVyVHJlZUFzVGV4dCgpOwor
ICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEh1Z2UgbGF5
ZXIgc2Vjb25kCisgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuc3R5bGUu
aGVpZ2h0ID0gIjUwMDBweCI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8g
TGV0IGl0IHJlbmRlcgorICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICI8YnI+PGJyPlNlY29uZCAoaHVn
ZSBsYXllcik6PGJyPiIgKyBsYXlvdXRUZXN0Q29udHJvbGxlci5sYXllclRyZWVBc1RleHQoKTsK
KyAgICAgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICAgIH0sIDEwMCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIFNtYWxsIGxheWVyIHRoaXJkCisgICAgICAgICAgICB3aW5kb3cu
c2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnY29udGFpbmVyJykuc3R5bGUuaGVpZ2h0ID0gIjUwMHB4IjsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAvLyBMZXQgaXQgcmVuZGVyCisgICAgICAgICAgICAgICAg
d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCArPSAiPGJyPjxicj5UaGlyZCAoc21hbGwgbGF5ZXIpOjxicj4iICsgbGF5b3V0VGVzdENv
bnRyb2xsZXIubGF5ZXJUcmVlQXNUZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5ZXJzJykuaW5uZXJIVE1MID0gcmVzdWx0OworICAgICAg
ICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICB9
LCAyMDApOworICAgICAgICB9CisgICAgICAKKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIoJ2xvYWQnLCB0ZXN0T25Mb2FkLCBmYWxzZSk7CisgICAgPC9zY3JpcHQ+CisgIDwvaGVhZD4K
KyAgPGJvZHk+CisgICAgICA8cD4KKyAgICAgICAgVGhlIHllbGxvdyBib3ggc2hvdWxkIGJlIDUw
MCB4IDUwMCBvbiBzdGFydHVwLiBUaGVuIGl0IHNob3VsZCAKKyAgICAgICAgc3RyZXRjaCB0byBi
ZSA1MDAgeCA1MDAwLCB0aGVuIHNocmluayBiYWNrIGRvd24gdG8gNTAwIHggNTAwLiAKKyAgICAg
ICAgVGhpcyB0ZXN0cyB0aGF0IHdlIGNhbiByZXNpemUgdG8gYSBodWdlIGxheWVyIGFuZCBiYWNr
IGFnYWluCisgICAgICAgIGFuZCBzdGlsbCBtYWludGFpbiBpbnRlZ3JpdHkgb2YgdGhlIGxheWVy
IHRyZWUuCisgICAgICA8L3A+CisgICAgICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CisgICAgICAg
ICAgPGRpdiBjbGFzcz0iYm94IGF0LXRoZS10b3AiPjwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAg
ICAgICAgPHByZSBpZD0ibGF5ZXJzIj5MYXllciB0cmVlIGFwcGVhcnMgaGVyZSBpbiBEUlQuPC9w
cmU+CisgIDwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2h1
Z2UtbGF5ZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9odWdl
LWxheWVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9odWdl
LWxheWVyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+CisgIDxoZWFkPgorICAgIDx0aXRsZT5UZXN0IG9mIHZlcnkgbGFyZ2UgbGF5ZXI8
L3RpdGxlPgorCisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKwor
ICAgICNjb250YWluZXIgeworICAgICAgd2lkdGg6IDUwMHB4OworICAgICAgaGVpZ2h0OiA1MDAw
cHg7CisgICAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKKyAgICAgIGJhY2tncm91bmQtY29s
b3I6IHllbGxvdzsKKyAgICAgIC13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVooMCk7CisgICAg
fQorICAgIAorICAgIC5ib3ggeworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAg
IGxlZnQ6NTBweDsKKyAgICAgICAgd2lkdGg6IDIwMHB4OworICAgICAgICBoZWlnaHQ6IDIwMHB4
OworICAgIH0KKyAgICAKKyAgICAuYXQtdGhlLXRvcCB7CisgICAgICAgIHRvcDogMTAwcHg7Cisg
ICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKKyAgICB9CisgICAgCisgICAgLmF0LXRoZS1i
b3R0b20geworICAgICAgICB0b3A6NDcwMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBi
bHVlOworICAgIH0gICAKKyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RPbkxvYWQoKQorICAgICAgICB7CisgICAg
ICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXllcnMnKS5pbm5lckhUTUwgPSBsYXlvdXRUZXN0Q29u
dHJvbGxlci5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0sIDApOworICAgICAgICB9CisgICAgICAKKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIoJ2xvYWQnLCB0ZXN0T25Mb2FkLCBmYWxzZSk7CisgICAgPC9zY3JpcHQ+CisgIDwvaGVhZD4K
KyAgPGJvZHk+CisgICAgICA8cD4KKyAgICAgICAgVGhlIHllbGxvdyBib3ggc2hvdWxkIGJlIGxh
cmdlIGVub3VnaCB0byBzY3JvbGwgb2ZmIHRoZSBib3R0b20uCisgICAgICAgIFRoZXJlIHNob3Vs
ZCBiZSBhIHJlZCBib3ggb24gdGhlIGZpcnN0IHBhZ2UgYW5kIGEgYmx1ZSBib3gKKyAgICAgICAg
bmVhciB0aGUgYm90dG9tIG9mIHRoZSB5ZWxsb3cgYm94LiBUaGlzIHRlc3RzIHRoYXQgd2UgY2Fu
IHN1cHBvcnQKKyAgICAgICAgdmVyeSBsYXJnZSBjb21wb3NpdGluZyBsYXllcnMuCisgICAgICA8
L3A+CisgICAgICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CisgICAgICAgICAgPGRpdiBjbGFzcz0i
Ym94IGF0LXRoZS10b3AiPjwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9ImJveCBhdC10aGUt
Ym90dG9tIj48L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxwcmUgaWQ9ImxheWVycyI+
TGF5ZXIgdHJlZSBhcHBlYXJzIGhlcmUgaW4gRFJULjwvcHJlPgorICA8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9odWdlLWxheWVyLWFkZC1yZW1vdmUtY2hp
bGQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9odWdlLWxheWVy
LWFkZC1yZW1vdmUtY2hpbGQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NvbXBv
c2l0aW5nL2h1Z2UtbGF5ZXItYWRkLXJlbW92ZS1jaGlsZC5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDg4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8dGl0
bGU+VGVzdCBvZiB2ZXJ5IGxhcmdlIGxheWVyIHdpdGggYWRkZWQgYW5kIHJlbW92ZWQgY2hpbGQ8
L3RpdGxlPgorCisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKwor
ICAgICNjb250YWluZXIgeworICAgICAgd2lkdGg6IDUwMHB4OworICAgICAgaGVpZ2h0OiA1MDAw
cHg7CisgICAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKKyAgICAgIGJhY2tncm91bmQtY29s
b3I6IHllbGxvdzsKKyAgICAgIC13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVooMCk7CisgICAg
fQorICAgIAorICAgIC5ib3ggeworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAg
IGxlZnQ6NTBweDsKKyAgICAgICAgd2lkdGg6IDIwMHB4OworICAgICAgICBoZWlnaHQ6IDIwMHB4
OworICAgIH0KKyAgICAKKyAgICAuYXQtdGhlLXRvcCB7CisgICAgICAgIHRvcDogNDAwcHg7Cisg
ICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKKyAgICB9CisgICAgCisgICAgPC9zdHlsZT4K
KyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPgorICAg
ICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJl
c3VsdCA9ICIiOworCisgICAgICAgIGZ1bmN0aW9uIHRlc3RPbkxvYWQoKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBGaXJzdCB3aXRoIG5vIGtpZHMKKyAgICAgICAgICAgIHdpbmRvdy5zZXRU
aW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJGaXJzdCAobm8gY2hp
bGRyZW4pOjxicj4iICsgbGF5b3V0VGVzdENvbnRyb2xsZXIubGF5ZXJUcmVlQXNUZXh0KCk7Cisg
ICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2Vjb25kIGFk
ZCBraWQKKyAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIHZhciBib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAg
ICAgICAgICAgICBib3guY2xhc3NOYW1lID0gImJveCBhdC10aGUtdG9wIjsKKyAgICAgICAgICAg
ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQoYm94
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBMZXQgaXQgcmVuZGVyCisg
ICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgKz0gIjxicj48YnI+U2Vjb25kIChjaGlsZCBhZGRlZCk6PGJyPiIg
KyBsYXlvdXRUZXN0Q29udHJvbGxlci5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgICAgICAg
ICB9LCAwKTsKKyAgICAgICAgICAgIH0sIDEwMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIFRoaXJkIHJlbW92ZSBraWQKKyAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnY29udGFpbmVyJyk7CisgICAgICAgICAgICAgICAgY29udGFpbmVyLnJlbW92ZUNo
aWxkKGNvbnRhaW5lci5sYXN0Q2hpbGQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIC8vIExldCBpdCByZW5kZXIKKyAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICI8YnI+PGJyPlRo
aXJkIChjaGlsZCByZW1vdmVkKTo8YnI+IiArIGxheW91dFRlc3RDb250cm9sbGVyLmxheWVyVHJl
ZUFzVGV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2xheWVycycpLmlubmVySFRNTCA9IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0sIDApOworICAgICAgICAgICAgfSwgMjAwKTsKKyAgICAgICAg
fQorICAgICAgCisgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGVzdE9u
TG9hZCwgZmFsc2UpOworICAgIDwvc2NyaXB0PgorICA8L2hlYWQ+CisgIDxib2R5PgorICAgICAg
PHA+CisgICAgICAgIFRoZSB5ZWxsb3cgYm94IHNob3VsZCBiZSBsYXJnZSBlbm91Z2ggdG8gc2Ny
b2xsIG9mZiB0aGUgYm90dG9tLgorICAgICAgICBBdCB0aGUgc3RhcnQgdGhlcmUgc2hvdWxkIGJl
IG5vIGNoaWxkLiBBZnRlciAxMDBtcyBhIHJlZCBib3ggaXMgCisgICAgICAgIGFkZGVkIGFuZCBh
ZnRlciAxMDBtcyBtb3JlIGl0IHNob3VsZCBiZSByZW1vdmVkLiBUaGlzIHRlc3RzIHRoYXQgCisg
ICAgICAgIHdlIGNhbiBzdXBwb3J0IHZlcnkgbGFyZ2UgY29tcG9zaXRpbmcgbGF5ZXJzIHdpdGgg
ZHluYW1pY2FsbHkgYWRkZWQgCisgICAgICAgIGFuZCByZW1vdmVkIGNoaWxkIGNvbXBvc2l0aW5n
IGxheWVycy4KKyAgICAgIDwvcD4KKyAgICAgICAgPGRpdiBpZD0iY29udGFpbmVyIj48L2Rpdj4K
KyAgICAgICAgPHByZSBpZD0ibGF5ZXJzIj5MYXllciB0cmVlIGFwcGVhcnMgaGVyZSBpbiBEUlQu
PC9wcmU+CisgIDwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2NvbXBvc2l0aW5n
L2h1Z2UtbGF5ZXItd2l0aC1sYXllci1jaGlsZHJlbi1yZXNpemUuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9odWdlLWxheWVyLXdpdGgtbGF5ZXItY2hpbGRyZW4t
cmVzaXplLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9odWdl
LWxheWVyLXdpdGgtbGF5ZXItY2hpbGRyZW4tcmVzaXplLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsOTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDx0aXRs
ZT5UZXN0IG9mIHZlcnkgbGFyZ2UgbGF5ZXIgcmVzaXppbmcgd2l0aCBsYXllciBjaGlsZHJlbjwv
dGl0bGU+CisKKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorCisg
ICAgI2NvbnRhaW5lciB7CisgICAgICB3aWR0aDogNTAwcHg7CisgICAgICBoZWlnaHQ6IDUwMHB4
OworICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9y
OiB5ZWxsb3c7CisgICAgICAtd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVaKDApOworICAgIH0K
KyAgICAKKyAgICAuYm94IHsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgICBs
ZWZ0OjUwcHg7CisgICAgICAgIHdpZHRoOiAyMDBweDsKKyAgICAgICAgaGVpZ2h0OiAyMDBweDsK
KyAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWigwKTsKKyAgICB9CisgICAgCisg
ICAgLmF0LXRoZS10b3AgeworICAgICAgICB0b3A6IDEwMHB4OworICAgICAgICBiYWNrZ3JvdW5k
LWNvbG9yOiByZWQ7CisgICAgfQorICAgIAorICAgIC5hdC10aGUtYm90dG9tIHsKKyAgICAgICAg
dG9wOjIwMHB4OworICAgICAgICBsZWZ0OiAyNzVweDsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xv
cjogYmx1ZTsKKyAgICB9ICAgCisgICAgPC9zdHlsZT4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPgorICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc3VsdCA9ICIiOworCisgICAgICAgIGZ1
bmN0aW9uIHRlc3RPbkxvYWQoKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBTbWFsbCBsYXll
ciBmaXJzdAorICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gIkZpcnN0IChzbWFsbCBsYXllcik6PGJyPiIgKyBsYXlvdXRUZXN0
Q29udHJvbGxlci5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBIdWdlIGxheWVyIHNlY29uZAorICAgICAgICAgICAgd2lu
ZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpLnN0eWxlLmhlaWdodCA9ICI1MDAwcHgiOworICAgICAg
ICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdibHVlLWJveCcpLnN0eWxlLnRvcCA9
ICI0NzAwcHgiOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIExldCBpdCBy
ZW5kZXIKKyAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiPGJyPjxicj5TZWNvbmQgKGh1Z2UgbGF5ZXIp
Ojxicj4iICsgbGF5b3V0VGVzdENvbnRyb2xsZXIubGF5ZXJUcmVlQXNUZXh0KCk7CisgICAgICAg
ICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICB9LCAxMDApOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBTbWFsbCBsYXllciB0aGlyZAorICAgICAgICAgICAgd2luZG93LnNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2NvbnRhaW5lcicpLnN0eWxlLmhlaWdodCA9ICI1MDBweCI7CisgICAgICAgICAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JsdWUtYm94Jykuc3R5bGUudG9wID0gIjIwMHB4IjsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBMZXQgaXQgcmVuZGVyCisgICAgICAg
ICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSAiPGJyPjxicj5UaGlyZCAoc21hbGwgbGF5ZXIpOjxicj4iICsgbGF5
b3V0VGVzdENvbnRyb2xsZXIubGF5ZXJUcmVlQXNUZXh0KCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5ZXJzJykuaW5uZXJIVE1MID0gcmVzdWx0
OworICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwgMCk7CisgICAg
ICAgICAgICB9LCAyMDApOworICAgICAgICB9CisgICAgICAKKyAgICAgICAgd2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoJ2xvYWQnLCB0ZXN0T25Mb2FkLCBmYWxzZSk7CisgICAgPC9zY3JpcHQ+Cisg
IDwvaGVhZD4KKyAgPGJvZHk+CisgICAgICA8cD4KKyAgICAgICAgVGhlIHllbGxvdyBib3ggc2hv
dWxkIGJlIDUwMCB4IDUwMCBvbiBzdGFydHVwLiBUaGVuIGl0IHNob3VsZCAKKyAgICAgICAgc3Ry
ZXRjaCB0byBiZSA1MDAgeCA1MDAwLCB0aGVuIHNocmluayBiYWNrIGRvd24gdG8gNTAwIHggNTAw
LiAKKyAgICAgICAgVGhpcyB0ZXN0cyB0aGF0IHdlIGNhbiByZXNpemUgdG8gYSBodWdlIGxheWVy
IGFuZCBiYWNrIGFnYWluCisgICAgICAgIGFuZCBzdGlsbCBtYWludGFpbiBpbnRlZ3JpdHkgb2Yg
dGhlIGxheWVyIHRyZWUuCisgICAgICA8L3A+CisgICAgICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+
CisgICAgICAgICAgPGRpdiBjbGFzcz0iYm94IGF0LXRoZS10b3AiPjwvZGl2PgorICAgICAgICAg
IDxkaXYgaWQ9ImJsdWUtYm94IiBjbGFzcz0iYm94IGF0LXRoZS1ib3R0b20iPjwvZGl2PgorICAg
ICAgICA8L2Rpdj4KKyAgICAgICAgPHByZSBpZD0ibGF5ZXJzIj5MYXllciB0cmVlIGFwcGVhcnMg
aGVyZSBpbiBEUlQuPC9wcmU+CisgIDwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItd2l0aC1sYXllci1jaGlsZHJlbi5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2h1Z2UtbGF5ZXItd2l0aC1sYXllci1jaGls
ZHJlbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvaHVnZS1s
YXllci13aXRoLWxheWVyLWNoaWxkcmVuLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDx0aXRsZT5UZXN0IG9m
IHZlcnkgbGFyZ2UgbGF5ZXIgd2l0aCBsYXllciBjaGlsZHJlbjwvdGl0bGU+CisKKyAgICA8c3R5
bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorCisgICAgI2NvbnRhaW5lciB7Cisg
ICAgICB3aWR0aDogNTAwcHg7CisgICAgICBoZWlnaHQ6IDUwMDBweDsKKyAgICAgIGJvcmRlcjog
MXB4IHNvbGlkIGJsYWNrOworICAgICAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OworICAgICAg
LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWigwKTsKKyAgICB9CisgICAgCisgICAgLmJveCB7
CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgbGVmdDo1MHB4OworICAgICAg
ICB3aWR0aDogMjAwcHg7CisgICAgICAgIGhlaWdodDogMjAwcHg7CisgICAgICAtd2Via2l0LXRy
YW5zZm9ybTp0cmFuc2xhdGVaKDApOworICAgIH0KKyAgICAKKyAgICAuYXQtdGhlLXRvcCB7Cisg
ICAgICAgIHRvcDogMTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKKyAgICB9
CisgICAgCisgICAgLmF0LXRoZS1ib3R0b20geworICAgICAgICB0b3A6NDcwMHB4OworICAgICAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlOworICAgIH0gICAKKyAgICA8L3N0eWxlPgorICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+CisgICAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RPbkxv
YWQoKQorICAgICAgICB7CisgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXllcnMnKS5pbm5l
ckhUTUwgPSBsYXlvdXRUZXN0Q29udHJvbGxlci5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgICAKKyAgICAgICAg
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0ZXN0T25Mb2FkLCBmYWxzZSk7CisgICAg
PC9zY3JpcHQ+CisgIDwvaGVhZD4KKyAgPGJvZHk+CisgICAgICA8cD4KKyAgICAgICAgVGhlIHll
bGxvdyBib3ggc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0byBzY3JvbGwgb2ZmIHRoZSBib3R0b20u
CisgICAgICAgIFRoZXJlIHNob3VsZCBiZSBhIHJlZCBib3ggb24gdGhlIGZpcnN0IHBhZ2UgYW5k
IGEgYmx1ZSBib3gKKyAgICAgICAgbmVhciB0aGUgYm90dG9tIG9mIHRoZSB5ZWxsb3cgYm94LiBU
aGlzIHRlc3RzIHRoYXQgd2UgY2FuIHN1cHBvcnQKKyAgICAgICAgdmVyeSBsYXJnZSBjb21wb3Np
dGluZyBsYXllcnMgd2l0aCBjaGlsZCBjb21wb3NpdGluZyBsYXllcnMuCisgICAgICA8L3A+Cisg
ICAgICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CisgICAgICAgIFRoaXMgaXMgc29tZSB0ZXh0Cisg
ICAgICAgICAgPGRpdiBjbGFzcz0iYm94IGF0LXRoZS10b3AiPjwvZGl2PgorICAgICAgICAgIDxk
aXYgY2xhc3M9ImJveCBhdC10aGUtYm90dG9tIj48L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAg
ICAgIDxwcmUgaWQ9ImxheWVycyI+TGF5ZXIgdHJlZSBhcHBlYXJzIGhlcmUgaW4gRFJULjwvcHJl
PgorICA8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="41253"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>