<?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>71872</bug_id>
          
          <creation_ts>2011-11-08 18:25:11 -0800</creation_ts>
          <short_desc>[Chromium] Improve tile invalidation</short_desc>
          <delta_ts>2011-12-06 09:14:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>72223</blocked>
    
    <blocked>73525</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Reveman">reveman</reporter>
          <assigned_to name="David Reveman">reveman</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>sky</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>498584</commentid>
    <comment_count>0</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-08 18:25:11 -0800</bug_when>
    <thetext>LayerChromium::setNeedsDisplay currently does a union of all dirty rectangles which is later used by ContentLayerChromium::paintContentsIfDirty to invalidate tiles. TiledLayerChromium should be able to invalidate tiles using the initial dirty rectangles instead of the union to avoid unnecessary tile updates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498585</commentid>
    <comment_count>1</comment_count>
      <attachid>114189</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-08 18:26:54 -0800</bug_when>
    <thetext>Created attachment 114189
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498588</commentid>
    <comment_count>2</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-08 18:30:55 -0800</bug_when>
    <thetext>Not sure this is the best way to solve this but something like this should significantly improve the efficiency of the SkPicture based texture uploader.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499227</commentid>
    <comment_count>3</comment_count>
      <attachid>114189</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-09 12:05:19 -0800</bug_when>
    <thetext>Comment on attachment 114189
Patch

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

Too much unioning.  This is great.  :)

My only (very minor) worry is that LayerChromium::dirtyRect() no longer returns something useful for ContentLayerChromium.  I&apos;m not sure if that&apos;s getting used anywhere, but it&apos;s a little weird.

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:-277
&gt; -    m_tiler-&gt;growLayerToContain(contentRect);
&gt; -

Is this going away because if the layer doesn&apos;t contain an invalidation rect, then those tiles don&apos;t exist, therefore don&apos;t need to be invalidated?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499307</commentid>
    <comment_count>4</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-09 13:26:02 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 114189 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114189&amp;action=review
&gt; 
&gt; Too much unioning.  This is great.  :)
&gt; 
&gt; My only (very minor) worry is that LayerChromium::dirtyRect() no longer returns something useful for ContentLayerChromium.  I&apos;m not sure if that&apos;s getting used anywhere, but it&apos;s a little weird.

Yea, I agree. That&apos;s a little weird. m_dirtyRect is used by other layer types. We could call LayerChromium::setNeedsDisplay from ContentLayerChromium::setNeedsDisplay and keep having LayerChromium::dirtyRect() return something useful but it doesn&apos;t really make a difference in the ContentLayerChromium case.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:-277
&gt; &gt; -    m_tiler-&gt;growLayerToContain(contentRect);
&gt; &gt; -
&gt; 
&gt; Is this going away because if the layer doesn&apos;t contain an invalidation rect, then those tiles don&apos;t exist, therefore don&apos;t need to be invalidated?

We&apos;re only interested in invalidating tiles that already exist. Tiles that don&apos;t exist but will be needed for drawing will be invalidated when created. The rectangle passed to invalidateRect is no longer intersected by contentBounds so growing the layer here might make it larger than necessary. growLayerToContain is called later in TiledLayerChromium::prepareToUpdate with the visible layer area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499316</commentid>
    <comment_count>5</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-09 13:37:23 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 114189 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114189&amp;action=review
&gt; &gt; 
&gt; &gt; Too much unioning.  This is great.  :)
&gt; &gt; 
&gt; &gt; My only (very minor) worry is that LayerChromium::dirtyRect() no longer returns something useful for ContentLayerChromium.  I&apos;m not sure if that&apos;s getting used anywhere, but it&apos;s a little weird.
&gt; 
&gt; Yea, I agree. That&apos;s a little weird. m_dirtyRect is used by other layer types. We could call LayerChromium::setNeedsDisplay from ContentLayerChromium::setNeedsDisplay and keep having LayerChromium::dirtyRect() return something useful but it doesn&apos;t really make a difference in the ContentLayerChromium case.

I really like that suggestion.  I totally agree that it doesn&apos;t make a difference in the ContentLayerChromium case, but it&apos;ll keep from causing somebody else unintended behavior later on if this rect starts getting used for something else.  I could easily see somebody adding an &quot;isDirty() { return m_dirtyRect.isEmpty() }&quot; function to LayerChromium for some other use.

&gt; We&apos;re only interested in invalidating tiles that already exist. Tiles that don&apos;t exist but will be needed for drawing will be invalidated when created. The rectangle passed to invalidateRect is no longer intersected by contentBounds so growing the layer here might make it larger than necessary. growLayerToContain is called later in TiledLayerChromium::prepareToUpdate with the visible layer area.

Sounds good to me.  Just making sure I fully understand what&apos;s going on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499348</commentid>
    <comment_count>6</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-09 14:21:17 -0800</bug_when>
    <thetext>Going one small step further, I think its appropriate to simply remove the dirtyRect() accessor.  Like Enne said, I think its not used anywhere.  Conceptually, all layer types should be responsible for dealing with dirty rects in their own way.  (and in practice, it seems like tiled layers are the only case that needs to be addressed).  Does that sound reasonable?

Maybe we can eventually propagate this reduced repainting to the draw side, too (for now, its just one rect called the updateRect that propagates)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499417</commentid>
    <comment_count>7</comment_count>
      <attachid>114380</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-09 15:37:21 -0800</bug_when>
    <thetext>Created attachment 114380
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499419</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-09 15:39:59 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499423</commentid>
    <comment_count>9</comment_count>
      <attachid>114380</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-09 15:44:39 -0800</bug_when>
    <thetext>Comment on attachment 114380
Patch

This looks great.  I think switching to just tracking a dirty flag cleans things up quite a bit.  Thanks!

Also, do the webkit_unit_tests build? I think LayerChromiumTest.cpp uses dirtyRect().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499426</commentid>
    <comment_count>10</comment_count>
      <attachid>114380</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-09 15:51:06 -0800</bug_when>
    <thetext>Comment on attachment 114380
Patch

Attachment 114380 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10395136</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499427</commentid>
    <comment_count>11</comment_count>
      <attachid>114380</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-11-09 15:52:20 -0800</bug_when>
    <thetext>Comment on attachment 114380
Patch

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

&gt; Source/WebKit/chromium/public/WebContentLayer.h:64
&gt; +    WEBKIT_EXPORT bool invalid() const;

isInvalid might be a better name for this function since it returns a boolean.  it is asking a question, so might as well phrase it like a question.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499435</commentid>
    <comment_count>12</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-09 16:04:31 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 114380 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114380&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebContentLayer.h:64
&gt; &gt; +    WEBKIT_EXPORT bool invalid() const;
&gt; 
&gt; isInvalid might be a better name for this function since it returns a boolean.  it is asking a question, so might as well phrase it like a question.

would it be OK if we do the same for the dirty() flag, too?   i.e. --&gt; isDirty()?  But if anyone disagrees, I&apos;ll defer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499437</commentid>
    <comment_count>13</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-09 16:06:07 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Going one small step further, I think its appropriate to simply remove the dirtyRect() accessor.  Like Enne said, I think its not used anywhere.  Conceptually, all layer types should be responsible for dealing with dirty rects in their own way.  (and in practice, it seems like tiled layers are the only case that needs to be addressed).  Does that sound reasonable?

Updated patch replaces m_dirtyRect with a boolean. I think this cleans things up a bit. As you mentioned, dirty region tracking is the responsibility of each layer type on its own using whatever data structure is appropriate. The base layer class can still keep track of whether the layer is dirty or not, which is all non-tiled layer types need.

&gt; 
&gt; Maybe we can eventually propagate this reduced repainting to the draw side, too (for now, its just one rect called the updateRect that propagates)

Yea, I think we should be able to remove updateRect and instead determine what needs to be re-drawn based on the tiles we&apos;re updating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499449</commentid>
    <comment_count>14</comment_count>
      <attachid>114388</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-09 16:14:46 -0800</bug_when>
    <thetext>Created attachment 114388
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499474</commentid>
    <comment_count>15</comment_count>
      <attachid>114388</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-09 16:44:57 -0800</bug_when>
    <thetext>Comment on attachment 114388
Patch

Attachment 114388 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10403117</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499486</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-11-09 16:56:53 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; isInvalid might be a better name for this function since it returns a boolean.  it is asking a question, so might as well phrase it like a question.
&gt; 
&gt; would it be OK if we do the same for the dirty() flag, too?   i.e. --&gt; isDirty()?  But if anyone disagrees, I&apos;ll defer.

Yes.  The idea is to make code read more like spoken language.  You don&apos;t say &quot;the layer dirty.&quot;  You say &quot;the layer is dirty.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499493</commentid>
    <comment_count>17</comment_count>
      <attachid>114397</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-09 17:02:35 -0800</bug_when>
    <thetext>Created attachment 114397
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499496</commentid>
    <comment_count>18</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-09 17:05:43 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 114380 [details])
&gt; This looks great.  I think switching to just tracking a dirty flag cleans things up quite a bit.  Thanks!
&gt; 
&gt; Also, do the webkit_unit_tests build? I think LayerChromiumTest.cpp uses dirtyRect().

Latest patch fixes the unit tests and makes sure empty rectangle invalidation behavior doesn&apos;t change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499536</commentid>
    <comment_count>19</comment_count>
      <attachid>114397</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-09 17:46:35 -0800</bug_when>
    <thetext>Comment on attachment 114397
Patch

Attachment 114397 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10394164

New failing tests:
svg/dynamic-updates/SVGFEDisplacementMapElement-dom-in2-attr.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501082</commentid>
    <comment_count>20</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-11 14:09:13 -0800</bug_when>
    <thetext>Since it&apos;s a bool and it is set by calling setNeedsDisplay() and cleared by calling resetNeedsDisplay() shouldn&apos;t the getter be called needsDisplay() and the member variable called m_needsDisplay?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501083</commentid>
    <comment_count>21</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-11 14:10:24 -0800</bug_when>
    <thetext>Also, why is it that WebContentLayer use invalidate / invalid but the implementation uses setNeedsDisplay(rect)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501326</commentid>
    <comment_count>22</comment_count>
      <attachid>114814</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-11 19:20:26 -0800</bug_when>
    <thetext>Created attachment 114814
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501327</commentid>
    <comment_count>23</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-11 19:27:53 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Since it&apos;s a bool and it is set by calling setNeedsDisplay() and cleared by calling resetNeedsDisplay() shouldn&apos;t the getter be called needsDisplay() and the member variable called m_needsDisplay?

Fixed in latest patch.

I didn&apos;t do anything about invalidate/invalid in WebContentLayer as I don&apos;t know the reason for that naming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502108</commentid>
    <comment_count>24</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-11-14 11:11:20 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Also, why is it that WebContentLayer use invalidate / invalid but the implementation uses setNeedsDisplay(rect)?

using consistent terminology for this stuff seems like a great idea to me! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502112</commentid>
    <comment_count>25</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-14 11:13:02 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #21)
&gt; &gt; Also, why is it that WebContentLayer use invalidate / invalid but the implementation uses setNeedsDisplay(rect)?
&gt; 
&gt; using consistent terminology for this stuff seems like a great idea to me! :)

Someone should bring this up with @piman...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502135</commentid>
    <comment_count>26</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-11-14 11:35:31 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; (In reply to comment #21)
&gt; &gt; &gt; Also, why is it that WebContentLayer use invalidate / invalid but the implementation uses setNeedsDisplay(rect)?
&gt; &gt; 
&gt; &gt; using consistent terminology for this stuff seems like a great idea to me! :)
&gt; 
&gt; Someone should bring this up with @piman...

See https://bugs.webkit.org/show_bug.cgi?id=69107#c15
You guys figure out what you like and stick with it :)

I agree that consistency would be good. However, we have to realize that there are differences between the internals of WebCore (e.g GraphicsLayer uses setNeedsDisplay) and of chrome (e.g. chrome&apos;s RenderWidget uses didInvaildateRect), so anything in the middle will be inconsistent with one or the other.

My opinion is that &quot;setNeedsDisplay&quot; is somewhat misleading, whereas invalidate/invalid is more traditional. But I&apos;m really not attached to anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506165</commentid>
    <comment_count>27</comment_count>
      <attachid>115899</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-18 16:01:59 -0800</bug_when>
    <thetext>Created attachment 115899
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506617</commentid>
    <comment_count>28</comment_count>
      <attachid>116009</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-20 16:45:10 -0800</bug_when>
    <thetext>Created attachment 116009
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507101</commentid>
    <comment_count>29</comment_count>
      <attachid>116009</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-21 11:30:01 -0800</bug_when>
    <thetext>Comment on attachment 116009
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/WebGLLayerChromium.cpp:90
&gt; +    if (m_needsDisplay)

should this be !m_needsDisplay ?

&gt; Source/WebKit/chromium/src/WebContentLayer.cpp:59
&gt; +bool WebContentLayer::isInvalid() const

Question: I&apos;m not very familiar with this part of the code yet, but I wonder if this is accidentally misleading, making it sound like the entire layer is dirty?  I just wanted to bring this up, its not my place to say this should be fixed =)

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:-659
&gt; -    verifyFloatRectsAlmostEqual(FloatRect(0.0f, 0.0f, 5.0f, 10.0f), testLayer-&gt;dirtyRect());

FYI we recently changed this - I wouldn&apos;t be surprised if this causes a patch conflict.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507123</commentid>
    <comment_count>30</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-21 12:20:52 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; (From update of attachment 116009 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116009&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/WebGLLayerChromium.cpp:90
&gt; &gt; +    if (m_needsDisplay)
&gt; 
&gt; should this be !m_needsDisplay ?

Oh nasty typo. I&apos;m surprised this didn&apos;t show up in the layout tests. Thanks for noticing this! Uploading a new patch.

&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebContentLayer.cpp:59
&gt; &gt; +bool WebContentLayer::isInvalid() const
&gt; 
&gt; Question: I&apos;m not very familiar with this part of the code yet, but I wonder if this is accidentally misleading, making it sound like the entire layer is dirty?  I just wanted to bring this up, its not my place to say this should be fixed =)

Sounds like another reason to make this consistent with LayerChromium (setNeedsDisplay/needsDisplay).

&gt; 
&gt; &gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:-659
&gt; &gt; -    verifyFloatRectsAlmostEqual(FloatRect(0.0f, 0.0f, 5.0f, 10.0f), testLayer-&gt;dirtyRect());
&gt; 
&gt; FYI we recently changed this - I wouldn&apos;t be surprised if this causes a patch conflict.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507124</commentid>
    <comment_count>31</comment_count>
      <attachid>116115</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-21 12:21:18 -0800</bug_when>
    <thetext>Created attachment 116115
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507641</commentid>
    <comment_count>32</comment_count>
      <attachid>116115</attachid>
    <who name="Scott Violet">sky</who>
    <bug_when>2011-11-22 09:35:05 -0800</bug_when>
    <thetext>Comment on attachment 116115
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:279
&gt;  void LayerChromium::resetNeedsDisplay()

Does this needs to be overriden to mark tiles as clean too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507759</commentid>
    <comment_count>33</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-22 12:38:42 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; (From update of attachment 116115 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116115&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:279
&gt; &gt;  void LayerChromium::resetNeedsDisplay()
&gt; 
&gt; Does this needs to be overriden to mark tiles as clean too?

Good point. That some of the needsDisplay functions are virtual but not others is  weird. Proper support for resetNeedsDisplay by ContentLayerChromium requires that we separate initial tile invalidation from invalidation from setNeedsDisplay. Seems like unnecessary complexity for something that&apos;s not really needed. I&apos;ll upload a new patch that just removes the resetNeedsDisplay function instead. To be consistent I&apos;m also making needsDisplay() virtual in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507761</commentid>
    <comment_count>34</comment_count>
      <attachid>116262</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-22 12:39:08 -0800</bug_when>
    <thetext>Created attachment 116262
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510322</commentid>
    <comment_count>35</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-28 16:34:39 -0800</bug_when>
    <thetext>This patch is marked as blocked on several other bugs but I don&apos;t see any actual dependency.  This would be very useful for fixing another tricky bug, could we land it ahead of the other ones?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510487</commentid>
    <comment_count>36</comment_count>
      <attachid>116893</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-28 22:08:00 -0800</bug_when>
    <thetext>Created attachment 116893
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510500</commentid>
    <comment_count>37</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-28 22:24:51 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; This patch is marked as blocked on several other bugs but I don&apos;t see any actual dependency.  This would be very useful for fixing another tricky bug, could we land it ahead of the other ones?

Sure, no prob. Latest patch is without any dependencies.

These changes are somewhat covered by LayerChromiumTest but I&apos;ve been wanting to add some additional tests once https://bugs.webkit.org/show_bug.cgi?id=72192 landed. I&apos;m OK landing this now and adding these additional unit tests once 72192 has landed. Created https://bugs.webkit.org/show_bug.cgi?id=73285 to remind myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510517</commentid>
    <comment_count>38</comment_count>
      <attachid>116893</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-28 22:53:02 -0800</bug_when>
    <thetext>Comment on attachment 116893
Patch

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

Thanks for updating this. This looks mostly good but still has a few things to address before landing, IMO

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:115
&gt; +void ContentLayerChromium::setNeedsDisplay(const FloatRect&amp; dirtyRect)

design question: is it right that this logic lives down on ContentLayerChromium instead of TiledLayerChromium? What about this logic is specific to content layers instead of other tiled layer types?

in practice today i don&apos;t think it makes much of a difference because the only other tiled layer subtype we have is ImageLayerChromium, which never does partial invalidations, but if somebody were to need to bugfix setNeedsDisplay() (which i will be doing soon) i think it makes more sense for all of this logic to exist on TiledLayerChromium instead of being pushed to the subclass

&gt; Source/WebKit/chromium/public/WebContentLayer.h:64
&gt; +    // Returns whether the layer is currently invalid.
&gt; +    WEBKIT_EXPORT bool isInvalid() const;

well this comment doesn&apos;t add very much

come to think of it, though, i&apos;m not really sure what the API is actually saying - what information does this communicate to the client of this API that they wouldn&apos;t know?  i can&apos;t find any user of invalidRect() in the aura codebase, nor would i. there are some cases where this API will be downright weird. example:

* client calls invalidateRect() over some large region
 - isInvalid() would return true
* compositor does an update/paint cycle that only covers some tiles of the invalidated region
 - paint() call made on the WebContentLayerClient
 - isInvalid() would return false
* the visible rect changes
* compositor does another update/paint cycle
 - paint() call is made on the WebContentLayerClient
 - isInvalid() still returns false

so isInvalid() is not a useful predictor for whether a paint call will be made, or really anything else except for whether the client has made an invalidate*() call and there hasn&apos;t been an update/paint cycle.

my vote is to remove it. alternately, describe what it does in some way that would make sense for a client of this API that isn&apos;t familiar with all of the internals of how the compositor works and come up with some way in which the API is useful

sorry to rant a bit but i want us to get into the habit of being very careful and judicious with our public APIs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510804</commentid>
    <comment_count>39</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-29 08:44:29 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; (From update of attachment 116893 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116893&amp;action=review
&gt; 
&gt; Thanks for updating this. This looks mostly good but still has a few things to address before landing, IMO
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:115
&gt; &gt; +void ContentLayerChromium::setNeedsDisplay(const FloatRect&amp; dirtyRect)
&gt; 
&gt; design question: is it right that this logic lives down on ContentLayerChromium instead of TiledLayerChromium? What about this logic is specific to content layers instead of other tiled layer types?

None, afaik. I&apos;ll happily move it to tiled layer class if no one knows why this is currently in the content layer class.

&gt; 
&gt; in practice today i don&apos;t think it makes much of a difference because the only other tiled layer subtype we have is ImageLayerChromium, which never does partial invalidations, but if somebody were to need to bugfix setNeedsDisplay() (which i will be doing soon) i think it makes more sense for all of this logic to exist on TiledLayerChromium instead of being pushed to the subclass

Agree.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebContentLayer.h:64
&gt; &gt; +    // Returns whether the layer is currently invalid.
&gt; &gt; +    WEBKIT_EXPORT bool isInvalid() const;
&gt; 
&gt; well this comment doesn&apos;t add very much
&gt; 
&gt; come to think of it, though, i&apos;m not really sure what the API is actually saying - what information does this communicate to the client of this API that they wouldn&apos;t know?  i can&apos;t find any user of invalidRect() in the aura codebase, nor would i. there are some cases where this API will be downright weird. example:
&gt; 
&gt; * client calls invalidateRect() over some large region
&gt;  - isInvalid() would return true
&gt; * compositor does an update/paint cycle that only covers some tiles of the invalidated region
&gt;  - paint() call made on the WebContentLayerClient
&gt;  - isInvalid() would return false
&gt; * the visible rect changes
&gt; * compositor does another update/paint cycle
&gt;  - paint() call is made on the WebContentLayerClient
&gt;  - isInvalid() still returns false
&gt; 
&gt; so isInvalid() is not a useful predictor for whether a paint call will be made, or really anything else except for whether the client has made an invalidate*() call and there hasn&apos;t been an update/paint cycle.
&gt; 
&gt; my vote is to remove it. alternately, describe what it does in some way that would make sense for a client of this API that isn&apos;t familiar with all of the internals of how the compositor works and come up with some way in which the API is useful

I vote for removing it too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510880</commentid>
    <comment_count>40</comment_count>
      <attachid>116991</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-29 10:10:17 -0800</bug_when>
    <thetext>Created attachment 116991
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510908</commentid>
    <comment_count>41</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-11-29 10:52:22 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; (In reply to comment #38)
&gt; &gt; come to think of it, though, i&apos;m not really sure what the API is actually saying - what information does this communicate to the client of this API that they wouldn&apos;t know?  i can&apos;t find any user of invalidRect() in the aura codebase, nor would i. there are some cases where this API will be downright weird. example:
&gt; &gt; 
&gt; &gt; * client calls invalidateRect() over some large region
&gt; &gt;  - isInvalid() would return true
&gt; &gt; * compositor does an update/paint cycle that only covers some tiles of the invalidated region
&gt; &gt;  - paint() call made on the WebContentLayerClient
&gt; &gt;  - isInvalid() would return false
&gt; &gt; * the visible rect changes
&gt; &gt; * compositor does another update/paint cycle
&gt; &gt;  - paint() call is made on the WebContentLayerClient
&gt; &gt;  - isInvalid() still returns false
&gt; &gt; 
&gt; &gt; so isInvalid() is not a useful predictor for whether a paint call will be made, or really anything else except for whether the client has made an invalidate*() call and there hasn&apos;t been an update/paint cycle.
&gt; &gt; 
&gt; &gt; my vote is to remove it. alternately, describe what it does in some way that would make sense for a client of this API that isn&apos;t familiar with all of the internals of how the compositor works and come up with some way in which the API is useful
&gt; 
&gt; I vote for removing it too.

Yes, remove it, nobody uses it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510913</commentid>
    <comment_count>42</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-29 11:00:57 -0800</bug_when>
    <thetext>WebContentLayer::invalidRect() has been removed and invalidate logic has been moved to TiledLayerChromium class in latest patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510933</commentid>
    <comment_count>43</comment_count>
      <attachid>116991</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-29 11:19:50 -0800</bug_when>
    <thetext>Comment on attachment 116991
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:297
&gt; +    IntRect dirty(IntPoint(), bounds());

I know this isn&apos;t what the code was before, but I think this should be contentBounds() instead of bounds().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510948</commentid>
    <comment_count>44</comment_count>
      <attachid>117008</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-29 11:32:13 -0800</bug_when>
    <thetext>Created attachment 117008
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510950</commentid>
    <comment_count>45</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-29 11:33:18 -0800</bug_when>
    <thetext>(In reply to comment #43)
&gt; (From update of attachment 116991 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116991&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:297
&gt; &gt; +    IntRect dirty(IntPoint(), bounds());
&gt; 
&gt; I know this isn&apos;t what the code was before, but I think this should be contentBounds() instead of bounds().

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511070</commentid>
    <comment_count>46</comment_count>
      <attachid>117008</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-29 13:33:40 -0800</bug_when>
    <thetext>Comment on attachment 117008
Patch

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

I&apos;m not sure if it&apos;s what you&apos;d like, but I can imagine not needing two virtual setNeedsDisplay functions. A little less code duplication/room for error later on?

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:109
&gt; +    virtual void setNeedsDisplay();

This could be an inline function that calls the virtual one above with IntRect(IntPoint(), contentBounds()).

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:295
&gt; +void TiledLayerChromium::setNeedsDisplay()

Then this function could go away entirely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511144</commentid>
    <comment_count>47</comment_count>
      <attachid>117055</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-29 15:13:52 -0800</bug_when>
    <thetext>Created attachment 117055
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511155</commentid>
    <comment_count>48</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-29 15:27:42 -0800</bug_when>
    <thetext>(In reply to comment #46)
&gt; (From update of attachment 117008 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117008&amp;action=review
&gt; 
&gt; I&apos;m not sure if it&apos;s what you&apos;d like, but I can imagine not needing two virtual setNeedsDisplay functions. A little less code duplication/room for error later on?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:109
&gt; &gt; +    virtual void setNeedsDisplay();
&gt; 
&gt; This could be an inline function that calls the virtual one above with IntRect(IntPoint(), contentBounds()).
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:295
&gt; &gt; +void TiledLayerChromium::setNeedsDisplay()
&gt; 
&gt; Then this function could go away entirely.

Glad you pointed this out. Made me realize that the patch included a subtle but possibly very important difference in behavior compared to before. Calling setNeedsDisplay() without an arg on a layer with empty bounds caused the needDisplay flag to be set.

New patch fixes this problem and adds a unit test case to check it. I also removed some code duplication but kept setNeedDisplay() virtual. Making this just an inlined LayerChromium function that calls the virtual setNeedsDisplay(FloatRect&amp;) will require us to explicitly call LayerChromium::setNeedsDisplay() in a few places. I&apos;m fine doing that but considering that the needDisplay() getter is currently also a virtual function I&apos;d prefer to keep it the way it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512343</commentid>
    <comment_count>49</comment_count>
      <attachid>117055</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-30 19:05:25 -0800</bug_when>
    <thetext>Comment on attachment 117055
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:109
&gt; +    virtual void setNeedsDisplay() { LayerChromium::setNeedsDisplay(FloatRect(FloatPoint(), contentBounds())); }

does this need to be virtual? the only override&apos;s implementation matches this one exactly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512419</commentid>
    <comment_count>50</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-30 21:17:10 -0800</bug_when>
    <thetext>(In reply to comment #49)
&gt; (From update of attachment 117055 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117055&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:109
&gt; &gt; +    virtual void setNeedsDisplay() { LayerChromium::setNeedsDisplay(FloatRect(FloatPoint(), contentBounds())); }
&gt; 
&gt; does this need to be virtual? the only override&apos;s implementation matches this one exactly

No, it doesn&apos;t. I just wanted some buy-in before changing that as we&apos;ll have to call LayerChromium::setNeedsDisplay() explicitly in a few places or change the name of one of the setNeedsDisplay functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512424</commentid>
    <comment_count>51</comment_count>
      <attachid>117324</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-30 21:19:32 -0800</bug_when>
    <thetext>Created attachment 117324
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512443</commentid>
    <comment_count>52</comment_count>
      <attachid>117324</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-30 21:40:30 -0800</bug_when>
    <thetext>Comment on attachment 117324
Patch

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

&gt; Source/WebCore/ChangeLog:17
&gt; +        No new tests. (OOPS!)

svn presubmit check will barf on this

&gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:142
&gt; +    LayerChromium::setNeedsDisplay();

why the qualifier here? setNeedsDisplay() isn&apos;t virtual or anything</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512445</commentid>
    <comment_count>53</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-30 21:41:50 -0800</bug_when>
    <thetext>(In reply to comment #50)
&gt; (In reply to comment #49)
&gt; &gt; (From update of attachment 117055 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117055&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:109
&gt; &gt; &gt; +    virtual void setNeedsDisplay() { LayerChromium::setNeedsDisplay(FloatRect(FloatPoint(), contentBounds())); }
&gt; &gt; 
&gt; &gt; does this need to be virtual? the only override&apos;s implementation matches this one exactly
&gt; 
&gt; No, it doesn&apos;t. I just wanted some buy-in before changing that as we&apos;ll have to call LayerChromium::setNeedsDisplay() explicitly in a few places or change the name of one of the setNeedsDisplay functions.

I&apos;m not sure I really understand what you are saying here.  It looks like there&apos;s only one zero-arg setNeedsDisplay() function in the *LayerChromium tree, unless I&apos;m missing one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512452</commentid>
    <comment_count>54</comment_count>
      <attachid>117332</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-30 21:45:14 -0800</bug_when>
    <thetext>Created attachment 117332
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512454</commentid>
    <comment_count>55</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-30 21:52:13 -0800</bug_when>
    <thetext>(In reply to comment #53)
&gt; (In reply to comment #50)
&gt; &gt; (In reply to comment #49)
&gt; &gt; &gt; (From update of attachment 117055 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117055&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:109
&gt; &gt; &gt; &gt; +    virtual void setNeedsDisplay() { LayerChromium::setNeedsDisplay(FloatRect(FloatPoint(), contentBounds())); }
&gt; &gt; &gt; 
&gt; &gt; &gt; does this need to be virtual? the only override&apos;s implementation matches this one exactly
&gt; &gt; 
&gt; &gt; No, it doesn&apos;t. I just wanted some buy-in before changing that as we&apos;ll have to call LayerChromium::setNeedsDisplay() explicitly in a few places or change the name of one of the setNeedsDisplay functions.
&gt; 
&gt; I&apos;m not sure I really understand what you are saying here.  It looks like there&apos;s only one zero-arg setNeedsDisplay() function in the *LayerChromium tree, unless I&apos;m missing one.

The last two patches I uploaded implement two different ways of making LayerChromium::setNeedsDisplay() not virtual. First patch calls LayerChromium::setNeedsDisplay() explicitly in ImageLayerChromium and WebContentLayer. The second instead renames setNeedsDisplay(FloatRect&amp;) to setNeedsDisplayRect(FloatRect&amp;). I&apos;m OK with landing either one of these last three patches. If I had to pick one out of the three I&apos;d go with number 3 and setNeedsDisplayRect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512462</commentid>
    <comment_count>56</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-30 21:56:34 -0800</bug_when>
    <thetext>I&apos;m still deeply confused :(. In c++ you can overload a function based on # of args so why can&apos;t we have

class LayerChromium {
  virtual void setNeedsDisplay(const FloatRect&amp;);
  void setNeedsDisplay() { setNeedsDisplay(FloatRect(FloatPoint(), contentBounds()); }
};

or is that what one of these patches does?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512464</commentid>
    <comment_count>57</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-30 22:04:07 -0800</bug_when>
    <thetext>(In reply to comment #56)
&gt; I&apos;m still deeply confused :(. In c++ you can overload a function based on # of args so why can&apos;t we have
&gt; 
&gt; class LayerChromium {
&gt;   virtual void setNeedsDisplay(const FloatRect&amp;);
&gt;   void setNeedsDisplay() { setNeedsDisplay(FloatRect(FloatPoint(), contentBounds()); }
&gt; };
&gt; 
&gt; or is that what one of these patches does?

We can but this code won&apos;t build if TiledLayerChromium only implements setNeedsDisplay(const FloatRect&amp;):

void someFunction(TiledLayerChromium *tiledLayer)
{
    tiledLayer-&gt;setNeedsDisplay();
}

it would have to be:

void someFunction(TiledLayerChromium *tiledLayer)
{
    static_cast&lt;LayerChromium&gt;(tiledLayer)-&gt;setNeedsDisplay();
}

The second to last patch handles this like above while the last patch avoids this by renaming the setNeedsDisplay(const FloatRect&amp;) function instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512467</commentid>
    <comment_count>58</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-30 22:09:03 -0800</bug_when>
    <thetext>class A {
public:
    virtual void foo(int) { }
    void foo() { foo(1); }
};

class B : public A {
};

int main() {
    B* b = new B;
    b-&gt;foo();
    return 0;
}

seems to work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512470</commentid>
    <comment_count>59</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-30 22:16:00 -0800</bug_when>
    <thetext>(In reply to comment #58)
&gt; class A {
&gt; public:
&gt;     virtual void foo(int) { }
&gt;     void foo() { foo(1); }
&gt; };
&gt; 
&gt; class B : public A {
&gt; };
&gt; 
&gt; int main() {
&gt;     B* b = new B;
&gt;     b-&gt;foo();
&gt;     return 0;
&gt; }
&gt; 
&gt; seems to work?

yes, that works :)

class A {
public:
    virtual void foo(int) { }
    void foo() { foo(1); }
};

class B : public A {
    virtual void foo(int) { }
};

int main() {
    B* b = new B;
    b-&gt;foo();
    return 0;
}

but this doesn&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512473</commentid>
    <comment_count>60</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-30 22:18:42 -0800</bug_when>
    <thetext>OK, thanks for being patient.  That&apos;s fucked up.

Let&apos;s go with the rect suffix version and file a bug to port everything to Go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512483</commentid>
    <comment_count>61</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-30 22:25:09 -0800</bug_when>
    <thetext>(In reply to comment #60)
&gt; OK, thanks for being patient.  That&apos;s fucked up.
&gt; 
&gt; Let&apos;s go with the rect suffix version and file a bug to port everything to Go.

Haha, no prob. I changed the review flag on the rect suffix version of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512484</commentid>
    <comment_count>62</comment_count>
      <attachid>117332</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-30 22:25:34 -0800</bug_when>
    <thetext>Comment on attachment 117332
Patch

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

OK hurray! R=me

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:218
&gt; +        setNeedsDisplayRect(FloatRect(0, 0, bounds().width(), bounds().height()));

the old code used bounds() here but should this really be contentBounds()?

feel free to fix in a follow-up if that&apos;s the case

&gt; Source/WebKit/chromium/src/WebMediaPlayerClientImpl.cpp:151
&gt; +        m_videoLayer-&gt;setNeedsDisplayRect(IntRect(0, 0, m_videoLayer-&gt;bounds().width(), m_videoLayer-&gt;bounds().height()));

hm, shouldn&apos;t this just call setNeedsDisplay() with no args?

again this can be done in a follow-up, IMO</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512535</commentid>
    <comment_count>63</comment_count>
      <attachid>117332</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-30 23:40:23 -0800</bug_when>
    <thetext>Comment on attachment 117332
Patch

Clearing flags on attachment: 117332

Committed r101623: &lt;http://trac.webkit.org/changeset/101623&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512536</commentid>
    <comment_count>64</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-30 23:40:32 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512846</commentid>
    <comment_count>65</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-01 09:38:44 -0800</bug_when>
    <thetext>(In reply to comment #64)
&gt; All reviewed patches have been landed.  Closing bug.

:(

class A {
public:
    virtual void foo(int) { }
    void foo() { foo(1); }
};

class B : public A {
    using A::foo; // expose base class function hidden by virtual
    virtual void foo(int) { }
};

int main() {
    B* b = new B;
    b-&gt;foo();
    return 0;
}

^ This works.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114189</attachid>
            <date>2011-11-08 18:26:54 -0800</date>
            <delta_ts>2011-11-09 15:37:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71872-20111108182653.patch</filename>
            <type>text/plain</type>
            <size>4960</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk1NzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlMmZmYzIwYjIxOWIyYjU1
NDczZWYzMmVhNWQyYWUxNzk0ZTIxN2MzLi5jMTc1YWNhOTQ0NjkxOWVlMzk4M2MzY2UxOTIyNTNk
YzllZTg3ZWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMTEtMDggIERhdmlk
IFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIElt
cHJvdmUgdGlsZSBpbnZhbGlkYXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MTg3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFZpcnR1YWxpemUgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5
IHNvIHRoYXQgZGlydHkgcmVjdGFuZ2xlcworICAgICAgICBjYW4gYmUgaGFuZGxlZCBkaXJlY3Rs
eSBieSB0aGUgVGlsZWRMYXllckNocm9taXVtIGNsYXNzLiBCeQorICAgICAgICBpbnZhbGlkYXRp
bmcgZXhpc3RpbmcgdGlsZXMgdXNpbmcgdGhlIGluaXRpYWwgZGlydHkgcmVjdGFuZ2xlcworICAg
ICAgICBpbnN0ZWFkIG9mIHRoZWlyIHVuaW9uIHdlIGNhbiBhdm9pZCBhIGxhcmdlIGFtb3VudCBv
ZiB1bm5lY2Vzc2FyeQorICAgICAgICB0aWxlIHVwZGF0ZXMuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmludmFsaWRhdGVSZWN0KToK
KwogMjAxMS0xMS0wOCAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IFtFeHRlbnNpb24gQVBJXVtDaHJvbWl1bV0gaW5qZWN0ZWQg
ZXh0ZW5zaW9uIEFQSSBuZWVkcyB0byByZXR1cm4gYW4gb2JqZWN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggY2E4YjNiZDc2MWYwODE1ZTQ3YjZjZmIwNDkxYTFkOTcy
ODc5ZjA0Yy4uZTM2OTNkYmMyMGIzZDY3MGY1ODU0Yzk4MmM4NmEyYWUxNGE1N2Y3NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExh
eWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTAyLDEwICsxMDIsNiBAQCB2b2lk
IENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiAgICAgaWYgKGxh
eWVyUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFJlY3QgZGlydHkg
PSBlbmNsb3NpbmdJbnRSZWN0KG1fZGlydHlSZWN0KTsKLSAgICBkaXJ0eS5pbnRlcnNlY3QoSW50
UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkpKTsKLSAgICBpbnZhbGlkYXRlUmVjdChk
aXJ0eSk7Ci0KICAgICBpZiAoIWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47CiAKQEAg
LTExOCw2ICsxMTQsMjAgQEAgYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50
KCkgY29uc3QKICAgICByZXR1cm4gbV9kZWxlZ2F0ZSAmJiBtX2RlbGVnYXRlLT5kcmF3c0NvbnRl
bnQoKSAmJiBUaWxlZExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpOwogfQogCit2b2lkIENv
bnRlbnRMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0
eVJlY3QpCit7CisgICAgSW50UmVjdCBkaXJ0eSA9IGVuY2xvc2luZ0ludFJlY3QoZGlydHlSZWN0
KTsKKyAgICBpbnZhbGlkYXRlUmVjdChkaXJ0eSk7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30K
Kwordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBJ
bnRSZWN0IGRpcnR5KEludFBvaW50KCksIGJvdW5kcygpKTsKKyAgICBpbnZhbGlkYXRlUmVjdChk
aXJ0eSk7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwogdm9pZCBDb250ZW50TGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0KiBob3N0KQog
ewogI2lmIFVTRShTS0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKaW5kZXggYjgz
NGU2NzZiZDYzNDQ1YWE0NTNiMzY1ZWVlMjgwMjQwZjM4MDljMS4uYTRhMTE0NjAwZGFmMDQxNDhj
MTNlM2VjNzk5Njg1N2FjYTY3MDIzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
CkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Db250ZW50TGF5ZXJDaHJv
bWl1bSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBD
b250ZW50TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApp
bmRleCBiYjBlYzYyNjUwMzM2OGY0OTljOTUzMmRkNjk0NDljZWJhMzcwYzk0Li5kN2U1MzUzOTA0
ZjFmMDk3OTk1YWYyMWQxMzA3MmYzZmEwYjlmYzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0x
MDUsOCArMTA1LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0TWFza0xheWVyKExheWVyQ2hyb21p
dW0qIG1hc2tMYXllcikgeyBtX21hc2tMYXllciA9IG1hc2tMYXllcjsgc2V0TmVlZHNDb21taXQo
KTsgfQogICAgIExheWVyQ2hyb21pdW0qIG1hc2tMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFz
a0xheWVyLmdldCgpOyB9CiAKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJl
Y3QmIGRpcnR5UmVjdCk7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgY29uc3QgRmxvYXRSZWN0JiBkaXJ0
eVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2RpcnR5UmVjdDsgfQogICAgIHZvaWQgcmVzZXROZWVk
c0Rpc3BsYXkoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZmNjNDZk
OTkzZDU0MGE0MjE5ZDdmMjcwMTAwMTg3MzhlZjdiOGZmZS4uYmQ2MTc1YmEwZDQ1NzBmNTYzYzQ2
ZTE1NTQ0OTYxZmMzYTBkOTU2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBA
IC0yNzMsOCArMjczLDYgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmludmFsaWRhdGVSZWN0
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIGlmICghbV90aWxlciB8fCBjb250ZW50
UmVjdC5pc0VtcHR5KCkgfHwgbV9za2lwc0RyYXcpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
dGlsZXItPmdyb3dMYXllclRvQ29udGFpbihjb250ZW50UmVjdCk7Ci0KICAgICAvLyBEaXJ0eSBy
ZWN0cyBhcmUgYWx3YXlzIGluIGxheWVyIHNwYWNlLCBhcyB0aGUgbGF5ZXIgY291bGQgYmUgcmVw
b3NpdGlvbmVkCiAgICAgLy8gYWZ0ZXIgaW52YWxpZGF0aW9uLgogICAgIGNvbnN0IEludFJlY3Qg
bGF5ZXJSZWN0ID0gbV90aWxlci0+Y29udGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVjdCk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114380</attachid>
            <date>2011-11-09 15:37:21 -0800</date>
            <delta_ts>2011-11-09 16:14:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71872-20111109153720.patch</filename>
            <type>text/plain</type>
            <size>13978</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk3NDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxZjY5NmMwZjliMTk3MjQ5
NzU3ZmRjYmQ4NjA0NGFmOGQ2ZjBhMjA1Li4yZmY3NDQ3MjU2MmRmY2ZkZTM4NzEwY2U0Yzc1NWNm
Nzk5YjY4MTJlIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTEtMTEtMDkgIERhdmlk
IFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIElt
cHJvdmUgdGlsZSBpbnZhbGlkYXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MTg3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFZpcnR1YWxpemUgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5
IHNvIHRoYXQgZGlydHkgcmVjdGFuZ2xlcworICAgICAgICBjYW4gYmUgaGFuZGxlZCBkaXJlY3Rs
eSBieSB0aGUgVGlsZWRMYXllckNocm9taXVtIGNsYXNzLgorICAgICAgICBSZXBsYWNlIExheWVy
Q2hyb21pdW06OmludmFsaWRSZWN0KCkgd2l0aCA6OmludmFsaWQoKSBhbmQgcmVtb3ZlCisgICAg
ICAgIHVubmVjZXNzYXJ5IHVuaW9uaXppbmcgb2YgZGlydHkgcmVjdGFuZ2xlcy4gQnkgaW52YWxp
ZGF0aW5nIGV4aXN0aW5nCisgICAgICAgIHRpbGVzIHVzaW5nIHRoZSBpbml0aWFsIGRpcnR5IHJl
Y3RhbmdsZXMgaW5zdGVhZCBvZiB0aGVpciB1bmlvbiB3ZQorICAgICAgICBhdm9pZCBhIGxhcmdl
IGFtb3VudCBvZiB1bm5lY2Vzc2FyeSB0aWxlIHVwZGF0ZXMuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVu
dHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpzZXRO
ZWVkc0Rpc3BsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJv
bWl1bTo6c2V0Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVt
OjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cmVz
ZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmRpcnR5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppbnZhbGlkYXRlUmVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
V2ViR0xMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisKIDIwMTEtMTEtMDkgIENocmlzIEZs
ZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogY3Jhc2ggd2hlbiBh
Y2Nlc3Npbmcgc2VsZWN0ZWRUYWIgaW4gYSB0YWIgbGlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCA0ZjFmYTE1NDA1MzNiZTE0YTRmNmUzYTBkNzA2ZDFhYjk0Mjg0YTU0Li4zMzUwMWYy
M2U0OWYzZGEyOTg5NjdhMjQ1NGRkYTRiMzBjZmQzNjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTExLTA5ICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1h
bkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBJbXByb3ZlIHRpbGUgaW52YWxp
ZGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzE4NzIKKworICAgICAgICBSZXBsYWNlIFdlYkNvbnRlbnRMYXllcjo6aW52YWxpZFJlY3QoKSB3
aXRoIDo6aW52YWxpZCgpLiBJbnZhbGlkYXRpb24KKyAgICAgICAgaXMgbGF5ZXIgdHlwZSBzcGVj
aWZpYyBhbmQgdGhlIGN1cnJlbnRseSBpbnZhbGlkIHJlZ2lvbiBjYW5ub3QKKyAgICAgICAgbmVj
ZXNzYXJpbHkgYmUgcmVwcmVzZW50ZWQgYnkgYSByZWN0YW5nbGUuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViQ29udGVudExheWVy
Lmg6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllci5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvbnRlbnRMYXllcjo6aW52YWxpZCk6CisKIDIwMTEtMTEtMDkgIEhlbnJpayBHcnVuZWxs
ICA8Z3J1bmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkaW5nIG1pc3NpbmcgaW1wbGVt
ZW50YXRpb24gb2YgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpsYWJlbCgpLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNDQ5NDU4NmE1N2NhMTZiYzRiNGYyMzI0
MTBkYjhmN2ZkNGNkODhjMS4uNDE1YWVmNDk0MzdmZDM1ZjcyYWNkMDQ1YWZmZWNjYTY0MjZhZWVl
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzMkRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCkBAIC02Nyw3ICs2Nyw3
IEBAIGJvb2wgQ2FudmFzMkRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogCiB2
b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFw
aGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXImKQogewotICAgIGlmIChtX2RpcnR5UmVj
dC5pc0VtcHR5KCkgfHwgIWRyYXdzQ29udGVudCgpKQorICAgIGlmICghbV9kaXJ0eSB8fCAhZHJh
d3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2NvbnRleHQpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCBjYThiM2JkNzYxZjA4MTVlNDdi
NmNmYjA0OTFhMWQ5NzI4NzlmMDRjLi5iMGJlZjAyZjBiYmVhYWYyMTA2YjE0YTFjYmM0NDRhMmUz
NTc5Y2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC0xMDIsMTAg
KzEwMiw2IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5
KCkKICAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
SW50UmVjdCBkaXJ0eSA9IGVuY2xvc2luZ0ludFJlY3QobV9kaXJ0eVJlY3QpOwotICAgIGRpcnR5
LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSkpOwotICAgIGlu
dmFsaWRhdGVSZWN0KGRpcnR5KTsKLQogICAgIGlmICghZHJhd3NDb250ZW50KCkpCiAgICAgICAg
IHJldHVybjsKIApAQCAtMTE4LDYgKzExNCwyMCBAQCBib29sIENvbnRlbnRMYXllckNocm9taXVt
OjpkcmF3c0NvbnRlbnQoKSBjb25zdAogICAgIHJldHVybiBtX2RlbGVnYXRlICYmIG1fZGVsZWdh
dGUtPmRyYXdzQ29udGVudCgpICYmIFRpbGVkTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCk7
CiB9CiAKK3ZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheShjb25zdCBG
bG9hdFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBJbnRSZWN0IGRpcnR5ID0gZW5jbG9zaW5nSW50
UmVjdChkaXJ0eVJlY3QpOworICAgIGludmFsaWRhdGVSZWN0KGRpcnR5KTsKKyAgICBMYXllckNo
cm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoKTsKK30KKwordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBJbnRSZWN0IGRpcnR5KEludFBvaW50KCksIGJv
dW5kcygpKTsKKyAgICBpbnZhbGlkYXRlUmVjdChkaXJ0eSk7CisgICAgTGF5ZXJDaHJvbWl1bTo6
c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0
ZVRleHR1cmVVcGRhdGVyKGNvbnN0IENDTGF5ZXJUcmVlSG9zdCogaG9zdCkKIHsKICNpZiBVU0Uo
U0tJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IGI4MzRlNjc2YmQ2MzQ0
NWFhNDUzYjM2NWVlZTI4MDI0MGYzODA5YzEuLmE0YTExNDYwMGRhZjA0MTQ4YzEzZTNlYzc5OTY4
NTdhY2E2NzAyMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApAQCAtNTAsNiAr
NTAsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q29udGVudExheWVyQ2hyb21pdW0oKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzRGlzcGxheSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ29udGVudExheWVy
Q2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNw
cAppbmRleCAzNjMzNjI5NjdhY2NkZWJjMjU1OWUyOWMyNGQ0M2MxYzg4ODgwMzE3Li5mM2JkYWZl
NGY2Y2YzMzdlMjBhZTM2YzE2M2QxNGM1OGY5OGI3NTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJD
aHJvbWl1bS5jcHAKQEAgLTEzOSwxOCArMTM5LDE3IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVt
OjpzZXRDb250ZW50cyhJbWFnZSogY29udGVudHMpCiAKICAgICBtX2NvbnRlbnRzID0gY29udGVu
dHM7CiAgICAgbV9pbWFnZUZvckN1cnJlbnRGcmFtZSA9IG1fY29udGVudHMtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgbV9kaXJ0eVJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAs
IDApLCBib3VuZHMoKSk7CiAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgc2V0T3BhcXVlKCFt
X2NvbnRlbnRzLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsKIH0KIAogdm9pZCBJbWFnZUxheWVy
Q2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKIHsKLSAgICBpZiAoIW1fZGlydHlSZWN0
LmlzRW1wdHkoKSkgeworICAgIGlmIChtX2RpcnR5KSB7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0
ZXItPnVwZGF0ZUZyb21JbWFnZShtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpKTsKICAgICAgICAgdXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKTsKICAgICAgICAg
SW50UmVjdCBwYWludFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKTsKLSAgICAgICAg
aWYgKCFtX2RpcnR5UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fZGlydHkpIHsKICAg
ICAgICAgICAgIGludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7CiAgICAgICAgICAgICByZXNldE5l
ZWRzRGlzcGxheSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDFiZTc5
ODU1YzFlNmIzZmUxMjk3MjQyYmMyOTg0MDU2ZDQwOTc4YmIuLjQ2OWJmMDEyNDQwNmZmYzkwZTkx
ZjgzMDFjYjQzZGE1ODE3MTBmNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC01Niw2ICs1
Niw3IEBAIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEND
TGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCiAKIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0o
Q0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKICAgICA6IG1fZGVsZWdhdGUoZGVsZWdhdGUpCisg
ICAgLCBtX2RpcnR5KGZhbHNlKQogICAgICwgbV9sYXllcklkKHNfbmV4dExheWVySWQrKykKICAg
ICAsIG1fcGFyZW50KDApCiAgICAgLCBtX2FuY2hvclBvaW50KDAuNSwgMC41KQpAQCAtMjU4LDIw
ICsyNTksMTggQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxv
YXRSZWN0JiBkaXJ0eVJlY3QpCiAgICAgLy8gU2ltcGx5IG1hcmsgdGhlIGNvbnRlbnRzIGFzIGRp
cnR5LiBGb3Igbm9uLXJvb3QgbGF5ZXJzLCB0aGUgY2FsbCB0bwogICAgIC8vIHNldE5lZWRzQ29t
bWl0IHdpbGwgc2NoZWR1bGUgYSBmcmVzaCBjb21wb3NpdGluZyBwYXNzLgogICAgIC8vIEZvciB0
aGUgcm9vdCBsYXllciwgc2V0TmVlZHNDb21taXQgaGFzIG5vIGVmZmVjdC4KLSAgICBtX2RpcnR5
UmVjdC51bml0ZShkaXJ0eVJlY3QpOwotICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgTGF5ZXJD
aHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0
TmVlZHNEaXNwbGF5KCkKIHsKLSAgICBtX2RpcnR5UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50
KCkpOwotICAgIG1fZGlydHlSZWN0LnNldFNpemUoYm91bmRzKCkpOworICAgIG1fZGlydHkgPSB0
cnVlOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVz
ZXROZWVkc0Rpc3BsYXkoKQogewotICAgIG1fZGlydHlSZWN0ID0gRmxvYXRSZWN0KCk7CisgICAg
bV9kaXJ0eSA9IGZhbHNlOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVz
VG8oQ0NMYXllckltcGwqIGxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGJiMGVjNjI2NTAz
MzY4ZjQ5OWM5NTMyZGQ2OTQ0OWNlYmEzNzBjOTQuLjAzMzBjZWZiOGRjNmJkYTNhY2Q3ZTgxMWJi
MmU4ZWVjZTViY2ZmMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTEwNSw5ICsxMDUsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRNYXNrTGF5ZXIoTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyKSB7
IG1fbWFza0xheWVyID0gbWFza0xheWVyOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgTGF5ZXJD
aHJvbWl1bSogbWFza0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIuZ2V0KCk7IH0K
IAotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KTsK
LSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotICAgIGNvbnN0IEZsb2F0UmVjdCYgZGlydHlS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kaXJ0eVJlY3Q7IH0KKyAgICBjb25zdCBib29sIGRpcnR5
KCkgY29uc3QgeyByZXR1cm4gbV9kaXJ0eTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rp
c3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoKTsKICAgICB2b2lkIHJlc2V0TmVlZHNEaXNwbGF5KCk7CiAKICAgICB2b2lk
IHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyBzZXROZWVk
c0NvbW1pdCgpOyB9CkBAIC0yMTIsOCArMjEyLDggQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBz
ZXROZWVkc0NvbW1pdCgpOwogCi0gICAgLy8gVGhlIGRpcnR5IHJlY3QgaXMgdGhlIHVuaW9uIG9m
IGRhbWFnZWQgcmVnaW9ucyB0aGF0IG5lZWQgcmVwYWludGluZy91cGRhdGluZy4KLSAgICBGbG9h
dFJlY3QgbV9kaXJ0eVJlY3Q7CisgICAgLy8gVGhlIGRpcnR5IGZsYWcgaXMgc2V0IHdoZW4gbGF5
ZXIgbmVlZCByZXBhaW50aW5nL3VwZGF0aW5nLgorICAgIGJvb2wgbV9kaXJ0eTsKIAogICAgIC8v
IFRoZSB1cGRhdGUgcmVjdCBpcyB0aGUgcmVnaW9uIG9mIHRoZSBjb21wb3NpdG9yIHJlc291cmNl
IHRoYXQgd2FzIGFjdHVhbGx5IHVwZGF0ZWQgYnkgdGhlIGNvbXBvc2l0b3IuCiAgICAgLy8gRm9y
IGxheWVycyB0aGF0IG1heSBkbyB1cGRhdGluZyBvdXRzaWRlIHRoZSBjb21wb3NpdG9yJ3MgY29u
dHJvbCAoaS5lLiBwbHVnaW4gbGF5ZXJzKSwgdGhpcyBpbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVk
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZmNjNDZkOTkzZDU0MGE0MjE5ZDdmMjcwMTAwMTg3Mzhl
ZjdiOGZmZS4uYmQ2MTc1YmEwZDQ1NzBmNTYzYzQ2ZTE1NTQ0OTYxZmMzYTBkOTU2YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0yNzMsOCArMjczLDYgQEAgdm9pZCBUaWxl
ZExheWVyQ2hyb21pdW06OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KQogICAgIGlmICghbV90aWxlciB8fCBjb250ZW50UmVjdC5pc0VtcHR5KCkgfHwgbV9za2lwc0Ry
YXcpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFpbihj
b250ZW50UmVjdCk7Ci0KICAgICAvLyBEaXJ0eSByZWN0cyBhcmUgYWx3YXlzIGluIGxheWVyIHNw
YWNlLCBhcyB0aGUgbGF5ZXIgY291bGQgYmUgcmVwb3NpdGlvbmVkCiAgICAgLy8gYWZ0ZXIgaW52
YWxpZGF0aW9uLgogICAgIGNvbnN0IEludFJlY3QgbGF5ZXJSZWN0ID0gbV90aWxlci0+Y29udGVu
dFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVt
LmNwcAppbmRleCAyMzk0NTY4ZjJkODI3OGY1OTc5YTdmZTBjNTYxNWQ5ZjcyMDk4YjY3Li4xYjAw
NjNlY2IyOGIxZWM4M2U1OGYyNWUyYzIyMDk4ZWM2MDA2OGI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5
ZXJDaHJvbWl1bS5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06
OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEMK
ICAgICBpZiAoIW1fZGVsZWdhdGUgfHwgIW1fcHJvdmlkZXIpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5KCkgJiYgdGV4dHVyZXNWYWxpZCgpKSB7CisgICAg
aWYgKCFtX2RpcnR5ICYmIHRleHR1cmVzVmFsaWQoKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVk
IHBsYW5lID0gMDsgcGxhbmUgPCBtX3BsYW5lczsgcGxhbmUrKykgewogICAgICAgICAgICAgTWFu
YWdlZFRleHR1cmUqIHRleCA9IG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS5nZXQoKTsKICAg
ICAgICAgICAgIGlmICghdGV4LT5yZXNlcnZlKHRleC0+c2l6ZSgpLCB0ZXgtPmZvcm1hdCgpKSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
V2ViR0xMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMTdjNWRmOWFiOTQ0Yjg4NzI5
MTc1M2IxOTQ0OGUzMmU0NmEzNGU0My4uYzRiZDU4YWEyZDk4OGM1MGUwNmE5ODJmNDJmZmI5ZDVl
ZmQ3ZWYyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCkBAIC03MCw3ICs3MCw3
IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdy
YXBoaWNzQ29udGV4dDNEKiByZW5kZXJlckNvCiAgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fZGlydHlSZWN0LmlzRW1wdHkoKSkKKyAgICBpZiAo
IW1fZGlydHkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3RleHR1cmVDaGFuZ2VkKSB7
CkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiByZW5kZXJlckNvCiAgICAgICAgIG1fdGV4
dHVyZUNoYW5nZWQgPSBmYWxzZTsKICAgICB9CiAgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBv
ZiB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgotICAgIGlmICghbV9kaXJ0eVJl
Y3QuaXNFbXB0eSgpICYmIG1fdGV4dHVyZVVwZGF0ZWQpIHsKKyAgICBpZiAobV9kaXJ0eSAmJiBt
X3RleHR1cmVVcGRhdGVkKSB7CiAgICAgICAgIC8vIHByZXBhcmVUZXh0dXJlIGNvcGllcyB0aGUg
Y29udGVudHMgb2YgdGhlIG9mZi1zY3JlZW4gcmVuZGVyIHRhcmdldCBpbnRvIHRoZSB0ZXh0dXJl
CiAgICAgICAgIC8vIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuCiAgICAgICAgIC8vCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllci5oCmluZGV4IDUzMGE1
ZTlhZmI2MzFiZjk4NmI1MjJhMWM0ZjYwM2FhMGEwNDVmZDEuLjFlY2U1ZWExODE4YWMyMzJjOTdk
ZDVmMmRkYWU2YTM2NDg1NjcyM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkNvbnRlbnRMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkNvbnRlbnRMYXllci5oCkBAIC02MCw4ICs2MCw4IEBAIHB1YmxpYzoKICAgICAvLyBT
ZXRzIHRoZSBlbnRpcmUgbGF5ZXIgYXMgaW52YWxpZCwgaS5lLiBuZWVkcyB0byB1cGRhdGUgaXRz
IGNvbnRlbnQuCiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGludmFsaWRhdGUoKTsKIAotICAgIC8v
IFJldHVybnMgdGhlIHJlZ2lvbiBvZiB0aGUgbGF5ZXIgdGhhdCBpcyBjdXJyZW50bHkgaW52YWxp
ZC4KLSAgICBXRUJLSVRfRVhQT1JUIFdlYkZsb2F0UmVjdCBpbnZhbGlkUmVjdCgpIGNvbnN0Owor
ICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IGludmFsaWQuCisg
ICAgV0VCS0lUX0VYUE9SVCBib29sIGludmFsaWQoKSBjb25zdDsKIAogI2lmIFdFQktJVF9JTVBM
RU1FTlRBVElPTgogICAgIFdlYkNvbnRlbnRMYXllcihjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2Vi
Q29udGVudExheWVySW1wbD4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkNvbnRlbnRMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJD
b250ZW50TGF5ZXIuY3BwCmluZGV4IGRlOGQ5OThhZTk4YzRjMWNkZWQ1NmI3YTQ4NzhjOGYzNDRl
MjhhZDguLmUxOWUyNGUyYWJmM2NlZjhlZmYzZTEwNTI1OGMyYTdmMWRmM2FjMTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcApAQCAtNTYsOSAr
NTYsOSBAQCB2b2lkIFdlYkNvbnRlbnRMYXllcjo6aW52YWxpZGF0ZSgpCiAgICAgdW53cmFwPFdl
YkNvbnRlbnRMYXllckltcGw+KCktPnNldE5lZWRzRGlzcGxheSgpOwogfQogCi1XZWJGbG9hdFJl
Y3QgV2ViQ29udGVudExheWVyOjppbnZhbGlkUmVjdCgpIGNvbnN0Citib29sIFdlYkNvbnRlbnRM
YXllcjo6aW52YWxpZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdlYkZsb2F0UmVjdChjb25zdFVu
d3JhcDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5kaXJ0eVJlY3QoKSk7CisgICAgcmV0dXJuIGNv
bnN0VW53cmFwPFdlYkNvbnRlbnRMYXllckltcGw+KCktPmRpcnR5KCk7CiB9CiAKIFdlYkNvbnRl
bnRMYXllcjo6V2ViQ29udGVudExheWVyKGNvbnN0IFBhc3NSZWZQdHI8V2ViQ29udGVudExheWVy
SW1wbD4mIG5vZGUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114388</attachid>
            <date>2011-11-09 16:14:46 -0800</date>
            <delta_ts>2011-11-09 17:02:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71872-20111109161445.patch</filename>
            <type>text/plain</type>
            <size>13984</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk3NDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxZjY5NmMwZjliMTk3MjQ5
NzU3ZmRjYmQ4NjA0NGFmOGQ2ZjBhMjA1Li43YjVhZGJkZjk0MGEyMDBjYzQ1NjE3MWFlNWE5ZDFl
MGY3OTRjMmEyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTEtMTEtMDkgIERhdmlk
IFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIElt
cHJvdmUgdGlsZSBpbnZhbGlkYXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MTg3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFZpcnR1YWxpemUgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5
IHNvIHRoYXQgZGlydHkgcmVjdGFuZ2xlcworICAgICAgICBjYW4gYmUgaGFuZGxlZCBkaXJlY3Rs
eSBieSB0aGUgVGlsZWRMYXllckNocm9taXVtIGNsYXNzLgorICAgICAgICBSZXBsYWNlIExheWVy
Q2hyb21pdW06OmRpcnR5UmVjdCgpIHdpdGggOjppc0RpcnR5KCkgYW5kIHJlbW92ZQorICAgICAg
ICB1bm5lY2Vzc2FyeSB1bmlvbml6aW5nIG9mIGRpcnR5IHJlY3RhbmdsZXMuIEJ5IGludmFsaWRh
dGluZyBleGlzdGluZworICAgICAgICB0aWxlcyB1c2luZyB0aGUgaW5pdGlhbCBkaXJ0eSByZWN0
YW5nbGVzIGluc3RlYWQgb2YgdGhlaXIgdW5pb24gd2UKKyAgICAgICAgYXZvaWQgYSBsYXJnZSBh
bW91bnQgb2YgdW5uZWNlc3NhcnkgdGlsZSB1cGRhdGVzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRz
SWZEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6c2V0TmVl
ZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21p
dW06OnNldENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6
cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJlc2V0
TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjppc0RpcnR5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppbnZhbGlkYXRlUmVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
V2ViR0xMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisKIDIwMTEtMTEtMDkgIENocmlzIEZs
ZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogY3Jhc2ggd2hlbiBh
Y2Nlc3Npbmcgc2VsZWN0ZWRUYWIgaW4gYSB0YWIgbGlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCA0ZjFmYTE1NDA1MzNiZTE0YTRmNmUzYTBkNzA2ZDFhYjk0Mjg0YTU0Li41NzA1MDNl
NjU4MmZiMDM1M2ZlMDRkOGE3NTY4MWY0MGUxYzJlYmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTExLTA5ICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1h
bkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBJbXByb3ZlIHRpbGUgaW52YWxp
ZGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzE4NzIKKworICAgICAgICBSZXBsYWNlIFdlYkNvbnRlbnRMYXllcjo6aW52YWxpZFJlY3QoKSB3
aXRoIDo6aXNJbnZhbGlkKCkuIEludmFsaWRhdGlvbgorICAgICAgICBpcyBsYXllciB0eXBlIHNw
ZWNpZmljIGFuZCB0aGUgY3VycmVudGx5IGludmFsaWQgcmVnaW9uIGNhbm5vdAorICAgICAgICBu
ZWNlc3NhcmlseSBiZSByZXByZXNlbnRlZCBieSBhIHJlY3RhbmdsZS4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHB1YmxpYy9XZWJDb250ZW50TGF5
ZXIuaDoKKyAgICAgICAgKiBzcmMvV2ViQ29udGVudExheWVyLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29udGVudExheWVyOjppc0ludmFsaWQpOgorCiAyMDExLTExLTA5ICBIZW5yaWsgR3J1
bmVsbCAgPGdydW5lbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZGluZyBtaXNzaW5nIGlt
cGxlbWVudGF0aW9uIG9mIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6bGFiZWwoKS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJE
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDQ0OTQ1ODZhNTdjYTE2YmM0YjRm
MjMyNDEwZGI4ZjdmZDRjZDg4YzEuLjQxNWFlZjQ5NDM3ZmQzNWY3MmFjZDA0NWFmZmVjY2E2NDI2
YWVlZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcApAQCAtNjcsNyAr
NjcsNyBAQCBib29sIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QK
IAogdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMo
R3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJikKIHsKLSAgICBpZiAobV9kaXJ0
eVJlY3QuaXNFbXB0eSgpIHx8ICFkcmF3c0NvbnRlbnQoKSkKKyAgICBpZiAoIW1fZGlydHkgfHwg
IWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9jb250ZXh0KSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggY2E4YjNiZDc2MWYwODE1
ZTQ3YjZjZmIwNDkxYTFkOTcyODc5ZjA0Yy4uYjBiZWYwMmYwYmJlYWFmMjEwNmIxNGExY2JjNDQ0
YTJlMzU3OWNjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTAy
LDEwICsxMDIsNiBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZE
aXJ0eSgpCiAgICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEludFJlY3QgZGlydHkgPSBlbmNsb3NpbmdJbnRSZWN0KG1fZGlydHlSZWN0KTsKLSAgICBk
aXJ0eS5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkpKTsKLSAg
ICBpbnZhbGlkYXRlUmVjdChkaXJ0eSk7Ci0KICAgICBpZiAoIWRyYXdzQ29udGVudCgpKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTExOCw2ICsxMTQsMjAgQEAgYm9vbCBDb250ZW50TGF5ZXJDaHJv
bWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKICAgICByZXR1cm4gbV9kZWxlZ2F0ZSAmJiBtX2Rl
bGVnYXRlLT5kcmF3c0NvbnRlbnQoKSAmJiBUaWxlZExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVu
dCgpOwogfQogCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoY29u
c3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgSW50UmVjdCBkaXJ0eSA9IGVuY2xvc2lu
Z0ludFJlY3QoZGlydHlSZWN0KTsKKyAgICBpbnZhbGlkYXRlUmVjdChkaXJ0eSk7CisgICAgTGF5
ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQgQ29udGVudExheWVyQ2hy
b21pdW06OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgSW50UmVjdCBkaXJ0eShJbnRQb2ludCgp
LCBib3VuZHMoKSk7CisgICAgaW52YWxpZGF0ZVJlY3QoZGlydHkpOworICAgIExheWVyQ2hyb21p
dW06OnNldE5lZWRzRGlzcGxheSgpOworfQorCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpj
cmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7CiAjaWYg
VVNFKFNLSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAppbmRleCBiODM0ZTY3NmJk
NjM0NDVhYTQ1M2IzNjVlZWUyODAyNDBmMzgwOWMxLi5hNGExMTQ2MDBkYWYwNDE0OGMxM2UzZWM3
OTk2ODU3YWNhNjcwMjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTUw
LDYgKzUwLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkNvbnRlbnRMYXllckNocm9taXVtKCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXROZWVkc0Rpc3BsYXkoKTsKIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENvbnRlbnRM
YXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1
bS5jcHAKaW5kZXggMzYzMzYyOTY3YWNjZGViYzI1NTllMjljMjRkNDNjMWM4ODg4MDMxNy4uZjNi
ZGFmZTRmNmNmMzM3ZTIwYWUzNmMxNjNkMTRjNThmOThiNzU0NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxh
eWVyQ2hyb21pdW0uY3BwCkBAIC0xMzksMTggKzEzOSwxNyBAQCB2b2lkIEltYWdlTGF5ZXJDaHJv
bWl1bTo6c2V0Q29udGVudHMoSW1hZ2UqIGNvbnRlbnRzKQogCiAgICAgbV9jb250ZW50cyA9IGNv
bnRlbnRzOwogICAgIG1faW1hZ2VGb3JDdXJyZW50RnJhbWUgPSBtX2NvbnRlbnRzLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIG1fZGlydHlSZWN0ID0gSW50UmVjdChJbnRQb2lu
dCgwLCAwKSwgYm91bmRzKCkpOwogICAgIHNldE5lZWRzRGlzcGxheSgpOwogICAgIHNldE9wYXF1
ZSghbV9jb250ZW50cy0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSk7CiB9CiAKIHZvaWQgSW1hZ2VM
YXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiB7Ci0gICAgaWYgKCFtX2RpcnR5
UmVjdC5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9kaXJ0eSkgewogICAgICAgICBtX3RleHR1cmVV
cGRhdGVyLT51cGRhdGVGcm9tSW1hZ2UobV9jb250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKSk7CiAgICAgICAgIHVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCk7CiAgICAg
ICAgIEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSk7Ci0gICAg
ICAgIGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX2RpcnR5KSB7
CiAgICAgICAgICAgICBpbnZhbGlkYXRlUmVjdChwYWludFJlY3QpOwogICAgICAgICAgICAgcmVz
ZXROZWVkc0Rpc3BsYXkoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCAx
YmU3OTg1NWMxZTZiM2ZlMTI5NzI0MmJjMjk4NDA1NmQ0MDk3OGJiLi40NjliZjAxMjQ0MDZmZmM5
MGU5MWY4MzAxY2I0M2RhNTgxNzEwZjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtNTYs
NiArNTYsNyBAQCBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IExheWVyQ2hyb21pdW06OmNyZWF0
ZShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogCiBMYXllckNocm9taXVtOjpMYXllckNocm9t
aXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCiAgICAgOiBtX2RlbGVnYXRlKGRlbGVnYXRl
KQorICAgICwgbV9kaXJ0eShmYWxzZSkKICAgICAsIG1fbGF5ZXJJZChzX25leHRMYXllcklkKysp
CiAgICAgLCBtX3BhcmVudCgwKQogICAgICwgbV9hbmNob3JQb2ludCgwLjUsIDAuNSkKQEAgLTI1
OCwyMCArMjU5LDE4IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0
IEZsb2F0UmVjdCYgZGlydHlSZWN0KQogICAgIC8vIFNpbXBseSBtYXJrIHRoZSBjb250ZW50cyBh
cyBkaXJ0eS4gRm9yIG5vbi1yb290IGxheWVycywgdGhlIGNhbGwgdG8KICAgICAvLyBzZXROZWVk
c0NvbW1pdCB3aWxsIHNjaGVkdWxlIGEgZnJlc2ggY29tcG9zaXRpbmcgcGFzcy4KICAgICAvLyBG
b3IgdGhlIHJvb3QgbGF5ZXIsIHNldE5lZWRzQ29tbWl0IGhhcyBubyBlZmZlY3QuCi0gICAgbV9k
aXJ0eVJlY3QudW5pdGUoZGlydHlSZWN0KTsKLSAgICBzZXROZWVkc0NvbW1pdCgpOworICAgIExh
eWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06
OnNldE5lZWRzRGlzcGxheSgpCiB7Ci0gICAgbV9kaXJ0eVJlY3Quc2V0TG9jYXRpb24oRmxvYXRQ
b2ludCgpKTsKLSAgICBtX2RpcnR5UmVjdC5zZXRTaXplKGJvdW5kcygpKTsKKyAgICBtX2RpcnR5
ID0gdHJ1ZTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06
OnJlc2V0TmVlZHNEaXNwbGF5KCkKIHsKLSAgICBtX2RpcnR5UmVjdCA9IEZsb2F0UmVjdCgpOwor
ICAgIG1fZGlydHkgPSBmYWxzZTsKIH0KIAogdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVy
dGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBiYjBlYzYy
NjUwMzM2OGY0OTljOTUzMmRkNjk0NDljZWJhMzcwYzk0Li4wZTE0M2RkMmRiMzBjYTgyYzMyZDli
NTU4ZjNkNjY0NjY4Y2M1Mjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xMDUsOSArMTA1LDkg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0TWFza0xheWVyKExheWVyQ2hyb21pdW0qIG1hc2tMYXll
cikgeyBtX21hc2tMYXllciA9IG1hc2tMYXllcjsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIExh
eWVyQ2hyb21pdW0qIG1hc2tMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza0xheWVyLmdldCgp
OyB9CiAKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVj
dCk7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICBjb25zdCBGbG9hdFJlY3QmIGRp
cnR5UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlydHlSZWN0OyB9CisgICAgYm9vbCBpc0RpcnR5
KCkgY29uc3QgeyByZXR1cm4gbV9kaXJ0eTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rp
c3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoKTsKICAgICB2b2lkIHJlc2V0TmVlZHNEaXNwbGF5KCk7CiAKICAgICB2b2lk
IHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyBzZXROZWVk
c0NvbW1pdCgpOyB9CkBAIC0yMTIsOCArMjEyLDggQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBz
ZXROZWVkc0NvbW1pdCgpOwogCi0gICAgLy8gVGhlIGRpcnR5IHJlY3QgaXMgdGhlIHVuaW9uIG9m
IGRhbWFnZWQgcmVnaW9ucyB0aGF0IG5lZWQgcmVwYWludGluZy91cGRhdGluZy4KLSAgICBGbG9h
dFJlY3QgbV9kaXJ0eVJlY3Q7CisgICAgLy8gVGhlIGRpcnR5IGZsYWcgaXMgc2V0IHdoZW4gbGF5
ZXIgbmVlZCByZXBhaW50aW5nL3VwZGF0aW5nLgorICAgIGJvb2wgbV9kaXJ0eTsKIAogICAgIC8v
IFRoZSB1cGRhdGUgcmVjdCBpcyB0aGUgcmVnaW9uIG9mIHRoZSBjb21wb3NpdG9yIHJlc291cmNl
IHRoYXQgd2FzIGFjdHVhbGx5IHVwZGF0ZWQgYnkgdGhlIGNvbXBvc2l0b3IuCiAgICAgLy8gRm9y
IGxheWVycyB0aGF0IG1heSBkbyB1cGRhdGluZyBvdXRzaWRlIHRoZSBjb21wb3NpdG9yJ3MgY29u
dHJvbCAoaS5lLiBwbHVnaW4gbGF5ZXJzKSwgdGhpcyBpbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVk
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZmNjNDZkOTkzZDU0MGE0MjE5ZDdmMjcwMTAwMTg3Mzhl
ZjdiOGZmZS4uYmQ2MTc1YmEwZDQ1NzBmNTYzYzQ2ZTE1NTQ0OTYxZmMzYTBkOTU2YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0yNzMsOCArMjczLDYgQEAgdm9pZCBUaWxl
ZExheWVyQ2hyb21pdW06OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KQogICAgIGlmICghbV90aWxlciB8fCBjb250ZW50UmVjdC5pc0VtcHR5KCkgfHwgbV9za2lwc0Ry
YXcpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFpbihj
b250ZW50UmVjdCk7Ci0KICAgICAvLyBEaXJ0eSByZWN0cyBhcmUgYWx3YXlzIGluIGxheWVyIHNw
YWNlLCBhcyB0aGUgbGF5ZXIgY291bGQgYmUgcmVwb3NpdGlvbmVkCiAgICAgLy8gYWZ0ZXIgaW52
YWxpZGF0aW9uLgogICAgIGNvbnN0IEludFJlY3QgbGF5ZXJSZWN0ID0gbV90aWxlci0+Y29udGVu
dFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVt
LmNwcAppbmRleCAyMzk0NTY4ZjJkODI3OGY1OTc5YTdmZTBjNTYxNWQ5ZjcyMDk4YjY3Li4xYjAw
NjNlY2IyOGIxZWM4M2U1OGYyNWUyYzIyMDk4ZWM2MDA2OGI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5
ZXJDaHJvbWl1bS5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06
OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEMK
ICAgICBpZiAoIW1fZGVsZWdhdGUgfHwgIW1fcHJvdmlkZXIpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5KCkgJiYgdGV4dHVyZXNWYWxpZCgpKSB7CisgICAg
aWYgKCFtX2RpcnR5ICYmIHRleHR1cmVzVmFsaWQoKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVk
IHBsYW5lID0gMDsgcGxhbmUgPCBtX3BsYW5lczsgcGxhbmUrKykgewogICAgICAgICAgICAgTWFu
YWdlZFRleHR1cmUqIHRleCA9IG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS5nZXQoKTsKICAg
ICAgICAgICAgIGlmICghdGV4LT5yZXNlcnZlKHRleC0+c2l6ZSgpLCB0ZXgtPmZvcm1hdCgpKSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
V2ViR0xMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMTdjNWRmOWFiOTQ0Yjg4NzI5
MTc1M2IxOTQ0OGUzMmU0NmEzNGU0My4uYzRiZDU4YWEyZDk4OGM1MGUwNmE5ODJmNDJmZmI5ZDVl
ZmQ3ZWYyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCkBAIC03MCw3ICs3MCw3
IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdy
YXBoaWNzQ29udGV4dDNEKiByZW5kZXJlckNvCiAgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fZGlydHlSZWN0LmlzRW1wdHkoKSkKKyAgICBpZiAo
IW1fZGlydHkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3RleHR1cmVDaGFuZ2VkKSB7
CkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiByZW5kZXJlckNvCiAgICAgICAgIG1fdGV4
dHVyZUNoYW5nZWQgPSBmYWxzZTsKICAgICB9CiAgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBv
ZiB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgotICAgIGlmICghbV9kaXJ0eVJl
Y3QuaXNFbXB0eSgpICYmIG1fdGV4dHVyZVVwZGF0ZWQpIHsKKyAgICBpZiAobV9kaXJ0eSAmJiBt
X3RleHR1cmVVcGRhdGVkKSB7CiAgICAgICAgIC8vIHByZXBhcmVUZXh0dXJlIGNvcGllcyB0aGUg
Y29udGVudHMgb2YgdGhlIG9mZi1zY3JlZW4gcmVuZGVyIHRhcmdldCBpbnRvIHRoZSB0ZXh0dXJl
CiAgICAgICAgIC8vIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuCiAgICAgICAgIC8vCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllci5oCmluZGV4IDUzMGE1
ZTlhZmI2MzFiZjk4NmI1MjJhMWM0ZjYwM2FhMGEwNDVmZDEuLmQ5YzNhYTJiOTBhZmE0ODM0NGQ5
NWVlYzk2NzljZWUxNWQyYzUwYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkNvbnRlbnRMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkNvbnRlbnRMYXllci5oCkBAIC02MCw4ICs2MCw4IEBAIHB1YmxpYzoKICAgICAvLyBT
ZXRzIHRoZSBlbnRpcmUgbGF5ZXIgYXMgaW52YWxpZCwgaS5lLiBuZWVkcyB0byB1cGRhdGUgaXRz
IGNvbnRlbnQuCiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGludmFsaWRhdGUoKTsKIAotICAgIC8v
IFJldHVybnMgdGhlIHJlZ2lvbiBvZiB0aGUgbGF5ZXIgdGhhdCBpcyBjdXJyZW50bHkgaW52YWxp
ZC4KLSAgICBXRUJLSVRfRVhQT1JUIFdlYkZsb2F0UmVjdCBpbnZhbGlkUmVjdCgpIGNvbnN0Owor
ICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IGludmFsaWQuCisg
ICAgV0VCS0lUX0VYUE9SVCBib29sIGlzSW52YWxpZCgpIGNvbnN0OwogCiAjaWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCiAgICAgV2ViQ29udGVudExheWVyKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxX
ZWJDb250ZW50TGF5ZXJJbXBsPiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViQ29udGVudExheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkNvbnRlbnRMYXllci5jcHAKaW5kZXggZGU4ZDk5OGFlOThjNGMxY2RlZDU2YjdhNDg3OGM4ZjM0
NGUyOGFkOC4uZWJjM2JhMjM1YmZjMDg4OWY2ODc0ZmVjZTk1MDM3N2Q3MjRlMTQ3ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwCkBAIC01Niw5
ICs1Niw5IEBAIHZvaWQgV2ViQ29udGVudExheWVyOjppbnZhbGlkYXRlKCkKICAgICB1bndyYXA8
V2ViQ29udGVudExheWVySW1wbD4oKS0+c2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKLVdlYkZsb2F0
UmVjdCBXZWJDb250ZW50TGF5ZXI6OmludmFsaWRSZWN0KCkgY29uc3QKK2Jvb2wgV2ViQ29udGVu
dExheWVyOjppc0ludmFsaWQoKSBjb25zdAogewotICAgIHJldHVybiBXZWJGbG9hdFJlY3QoY29u
c3RVbndyYXA8V2ViQ29udGVudExheWVySW1wbD4oKS0+ZGlydHlSZWN0KCkpOworICAgIHJldHVy
biBjb25zdFVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5pc0RpcnR5KCk7CiB9CiAKIFdl
YkNvbnRlbnRMYXllcjo6V2ViQ29udGVudExheWVyKGNvbnN0IFBhc3NSZWZQdHI8V2ViQ29udGVu
dExheWVySW1wbD4mIG5vZGUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114397</attachid>
            <date>2011-11-09 17:02:35 -0800</date>
            <delta_ts>2011-11-11 19:20:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71872-20111109170234.patch</filename>
            <type>text/plain</type>
            <size>21147</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk3NDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxZjY5NmMwZjliMTk3MjQ5
NzU3ZmRjYmQ4NjA0NGFmOGQ2ZjBhMjA1Li5hZTVhNzEyOTMzNTk1Nzg5ODBiYjI3ZjEwMWRhZmVl
ZWJjNzNhNWM5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMTEtMDkgIERhdmlk
IFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIElt
cHJvdmUgdGlsZSBpbnZhbGlkYXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MTg3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFZpcnR1YWxpemUgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5
IHNvIHRoYXQgZGlydHkgcmVjdGFuZ2xlcworICAgICAgICBjYW4gYmUgaGFuZGxlZCBkaXJlY3Rs
eSBieSB0aGUgVGlsZWRMYXllckNocm9taXVtIGNsYXNzLgorICAgICAgICBSZXBsYWNlIExheWVy
Q2hyb21pdW06OmRpcnR5UmVjdCgpIHdpdGggOjppc0RpcnR5KCkgYW5kIHJlbW92ZQorICAgICAg
ICB1bm5lY2Vzc2FyeSB1bmlvbml6aW5nIG9mIGRpcnR5IHJlY3RhbmdsZXMuIEJ5IGludmFsaWRh
dGluZyBleGlzdGluZworICAgICAgICB0aWxlcyB1c2luZyB0aGUgaW5pdGlhbCBkaXJ0eSByZWN0
YW5nbGVzIGluc3RlYWQgb2YgdGhlaXIgdW5pb24gd2UKKyAgICAgICAgYXZvaWQgYSBsYXJnZSBh
bW91bnQgb2YgdW5uZWNlc3NhcnkgdGlsZSB1cGRhdGVzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRz
SWZEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6c2V0TmVl
ZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21p
dW06OnNldENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6
cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXROZWVk
c0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cmVzZXROZWVkc0Rp
c3BsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmlzRGlydHkpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmludmFsaWRhdGVSZWN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExh
eWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjp1
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKwogMjAxMS0xMS0wOSAgQ2hyaXMgRmxlaXphY2gg
IDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBjcmFzaCB3aGVuIGFjY2Vzc2lu
ZyBzZWxlY3RlZFRhYiBpbiBhIHRhYiBsaXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDRmMWZhMTU0MDUzM2JlMTRhNGY2ZTNhMGQ3MDZkMWFiOTQyODRhNTQuLmVmNjg4OTA4OTNiZTky
NWMzNGMzYWQ2NjhhZGM3OWEwZDlkNjZiMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTEtMTEtMDkgIERhdmlkIFJldmVtYW4gIDxyZXZlbWFuQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEltcHJvdmUgdGlsZSBpbnZhbGlkYXRpb24u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTg3Mgor
CisgICAgICAgIFJlcGxhY2UgV2ViQ29udGVudExheWVyOjppbnZhbGlkUmVjdCgpIHdpdGggOjpp
c0ludmFsaWQoKS4gSW52YWxpZGF0aW9uCisgICAgICAgIGlzIGxheWVyIHR5cGUgc3BlY2lmaWMg
YW5kIHRoZSBjdXJyZW50bHkgaW52YWxpZCByZWdpb24gY2Fubm90CisgICAgICAgIG5lY2Vzc2Fy
aWx5IGJlIHJlcHJlc2VudGVkIGJ5IGEgcmVjdGFuZ2xlLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcHVibGljL1dlYkNvbnRlbnRMYXllci5oOgor
ICAgICAgICAqIHNyYy9XZWJDb250ZW50TGF5ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b250ZW50TGF5ZXI6OmlzSW52YWxpZCk6CisgICAgICAgICogdGVzdHMvTGF5ZXJDaHJvbWl1bVRl
c3QuY3BwOgorCiAyMDExLTExLTA5ICBIZW5yaWsgR3J1bmVsbCAgPGdydW5lbGxAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIEFkZGluZyBtaXNzaW5nIGltcGxlbWVudGF0aW9uIG9mIFdlYk1lZGlh
U3RyZWFtRGVzY3JpcHRvcjo6bGFiZWwoKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uY3BwCmluZGV4IDQ0OTQ1ODZhNTdjYTE2YmM0YjRmMjMyNDEwZGI4ZjdmZDRjZDg4YzEuLjQx
NWFlZjQ5NDM3ZmQzNWY3MmFjZDA0NWFmZmVjY2E2NDI2YWVlZTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzMkRMYXllckNocm9taXVtLmNwcApAQCAtNjcsNyArNjcsNyBAQCBib29sIENhbnZhczJETGF5
ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIAogdm9pZCBDYW52YXMyRExheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1Rl
eHR1cmVVcGRhdGVyJikKIHsKLSAgICBpZiAobV9kaXJ0eVJlY3QuaXNFbXB0eSgpIHx8ICFkcmF3
c0NvbnRlbnQoKSkKKyAgICBpZiAoIW1fZGlydHkgfHwgIWRyYXdzQ29udGVudCgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAobV9jb250ZXh0KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJD
aHJvbWl1bS5jcHAKaW5kZXggY2E4YjNiZDc2MWYwODE1ZTQ3YjZjZmIwNDkxYTFkOTcyODc5ZjA0
Yy4uNjcyZGNkMjFmNjViZTAyM2NmY2VhZmE0YjMyMzU3N2E3M2Y1ODRkYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTAyLDEwICsxMDIsNiBAQCB2b2lkIENvbnRl
bnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiAgICAgaWYgKGxheWVyUmVj
dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFJlY3QgZGlydHkgPSBlbmNs
b3NpbmdJbnRSZWN0KG1fZGlydHlSZWN0KTsKLSAgICBkaXJ0eS5pbnRlcnNlY3QoSW50UmVjdChJ
bnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkpKTsKLSAgICBpbnZhbGlkYXRlUmVjdChkaXJ0eSk7
Ci0KICAgICBpZiAoIWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTExOCw2
ICsxMTQsMjAgQEAgYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29u
c3QKICAgICByZXR1cm4gbV9kZWxlZ2F0ZSAmJiBtX2RlbGVnYXRlLT5kcmF3c0NvbnRlbnQoKSAm
JiBUaWxlZExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpOwogfQogCit2b2lkIENvbnRlbnRM
YXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3Qp
Cit7CisgICAgSW50UmVjdCBkaXJ0eSA9IGVuY2xvc2luZ0ludFJlY3QoZGlydHlSZWN0KTsKKyAg
ICBpbnZhbGlkYXRlUmVjdChkaXJ0eSk7CisgICAgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNw
bGF5KGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnNldE5lZWRz
RGlzcGxheSgpCit7CisgICAgSW50UmVjdCBkaXJ0eShJbnRQb2ludCgpLCBib3VuZHMoKSk7Cisg
ICAgaW52YWxpZGF0ZVJlY3QoZGlydHkpOworICAgIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlz
cGxheSgpOworfQorCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBk
YXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7CiAjaWYgVVNFKFNLSUEpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uaAppbmRleCBiODM0ZTY3NmJkNjM0NDVhYTQ1M2IzNjVl
ZWUyODAyNDBmMzgwOWMxLi5hNGExMTQ2MDBkYWYwNDE0OGMxM2UzZWM3OTk2ODU3YWNhNjcwMjMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTUwLDYgKzUwLDggQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgfkNvbnRlbnRMYXllckNocm9taXVtKCk7CiAKICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNE
aXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3Bs
YXkoKTsKIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtKEND
TGF5ZXJEZWxlZ2F0ZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMzYz
MzYyOTY3YWNjZGViYzI1NTllMjljMjRkNDNjMWM4ODg4MDMxNy4uZjNiZGFmZTRmNmNmMzM3ZTIw
YWUzNmMxNjNkMTRjNThmOThiNzU0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3Bw
CkBAIC0xMzksMTggKzEzOSwxNyBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVu
dHMoSW1hZ2UqIGNvbnRlbnRzKQogCiAgICAgbV9jb250ZW50cyA9IGNvbnRlbnRzOwogICAgIG1f
aW1hZ2VGb3JDdXJyZW50RnJhbWUgPSBtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOwotICAgIG1fZGlydHlSZWN0ID0gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgYm91bmRz
KCkpOwogICAgIHNldE5lZWRzRGlzcGxheSgpOwogICAgIHNldE9wYXF1ZSghbV9jb250ZW50cy0+
Y3VycmVudEZyYW1lSGFzQWxwaGEoKSk7CiB9CiAKIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpw
YWludENvbnRlbnRzSWZEaXJ0eSgpCiB7Ci0gICAgaWYgKCFtX2RpcnR5UmVjdC5pc0VtcHR5KCkp
IHsKKyAgICBpZiAobV9kaXJ0eSkgewogICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT51cGRhdGVG
cm9tSW1hZ2UobV9jb250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSk7CiAgICAg
ICAgIHVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCk7CiAgICAgICAgIEludFJlY3QgcGFp
bnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSk7Ci0gICAgICAgIGlmICghbV9kaXJ0
eVJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX2RpcnR5KSB7CiAgICAgICAgICAgICBp
bnZhbGlkYXRlUmVjdChwYWludFJlY3QpOwogICAgICAgICAgICAgcmVzZXROZWVkc0Rpc3BsYXko
KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCAxYmU3OTg1NWMxZTZiM2Zl
MTI5NzI0MmJjMjk4NDA1NmQ0MDk3OGJiLi5lOGQ3NDg4MzM2NjcyYjRhNDFmM2MwZGE4ZDE0OTY0
YWE4NmVkYmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtNTYsNiArNTYsNyBAQCBQYXNz
UmVmUHRyPExheWVyQ2hyb21pdW0+IExheWVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyRGVsZWdh
dGUqIGRlbGVnYXRlKQogCiBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKENDTGF5ZXJEZWxl
Z2F0ZSogZGVsZWdhdGUpCiAgICAgOiBtX2RlbGVnYXRlKGRlbGVnYXRlKQorICAgICwgbV9kaXJ0
eShmYWxzZSkKICAgICAsIG1fbGF5ZXJJZChzX25leHRMYXllcklkKyspCiAgICAgLCBtX3BhcmVu
dCgwKQogICAgICwgbV9hbmNob3JQb2ludCgwLjUsIDAuNSkKQEAgLTI1OCwyMCArMjU5LDIxIEBA
IHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGly
dHlSZWN0KQogICAgIC8vIFNpbXBseSBtYXJrIHRoZSBjb250ZW50cyBhcyBkaXJ0eS4gRm9yIG5v
bi1yb290IGxheWVycywgdGhlIGNhbGwgdG8KICAgICAvLyBzZXROZWVkc0NvbW1pdCB3aWxsIHNj
aGVkdWxlIGEgZnJlc2ggY29tcG9zaXRpbmcgcGFzcy4KICAgICAvLyBGb3IgdGhlIHJvb3QgbGF5
ZXIsIHNldE5lZWRzQ29tbWl0IGhhcyBubyBlZmZlY3QuCi0gICAgbV9kaXJ0eVJlY3QudW5pdGUo
ZGlydHlSZWN0KTsKKyAgICBpZiAoIWRpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIG1fZGly
dHkgPSB0cnVlOworCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAogdm9pZCBMYXllckNocm9t
aXVtOjpzZXROZWVkc0Rpc3BsYXkoKQogewotICAgIG1fZGlydHlSZWN0LnNldExvY2F0aW9uKEZs
b2F0UG9pbnQoKSk7Ci0gICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShib3VuZHMoKSk7CisgICAgbV9k
aXJ0eSA9IHRydWU7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAogdm9pZCBMYXllckNocm9t
aXVtOjpyZXNldE5lZWRzRGlzcGxheSgpCiB7Ci0gICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3Qo
KTsKKyAgICBtX2RpcnR5ID0gZmFsc2U7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFBy
b3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggYmIw
ZWM2MjY1MDMzNjhmNDk5Yzk1MzJkZDY5NDQ5Y2ViYTM3MGM5NC4uMGUxNDNkZDJkYjMwY2E4MmMz
MmQ5YjU1OGYzZDY2NDY2OGNjNTI5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTA1LDkgKzEw
NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1hc2tMYXllcihMYXllckNocm9taXVtKiBtYXNr
TGF5ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNrTGF5ZXI7IHNldE5lZWRzQ29tbWl0KCk7IH0KICAg
ICBMYXllckNocm9taXVtKiBtYXNrTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX21hc2tMYXllci5n
ZXQoKTsgfQogCi0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0
eVJlY3QpOwotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgY29uc3QgRmxvYXRSZWN0
JiBkaXJ0eVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2RpcnR5UmVjdDsgfQorICAgIGJvb2wgaXNE
aXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlydHk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgdm9pZCByZXNldE5lZWRzRGlzcGxheSgpOwogCiAgICAg
dm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgc2V0
TmVlZHNDb21taXQoKTsgfQpAQCAtMjEyLDggKzIxMiw4IEBAIHByb3RlY3RlZDoKIAogICAgIHZv
aWQgc2V0TmVlZHNDb21taXQoKTsKIAotICAgIC8vIFRoZSBkaXJ0eSByZWN0IGlzIHRoZSB1bmlv
biBvZiBkYW1hZ2VkIHJlZ2lvbnMgdGhhdCBuZWVkIHJlcGFpbnRpbmcvdXBkYXRpbmcuCi0gICAg
RmxvYXRSZWN0IG1fZGlydHlSZWN0OworICAgIC8vIFRoZSBkaXJ0eSBmbGFnIGlzIHNldCB3aGVu
IGxheWVyIG5lZWQgcmVwYWludGluZy91cGRhdGluZy4KKyAgICBib29sIG1fZGlydHk7CiAKICAg
ICAvLyBUaGUgdXBkYXRlIHJlY3QgaXMgdGhlIHJlZ2lvbiBvZiB0aGUgY29tcG9zaXRvciByZXNv
dXJjZSB0aGF0IHdhcyBhY3R1YWxseSB1cGRhdGVkIGJ5IHRoZSBjb21wb3NpdG9yLgogICAgIC8v
IEZvciBsYXllcnMgdGhhdCBtYXkgZG8gdXBkYXRpbmcgb3V0c2lkZSB0aGUgY29tcG9zaXRvcidz
IGNvbnRyb2wgKGkuZS4gcGx1Z2luIGxheWVycyksIHRoaXMgaW5mb3JtYXRpb24KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
aWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGZjYzQ2ZDk5M2Q1NDBhNDIxOWQ3ZjI3MDEwMDE4
NzM4ZWY3YjhmZmUuLmJkNjE3NWJhMGQ0NTcwZjU2M2M0NmUxNTU0NDk2MWZjM2EwZDk1NmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVk
TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtMjczLDggKzI3Myw2IEBAIHZvaWQg
VGlsZWRMYXllckNocm9taXVtOjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCkKICAgICBpZiAoIW1fdGlsZXIgfHwgY29udGVudFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tp
cHNEcmF3KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRh
aW4oY29udGVudFJlY3QpOwotCiAgICAgLy8gRGlydHkgcmVjdHMgYXJlIGFsd2F5cyBpbiBsYXll
ciBzcGFjZSwgYXMgdGhlIGxheWVyIGNvdWxkIGJlIHJlcG9zaXRpb25lZAogICAgIC8vIGFmdGVy
IGludmFsaWRhdGlvbi4KICAgICBjb25zdCBJbnRSZWN0IGxheWVyUmVjdCA9IG1fdGlsZXItPmNv
bnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggMjM5NDU2OGYyZDgyNzhmNTk3OWE3ZmUwYzU2MTVkOWY3MjA5OGI2Ny4u
MWIwMDYzZWNiMjhiMWVjODNlNThmMjVlMmMyMjA5OGVjNjAwNjhiNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRl
b0xheWVyQ2hyb21pdW0uY3BwCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgVmlkZW9MYXllckNocm9t
aXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBDCiAgICAgaWYgKCFtX2RlbGVnYXRlIHx8ICFtX3Byb3ZpZGVyKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAobV9kaXJ0eVJlY3QuaXNFbXB0eSgpICYmIHRleHR1cmVzVmFsaWQoKSkgewor
ICAgIGlmICghbV9kaXJ0eSAmJiB0ZXh0dXJlc1ZhbGlkKCkpIHsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgbV9wbGFuZXM7IHBsYW5lKyspIHsKICAgICAgICAgICAg
IE1hbmFnZWRUZXh0dXJlKiB0ZXggPSBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUuZ2V0KCk7
CiAgICAgICAgICAgICBpZiAoIXRleC0+cmVzZXJ2ZSh0ZXgtPnNpemUoKSwgdGV4LT5mb3JtYXQo
KSkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDE3YzVkZjlhYjk0NGI4
ODcyOTE3NTNiMTk0NDhlMzJlNDZhMzRlNDMuLmM0YmQ1OGFhMmQ5ODhjNTBlMDZhOTgyZjQyZmZi
OWQ1ZWZkN2VmMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcApAQCAtNzAsNyAr
NzAsNyBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNl
cyhHcmFwaGljc0NvbnRleHQzRCogcmVuZGVyZXJDbwogICAgIGlmICghZHJhd3NDb250ZW50KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAg
aWYgKCFtX2RpcnR5KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV90ZXh0dXJlQ2hhbmdl
ZCkgewpAQCAtODQsNyArODQsNyBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogcmVuZGVyZXJDbwogICAgICAgICBt
X3RleHR1cmVDaGFuZ2VkID0gZmFsc2U7CiAgICAgfQogICAgIC8vIFVwZGF0ZSB0aGUgY29udGVu
dHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29tcG9zaXRvci4KLSAgICBpZiAoIW1fZGly
dHlSZWN0LmlzRW1wdHkoKSAmJiBtX3RleHR1cmVVcGRhdGVkKSB7CisgICAgaWYgKG1fZGlydHkg
JiYgbV90ZXh0dXJlVXBkYXRlZCkgewogICAgICAgICAvLyBwcmVwYXJlVGV4dHVyZSBjb3BpZXMg
dGhlIGNvbnRlbnRzIG9mIHRoZSBvZmYtc2NyZWVuIHJlbmRlciB0YXJnZXQgaW50byB0aGUgdGV4
dHVyZQogICAgICAgICAvLyB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgogICAgICAgICAvLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaAppbmRleCA1
MzBhNWU5YWZiNjMxYmY5ODZiNTIyYTFjNGY2MDNhYTBhMDQ1ZmQxLi5kOWMzYWEyYjkwYWZhNDgz
NDRkOTVlZWM5Njc5Y2VlMTVkMmM1MGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaApAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAgICAg
Ly8gU2V0cyB0aGUgZW50aXJlIGxheWVyIGFzIGludmFsaWQsIGkuZS4gbmVlZHMgdG8gdXBkYXRl
IGl0cyBjb250ZW50LgogICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7CiAKLSAg
ICAvLyBSZXR1cm5zIHRoZSByZWdpb24gb2YgdGhlIGxheWVyIHRoYXQgaXMgY3VycmVudGx5IGlu
dmFsaWQuCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJGbG9hdFJlY3QgaW52YWxpZFJlY3QoKSBjb25z
dDsKKyAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGxheWVyIGlzIGN1cnJlbnRseSBpbnZhbGlk
LgorICAgIFdFQktJVF9FWFBPUlQgYm9vbCBpc0ludmFsaWQoKSBjb25zdDsKIAogI2lmIFdFQktJ
VF9JTVBMRU1FTlRBVElPTgogICAgIFdlYkNvbnRlbnRMYXllcihjb25zdCBXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29udGVudExheWVySW1wbD4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkNvbnRlbnRMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJDb250ZW50TGF5ZXIuY3BwCmluZGV4IGRlOGQ5OThhZTk4YzRjMWNkZWQ1NmI3YTQ4Nzhj
OGYzNDRlMjhhZDguLmViYzNiYTIzNWJmYzA4ODlmNjg3NGZlY2U5NTAzNzdkNzI0ZTE0N2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllci5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcApAQCAt
NTYsOSArNTYsOSBAQCB2b2lkIFdlYkNvbnRlbnRMYXllcjo6aW52YWxpZGF0ZSgpCiAgICAgdW53
cmFwPFdlYkNvbnRlbnRMYXllckltcGw+KCktPnNldE5lZWRzRGlzcGxheSgpOwogfQogCi1XZWJG
bG9hdFJlY3QgV2ViQ29udGVudExheWVyOjppbnZhbGlkUmVjdCgpIGNvbnN0Citib29sIFdlYkNv
bnRlbnRMYXllcjo6aXNJbnZhbGlkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV2ViRmxvYXRSZWN0
KGNvbnN0VW53cmFwPFdlYkNvbnRlbnRMYXllckltcGw+KCktPmRpcnR5UmVjdCgpKTsKKyAgICBy
ZXR1cm4gY29uc3RVbndyYXA8V2ViQ29udGVudExheWVySW1wbD4oKS0+aXNEaXJ0eSgpOwogfQog
CiBXZWJDb250ZW50TGF5ZXI6OldlYkNvbnRlbnRMYXllcihjb25zdCBQYXNzUmVmUHRyPFdlYkNv
bnRlbnRMYXllckltcGw+JiBub2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCBjNDM3ZjhhY2UwYTAxNGIxMDVlMzdmZGU3
MDE1MGYwZDY4Y2Y5NDYzLi4wMjhlYjlkZmQ3NDU0NjJiMGRhMTc0MzBmODQ1MTllYTY0ZWI4YzY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1U
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1U
ZXN0LmNwcApAQCAtNTUwLDQwICs1NTAsMzcgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBj
aGVja1NldE5lZWRzRGlzcGxheUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKICAgICBGbG9hdFJlY3Qg
ZW1wdHlEaXJ0eVJlY3QgPSBGbG9hdFJlY3QoNDAuMGYsIDQ1LjBmLCAwLCAwKTsKICAgICBGbG9h
dFJlY3Qgb3V0T2ZCb3VuZHNEaXJ0eVJlY3QgPSBGbG9hdFJlY3QoNDAwLjBmLCA0MDUuMGYsIDUw
MC4wZiwgNTAyLjBmKTsKIAotICAgIC8vIEJlZm9yZSBhbnl0aGluZywgdGVzdExheWVyIHNob3Vs
ZCBoYXZlIGFuIGVtcHR5IGRpcnR5IHJlY3QuCi0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5k
aXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIC8vIEJlZm9yZSBhbnl0aGluZywgdGVzdExheWVy
IHNob3VsZCBub3QgYmUgZGlydHkuCisgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+aXNEaXJ0
eSgpKTsKIAogICAgIC8vIFRoaXMgaXMganVzdCBpbml0aWFsaXphdGlvbiwgYnV0IG5vdGlmeVN5
bmNSZXF1aXJlZCBiZWhhdmlvciBpcyB2ZXJpZmllZCBhbnl3YXkgdG8gYXZvaWQgd2FybmluZ3Mu
CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0
ZSwgMSwgdGVzdExheWVyLT5zZXRCb3VuZHModGVzdEJvdW5kcykpOwogICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+
cmVzZXROZWVkc0Rpc3BsYXkoKSk7Ci0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJl
Y3QoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPmlzRGlydHkoKSk7
CiAKICAgICAvLyBUaGUgcmVhbCB0ZXN0IGJlZ2lucyBoZXJlLgogCi0gICAgLy8gQ2FzZSAxOiBi
YXNpYworICAgIC8vIENhc2UgMTogZGlydHkgZmxhZyBzaG91bGQgbm90IGNoYW5nZSBiZWNhdXNl
IG9mIGFuIGVtcHR5IGRpcnR5IHJlY3QuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9T
WU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXko
ZW1wdHlEaXJ0eVJlY3QpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5pc0RpcnR5KCkp
OworCisgICAgLy8gQ2FzZSAyOiBiYXNpYwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllf
U1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5
KGRpcnR5MSkpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChkaXJ0eTEsIHRlc3RM
YXllci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+aXNEaXJ0eSgp
KTsKIAotICAgIC8vIENhc2UgMjogYSBzZWNvbmQgZGlydHkgcmVjdCBzaG91bGQgYmUgdW5pb25l
ZCBvZiBkaXJ0eTEgYW5kIGRpcnR5Mi4KKyAgICAvLyBDYXNlIDM6IGEgc2Vjb25kIGRpcnR5IHJl
Y3QuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxl
Z2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHkyKSk7Ci0gICAgdmVyaWZ5
RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEzLjBmLCAxNC4w
ZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwotCi0gICAgLy8gQ2FzZSAzOiBkaXJ0eSByZWN0
IHNob3VsZCBub3QgY2hhbmdlIGJlY2F1c2Ugb2YgYW4gZW1wdHkgZGlydHkgcmVjdC4KLSAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0
ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShlbXB0eURpcnR5UmVjdCkpOwotICAgIHZlcmlmeUZs
b2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxMy4wZiwgMTQuMGYp
LCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmlz
RGlydHkoKSk7CiAKICAgICAvLyBDYXNlIDQ6IExheWVyQ2hyb21pdW0gc2hvdWxkIGFjY2VwdCBk
aXJ0eSByZWN0cyB0aGF0IGdvIGJleW9uZCBpdHMgYm91bmRzCisgICAgRVhFQ1VURV9BTkRfVkVS
SUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5yZXNl
dE5lZWRzRGlzcGxheSgpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVI
QVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShvdXRPZkJv
dW5kc0RpcnR5UmVjdCkpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJl
Y3QoMTAuMGYsIDE1LjBmLCA4OTAuMGYsIDg5Mi4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkp
OwotCi0gICAgLy8gQ2FzZSA1OiBzZXROZWVkc0Rpc3BsYXkoKSB3aXRob3V0IHRoZSBkaXJ0eSBy
ZWN0IGFyZyBzaG91bGQgY2F1c2UgdGhlIGVudGlyZSBib3VuZHMgdG8gYmUgZGlydHksCi0gICAg
Ly8gICAgICAgICBvdmVycmlkaW5nIGFueSBleGlzdGluZyBkaXJ0eSByZWN0LgotICAgIEVYRUNV
VEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RM
YXllci0+c2V0TmVlZHNEaXNwbGF5KCkpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVh
bChGbG9hdFJlY3QoMCwgMCwgdGVzdEJvdW5kcy53aWR0aCgpLCB0ZXN0Qm91bmRzLmhlaWdodCgp
KSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5p
c0RpcnR5KCkpOwogCi0gICAgLy8gcmVzZXROZWVkc0Rpc3BsYXkgc2hvdWxkIGVtcHR5IHRoZSBk
aXJ0eSByZWN0LCBhbmQgTk9UIGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkLgorICAgIC8vIENhc2Ug
NTogc2V0TmVlZHNEaXNwbGF5KCkgd2l0aG91dCB0aGUgZGlydHkgcmVjdCBhcmcuCiAgICAgRVhF
Q1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVz
dExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgpKTsKLSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXIt
PmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9T
WU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXko
KSk7CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5pc0RpcnR5KCkpOwogfQogCiBURVNUX0Yo
TGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5V2l0aE51bGxEZWxlZ2F0ZSkK
QEAgLTU5NiwxMyArNTkzLDEzIEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tTZXRO
ZWVkc0Rpc3BsYXlXaXRoTnVsbERlbGVnYXRlKQogICAgIEZsb2F0UmVjdCBkaXJ0eSA9IEZsb2F0
UmVjdCgxMC4wZiwgMTUuMGYsIDEuMGYsIDIuMGYpOwogCiAgICAgdGVzdExheWVyLT5zZXRCb3Vu
ZHModGVzdEJvdW5kcyk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVj
dCgwLjBmLCAwLjBmLCA1MDEuMGYsIDUwOC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwor
ICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+aXNEaXJ0eSgpKTsKIAogICAgIHRlc3RMYXllci0+
cmVzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVj
dCgpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+aXNEaXJ0eSgpKTsK
IAogICAgIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5KTsKLSAgICB2ZXJpZnlGbG9h
dFJlY3RzQWxtb3N0RXF1YWwoZGlydHksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIEVY
UEVDVF9UUlVFKHRlc3RMYXllci0+aXNEaXJ0eSgpKTsKIH0KIAogVEVTVF9GKExheWVyQ2hyb21p
dW1UZXN0LCBjaGVja1Byb3BlcnR5Q2hhbmdlQ2F1c2VzQ29ycmVjdEJlaGF2aW9yKQpAQCAtNjEz
LDEwICs2MTAsMTAgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1Byb3BlcnR5Q2hh
bmdlQ2F1c2VzQ29ycmVjdEJlaGF2aW9yKQogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBkdW1t
eUxheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsgLy8ganVz
dCBhIGR1bW15IGxheWVyIGZvciB0aGlzIHRlc3QgY2FzZS4KIAogICAgIC8vIHNhbml0eSBjaGVj
ayBvZiBpbml0aWFsIHRlc3QgY29uZGl0aW9uCi0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5k
aXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPmlzRGly
dHkoKSk7CiAKICAgICAvLyBUZXN0IHByb3BlcnRpZXMgdGhhdCBzaG91bGQgbm90IGNhbGwgbmVl
ZHNEaXNwbGF5IGFuZCBuZWVkc0NvbW1pdCB3aGVuIGNoYW5nZWQuCi0gICAgLy8gbm90aWZ5U3lu
Y1JlcXVpcmVkIHNob3VsZCBub3QgYmUgY2FsbGVkLCBhbmQgdGhlIGRpcnR5UmVjdCBzaG91bGQg
cmVtYWluIHN0aWxsIGVtcHR5LgorICAgIC8vIG5vdGlmeVN5bmNSZXF1aXJlZCBzaG91bGQgbm90
IGJlIGNhbGxlZCwgYW5kIHRoZSBkaXJ0eSBmbGFnIHNob3VsZCByZW1haW4gZmFsc2UuCiAgICAg
RVhQRUNUX0NBTEwoaW5pdGlhbERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMo
MCk7IC8vIG9sZCBkZWxlZ2F0ZSBzaG91bGQgbm90IGJlIHVzZWQgd2hlbiBzZXREZWxlZ2F0ZSBn
aXZlcyBhIG5ldyBkZWxlZ2F0ZS4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNf
QkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldERlbGVnYXRlKCZtb2NrRGVs
ZWdhdGUpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9j
a0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldE5hbWUoIlRlc3QgTGF5ZXIiKSk7CkBAIC02MzEs
NyArNjI4LDcgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1Byb3BlcnR5Q2hhbmdl
Q2F1c2VzQ29ycmVjdEJlaGF2aW9yKQogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lO
Q19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0RHJhd1RyYW5zZm9ybShU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpKSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9T
WU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXRTY3JlZW5TcGFjZVRy
YW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXREcmF3
YWJsZUNvbnRlbnRSZWN0KEludFJlY3QoNCwgNSwgNiwgNykpKTsKLSAgICBFWFBFQ1RfVFJVRSh0
ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RM
YXllci0+aXNEaXJ0eSgpKTsKIAogICAgIC8vIE5leHQsIHRlc3QgcHJvcGVydGllcyB0aGF0IHNo
b3VsZCBjYWxsIHNldE5lZWRzQ29tbWl0IChidXQgbm90IHNldE5lZWRzRGlzcGxheSkKICAgICAv
LyBUaGVzZSBwcm9wZXJ0aWVzIHNob3VsZCBpbmRpcmVjdGx5IGNhbGwgbm90aWZ5U3luY1JlcXVp
cmVkLCBidXQgdGhlIGRpcnR5IHJlY3Qgc2hvdWxkIG5vdCBjaGFuZ2UuCkBAIC02NTAsMTQgKzY0
NywxNCBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVydHlDaGFuZ2VDYXVz
ZXNDb3JyZWN0QmVoYXZpb3IpCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JF
SEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXREb3VibGVTaWRlZChmYWxzZSkp
OwogCiAgICAgLy8gVGhlIGFib3ZlIHRlc3RzIHNob3VsZCBub3QgaGF2ZSBjYXVzZWQgYSBub24t
ZW1wdHkgZGlydHkgcmVjdC4KLSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgp
LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+aXNEaXJ0eSgpKTsKIAog
ICAgIC8vIFRlc3QgcHJvcGVydGllcyB0aGF0IHNob3VsZCBjYWxsIHNldE5lZWRzRGlzcGxheQot
ICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgd2lsbCBjYWxsIG5vdGlmeVN5bmNSZXF1aXJlZCBhbmQg
Y2hhbmdlIHRoZSBkaXJ0eSByZWN0LgorICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgd2lsbCBjYWxs
IG5vdGlmeVN5bmNSZXF1aXJlZCBhbmQgY2hhbmdlIHRoZSBkaXJ0eSBmbGFnLgogICAgIEVYRUNV
VEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RM
YXllci0+c2V0Qm91bmRzKEludFNpemUoNSwgMTApKSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0Fs
bW9zdEVxdWFsKEZsb2F0UmVjdCgwLjBmLCAwLjBmLCA1LjBmLCAxMC4wZiksIHRlc3RMYXllci0+
ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+aXNEaXJ0eSgpKTsKICAg
ICB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgRVhQRUNUX1RSVUUodGVzdExh
eWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXIt
PmlzRGlydHkoKSk7CiAKICAgICAvLyBGSVhNRTogbmVlZCB0byBhZGQgYSB0ZXN0IGZvciBzZXRM
YXllclRyZWVIb3N0IHdpdGggYSBub24tbnVsbCBzdHViYmVkIENDTGF5ZXJUcmVlSG9zdC4KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114814</attachid>
            <date>2011-11-11 19:20:26 -0800</date>
            <delta_ts>2011-11-18 16:01:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71872-20111111192025.patch</filename>
            <type>text/plain</type>
            <size>22574</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwMDQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjlmMGMxOGUyMmY1ZjJj
NWUzMjlkZDRkMWU1YzkwNzNjYWMyODAyNC4uZGM0NmU0MzI1N2UyNzJhMTAwMWI0NzQ2MmE4MmE2
ZDg3YjliMzg1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDExLTExLTA5ICBEYXZp
ZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBJ
bXByb3ZlIHRpbGUgaW52YWxpZGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzE4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBWaXJ0dWFsaXplIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxh
eSBzbyB0aGF0IGRpcnR5IHJlY3RhbmdsZXMKKyAgICAgICAgY2FuIGJlIGhhbmRsZWQgZGlyZWN0
bHkgYnkgdGhlIFRpbGVkTGF5ZXJDaHJvbWl1bSBjbGFzcy4KKyAgICAgICAgUmVwbGFjZSBMYXll
ckNocm9taXVtOjpkaXJ0eVJlY3QoKSB3aXRoIDo6bmVlZHNEaXNwbGF5KCkgYW5kIHJlbW92ZQor
ICAgICAgICB1bm5lY2Vzc2FyeSB1bmlvbml6aW5nIG9mIGRpcnR5IHJlY3RhbmdsZXMuIEJ5IGlu
dmFsaWRhdGluZyBleGlzdGluZworICAgICAgICB0aWxlcyB1c2luZyB0aGUgaW5pdGlhbCBkaXJ0
eSByZWN0YW5nbGVzIGluc3RlYWQgb2YgdGhlaXIgdW5pb24gd2UKKyAgICAgICAgYXZvaWQgYSBs
YXJnZSBhbW91bnQgb2YgdW5uZWNlc3NhcnkgdGlsZSB1cGRhdGVzLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpwYWludENv
bnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6
c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVy
Q2hyb21pdW06OnNldENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJv
bWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpz
ZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cmVzZXRO
ZWVkc0Rpc3BsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Om5lZWRzRGlzcGxh
eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0
ZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0
ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVy
Q2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorCiAyMDExLTExLTExICBBbGV4
aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFtRdF1b
V0syXSBNYWtlIHN1cmUgU2Nyb2xsYmFycyBhcmUgaW4gdGhlaXIgb3duIGxheWVyLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCAyMGIwNzNiODRhMTQwZjZiOTU5ZjExZGU3NWQ5NjUwYjg4
YTNhZjEzLi5jY2JiYTg4N2ZlYmVlZmRkMTAxMDIwY2VhMDk5YTkxNDhlNTkyMjBlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDExLTExLTA5ICBEYXZpZCBS
ZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBJbXBy
b3ZlIHRpbGUgaW52YWxpZGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzE4NzIKKworICAgICAgICBSZXBsYWNlIFdlYkNvbnRlbnRMYXllcjo6
aW52YWxpZFJlY3QoKSB3aXRoIDo6aXNJbnZhbGlkKCkuIEludmFsaWRhdGlvbgorICAgICAgICBp
cyBsYXllciB0eXBlIHNwZWNpZmljIGFuZCB0aGUgY3VycmVudGx5IGludmFsaWQgcmVnaW9uIGNh
bm5vdAorICAgICAgICBuZWNlc3NhcmlseSBiZSByZXByZXNlbnRlZCBieSBhIHJlY3RhbmdsZS4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHB1Ymxp
Yy9XZWJDb250ZW50TGF5ZXIuaDoKKyAgICAgICAgKiBzcmMvV2ViQ29udGVudExheWVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVyOjppc0ludmFsaWQpOgorICAgICAgICAq
IHRlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcDoKKwogMjAxMS0xMS0xMSAgU3RlcGhlbiBDaGVu
bmV5ICA8c2NoZW5uZXlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gRFJUIGRv
ZXMgbm90IGhhdmUgTGF5b3V0VGVzdENvbnRyb2xsZXIucGFnZVNpemVBbmRNYXJnaW5zSW5QaXhl
bHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDQ0OTQ1ODZhNTdj
YTE2YmM0YjRmMjMyNDEwZGI4ZjdmZDRjZDg4YzEuLjJmYzQ4M2E5NzZjNDk5MGIwMDI0M2U2MWQ5
YzUxZmEwOTczMjYyYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcApA
QCAtNjcsNyArNjcsNyBAQCBib29sIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50
KCkgY29uc3QKIAogdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JS
ZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJikKIHsKLSAgICBp
ZiAobV9kaXJ0eVJlY3QuaXNFbXB0eSgpIHx8ICFkcmF3c0NvbnRlbnQoKSkKKyAgICBpZiAoIW1f
bmVlZHNEaXNwbGF5IHx8ICFkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKG1fY29udGV4dCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4
IGRiMGFlNDY5OWU3ODk2OTJmNTFjNDBiOGNkZTc2NDg0ZmQxYzRhYTguLjk4NWM3YzE1MGRiMTI4
OTU4NDg5ZmE2YmU5NGE5MjljODMwMzVlZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHAKQEAgLTEwMywxMCArMTAzLDYgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6
cGFpbnRDb250ZW50c0lmRGlydHkoKQogICAgIGlmIChsYXllclJlY3QuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBJbnRSZWN0IGRpcnR5ID0gZW5jbG9zaW5nSW50UmVjdChtX2Rp
cnR5UmVjdCk7Ci0gICAgZGlydHkuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29udGVu
dEJvdW5kcygpKSk7Ci0gICAgaW52YWxpZGF0ZVJlY3QoZGlydHkpOwotCiAgICAgaWYgKCFkcmF3
c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMTksNiArMTE1LDIwIEBAIGJvb2wg
Q29udGVudExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiAgICAgcmV0dXJuIG1f
ZGVsZWdhdGUgJiYgbV9kZWxlZ2F0ZS0+ZHJhd3NDb250ZW50KCkgJiYgVGlsZWRMYXllckNocm9t
aXVtOjpkcmF3c0NvbnRlbnQoKTsKIH0KIAordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6c2V0
TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KQoreworICAgIEludFJlY3Qg
ZGlydHkgPSBlbmNsb3NpbmdJbnRSZWN0KGRpcnR5UmVjdCk7CisgICAgaW52YWxpZGF0ZVJlY3Qo
ZGlydHkpOworICAgIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheShkaXJ0eVJlY3QpOwor
fQorCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAg
IEludFJlY3QgZGlydHkoSW50UG9pbnQoKSwgYm91bmRzKCkpOworICAgIGludmFsaWRhdGVSZWN0
KGRpcnR5KTsKKyAgICBMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoKTsKK30KKwogdm9p
ZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXll
clRyZWVIb3N0KiBob3N0KQogewogI2lmIFVTRShTS0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmgKaW5kZXggYjgzNGU2NzZiZDYzNDQ1YWE0NTNiMzY1ZWVlMjgwMjQwZjM4MDljMS4u
YTRhMTE0NjAwZGFmMDQxNDhjMTNlM2VjNzk5Njg1N2FjYTY3MDIzMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5oCkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5Db250ZW50TGF5ZXJDaHJvbWl1bSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVu
dHNJZkRpcnR5KCk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9h
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAKIHByb3RlY3Rl
ZDoKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDBiZDgyYWUxYTE4YTI1MzBmODc0
MjBlNDgxZDBkNWNhMjMwYjkwMTIuLjY3MTc1M2IzNGIwNjdjMGJjYjU3ZWViNTU3ZDVkNGM2MGE2
MDIyYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtMTYzLDE4ICsxNjMs
MTcgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKEltYWdlKiBjb250ZW50
cykKIAogICAgIG1fY29udGVudHMgPSBjb250ZW50czsKICAgICBtX2ltYWdlRm9yQ3VycmVudEZy
YW1lID0gbV9jb250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBtX2Rp
cnR5UmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIGJvdW5kcygpKTsKICAgICBzZXROZWVk
c0Rpc3BsYXkoKTsKICAgICBzZXRPcGFxdWUoIW1fY29udGVudHMtPmN1cnJlbnRGcmFtZUhhc0Fs
cGhhKCkpOwogfQogCiB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGly
dHkoKQogewotICAgIGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fbmVl
ZHNEaXNwbGF5KSB7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPnVwZGF0ZUZyb21JbWFnZSht
X2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKTsKICAgICAgICAgdXBkYXRl
VGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKTsKICAgICAgICAgSW50UmVjdCBwYWludFJlY3QoSW50
UG9pbnQoKSwgY29udGVudEJvdW5kcygpKTsKLSAgICAgICAgaWYgKCFtX2RpcnR5UmVjdC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgaWYgKG1fbmVlZHNEaXNwbGF5KSB7CiAgICAgICAgICAgICBpbnZh
bGlkYXRlUmVjdChwYWludFJlY3QpOwogICAgICAgICAgICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsK
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCBkOTcxN2UxZjY0Mzk2MmYzYzFm
ZWNmZTAwODQ2MGJmMDE0OWRmODZmLi5mZGE0ZmE3NThjOGJhNGI5NWVlOGZkYjVmYjM2ZGE3ZmUz
Yzk2MWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtNTYsNiArNTYsNyBAQCBQYXNzUmVm
UHRyPExheWVyQ2hyb21pdW0+IExheWVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyRGVsZWdhdGUq
IGRlbGVnYXRlKQogCiBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0
ZSogZGVsZWdhdGUpCiAgICAgOiBtX2RlbGVnYXRlKGRlbGVnYXRlKQorICAgICwgbV9uZWVkc0Rp
c3BsYXkoZmFsc2UpCiAgICAgLCBtX2xheWVySWQoc19uZXh0TGF5ZXJJZCsrKQogICAgICwgbV9w
YXJlbnQoMCkKICAgICAsIG1fc2Nyb2xsYWJsZShmYWxzZSkKQEAgLTI3MSwyMCArMjcyLDIxIEBA
IHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGly
dHlSZWN0KQogICAgIC8vIFNpbXBseSBtYXJrIHRoZSBjb250ZW50cyBhcyBkaXJ0eS4gRm9yIG5v
bi1yb290IGxheWVycywgdGhlIGNhbGwgdG8KICAgICAvLyBzZXROZWVkc0NvbW1pdCB3aWxsIHNj
aGVkdWxlIGEgZnJlc2ggY29tcG9zaXRpbmcgcGFzcy4KICAgICAvLyBGb3IgdGhlIHJvb3QgbGF5
ZXIsIHNldE5lZWRzQ29tbWl0IGhhcyBubyBlZmZlY3QuCi0gICAgbV9kaXJ0eVJlY3QudW5pdGUo
ZGlydHlSZWN0KTsKKyAgICBpZiAoIWRpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIG1fbmVl
ZHNEaXNwbGF5ID0gdHJ1ZTsKKwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKIHZvaWQgTGF5
ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKLSAgICBtX2RpcnR5UmVjdC5zZXRMb2Nh
dGlvbihGbG9hdFBvaW50KCkpOwotICAgIG1fZGlydHlSZWN0LnNldFNpemUoYm91bmRzKCkpOwor
ICAgIG1fbmVlZHNEaXNwbGF5ID0gdHJ1ZTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCiB2
b2lkIExheWVyQ2hyb21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KCkKIHsKLSAgICBtX2RpcnR5UmVj
dCA9IEZsb2F0UmVjdCgpOworICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CiAKIHZvaWQg
TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmgKaW5kZXggMzM0NmRkODU4YmVjYmYwY2Y1ZTZkNWQ3NWU4ZDU5NWM1NjYxMWUx
Mi4uY2FlNzk2MDZhOGM4NGZiN2U4MDAzNDFhOGMxODZlMDg3MWZkMjAzNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaApAQCAtMTA1LDkgKzEwNSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1hc2tMYXll
cihMYXllckNocm9taXVtKiBtYXNrTGF5ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNrTGF5ZXI7IHNl
dE5lZWRzQ29tbWl0KCk7IH0KICAgICBMYXllckNocm9taXVtKiBtYXNrTGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX21hc2tMYXllci5nZXQoKTsgfQogCi0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXko
Y29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7
Ci0gICAgY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2RpcnR5
UmVjdDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0
JiBkaXJ0eVJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBi
b29sIG5lZWRzRGlzcGxheSgpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNEaXNwbGF5OyB9CiAgICAg
dm9pZCByZXNldE5lZWRzRGlzcGxheSgpOwogCiAgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9w
YWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgc2V0TmVlZHNDb21taXQoKTsgfQpAQCAtMjEy
LDggKzIxMiw4IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgc2V0TmVlZHNDb21taXQoKTsKIAot
ICAgIC8vIFRoZSBkaXJ0eSByZWN0IGlzIHRoZSB1bmlvbiBvZiBkYW1hZ2VkIHJlZ2lvbnMgdGhh
dCBuZWVkIHJlcGFpbnRpbmcvdXBkYXRpbmcuCi0gICAgRmxvYXRSZWN0IG1fZGlydHlSZWN0Owor
ICAgIC8vIFRoaXMgZmxhZyBpcyBzZXQgd2hlbiBsYXllciBuZWVkIHJlcGFpbnRpbmcvdXBkYXRp
bmcuCisgICAgYm9vbCBtX25lZWRzRGlzcGxheTsKIAogICAgIC8vIFRoZSB1cGRhdGUgcmVjdCBp
cyB0aGUgcmVnaW9uIG9mIHRoZSBjb21wb3NpdG9yIHJlc291cmNlIHRoYXQgd2FzIGFjdHVhbGx5
IHVwZGF0ZWQgYnkgdGhlIGNvbXBvc2l0b3IuCiAgICAgLy8gRm9yIGxheWVycyB0aGF0IG1heSBk
byB1cGRhdGluZyBvdXRzaWRlIHRoZSBjb21wb3NpdG9yJ3MgY29udHJvbCAoaS5lLiBwbHVnaW4g
bGF5ZXJzKSwgdGhpcyBpbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggYmQxZjM2Njc3MTczZDJkYzllZDRkNzliMDM2ZGI3Yjc4NGE2MjEyMi4uNjkyYzA4MjA4
MTUyMzY4NDQ0NGYwZGQzY2ZiZDgwNWM1MDJmZWFjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwCkBAIC0yNzEsOCArMjcxLDYgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06Omlu
dmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIGlmICghbV90aWxl
ciB8fCBjb250ZW50UmVjdC5pc0VtcHR5KCkgfHwgbV9za2lwc0RyYXcpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFpbihjb250ZW50UmVjdCk7Ci0KICAg
ICAvLyBEaXJ0eSByZWN0cyBhcmUgYWx3YXlzIGluIGxheWVyIHNwYWNlLCBhcyB0aGUgbGF5ZXIg
Y291bGQgYmUgcmVwb3NpdGlvbmVkCiAgICAgLy8gYWZ0ZXIgaW52YWxpZGF0aW9uLgogICAgIGNv
bnN0IEludFJlY3QgbGF5ZXJSZWN0ID0gbV90aWxlci0+Y29udGVudFJlY3RUb0xheWVyUmVjdChj
b250ZW50UmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAppbmRleCAyMzk0NTY4
ZjJkODI3OGY1OTc5YTdmZTBjNTYxNWQ5ZjcyMDk4YjY3Li5hY2Q2ZDI5M2ExMWMxZmI1NDkxZWI5
YTg3OWI3YjYwYTVlOTFiNTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTgyLDcgKzgyLDcgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JS
ZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEMKICAgICBpZiAoIW1fZGVsZWdh
dGUgfHwgIW1fcHJvdmlkZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2RpcnR5UmVj
dC5pc0VtcHR5KCkgJiYgdGV4dHVyZXNWYWxpZCgpKSB7CisgICAgaWYgKCFtX25lZWRzRGlzcGxh
eSAmJiB0ZXh0dXJlc1ZhbGlkKCkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7
IHBsYW5lIDwgbV9wbGFuZXM7IHBsYW5lKyspIHsKICAgICAgICAgICAgIE1hbmFnZWRUZXh0dXJl
KiB0ZXggPSBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUuZ2V0KCk7CiAgICAgICAgICAgICBp
ZiAoIXRleC0+cmVzZXJ2ZSh0ZXgtPnNpemUoKSwgdGV4LT5mb3JtYXQoKSkpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGE0YTlhODA1YmJlY2M1MGRmNDg0ZTdkNjI0NDdm
Y2MxZTY5MWNhNDkuLmJjYzdiZDc4Nzk5YTAwZTkxMmZkMjA3MGQ1NzYwYmEwY2FmYWI4Y2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdM
TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcApAQCAtNzAsNyArNzAsNyBAQCB2b2lkIFdl
YkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRl
eHQzRCogcmVuZGVyZXJDbwogICAgIGlmICghZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgaWYgKCFtX25lZWRzRGlz
cGxheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQpIHsKQEAg
LTg0LDcgKzg0LDcgQEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JS
ZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIHJlbmRlcmVyQ28KICAgICAgICAgbV90ZXh0dXJl
Q2hhbmdlZCA9IGZhbHNlOwogICAgIH0KICAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRo
ZSB0ZXh0dXJlIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuCi0gICAgaWYgKCFtX2RpcnR5UmVjdC5p
c0VtcHR5KCkgJiYgbV90ZXh0dXJlVXBkYXRlZCkgeworICAgIGlmIChtX25lZWRzRGlzcGxheSAm
JiBtX3RleHR1cmVVcGRhdGVkKSB7CiAgICAgICAgIC8vIHB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIg
cHJlcGFyZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBvZmYtc2NyZWVuIHJlbmRlciB0YXJnZXQgZm9y
IHVzZSBieSB0aGUgY29tcG9zaXRvci4KICAgICAgICAgZHJhd2luZ0J1ZmZlcigpLT5wdWJsaXNo
VG9QbGF0Zm9ybUxheWVyKCk7CiAgICAgICAgIGNvbnRleHQoKS0+bWFya0xheWVyQ29tcG9zaXRl
ZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVu
dExheWVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIu
aAppbmRleCA1MzBhNWU5YWZiNjMxYmY5ODZiNTIyYTFjNGY2MDNhYTBhMDQ1ZmQxLi5kOWMzYWEy
YjkwYWZhNDgzNDRkOTVlZWM5Njc5Y2VlMTVkMmM1MGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaApAQCAtNjAsOCArNjAsOCBAQCBwdWJs
aWM6CiAgICAgLy8gU2V0cyB0aGUgZW50aXJlIGxheWVyIGFzIGludmFsaWQsIGkuZS4gbmVlZHMg
dG8gdXBkYXRlIGl0cyBjb250ZW50LgogICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbnZhbGlkYXRl
KCk7CiAKLSAgICAvLyBSZXR1cm5zIHRoZSByZWdpb24gb2YgdGhlIGxheWVyIHRoYXQgaXMgY3Vy
cmVudGx5IGludmFsaWQuCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJGbG9hdFJlY3QgaW52YWxpZFJl
Y3QoKSBjb25zdDsKKyAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGxheWVyIGlzIGN1cnJlbnRs
eSBpbnZhbGlkLgorICAgIFdFQktJVF9FWFBPUlQgYm9vbCBpc0ludmFsaWQoKSBjb25zdDsKIAog
I2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgogICAgIFdlYkNvbnRlbnRMYXllcihjb25zdCBXVEY6
OlBhc3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwCmluZGV4IGRlOGQ5OThhZTk4YzRjMWNkZWQ1
NmI3YTQ4NzhjOGYzNDRlMjhhZDguLmYxMDRjM2RlYzk0ZmM5NjRjMDExOTY5MzY5YjM0NmJkZDYx
NmZhZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRM
YXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVy
LmNwcApAQCAtNTYsOSArNTYsOSBAQCB2b2lkIFdlYkNvbnRlbnRMYXllcjo6aW52YWxpZGF0ZSgp
CiAgICAgdW53cmFwPFdlYkNvbnRlbnRMYXllckltcGw+KCktPnNldE5lZWRzRGlzcGxheSgpOwog
fQogCi1XZWJGbG9hdFJlY3QgV2ViQ29udGVudExheWVyOjppbnZhbGlkUmVjdCgpIGNvbnN0Citi
b29sIFdlYkNvbnRlbnRMYXllcjo6aXNJbnZhbGlkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV2Vi
RmxvYXRSZWN0KGNvbnN0VW53cmFwPFdlYkNvbnRlbnRMYXllckltcGw+KCktPmRpcnR5UmVjdCgp
KTsKKyAgICByZXR1cm4gY29uc3RVbndyYXA8V2ViQ29udGVudExheWVySW1wbD4oKS0+bmVlZHNE
aXNwbGF5KCk7CiB9CiAKIFdlYkNvbnRlbnRMYXllcjo6V2ViQ29udGVudExheWVyKGNvbnN0IFBh
c3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4mIG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IGVkOWNlY2I5NjM2
NjE5YWNkMjVlNDAyMDU5MWFkYTZkMzYzYTkzMWIuLjdlOWE4NTM2MGZhMzA2YTcyOTcyYzlhMWI2
Y2RmYTkyODJjZTMzNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC01MzgsNyArNTM4LDcgQEAgVEVTVF9GKExheWVyQ2hy
b21pdW1UZXN0LCBnZXRSb290TGF5ZXJBZnRlclRyZWVNYW5pcHVsYXRpb25zKQogVEVTVF9GKExh
eWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRzRGlzcGxheUNhdXNlc0NvcnJlY3RCZWhhdmlv
cikKIHsKICAgICAvLyBUaGUgc2VtYW50aWNzIGZvciBzZXROZWVkc0Rpc3BsYXkgd2hpY2ggYXJl
IHRlc3RlZCBoZXJlOgotICAgIC8vICAgMS4gY3JlYXRlcyBhIHVuaW9uZWQgZGlydHlSZWN0IGFw
cHJvcHJpYXRlbHkuCisgICAgLy8gICAxLiBzZXRzIG5lZWRzRGlzcGxheSBmbGFnIGFwcHJvcHJp
YXRlbHkuCiAgICAgLy8gICAyLiBpbmRpcmVjdGx5IGNhbGxzIG5vdGlmeVN5bmNSZXF1aXJlZCwg
ZXhhY3RseSBvbmNlIGZvciBlYWNoIGNhbGwgdG8gc2V0TmVlZHNEaXNwbGF5LgogCiAgICAgTW9j
a0xheWVyRGVsZWdhdGUgbW9ja0RlbGVnYXRlOwpAQCAtNTUwLDQwICs1NTAsMzcgQEAgVEVTVF9G
KExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRzRGlzcGxheUNhdXNlc0NvcnJlY3RCZWhh
dmlvcikKICAgICBGbG9hdFJlY3QgZW1wdHlEaXJ0eVJlY3QgPSBGbG9hdFJlY3QoNDAuMGYsIDQ1
LjBmLCAwLCAwKTsKICAgICBGbG9hdFJlY3Qgb3V0T2ZCb3VuZHNEaXJ0eVJlY3QgPSBGbG9hdFJl
Y3QoNDAwLjBmLCA0MDUuMGYsIDUwMC4wZiwgNTAyLjBmKTsKIAotICAgIC8vIEJlZm9yZSBhbnl0
aGluZywgdGVzdExheWVyIHNob3VsZCBoYXZlIGFuIGVtcHR5IGRpcnR5IHJlY3QuCi0gICAgRVhQ
RUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIC8vIEJlZm9y
ZSBhbnl0aGluZywgdGVzdExheWVyIHNob3VsZCBub3QgYmUgZGlydHkuCisgICAgRVhQRUNUX0ZB
TFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gVGhpcyBpcyBqdXN0IGlu
aXRpYWxpemF0aW9uLCBidXQgbm90aWZ5U3luY1JlcXVpcmVkIGJlaGF2aW9yIGlzIHZlcmlmaWVk
IGFueXdheSB0byBhdm9pZCB3YXJuaW5ncy4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZ
X1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldEJvdW5kcyh0ZXN0
Qm91bmRzKSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1v
Y2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgpKTsKLSAgICBFWFBF
Q1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZB
TFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gVGhlIHJlYWwgdGVzdCBi
ZWdpbnMgaGVyZS4KIAotICAgIC8vIENhc2UgMTogYmFzaWMKKyAgICAvLyBDYXNlIDE6IG5lZWRz
RGlzcGxheSBmbGFnIHNob3VsZCBub3QgY2hhbmdlIGJlY2F1c2Ugb2YgYW4gZW1wdHkgZGlydHkg
cmVjdC4KKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0Rl
bGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShlbXB0eURpcnR5UmVjdCkpOwor
ICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKKworICAgIC8vIENh
c2UgMjogYmFzaWMuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9S
KG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHkxKSk7Ci0g
ICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKGRpcnR5MSwgdGVzdExheWVyLT5kaXJ0eVJl
Y3QoKSk7CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKLSAg
ICAvLyBDYXNlIDI6IGEgc2Vjb25kIGRpcnR5IHJlY3Qgc2hvdWxkIGJlIHVuaW9uZWQgb2YgZGly
dHkxIGFuZCBkaXJ0eTIuCisgICAgLy8gQ2FzZSAzOiBhIHNlY29uZCBkaXJ0eSByZWN0LgogICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEs
IHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5MikpOwotICAgIHZlcmlmeUZsb2F0UmVj
dHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxMy4wZiwgMTQuMGYpLCB0ZXN0
TGF5ZXItPmRpcnR5UmVjdCgpKTsKLQotICAgIC8vIENhc2UgMzogZGlydHkgcmVjdCBzaG91bGQg
bm90IGNoYW5nZSBiZWNhdXNlIG9mIGFuIGVtcHR5IGRpcnR5IHJlY3QuCi0gICAgRVhFQ1VURV9B
TkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVy
LT5zZXROZWVkc0Rpc3BsYXkoZW1wdHlEaXJ0eVJlY3QpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3Rz
QWxtb3N0RXF1YWwoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYsIDE0LjBmKSwgdGVzdExh
eWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3Bs
YXkoKSk7CiAKLSAgICAvLyBDYXNlIDQ6IExheWVyQ2hyb21pdW0gc2hvdWxkIGFjY2VwdCBkaXJ0
eSByZWN0cyB0aGF0IGdvIGJleW9uZCBpdHMgYm91bmRzCisgICAgLy8gQ2FzZSA0OiBMYXllckNo
cm9taXVtIHNob3VsZCBhY2NlcHQgZGlydHkgcmVjdHMgdGhhdCBnbyBiZXlvbmQgaXRzIGJvdW5k
cy4KKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVn
YXRlLCAwLCB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCkpOwogICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+
c2V0TmVlZHNEaXNwbGF5KG91dE9mQm91bmRzRGlydHlSZWN0KSk7Ci0gICAgdmVyaWZ5RmxvYXRS
ZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDg5MC4wZiwgODkyLjBmKSwg
dGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7Ci0KLSAgICAvLyBDYXNlIDU6IHNldE5lZWRzRGlzcGxh
eSgpIHdpdGhvdXQgdGhlIGRpcnR5IHJlY3QgYXJnIHNob3VsZCBjYXVzZSB0aGUgZW50aXJlIGJv
dW5kcyB0byBiZSBkaXJ0eSwKLSAgICAvLyAgICAgICAgIG92ZXJyaWRpbmcgYW55IGV4aXN0aW5n
IGRpcnR5IHJlY3QuCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9S
KG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKSk7Ci0gICAgdmVy
aWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgwLCAwLCB0ZXN0Qm91bmRzLndpZHRo
KCksIHRlc3RCb3VuZHMuaGVpZ2h0KCkpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBF
WFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAotICAgIC8vIHJlc2V0TmVl
ZHNEaXNwbGF5IHNob3VsZCBlbXB0eSB0aGUgZGlydHkgcmVjdCwgYW5kIE5PVCBjYWxsIG5vdGlm
eVN5bmNSZXF1aXJlZC4KKyAgICAvLyBDYXNlIDU6IHNldE5lZWRzRGlzcGxheSgpIHdpdGhvdXQg
dGhlIGRpcnR5IHJlY3QgYXJnLgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19C
RUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKSk7
Ci0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEs
IHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXll
ci0+bmVlZHNEaXNwbGF5KCkpOwogfQogCiBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNr
U2V0TmVlZHNEaXNwbGF5V2l0aE51bGxEZWxlZ2F0ZSkKQEAgLTU5NiwxMyArNTkzLDEzIEBAIFRF
U1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tTZXROZWVkc0Rpc3BsYXlXaXRoTnVsbERlbGVn
YXRlKQogICAgIEZsb2F0UmVjdCBkaXJ0eSA9IEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEuMGYs
IDIuMGYpOwogCiAgICAgdGVzdExheWVyLT5zZXRCb3VuZHModGVzdEJvdW5kcyk7Ci0gICAgdmVy
aWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgwLjBmLCAwLjBmLCA1MDEuMGYsIDUw
OC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXll
ci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgdGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgp
OwotICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICB0ZXN0TGF5
ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0eSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVx
dWFsKGRpcnR5LCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0
TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIH0KIAogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBj
aGVja1Byb3BlcnR5Q2hhbmdlQ2F1c2VzQ29ycmVjdEJlaGF2aW9yKQpAQCAtNjEzLDEwICs2MTAs
MTAgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1Byb3BlcnR5Q2hhbmdlQ2F1c2Vz
Q29ycmVjdEJlaGF2aW9yKQogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBkdW1teUxheWVyID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsgLy8ganVzdCBhIGR1bW15
IGxheWVyIGZvciB0aGlzIHRlc3QgY2FzZS4KIAogICAgIC8vIHNhbml0eSBjaGVjayBvZiBpbml0
aWFsIHRlc3QgY29uZGl0aW9uCi0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3Qo
KS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgp
KTsKIAogICAgIC8vIFRlc3QgcHJvcGVydGllcyB0aGF0IHNob3VsZCBub3QgY2FsbCBuZWVkc0Rp
c3BsYXkgYW5kIG5lZWRzQ29tbWl0IHdoZW4gY2hhbmdlZC4KLSAgICAvLyBub3RpZnlTeW5jUmVx
dWlyZWQgc2hvdWxkIG5vdCBiZSBjYWxsZWQsIGFuZCB0aGUgZGlydHlSZWN0IHNob3VsZCByZW1h
aW4gc3RpbGwgZW1wdHkuCisgICAgLy8gbm90aWZ5U3luY1JlcXVpcmVkIHNob3VsZCBub3QgYmUg
Y2FsbGVkLCBhbmQgdGhlIG5lZWRzRGlzcGxheSBmbGFnIHNob3VsZCByZW1haW4gZmFsc2UuCiAg
ICAgRVhQRUNUX0NBTEwoaW5pdGlhbERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGlt
ZXMoMCk7IC8vIG9sZCBkZWxlZ2F0ZSBzaG91bGQgbm90IGJlIHVzZWQgd2hlbiBzZXREZWxlZ2F0
ZSBnaXZlcyBhIG5ldyBkZWxlZ2F0ZS4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZ
TkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldERlbGVnYXRlKCZtb2Nr
RGVsZWdhdGUpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1Io
bW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldE5hbWUoIlRlc3QgTGF5ZXIiKSk7CkBAIC02
MzEsMTAgKzYyOCwxMCBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVydHlD
aGFuZ2VDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElG
WV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXREcmF3VHJhbnNm
b3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9U
SUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldFNjcmVlblNw
YWNlVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKICAgICBFWEVDVVRFX0FORF9W
RVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNl
dERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCg0LCA1LCA2LCA3KSkpOwotICAgIEVYUEVDVF9U
UlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
dGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBOZXh0LCB0ZXN0IHByb3BlcnRp
ZXMgdGhhdCBzaG91bGQgY2FsbCBzZXROZWVkc0NvbW1pdCAoYnV0IG5vdCBzZXROZWVkc0Rpc3Bs
YXkpCi0gICAgLy8gVGhlc2UgcHJvcGVydGllcyBzaG91bGQgaW5kaXJlY3RseSBjYWxsIG5vdGlm
eVN5bmNSZXF1aXJlZCwgYnV0IHRoZSBkaXJ0eSByZWN0IHNob3VsZCBub3QgY2hhbmdlLgorICAg
IC8vIFRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIGluZGlyZWN0bHkgY2FsbCBub3RpZnlTeW5jUmVx
dWlyZWQsIGJ1dCB0aGUgbmVlZHNEaXNwbGF5IGZsYWcgc2hvdWxkIG5vdCBjaGFuZ2UuCiAgICAg
Ly8gTm90ZSB0aGF0IGZvciBtYW55IG9mIHRoZXNlIHByb3BlcnRpZXMgaXQgaXMgaW1wb3J0YW50
IHRvIHRlc3Qgc2V0dGluZyB0aGUgcHJvcGVydHkgdG8gYSB2YWx1ZSB0aGF0CiAgICAgLy8gaXMg
ZGlmZmVyZW50IHRoYW4gd2hhdCB0aGUgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgaXQgdG8uCiAg
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwg
MSwgdGVzdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDEuMjNmLCA0LjU2ZikpKTsK
QEAgLTY1MCwxNSArNjQ3LDE1IEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tQcm9w
ZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKICAgICBFWEVDVVRFX0FORF9WRVJJRllf
Tk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldFRyYW5z
Zm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05P
VElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXREb3VibGVT
aWRlZChmYWxzZSkpOwogCi0gICAgLy8gVGhlIGFib3ZlIHRlc3RzIHNob3VsZCBub3QgaGF2ZSBj
YXVzZWQgYSBub24tZW1wdHkgZGlydHkgcmVjdC4KLSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXIt
PmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAgLy8gVGhlIGFib3ZlIHRlc3RzIHNob3VsZCBu
b3QgaGF2ZSBjYXVzZWQgYSBjaGFuZ2UgdG8gdGhlIG5lZWRzRGlzcGxheSBmbGFnLgorICAgIEVY
UEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIFRlc3QgcHJv
cGVydGllcyB0aGF0IHNob3VsZCBjYWxsIHNldE5lZWRzRGlzcGxheQotICAgIC8vIFRoZXNlIHBy
b3BlcnRpZXMgd2lsbCBjYWxsIG5vdGlmeVN5bmNSZXF1aXJlZCBhbmQgY2hhbmdlIHRoZSBkaXJ0
eSByZWN0LgorICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgd2lsbCBjYWxsIG5vdGlmeVN5bmNSZXF1
aXJlZCBhbmQgY2hhbmdlIHRoZSBuZWVkc0Rpc3BsYXkgZmxhZy4KICAgICBFWEVDVVRFX0FORF9W
RVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNl
dEJvdW5kcyhJbnRTaXplKDUsIDEwKSkpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVh
bChGbG9hdFJlY3QoMC4wZiwgMC4wZiwgNS4wZiwgMTAuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVj
dCgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKICAgICB0
ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgRVhQRUNUX1RSVUUodGVzdExheWVy
LT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5l
ZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIEZJWE1FOiBuZWVkIHRvIGFkZCBhIHRlc3QgZm9yIHNl
dExheWVyVHJlZUhvc3Qgd2l0aCBhIG5vbi1udWxsIHN0dWJiZWQgQ0NMYXllclRyZWVIb3N0Lgog
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115899</attachid>
            <date>2011-11-18 16:01:59 -0800</date>
            <delta_ts>2011-11-20 16:45:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Chromium-Improve-tile-invalidation.patch</filename>
            <type>text/plain</type>
            <size>23158</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">RnJvbSAzYTkyMDk2OTJiYzVlMGFiNzI2MDUwMDY5NDA4MDM1ZDUzMmY1YjIxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSZXZlbWFuIDxyZXZlbWFuQGNocm9taXVtLm9yZz4K
RGF0ZTogVHVlLCAxNSBOb3YgMjAxMSAxMjoxOTowMyAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIFtD
aHJvbWl1bV0gSW1wcm92ZSB0aWxlIGludmFsaWRhdGlvbi4KCi0tLQogU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM4ICsrKysrKysrKysrKwog
Li4uL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAgICAgfCAgICAy
ICstCiAuLi4vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwICAgICB8
ICAgMjggKysrKystLS0tCiAuLi4vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uaCAgICAgICB8ICAgIDIgKwogLi4uL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJv
bWl1bS5jcHAgICAgICAgfCAgICA1ICstCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAgICB8ICAgMTAgKystCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oICAgICB8ICAgMTAgKystLQogLi4uL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgICAgICAgfCAgICAyIC0KIC4uLi9ncmFwaGljcy9j
aHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwICAgICAgIHwgICAgMiArLQogLi4uL2dyYXBo
aWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAgICAgICAgfCAgICA0ICstCiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICB8ICAgMTYgKysr
KysKIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllci5oICAgIHwg
ICAgNCArLQogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcCAg
ICAgfCAgICA0ICstCiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1U
ZXN0LmNwcCB8ICAgNjMgKysrKysrKysrLS0tLS0tLS0tLQogMTQgZmlsZXMgY2hhbmdlZCwgMTI0
IGluc2VydGlvbnMoKyksIDY2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwZmZmOWNmLi5i
MmMyN2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMTEtMDkgIERhdmlkIFJl
dmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEltcHJv
dmUgdGlsZSBpbnZhbGlkYXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MTg3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFZpcnR1YWxpemUgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5IHNv
IHRoYXQgZGlydHkgcmVjdGFuZ2xlcworICAgICAgICBjYW4gYmUgaGFuZGxlZCBkaXJlY3RseSBi
eSB0aGUgVGlsZWRMYXllckNocm9taXVtIGNsYXNzLgorICAgICAgICBSZXBsYWNlIExheWVyQ2hy
b21pdW06OmRpcnR5UmVjdCgpIHdpdGggOjpuZWVkc0Rpc3BsYXkoKSBhbmQgcmVtb3ZlCisgICAg
ICAgIHVubmVjZXNzYXJ5IHVuaW9uaXppbmcgb2YgZGlydHkgcmVjdGFuZ2xlcy4gQnkgaW52YWxp
ZGF0aW5nIGV4aXN0aW5nCisgICAgICAgIHRpbGVzIHVzaW5nIHRoZSBpbml0aWFsIGRpcnR5IHJl
Y3RhbmdsZXMgaW5zdGVhZCBvZiB0aGVpciB1bmlvbiB3ZQorICAgICAgICBhdm9pZCBhIGxhcmdl
IGFtb3VudCBvZiB1bm5lY2Vzc2FyeSB0aWxlIHVwZGF0ZXMuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVu
dHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpzZXRO
ZWVkc0Rpc3BsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJv
bWl1bTo6c2V0Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVt
OjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldE5l
ZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpyZXNldE5lZWRz
RGlzcGxheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6bmVlZHNEaXNwbGF5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppbnZhbGlkYXRlUmVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
V2ViR0xMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisKIDIwMTEtMTEtMTggIFZpbmVldCBD
aGF1ZGhhcnkgIDx2aW5lZXQuY2hhdWRoYXJ5QG1vdG9yb2xhLmNvbT4KIAogICAgICAgICBBY2Nl
c3Mga2V5IHNob3VsZCB3b3JrIG9uIGFsbCBlbGVtZW50cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExh
eWVyQ2hyb21pdW0uY3BwCmluZGV4IDM5ZDJkMTYuLjk5Yzk1NjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzMkRMYXllckNocm9taXVtLmNwcApAQCAtODIsNyArODIsNyBAQCBib29sIENhbnZhczJETGF5
ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIAogdm9pZCBDYW52YXMyRExheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQogewotICAgIGlmIChtX2RpcnR5UmVj
dC5pc0VtcHR5KCkgfHwgIWRyYXdzQ29udGVudCgpKQorICAgIGlmICghbV9uZWVkc0Rpc3BsYXkg
fHwgIWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9jb250ZXh0
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggN2U4YjdiNi4uYzI2
NWVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTA1LDI0ICsx
MDUsMTYgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlSWZEaXJ0
eSgpCiAgICAgaWYgKGRyYXdzQ29udGVudCgpKQogICAgICAgICBsYXllclJlY3QgPSB2aXNpYmxl
TGF5ZXJSZWN0KCk7CiAKLSAgICBJbnRSZWN0IGRpcnR5ID0gZW5jbG9zaW5nSW50UmVjdChtX2Rp
cnR5UmVjdCk7Ci0gICAgZGlydHkuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29udGVu
dEJvdW5kcygpKSk7Ci0gICAgaW52YWxpZGF0ZVJlY3QoZGlydHkpOwotCiAgICAgcHJlcGFyZVRv
VXBkYXRlKGxheWVyUmVjdCk7CiAgICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAogdm9pZCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQogewotICAgIEFTU0VS
VChkcmF3c0NvbnRlbnQoKSk7Ci0KLSAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QgPSB2aXNp
YmxlTGF5ZXJSZWN0KCk7Ci0gICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBJbnRSZWN0IGxheWVyUmVjdDsKIAotICAgIGlmICghZHJhd3NDb250ZW50KCkp
Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZHJhd3NDb250ZW50KCkpCisgICAgICAgIGxheWVy
UmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKIAogICAgIHBhaW50Q29udGVudHMobGF5ZXJSZWN0
KTsKIH0KQEAgLTEzMiw2ICsxMjQsMjAgQEAgYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJh
d3NDb250ZW50KCkgY29uc3QKICAgICByZXR1cm4gbV9kZWxlZ2F0ZSAmJiBtX2RlbGVnYXRlLT5k
cmF3c0NvbnRlbnQoKSAmJiBUaWxlZExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpOwogfQog
Cit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRS
ZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgSW50UmVjdCBkaXJ0eSA9IGVuY2xvc2luZ0ludFJlY3Qo
ZGlydHlSZWN0KTsKKyAgICBpbnZhbGlkYXRlUmVjdChkaXJ0eSk7CisgICAgTGF5ZXJDaHJvbWl1
bTo6c2V0TmVlZHNEaXNwbGF5KGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgQ29udGVudExheWVyQ2hy
b21pdW06OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgSW50UmVjdCBkaXJ0eShJbnRQb2ludCgp
LCBib3VuZHMoKSk7CisgICAgaW52YWxpZGF0ZVJlY3QoZGlydHkpOworICAgIExheWVyQ2hyb21p
dW06OnNldE5lZWRzRGlzcGxheSgpOworfQorCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpj
cmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7CiAjaWYg
VVNFKFNLSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAppbmRleCBjNWU5ZmNjLi4y
NmU3ZmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTUxLDYgKzUxLDgg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZUlmRGlydHkoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc0Rpc3BsYXkoKTsKIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENvbnRlbnRMYXll
ckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggZDU2MzM1MS4uZWY1MjZkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0u
Y3BwCkBAIC0xNzcsMTggKzE3NywxNyBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29u
dGVudHMoSW1hZ2UqIGNvbnRlbnRzKQogCiAgICAgbV9jb250ZW50cyA9IGNvbnRlbnRzOwogICAg
IG1faW1hZ2VGb3JDdXJyZW50RnJhbWUgPSBtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwotICAgIG1fZGlydHlSZWN0ID0gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgYm91
bmRzKCkpOwogICAgIHNldE5lZWRzRGlzcGxheSgpOwogICAgIHNldE9wYXF1ZSghbV9jb250ZW50
cy0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSk7CiB9CiAKIHZvaWQgSW1hZ2VMYXllckNocm9taXVt
OjpwcmVwYXJlVG9VcGRhdGVJZkRpcnR5KCkKIHsKLSAgICBpZiAoIW1fZGlydHlSZWN0LmlzRW1w
dHkoKSkgeworICAgIGlmIChtX25lZWRzRGlzcGxheSkgewogICAgICAgICBtX3RleHR1cmVVcGRh
dGVyLT51cGRhdGVGcm9tSW1hZ2UobV9jb250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKSk7CiAgICAgICAgIHVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCk7CiAgICAgICAg
IEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSk7Ci0gICAgICAg
IGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX25lZWRzRGlzcGxh
eSkgewogICAgICAgICAgICAgaW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0KTsKICAgICAgICAgICAg
IHJlc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggMzYyOTA4ZC4uYTk5OGNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTU2LDYgKzU2
LDcgQEAgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBMYXllckNocm9taXVtOjpjcmVhdGUoQ0NM
YXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKIAogTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShD
Q0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogICAgIDogbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKKyAg
ICAsIG1fbmVlZHNEaXNwbGF5KGZhbHNlKQogICAgICwgbV9sYXllcklkKHNfbmV4dExheWVySWQr
KykKICAgICAsIG1fcGFyZW50KDApCiAgICAgLCBtX3Njcm9sbGFibGUoZmFsc2UpCkBAIC0yNjIs
MjAgKzI2MywyMSBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheShjb25zdCBG
bG9hdFJlY3QmIGRpcnR5UmVjdCkKICAgICAvLyBTaW1wbHkgbWFyayB0aGUgY29udGVudHMgYXMg
ZGlydHkuIEZvciBub24tcm9vdCBsYXllcnMsIHRoZSBjYWxsIHRvCiAgICAgLy8gc2V0TmVlZHND
b21taXQgd2lsbCBzY2hlZHVsZSBhIGZyZXNoIGNvbXBvc2l0aW5nIHBhc3MuCiAgICAgLy8gRm9y
IHRoZSByb290IGxheWVyLCBzZXROZWVkc0NvbW1pdCBoYXMgbm8gZWZmZWN0LgotICAgIG1fZGly
dHlSZWN0LnVuaXRlKGRpcnR5UmVjdCk7CisgICAgaWYgKCFkaXJ0eVJlY3QuaXNFbXB0eSgpKQor
ICAgICAgICBtX25lZWRzRGlzcGxheSA9IHRydWU7CisKICAgICBzZXROZWVkc0NvbW1pdCgpOwog
fQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpCiB7Ci0gICAgbV9kaXJ0
eVJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKLSAgICBtX2RpcnR5UmVjdC5zZXRTaXpl
KGJvdW5kcygpKTsKKyAgICBtX25lZWRzRGlzcGxheSA9IHRydWU7CiAgICAgc2V0TmVlZHNDb21t
aXQoKTsKIH0KIAogdm9pZCBMYXllckNocm9taXVtOjpyZXNldE5lZWRzRGlzcGxheSgpCiB7Ci0g
ICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNl
OwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwq
IGxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDM5ZWQ5YmMuLmM2MDA1MzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmgKQEAgLTEwNSw5ICsxMDUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNYXNr
TGF5ZXIoTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyKSB7IG1fbWFza0xheWVyID0gbWFza0xheWVy
OyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyKCkgY29u
c3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIuZ2V0KCk7IH0KIAotICAgIHZvaWQgc2V0TmVlZHNEaXNw
bGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxh
eSgpOwotICAgIGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9k
aXJ0eVJlY3Q7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0
UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Cisg
ICAgYm9vbCBuZWVkc0Rpc3BsYXkoKSBjb25zdCB7IHJldHVybiBtX25lZWRzRGlzcGxheTsgfQog
ICAgIHZvaWQgcmVzZXROZWVkc0Rpc3BsYXkoKTsKIAogICAgIHZvaWQgc2V0T3BhY2l0eShmbG9h
dCBvcGFjaXR5KSB7IG1fb3BhY2l0eSA9IG9wYWNpdHk7IHNldE5lZWRzQ29tbWl0KCk7IH0KQEAg
LTIxNiw4ICsyMTYsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIHNldE5lZWRzQ29tbWl0KCk7
CiAKLSAgICAvLyBUaGUgZGlydHkgcmVjdCBpcyB0aGUgdW5pb24gb2YgZGFtYWdlZCByZWdpb25z
IHRoYXQgbmVlZCByZXBhaW50aW5nL3VwZGF0aW5nLgotICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVj
dDsKKyAgICAvLyBUaGlzIGZsYWcgaXMgc2V0IHdoZW4gbGF5ZXIgbmVlZCByZXBhaW50aW5nL3Vw
ZGF0aW5nLgorICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXk7CiAKICAgICAvLyBUaGUgdXBkYXRlIHJl
Y3QgaXMgdGhlIHJlZ2lvbiBvZiB0aGUgY29tcG9zaXRvciByZXNvdXJjZSB0aGF0IHdhcyBhY3R1
YWxseSB1cGRhdGVkIGJ5IHRoZSBjb21wb3NpdG9yLgogICAgIC8vIEZvciBsYXllcnMgdGhhdCBt
YXkgZG8gdXBkYXRpbmcgb3V0c2lkZSB0aGUgY29tcG9zaXRvcidzIGNvbnRyb2wgKGkuZS4gcGx1
Z2luIGxheWVycyksIHRoaXMgaW5mb3JtYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IDdkZWNjMGUuLmU4N2M4MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcApAQCAtMjY1LDggKzI2NSw2IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjppbnZhbGlk
YXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICBpZiAoIW1fdGlsZXIgfHwg
Y29udGVudFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNEcmF3KQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJlY3QpOwotCiAgICAgLy8g
RGlydHkgcmVjdHMgYXJlIGFsd2F5cyBpbiBsYXllciBzcGFjZSwgYXMgdGhlIGxheWVyIGNvdWxk
IGJlIHJlcG9zaXRpb25lZAogICAgIC8vIGFmdGVyIGludmFsaWRhdGlvbi4KICAgICBjb25zdCBJ
bnRSZWN0IGxheWVyUmVjdCA9IG1fdGlsZXItPmNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVu
dFJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNGRjOTYxNC4uMzU0
N2FmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVmlkZW9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCkBAIC0xMTIsNyArMTEyLDcg
QEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZUlmRGlydHkoKQogICAg
IGlmICghbV9kZWxlZ2F0ZSB8fCAhbV9wcm92aWRlciB8fCAhZHJhd3NDb250ZW50KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5KCkgJiYgdGV4dHVyZXNW
YWxpZCgpKSB7CisgICAgaWYgKCFtX25lZWRzRGlzcGxheSAmJiB0ZXh0dXJlc1ZhbGlkKCkpIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgbV9wbGFuZXM7IHBsYW5l
KyspIHsKICAgICAgICAgICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXggPSBtX3RleHR1cmVzW3BsYW5l
XS5tX3RleHR1cmUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIXRleC0+cmVzZXJ2ZSh0ZXgtPnNp
emUoKSwgdGV4LT5mb3JtYXQoKSkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCmlu
ZGV4IDdmZTQzZGIuLjMzYWYzYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcApA
QCAtODcsNyArODcsNyBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogcmVuZGVyZXJDbwogICAgIGlmICghZHJhd3ND
b250ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5
KCkpCisgICAgaWYgKG1fbmVlZHNEaXNwbGF5KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
bV90ZXh0dXJlQ2hhbmdlZCkgewpAQCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQgV2ViR0xMYXllckNo
cm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiByZW5k
ZXJlckNvCiAgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSBmYWxzZTsKICAgICB9CiAgICAgLy8g
VXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9y
LgotICAgIGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpICYmIG1fdGV4dHVyZVVwZGF0ZWQpIHsK
KyAgICBpZiAobV9uZWVkc0Rpc3BsYXkgJiYgbV90ZXh0dXJlVXBkYXRlZCkgewogICAgICAgICAv
LyBwdWJsaXNoVG9QbGF0Zm9ybUxheWVyIHByZXBhcmVzIHRoZSBjb250ZW50cyBvZiB0aGUgb2Zm
LXNjcmVlbiByZW5kZXIgdGFyZ2V0IGZvciB1c2UgYnkgdGhlIGNvbXBvc2l0b3IuCiAgICAgICAg
IGRyYXdpbmdCdWZmZXIoKS0+cHVibGlzaFRvUGxhdGZvcm1MYXllcigpOwogICAgICAgICBjb250
ZXh0KCktPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggODRmM2E5YS4uMTI5YmZhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOSBAQAorMjAxMS0xMS0wOSAgRGF2aWQgUmV2ZW1hbiAgPHJldmVtYW5AY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFtDaHJvbWl1bV0gSW1wcm92ZSB0aWxlIGludmFsaWRhdGlvbi4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxODcyCisKKyAgICAg
ICAgUmVwbGFjZSBXZWJDb250ZW50TGF5ZXI6OmludmFsaWRSZWN0KCkgd2l0aCA6OmlzSW52YWxp
ZCgpLiBJbnZhbGlkYXRpb24KKyAgICAgICAgaXMgbGF5ZXIgdHlwZSBzcGVjaWZpYyBhbmQgdGhl
IGN1cnJlbnRseSBpbnZhbGlkIHJlZ2lvbiBjYW5ub3QKKyAgICAgICAgbmVjZXNzYXJpbHkgYmUg
cmVwcmVzZW50ZWQgYnkgYSByZWN0YW5nbGUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViQ29udGVudExheWVyLmg6CisgICAgICAg
ICogc3JjL1dlYkNvbnRlbnRMYXllci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRM
YXllcjo6aXNJbnZhbGlkKToKKyAgICAgICAgKiB0ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHA6
CisKIDIwMTEtMTEtMTcgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IGRpc3BhdGNoIG1lc3NhZ2VzIGZyb20gdGhlIGZyb250LWVu
ZCB0byB0aGUgYmFja2VuZCBhc3luY2hyb25vdXNseS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllci5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKaW5kZXggNTMwYTVlOS4uZDljM2FhMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKQEAg
LTYwLDggKzYwLDggQEAgcHVibGljOgogICAgIC8vIFNldHMgdGhlIGVudGlyZSBsYXllciBhcyBp
bnZhbGlkLCBpLmUuIG5lZWRzIHRvIHVwZGF0ZSBpdHMgY29udGVudC4KICAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgaW52YWxpZGF0ZSgpOwogCi0gICAgLy8gUmV0dXJucyB0aGUgcmVnaW9uIG9mIHRo
ZSBsYXllciB0aGF0IGlzIGN1cnJlbnRseSBpbnZhbGlkLgotICAgIFdFQktJVF9FWFBPUlQgV2Vi
RmxvYXRSZWN0IGludmFsaWRSZWN0KCkgY29uc3Q7CisgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRo
ZSBsYXllciBpcyBjdXJyZW50bHkgaW52YWxpZC4KKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaXNJ
bnZhbGlkKCkgY29uc3Q7CiAKICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KICAgICBXZWJDb250
ZW50TGF5ZXIoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+Jik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcAppbmRleCBk
ZThkOTk4Li5mMTA0YzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJDb250ZW50TGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNv
bnRlbnRMYXllci5jcHAKQEAgLTU2LDkgKzU2LDkgQEAgdm9pZCBXZWJDb250ZW50TGF5ZXI6Omlu
dmFsaWRhdGUoKQogICAgIHVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5zZXROZWVkc0Rp
c3BsYXkoKTsKIH0KIAotV2ViRmxvYXRSZWN0IFdlYkNvbnRlbnRMYXllcjo6aW52YWxpZFJlY3Qo
KSBjb25zdAorYm9vbCBXZWJDb250ZW50TGF5ZXI6OmlzSW52YWxpZCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIFdlYkZsb2F0UmVjdChjb25zdFVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5k
aXJ0eVJlY3QoKSk7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPFdlYkNvbnRlbnRMYXllckltcGw+
KCktPm5lZWRzRGlzcGxheSgpOwogfQogCiBXZWJDb250ZW50TGF5ZXI6OldlYkNvbnRlbnRMYXll
cihjb25zdCBQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+JiBub2RlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCBl
ZDljZWNiLi43ZTlhODUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0xheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0xheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtNTM4LDcgKzUzOCw3IEBAIFRFU1RfRihMYXllckNo
cm9taXVtVGVzdCwgZ2V0Um9vdExheWVyQWZ0ZXJUcmVlTWFuaXB1bGF0aW9ucykKIFRFU1RfRihM
YXllckNocm9taXVtVGVzdCwgY2hlY2tTZXROZWVkc0Rpc3BsYXlDYXVzZXNDb3JyZWN0QmVoYXZp
b3IpCiB7CiAgICAgLy8gVGhlIHNlbWFudGljcyBmb3Igc2V0TmVlZHNEaXNwbGF5IHdoaWNoIGFy
ZSB0ZXN0ZWQgaGVyZToKLSAgICAvLyAgIDEuIGNyZWF0ZXMgYSB1bmlvbmVkIGRpcnR5UmVjdCBh
cHByb3ByaWF0ZWx5LgorICAgIC8vICAgMS4gc2V0cyBuZWVkc0Rpc3BsYXkgZmxhZyBhcHByb3By
aWF0ZWx5LgogICAgIC8vICAgMi4gaW5kaXJlY3RseSBjYWxscyBub3RpZnlTeW5jUmVxdWlyZWQs
IGV4YWN0bHkgb25jZSBmb3IgZWFjaCBjYWxsIHRvIHNldE5lZWRzRGlzcGxheS4KIAogICAgIE1v
Y2tMYXllckRlbGVnYXRlIG1vY2tEZWxlZ2F0ZTsKQEAgLTU1MCw0MCArNTUwLDM3IEBAIFRFU1Rf
RihMYXllckNocm9taXVtVGVzdCwgY2hlY2tTZXROZWVkc0Rpc3BsYXlDYXVzZXNDb3JyZWN0QmVo
YXZpb3IpCiAgICAgRmxvYXRSZWN0IGVtcHR5RGlydHlSZWN0ID0gRmxvYXRSZWN0KDQwLjBmLCA0
NS4wZiwgMCwgMCk7CiAgICAgRmxvYXRSZWN0IG91dE9mQm91bmRzRGlydHlSZWN0ID0gRmxvYXRS
ZWN0KDQwMC4wZiwgNDA1LjBmLCA1MDAuMGYsIDUwMi4wZik7CiAKLSAgICAvLyBCZWZvcmUgYW55
dGhpbmcsIHRlc3RMYXllciBzaG91bGQgaGF2ZSBhbiBlbXB0eSBkaXJ0eSByZWN0LgotICAgIEVY
UEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICAvLyBCZWZv
cmUgYW55dGhpbmcsIHRlc3RMYXllciBzaG91bGQgbm90IGJlIGRpcnR5LgorICAgIEVYUEVDVF9G
QUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIFRoaXMgaXMganVzdCBp
bml0aWFsaXphdGlvbiwgYnV0IG5vdGlmeVN5bmNSZXF1aXJlZCBiZWhhdmlvciBpcyB2ZXJpZmll
ZCBhbnl3YXkgdG8gYXZvaWQgd2FybmluZ3MuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElG
WV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRCb3VuZHModGVz
dEJvdW5kcykpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUiht
b2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKSk7Ci0gICAgRVhQ
RUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9G
QUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIFRoZSByZWFsIHRlc3Qg
YmVnaW5zIGhlcmUuCiAKLSAgICAvLyBDYXNlIDE6IGJhc2ljCisgICAgLy8gQ2FzZSAxOiBuZWVk
c0Rpc3BsYXkgZmxhZyBzaG91bGQgbm90IGNoYW5nZSBiZWNhdXNlIG9mIGFuIGVtcHR5IGRpcnR5
IHJlY3QuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tE
ZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZW1wdHlEaXJ0eVJlY3QpKTsK
KyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CisKKyAgICAvLyBD
YXNlIDI6IGJhc2ljLgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklP
Uihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5MSkpOwot
ICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChkaXJ0eTEsIHRlc3RMYXllci0+ZGlydHlS
ZWN0KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCi0g
ICAgLy8gQ2FzZSAyOiBhIHNlY29uZCBkaXJ0eSByZWN0IHNob3VsZCBiZSB1bmlvbmVkIG9mIGRp
cnR5MSBhbmQgZGlydHkyLgorICAgIC8vIENhc2UgMzogYSBzZWNvbmQgZGlydHkgcmVjdC4KICAg
ICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAx
LCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0eTIpKTsKLSAgICB2ZXJpZnlGbG9hdFJl
Y3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYsIDE0LjBmKSwgdGVz
dExheWVyLT5kaXJ0eVJlY3QoKSk7Ci0KLSAgICAvLyBDYXNlIDM6IGRpcnR5IHJlY3Qgc2hvdWxk
IG5vdCBjaGFuZ2UgYmVjYXVzZSBvZiBhbiBlbXB0eSBkaXJ0eSByZWN0LgotICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXll
ci0+c2V0TmVlZHNEaXNwbGF5KGVtcHR5RGlydHlSZWN0KSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0
c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEzLjBmLCAxNC4wZiksIHRlc3RM
YXllci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNw
bGF5KCkpOwogCi0gICAgLy8gQ2FzZSA0OiBMYXllckNocm9taXVtIHNob3VsZCBhY2NlcHQgZGly
dHkgcmVjdHMgdGhhdCBnbyBiZXlvbmQgaXRzIGJvdW5kcworICAgIC8vIENhc2UgNDogTGF5ZXJD
aHJvbWl1bSBzaG91bGQgYWNjZXB0IGRpcnR5IHJlY3RzIHRoYXQgZ28gYmV5b25kIGl0cyBib3Vu
ZHMuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxl
Z2F0ZSwgMCwgdGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgpKTsKICAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXIt
PnNldE5lZWRzRGlzcGxheShvdXRPZkJvdW5kc0RpcnR5UmVjdCkpOwotICAgIHZlcmlmeUZsb2F0
UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCA4OTAuMGYsIDg5Mi4wZiks
IHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwotCi0gICAgLy8gQ2FzZSA1OiBzZXROZWVkc0Rpc3Bs
YXkoKSB3aXRob3V0IHRoZSBkaXJ0eSByZWN0IGFyZyBzaG91bGQgY2F1c2UgdGhlIGVudGlyZSBi
b3VuZHMgdG8gYmUgZGlydHksCi0gICAgLy8gICAgICAgICBvdmVycmlkaW5nIGFueSBleGlzdGlu
ZyBkaXJ0eSByZWN0LgotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklP
Uihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCkpOwotICAgIHZl
cmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMCwgMCwgdGVzdEJvdW5kcy53aWR0
aCgpLCB0ZXN0Qm91bmRzLmhlaWdodCgpKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAg
RVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKLSAgICAvLyByZXNldE5l
ZWRzRGlzcGxheSBzaG91bGQgZW1wdHkgdGhlIGRpcnR5IHJlY3QsIGFuZCBOT1QgY2FsbCBub3Rp
ZnlTeW5jUmVxdWlyZWQuCisgICAgLy8gQ2FzZSA1OiBzZXROZWVkc0Rpc3BsYXkoKSB3aXRob3V0
IHRoZSBkaXJ0eSByZWN0IGFyZy4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNf
QkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCkp
OwotICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKyAg
ICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAx
LCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5
ZXItPm5lZWRzRGlzcGxheSgpKTsKIH0KIAogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVj
a1NldE5lZWRzRGlzcGxheVdpdGhOdWxsRGVsZWdhdGUpCkBAIC01OTYsMTMgKzU5MywxMyBAQCBU
RVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5V2l0aE51bGxEZWxl
Z2F0ZSkKICAgICBGbG9hdFJlY3QgZGlydHkgPSBGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxLjBm
LCAyLjBmKTsKIAogICAgIHRlc3RMYXllci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpOwotICAgIHZl
cmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMC4wZiwgMC4wZiwgNTAxLjBmLCA1
MDguMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5
ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAgIHRlc3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXko
KTsKLSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgdGVzdExh
eWVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHkpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RF
cXVhbChkaXJ0eSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX1RSVUUodGVz
dExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwg
Y2hlY2tQcm9wZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKQEAgLTYxMywxMCArNjEw
LDEwIEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tQcm9wZXJ0eUNoYW5nZUNhdXNl
c0NvcnJlY3RCZWhhdmlvcikKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZHVtbXlMYXllciA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7IC8vIGp1c3QgYSBkdW1t
eSBsYXllciBmb3IgdGhpcyB0ZXN0IGNhc2UuCiAKICAgICAvLyBzYW5pdHkgY2hlY2sgb2YgaW5p
dGlhbCB0ZXN0IGNvbmRpdGlvbgotICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0
KCkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXko
KSk7CiAKICAgICAvLyBUZXN0IHByb3BlcnRpZXMgdGhhdCBzaG91bGQgbm90IGNhbGwgbmVlZHNE
aXNwbGF5IGFuZCBuZWVkc0NvbW1pdCB3aGVuIGNoYW5nZWQuCi0gICAgLy8gbm90aWZ5U3luY1Jl
cXVpcmVkIHNob3VsZCBub3QgYmUgY2FsbGVkLCBhbmQgdGhlIGRpcnR5UmVjdCBzaG91bGQgcmVt
YWluIHN0aWxsIGVtcHR5LgorICAgIC8vIG5vdGlmeVN5bmNSZXF1aXJlZCBzaG91bGQgbm90IGJl
IGNhbGxlZCwgYW5kIHRoZSBuZWVkc0Rpc3BsYXkgZmxhZyBzaG91bGQgcmVtYWluIGZhbHNlLgog
ICAgIEVYUEVDVF9DQUxMKGluaXRpYWxEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRp
bWVzKDApOyAvLyBvbGQgZGVsZWdhdGUgc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gc2V0RGVsZWdh
dGUgZ2l2ZXMgYSBuZXcgZGVsZWdhdGUuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9T
WU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXREZWxlZ2F0ZSgmbW9j
a0RlbGVnYXRlKSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9S
KG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXROYW1lKCJUZXN0IExheWVyIikpOwpAQCAt
NjMxLDEwICs2MjgsMTAgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1Byb3BlcnR5
Q2hhbmdlQ2F1c2VzQ29ycmVjdEJlaGF2aW9yKQogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJ
RllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0RHJhd1RyYW5z
Zm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05P
VElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXRTY3JlZW5T
cGFjZVRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKSk7CiAgICAgRVhFQ1VURV9BTkRf
VkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5z
ZXREcmF3YWJsZUNvbnRlbnRSZWN0KEludFJlY3QoNCwgNSwgNiwgNykpKTsKLSAgICBFWFBFQ1Rf
VFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNF
KHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gTmV4dCwgdGVzdCBwcm9wZXJ0
aWVzIHRoYXQgc2hvdWxkIGNhbGwgc2V0TmVlZHNDb21taXQgKGJ1dCBub3Qgc2V0TmVlZHNEaXNw
bGF5KQotICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIGluZGlyZWN0bHkgY2FsbCBub3Rp
ZnlTeW5jUmVxdWlyZWQsIGJ1dCB0aGUgZGlydHkgcmVjdCBzaG91bGQgbm90IGNoYW5nZS4KKyAg
ICAvLyBUaGVzZSBwcm9wZXJ0aWVzIHNob3VsZCBpbmRpcmVjdGx5IGNhbGwgbm90aWZ5U3luY1Jl
cXVpcmVkLCBidXQgdGhlIG5lZWRzRGlzcGxheSBmbGFnIHNob3VsZCBub3QgY2hhbmdlLgogICAg
IC8vIE5vdGUgdGhhdCBmb3IgbWFueSBvZiB0aGVzZSBwcm9wZXJ0aWVzIGl0IGlzIGltcG9ydGFu
dCB0byB0ZXN0IHNldHRpbmcgdGhlIHByb3BlcnR5IHRvIGEgdmFsdWUgdGhhdAogICAgIC8vIGlz
IGRpZmZlcmVudCB0aGFuIHdoYXQgdGhlIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIGl0IHRvLgog
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUs
IDEsIHRlc3RMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgxLjIzZiwgNC41NmYpKSk7
CkBAIC02NTAsMTUgKzY0NywxNSBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJv
cGVydHlDaGFuZ2VDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRUcmFu
c2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9O
T1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0RG91Ymxl
U2lkZWQoZmFsc2UpKTsKIAotICAgIC8vIFRoZSBhYm92ZSB0ZXN0cyBzaG91bGQgbm90IGhhdmUg
Y2F1c2VkIGEgbm9uLWVtcHR5IGRpcnR5IHJlY3QuCi0gICAgRVhQRUNUX1RSVUUodGVzdExheWVy
LT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIC8vIFRoZSBhYm92ZSB0ZXN0cyBzaG91bGQg
bm90IGhhdmUgY2F1c2VkIGEgY2hhbmdlIHRvIHRoZSBuZWVkc0Rpc3BsYXkgZmxhZy4KKyAgICBF
WFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBUZXN0IHBy
b3BlcnRpZXMgdGhhdCBzaG91bGQgY2FsbCBzZXROZWVkc0Rpc3BsYXkKLSAgICAvLyBUaGVzZSBw
cm9wZXJ0aWVzIHdpbGwgY2FsbCBub3RpZnlTeW5jUmVxdWlyZWQgYW5kIGNoYW5nZSB0aGUgZGly
dHkgcmVjdC4KKyAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIHdpbGwgY2FsbCBub3RpZnlTeW5jUmVx
dWlyZWQgYW5kIGNoYW5nZSB0aGUgbmVlZHNEaXNwbGF5IGZsYWcuCiAgICAgRVhFQ1VURV9BTkRf
VkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5z
ZXRCb3VuZHMoSW50U2l6ZSg1LCAxMCkpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1
YWwoRmxvYXRSZWN0KDAuMGYsIDAuMGYsIDUuMGYsIDEwLjBmKSwgdGVzdExheWVyLT5kaXJ0eVJl
Y3QoKSk7CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAgICAg
dGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgpOwotICAgIEVYUEVDVF9UUlVFKHRlc3RMYXll
ci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5u
ZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBGSVhNRTogbmVlZCB0byBhZGQgYSB0ZXN0IGZvciBz
ZXRMYXllclRyZWVIb3N0IHdpdGggYSBub24tbnVsbCBzdHViYmVkIENDTGF5ZXJUcmVlSG9zdC4K
IH0KLS0gCjEuNy4zLjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116009</attachid>
            <date>2011-11-20 16:45:10 -0800</date>
            <delta_ts>2011-11-21 12:21:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>improve-tile-invalidation.diff</filename>
            <type>text/plain</type>
            <size>18826</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhczJETGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDM5ZDJkMTYuLjk5Yzk1
NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcApAQCAtODIsNyArODIs
NyBAQCBib29sIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIAog
dm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQog
ewotICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5KCkgfHwgIWRyYXdzQ29udGVudCgpKQorICAg
IGlmICghbV9uZWVkc0Rpc3BsYXkgfHwgIWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAobV9jb250ZXh0KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggN2U4YjdiNi4uYzI2NWVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcApAQCAtMTA1LDI0ICsxMDUsMTYgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6
cHJlcGFyZVRvVXBkYXRlSWZEaXJ0eSgpCiAgICAgaWYgKGRyYXdzQ29udGVudCgpKQogICAgICAg
ICBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CiAKLSAgICBJbnRSZWN0IGRpcnR5ID0g
ZW5jbG9zaW5nSW50UmVjdChtX2RpcnR5UmVjdCk7Ci0gICAgZGlydHkuaW50ZXJzZWN0KEludFJl
Y3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKSk7Ci0gICAgaW52YWxpZGF0ZVJlY3QoZGly
dHkpOwotCiAgICAgcHJlcGFyZVRvVXBkYXRlKGxheWVyUmVjdCk7CiAgICAgcmVzZXROZWVkc0Rp
c3BsYXkoKTsKIH0KIAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lm
RGlydHkoKQogewotICAgIEFTU0VSVChkcmF3c0NvbnRlbnQoKSk7Ci0KLSAgICBjb25zdCBJbnRS
ZWN0JiBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7Ci0gICAgaWYgKGxheWVyUmVjdC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBJbnRSZWN0IGxheWVyUmVjdDsKIAotICAg
IGlmICghZHJhd3NDb250ZW50KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZHJhd3NDb250
ZW50KCkpCisgICAgICAgIGxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKIAogICAgIHBh
aW50Q29udGVudHMobGF5ZXJSZWN0KTsKIH0KQEAgLTEzMiw2ICsxMjQsMjAgQEAgYm9vbCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKICAgICByZXR1cm4gbV9kZWxl
Z2F0ZSAmJiBtX2RlbGVnYXRlLT5kcmF3c0NvbnRlbnQoKSAmJiBUaWxlZExheWVyQ2hyb21pdW06
OmRyYXdzQ29udGVudCgpOwogfQogCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpzZXROZWVk
c0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgSW50UmVjdCBkaXJ0
eSA9IGVuY2xvc2luZ0ludFJlY3QoZGlydHlSZWN0KTsKKyAgICBpbnZhbGlkYXRlUmVjdChkaXJ0
eSk7CisgICAgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGRpcnR5UmVjdCk7Cit9CisK
K3ZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgSW50
UmVjdCBkaXJ0eShJbnRQb2ludCgpLCBib3VuZHMoKSk7CisgICAgaW52YWxpZGF0ZVJlY3QoZGly
dHkpOworICAgIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpOworfQorCiB2b2lkIENv
bnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJl
ZUhvc3QqIGhvc3QpCiB7CiAjaWYgVVNFKFNLSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uaAppbmRleCBjNWU5ZmNjLi4yNmU3ZmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmgKQEAgLTUxLDYgKzUxLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHByZXBh
cmVUb1VwZGF0ZUlmRGlydHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGly
dHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYp
OworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKIAogcHJvdGVjdGVkOgogICAg
IGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSopOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYzQwYzU5ZC4uM2U4NzJlZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNo
cm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCkBAIC0xNzYsMTggKzE3NiwxNyBAQCB2b2lkIEltYWdl
TGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMoSW1hZ2UqIGNvbnRlbnRzKQogCiAgICAgbV9jb250
ZW50cyA9IGNvbnRlbnRzOwogICAgIG1faW1hZ2VGb3JDdXJyZW50RnJhbWUgPSBtX2NvbnRlbnRz
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIG1fZGlydHlSZWN0ID0gSW50UmVj
dChJbnRQb2ludCgwLCAwKSwgYm91bmRzKCkpOwogICAgIHNldE5lZWRzRGlzcGxheSgpOwogICAg
IHNldE9wYXF1ZSghbV9jb250ZW50cy0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSk7CiB9CiAKIHZv
aWQgSW1hZ2VMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVJZkRpcnR5KCkKIHsKLSAgICBp
ZiAoIW1fZGlydHlSZWN0LmlzRW1wdHkoKSkgeworICAgIGlmIChtX25lZWRzRGlzcGxheSkgewog
ICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT51cGRhdGVGcm9tSW1hZ2UobV9jb250ZW50cy0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSk7CiAgICAgICAgIHVwZGF0ZVRpbGVTaXplQW5kVGls
aW5nT3B0aW9uKCk7CiAgICAgICAgIEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50KCksIGNvbnRl
bnRCb3VuZHMoKSk7Ci0gICAgICAgIGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgIGlmIChtX25lZWRzRGlzcGxheSkgewogICAgICAgICAgICAgaW52YWxpZGF0ZVJlY3QocGFp
bnRSZWN0KTsKICAgICAgICAgICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTRhN2Y4OC4uZDkxZjM4OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHAKQEAgLTU2LDYgKzU2LDcgQEAgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBMYXll
ckNocm9taXVtOjpjcmVhdGUoQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKIAogTGF5ZXJDaHJv
bWl1bTo6TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogICAgIDogbV9k
ZWxlZ2F0ZShkZWxlZ2F0ZSkKKyAgICAsIG1fbmVlZHNEaXNwbGF5KGZhbHNlKQogICAgICwgbV9s
YXllcklkKHNfbmV4dExheWVySWQrKykKICAgICAsIG1fcGFyZW50KDApCiAgICAgLCBtX3Njcm9s
bGFibGUoZmFsc2UpCkBAIC0yNjMsMjAgKzI2NCwyMSBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNl
dE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkKICAgICAvLyBTaW1wbHkg
bWFyayB0aGUgY29udGVudHMgYXMgZGlydHkuIEZvciBub24tcm9vdCBsYXllcnMsIHRoZSBjYWxs
IHRvCiAgICAgLy8gc2V0TmVlZHNDb21taXQgd2lsbCBzY2hlZHVsZSBhIGZyZXNoIGNvbXBvc2l0
aW5nIHBhc3MuCiAgICAgLy8gRm9yIHRoZSByb290IGxheWVyLCBzZXROZWVkc0NvbW1pdCBoYXMg
bm8gZWZmZWN0LgotICAgIG1fZGlydHlSZWN0LnVuaXRlKGRpcnR5UmVjdCk7CisgICAgaWYgKCFk
aXJ0eVJlY3QuaXNFbXB0eSgpKQorICAgICAgICBtX25lZWRzRGlzcGxheSA9IHRydWU7CisKICAg
ICBzZXROZWVkc0NvbW1pdCgpOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlz
cGxheSgpCiB7Ci0gICAgbV9kaXJ0eVJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKLSAg
ICBtX2RpcnR5UmVjdC5zZXRTaXplKGJvdW5kcygpKTsKKyAgICBtX25lZWRzRGlzcGxheSA9IHRy
dWU7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAogdm9pZCBMYXllckNocm9taXVtOjpyZXNl
dE5lZWRzRGlzcGxheSgpCiB7Ci0gICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBt
X25lZWRzRGlzcGxheSA9IGZhbHNlOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnB1c2hQcm9w
ZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGRkZDM3
OTIuLmM1ZWZlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTEwNSw5ICsxMDUsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRNYXNrTGF5ZXIoTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyKSB7IG1f
bWFza0xheWVyID0gbWFza0xheWVyOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgTGF5ZXJDaHJv
bWl1bSogbWFza0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIuZ2V0KCk7IH0KIAot
ICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KTsKLSAg
ICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotICAgIGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9kaXJ0eVJlY3Q7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgYm9vbCBuZWVkc0Rpc3BsYXkoKSBjb25zdCB7IHJldHVy
biBtX25lZWRzRGlzcGxheTsgfQogICAgIHZvaWQgcmVzZXROZWVkc0Rpc3BsYXkoKTsKIAogICAg
IHZvaWQgc2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KSB7IG1fb3BhY2l0eSA9IG9wYWNpdHk7IHNl
dE5lZWRzQ29tbWl0KCk7IH0KQEAgLTIxOSw4ICsyMTksOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2
b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAKLSAgICAvLyBUaGUgZGlydHkgcmVjdCBpcyB0aGUgdW5p
b24gb2YgZGFtYWdlZCByZWdpb25zIHRoYXQgbmVlZCByZXBhaW50aW5nL3VwZGF0aW5nLgotICAg
IEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKKyAgICAvLyBUaGlzIGZsYWcgaXMgc2V0IHdoZW4gbGF5
ZXIgbmVlZCByZXBhaW50aW5nL3VwZGF0aW5nLgorICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXk7CiAK
ICAgICAvLyBUaGUgdXBkYXRlIHJlY3QgaXMgdGhlIHJlZ2lvbiBvZiB0aGUgY29tcG9zaXRvciBy
ZXNvdXJjZSB0aGF0IHdhcyBhY3R1YWxseSB1cGRhdGVkIGJ5IHRoZSBjb21wb3NpdG9yLgogICAg
IC8vIEZvciBsYXllcnMgdGhhdCBtYXkgZG8gdXBkYXRpbmcgb3V0c2lkZSB0aGUgY29tcG9zaXRv
cidzIGNvbnRyb2wgKGkuZS4gcGx1Z2luIGxheWVycyksIHRoaXMgaW5mb3JtYXRpb24KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGJkODQ5MjUuLjA3MDc4MTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtMjc2LDggKzI3Niw2IEBAIHZvaWQgVGlsZWRM
YXllckNocm9taXVtOjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkK
ICAgICBpZiAoIW1fdGlsZXIgfHwgY29udGVudFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNEcmF3
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oY29u
dGVudFJlY3QpOwotCiAgICAgLy8gRGlydHkgcmVjdHMgYXJlIGFsd2F5cyBpbiBsYXllciBzcGFj
ZSwgYXMgdGhlIGxheWVyIGNvdWxkIGJlIHJlcG9zaXRpb25lZAogICAgIC8vIGFmdGVyIGludmFs
aWRhdGlvbi4KICAgICBjb25zdCBJbnRSZWN0IGxheWVyUmVjdCA9IG1fdGlsZXItPmNvbnRlbnRS
ZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggN2U0MDA5MC4uNTVmMDJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0u
Y3BwCkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnByZXBhcmVU
b1VwZGF0ZUlmRGlydHkoKQogICAgIGlmICghbV9kZWxlZ2F0ZSB8fCAhbV9wcm92aWRlciB8fCAh
ZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2RpcnR5UmVjdC5p
c0VtcHR5KCkgJiYgdGV4dHVyZXNWYWxpZCgpKSB7CisgICAgaWYgKCFtX25lZWRzRGlzcGxheSAm
JiB0ZXh0dXJlc1ZhbGlkKCkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBs
YW5lIDwgbV9wbGFuZXM7IHBsYW5lKyspIHsKICAgICAgICAgICAgIE1hbmFnZWRUZXh0dXJlKiB0
ZXggPSBtX3RleHR1cmVzW3BsYW5lXS0+dGV4dHVyZSgpOwogICAgICAgICAgICAgaWYgKCF0ZXgt
PnJlc2VydmUodGV4LT5zaXplKCksIHRleC0+Zm9ybWF0KCkpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXll
ckNocm9taXVtLmNwcAppbmRleCA3ZmU0M2RiLi4zM2FmM2FhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5jcHAKQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06
OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIHJlbmRlcmVyQ28K
ICAgICBpZiAoIWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9k
aXJ0eVJlY3QuaXNFbXB0eSgpKQorICAgIGlmIChtX25lZWRzRGlzcGxheSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQpIHsKQEAgLTEwMSw3ICsxMDEsNyBAQCB2
b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGlj
c0NvbnRleHQzRCogcmVuZGVyZXJDbwogICAgICAgICBtX3RleHR1cmVDaGFuZ2VkID0gZmFsc2U7
CiAgICAgfQogICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHRleHR1cmUgdXNlZCBi
eSB0aGUgY29tcG9zaXRvci4KLSAgICBpZiAoIW1fZGlydHlSZWN0LmlzRW1wdHkoKSAmJiBtX3Rl
eHR1cmVVcGRhdGVkKSB7CisgICAgaWYgKG1fbmVlZHNEaXNwbGF5ICYmIG1fdGV4dHVyZVVwZGF0
ZWQpIHsKICAgICAgICAgLy8gcHVibGlzaFRvUGxhdGZvcm1MYXllciBwcmVwYXJlcyB0aGUgY29u
dGVudHMgb2YgdGhlIG9mZi1zY3JlZW4gcmVuZGVyIHRhcmdldCBmb3IgdXNlIGJ5IHRoZSBjb21w
b3NpdG9yLgogICAgICAgICBkcmF3aW5nQnVmZmVyKCktPnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIo
KTsKICAgICAgICAgY29udGV4dCgpLT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllci5oCmluZGV4IDUzMGE1ZTku
LmQ5YzNhYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNv
bnRlbnRMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRl
bnRMYXllci5oCkBAIC02MCw4ICs2MCw4IEBAIHB1YmxpYzoKICAgICAvLyBTZXRzIHRoZSBlbnRp
cmUgbGF5ZXIgYXMgaW52YWxpZCwgaS5lLiBuZWVkcyB0byB1cGRhdGUgaXRzIGNvbnRlbnQuCiAg
ICAgV0VCS0lUX0VYUE9SVCB2b2lkIGludmFsaWRhdGUoKTsKIAotICAgIC8vIFJldHVybnMgdGhl
IHJlZ2lvbiBvZiB0aGUgbGF5ZXIgdGhhdCBpcyBjdXJyZW50bHkgaW52YWxpZC4KLSAgICBXRUJL
SVRfRVhQT1JUIFdlYkZsb2F0UmVjdCBpbnZhbGlkUmVjdCgpIGNvbnN0OworICAgIC8vIFJldHVy
bnMgd2hldGhlciB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IGludmFsaWQuCisgICAgV0VCS0lUX0VY
UE9SVCBib29sIGlzSW52YWxpZCgpIGNvbnN0OwogCiAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9O
CiAgICAgV2ViQ29udGVudExheWVyKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb250ZW50TGF5
ZXJJbXBsPiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29u
dGVudExheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXll
ci5jcHAKaW5kZXggZGU4ZDk5OC4uZjEwNGMzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwCkBAIC01Niw5ICs1Niw5IEBAIHZvaWQgV2ViQ29u
dGVudExheWVyOjppbnZhbGlkYXRlKCkKICAgICB1bndyYXA8V2ViQ29udGVudExheWVySW1wbD4o
KS0+c2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKLVdlYkZsb2F0UmVjdCBXZWJDb250ZW50TGF5ZXI6
OmludmFsaWRSZWN0KCkgY29uc3QKK2Jvb2wgV2ViQ29udGVudExheWVyOjppc0ludmFsaWQoKSBj
b25zdAogewotICAgIHJldHVybiBXZWJGbG9hdFJlY3QoY29uc3RVbndyYXA8V2ViQ29udGVudExh
eWVySW1wbD4oKS0+ZGlydHlSZWN0KCkpOworICAgIHJldHVybiBjb25zdFVud3JhcDxXZWJDb250
ZW50TGF5ZXJJbXBsPigpLT5uZWVkc0Rpc3BsYXkoKTsKIH0KIAogV2ViQ29udGVudExheWVyOjpX
ZWJDb250ZW50TGF5ZXIoY29uc3QgUGFzc1JlZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPiYgbm9k
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1
bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVz
dC5jcHAKaW5kZXggZWQ5Y2VjYi4uN2U5YTg1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTUzOCw3ICs1MzgsNyBAQCBU
RVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGdldFJvb3RMYXllckFmdGVyVHJlZU1hbmlwdWxhdGlv
bnMpCiBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5Q2F1c2Vz
Q29ycmVjdEJlaGF2aW9yKQogewogICAgIC8vIFRoZSBzZW1hbnRpY3MgZm9yIHNldE5lZWRzRGlz
cGxheSB3aGljaCBhcmUgdGVzdGVkIGhlcmU6Ci0gICAgLy8gICAxLiBjcmVhdGVzIGEgdW5pb25l
ZCBkaXJ0eVJlY3QgYXBwcm9wcmlhdGVseS4KKyAgICAvLyAgIDEuIHNldHMgbmVlZHNEaXNwbGF5
IGZsYWcgYXBwcm9wcmlhdGVseS4KICAgICAvLyAgIDIuIGluZGlyZWN0bHkgY2FsbHMgbm90aWZ5
U3luY1JlcXVpcmVkLCBleGFjdGx5IG9uY2UgZm9yIGVhY2ggY2FsbCB0byBzZXROZWVkc0Rpc3Bs
YXkuCiAKICAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBtb2NrRGVsZWdhdGU7CkBAIC01NTAsNDAgKzU1
MCwzNyBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5Q2F1
c2VzQ29ycmVjdEJlaGF2aW9yKQogICAgIEZsb2F0UmVjdCBlbXB0eURpcnR5UmVjdCA9IEZsb2F0
UmVjdCg0MC4wZiwgNDUuMGYsIDAsIDApOwogICAgIEZsb2F0UmVjdCBvdXRPZkJvdW5kc0RpcnR5
UmVjdCA9IEZsb2F0UmVjdCg0MDAuMGYsIDQwNS4wZiwgNTAwLjBmLCA1MDIuMGYpOwogCi0gICAg
Ly8gQmVmb3JlIGFueXRoaW5nLCB0ZXN0TGF5ZXIgc2hvdWxkIGhhdmUgYW4gZW1wdHkgZGlydHkg
cmVjdC4KLSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7
CisgICAgLy8gQmVmb3JlIGFueXRoaW5nLCB0ZXN0TGF5ZXIgc2hvdWxkIG5vdCBiZSBkaXJ0eS4K
KyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBU
aGlzIGlzIGp1c3QgaW5pdGlhbGl6YXRpb24sIGJ1dCBub3RpZnlTeW5jUmVxdWlyZWQgYmVoYXZp
b3IgaXMgdmVyaWZpZWQgYW55d2F5IHRvIGF2b2lkIHdhcm5pbmdzLgogICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+
c2V0Qm91bmRzKHRlc3RCb3VuZHMpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZ
TkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5
KCkpOwotICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBU
aGUgcmVhbCB0ZXN0IGJlZ2lucyBoZXJlLgogCi0gICAgLy8gQ2FzZSAxOiBiYXNpYworICAgIC8v
IENhc2UgMTogbmVlZHNEaXNwbGF5IGZsYWcgc2hvdWxkIG5vdCBjaGFuZ2UgYmVjYXVzZSBvZiBh
biBlbXB0eSBkaXJ0eSByZWN0LgorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19C
RUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGVtcHR5
RGlydHlSZWN0KSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkp
OworCisgICAgLy8gQ2FzZSAyOiBiYXNpYy4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZ
X1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxh
eShkaXJ0eTEpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoZGlydHkxLCB0ZXN0
TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlz
cGxheSgpKTsKIAotICAgIC8vIENhc2UgMjogYSBzZWNvbmQgZGlydHkgcmVjdCBzaG91bGQgYmUg
dW5pb25lZCBvZiBkaXJ0eTEgYW5kIGRpcnR5Mi4KKyAgICAvLyBDYXNlIDM6IGEgc2Vjb25kIGRp
cnR5IHJlY3QuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1v
Y2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHkyKSk7Ci0gICAg
dmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEzLjBm
LCAxNC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwotCi0gICAgLy8gQ2FzZSAzOiBkaXJ0
eSByZWN0IHNob3VsZCBub3QgY2hhbmdlIGJlY2F1c2Ugb2YgYW4gZW1wdHkgZGlydHkgcmVjdC4K
LSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRl
LCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShlbXB0eURpcnR5UmVjdCkpOwotICAgIHZl
cmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxMy4wZiwg
MTQuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5
ZXItPm5lZWRzRGlzcGxheSgpKTsKIAotICAgIC8vIENhc2UgNDogTGF5ZXJDaHJvbWl1bSBzaG91
bGQgYWNjZXB0IGRpcnR5IHJlY3RzIHRoYXQgZ28gYmV5b25kIGl0cyBib3VuZHMKKyAgICAvLyBD
YXNlIDQ6IExheWVyQ2hyb21pdW0gc2hvdWxkIGFjY2VwdCBkaXJ0eSByZWN0cyB0aGF0IGdvIGJl
eW9uZCBpdHMgYm91bmRzLgorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhB
VklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKSk7CiAg
ICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwg
MSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkob3V0T2ZCb3VuZHNEaXJ0eVJlY3QpKTsKLSAg
ICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgODkw
LjBmLCA4OTIuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKLQotICAgIC8vIENhc2UgNTog
c2V0TmVlZHNEaXNwbGF5KCkgd2l0aG91dCB0aGUgZGlydHkgcmVjdCBhcmcgc2hvdWxkIGNhdXNl
IHRoZSBlbnRpcmUgYm91bmRzIHRvIGJlIGRpcnR5LAotICAgIC8vICAgICAgICAgb3ZlcnJpZGlu
ZyBhbnkgZXhpc3RpbmcgZGlydHkgcmVjdC4KLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZ
X1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxh
eSgpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDAsIDAsIHRl
c3RCb3VuZHMud2lkdGgoKSwgdGVzdEJvdW5kcy5oZWlnaHQoKSksIHRlc3RMYXllci0+ZGlydHlS
ZWN0KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCi0g
ICAgLy8gcmVzZXROZWVkc0Rpc3BsYXkgc2hvdWxkIGVtcHR5IHRoZSBkaXJ0eSByZWN0LCBhbmQg
Tk9UIGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkLgorICAgIC8vIENhc2UgNTogc2V0TmVlZHNEaXNw
bGF5KCkgd2l0aG91dCB0aGUgZGlydHkgcmVjdCBhcmcuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5yZXNldE5l
ZWRzRGlzcGxheSgpKTsKLSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlz
RW1wdHkoKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1v
Y2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKSk7CisgICAgRVhQRUNU
X1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9t
aXVtVGVzdCwgY2hlY2tTZXROZWVkc0Rpc3BsYXlXaXRoTnVsbERlbGVnYXRlKQpAQCAtNTk2LDEz
ICs1OTMsMTMgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRzRGlzcGxh
eVdpdGhOdWxsRGVsZWdhdGUpCiAgICAgRmxvYXRSZWN0IGRpcnR5ID0gRmxvYXRSZWN0KDEwLjBm
LCAxNS4wZiwgMS4wZiwgMi4wZik7CiAKICAgICB0ZXN0TGF5ZXItPnNldEJvdW5kcyh0ZXN0Qm91
bmRzKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDAuMGYsIDAu
MGYsIDUwMS4wZiwgNTA4LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNU
X1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICB0ZXN0TGF5ZXItPnJlc2V0
TmVlZHNEaXNwbGF5KCk7Ci0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5p
c0VtcHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsK
IAogICAgIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5KTsKLSAgICB2ZXJpZnlGbG9h
dFJlY3RzQWxtb3N0RXF1YWwoZGlydHksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIEVY
UEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogfQogCiBURVNUX0YoTGF5ZXJD
aHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVydHlDaGFuZ2VDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCkBA
IC02MTMsMTAgKzYxMCwxMCBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVy
dHlDaGFuZ2VDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IGR1bW15TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOyAv
LyBqdXN0IGEgZHVtbXkgbGF5ZXIgZm9yIHRoaXMgdGVzdCBjYXNlLgogCiAgICAgLy8gc2FuaXR5
IGNoZWNrIG9mIGluaXRpYWwgdGVzdCBjb25kaXRpb24KLSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5
ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+
bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gVGVzdCBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIG5v
dCBjYWxsIG5lZWRzRGlzcGxheSBhbmQgbmVlZHNDb21taXQgd2hlbiBjaGFuZ2VkLgotICAgIC8v
IG5vdGlmeVN5bmNSZXF1aXJlZCBzaG91bGQgbm90IGJlIGNhbGxlZCwgYW5kIHRoZSBkaXJ0eVJl
Y3Qgc2hvdWxkIHJlbWFpbiBzdGlsbCBlbXB0eS4KKyAgICAvLyBub3RpZnlTeW5jUmVxdWlyZWQg
c2hvdWxkIG5vdCBiZSBjYWxsZWQsIGFuZCB0aGUgbmVlZHNEaXNwbGF5IGZsYWcgc2hvdWxkIHJl
bWFpbiBmYWxzZS4KICAgICBFWFBFQ1RfQ0FMTChpbml0aWFsRGVsZWdhdGUsIG5vdGlmeVN5bmNS
ZXF1aXJlZCgpKS5UaW1lcygwKTsgLy8gb2xkIGRlbGVnYXRlIHNob3VsZCBub3QgYmUgdXNlZCB3
aGVuIHNldERlbGVnYXRlIGdpdmVzIGEgbmV3IGRlbGVnYXRlLgogICAgIEVYRUNVVEVfQU5EX1ZF
UklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0
RGVsZWdhdGUoJm1vY2tEZWxlZ2F0ZSkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllf
U1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0TmFtZSgiVGVzdCBM
YXllciIpKTsKQEAgLTYzMSwxMCArNjI4LDEwIEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwg
Y2hlY2tQcm9wZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKICAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXIt
PnNldERyYXdUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkpOwogICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXll
ci0+c2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkpOwogICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAs
IHRlc3RMYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0KDQsIDUsIDYsIDcpKSk7
Ci0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAg
IEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIE5leHQs
IHRlc3QgcHJvcGVydGllcyB0aGF0IHNob3VsZCBjYWxsIHNldE5lZWRzQ29tbWl0IChidXQgbm90
IHNldE5lZWRzRGlzcGxheSkKLSAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIHNob3VsZCBpbmRpcmVj
dGx5IGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkLCBidXQgdGhlIGRpcnR5IHJlY3Qgc2hvdWxkIG5v
dCBjaGFuZ2UuCisgICAgLy8gVGhlc2UgcHJvcGVydGllcyBzaG91bGQgaW5kaXJlY3RseSBjYWxs
IG5vdGlmeVN5bmNSZXF1aXJlZCwgYnV0IHRoZSBuZWVkc0Rpc3BsYXkgZmxhZyBzaG91bGQgbm90
IGNoYW5nZS4KICAgICAvLyBOb3RlIHRoYXQgZm9yIG1hbnkgb2YgdGhlc2UgcHJvcGVydGllcyBp
dCBpcyBpbXBvcnRhbnQgdG8gdGVzdCBzZXR0aW5nIHRoZSBwcm9wZXJ0eSB0byBhIHZhbHVlIHRo
YXQKICAgICAvLyBpcyBkaWZmZXJlbnQgdGhhbiB3aGF0IHRoZSBjb25zdHJ1Y3RvciBpbml0aWFs
aXplcyBpdCB0by4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1Io
bW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMS4y
M2YsIDQuNTZmKSkpOwpAQCAtNjUwLDE1ICs2NDcsMTUgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1U
ZXN0LCBjaGVja1Byb3BlcnR5Q2hhbmdlQ2F1c2VzQ29ycmVjdEJlaGF2aW9yKQogICAgIEVYRUNV
VEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RM
YXllci0+c2V0VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKICAgICBFWEVDVVRF
X0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5
ZXItPnNldERvdWJsZVNpZGVkKGZhbHNlKSk7CiAKLSAgICAvLyBUaGUgYWJvdmUgdGVzdHMgc2hv
dWxkIG5vdCBoYXZlIGNhdXNlZCBhIG5vbi1lbXB0eSBkaXJ0eSByZWN0LgotICAgIEVYUEVDVF9U
UlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICAvLyBUaGUgYWJvdmUg
dGVzdHMgc2hvdWxkIG5vdCBoYXZlIGNhdXNlZCBhIGNoYW5nZSB0byB0aGUgbmVlZHNEaXNwbGF5
IGZsYWcuCisgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAg
ICAgLy8gVGVzdCBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGNhbGwgc2V0TmVlZHNEaXNwbGF5Ci0g
ICAgLy8gVGhlc2UgcHJvcGVydGllcyB3aWxsIGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkIGFuZCBj
aGFuZ2UgdGhlIGRpcnR5IHJlY3QuCisgICAgLy8gVGhlc2UgcHJvcGVydGllcyB3aWxsIGNhbGwg
bm90aWZ5U3luY1JlcXVpcmVkIGFuZCBjaGFuZ2UgdGhlIG5lZWRzRGlzcGxheSBmbGFnLgogICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEs
IHRlc3RMYXllci0+c2V0Qm91bmRzKEludFNpemUoNSwgMTApKSk7Ci0gICAgdmVyaWZ5RmxvYXRS
ZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgwLjBmLCAwLjBmLCA1LjBmLCAxMC4wZiksIHRlc3RM
YXllci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNw
bGF5KCkpOwogICAgIHRlc3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICBFWFBFQ1Rf
VFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNF
KHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gRklYTUU6IG5lZWQgdG8gYWRk
IGEgdGVzdCBmb3Igc2V0TGF5ZXJUcmVlSG9zdCB3aXRoIGEgbm9uLW51bGwgc3R1YmJlZCBDQ0xh
eWVyVHJlZUhvc3QuCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116115</attachid>
            <date>2011-11-21 12:21:18 -0800</date>
            <delta_ts>2011-11-22 12:39:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>improve-tile-invalidation.diff</filename>
            <type>text/plain</type>
            <size>18827</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhczJETGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDM5ZDJkMTYuLjk5Yzk1
NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcApAQCAtODIsNyArODIs
NyBAQCBib29sIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIAog
dm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQog
ewotICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5KCkgfHwgIWRyYXdzQ29udGVudCgpKQorICAg
IGlmICghbV9uZWVkc0Rpc3BsYXkgfHwgIWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAobV9jb250ZXh0KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggN2U4YjdiNi4uYzI2NWVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcApAQCAtMTA1LDI0ICsxMDUsMTYgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6
cHJlcGFyZVRvVXBkYXRlSWZEaXJ0eSgpCiAgICAgaWYgKGRyYXdzQ29udGVudCgpKQogICAgICAg
ICBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CiAKLSAgICBJbnRSZWN0IGRpcnR5ID0g
ZW5jbG9zaW5nSW50UmVjdChtX2RpcnR5UmVjdCk7Ci0gICAgZGlydHkuaW50ZXJzZWN0KEludFJl
Y3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKSk7Ci0gICAgaW52YWxpZGF0ZVJlY3QoZGly
dHkpOwotCiAgICAgcHJlcGFyZVRvVXBkYXRlKGxheWVyUmVjdCk7CiAgICAgcmVzZXROZWVkc0Rp
c3BsYXkoKTsKIH0KIAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lm
RGlydHkoKQogewotICAgIEFTU0VSVChkcmF3c0NvbnRlbnQoKSk7Ci0KLSAgICBjb25zdCBJbnRS
ZWN0JiBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7Ci0gICAgaWYgKGxheWVyUmVjdC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBJbnRSZWN0IGxheWVyUmVjdDsKIAotICAg
IGlmICghZHJhd3NDb250ZW50KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZHJhd3NDb250
ZW50KCkpCisgICAgICAgIGxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKIAogICAgIHBh
aW50Q29udGVudHMobGF5ZXJSZWN0KTsKIH0KQEAgLTEzMiw2ICsxMjQsMjAgQEAgYm9vbCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKICAgICByZXR1cm4gbV9kZWxl
Z2F0ZSAmJiBtX2RlbGVnYXRlLT5kcmF3c0NvbnRlbnQoKSAmJiBUaWxlZExheWVyQ2hyb21pdW06
OmRyYXdzQ29udGVudCgpOwogfQogCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpzZXROZWVk
c0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgSW50UmVjdCBkaXJ0
eSA9IGVuY2xvc2luZ0ludFJlY3QoZGlydHlSZWN0KTsKKyAgICBpbnZhbGlkYXRlUmVjdChkaXJ0
eSk7CisgICAgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGRpcnR5UmVjdCk7Cit9CisK
K3ZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgSW50
UmVjdCBkaXJ0eShJbnRQb2ludCgpLCBib3VuZHMoKSk7CisgICAgaW52YWxpZGF0ZVJlY3QoZGly
dHkpOworICAgIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpOworfQorCiB2b2lkIENv
bnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJl
ZUhvc3QqIGhvc3QpCiB7CiAjaWYgVVNFKFNLSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uaAppbmRleCBjNWU5ZmNjLi4yNmU3ZmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmgKQEAgLTUxLDYgKzUxLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHByZXBh
cmVUb1VwZGF0ZUlmRGlydHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGly
dHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYp
OworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKIAogcHJvdGVjdGVkOgogICAg
IGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSopOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYzQwYzU5ZC4uM2U4NzJlZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNo
cm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCkBAIC0xNzYsMTggKzE3NiwxNyBAQCB2b2lkIEltYWdl
TGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMoSW1hZ2UqIGNvbnRlbnRzKQogCiAgICAgbV9jb250
ZW50cyA9IGNvbnRlbnRzOwogICAgIG1faW1hZ2VGb3JDdXJyZW50RnJhbWUgPSBtX2NvbnRlbnRz
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIG1fZGlydHlSZWN0ID0gSW50UmVj
dChJbnRQb2ludCgwLCAwKSwgYm91bmRzKCkpOwogICAgIHNldE5lZWRzRGlzcGxheSgpOwogICAg
IHNldE9wYXF1ZSghbV9jb250ZW50cy0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSk7CiB9CiAKIHZv
aWQgSW1hZ2VMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVJZkRpcnR5KCkKIHsKLSAgICBp
ZiAoIW1fZGlydHlSZWN0LmlzRW1wdHkoKSkgeworICAgIGlmIChtX25lZWRzRGlzcGxheSkgewog
ICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT51cGRhdGVGcm9tSW1hZ2UobV9jb250ZW50cy0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSk7CiAgICAgICAgIHVwZGF0ZVRpbGVTaXplQW5kVGls
aW5nT3B0aW9uKCk7CiAgICAgICAgIEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50KCksIGNvbnRl
bnRCb3VuZHMoKSk7Ci0gICAgICAgIGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgIGlmIChtX25lZWRzRGlzcGxheSkgewogICAgICAgICAgICAgaW52YWxpZGF0ZVJlY3QocGFp
bnRSZWN0KTsKICAgICAgICAgICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTRhN2Y4OC4uZDkxZjM4OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHAKQEAgLTU2LDYgKzU2LDcgQEAgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBMYXll
ckNocm9taXVtOjpjcmVhdGUoQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKIAogTGF5ZXJDaHJv
bWl1bTo6TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogICAgIDogbV9k
ZWxlZ2F0ZShkZWxlZ2F0ZSkKKyAgICAsIG1fbmVlZHNEaXNwbGF5KGZhbHNlKQogICAgICwgbV9s
YXllcklkKHNfbmV4dExheWVySWQrKykKICAgICAsIG1fcGFyZW50KDApCiAgICAgLCBtX3Njcm9s
bGFibGUoZmFsc2UpCkBAIC0yNjMsMjAgKzI2NCwyMSBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNl
dE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkKICAgICAvLyBTaW1wbHkg
bWFyayB0aGUgY29udGVudHMgYXMgZGlydHkuIEZvciBub24tcm9vdCBsYXllcnMsIHRoZSBjYWxs
IHRvCiAgICAgLy8gc2V0TmVlZHNDb21taXQgd2lsbCBzY2hlZHVsZSBhIGZyZXNoIGNvbXBvc2l0
aW5nIHBhc3MuCiAgICAgLy8gRm9yIHRoZSByb290IGxheWVyLCBzZXROZWVkc0NvbW1pdCBoYXMg
bm8gZWZmZWN0LgotICAgIG1fZGlydHlSZWN0LnVuaXRlKGRpcnR5UmVjdCk7CisgICAgaWYgKCFk
aXJ0eVJlY3QuaXNFbXB0eSgpKQorICAgICAgICBtX25lZWRzRGlzcGxheSA9IHRydWU7CisKICAg
ICBzZXROZWVkc0NvbW1pdCgpOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlz
cGxheSgpCiB7Ci0gICAgbV9kaXJ0eVJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKLSAg
ICBtX2RpcnR5UmVjdC5zZXRTaXplKGJvdW5kcygpKTsKKyAgICBtX25lZWRzRGlzcGxheSA9IHRy
dWU7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAogdm9pZCBMYXllckNocm9taXVtOjpyZXNl
dE5lZWRzRGlzcGxheSgpCiB7Ci0gICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBt
X25lZWRzRGlzcGxheSA9IGZhbHNlOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnB1c2hQcm9w
ZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGRkZDM3
OTIuLmM1ZWZlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTEwNSw5ICsxMDUsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRNYXNrTGF5ZXIoTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyKSB7IG1f
bWFza0xheWVyID0gbWFza0xheWVyOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgTGF5ZXJDaHJv
bWl1bSogbWFza0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIuZ2V0KCk7IH0KIAot
ICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KTsKLSAg
ICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotICAgIGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9kaXJ0eVJlY3Q7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgYm9vbCBuZWVkc0Rpc3BsYXkoKSBjb25zdCB7IHJldHVy
biBtX25lZWRzRGlzcGxheTsgfQogICAgIHZvaWQgcmVzZXROZWVkc0Rpc3BsYXkoKTsKIAogICAg
IHZvaWQgc2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KSB7IG1fb3BhY2l0eSA9IG9wYWNpdHk7IHNl
dE5lZWRzQ29tbWl0KCk7IH0KQEAgLTIxOSw4ICsyMTksOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2
b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAKLSAgICAvLyBUaGUgZGlydHkgcmVjdCBpcyB0aGUgdW5p
b24gb2YgZGFtYWdlZCByZWdpb25zIHRoYXQgbmVlZCByZXBhaW50aW5nL3VwZGF0aW5nLgotICAg
IEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKKyAgICAvLyBUaGlzIGZsYWcgaXMgc2V0IHdoZW4gbGF5
ZXIgbmVlZCByZXBhaW50aW5nL3VwZGF0aW5nLgorICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXk7CiAK
ICAgICAvLyBUaGUgdXBkYXRlIHJlY3QgaXMgdGhlIHJlZ2lvbiBvZiB0aGUgY29tcG9zaXRvciBy
ZXNvdXJjZSB0aGF0IHdhcyBhY3R1YWxseSB1cGRhdGVkIGJ5IHRoZSBjb21wb3NpdG9yLgogICAg
IC8vIEZvciBsYXllcnMgdGhhdCBtYXkgZG8gdXBkYXRpbmcgb3V0c2lkZSB0aGUgY29tcG9zaXRv
cidzIGNvbnRyb2wgKGkuZS4gcGx1Z2luIGxheWVycyksIHRoaXMgaW5mb3JtYXRpb24KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDg1ODhhMmIuLmUxY2QxZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtMjc2LDggKzI3Niw2IEBAIHZvaWQgVGlsZWRM
YXllckNocm9taXVtOjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkK
ICAgICBpZiAoIW1fdGlsZXIgfHwgY29udGVudFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNEcmF3
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oY29u
dGVudFJlY3QpOwotCiAgICAgLy8gRGlydHkgcmVjdHMgYXJlIGFsd2F5cyBpbiBsYXllciBzcGFj
ZSwgYXMgdGhlIGxheWVyIGNvdWxkIGJlIHJlcG9zaXRpb25lZAogICAgIC8vIGFmdGVyIGludmFs
aWRhdGlvbi4KICAgICBjb25zdCBJbnRSZWN0IGxheWVyUmVjdCA9IG1fdGlsZXItPmNvbnRlbnRS
ZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggN2U0MDA5MC4uNTVmMDJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0u
Y3BwCkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnByZXBhcmVU
b1VwZGF0ZUlmRGlydHkoKQogICAgIGlmICghbV9kZWxlZ2F0ZSB8fCAhbV9wcm92aWRlciB8fCAh
ZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2RpcnR5UmVjdC5p
c0VtcHR5KCkgJiYgdGV4dHVyZXNWYWxpZCgpKSB7CisgICAgaWYgKCFtX25lZWRzRGlzcGxheSAm
JiB0ZXh0dXJlc1ZhbGlkKCkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBs
YW5lIDwgbV9wbGFuZXM7IHBsYW5lKyspIHsKICAgICAgICAgICAgIE1hbmFnZWRUZXh0dXJlKiB0
ZXggPSBtX3RleHR1cmVzW3BsYW5lXS0+dGV4dHVyZSgpOwogICAgICAgICAgICAgaWYgKCF0ZXgt
PnJlc2VydmUodGV4LT5zaXplKCksIHRleC0+Zm9ybWF0KCkpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXll
ckNocm9taXVtLmNwcAppbmRleCA3ZmU0M2RiLi42YjcyZDYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5jcHAKQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06
OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIHJlbmRlcmVyQ28K
ICAgICBpZiAoIWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9k
aXJ0eVJlY3QuaXNFbXB0eSgpKQorICAgIGlmICghbV9uZWVkc0Rpc3BsYXkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChtX3RleHR1cmVDaGFuZ2VkKSB7CkBAIC0xMDEsNyArMTAxLDcgQEAg
dm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhp
Y3NDb250ZXh0M0QqIHJlbmRlcmVyQ28KICAgICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9IGZhbHNl
OwogICAgIH0KICAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0dXJlIHVzZWQg
YnkgdGhlIGNvbXBvc2l0b3IuCi0gICAgaWYgKCFtX2RpcnR5UmVjdC5pc0VtcHR5KCkgJiYgbV90
ZXh0dXJlVXBkYXRlZCkgeworICAgIGlmIChtX25lZWRzRGlzcGxheSAmJiBtX3RleHR1cmVVcGRh
dGVkKSB7CiAgICAgICAgIC8vIHB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIgcHJlcGFyZXMgdGhlIGNv
bnRlbnRzIG9mIHRoZSBvZmYtc2NyZWVuIHJlbmRlciB0YXJnZXQgZm9yIHVzZSBieSB0aGUgY29t
cG9zaXRvci4KICAgICAgICAgZHJhd2luZ0J1ZmZlcigpLT5wdWJsaXNoVG9QbGF0Zm9ybUxheWVy
KCk7CiAgICAgICAgIGNvbnRleHQoKS0+bWFya0xheWVyQ29tcG9zaXRlZCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaAppbmRleCA1MzBhNWU5
Li5kOWMzYWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJD
b250ZW50TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250
ZW50TGF5ZXIuaApAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAgICAgLy8gU2V0cyB0aGUgZW50
aXJlIGxheWVyIGFzIGludmFsaWQsIGkuZS4gbmVlZHMgdG8gdXBkYXRlIGl0cyBjb250ZW50Lgog
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7CiAKLSAgICAvLyBSZXR1cm5zIHRo
ZSByZWdpb24gb2YgdGhlIGxheWVyIHRoYXQgaXMgY3VycmVudGx5IGludmFsaWQuCi0gICAgV0VC
S0lUX0VYUE9SVCBXZWJGbG9hdFJlY3QgaW52YWxpZFJlY3QoKSBjb25zdDsKKyAgICAvLyBSZXR1
cm5zIHdoZXRoZXIgdGhlIGxheWVyIGlzIGN1cnJlbnRseSBpbnZhbGlkLgorICAgIFdFQktJVF9F
WFBPUlQgYm9vbCBpc0ludmFsaWQoKSBjb25zdDsKIAogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElP
TgogICAgIFdlYkNvbnRlbnRMYXllcihjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29udGVudExh
eWVySW1wbD4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNv
bnRlbnRMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5
ZXIuY3BwCmluZGV4IGRlOGQ5OTguLmYxMDRjM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcApAQCAtNTYsOSArNTYsOSBAQCB2b2lkIFdlYkNv
bnRlbnRMYXllcjo6aW52YWxpZGF0ZSgpCiAgICAgdW53cmFwPFdlYkNvbnRlbnRMYXllckltcGw+
KCktPnNldE5lZWRzRGlzcGxheSgpOwogfQogCi1XZWJGbG9hdFJlY3QgV2ViQ29udGVudExheWVy
OjppbnZhbGlkUmVjdCgpIGNvbnN0Citib29sIFdlYkNvbnRlbnRMYXllcjo6aXNJbnZhbGlkKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gV2ViRmxvYXRSZWN0KGNvbnN0VW53cmFwPFdlYkNvbnRlbnRM
YXllckltcGw+KCktPmRpcnR5UmVjdCgpKTsKKyAgICByZXR1cm4gY29uc3RVbndyYXA8V2ViQ29u
dGVudExheWVySW1wbD4oKS0+bmVlZHNEaXNwbGF5KCk7CiB9CiAKIFdlYkNvbnRlbnRMYXllcjo6
V2ViQ29udGVudExheWVyKGNvbnN0IFBhc3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4mIG5v
ZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21p
dW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRl
c3QuY3BwCmluZGV4IGVkOWNlY2IuLjdlOWE4NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC01MzgsNyArNTM4LDcgQEAg
VEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBnZXRSb290TGF5ZXJBZnRlclRyZWVNYW5pcHVsYXRp
b25zKQogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRzRGlzcGxheUNhdXNl
c0NvcnJlY3RCZWhhdmlvcikKIHsKICAgICAvLyBUaGUgc2VtYW50aWNzIGZvciBzZXROZWVkc0Rp
c3BsYXkgd2hpY2ggYXJlIHRlc3RlZCBoZXJlOgotICAgIC8vICAgMS4gY3JlYXRlcyBhIHVuaW9u
ZWQgZGlydHlSZWN0IGFwcHJvcHJpYXRlbHkuCisgICAgLy8gICAxLiBzZXRzIG5lZWRzRGlzcGxh
eSBmbGFnIGFwcHJvcHJpYXRlbHkuCiAgICAgLy8gICAyLiBpbmRpcmVjdGx5IGNhbGxzIG5vdGlm
eVN5bmNSZXF1aXJlZCwgZXhhY3RseSBvbmNlIGZvciBlYWNoIGNhbGwgdG8gc2V0TmVlZHNEaXNw
bGF5LgogCiAgICAgTW9ja0xheWVyRGVsZWdhdGUgbW9ja0RlbGVnYXRlOwpAQCAtNTUwLDQwICs1
NTAsMzcgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRzRGlzcGxheUNh
dXNlc0NvcnJlY3RCZWhhdmlvcikKICAgICBGbG9hdFJlY3QgZW1wdHlEaXJ0eVJlY3QgPSBGbG9h
dFJlY3QoNDAuMGYsIDQ1LjBmLCAwLCAwKTsKICAgICBGbG9hdFJlY3Qgb3V0T2ZCb3VuZHNEaXJ0
eVJlY3QgPSBGbG9hdFJlY3QoNDAwLjBmLCA0MDUuMGYsIDUwMC4wZiwgNTAyLjBmKTsKIAotICAg
IC8vIEJlZm9yZSBhbnl0aGluZywgdGVzdExheWVyIHNob3VsZCBoYXZlIGFuIGVtcHR5IGRpcnR5
IHJlY3QuCi0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkp
OworICAgIC8vIEJlZm9yZSBhbnl0aGluZywgdGVzdExheWVyIHNob3VsZCBub3QgYmUgZGlydHku
CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8g
VGhpcyBpcyBqdXN0IGluaXRpYWxpemF0aW9uLCBidXQgbm90aWZ5U3luY1JlcXVpcmVkIGJlaGF2
aW9yIGlzIHZlcmlmaWVkIGFueXdheSB0byBhdm9pZCB3YXJuaW5ncy4KICAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXIt
PnNldEJvdW5kcyh0ZXN0Qm91bmRzKSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9T
WU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxh
eSgpKTsKLSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7
CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8g
VGhlIHJlYWwgdGVzdCBiZWdpbnMgaGVyZS4KIAotICAgIC8vIENhc2UgMTogYmFzaWMKKyAgICAv
LyBDYXNlIDE6IG5lZWRzRGlzcGxheSBmbGFnIHNob3VsZCBub3QgY2hhbmdlIGJlY2F1c2Ugb2Yg
YW4gZW1wdHkgZGlydHkgcmVjdC4KKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNf
QkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShlbXB0
eURpcnR5UmVjdCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgp
KTsKKworICAgIC8vIENhc2UgMjogYmFzaWMuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElG
WV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3Bs
YXkoZGlydHkxKSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKGRpcnR5MSwgdGVz
dExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rp
c3BsYXkoKSk7CiAKLSAgICAvLyBDYXNlIDI6IGEgc2Vjb25kIGRpcnR5IHJlY3Qgc2hvdWxkIGJl
IHVuaW9uZWQgb2YgZGlydHkxIGFuZCBkaXJ0eTIuCisgICAgLy8gQ2FzZSAzOiBhIHNlY29uZCBk
aXJ0eSByZWN0LgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUiht
b2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5MikpOwotICAg
IHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxMy4w
ZiwgMTQuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKLQotICAgIC8vIENhc2UgMzogZGly
dHkgcmVjdCBzaG91bGQgbm90IGNoYW5nZSBiZWNhdXNlIG9mIGFuIGVtcHR5IGRpcnR5IHJlY3Qu
Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0
ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZW1wdHlEaXJ0eVJlY3QpKTsKLSAgICB2
ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYs
IDE0LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX1RSVUUodGVzdExh
eWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKLSAgICAvLyBDYXNlIDQ6IExheWVyQ2hyb21pdW0gc2hv
dWxkIGFjY2VwdCBkaXJ0eSByZWN0cyB0aGF0IGdvIGJleW9uZCBpdHMgYm91bmRzCisgICAgLy8g
Q2FzZSA0OiBMYXllckNocm9taXVtIHNob3VsZCBhY2NlcHQgZGlydHkgcmVjdHMgdGhhdCBnbyBi
ZXlvbmQgaXRzIGJvdW5kcy4KKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVI
QVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCkpOwog
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUs
IDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KG91dE9mQm91bmRzRGlydHlSZWN0KSk7Ci0g
ICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDg5
MC4wZiwgODkyLjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7Ci0KLSAgICAvLyBDYXNlIDU6
IHNldE5lZWRzRGlzcGxheSgpIHdpdGhvdXQgdGhlIGRpcnR5IHJlY3QgYXJnIHNob3VsZCBjYXVz
ZSB0aGUgZW50aXJlIGJvdW5kcyB0byBiZSBkaXJ0eSwKLSAgICAvLyAgICAgICAgIG92ZXJyaWRp
bmcgYW55IGV4aXN0aW5nIGRpcnR5IHJlY3QuCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElG
WV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3Bs
YXkoKSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgwLCAwLCB0
ZXN0Qm91bmRzLndpZHRoKCksIHRlc3RCb3VuZHMuaGVpZ2h0KCkpLCB0ZXN0TGF5ZXItPmRpcnR5
UmVjdCgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAot
ICAgIC8vIHJlc2V0TmVlZHNEaXNwbGF5IHNob3VsZCBlbXB0eSB0aGUgZGlydHkgcmVjdCwgYW5k
IE5PVCBjYWxsIG5vdGlmeVN5bmNSZXF1aXJlZC4KKyAgICAvLyBDYXNlIDU6IHNldE5lZWRzRGlz
cGxheSgpIHdpdGhvdXQgdGhlIGRpcnR5IHJlY3QgYXJnLgogICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+cmVzZXRO
ZWVkc0Rpc3BsYXkoKSk7Ci0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5p
c0VtcHR5KCkpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUiht
b2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCkpOworICAgIEVYUEVD
VF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogfQogCiBURVNUX0YoTGF5ZXJDaHJv
bWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5V2l0aE51bGxEZWxlZ2F0ZSkKQEAgLTU5Niwx
MyArNTkzLDEzIEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tTZXROZWVkc0Rpc3Bs
YXlXaXRoTnVsbERlbGVnYXRlKQogICAgIEZsb2F0UmVjdCBkaXJ0eSA9IEZsb2F0UmVjdCgxMC4w
ZiwgMTUuMGYsIDEuMGYsIDIuMGYpOwogCiAgICAgdGVzdExheWVyLT5zZXRCb3VuZHModGVzdEJv
dW5kcyk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0UmVjdCgwLjBmLCAw
LjBmLCA1MDEuMGYsIDUwOC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVD
VF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgdGVzdExheWVyLT5yZXNl
dE5lZWRzRGlzcGxheSgpOwotICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCku
aXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7
CiAKICAgICB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0eSk7Ci0gICAgdmVyaWZ5Rmxv
YXRSZWN0c0FsbW9zdEVxdWFsKGRpcnR5LCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBF
WFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIH0KIAogVEVTVF9GKExheWVy
Q2hyb21pdW1UZXN0LCBjaGVja1Byb3BlcnR5Q2hhbmdlQ2F1c2VzQ29ycmVjdEJlaGF2aW9yKQpA
QCAtNjEzLDEwICs2MTAsMTAgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1Byb3Bl
cnR5Q2hhbmdlQ2F1c2VzQ29ycmVjdEJlaGF2aW9yKQogICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiBkdW1teUxheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsg
Ly8ganVzdCBhIGR1bW15IGxheWVyIGZvciB0aGlzIHRlc3QgY2FzZS4KIAogICAgIC8vIHNhbml0
eSBjaGVjayBvZiBpbml0aWFsIHRlc3QgY29uZGl0aW9uCi0gICAgRVhQRUNUX1RSVUUodGVzdExh
eWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXIt
Pm5lZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIFRlc3QgcHJvcGVydGllcyB0aGF0IHNob3VsZCBu
b3QgY2FsbCBuZWVkc0Rpc3BsYXkgYW5kIG5lZWRzQ29tbWl0IHdoZW4gY2hhbmdlZC4KLSAgICAv
LyBub3RpZnlTeW5jUmVxdWlyZWQgc2hvdWxkIG5vdCBiZSBjYWxsZWQsIGFuZCB0aGUgZGlydHlS
ZWN0IHNob3VsZCByZW1haW4gc3RpbGwgZW1wdHkuCisgICAgLy8gbm90aWZ5U3luY1JlcXVpcmVk
IHNob3VsZCBub3QgYmUgY2FsbGVkLCBhbmQgdGhlIG5lZWRzRGlzcGxheSBmbGFnIHNob3VsZCBy
ZW1haW4gZmFsc2UuCiAgICAgRVhQRUNUX0NBTEwoaW5pdGlhbERlbGVnYXRlLCBub3RpZnlTeW5j
UmVxdWlyZWQoKSkuVGltZXMoMCk7IC8vIG9sZCBkZWxlZ2F0ZSBzaG91bGQgbm90IGJlIHVzZWQg
d2hlbiBzZXREZWxlZ2F0ZSBnaXZlcyBhIG5ldyBkZWxlZ2F0ZS4KICAgICBFWEVDVVRFX0FORF9W
RVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNl
dERlbGVnYXRlKCZtb2NrRGVsZWdhdGUpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZ
X1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldE5hbWUoIlRlc3Qg
TGF5ZXIiKSk7CkBAIC02MzEsMTAgKzYyOCwxMCBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3Qs
IGNoZWNrUHJvcGVydHlDaGFuZ2VDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiAgICAgRVhFQ1VURV9B
TkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVy
LT5zZXREcmF3VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKICAgICBFWEVDVVRF
X0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5
ZXItPnNldFNjcmVlblNwYWNlVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKICAg
ICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAw
LCB0ZXN0TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCg0LCA1LCA2LCA3KSkp
OwotICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBOZXh0
LCB0ZXN0IHByb3BlcnRpZXMgdGhhdCBzaG91bGQgY2FsbCBzZXROZWVkc0NvbW1pdCAoYnV0IG5v
dCBzZXROZWVkc0Rpc3BsYXkpCi0gICAgLy8gVGhlc2UgcHJvcGVydGllcyBzaG91bGQgaW5kaXJl
Y3RseSBjYWxsIG5vdGlmeVN5bmNSZXF1aXJlZCwgYnV0IHRoZSBkaXJ0eSByZWN0IHNob3VsZCBu
b3QgY2hhbmdlLgorICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIGluZGlyZWN0bHkgY2Fs
bCBub3RpZnlTeW5jUmVxdWlyZWQsIGJ1dCB0aGUgbmVlZHNEaXNwbGF5IGZsYWcgc2hvdWxkIG5v
dCBjaGFuZ2UuCiAgICAgLy8gTm90ZSB0aGF0IGZvciBtYW55IG9mIHRoZXNlIHByb3BlcnRpZXMg
aXQgaXMgaW1wb3J0YW50IHRvIHRlc3Qgc2V0dGluZyB0aGUgcHJvcGVydHkgdG8gYSB2YWx1ZSB0
aGF0CiAgICAgLy8gaXMgZGlmZmVyZW50IHRoYW4gd2hhdCB0aGUgY29uc3RydWN0b3IgaW5pdGlh
bGl6ZXMgaXQgdG8uCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9S
KG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDEu
MjNmLCA0LjU2ZikpKTsKQEAgLTY1MCwxNSArNjQ3LDE1IEBAIFRFU1RfRihMYXllckNocm9taXVt
VGVzdCwgY2hlY2tQcm9wZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKICAgICBFWEVD
VVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0
TGF5ZXItPnNldFRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKSk7CiAgICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExh
eWVyLT5zZXREb3VibGVTaWRlZChmYWxzZSkpOwogCi0gICAgLy8gVGhlIGFib3ZlIHRlc3RzIHNo
b3VsZCBub3QgaGF2ZSBjYXVzZWQgYSBub24tZW1wdHkgZGlydHkgcmVjdC4KLSAgICBFWFBFQ1Rf
VFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAgLy8gVGhlIGFib3Zl
IHRlc3RzIHNob3VsZCBub3QgaGF2ZSBjYXVzZWQgYSBjaGFuZ2UgdG8gdGhlIG5lZWRzRGlzcGxh
eSBmbGFnLgorICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAog
ICAgIC8vIFRlc3QgcHJvcGVydGllcyB0aGF0IHNob3VsZCBjYWxsIHNldE5lZWRzRGlzcGxheQot
ICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgd2lsbCBjYWxsIG5vdGlmeVN5bmNSZXF1aXJlZCBhbmQg
Y2hhbmdlIHRoZSBkaXJ0eSByZWN0LgorICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgd2lsbCBjYWxs
IG5vdGlmeVN5bmNSZXF1aXJlZCBhbmQgY2hhbmdlIHRoZSBuZWVkc0Rpc3BsYXkgZmxhZy4KICAg
ICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAx
LCB0ZXN0TGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDUsIDEwKSkpOwotICAgIHZlcmlmeUZsb2F0
UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMC4wZiwgMC4wZiwgNS4wZiwgMTAuMGYpLCB0ZXN0
TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlz
cGxheSgpKTsKICAgICB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgRVhQRUNU
X1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GQUxT
RSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIEZJWE1FOiBuZWVkIHRvIGFk
ZCBhIHRlc3QgZm9yIHNldExheWVyVHJlZUhvc3Qgd2l0aCBhIG5vbi1udWxsIHN0dWJiZWQgQ0NM
YXllclRyZWVIb3N0LgogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116262</attachid>
            <date>2011-11-22 12:39:08 -0800</date>
            <delta_ts>2011-11-28 22:07:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>improve-tile-invalidation.diff</filename>
            <type>text/plain</type>
            <size>19681</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhczJETGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDM5ZDJkMTYuLmUwNGYx
OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcApAQCAtODIsNyArODIs
NyBAQCBib29sIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIAog
dm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQog
ewotICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5KCkgfHwgIWRyYXdzQ29udGVudCgpKQorICAg
IGlmICghbV9uZWVkc0Rpc3BsYXkgfHwgIWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAobV9jb250ZXh0KSB7CkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgQ2FudmFzMkRM
YXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkKICAgICB9CiAKICAgICBt
X3VwZGF0ZVJlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBib3VuZHMoKSk7Ci0gICAgcmVz
ZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwogfQogCiB2b2lk
IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Zm9yRWFjaENvbXBvc2l0b3JSZXNvdXJjZShMYXllclRl
eHR1cmVVcGRhdGVyOjpIYW5kbGVyJiBoYW5kbGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwCmluZGV4IDdlOGI3YjYuLjZjN2RmMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHAKQEAgLTEwNSwyNCArMTA1LDE2IEBAIHZvaWQgQ29udGVudExheWVyQ2hy
b21pdW06OnByZXBhcmVUb1VwZGF0ZUlmRGlydHkoKQogICAgIGlmIChkcmF3c0NvbnRlbnQoKSkK
ICAgICAgICAgbGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVjdCgpOwogCi0gICAgSW50UmVjdCBk
aXJ0eSA9IGVuY2xvc2luZ0ludFJlY3QobV9kaXJ0eVJlY3QpOwotICAgIGRpcnR5LmludGVyc2Vj
dChJbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSkpOwotICAgIGludmFsaWRhdGVS
ZWN0KGRpcnR5KTsKLQogICAgIHByZXBhcmVUb1VwZGF0ZShsYXllclJlY3QpOwotICAgIHJlc2V0
TmVlZHNEaXNwbGF5KCk7CisgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKIH0KIAogdm9pZCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQogewotICAgIEFTU0VS
VChkcmF3c0NvbnRlbnQoKSk7Ci0KLSAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QgPSB2aXNp
YmxlTGF5ZXJSZWN0KCk7Ci0gICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBJbnRSZWN0IGxheWVyUmVjdDsKIAotICAgIGlmICghZHJhd3NDb250ZW50KCkp
Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZHJhd3NDb250ZW50KCkpCisgICAgICAgIGxheWVy
UmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKIAogICAgIHBhaW50Q29udGVudHMobGF5ZXJSZWN0
KTsKIH0KQEAgLTEzMiw2ICsxMjQsMjAgQEAgYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJh
d3NDb250ZW50KCkgY29uc3QKICAgICByZXR1cm4gbV9kZWxlZ2F0ZSAmJiBtX2RlbGVnYXRlLT5k
cmF3c0NvbnRlbnQoKSAmJiBUaWxlZExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpOwogfQog
Cit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRS
ZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgSW50UmVjdCBkaXJ0eSA9IGVuY2xvc2luZ0ludFJlY3Qo
ZGlydHlSZWN0KTsKKyAgICBpbnZhbGlkYXRlUmVjdChkaXJ0eSk7CisgICAgTGF5ZXJDaHJvbWl1
bTo6c2V0TmVlZHNEaXNwbGF5KGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgQ29udGVudExheWVyQ2hy
b21pdW06OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgSW50UmVjdCBkaXJ0eShJbnRQb2ludCgp
LCBib3VuZHMoKSk7CisgICAgaW52YWxpZGF0ZVJlY3QoZGlydHkpOworICAgIExheWVyQ2hyb21p
dW06OnNldE5lZWRzRGlzcGxheSgpOworfQorCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpj
cmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7CiAjaWYg
VVNFKFNLSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAppbmRleCBjNWU5ZmNjLi4y
NmU3ZmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTUxLDYgKzUxLDgg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZUlmRGlydHkoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc0Rpc3BsYXkoKTsKIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENvbnRlbnRMYXll
ckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggYzQwYzU5ZC4uZjc4MTIzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0u
Y3BwCkBAIC0xNzYsMjAgKzE3NiwxOSBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29u
dGVudHMoSW1hZ2UqIGNvbnRlbnRzKQogCiAgICAgbV9jb250ZW50cyA9IGNvbnRlbnRzOwogICAg
IG1faW1hZ2VGb3JDdXJyZW50RnJhbWUgPSBtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwotICAgIG1fZGlydHlSZWN0ID0gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgYm91
bmRzKCkpOwogICAgIHNldE5lZWRzRGlzcGxheSgpOwogICAgIHNldE9wYXF1ZSghbV9jb250ZW50
cy0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSk7CiB9CiAKIHZvaWQgSW1hZ2VMYXllckNocm9taXVt
OjpwcmVwYXJlVG9VcGRhdGVJZkRpcnR5KCkKIHsKLSAgICBpZiAoIW1fZGlydHlSZWN0LmlzRW1w
dHkoKSkgeworICAgIGlmIChtX25lZWRzRGlzcGxheSkgewogICAgICAgICBtX3RleHR1cmVVcGRh
dGVyLT51cGRhdGVGcm9tSW1hZ2UobV9jb250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKSk7CiAgICAgICAgIHVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCk7CiAgICAgICAg
IEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSk7Ci0gICAgICAg
IGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX25lZWRzRGlzcGxh
eSkgewogICAgICAgICAgICAgaW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0KTsKLSAgICAgICAgICAg
IHJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgICAgICAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNl
OwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDU0YTdmODgu
LjQ3YjMwODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC01Niw2ICs1Niw3IEBAIFBhc3NS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJEZWxlZ2F0
ZSogZGVsZWdhdGUpCiAKIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVn
YXRlKiBkZWxlZ2F0ZSkKICAgICA6IG1fZGVsZWdhdGUoZGVsZWdhdGUpCisgICAgLCBtX25lZWRz
RGlzcGxheShmYWxzZSkKICAgICAsIG1fbGF5ZXJJZChzX25leHRMYXllcklkKyspCiAgICAgLCBt
X3BhcmVudCgwKQogICAgICwgbV9zY3JvbGxhYmxlKGZhbHNlKQpAQCAtMjYzLDIyICsyNjQsMTgg
QEAgdm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBk
aXJ0eVJlY3QpCiAgICAgLy8gU2ltcGx5IG1hcmsgdGhlIGNvbnRlbnRzIGFzIGRpcnR5LiBGb3Ig
bm9uLXJvb3QgbGF5ZXJzLCB0aGUgY2FsbCB0bwogICAgIC8vIHNldE5lZWRzQ29tbWl0IHdpbGwg
c2NoZWR1bGUgYSBmcmVzaCBjb21wb3NpdGluZyBwYXNzLgogICAgIC8vIEZvciB0aGUgcm9vdCBs
YXllciwgc2V0TmVlZHNDb21taXQgaGFzIG5vIGVmZmVjdC4KLSAgICBtX2RpcnR5UmVjdC51bml0
ZShkaXJ0eVJlY3QpOworICAgIGlmICghZGlydHlSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgbV9u
ZWVkc0Rpc3BsYXkgPSB0cnVlOworCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAogdm9pZCBM
YXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoKQogewotICAgIG1fZGlydHlSZWN0LnNldExv
Y2F0aW9uKEZsb2F0UG9pbnQoKSk7Ci0gICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShib3VuZHMoKSk7
CisgICAgbV9uZWVkc0Rpc3BsYXkgPSB0cnVlOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAK
LXZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVzZXROZWVkc0Rpc3BsYXkoKQotewotICAgIG1fZGlydHlS
ZWN0ID0gRmxvYXRSZWN0KCk7Ci19Ci0KIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRp
ZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiB7CiAgICAgbGF5ZXItPnNldEFuY2hvclBvaW50KG1f
YW5jaG9yUG9pbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGRkZDM3OTIuLmRmYWYwMTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKQEAgLTEwNSwxMCArMTA1LDkgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0TWFza0xheWVyKExheWVyQ2hyb21pdW0qIG1hc2tMYXllcikgeyBtX21hc2tMYXllciA9IG1h
c2tMYXllcjsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIExheWVyQ2hyb21pdW0qIG1hc2tMYXll
cigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza0xheWVyLmdldCgpOyB9CiAKLSAgICB2b2lkIHNldE5l
ZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdm9pZCBzZXROZWVk
c0Rpc3BsYXkoKTsKLSAgICBjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlydHlSZWN0OyB9Ci0gICAgdm9pZCByZXNldE5lZWRzRGlzcGxheSgpOworICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB2aXJ0dWFsIGJvb2wgbmVl
ZHNEaXNwbGF5KCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0Rpc3BsYXk7IH0KIAogICAgIHZvaWQg
c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KSB7IG1fb3BhY2l0eSA9IG9wYWNpdHk7IHNldE5lZWRz
Q29tbWl0KCk7IH0KICAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5
OyB9CkBAIC0yMTksOCArMjE4LDggQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBzZXROZWVkc0Nv
bW1pdCgpOwogCi0gICAgLy8gVGhlIGRpcnR5IHJlY3QgaXMgdGhlIHVuaW9uIG9mIGRhbWFnZWQg
cmVnaW9ucyB0aGF0IG5lZWQgcmVwYWludGluZy91cGRhdGluZy4KLSAgICBGbG9hdFJlY3QgbV9k
aXJ0eVJlY3Q7CisgICAgLy8gVGhpcyBmbGFnIGlzIHNldCB3aGVuIGxheWVyIG5lZWQgcmVwYWlu
dGluZy91cGRhdGluZy4KKyAgICBib29sIG1fbmVlZHNEaXNwbGF5OwogCiAgICAgLy8gVGhlIHVw
ZGF0ZSByZWN0IGlzIHRoZSByZWdpb24gb2YgdGhlIGNvbXBvc2l0b3IgcmVzb3VyY2UgdGhhdCB3
YXMgYWN0dWFsbHkgdXBkYXRlZCBieSB0aGUgY29tcG9zaXRvci4KICAgICAvLyBGb3IgbGF5ZXJz
IHRoYXQgbWF5IGRvIHVwZGF0aW5nIG91dHNpZGUgdGhlIGNvbXBvc2l0b3IncyBjb250cm9sIChp
LmUuIHBsdWdpbiBsYXllcnMpLCB0aGlzIGluZm9ybWF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmNwcAppbmRleCA4NTg4YTJiLi5lMWNkMWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJD
aHJvbWl1bS5jcHAKQEAgLTI3Niw4ICsyNzYsNiBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgaWYgKCFtX3Rp
bGVyIHx8IGNvbnRlbnRSZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBzRHJhdykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV90aWxlci0+Z3Jvd0xheWVyVG9Db250YWluKGNvbnRlbnRSZWN0KTsKLQog
ICAgIC8vIERpcnR5IHJlY3RzIGFyZSBhbHdheXMgaW4gbGF5ZXIgc3BhY2UsIGFzIHRoZSBsYXll
ciBjb3VsZCBiZSByZXBvc2l0aW9uZWQKICAgICAvLyBhZnRlciBpbnZhbGlkYXRpb24uCiAgICAg
Y29uc3QgSW50UmVjdCBsYXllclJlY3QgPSBtX3RpbGVyLT5jb250ZW50UmVjdFRvTGF5ZXJSZWN0
KGNvbnRlbnRSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDdlNDAw
OTAuLmNkYjliZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcApAQCAtMTM1LDcg
KzEzNSw3IEBAIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVJZkRpcnR5
KCkKICAgICBpZiAoIW1fZGVsZWdhdGUgfHwgIW1fcHJvdmlkZXIgfHwgIWRyYXdzQ29udGVudCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9kaXJ0eVJlY3QuaXNFbXB0eSgpICYmIHRl
eHR1cmVzVmFsaWQoKSkgeworICAgIGlmICghbV9uZWVkc0Rpc3BsYXkgJiYgdGV4dHVyZXNWYWxp
ZCgpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IG1fcGxhbmVz
OyBwbGFuZSsrKSB7CiAgICAgICAgICAgICBNYW5hZ2VkVGV4dHVyZSogdGV4ID0gbV90ZXh0dXJl
c1twbGFuZV0tPnRleHR1cmUoKTsKICAgICAgICAgICAgIGlmICghdGV4LT5yZXNlcnZlKHRleC0+
c2l6ZSgpLCB0ZXgtPmZvcm1hdCgpKSkgewpAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgVmlkZW9M
YXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVJZkRpcnR5KCkKICAgICBtX3BsYW5lcyA9IGZy
YW1lLT5wbGFuZXMoKTsKIAogICAgIG1fdXBkYXRlUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIGJvdW5kcygpKTsKLSAgICByZXNldE5lZWRzRGlzcGxheSgpOworICAgIG1fbmVlZHNEaXNw
bGF5ID0gZmFsc2U7CiB9CiAKIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjpwYWludENvbnRlbnRz
SWZEaXJ0eSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAppbmRleCA3ZmU0M2RiLi41
MThhNTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTg3LDcgKzg3LDcg
QEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3Jh
cGhpY3NDb250ZXh0M0QqIHJlbmRlcmVyQ28KICAgICBpZiAoIWRyYXdzQ29udGVudCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAobV9kaXJ0eVJlY3QuaXNFbXB0eSgpKQorICAgIGlmICgh
bV9uZWVkc0Rpc3BsYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3RleHR1cmVDaGFu
Z2VkKSB7CkBAIC0xMDEsMTIgKzEwMSwxMiBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogcmVuZGVyZXJDbwogICAg
ICAgICBtX3RleHR1cmVDaGFuZ2VkID0gZmFsc2U7CiAgICAgfQogICAgIC8vIFVwZGF0ZSB0aGUg
Y29udGVudHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29tcG9zaXRvci4KLSAgICBpZiAo
IW1fZGlydHlSZWN0LmlzRW1wdHkoKSAmJiBtX3RleHR1cmVVcGRhdGVkKSB7CisgICAgaWYgKG1f
bmVlZHNEaXNwbGF5ICYmIG1fdGV4dHVyZVVwZGF0ZWQpIHsKICAgICAgICAgLy8gcHVibGlzaFRv
UGxhdGZvcm1MYXllciBwcmVwYXJlcyB0aGUgY29udGVudHMgb2YgdGhlIG9mZi1zY3JlZW4gcmVu
ZGVyIHRhcmdldCBmb3IgdXNlIGJ5IHRoZSBjb21wb3NpdG9yLgogICAgICAgICBkcmF3aW5nQnVm
ZmVyKCktPnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIoKTsKICAgICAgICAgY29udGV4dCgpLT5tYXJr
TGF5ZXJDb21wb3NpdGVkKCk7CiAgICAgICAgIG1fdXBkYXRlUmVjdCA9IEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIGJvdW5kcygpKTsKLSAgICAgICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAg
ICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKICAgICAgICAgbV90ZXh0dXJlVXBkYXRlZCA9IGZh
bHNlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkNvbnRlbnRMYXllci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29u
dGVudExheWVyLmgKaW5kZXggNTMwYTVlOS4uZDljM2FhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKQEAgLTYwLDggKzYwLDggQEAgcHVi
bGljOgogICAgIC8vIFNldHMgdGhlIGVudGlyZSBsYXllciBhcyBpbnZhbGlkLCBpLmUuIG5lZWRz
IHRvIHVwZGF0ZSBpdHMgY29udGVudC4KICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW52YWxpZGF0
ZSgpOwogCi0gICAgLy8gUmV0dXJucyB0aGUgcmVnaW9uIG9mIHRoZSBsYXllciB0aGF0IGlzIGN1
cnJlbnRseSBpbnZhbGlkLgotICAgIFdFQktJVF9FWFBPUlQgV2ViRmxvYXRSZWN0IGludmFsaWRS
ZWN0KCkgY29uc3Q7CisgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBsYXllciBpcyBjdXJyZW50
bHkgaW52YWxpZC4KKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaXNJbnZhbGlkKCkgY29uc3Q7CiAK
ICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KICAgICBXZWJDb250ZW50TGF5ZXIoY29uc3QgV1RG
OjpQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcAppbmRleCBkZThkOTk4Li5mMTA0YzNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllci5jcHAKQEAg
LTU2LDkgKzU2LDkgQEAgdm9pZCBXZWJDb250ZW50TGF5ZXI6OmludmFsaWRhdGUoKQogICAgIHVu
d3JhcDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5zZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAotV2Vi
RmxvYXRSZWN0IFdlYkNvbnRlbnRMYXllcjo6aW52YWxpZFJlY3QoKSBjb25zdAorYm9vbCBXZWJD
b250ZW50TGF5ZXI6OmlzSW52YWxpZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdlYkZsb2F0UmVj
dChjb25zdFVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5kaXJ0eVJlY3QoKSk7CisgICAg
cmV0dXJuIGNvbnN0VW53cmFwPFdlYkNvbnRlbnRMYXllckltcGw+KCktPm5lZWRzRGlzcGxheSgp
OwogfQogCiBXZWJDb250ZW50TGF5ZXI6OldlYkNvbnRlbnRMYXllcihjb25zdCBQYXNzUmVmUHRy
PFdlYkNvbnRlbnRMYXllckltcGw+JiBub2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCBlZDljZWNiLi4zZTFlNTgyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0
LmNwcApAQCAtNTM4LDcgKzUzOCw3IEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgZ2V0Um9v
dExheWVyQWZ0ZXJUcmVlTWFuaXB1bGF0aW9ucykKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwg
Y2hlY2tTZXROZWVkc0Rpc3BsYXlDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiB7CiAgICAgLy8gVGhl
IHNlbWFudGljcyBmb3Igc2V0TmVlZHNEaXNwbGF5IHdoaWNoIGFyZSB0ZXN0ZWQgaGVyZToKLSAg
ICAvLyAgIDEuIGNyZWF0ZXMgYSB1bmlvbmVkIGRpcnR5UmVjdCBhcHByb3ByaWF0ZWx5LgorICAg
IC8vICAgMS4gc2V0cyBuZWVkc0Rpc3BsYXkgZmxhZyBhcHByb3ByaWF0ZWx5LgogICAgIC8vICAg
Mi4gaW5kaXJlY3RseSBjYWxscyBub3RpZnlTeW5jUmVxdWlyZWQsIGV4YWN0bHkgb25jZSBmb3Ig
ZWFjaCBjYWxsIHRvIHNldE5lZWRzRGlzcGxheS4KIAogICAgIE1vY2tMYXllckRlbGVnYXRlIG1v
Y2tEZWxlZ2F0ZTsKQEAgLTU1MCw0MCArNTUwLDM3IEBAIFRFU1RfRihMYXllckNocm9taXVtVGVz
dCwgY2hlY2tTZXROZWVkc0Rpc3BsYXlDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiAgICAgRmxvYXRS
ZWN0IGVtcHR5RGlydHlSZWN0ID0gRmxvYXRSZWN0KDQwLjBmLCA0NS4wZiwgMCwgMCk7CiAgICAg
RmxvYXRSZWN0IG91dE9mQm91bmRzRGlydHlSZWN0ID0gRmxvYXRSZWN0KDQwMC4wZiwgNDA1LjBm
LCA1MDAuMGYsIDUwMi4wZik7CiAKLSAgICAvLyBCZWZvcmUgYW55dGhpbmcsIHRlc3RMYXllciBz
aG91bGQgaGF2ZSBhbiBlbXB0eSBkaXJ0eSByZWN0LgotICAgIEVYUEVDVF9UUlVFKHRlc3RMYXll
ci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICAvLyBCZWZvcmUgYW55dGhpbmcsIHRlc3RM
YXllciBzaG91bGQgbm90IGJlIGRpcnR5LgorICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5l
ZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIFRoaXMgaXMganVzdCBpbml0aWFsaXphdGlvbiwgYnV0
IG5vdGlmeVN5bmNSZXF1aXJlZCBiZWhhdmlvciBpcyB2ZXJpZmllZCBhbnl3YXkgdG8gYXZvaWQg
d2FybmluZ3MuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1v
Y2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRCb3VuZHModGVzdEJvdW5kcykpOwotICAgIEVY
RUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRl
c3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKSk7Ci0gICAgRVhQRUNUX1RSVUUodGVzdExheWVy
LT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgmbW9ja0RlbGVnYXRlKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVk
c0Rpc3BsYXkoKSk7CiAKICAgICAvLyBUaGUgcmVhbCB0ZXN0IGJlZ2lucyBoZXJlLgogCi0gICAg
Ly8gQ2FzZSAxOiBiYXNpYworICAgIC8vIENhc2UgMTogbmVlZHNEaXNwbGF5IGZsYWcgc2hvdWxk
IG5vdCBjaGFuZ2UgYmVjYXVzZSBvZiBhbiBlbXB0eSBkaXJ0eSByZWN0LgorICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXll
ci0+c2V0TmVlZHNEaXNwbGF5KGVtcHR5RGlydHlSZWN0KSk7CisgICAgRVhQRUNUX0ZBTFNFKHRl
c3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOworCisgICAgLy8gQ2FzZSAyOiBiYXNpYy4KICAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0
ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0eTEpKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3Rz
QWxtb3N0RXF1YWwoZGlydHkxLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1Rf
VFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAotICAgIC8vIENhc2UgMjogYSBzZWNv
bmQgZGlydHkgcmVjdCBzaG91bGQgYmUgdW5pb25lZCBvZiBkaXJ0eTEgYW5kIGRpcnR5Mi4KKyAg
ICAvLyBDYXNlIDM6IGEgc2Vjb25kIGRpcnR5IHJlY3QuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVk
c0Rpc3BsYXkoZGlydHkyKSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9zdEVxdWFsKEZsb2F0
UmVjdCgxMC4wZiwgMTUuMGYsIDEzLjBmLCAxNC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkp
OworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCi0gICAgLy8g
Q2FzZSAzOiBkaXJ0eSByZWN0IHNob3VsZCBub3QgY2hhbmdlIGJlY2F1c2Ugb2YgYW4gZW1wdHkg
ZGlydHkgcmVjdC4KLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1Io
bW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShlbXB0eURpcnR5UmVj
dCkpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMTAuMGYsIDE1
LjBmLCAxMy4wZiwgMTQuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKLQotICAgIC8vIENh
c2UgNDogTGF5ZXJDaHJvbWl1bSBzaG91bGQgYWNjZXB0IGRpcnR5IHJlY3RzIHRoYXQgZ28gYmV5
b25kIGl0cyBib3VuZHMKKyAgICAvLyBDYXNlIDQ6IExheWVyQ2hyb21pdW0gc2hvdWxkIGFjY2Vw
dCBkaXJ0eSByZWN0cyB0aGF0IGdvIGJleW9uZCBpdHMgYm91bmRzLgorICAgIHRlc3RMYXllciA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbW9ja0RlbGVnYXRlKTsKICAgICBFWEVDVVRFX0FORF9W
RVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNl
dE5lZWRzRGlzcGxheShvdXRPZkJvdW5kc0RpcnR5UmVjdCkpOwotICAgIHZlcmlmeUZsb2F0UmVj
dHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCA4OTAuMGYsIDg5Mi4wZiksIHRl
c3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNE
aXNwbGF5KCkpOwogCi0gICAgLy8gQ2FzZSA1OiBzZXROZWVkc0Rpc3BsYXkoKSB3aXRob3V0IHRo
ZSBkaXJ0eSByZWN0IGFyZyBzaG91bGQgY2F1c2UgdGhlIGVudGlyZSBib3VuZHMgdG8gYmUgZGly
dHksCi0gICAgLy8gICAgICAgICBvdmVycmlkaW5nIGFueSBleGlzdGluZyBkaXJ0eSByZWN0Lgor
ICAgIC8vIENhc2UgNTogc2V0TmVlZHNEaXNwbGF5KCkgd2l0aG91dCB0aGUgZGlydHkgcmVjdCBh
cmcuCisgICAgdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtb2NrRGVsZWdhdGUp
OwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdh
dGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCkpOwotICAgIHZlcmlmeUZsb2F0UmVj
dHNBbG1vc3RFcXVhbChGbG9hdFJlY3QoMCwgMCwgdGVzdEJvdW5kcy53aWR0aCgpLCB0ZXN0Qm91
bmRzLmhlaWdodCgpKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7Ci0KLSAgICAvLyByZXNldE5l
ZWRzRGlzcGxheSBzaG91bGQgZW1wdHkgdGhlIGRpcnR5IHJlY3QsIGFuZCBOT1QgY2FsbCBub3Rp
ZnlTeW5jUmVxdWlyZWQuCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFW
SU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgpKTsKLSAg
ICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAgRVhQ
RUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiB9CiAKIFRFU1RfRihMYXllckNo
cm9taXVtVGVzdCwgY2hlY2tTZXROZWVkc0Rpc3BsYXlXaXRoTnVsbERlbGVnYXRlKQpAQCAtNTk2
LDEzICs1OTMsMTMgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRzRGlz
cGxheVdpdGhOdWxsRGVsZWdhdGUpCiAgICAgRmxvYXRSZWN0IGRpcnR5ID0gRmxvYXRSZWN0KDEw
LjBmLCAxNS4wZiwgMS4wZiwgMi4wZik7CiAKICAgICB0ZXN0TGF5ZXItPnNldEJvdW5kcyh0ZXN0
Qm91bmRzKTsKLSAgICB2ZXJpZnlGbG9hdFJlY3RzQWxtb3N0RXF1YWwoRmxvYXRSZWN0KDAuMGYs
IDAuMGYsIDUwMS4wZiwgNTA4LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQ
RUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKLSAgICB0ZXN0TGF5ZXItPnJl
c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3Qo
KS5pc0VtcHR5KCkpOworICAgIHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsK
KyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICB0ZXN0
TGF5ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0eSk7Ci0gICAgdmVyaWZ5RmxvYXRSZWN0c0FsbW9z
dEVxdWFsKGRpcnR5LCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0
ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIH0KIAogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0
LCBjaGVja1Byb3BlcnR5Q2hhbmdlQ2F1c2VzQ29ycmVjdEJlaGF2aW9yKQpAQCAtNjEzLDEwICs2
MTAsMTAgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1Byb3BlcnR5Q2hhbmdlQ2F1
c2VzQ29ycmVjdEJlaGF2aW9yKQogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBkdW1teUxheWVy
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRlKTsgLy8ganVzdCBhIGR1
bW15IGxheWVyIGZvciB0aGlzIHRlc3QgY2FzZS4KIAogICAgIC8vIHNhbml0eSBjaGVjayBvZiBp
bml0aWFsIHRlc3QgY29uZGl0aW9uCi0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJl
Y3QoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxh
eSgpKTsKIAogICAgIC8vIFRlc3QgcHJvcGVydGllcyB0aGF0IHNob3VsZCBub3QgY2FsbCBuZWVk
c0Rpc3BsYXkgYW5kIG5lZWRzQ29tbWl0IHdoZW4gY2hhbmdlZC4KLSAgICAvLyBub3RpZnlTeW5j
UmVxdWlyZWQgc2hvdWxkIG5vdCBiZSBjYWxsZWQsIGFuZCB0aGUgZGlydHlSZWN0IHNob3VsZCBy
ZW1haW4gc3RpbGwgZW1wdHkuCisgICAgLy8gbm90aWZ5U3luY1JlcXVpcmVkIHNob3VsZCBub3Qg
YmUgY2FsbGVkLCBhbmQgdGhlIG5lZWRzRGlzcGxheSBmbGFnIHNob3VsZCByZW1haW4gZmFsc2Uu
CiAgICAgRVhQRUNUX0NBTEwoaW5pdGlhbERlbGVnYXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSku
VGltZXMoMCk7IC8vIG9sZCBkZWxlZ2F0ZSBzaG91bGQgbm90IGJlIHVzZWQgd2hlbiBzZXREZWxl
Z2F0ZSBnaXZlcyBhIG5ldyBkZWxlZ2F0ZS4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZ
X1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldERlbGVnYXRlKCZt
b2NrRGVsZWdhdGUpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJ
T1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldE5hbWUoIlRlc3QgTGF5ZXIiKSk7CkBA
IC02MzEsMTAgKzYyOCwxMCBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVy
dHlDaGFuZ2VDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05P
VElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXREcmF3VHJh
bnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllf
Tk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldFNjcmVl
blNwYWNlVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKICAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXIt
PnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCg0LCA1LCA2LCA3KSkpOwotICAgIEVYUEVD
VF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFM
U0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBOZXh0LCB0ZXN0IHByb3Bl
cnRpZXMgdGhhdCBzaG91bGQgY2FsbCBzZXROZWVkc0NvbW1pdCAoYnV0IG5vdCBzZXROZWVkc0Rp
c3BsYXkpCi0gICAgLy8gVGhlc2UgcHJvcGVydGllcyBzaG91bGQgaW5kaXJlY3RseSBjYWxsIG5v
dGlmeVN5bmNSZXF1aXJlZCwgYnV0IHRoZSBkaXJ0eSByZWN0IHNob3VsZCBub3QgY2hhbmdlLgor
ICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIGluZGlyZWN0bHkgY2FsbCBub3RpZnlTeW5j
UmVxdWlyZWQsIGJ1dCB0aGUgbmVlZHNEaXNwbGF5IGZsYWcgc2hvdWxkIG5vdCBjaGFuZ2UuCiAg
ICAgLy8gTm90ZSB0aGF0IGZvciBtYW55IG9mIHRoZXNlIHByb3BlcnRpZXMgaXQgaXMgaW1wb3J0
YW50IHRvIHRlc3Qgc2V0dGluZyB0aGUgcHJvcGVydHkgdG8gYSB2YWx1ZSB0aGF0CiAgICAgLy8g
aXMgZGlmZmVyZW50IHRoYW4gd2hhdCB0aGUgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgaXQgdG8u
CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0
ZSwgMSwgdGVzdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDEuMjNmLCA0LjU2Zikp
KTsKQEAgLTY1MCwxNSArNjQ3LDEzIEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tQ
cm9wZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKICAgICBFWEVDVVRFX0FORF9WRVJJ
RllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldFRy
YW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXREb3Vi
bGVTaWRlZChmYWxzZSkpOwogCi0gICAgLy8gVGhlIGFib3ZlIHRlc3RzIHNob3VsZCBub3QgaGF2
ZSBjYXVzZWQgYSBub24tZW1wdHkgZGlydHkgcmVjdC4KLSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5
ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAgLy8gVGhlIGFib3ZlIHRlc3RzIHNob3Vs
ZCBub3QgaGF2ZSBjYXVzZWQgYSBjaGFuZ2UgdG8gdGhlIG5lZWRzRGlzcGxheSBmbGFnLgorICAg
IEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIFRlc3Qg
cHJvcGVydGllcyB0aGF0IHNob3VsZCBjYWxsIHNldE5lZWRzRGlzcGxheQotICAgIC8vIFRoZXNl
IHByb3BlcnRpZXMgd2lsbCBjYWxsIG5vdGlmeVN5bmNSZXF1aXJlZCBhbmQgY2hhbmdlIHRoZSBk
aXJ0eSByZWN0LgorICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgd2lsbCBjYWxsIG5vdGlmeVN5bmNS
ZXF1aXJlZCBhbmQgY2hhbmdlIHRoZSBuZWVkc0Rpc3BsYXkgZmxhZy4KICAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXIt
PnNldEJvdW5kcyhJbnRTaXplKDUsIDEwKSkpOwotICAgIHZlcmlmeUZsb2F0UmVjdHNBbG1vc3RF
cXVhbChGbG9hdFJlY3QoMC4wZiwgMC4wZiwgNS4wZiwgMTAuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5
UmVjdCgpKTsKLSAgICB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgRVhQRUNU
X1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVF
KHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gRklYTUU6IG5lZWQgdG8gYWRk
IGEgdGVzdCBmb3Igc2V0TGF5ZXJUcmVlSG9zdCB3aXRoIGEgbm9uLW51bGwgc3R1YmJlZCBDQ0xh
eWVyVHJlZUhvc3QuCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116893</attachid>
            <date>2011-11-28 22:08:00 -0800</date>
            <delta_ts>2011-11-29 10:10:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71872-20111129010759.patch</filename>
            <type>text/plain</type>
            <size>23642</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMzI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMxMmE2ZGM2OWNhZmM0
YTUwYjkxYzIzNzAxNjFkZTM3ODc4ZDllOC4uN2FlMjhlNzgyMDk2YzYzOWJjY2QzNDY4N2RiNmFm
NmNkYmRjOTI0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDExLTExLTI4ICBEYXZp
ZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBJ
bXByb3ZlIHRpbGUgaW52YWxpZGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzE4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBWaXJ0dWFsaXplIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxh
eSBzbyB0aGF0IGRpcnR5IHJlY3RhbmdsZXMgY2FuCisgICAgICAgIGJlIGhhbmRsZWQgZGlyZWN0
bHkgYnkgdGhlIFRpbGVkTGF5ZXJDaHJvbWl1bSBjbGFzcy4gUmVwbGFjZQorICAgICAgICBMYXll
ckNocm9taXVtOjpkaXJ0eVJlY3QoKSB3aXRoIExheWVyQ2hyb21pdW06Om5lZWRzRGlzcGxheSgp
IGFuZAorICAgICAgICByZW1vdmUgdW5uZWNlc3NhcnkgdW5pb24gb2YgZGlydHkgcmVjdGFuZ2xl
cy4gQnkgaW52YWxpZGF0aW5nIGV4aXN0aW5nCisgICAgICAgIHRpbGVzIHVzaW5nIHRoZSBpbml0
aWFsIGRpcnR5IHJlY3RhbmdsZXMgaW5zdGVhZCBvZiB0aGVpciB1bmlvbiB3ZQorICAgICAgICBh
dm9pZCBhIGxhcmdlIGFtb3VudCBvZiB1bm5lY2Vzc2FyeSB0aWxlIHVwZGF0ZXMuCisKKyAgICAg
ICAgVXBkYXRlIExheWVyQ2hyb21pdW1UZXN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJ
ZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpzZXROZWVk
c0Rpc3BsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1
bTo6c2V0Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpw
YWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldE5lZWRz
RGlzcGxheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6bmVlZHNEaXNwbGF5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppbnZhbGlkYXRlUmVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
V2ViR0xMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisKIDIwMTEtMTEtMjggIFN0ZXBoZW4g
V2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBG
aXggU1ZHIGZpbHRlcnMgd2hlbiBydW5uaW5nIGluIGFjY2VsZXJhdGVkIGRyYXdpbmcgbW9kZS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNjc3NDYwY2NmMDk4YjlkYmFhYjRhZWU1MGY4
ZmU0MWZiMjAxNDJjNS4uZjA0ZTI4MzQxOTg3MmJmMzg3ZjE5N2JiMmQ2OTBlYzZmZDY5MTE4OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0xMS0yOCAg
RGF2aWQgUmV2ZW1hbiAgPHJldmVtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1
bV0gSW1wcm92ZSB0aWxlIGludmFsaWRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcxODcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViQ29udGVudExheWVyLmg6CisgICAgICAg
ICogc3JjL1dlYkNvbnRlbnRMYXllci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRM
YXllcjo6aXNJbnZhbGlkKToKKyAgICAgICAgKiB0ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHA6
CisKIDIwMTEtMTEtMjkgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgPHN0eWxlIHNjb3BlZD46IGFkZCBFTkFCTEUoU1RZTEVfU0NPUEVEKSBm
bGFnIHRvIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXgg
NDQ5NDU4NmE1N2NhMTZiYzRiNGYyMzI0MTBkYjhmN2ZkNGNkODhjMS4uYjBjNGUwNzM5NDZiYTVl
NTFlM2RjNmEyNTM3MzZhMGVjYTM4Y2FjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hy
b21pdW0uY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIGJvb2wgQ2FudmFzMkRMYXllckNocm9taXVtOjpk
cmF3c0NvbnRlbnQoKSBjb25zdAogCiB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXIm
KQogewotICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5KCkgfHwgIWRyYXdzQ29udGVudCgpKQor
ICAgIGlmICghbV9uZWVkc0Rpc3BsYXkgfHwgIWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAobV9jb250ZXh0KSB7CkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgQ2FudmFz
MkRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4
dDNEKiwgQ0NUZXh0CiAgICAgfQogCiAgICAgbV91cGRhdGVSZWN0ID0gRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgYm91bmRzKCkpOwotICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbV9uZWVk
c0Rpc3BsYXkgPSBmYWxzZTsKIH0KIAogdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OmNvbnRl
bnRDaGFuZ2VkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCA5ZWIx
ZDc5OWY2ZDkxZWNlYzY3OTgxMDZlYzYwMjdiYjQxZTUyNTIwLi5mMTQ2ZThmYjE2ZDM4YjNjYTlh
YzJmNzdjNTRmMDJlNjhkMzc2M2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
Y3BwCkBAIC0xMDMsMTIgKzEwMyw4IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50
Q29udGVudHNJZkRpcnR5KCkKICAgICBpZiAoZHJhd3NDb250ZW50KCkpCiAgICAgICAgIGxheWVy
UmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKIAotICAgIEludFJlY3QgZGlydHkgPSBlbmNsb3Np
bmdJbnRSZWN0KG1fZGlydHlSZWN0KTsKLSAgICBkaXJ0eS5pbnRlcnNlY3QoSW50UmVjdChJbnRQ
b2ludCgpLCBjb250ZW50Qm91bmRzKCkpKTsKLSAgICBpbnZhbGlkYXRlUmVjdChkaXJ0eSk7Ci0K
ICAgICBwcmVwYXJlVG9VcGRhdGUobGF5ZXJSZWN0KTsKLSAgICByZXNldE5lZWRzRGlzcGxheSgp
OworICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CiAKIGJvb2wgQ29udGVudExheWVyQ2hy
b21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CkBAIC0xMTYsNiArMTEyLDIwIEBAIGJvb2wgQ29u
dGVudExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGVs
ZWdhdGUgJiYgbV9kZWxlZ2F0ZS0+ZHJhd3NDb250ZW50KCkgJiYgVGlsZWRMYXllckNocm9taXVt
OjpkcmF3c0NvbnRlbnQoKTsKIH0KIAordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6c2V0TmVl
ZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KQoreworICAgIEludFJlY3QgZGly
dHkgPSBlbmNsb3NpbmdJbnRSZWN0KGRpcnR5UmVjdCk7CisgICAgaW52YWxpZGF0ZVJlY3QoZGly
dHkpOworICAgIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheShkaXJ0eVJlY3QpOworfQor
Cit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIElu
dFJlY3QgZGlydHkoSW50UG9pbnQoKSwgYm91bmRzKCkpOworICAgIGludmFsaWRhdGVSZWN0KGRp
cnR5KTsKKyAgICBMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoKTsKK30KKwogdm9pZCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRy
ZWVIb3N0KiBob3N0KQogewogI2lmIFVTRShTS0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmgKaW5kZXggYjgzNGU2NzZiZDYzNDQ1YWE0NTNiMzY1ZWVlMjgwMjQwZjM4MDljMS4uYTRh
MTE0NjAwZGFmMDQxNDhjMTNlM2VjNzk5Njg1N2FjYTY3MDIzMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5oCkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5D
b250ZW50TGF5ZXJDaHJvbWl1bSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJ
ZkRpcnR5KCk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAKIHByb3RlY3RlZDoK
ICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDlkM2U5ZjNhMWU3MGRlZTVmMTllM2Nm
MGIyNDhiOTQzYWZhMTAyYzAuLmYwZGMzNTIxZjU4MDE3MTdkNDA4NTM3YmY1YmZlZWFkMDg2ZTRi
MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtMTM5LDIwICsxMzksMTkg
QEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKEltYWdlKiBjb250ZW50cykK
IAogICAgIG1fY29udGVudHMgPSBjb250ZW50czsKICAgICBtX2ltYWdlRm9yQ3VycmVudEZyYW1l
ID0gbV9jb250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBtX2RpcnR5
UmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIGJvdW5kcygpKTsKICAgICBzZXROZWVkc0Rp
c3BsYXkoKTsKICAgICBzZXRPcGFxdWUoIW1fY29udGVudHMtPmN1cnJlbnRGcmFtZUhhc0FscGhh
KCkpOwogfQogCiB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHko
KQogewotICAgIGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fbmVlZHNE
aXNwbGF5KSB7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPnVwZGF0ZUZyb21JbWFnZShtX2Nv
bnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKTsKICAgICAgICAgdXBkYXRlVGls
ZVNpemVBbmRUaWxpbmdPcHRpb24oKTsKICAgICAgICAgSW50UmVjdCBwYWludFJlY3QoSW50UG9p
bnQoKSwgY29udGVudEJvdW5kcygpKTsKLSAgICAgICAgaWYgKCFtX2RpcnR5UmVjdC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgaWYgKG1fbmVlZHNEaXNwbGF5KSB7CiAgICAgICAgICAgICBpbnZhbGlk
YXRlUmVjdChwYWludFJlY3QpOwotICAgICAgICAgICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAg
ICAgICAgICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTRhN2Y4ODU3ZDY4OTAzODZhZWZhODU2NmE4ZDI3ZDVk
NWNlNTAyOC4uNDdiMzA4MGM4MWZjZjg4Y2MyOWNkODJiZWM0MjIyZjY1YWE4M2Q4MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTU2LDYgKzU2LDcgQEAgUGFzc1JlZlB0cjxMYXllckNocm9t
aXVtPiBMYXllckNocm9taXVtOjpjcmVhdGUoQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKIAog
TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQog
ICAgIDogbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKKyAgICAsIG1fbmVlZHNEaXNwbGF5KGZhbHNlKQog
ICAgICwgbV9sYXllcklkKHNfbmV4dExheWVySWQrKykKICAgICAsIG1fcGFyZW50KDApCiAgICAg
LCBtX3Njcm9sbGFibGUoZmFsc2UpCkBAIC0yNjMsMjIgKzI2NCwxOCBAQCB2b2lkIExheWVyQ2hy
b21pdW06OnNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkKICAgICAv
LyBTaW1wbHkgbWFyayB0aGUgY29udGVudHMgYXMgZGlydHkuIEZvciBub24tcm9vdCBsYXllcnMs
IHRoZSBjYWxsIHRvCiAgICAgLy8gc2V0TmVlZHNDb21taXQgd2lsbCBzY2hlZHVsZSBhIGZyZXNo
IGNvbXBvc2l0aW5nIHBhc3MuCiAgICAgLy8gRm9yIHRoZSByb290IGxheWVyLCBzZXROZWVkc0Nv
bW1pdCBoYXMgbm8gZWZmZWN0LgotICAgIG1fZGlydHlSZWN0LnVuaXRlKGRpcnR5UmVjdCk7Cisg
ICAgaWYgKCFkaXJ0eVJlY3QuaXNFbXB0eSgpKQorICAgICAgICBtX25lZWRzRGlzcGxheSA9IHRy
dWU7CisKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNl
dE5lZWRzRGlzcGxheSgpCiB7Ci0gICAgbV9kaXJ0eVJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2lu
dCgpKTsKLSAgICBtX2RpcnR5UmVjdC5zZXRTaXplKGJvdW5kcygpKTsKKyAgICBtX25lZWRzRGlz
cGxheSA9IHRydWU7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9pZCBMYXllckNocm9t
aXVtOjpyZXNldE5lZWRzRGlzcGxheSgpCi17Ci0gICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3Qo
KTsKLX0KLQogdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBs
KiBsYXllcikKIHsKICAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQobV9hbmNob3JQb2ludCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmgKaW5kZXggNzEzZGZiMjUyMzAxMDg2ZmZhN2U1ODFjMDQyMDQ3NWU4YmRm
ZmI3ZC4uZDUzMjk2ZjViOTBhM2EzMDNhNzFkYTcwZjE2OWY0OWIxMTc0OGI0ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaApAQCAtMTA1LDEwICsxMDUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNYXNr
TGF5ZXIoTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyKSB7IG1fbWFza0xheWVyID0gbWFza0xheWVy
OyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyKCkgY29u
c3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIuZ2V0KCk7IH0KIAotICAgIHZvaWQgc2V0TmVlZHNEaXNw
bGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxh
eSgpOwotICAgIGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9k
aXJ0eVJlY3Q7IH0KLSAgICB2b2lkIHJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgdmlydHVhbCB2
b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOworICAgIHZpcnR1YWwgYm9vbCBuZWVkc0Rpc3Bs
YXkoKSBjb25zdCB7IHJldHVybiBtX25lZWRzRGlzcGxheTsgfQogCiAgICAgdm9pZCBzZXRPcGFj
aXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgc2V0TmVlZHNDb21taXQo
KTsgfQogICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KQEAg
LTIxOCw4ICsyMTcsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIHNldE5lZWRzQ29tbWl0KCk7
CiAKLSAgICAvLyBUaGUgZGlydHkgcmVjdCBpcyB0aGUgdW5pb24gb2YgZGFtYWdlZCByZWdpb25z
IHRoYXQgbmVlZCByZXBhaW50aW5nL3VwZGF0aW5nLgotICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVj
dDsKKyAgICAvLyBUaGlzIGZsYWcgaXMgc2V0IHdoZW4gbGF5ZXIgbmVlZCByZXBhaW50aW5nL3Vw
ZGF0aW5nLgorICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXk7CiAKICAgICAvLyBUaGUgdXBkYXRlIHJl
Y3QgaXMgdGhlIHJlZ2lvbiBvZiB0aGUgY29tcG9zaXRvciByZXNvdXJjZSB0aGF0IHdhcyBhY3R1
YWxseSB1cGRhdGVkIGJ5IHRoZSBjb21wb3NpdG9yLgogICAgIC8vIEZvciBsYXllcnMgdGhhdCBt
YXkgZG8gdXBkYXRpbmcgb3V0c2lkZSB0aGUgY29tcG9zaXRvcidzIGNvbnRyb2wgKGkuZS4gcGx1
Z2luIGxheWVycyksIHRoaXMgaW5mb3JtYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IGZmYWQyZjViMTc1Yzk2NjVkNjY1NzViYWZjYzM5YmZjZWUwZTFlNmEuLmMwYWI3
NmVkYWRmYjRlM2RlMDg5NjJmMjEyNTFhYjY2MDIzMjEwODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcApAQCAtMjkwLDggKzI5MCw2IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVt
OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICBpZiAoIW1f
dGlsZXIgfHwgY29udGVudFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNEcmF3KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJlY3QpOwot
CiAgICAgLy8gRGlydHkgcmVjdHMgYXJlIGFsd2F5cyBpbiBsYXllciBzcGFjZSwgYXMgdGhlIGxh
eWVyIGNvdWxkIGJlIHJlcG9zaXRpb25lZAogICAgIC8vIGFmdGVyIGludmFsaWRhdGlvbi4KICAg
ICBjb25zdCBJbnRSZWN0IGxheWVyUmVjdCA9IG1fdGlsZXItPmNvbnRlbnRSZWN0VG9MYXllclJl
Y3QoY29udGVudFJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMTlh
OTkzYmRiOWVkOTcwMmQ1ZDRkNDI5MGU2ODE0MTJiMTUzMmNiMC4uZWM5M2YxNjhkYTE0ZWE0MWUz
YzE2ZGY2ZDdjNDliZWU0NTEzZWFjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3Bw
CkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDCiAgICAgaWYgKCFtX2Rl
bGVnYXRlIHx8ICFtX3Byb3ZpZGVyIHx8ICFkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKG1fZGlydHlSZWN0LmlzRW1wdHkoKSAmJiB0ZXh0dXJlc1ZhbGlkKCkpIHsK
KyAgICBpZiAoIW1fbmVlZHNEaXNwbGF5ICYmIHRleHR1cmVzVmFsaWQoKSkgewogICAgICAgICBm
b3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBtX3BsYW5lczsgcGxhbmUrKykgewogICAg
ICAgICAgICAgTWFuYWdlZFRleHR1cmUqIHRleCA9IG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVy
ZS5nZXQoKTsKICAgICAgICAgICAgIGlmICghdGV4LT5yZXNlcnZlKHRleC0+c2l6ZSgpLCB0ZXgt
PmZvcm1hdCgpKSkgewpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgVmlkZW9MYXllckNocm9taXVt
Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBD
CiAgICAgICAgIG1fbmF0aXZlVGV4dHVyZUlkID0gZnJhbWUtPnRleHR1cmVJZCgpOwogICAgICAg
ICBtX25hdGl2ZVRleHR1cmVTaXplID0gSW50U2l6ZShmcmFtZS0+d2lkdGgoKSwgZnJhbWUtPmhl
aWdodCgpKTsKICAgICAgICAgbV9uYXRpdmVUZXh0dXJlVmlzaWJsZVNpemUgPSBJbnRTaXplKGZy
YW1lLT53aWR0aCgpLCBmcmFtZS0+aGVpZ2h0KCkpOwotICAgICAgICByZXNldE5lZWRzRGlzcGxh
eSgpOworICAgICAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwogICAgICAgICBtX3Byb3ZpZGVy
LT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ0
LDcgKzE0NCw3IEBAIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDCiAgICAgQVNTRVJUKG1fcGxhbmVz
IDw9IE1heFBsYW5lcyk7CiAKICAgICBtX3VwZGF0ZVJlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCBib3VuZHMoKSk7Ci0gICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBtX25lZWRzRGlz
cGxheSA9IGZhbHNlOwogCiAgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDI3NmYzYzlmYzJmZTEwN2Yx
NjNiMmFiYTA5OGMwM2ZiYjMzNDRjYjYuLjdhYTk4NmVjZjcxMjE2Y2UxODM3MDU1ZTAxMDEzNGQ5
NTQ4OTkyMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcApAQCAtNzEsNyArNzEs
NyBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhH
cmFwaGljc0NvbnRleHQzRCogcmVuZGVyZXJDbwogICAgIGlmICghZHJhd3NDb250ZW50KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgaWYg
KCFtX25lZWRzRGlzcGxheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fdGV4dHVyZUNo
YW5nZWQpIHsKQEAgLTg1LDEyICs4NSwxMiBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogcmVuZGVyZXJDbwogICAg
ICAgICBtX3RleHR1cmVDaGFuZ2VkID0gZmFsc2U7CiAgICAgfQogICAgIC8vIFVwZGF0ZSB0aGUg
Y29udGVudHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29tcG9zaXRvci4KLSAgICBpZiAo
IW1fZGlydHlSZWN0LmlzRW1wdHkoKSAmJiBtX3RleHR1cmVVcGRhdGVkKSB7CisgICAgaWYgKG1f
bmVlZHNEaXNwbGF5ICYmIG1fdGV4dHVyZVVwZGF0ZWQpIHsKICAgICAgICAgLy8gcHVibGlzaFRv
UGxhdGZvcm1MYXllciBwcmVwYXJlcyB0aGUgY29udGVudHMgb2YgdGhlIG9mZi1zY3JlZW4gcmVu
ZGVyIHRhcmdldCBmb3IgdXNlIGJ5IHRoZSBjb21wb3NpdG9yLgogICAgICAgICBkcmF3aW5nQnVm
ZmVyKCktPnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIoKTsKICAgICAgICAgY29udGV4dCgpLT5tYXJr
TGF5ZXJDb21wb3NpdGVkKCk7CiAgICAgICAgIG1fdXBkYXRlUmVjdCA9IEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIGJvdW5kcygpKTsKLSAgICAgICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAg
ICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKICAgICAgICAgbV90ZXh0dXJlVXBkYXRlZCA9IGZh
bHNlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkNvbnRlbnRMYXllci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29u
dGVudExheWVyLmgKaW5kZXggZTNjMTk3YTMzYTg5MjQ3MGM3OWMwMTcwNGE4NWUxZTBmY2M0ZmRj
ZC4uYWVmY2VjZDhiNzk4ZWY1NWFkZjNmMzEzNDAyNDFmNmZiZjM2NzFlNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKQEAgLTYwLDggKzYw
LDggQEAgcHVibGljOgogICAgIC8vIFNldHMgdGhlIGVudGlyZSBsYXllciBhcyBpbnZhbGlkLCBp
LmUuIG5lZWRzIHRvIHVwZGF0ZSBpdHMgY29udGVudC4KICAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
aW52YWxpZGF0ZSgpOwogCi0gICAgLy8gUmV0dXJucyB0aGUgcmVnaW9uIG9mIHRoZSBsYXllciB0
aGF0IGlzIGN1cnJlbnRseSBpbnZhbGlkLgotICAgIFdFQktJVF9FWFBPUlQgV2ViRmxvYXRSZWN0
IGludmFsaWRSZWN0KCkgY29uc3Q7CisgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBsYXllciBp
cyBjdXJyZW50bHkgaW52YWxpZC4KKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaXNJbnZhbGlkKCkg
Y29uc3Q7CiAKICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KICAgICBXZWJDb250ZW50TGF5ZXIo
Y29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+Jik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcAppbmRleCBkZThkOTk4YWU5
OGM0YzFjZGVkNTZiN2E0ODc4YzhmMzQ0ZTI4YWQ4Li5mMTA0YzNkZWM5NGZjOTY0YzAxMTk2OTM2
OWIzNDZiZGQ2MTZmYWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJDb250ZW50TGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNv
bnRlbnRMYXllci5jcHAKQEAgLTU2LDkgKzU2LDkgQEAgdm9pZCBXZWJDb250ZW50TGF5ZXI6Omlu
dmFsaWRhdGUoKQogICAgIHVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5zZXROZWVkc0Rp
c3BsYXkoKTsKIH0KIAotV2ViRmxvYXRSZWN0IFdlYkNvbnRlbnRMYXllcjo6aW52YWxpZFJlY3Qo
KSBjb25zdAorYm9vbCBXZWJDb250ZW50TGF5ZXI6OmlzSW52YWxpZCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIFdlYkZsb2F0UmVjdChjb25zdFVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5k
aXJ0eVJlY3QoKSk7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPFdlYkNvbnRlbnRMYXllckltcGw+
KCktPm5lZWRzRGlzcGxheSgpOwogfQogCiBXZWJDb250ZW50TGF5ZXI6OldlYkNvbnRlbnRMYXll
cihjb25zdCBQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+JiBub2RlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCA3
ODA5ZDE4YTQzNjcwZDQ4YWE3ODYxZmI4NzA0NjU2Mjg1OTNmYTI3Li42ZDlkYWYzZTg0NGRmOThk
YjVmMTA0NTc2MTQ0ZjZjMmFhMWI5MGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtNTMyLDcgKzUzMiw3IEBAIFRFU1Rf
RihMYXllckNocm9taXVtVGVzdCwgZ2V0Um9vdExheWVyQWZ0ZXJUcmVlTWFuaXB1bGF0aW9ucykK
IFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tTZXROZWVkc0Rpc3BsYXlDYXVzZXNDb3Jy
ZWN0QmVoYXZpb3IpCiB7CiAgICAgLy8gVGhlIHNlbWFudGljcyBmb3Igc2V0TmVlZHNEaXNwbGF5
IHdoaWNoIGFyZSB0ZXN0ZWQgaGVyZToKLSAgICAvLyAgIDEuIGNyZWF0ZXMgYSB1bmlvbmVkIGRp
cnR5UmVjdCBhcHByb3ByaWF0ZWx5LgorICAgIC8vICAgMS4gc2V0cyBuZWVkc0Rpc3BsYXkgZmxh
ZyBhcHByb3ByaWF0ZWx5LgogICAgIC8vICAgMi4gaW5kaXJlY3RseSBjYWxscyBub3RpZnlTeW5j
UmVxdWlyZWQsIGV4YWN0bHkgb25jZSBmb3IgZWFjaCBjYWxsIHRvIHNldE5lZWRzRGlzcGxheS4K
IAogICAgIE1vY2tMYXllckRlbGVnYXRlIG1vY2tEZWxlZ2F0ZTsKQEAgLTU0NCw0MCArNTQ0LDM3
IEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tTZXROZWVkc0Rpc3BsYXlDYXVzZXND
b3JyZWN0QmVoYXZpb3IpCiAgICAgRmxvYXRSZWN0IGVtcHR5RGlydHlSZWN0ID0gRmxvYXRSZWN0
KDQwLjBmLCA0NS4wZiwgMCwgMCk7CiAgICAgRmxvYXRSZWN0IG91dE9mQm91bmRzRGlydHlSZWN0
ID0gRmxvYXRSZWN0KDQwMC4wZiwgNDA1LjBmLCA1MDAuMGYsIDUwMi4wZik7CiAKLSAgICAvLyBC
ZWZvcmUgYW55dGhpbmcsIHRlc3RMYXllciBzaG91bGQgaGF2ZSBhbiBlbXB0eSBkaXJ0eSByZWN0
LgotICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKyAg
ICAvLyBCZWZvcmUgYW55dGhpbmcsIHRlc3RMYXllciBzaG91bGQgbm90IGJlIGRpcnR5LgorICAg
IEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIFRoaXMg
aXMganVzdCBpbml0aWFsaXphdGlvbiwgYnV0IG5vdGlmeVN5bmNSZXF1aXJlZCBiZWhhdmlvciBp
cyB2ZXJpZmllZCBhbnl3YXkgdG8gYXZvaWQgd2FybmluZ3MuCiAgICAgRVhFQ1VURV9BTkRfVkVS
SUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRC
b3VuZHModGVzdEJvdW5kcykpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19C
RUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKSk7
Ci0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAg
IHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbW9ja0RlbGVnYXRlKTsKKyAgICBF
WFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBUaGUgcmVh
bCB0ZXN0IGJlZ2lucyBoZXJlLgogCi0gICAgLy8gQ2FzZSAxOiBiYXNpYworICAgIC8vIENhc2Ug
MTogbmVlZHNEaXNwbGF5IGZsYWcgc2hvdWxkIG5vdCBjaGFuZ2UgYmVjYXVzZSBvZiBhbiBlbXB0
eSBkaXJ0eSByZWN0LgorICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklP
Uihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGVtcHR5RGlydHlS
ZWN0KSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOworCisg
ICAgLy8gQ2FzZSAyOiBiYXNpYy4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNf
QkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0
eTEpKTsKLSAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShkaXJ0eTEsIHRlc3RMYXllci0+ZGlydHlS
ZWN0KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCi0g
ICAgLy8gQ2FzZSAyOiBhIHNlY29uZCBkaXJ0eSByZWN0IHNob3VsZCBiZSB1bmlvbmVkIG9mIGRp
cnR5MSBhbmQgZGlydHkyLgorICAgIC8vIENhc2UgMzogYSBzZWNvbmQgZGlydHkgcmVjdC4KICAg
ICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAx
LCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0eTIpKTsKLSAgICBFWFBFQ1RfRkxPQVRf
UkVDVF9FUShGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxMy4wZiwgMTQuMGYpLCB0ZXN0TGF5ZXIt
PmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgp
KTsKIAotICAgIC8vIENhc2UgMzogZGlydHkgcmVjdCBzaG91bGQgbm90IGNoYW5nZSBiZWNhdXNl
IG9mIGFuIGVtcHR5IGRpcnR5IHJlY3QuCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9T
WU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXko
ZW1wdHlEaXJ0eVJlY3QpKTsKLSAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTAu
MGYsIDE1LjBmLCAxMy4wZiwgMTQuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKLQotICAg
IC8vIENhc2UgNDogTGF5ZXJDaHJvbWl1bSBzaG91bGQgYWNjZXB0IGRpcnR5IHJlY3RzIHRoYXQg
Z28gYmV5b25kIGl0cyBib3VuZHMKKyAgICAvLyBDYXNlIDQ6IExheWVyQ2hyb21pdW0gc2hvdWxk
IGFjY2VwdCBkaXJ0eSByZWN0cyB0aGF0IGdvIGJleW9uZCBpdHMgYm91bmRzLgorICAgIHRlc3RM
YXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbW9ja0RlbGVnYXRlKTsKICAgICBFWEVDVVRF
X0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5
ZXItPnNldE5lZWRzRGlzcGxheShvdXRPZkJvdW5kc0RpcnR5UmVjdCkpOwotICAgIEVYUEVDVF9G
TE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDg5MC4wZiwgODkyLjBmKSwgdGVz
dExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rp
c3BsYXkoKSk7CiAKLSAgICAvLyBDYXNlIDU6IHNldE5lZWRzRGlzcGxheSgpIHdpdGhvdXQgdGhl
IGRpcnR5IHJlY3QgYXJnIHNob3VsZCBjYXVzZSB0aGUgZW50aXJlIGJvdW5kcyB0byBiZSBkaXJ0
eSwKLSAgICAvLyAgICAgICAgIG92ZXJyaWRpbmcgYW55IGV4aXN0aW5nIGRpcnR5IHJlY3QuCisg
ICAgLy8gQ2FzZSA1OiBzZXROZWVkc0Rpc3BsYXkoKSB3aXRob3V0IHRoZSBkaXJ0eSByZWN0IGFy
Zy4KKyAgICB0ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1vY2tEZWxlZ2F0ZSk7
CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0
ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX1JF
Q1RfRVEoRmxvYXRSZWN0KDAsIDAsIHRlc3RCb3VuZHMud2lkdGgoKSwgdGVzdEJvdW5kcy5oZWln
aHQoKSksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwotCi0gICAgLy8gcmVzZXROZWVkc0Rpc3Bs
YXkgc2hvdWxkIGVtcHR5IHRoZSBkaXJ0eSByZWN0LCBhbmQgTk9UIGNhbGwgbm90aWZ5U3luY1Jl
cXVpcmVkLgotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2Nr
RGVsZWdhdGUsIDAsIHRlc3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKSk7Ci0gICAgRVhQRUNU
X1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVF
KHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogfQogCiBURVNUX0YoTGF5ZXJDaHJvbWl1bVRl
c3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5V2l0aE51bGxEZWxlZ2F0ZSkKQEAgLTU5MCwxMyArNTg3
LDEzIEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tTZXROZWVkc0Rpc3BsYXlXaXRo
TnVsbERlbGVnYXRlKQogICAgIEZsb2F0UmVjdCBkaXJ0eSA9IEZsb2F0UmVjdCgxMC4wZiwgMTUu
MGYsIDEuMGYsIDIuMGYpOwogCiAgICAgdGVzdExheWVyLT5zZXRCb3VuZHModGVzdEJvdW5kcyk7
Ci0gICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAuMGYsIDAuMGYsIDUwMS4wZiwg
NTA4LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX1RSVUUodGVzdExh
eWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKLSAgICB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5
KCk7Ci0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOwor
ICAgIHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBFWFBFQ1RfRkFM
U0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICB0ZXN0TGF5ZXItPnNldE5lZWRz
RGlzcGxheShkaXJ0eSk7Ci0gICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoZGlydHksIHRlc3RMYXll
ci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5
KCkpOwogfQogCiBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVydHlDaGFuZ2VD
YXVzZXNDb3JyZWN0QmVoYXZpb3IpCkBAIC02MDcsMTAgKzYwNCwxMCBAQCBURVNUX0YoTGF5ZXJD
aHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVydHlDaGFuZ2VDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiAg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGR1bW15TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoJm1fc2lsZW50RGVsZWdhdGUpOyAvLyBqdXN0IGEgZHVtbXkgbGF5ZXIgZm9yIHRoaXMgdGVz
dCBjYXNlLgogCiAgICAgLy8gc2FuaXR5IGNoZWNrIG9mIGluaXRpYWwgdGVzdCBjb25kaXRpb24K
LSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAg
RVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gVGVzdCBw
cm9wZXJ0aWVzIHRoYXQgc2hvdWxkIG5vdCBjYWxsIG5lZWRzRGlzcGxheSBhbmQgbmVlZHNDb21t
aXQgd2hlbiBjaGFuZ2VkLgotICAgIC8vIG5vdGlmeVN5bmNSZXF1aXJlZCBzaG91bGQgbm90IGJl
IGNhbGxlZCwgYW5kIHRoZSBkaXJ0eVJlY3Qgc2hvdWxkIHJlbWFpbiBzdGlsbCBlbXB0eS4KKyAg
ICAvLyBub3RpZnlTeW5jUmVxdWlyZWQgc2hvdWxkIG5vdCBiZSBjYWxsZWQsIGFuZCB0aGUgbmVl
ZHNEaXNwbGF5IGZsYWcgc2hvdWxkIHJlbWFpbiBmYWxzZS4KICAgICBFWFBFQ1RfQ0FMTChpbml0
aWFsRGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgpKS5UaW1lcygwKTsgLy8gb2xkIGRlbGVn
YXRlIHNob3VsZCBub3QgYmUgdXNlZCB3aGVuIHNldERlbGVnYXRlIGdpdmVzIGEgbmV3IGRlbGVn
YXRlLgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVs
ZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0RGVsZWdhdGUoJm1vY2tEZWxlZ2F0ZSkpOwogICAgIEVY
RUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRl
c3RMYXllci0+c2V0TmFtZSgiVGVzdCBMYXllciIpKTsKQEAgLTYyNSwxMCArNjIyLDEwIEBAIFRF
U1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tQcm9wZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RC
ZWhhdmlvcikKICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9j
a0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldERyYXdUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25N
YXRyaXgoKSkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUiht
b2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19C
RUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVj
dChJbnRSZWN0KDQsIDUsIDYsIDcpKSk7Ci0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0
eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlz
cGxheSgpKTsKIAogICAgIC8vIE5leHQsIHRlc3QgcHJvcGVydGllcyB0aGF0IHNob3VsZCBjYWxs
IHNldE5lZWRzQ29tbWl0IChidXQgbm90IHNldE5lZWRzRGlzcGxheSkKLSAgICAvLyBUaGVzZSBw
cm9wZXJ0aWVzIHNob3VsZCBpbmRpcmVjdGx5IGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkLCBidXQg
dGhlIGRpcnR5IHJlY3Qgc2hvdWxkIG5vdCBjaGFuZ2UuCisgICAgLy8gVGhlc2UgcHJvcGVydGll
cyBzaG91bGQgaW5kaXJlY3RseSBjYWxsIG5vdGlmeVN5bmNSZXF1aXJlZCwgYnV0IHRoZSBuZWVk
c0Rpc3BsYXkgZmxhZyBzaG91bGQgbm90IGNoYW5nZS4KICAgICAvLyBOb3RlIHRoYXQgZm9yIG1h
bnkgb2YgdGhlc2UgcHJvcGVydGllcyBpdCBpcyBpbXBvcnRhbnQgdG8gdGVzdCBzZXR0aW5nIHRo
ZSBwcm9wZXJ0eSB0byBhIHZhbHVlIHRoYXQKICAgICAvLyBpcyBkaWZmZXJlbnQgdGhhbiB3aGF0
IHRoZSBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyBpdCB0by4KICAgICBFWEVDVVRFX0FORF9WRVJJ
RllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldEFu
Y2hvclBvaW50KEZsb2F0UG9pbnQoMS4yM2YsIDQuNTZmKSkpOwpAQCAtNjQ0LDE1ICs2NDEsMTMg
QEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1Byb3BlcnR5Q2hhbmdlQ2F1c2VzQ29y
cmVjdEJlaGF2aW9yKQogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklP
Uihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9u
TWF0cml4KCkpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1Io
bW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldERvdWJsZVNpZGVkKGZhbHNlKSk7CiAKLSAg
ICAvLyBUaGUgYWJvdmUgdGVzdHMgc2hvdWxkIG5vdCBoYXZlIGNhdXNlZCBhIG5vbi1lbXB0eSBk
aXJ0eSByZWN0LgotICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0
eSgpKTsKKyAgICAvLyBUaGUgYWJvdmUgdGVzdHMgc2hvdWxkIG5vdCBoYXZlIGNhdXNlZCBhIGNo
YW5nZSB0byB0aGUgbmVlZHNEaXNwbGF5IGZsYWcuCisgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXll
ci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gVGVzdCBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxk
IGNhbGwgc2V0TmVlZHNEaXNwbGF5Ci0gICAgLy8gVGhlc2UgcHJvcGVydGllcyB3aWxsIGNhbGwg
bm90aWZ5U3luY1JlcXVpcmVkIGFuZCBjaGFuZ2UgdGhlIGRpcnR5IHJlY3QuCisgICAgLy8gVGhl
c2UgcHJvcGVydGllcyB3aWxsIGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkIGFuZCBjaGFuZ2UgdGhl
IG5lZWRzRGlzcGxheSBmbGFnLgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19C
RUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0Qm91bmRzKEludFNpemUoNSwg
MTApKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAuMGYsIDAuMGYsIDUu
MGYsIDEwLjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7Ci0gICAgdGVzdExheWVyLT5yZXNl
dE5lZWRzRGlzcGxheSgpOwotICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCku
aXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsK
IAogICAgIC8vIEZJWE1FOiBuZWVkIHRvIGFkZCBhIHRlc3QgZm9yIHNldExheWVyVHJlZUhvc3Qg
d2l0aCBhIG5vbi1udWxsIHN0dWJiZWQgQ0NMYXllclRyZWVIb3N0LgogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116991</attachid>
            <date>2011-11-29 10:10:17 -0800</date>
            <delta_ts>2011-11-29 11:32:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71872-20111129131016.patch</filename>
            <type>text/plain</type>
            <size>23463</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMzI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMxMmE2ZGM2OWNhZmM0
YTUwYjkxYzIzNzAxNjFkZTM3ODc4ZDllOC4uZWNlOWE3YTExMzg4OTg4MjhiMDM5ODBjZmUwOTkx
MDgwOTliNGE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDExLTExLTI5ICBEYXZp
ZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBJ
bXByb3ZlIHRpbGUgaW52YWxpZGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzE4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBWaXJ0dWFsaXplIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxh
eSBzbyB0aGF0IGRpcnR5IHJlY3RhbmdsZXMgY2FuCisgICAgICAgIGJlIGhhbmRsZWQgZGlyZWN0
bHkgYnkgdGhlIFRpbGVkTGF5ZXJDaHJvbWl1bSBjbGFzcy4gUmVwbGFjZQorICAgICAgICBMYXll
ckNocm9taXVtOjpkaXJ0eVJlY3QoKSB3aXRoIExheWVyQ2hyb21pdW06Om5lZWRzRGlzcGxheSgp
IGFuZAorICAgICAgICByZW1vdmUgdW5uZWNlc3NhcnkgdW5pb24gb2YgZGlydHkgcmVjdGFuZ2xl
cy4gQnkgaW52YWxpZGF0aW5nIGV4aXN0aW5nCisgICAgICAgIHRpbGVzIHVzaW5nIHRoZSBpbml0
aWFsIGRpcnR5IHJlY3RhbmdsZXMgaW5zdGVhZCBvZiB0aGVpciB1bmlvbiB3ZQorICAgICAgICBh
dm9pZCBhIGxhcmdlIGFtb3VudCBvZiB1bm5lY2Vzc2FyeSB0aWxlIHVwZGF0ZXMuCisKKyAgICAg
ICAgVXBkYXRlIExheWVyQ2hyb21pdW1UZXN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJ
ZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpzZXRD
b250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29u
dGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpuZWVkc0Rpc3BsYXkpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmludmFsaWRhdGVSZWN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJH
TExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVt
Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKwogMjAxMS0xMS0yOCAgU3RlcGhlbiBXaGl0
ZSAgPHNlbm9yYmxhbmNvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEZpeCBT
VkcgZmlsdGVycyB3aGVuIHJ1bm5pbmcgaW4gYWNjZWxlcmF0ZWQgZHJhd2luZyBtb2RlLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA2Nzc0NjBjY2YwOThiOWRiYWFiNGFlZTUwZjhmZTQx
ZmIyMDE0MmM1Li45ZjRlNDBkOWI1ZWI1NTllNjczMjYyZGQ4YmRlYWVlNDk0ZmRmMzFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTExLTI5ICBEYXZp
ZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBJ
bXByb3ZlIHRpbGUgaW52YWxpZGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzE4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW1vdmUgcHVibGljIEFQSSBmdW5jdGlvbiBXZWJDb250ZW50TGF5
ZXI6OmludmFsaWRSZWN0KCkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViQ29udGVudExheWVyLmg6
CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllci5jcHA6CisgICAgICAgICogdGVzdHMvTGF5
ZXJDaHJvbWl1bVRlc3QuY3BwOgorCiAyMDExLTExLTI5ICBSb2xhbmQgU3RlaW5lciAgPHJvbGFu
ZHN0ZWluZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIDxzdHlsZSBzY29wZWQ+OiBhZGQgRU5B
QkxFKFNUWUxFX1NDT1BFRCkgZmxhZyB0byBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
Q2hyb21pdW0uY3BwCmluZGV4IDQ0OTQ1ODZhNTdjYTE2YmM0YjRmMjMyNDEwZGI4ZjdmZDRjZDg4
YzEuLmIwYzRlMDczOTQ2YmE1ZTUxZTNkYzZhMjUzNzM2YTBlY2EzOGNhY2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcApAQCAtNjcsNyArNjcsNyBAQCBib29sIENhbnZh
czJETGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIAogdm9pZCBDYW52YXMyRExh
eWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0Qq
LCBDQ1RleHR1cmVVcGRhdGVyJikKIHsKLSAgICBpZiAobV9kaXJ0eVJlY3QuaXNFbXB0eSgpIHx8
ICFkcmF3c0NvbnRlbnQoKSkKKyAgICBpZiAoIW1fbmVlZHNEaXNwbGF5IHx8ICFkcmF3c0NvbnRl
bnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fY29udGV4dCkgewpAQCAtODIsNyAr
ODIsNyBAQCB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dAogICAgIH0KIAogICAgIG1fdXBkYXRlUmVj
dCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGJvdW5kcygpKTsKLSAgICByZXNldE5lZWRzRGlz
cGxheSgpOworICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CiAKIHZvaWQgQ2FudmFzMkRM
YXllckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggOWViMWQ3OTlmNmQ5MWVjZWM2Nzk4MTA2ZWM2MDI3YmI0MWU1MjUyMC4u
OGRmNjkzNDMyNTNiYmFkM2I1MTMzNzg2ZDY1OTM1ZWI5MGQ2M2VjNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTAzLDEyICsxMDMsOCBAQCB2b2lkIENvbnRlbnRM
YXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiAgICAgaWYgKGRyYXdzQ29udGVu
dCgpKQogICAgICAgICBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CiAKLSAgICBJbnRS
ZWN0IGRpcnR5ID0gZW5jbG9zaW5nSW50UmVjdChtX2RpcnR5UmVjdCk7Ci0gICAgZGlydHkuaW50
ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKSk7Ci0gICAgaW52YWxp
ZGF0ZVJlY3QoZGlydHkpOwotCiAgICAgcHJlcGFyZVRvVXBkYXRlKGxheWVyUmVjdCk7Ci0gICAg
cmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwogfQogCiBi
b29sIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggOWQzZTlmM2ExZTcwZGVlNWYxOWUzY2YwYjI0OGI5
NDNhZmExMDJjMC4uZjBkYzM1MjFmNTgwMTcxN2Q0MDg1MzdiZjViZmVlYWQwODZlNGIyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VM
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCkBAIC0xMzksMjAgKzEzOSwxOSBAQCB2b2lk
IEltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMoSW1hZ2UqIGNvbnRlbnRzKQogCiAgICAg
bV9jb250ZW50cyA9IGNvbnRlbnRzOwogICAgIG1faW1hZ2VGb3JDdXJyZW50RnJhbWUgPSBtX2Nv
bnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIG1fZGlydHlSZWN0ID0g
SW50UmVjdChJbnRQb2ludCgwLCAwKSwgYm91bmRzKCkpOwogICAgIHNldE5lZWRzRGlzcGxheSgp
OwogICAgIHNldE9wYXF1ZSghbV9jb250ZW50cy0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSk7CiB9
CiAKIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiB7Ci0g
ICAgaWYgKCFtX2RpcnR5UmVjdC5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9uZWVkc0Rpc3BsYXkp
IHsKICAgICAgICAgbV90ZXh0dXJlVXBkYXRlci0+dXBkYXRlRnJvbUltYWdlKG1fY29udGVudHMt
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpOwogICAgICAgICB1cGRhdGVUaWxlU2l6ZUFu
ZFRpbGluZ09wdGlvbigpOwogICAgICAgICBJbnRSZWN0IHBhaW50UmVjdChJbnRQb2ludCgpLCBj
b250ZW50Qm91bmRzKCkpOwotICAgICAgICBpZiAoIW1fZGlydHlSZWN0LmlzRW1wdHkoKSkgewor
ICAgICAgICBpZiAobV9uZWVkc0Rpc3BsYXkpIHsKICAgICAgICAgICAgIGludmFsaWRhdGVSZWN0
KHBhaW50UmVjdCk7Ci0gICAgICAgICAgICByZXNldE5lZWRzRGlzcGxheSgpOworICAgICAgICAg
ICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmNwcAppbmRleCA1NGE3Zjg4NTdkNjg5MDM4NmFlZmE4NTY2YThkMjdkNWQ1Y2U1MDI4
Li40N2IzMDgwYzgxZmNmODhjYzI5Y2Q4MmJlYzQyMjJmNjVhYTgzZDgxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmNwcApAQCAtNTYsNiArNTYsNyBAQCBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IExh
eWVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogCiBMYXllckNo
cm9taXVtOjpMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCiAgICAgOiBt
X2RlbGVnYXRlKGRlbGVnYXRlKQorICAgICwgbV9uZWVkc0Rpc3BsYXkoZmFsc2UpCiAgICAgLCBt
X2xheWVySWQoc19uZXh0TGF5ZXJJZCsrKQogICAgICwgbV9wYXJlbnQoMCkKICAgICAsIG1fc2Ny
b2xsYWJsZShmYWxzZSkKQEAgLTI2MywyMiArMjY0LDE4IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6
c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KQogICAgIC8vIFNpbXBs
eSBtYXJrIHRoZSBjb250ZW50cyBhcyBkaXJ0eS4gRm9yIG5vbi1yb290IGxheWVycywgdGhlIGNh
bGwgdG8KICAgICAvLyBzZXROZWVkc0NvbW1pdCB3aWxsIHNjaGVkdWxlIGEgZnJlc2ggY29tcG9z
aXRpbmcgcGFzcy4KICAgICAvLyBGb3IgdGhlIHJvb3QgbGF5ZXIsIHNldE5lZWRzQ29tbWl0IGhh
cyBubyBlZmZlY3QuCi0gICAgbV9kaXJ0eVJlY3QudW5pdGUoZGlydHlSZWN0KTsKKyAgICBpZiAo
IWRpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIG1fbmVlZHNEaXNwbGF5ID0gdHJ1ZTsKKwog
ICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNE
aXNwbGF5KCkKIHsKLSAgICBtX2RpcnR5UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOwot
ICAgIG1fZGlydHlSZWN0LnNldFNpemUoYm91bmRzKCkpOworICAgIG1fbmVlZHNEaXNwbGF5ID0g
dHJ1ZTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi12b2lkIExheWVyQ2hyb21pdW06OnJl
c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBtX2RpcnR5UmVjdCA9IEZsb2F0UmVjdCgpOwotfQot
CiB2b2lkIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVy
KQogewogICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChtX2FuY2hvclBvaW50KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaAppbmRleCA3MTNkZmIyNTIzMDEwODZmZmE3ZTU4MWMwNDIwNDc1ZThiZGZmYjdkLi5k
NTMyOTZmNWI5MGEzYTMwM2E3MWRhNzBmMTY5ZjQ5YjExNzQ4YjRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCkBAIC0xMDUsMTAgKzEwNSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1hc2tMYXllcihM
YXllckNocm9taXVtKiBtYXNrTGF5ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNrTGF5ZXI7IHNldE5l
ZWRzQ29tbWl0KCk7IH0KICAgICBMYXllckNocm9taXVtKiBtYXNrTGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX21hc2tMYXllci5nZXQoKTsgfQogCi0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29u
c3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0g
ICAgY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2RpcnR5UmVj
dDsgfQotICAgIHZvaWQgcmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgdmlydHVhbCBib29sIG5lZWRzRGlzcGxheSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmVlZHNEaXNwbGF5OyB9CiAKICAgICB2b2lkIHNldE9wYWNpdHkoZmxv
YXQgb3BhY2l0eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyBzZXROZWVkc0NvbW1pdCgpOyB9CiAg
ICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQpAQCAtMjE4LDgg
KzIxNyw4IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgc2V0TmVlZHNDb21taXQoKTsKIAotICAg
IC8vIFRoZSBkaXJ0eSByZWN0IGlzIHRoZSB1bmlvbiBvZiBkYW1hZ2VkIHJlZ2lvbnMgdGhhdCBu
ZWVkIHJlcGFpbnRpbmcvdXBkYXRpbmcuCi0gICAgRmxvYXRSZWN0IG1fZGlydHlSZWN0OworICAg
IC8vIFRoaXMgZmxhZyBpcyBzZXQgd2hlbiBsYXllciBuZWVkIHJlcGFpbnRpbmcvdXBkYXRpbmcu
CisgICAgYm9vbCBtX25lZWRzRGlzcGxheTsKIAogICAgIC8vIFRoZSB1cGRhdGUgcmVjdCBpcyB0
aGUgcmVnaW9uIG9mIHRoZSBjb21wb3NpdG9yIHJlc291cmNlIHRoYXQgd2FzIGFjdHVhbGx5IHVw
ZGF0ZWQgYnkgdGhlIGNvbXBvc2l0b3IuCiAgICAgLy8gRm9yIGxheWVycyB0aGF0IG1heSBkbyB1
cGRhdGluZyBvdXRzaWRlIHRoZSBjb21wb3NpdG9yJ3MgY29udHJvbCAoaS5lLiBwbHVnaW4gbGF5
ZXJzKSwgdGhpcyBpbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggZmZhZDJmNWIxNzVjOTY2NWQ2NjU3NWJhZmNjMzliZmNlZTBlMWU2YS4uZGQ1NjgzOTU1ZmRh
ODM4ZDJkMDZjZDQxNjAxZDljMTZhMDQ1MzRiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwCkBAIC0yODUsMTMgKzI4NSwyNSBAQCBVcGRhdGFibGVUaWxlKiBUaWxlZExheWVyQ2hy
b21pdW06OmNyZWF0ZVRpbGUoaW50IGksIGludCBqKQogICAgIHJldHVybiB0aWxlLmdldCgpOwog
fQogCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0
UmVjdCYgZGlydHlSZWN0KQoreworICAgIEludFJlY3QgZGlydHkgPSBlbmNsb3NpbmdJbnRSZWN0
KGRpcnR5UmVjdCk7CisgICAgaW52YWxpZGF0ZVJlY3QoZGlydHkpOworICAgIExheWVyQ2hyb21p
dW06OnNldE5lZWRzRGlzcGxheShkaXJ0eVJlY3QpOworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBJbnRSZWN0IGRpcnR5KEludFBvaW50KCks
IGJvdW5kcygpKTsKKyAgICBpbnZhbGlkYXRlUmVjdChkaXJ0eSk7CisgICAgTGF5ZXJDaHJvbWl1
bTo6c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjppbnZh
bGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKIHsKICAgICBpZiAoIW1fdGls
ZXIgfHwgY29udGVudFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNEcmF3KQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJlY3QpOwotCiAg
ICAgLy8gRGlydHkgcmVjdHMgYXJlIGFsd2F5cyBpbiBsYXllciBzcGFjZSwgYXMgdGhlIGxheWVy
IGNvdWxkIGJlIHJlcG9zaXRpb25lZAogICAgIC8vIGFmdGVyIGludmFsaWRhdGlvbi4KICAgICBj
b25zdCBJbnRSZWN0IGxheWVyUmVjdCA9IG1fdGlsZXItPmNvbnRlbnRSZWN0VG9MYXllclJlY3Qo
Y29udGVudFJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAppbmRleCAzNjNkYTYxODU4
MDJlZWRjNzRmNTE1MmFlNDlmMzg3YzkyZGMwZjhlLi5iYmZmMmNhZTdlNmRkM2U3MGMyZDRiYmI3
ZjI3OTZlMTRlNWNjMDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaApAQCAtNTMsNiAr
NTMsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEludFNpemUgY29udGVudEJvdW5kcygpIGNv
bnN0OwogCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CisKICAgICAvLyBSZXNlcnZl
cyBhbGwgZXhpc3RpbmcgYW5kIHZhbGlkIHRpbGUgdGV4dHVyZXMgdG8gcHJvdGVjdCB0aGVtIGZy
b20gYmVpbmcKICAgICAvLyByZWN5Y2xlZCBieSB0aGUgdGV4dHVyZSBtYW5hZ2VyLgogICAgIHZv
aWQgcHJvdGVjdFRpbGVUZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xh
eWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVmlkZW9MYXllckNocm9taXVtLmNwcAppbmRleCAxOWE5OTNiZGI5ZWQ5NzAyZDVkNGQ0Mjkw
ZTY4MTQxMmIxNTMyY2IwLi5lYzkzZjE2OGRhMTRlYTQxZTNjMTZkZjZkN2M0OWJlZTQ1MTNlYWNl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9W
aWRlb0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgdm9p
ZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIEMKICAgICBpZiAoIW1fZGVsZWdhdGUgfHwgIW1fcHJvdmlkZXIg
fHwgIWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9kaXJ0eVJl
Y3QuaXNFbXB0eSgpICYmIHRleHR1cmVzVmFsaWQoKSkgeworICAgIGlmICghbV9uZWVkc0Rpc3Bs
YXkgJiYgdGV4dHVyZXNWYWxpZCgpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAw
OyBwbGFuZSA8IG1fcGxhbmVzOyBwbGFuZSsrKSB7CiAgICAgICAgICAgICBNYW5hZ2VkVGV4dHVy
ZSogdGV4ID0gbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLmdldCgpOwogICAgICAgICAgICAg
aWYgKCF0ZXgtPnJlc2VydmUodGV4LT5zaXplKCksIHRleC0+Zm9ybWF0KCkpKSB7CkBAIC0xMTgs
NyArMTE4LDcgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEMKICAgICAgICAgbV9uYXRpdmVUZXh0
dXJlSWQgPSBmcmFtZS0+dGV4dHVyZUlkKCk7CiAgICAgICAgIG1fbmF0aXZlVGV4dHVyZVNpemUg
PSBJbnRTaXplKGZyYW1lLT53aWR0aCgpLCBmcmFtZS0+aGVpZ2h0KCkpOwogICAgICAgICBtX25h
dGl2ZVRleHR1cmVWaXNpYmxlU2l6ZSA9IEludFNpemUoZnJhbWUtPndpZHRoKCksIGZyYW1lLT5o
ZWlnaHQoKSk7Ci0gICAgICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgICAgIG1fbmVlZHNE
aXNwbGF5ID0gZmFsc2U7CiAgICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFt
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBWaWRl
b0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIEMKICAgICBBU1NFUlQobV9wbGFuZXMgPD0gTWF4UGxhbmVzKTsKIAogICAg
IG1fdXBkYXRlUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGJvdW5kcygpKTsKLSAgICBy
ZXNldE5lZWRzRGlzcGxheSgpOworICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiAKICAgICBt
X3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJD
aHJvbWl1bS5jcHAKaW5kZXggMjc2ZjNjOWZjMmZlMTA3ZjE2M2IyYWJhMDk4YzAzZmJiMzM0NGNi
Ni4uN2FhOTg2ZWNmNzEyMTZjZTE4MzcwNTVlMDEwMTM0ZDk1NDg5OTIwNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uY3BwCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgV2ViR0xMYXllckNo
cm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiByZW5k
ZXJlckNvCiAgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKG1fZGlydHlSZWN0LmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fbmVlZHNEaXNwbGF5KQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAobV90ZXh0dXJlQ2hhbmdlZCkgewpAQCAtODUsMTIgKzg1
LDEyIEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2Vz
KEdyYXBoaWNzQ29udGV4dDNEKiByZW5kZXJlckNvCiAgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQg
PSBmYWxzZTsKICAgICB9CiAgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dHVy
ZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgotICAgIGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgp
ICYmIG1fdGV4dHVyZVVwZGF0ZWQpIHsKKyAgICBpZiAobV9uZWVkc0Rpc3BsYXkgJiYgbV90ZXh0
dXJlVXBkYXRlZCkgewogICAgICAgICAvLyBwdWJsaXNoVG9QbGF0Zm9ybUxheWVyIHByZXBhcmVz
IHRoZSBjb250ZW50cyBvZiB0aGUgb2ZmLXNjcmVlbiByZW5kZXIgdGFyZ2V0IGZvciB1c2UgYnkg
dGhlIGNvbXBvc2l0b3IuCiAgICAgICAgIGRyYXdpbmdCdWZmZXIoKS0+cHVibGlzaFRvUGxhdGZv
cm1MYXllcigpOwogICAgICAgICBjb250ZXh0KCktPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKICAg
ICAgICAgbV91cGRhdGVSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYm91bmRzKCkpOwot
ICAgICAgICByZXNldE5lZWRzRGlzcGxheSgpOworICAgICAgICBtX25lZWRzRGlzcGxheSA9IGZh
bHNlOwogICAgICAgICBtX3RleHR1cmVVcGRhdGVkID0gZmFsc2U7CiAgICAgfQogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaAppbmRleCBlM2Mx
OTdhMzNhODkyNDcwYzc5YzAxNzA0YTg1ZTFlMGZjYzRmZGNkLi5mN2E5OGMxM2JlZTA5NGZjNmZm
NWRhOWZlODFlNTg4ZWFlZjk2YTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJDb250ZW50TGF5ZXIuaApAQCAtNjAsOSArNjAsNiBAQCBwdWJsaWM6CiAgICAgLy8g
U2V0cyB0aGUgZW50aXJlIGxheWVyIGFzIGludmFsaWQsIGkuZS4gbmVlZHMgdG8gdXBkYXRlIGl0
cyBjb250ZW50LgogICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7CiAKLSAgICAv
LyBSZXR1cm5zIHRoZSByZWdpb24gb2YgdGhlIGxheWVyIHRoYXQgaXMgY3VycmVudGx5IGludmFs
aWQuCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJGbG9hdFJlY3QgaW52YWxpZFJlY3QoKSBjb25zdDsK
LQogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgogICAgIFdlYkNvbnRlbnRMYXllcihjb25zdCBX
VEY6OlBhc3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4mKTsKICAgICBXZWJDb250ZW50TGF5
ZXImIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4m
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwCmlu
ZGV4IGRlOGQ5OThhZTk4YzRjMWNkZWQ1NmI3YTQ4NzhjOGYzNDRlMjhhZDguLjczZGJiNTRlMTcx
NDQ2NDhhNWVlNWFhZmNiMzA3M2RjZTYyMGFmMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcApAQCAtNTYsMTEgKzU2LDYgQEAgdm9pZCBXZWJD
b250ZW50TGF5ZXI6OmludmFsaWRhdGUoKQogICAgIHVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBs
PigpLT5zZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAotV2ViRmxvYXRSZWN0IFdlYkNvbnRlbnRMYXll
cjo6aW52YWxpZFJlY3QoKSBjb25zdAotewotICAgIHJldHVybiBXZWJGbG9hdFJlY3QoY29uc3RV
bndyYXA8V2ViQ29udGVudExheWVySW1wbD4oKS0+ZGlydHlSZWN0KCkpOwotfQotCiBXZWJDb250
ZW50TGF5ZXI6OldlYkNvbnRlbnRMYXllcihjb25zdCBQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXll
ckltcGw+JiBub2RlKQogICAgIDogV2ViTGF5ZXIobm9kZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggNzgwOWQxOGE0
MzY3MGQ0OGFhNzg2MWZiODcwNDY1NjI4NTkzZmEyNy4uNmQ5ZGFmM2U4NDRkZjk4ZGI1ZjEwNDU3
NjE0NGY2YzJhYTFiOTBjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9MYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9MYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTUzMiw3ICs1MzIsNyBAQCBURVNUX0YoTGF5ZXJD
aHJvbWl1bVRlc3QsIGdldFJvb3RMYXllckFmdGVyVHJlZU1hbmlwdWxhdGlvbnMpCiBURVNUX0Yo
TGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5Q2F1c2VzQ29ycmVjdEJlaGF2
aW9yKQogewogICAgIC8vIFRoZSBzZW1hbnRpY3MgZm9yIHNldE5lZWRzRGlzcGxheSB3aGljaCBh
cmUgdGVzdGVkIGhlcmU6Ci0gICAgLy8gICAxLiBjcmVhdGVzIGEgdW5pb25lZCBkaXJ0eVJlY3Qg
YXBwcm9wcmlhdGVseS4KKyAgICAvLyAgIDEuIHNldHMgbmVlZHNEaXNwbGF5IGZsYWcgYXBwcm9w
cmlhdGVseS4KICAgICAvLyAgIDIuIGluZGlyZWN0bHkgY2FsbHMgbm90aWZ5U3luY1JlcXVpcmVk
LCBleGFjdGx5IG9uY2UgZm9yIGVhY2ggY2FsbCB0byBzZXROZWVkc0Rpc3BsYXkuCiAKICAgICBN
b2NrTGF5ZXJEZWxlZ2F0ZSBtb2NrRGVsZWdhdGU7CkBAIC01NDQsNDAgKzU0NCwzNyBAQCBURVNU
X0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5Q2F1c2VzQ29ycmVjdEJl
aGF2aW9yKQogICAgIEZsb2F0UmVjdCBlbXB0eURpcnR5UmVjdCA9IEZsb2F0UmVjdCg0MC4wZiwg
NDUuMGYsIDAsIDApOwogICAgIEZsb2F0UmVjdCBvdXRPZkJvdW5kc0RpcnR5UmVjdCA9IEZsb2F0
UmVjdCg0MDAuMGYsIDQwNS4wZiwgNTAwLjBmLCA1MDIuMGYpOwogCi0gICAgLy8gQmVmb3JlIGFu
eXRoaW5nLCB0ZXN0TGF5ZXIgc2hvdWxkIGhhdmUgYW4gZW1wdHkgZGlydHkgcmVjdC4KLSAgICBF
WFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAgLy8gQmVm
b3JlIGFueXRoaW5nLCB0ZXN0TGF5ZXIgc2hvdWxkIG5vdCBiZSBkaXJ0eS4KKyAgICBFWFBFQ1Rf
RkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBUaGlzIGlzIGp1c3Qg
aW5pdGlhbGl6YXRpb24sIGJ1dCBub3RpZnlTeW5jUmVxdWlyZWQgYmVoYXZpb3IgaXMgdmVyaWZp
ZWQgYW55d2F5IHRvIGF2b2lkIHdhcm5pbmdzLgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJ
RllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0Qm91bmRzKHRl
c3RCb3VuZHMpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1Io
bW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCkpOwotICAgIEVY
UEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICB0ZXN0TGF5
ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1vY2tEZWxlZ2F0ZSk7CisgICAgRVhQRUNUX0ZB
TFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gVGhlIHJlYWwgdGVzdCBi
ZWdpbnMgaGVyZS4KIAotICAgIC8vIENhc2UgMTogYmFzaWMKKyAgICAvLyBDYXNlIDE6IG5lZWRz
RGlzcGxheSBmbGFnIHNob3VsZCBub3QgY2hhbmdlIGJlY2F1c2Ugb2YgYW4gZW1wdHkgZGlydHkg
cmVjdC4KKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0Rl
bGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShlbXB0eURpcnR5UmVjdCkpOwor
ICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKKworICAgIC8vIENh
c2UgMjogYmFzaWMuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9S
KG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHkxKSk7Ci0g
ICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoZGlydHkxLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsK
KyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAotICAgIC8vIENh
c2UgMjogYSBzZWNvbmQgZGlydHkgcmVjdCBzaG91bGQgYmUgdW5pb25lZCBvZiBkaXJ0eTEgYW5k
IGRpcnR5Mi4KKyAgICAvLyBDYXNlIDM6IGEgc2Vjb25kIGRpcnR5IHJlY3QuCiAgICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExh
eWVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHkyKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEo
RmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYsIDE0LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJl
Y3QoKSk7CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKLSAg
ICAvLyBDYXNlIDM6IGRpcnR5IHJlY3Qgc2hvdWxkIG5vdCBjaGFuZ2UgYmVjYXVzZSBvZiBhbiBl
bXB0eSBkaXJ0eSByZWN0LgotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhB
VklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGVtcHR5RGly
dHlSZWN0KSk7Ci0gICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDEwLjBmLCAxNS4w
ZiwgMTMuMGYsIDE0LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7Ci0KLSAgICAvLyBDYXNl
IDQ6IExheWVyQ2hyb21pdW0gc2hvdWxkIGFjY2VwdCBkaXJ0eSByZWN0cyB0aGF0IGdvIGJleW9u
ZCBpdHMgYm91bmRzCisgICAgLy8gQ2FzZSA0OiBMYXllckNocm9taXVtIHNob3VsZCBhY2NlcHQg
ZGlydHkgcmVjdHMgdGhhdCBnbyBiZXlvbmQgaXRzIGJvdW5kcy4KKyAgICB0ZXN0TGF5ZXIgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoJm1vY2tEZWxlZ2F0ZSk7CiAgICAgRVhFQ1VURV9BTkRfVkVS
SUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRO
ZWVkc0Rpc3BsYXkob3V0T2ZCb3VuZHNEaXJ0eVJlY3QpKTsKLSAgICBFWFBFQ1RfRkxPQVRfUkVD
VF9FUShGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCA4OTAuMGYsIDg5Mi4wZiksIHRlc3RMYXllci0+
ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkp
OwogCi0gICAgLy8gQ2FzZSA1OiBzZXROZWVkc0Rpc3BsYXkoKSB3aXRob3V0IHRoZSBkaXJ0eSBy
ZWN0IGFyZyBzaG91bGQgY2F1c2UgdGhlIGVudGlyZSBib3VuZHMgdG8gYmUgZGlydHksCi0gICAg
Ly8gICAgICAgICBvdmVycmlkaW5nIGFueSBleGlzdGluZyBkaXJ0eSByZWN0LgorICAgIC8vIENh
c2UgNTogc2V0TmVlZHNEaXNwbGF5KCkgd2l0aG91dCB0aGUgZGlydHkgcmVjdCBhcmcuCisgICAg
dGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtb2NrRGVsZWdhdGUpOwogICAgIEVY
RUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRl
c3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCkpOwotICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZs
b2F0UmVjdCgwLCAwLCB0ZXN0Qm91bmRzLndpZHRoKCksIHRlc3RCb3VuZHMuaGVpZ2h0KCkpLCB0
ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKLQotICAgIC8vIHJlc2V0TmVlZHNEaXNwbGF5IHNob3Vs
ZCBlbXB0eSB0aGUgZGlydHkgcmVjdCwgYW5kIE5PVCBjYWxsIG5vdGlmeVN5bmNSZXF1aXJlZC4K
LSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRl
LCAwLCB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCkpOwotICAgIEVYUEVDVF9UUlVFKHRl
c3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5
ZXItPm5lZWRzRGlzcGxheSgpKTsKIH0KIAogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVj
a1NldE5lZWRzRGlzcGxheVdpdGhOdWxsRGVsZWdhdGUpCkBAIC01OTAsMTMgKzU4NywxMyBAQCBU
RVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5V2l0aE51bGxEZWxl
Z2F0ZSkKICAgICBGbG9hdFJlY3QgZGlydHkgPSBGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxLjBm
LCAyLjBmKTsKIAogICAgIHRlc3RMYXllci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpOwotICAgIEVY
UEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLjBmLCAwLjBmLCA1MDEuMGYsIDUwOC4wZiks
IHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVl
ZHNEaXNwbGF5KCkpOwogCi0gICAgdGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgpOwotICAg
IEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICB0ZXN0
TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RM
YXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXko
ZGlydHkpOwotICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKGRpcnR5LCB0ZXN0TGF5ZXItPmRpcnR5
UmVjdCgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIH0K
IAogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1Byb3BlcnR5Q2hhbmdlQ2F1c2VzQ29y
cmVjdEJlaGF2aW9yKQpAQCAtNjA3LDEwICs2MDQsMTAgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1U
ZXN0LCBjaGVja1Byb3BlcnR5Q2hhbmdlQ2F1c2VzQ29ycmVjdEJlaGF2aW9yKQogICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBkdW1teUxheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3Np
bGVudERlbGVnYXRlKTsgLy8ganVzdCBhIGR1bW15IGxheWVyIGZvciB0aGlzIHRlc3QgY2FzZS4K
IAogICAgIC8vIHNhbml0eSBjaGVjayBvZiBpbml0aWFsIHRlc3QgY29uZGl0aW9uCi0gICAgRVhQ
RUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9G
QUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIFRlc3QgcHJvcGVydGll
cyB0aGF0IHNob3VsZCBub3QgY2FsbCBuZWVkc0Rpc3BsYXkgYW5kIG5lZWRzQ29tbWl0IHdoZW4g
Y2hhbmdlZC4KLSAgICAvLyBub3RpZnlTeW5jUmVxdWlyZWQgc2hvdWxkIG5vdCBiZSBjYWxsZWQs
IGFuZCB0aGUgZGlydHlSZWN0IHNob3VsZCByZW1haW4gc3RpbGwgZW1wdHkuCisgICAgLy8gbm90
aWZ5U3luY1JlcXVpcmVkIHNob3VsZCBub3QgYmUgY2FsbGVkLCBhbmQgdGhlIG5lZWRzRGlzcGxh
eSBmbGFnIHNob3VsZCByZW1haW4gZmFsc2UuCiAgICAgRVhQRUNUX0NBTEwoaW5pdGlhbERlbGVn
YXRlLCBub3RpZnlTeW5jUmVxdWlyZWQoKSkuVGltZXMoMCk7IC8vIG9sZCBkZWxlZ2F0ZSBzaG91
bGQgbm90IGJlIHVzZWQgd2hlbiBzZXREZWxlZ2F0ZSBnaXZlcyBhIG5ldyBkZWxlZ2F0ZS4KICAg
ICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAw
LCB0ZXN0TGF5ZXItPnNldERlbGVnYXRlKCZtb2NrRGVsZWdhdGUpKTsKICAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXIt
PnNldE5hbWUoIlRlc3QgTGF5ZXIiKSk7CkBAIC02MjUsMTAgKzYyMiwxMCBAQCBURVNUX0YoTGF5
ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVydHlDaGFuZ2VDYXVzZXNDb3JyZWN0QmVoYXZpb3Ip
CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0
ZSwgMCwgdGVzdExheWVyLT5zZXREcmF3VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkp
KTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVn
YXRlLCAwLCB0ZXN0TGF5ZXItPnNldFNjcmVlblNwYWNlVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9u
TWF0cml4KCkpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1Io
bW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVj
dCg0LCA1LCA2LCA3KSkpOwotICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCku
aXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7
CiAKICAgICAvLyBOZXh0LCB0ZXN0IHByb3BlcnRpZXMgdGhhdCBzaG91bGQgY2FsbCBzZXROZWVk
c0NvbW1pdCAoYnV0IG5vdCBzZXROZWVkc0Rpc3BsYXkpCi0gICAgLy8gVGhlc2UgcHJvcGVydGll
cyBzaG91bGQgaW5kaXJlY3RseSBjYWxsIG5vdGlmeVN5bmNSZXF1aXJlZCwgYnV0IHRoZSBkaXJ0
eSByZWN0IHNob3VsZCBub3QgY2hhbmdlLgorICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgc2hvdWxk
IGluZGlyZWN0bHkgY2FsbCBub3RpZnlTeW5jUmVxdWlyZWQsIGJ1dCB0aGUgbmVlZHNEaXNwbGF5
IGZsYWcgc2hvdWxkIG5vdCBjaGFuZ2UuCiAgICAgLy8gTm90ZSB0aGF0IGZvciBtYW55IG9mIHRo
ZXNlIHByb3BlcnRpZXMgaXQgaXMgaW1wb3J0YW50IHRvIHRlc3Qgc2V0dGluZyB0aGUgcHJvcGVy
dHkgdG8gYSB2YWx1ZSB0aGF0CiAgICAgLy8gaXMgZGlmZmVyZW50IHRoYW4gd2hhdCB0aGUgY29u
c3RydWN0b3IgaW5pdGlhbGl6ZXMgaXQgdG8uCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElG
WV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRBbmNob3JQb2lu
dChGbG9hdFBvaW50KDEuMjNmLCA0LjU2ZikpKTsKQEAgLTY0NCwxNSArNjQxLDEzIEBAIFRFU1Rf
RihMYXllckNocm9taXVtVGVzdCwgY2hlY2tQcm9wZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhh
dmlvcikKICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0Rl
bGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldFRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
KSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxl
Z2F0ZSwgMSwgdGVzdExheWVyLT5zZXREb3VibGVTaWRlZChmYWxzZSkpOwogCi0gICAgLy8gVGhl
IGFib3ZlIHRlc3RzIHNob3VsZCBub3QgaGF2ZSBjYXVzZWQgYSBub24tZW1wdHkgZGlydHkgcmVj
dC4KLSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7Cisg
ICAgLy8gVGhlIGFib3ZlIHRlc3RzIHNob3VsZCBub3QgaGF2ZSBjYXVzZWQgYSBjaGFuZ2UgdG8g
dGhlIG5lZWRzRGlzcGxheSBmbGFnLgorICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRz
RGlzcGxheSgpKTsKIAogICAgIC8vIFRlc3QgcHJvcGVydGllcyB0aGF0IHNob3VsZCBjYWxsIHNl
dE5lZWRzRGlzcGxheQotICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgd2lsbCBjYWxsIG5vdGlmeVN5
bmNSZXF1aXJlZCBhbmQgY2hhbmdlIHRoZSBkaXJ0eSByZWN0LgorICAgIC8vIFRoZXNlIHByb3Bl
cnRpZXMgd2lsbCBjYWxsIG5vdGlmeVN5bmNSZXF1aXJlZCBhbmQgY2hhbmdlIHRoZSBuZWVkc0Rp
c3BsYXkgZmxhZy4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1Io
bW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDUsIDEwKSkpOwot
ICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLjBmLCAwLjBmLCA1LjBmLCAxMC4w
ZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwotICAgIHRlc3RMYXllci0+cmVzZXROZWVkc0Rp
c3BsYXkoKTsKLSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHko
KSk7CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAv
LyBGSVhNRTogbmVlZCB0byBhZGQgYSB0ZXN0IGZvciBzZXRMYXllclRyZWVIb3N0IHdpdGggYSBu
b24tbnVsbCBzdHViYmVkIENDTGF5ZXJUcmVlSG9zdC4KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117008</attachid>
            <date>2011-11-29 11:32:13 -0800</date>
            <delta_ts>2011-11-29 15:13:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71872-20111129143212.patch</filename>
            <type>text/plain</type>
            <size>23470</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMzI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMxMmE2ZGM2OWNhZmM0
YTUwYjkxYzIzNzAxNjFkZTM3ODc4ZDllOC4uZWNlOWE3YTExMzg4OTg4MjhiMDM5ODBjZmUwOTkx
MDgwOTliNGE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDExLTExLTI5ICBEYXZp
ZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBJ
bXByb3ZlIHRpbGUgaW52YWxpZGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzE4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBWaXJ0dWFsaXplIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxh
eSBzbyB0aGF0IGRpcnR5IHJlY3RhbmdsZXMgY2FuCisgICAgICAgIGJlIGhhbmRsZWQgZGlyZWN0
bHkgYnkgdGhlIFRpbGVkTGF5ZXJDaHJvbWl1bSBjbGFzcy4gUmVwbGFjZQorICAgICAgICBMYXll
ckNocm9taXVtOjpkaXJ0eVJlY3QoKSB3aXRoIExheWVyQ2hyb21pdW06Om5lZWRzRGlzcGxheSgp
IGFuZAorICAgICAgICByZW1vdmUgdW5uZWNlc3NhcnkgdW5pb24gb2YgZGlydHkgcmVjdGFuZ2xl
cy4gQnkgaW52YWxpZGF0aW5nIGV4aXN0aW5nCisgICAgICAgIHRpbGVzIHVzaW5nIHRoZSBpbml0
aWFsIGRpcnR5IHJlY3RhbmdsZXMgaW5zdGVhZCBvZiB0aGVpciB1bmlvbiB3ZQorICAgICAgICBh
dm9pZCBhIGxhcmdlIGFtb3VudCBvZiB1bm5lY2Vzc2FyeSB0aWxlIHVwZGF0ZXMuCisKKyAgICAg
ICAgVXBkYXRlIExheWVyQ2hyb21pdW1UZXN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJ
ZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpzZXRD
b250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29u
dGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpuZWVkc0Rpc3BsYXkpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmludmFsaWRhdGVSZWN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJH
TExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVt
Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKwogMjAxMS0xMS0yOCAgU3RlcGhlbiBXaGl0
ZSAgPHNlbm9yYmxhbmNvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEZpeCBT
VkcgZmlsdGVycyB3aGVuIHJ1bm5pbmcgaW4gYWNjZWxlcmF0ZWQgZHJhd2luZyBtb2RlLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA2Nzc0NjBjY2YwOThiOWRiYWFiNGFlZTUwZjhmZTQx
ZmIyMDE0MmM1Li45ZjRlNDBkOWI1ZWI1NTllNjczMjYyZGQ4YmRlYWVlNDk0ZmRmMzFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTExLTI5ICBEYXZp
ZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBJ
bXByb3ZlIHRpbGUgaW52YWxpZGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzE4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW1vdmUgcHVibGljIEFQSSBmdW5jdGlvbiBXZWJDb250ZW50TGF5
ZXI6OmludmFsaWRSZWN0KCkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViQ29udGVudExheWVyLmg6
CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllci5jcHA6CisgICAgICAgICogdGVzdHMvTGF5
ZXJDaHJvbWl1bVRlc3QuY3BwOgorCiAyMDExLTExLTI5ICBSb2xhbmQgU3RlaW5lciAgPHJvbGFu
ZHN0ZWluZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIDxzdHlsZSBzY29wZWQ+OiBhZGQgRU5B
QkxFKFNUWUxFX1NDT1BFRCkgZmxhZyB0byBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
Q2hyb21pdW0uY3BwCmluZGV4IDQ0OTQ1ODZhNTdjYTE2YmM0YjRmMjMyNDEwZGI4ZjdmZDRjZDg4
YzEuLmIwYzRlMDczOTQ2YmE1ZTUxZTNkYzZhMjUzNzM2YTBlY2EzOGNhY2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcApAQCAtNjcsNyArNjcsNyBAQCBib29sIENhbnZh
czJETGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIAogdm9pZCBDYW52YXMyRExh
eWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0Qq
LCBDQ1RleHR1cmVVcGRhdGVyJikKIHsKLSAgICBpZiAobV9kaXJ0eVJlY3QuaXNFbXB0eSgpIHx8
ICFkcmF3c0NvbnRlbnQoKSkKKyAgICBpZiAoIW1fbmVlZHNEaXNwbGF5IHx8ICFkcmF3c0NvbnRl
bnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fY29udGV4dCkgewpAQCAtODIsNyAr
ODIsNyBAQCB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dAogICAgIH0KIAogICAgIG1fdXBkYXRlUmVj
dCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGJvdW5kcygpKTsKLSAgICByZXNldE5lZWRzRGlz
cGxheSgpOworICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CiAKIHZvaWQgQ2FudmFzMkRM
YXllckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggOWViMWQ3OTlmNmQ5MWVjZWM2Nzk4MTA2ZWM2MDI3YmI0MWU1MjUyMC4u
OGRmNjkzNDMyNTNiYmFkM2I1MTMzNzg2ZDY1OTM1ZWI5MGQ2M2VjNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTAzLDEyICsxMDMsOCBAQCB2b2lkIENvbnRlbnRM
YXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiAgICAgaWYgKGRyYXdzQ29udGVu
dCgpKQogICAgICAgICBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CiAKLSAgICBJbnRS
ZWN0IGRpcnR5ID0gZW5jbG9zaW5nSW50UmVjdChtX2RpcnR5UmVjdCk7Ci0gICAgZGlydHkuaW50
ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKSk7Ci0gICAgaW52YWxp
ZGF0ZVJlY3QoZGlydHkpOwotCiAgICAgcHJlcGFyZVRvVXBkYXRlKGxheWVyUmVjdCk7Ci0gICAg
cmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwogfQogCiBi
b29sIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggOWQzZTlmM2ExZTcwZGVlNWYxOWUzY2YwYjI0OGI5
NDNhZmExMDJjMC4uZjBkYzM1MjFmNTgwMTcxN2Q0MDg1MzdiZjViZmVlYWQwODZlNGIyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VM
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCkBAIC0xMzksMjAgKzEzOSwxOSBAQCB2b2lk
IEltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMoSW1hZ2UqIGNvbnRlbnRzKQogCiAgICAg
bV9jb250ZW50cyA9IGNvbnRlbnRzOwogICAgIG1faW1hZ2VGb3JDdXJyZW50RnJhbWUgPSBtX2Nv
bnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIG1fZGlydHlSZWN0ID0g
SW50UmVjdChJbnRQb2ludCgwLCAwKSwgYm91bmRzKCkpOwogICAgIHNldE5lZWRzRGlzcGxheSgp
OwogICAgIHNldE9wYXF1ZSghbV9jb250ZW50cy0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSk7CiB9
CiAKIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiB7Ci0g
ICAgaWYgKCFtX2RpcnR5UmVjdC5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9uZWVkc0Rpc3BsYXkp
IHsKICAgICAgICAgbV90ZXh0dXJlVXBkYXRlci0+dXBkYXRlRnJvbUltYWdlKG1fY29udGVudHMt
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpOwogICAgICAgICB1cGRhdGVUaWxlU2l6ZUFu
ZFRpbGluZ09wdGlvbigpOwogICAgICAgICBJbnRSZWN0IHBhaW50UmVjdChJbnRQb2ludCgpLCBj
b250ZW50Qm91bmRzKCkpOwotICAgICAgICBpZiAoIW1fZGlydHlSZWN0LmlzRW1wdHkoKSkgewor
ICAgICAgICBpZiAobV9uZWVkc0Rpc3BsYXkpIHsKICAgICAgICAgICAgIGludmFsaWRhdGVSZWN0
KHBhaW50UmVjdCk7Ci0gICAgICAgICAgICByZXNldE5lZWRzRGlzcGxheSgpOworICAgICAgICAg
ICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmNwcAppbmRleCA1NGE3Zjg4NTdkNjg5MDM4NmFlZmE4NTY2YThkMjdkNWQ1Y2U1MDI4
Li40N2IzMDgwYzgxZmNmODhjYzI5Y2Q4MmJlYzQyMjJmNjVhYTgzZDgxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmNwcApAQCAtNTYsNiArNTYsNyBAQCBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IExh
eWVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogCiBMYXllckNo
cm9taXVtOjpMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCiAgICAgOiBt
X2RlbGVnYXRlKGRlbGVnYXRlKQorICAgICwgbV9uZWVkc0Rpc3BsYXkoZmFsc2UpCiAgICAgLCBt
X2xheWVySWQoc19uZXh0TGF5ZXJJZCsrKQogICAgICwgbV9wYXJlbnQoMCkKICAgICAsIG1fc2Ny
b2xsYWJsZShmYWxzZSkKQEAgLTI2MywyMiArMjY0LDE4IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6
c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KQogICAgIC8vIFNpbXBs
eSBtYXJrIHRoZSBjb250ZW50cyBhcyBkaXJ0eS4gRm9yIG5vbi1yb290IGxheWVycywgdGhlIGNh
bGwgdG8KICAgICAvLyBzZXROZWVkc0NvbW1pdCB3aWxsIHNjaGVkdWxlIGEgZnJlc2ggY29tcG9z
aXRpbmcgcGFzcy4KICAgICAvLyBGb3IgdGhlIHJvb3QgbGF5ZXIsIHNldE5lZWRzQ29tbWl0IGhh
cyBubyBlZmZlY3QuCi0gICAgbV9kaXJ0eVJlY3QudW5pdGUoZGlydHlSZWN0KTsKKyAgICBpZiAo
IWRpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIG1fbmVlZHNEaXNwbGF5ID0gdHJ1ZTsKKwog
ICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNE
aXNwbGF5KCkKIHsKLSAgICBtX2RpcnR5UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOwot
ICAgIG1fZGlydHlSZWN0LnNldFNpemUoYm91bmRzKCkpOworICAgIG1fbmVlZHNEaXNwbGF5ID0g
dHJ1ZTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi12b2lkIExheWVyQ2hyb21pdW06OnJl
c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBtX2RpcnR5UmVjdCA9IEZsb2F0UmVjdCgpOwotfQot
CiB2b2lkIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVy
KQogewogICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChtX2FuY2hvclBvaW50KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaAppbmRleCA3MTNkZmIyNTIzMDEwODZmZmE3ZTU4MWMwNDIwNDc1ZThiZGZmYjdkLi5k
NTMyOTZmNWI5MGEzYTMwM2E3MWRhNzBmMTY5ZjQ5YjExNzQ4YjRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCkBAIC0xMDUsMTAgKzEwNSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1hc2tMYXllcihM
YXllckNocm9taXVtKiBtYXNrTGF5ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNrTGF5ZXI7IHNldE5l
ZWRzQ29tbWl0KCk7IH0KICAgICBMYXllckNocm9taXVtKiBtYXNrTGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX21hc2tMYXllci5nZXQoKTsgfQogCi0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29u
c3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0g
ICAgY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2RpcnR5UmVj
dDsgfQotICAgIHZvaWQgcmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgdmlydHVhbCBib29sIG5lZWRzRGlzcGxheSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmVlZHNEaXNwbGF5OyB9CiAKICAgICB2b2lkIHNldE9wYWNpdHkoZmxv
YXQgb3BhY2l0eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyBzZXROZWVkc0NvbW1pdCgpOyB9CiAg
ICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQpAQCAtMjE4LDgg
KzIxNyw4IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgc2V0TmVlZHNDb21taXQoKTsKIAotICAg
IC8vIFRoZSBkaXJ0eSByZWN0IGlzIHRoZSB1bmlvbiBvZiBkYW1hZ2VkIHJlZ2lvbnMgdGhhdCBu
ZWVkIHJlcGFpbnRpbmcvdXBkYXRpbmcuCi0gICAgRmxvYXRSZWN0IG1fZGlydHlSZWN0OworICAg
IC8vIFRoaXMgZmxhZyBpcyBzZXQgd2hlbiBsYXllciBuZWVkIHJlcGFpbnRpbmcvdXBkYXRpbmcu
CisgICAgYm9vbCBtX25lZWRzRGlzcGxheTsKIAogICAgIC8vIFRoZSB1cGRhdGUgcmVjdCBpcyB0
aGUgcmVnaW9uIG9mIHRoZSBjb21wb3NpdG9yIHJlc291cmNlIHRoYXQgd2FzIGFjdHVhbGx5IHVw
ZGF0ZWQgYnkgdGhlIGNvbXBvc2l0b3IuCiAgICAgLy8gRm9yIGxheWVycyB0aGF0IG1heSBkbyB1
cGRhdGluZyBvdXRzaWRlIHRoZSBjb21wb3NpdG9yJ3MgY29udHJvbCAoaS5lLiBwbHVnaW4gbGF5
ZXJzKSwgdGhpcyBpbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggZmZhZDJmNWIxNzVjOTY2NWQ2NjU3NWJhZmNjMzliZmNlZTBlMWU2YS4uY2RjOWQwNjhiY2Rh
MDNkNDM0MjUzYTgyYjc0NDI4Y2E3NzMzMzBlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwCkBAIC0yODUsMTMgKzI4NSwyNSBAQCBVcGRhdGFibGVUaWxlKiBUaWxlZExheWVyQ2hy
b21pdW06OmNyZWF0ZVRpbGUoaW50IGksIGludCBqKQogICAgIHJldHVybiB0aWxlLmdldCgpOwog
fQogCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0
UmVjdCYgZGlydHlSZWN0KQoreworICAgIEludFJlY3QgZGlydHkgPSBlbmNsb3NpbmdJbnRSZWN0
KGRpcnR5UmVjdCk7CisgICAgaW52YWxpZGF0ZVJlY3QoZGlydHkpOworICAgIExheWVyQ2hyb21p
dW06OnNldE5lZWRzRGlzcGxheShkaXJ0eVJlY3QpOworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBJbnRSZWN0IGRpcnR5KEludFBvaW50KCks
IGNvbnRlbnRCb3VuZHMoKSk7CisgICAgaW52YWxpZGF0ZVJlY3QoZGlydHkpOworICAgIExheWVy
Q2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpOworfQorCiB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiB7CiAgICAgaWYg
KCFtX3RpbGVyIHx8IGNvbnRlbnRSZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBzRHJhdykKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV90aWxlci0+Z3Jvd0xheWVyVG9Db250YWluKGNvbnRlbnRSZWN0
KTsKLQogICAgIC8vIERpcnR5IHJlY3RzIGFyZSBhbHdheXMgaW4gbGF5ZXIgc3BhY2UsIGFzIHRo
ZSBsYXllciBjb3VsZCBiZSByZXBvc2l0aW9uZWQKICAgICAvLyBhZnRlciBpbnZhbGlkYXRpb24u
CiAgICAgY29uc3QgSW50UmVjdCBsYXllclJlY3QgPSBtX3RpbGVyLT5jb250ZW50UmVjdFRvTGF5
ZXJSZWN0KGNvbnRlbnRSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5kZXggMzYz
ZGE2MTg1ODAyZWVkYzc0ZjUxNTJhZTQ5ZjM4N2M5MmRjMGY4ZS4uYmJmZjJjYWU3ZTZkZDNlNzBj
MmQ0YmJiN2YyNzk2ZTE0ZTVjYzA0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKQEAg
LTUzLDYgKzUzLDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBJbnRTaXplIGNvbnRlbnRCb3Vu
ZHMoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxv
YXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOworCiAgICAgLy8g
UmVzZXJ2ZXMgYWxsIGV4aXN0aW5nIGFuZCB2YWxpZCB0aWxlIHRleHR1cmVzIHRvIHByb3RlY3Qg
dGhlbSBmcm9tIGJlaW5nCiAgICAgLy8gcmVjeWNsZWQgYnkgdGhlIHRleHR1cmUgbWFuYWdlci4K
ICAgICB2b2lkIHByb3RlY3RUaWxlVGV4dHVyZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VmlkZW9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMTlhOTkzYmRiOWVkOTcwMmQ1
ZDRkNDI5MGU2ODE0MTJiMTUzMmNiMC4uZWM5M2YxNjhkYTE0ZWE0MWUzYzE2ZGY2ZDdjNDliZWU0
NTEzZWFjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCkBAIC04Myw3ICs4Myw3
IEBAIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDCiAgICAgaWYgKCFtX2RlbGVnYXRlIHx8ICFtX3By
b3ZpZGVyIHx8ICFkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1f
ZGlydHlSZWN0LmlzRW1wdHkoKSAmJiB0ZXh0dXJlc1ZhbGlkKCkpIHsKKyAgICBpZiAoIW1fbmVl
ZHNEaXNwbGF5ICYmIHRleHR1cmVzVmFsaWQoKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIHBs
YW5lID0gMDsgcGxhbmUgPCBtX3BsYW5lczsgcGxhbmUrKykgewogICAgICAgICAgICAgTWFuYWdl
ZFRleHR1cmUqIHRleCA9IG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS5nZXQoKTsKICAgICAg
ICAgICAgIGlmICghdGV4LT5yZXNlcnZlKHRleC0+c2l6ZSgpLCB0ZXgtPmZvcm1hdCgpKSkgewpA
QCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDCiAgICAgICAgIG1fbmF0
aXZlVGV4dHVyZUlkID0gZnJhbWUtPnRleHR1cmVJZCgpOwogICAgICAgICBtX25hdGl2ZVRleHR1
cmVTaXplID0gSW50U2l6ZShmcmFtZS0+d2lkdGgoKSwgZnJhbWUtPmhlaWdodCgpKTsKICAgICAg
ICAgbV9uYXRpdmVUZXh0dXJlVmlzaWJsZVNpemUgPSBJbnRTaXplKGZyYW1lLT53aWR0aCgpLCBm
cmFtZS0+aGVpZ2h0KCkpOwotICAgICAgICByZXNldE5lZWRzRGlzcGxheSgpOworICAgICAgICBt
X25lZWRzRGlzcGxheSA9IGZhbHNlOwogICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJh
bWUoZnJhbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHZv
aWQgVmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LCBDCiAgICAgQVNTRVJUKG1fcGxhbmVzIDw9IE1heFBsYW5lcyk7
CiAKICAgICBtX3VwZGF0ZVJlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBib3VuZHMoKSk7
Ci0gICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwog
CiAgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJH
TExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDI3NmYzYzlmYzJmZTEwN2YxNjNiMmFiYTA5OGMwM2Zi
YjMzNDRjYjYuLjdhYTk4NmVjZjcxMjE2Y2UxODM3MDU1ZTAxMDEzNGQ5NTQ4OTkyMDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcApAQCAtNzEsNyArNzEsNyBAQCB2b2lkIFdlYkdM
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQz
RCogcmVuZGVyZXJDbwogICAgIGlmICghZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgaWYgKCFtX25lZWRzRGlzcGxh
eSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQpIHsKQEAgLTg1
LDEyICs4NSwxMiBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogcmVuZGVyZXJDbwogICAgICAgICBtX3RleHR1cmVD
aGFuZ2VkID0gZmFsc2U7CiAgICAgfQogICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhl
IHRleHR1cmUgdXNlZCBieSB0aGUgY29tcG9zaXRvci4KLSAgICBpZiAoIW1fZGlydHlSZWN0Lmlz
RW1wdHkoKSAmJiBtX3RleHR1cmVVcGRhdGVkKSB7CisgICAgaWYgKG1fbmVlZHNEaXNwbGF5ICYm
IG1fdGV4dHVyZVVwZGF0ZWQpIHsKICAgICAgICAgLy8gcHVibGlzaFRvUGxhdGZvcm1MYXllciBw
cmVwYXJlcyB0aGUgY29udGVudHMgb2YgdGhlIG9mZi1zY3JlZW4gcmVuZGVyIHRhcmdldCBmb3Ig
dXNlIGJ5IHRoZSBjb21wb3NpdG9yLgogICAgICAgICBkcmF3aW5nQnVmZmVyKCktPnB1Ymxpc2hU
b1BsYXRmb3JtTGF5ZXIoKTsKICAgICAgICAgY29udGV4dCgpLT5tYXJrTGF5ZXJDb21wb3NpdGVk
KCk7CiAgICAgICAgIG1fdXBkYXRlUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGJvdW5k
cygpKTsKLSAgICAgICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAgbV9uZWVkc0Rpc3Bs
YXkgPSBmYWxzZTsKICAgICAgICAgbV90ZXh0dXJlVXBkYXRlZCA9IGZhbHNlOwogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXll
ci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKaW5k
ZXggZTNjMTk3YTMzYTg5MjQ3MGM3OWMwMTcwNGE4NWUxZTBmY2M0ZmRjZC4uZjdhOThjMTNiZWUw
OTRmYzZmZjVkYTlmZTgxZTU4OGVhZWY5NmE3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKQEAgLTYwLDkgKzYwLDYgQEAgcHVibGljOgog
ICAgIC8vIFNldHMgdGhlIGVudGlyZSBsYXllciBhcyBpbnZhbGlkLCBpLmUuIG5lZWRzIHRvIHVw
ZGF0ZSBpdHMgY29udGVudC4KICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW52YWxpZGF0ZSgpOwog
Ci0gICAgLy8gUmV0dXJucyB0aGUgcmVnaW9uIG9mIHRoZSBsYXllciB0aGF0IGlzIGN1cnJlbnRs
eSBpbnZhbGlkLgotICAgIFdFQktJVF9FWFBPUlQgV2ViRmxvYXRSZWN0IGludmFsaWRSZWN0KCkg
Y29uc3Q7Ci0KICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KICAgICBXZWJDb250ZW50TGF5ZXIo
Y29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+Jik7CiAgICAgV2ViQ29u
dGVudExheWVyJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXll
ckltcGw+Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250
ZW50TGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVy
LmNwcAppbmRleCBkZThkOTk4YWU5OGM0YzFjZGVkNTZiN2E0ODc4YzhmMzQ0ZTI4YWQ4Li43M2Ri
YjU0ZTE3MTQ0NjQ4YTVlZTVhYWZjYjMwNzNkY2U2MjBhZjI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllci5jcHAKQEAgLTU2LDExICs1Niw2IEBAIHZv
aWQgV2ViQ29udGVudExheWVyOjppbnZhbGlkYXRlKCkKICAgICB1bndyYXA8V2ViQ29udGVudExh
eWVySW1wbD4oKS0+c2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKLVdlYkZsb2F0UmVjdCBXZWJDb250
ZW50TGF5ZXI6OmludmFsaWRSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gV2ViRmxvYXRSZWN0
KGNvbnN0VW53cmFwPFdlYkNvbnRlbnRMYXllckltcGw+KCktPmRpcnR5UmVjdCgpKTsKLX0KLQog
V2ViQ29udGVudExheWVyOjpXZWJDb250ZW50TGF5ZXIoY29uc3QgUGFzc1JlZlB0cjxXZWJDb250
ZW50TGF5ZXJJbXBsPiYgbm9kZSkKICAgICA6IFdlYkxheWVyKG5vZGUpCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDc4
MDlkMThhNDM2NzBkNDhhYTc4NjFmYjg3MDQ2NTYyODU5M2ZhMjcuLjZkOWRhZjNlODQ0ZGY5OGRi
NWYxMDQ1NzYxNDRmNmMyYWExYjkwYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC01MzIsNyArNTMyLDcgQEAgVEVTVF9G
KExheWVyQ2hyb21pdW1UZXN0LCBnZXRSb290TGF5ZXJBZnRlclRyZWVNYW5pcHVsYXRpb25zKQog
VEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRzRGlzcGxheUNhdXNlc0NvcnJl
Y3RCZWhhdmlvcikKIHsKICAgICAvLyBUaGUgc2VtYW50aWNzIGZvciBzZXROZWVkc0Rpc3BsYXkg
d2hpY2ggYXJlIHRlc3RlZCBoZXJlOgotICAgIC8vICAgMS4gY3JlYXRlcyBhIHVuaW9uZWQgZGly
dHlSZWN0IGFwcHJvcHJpYXRlbHkuCisgICAgLy8gICAxLiBzZXRzIG5lZWRzRGlzcGxheSBmbGFn
IGFwcHJvcHJpYXRlbHkuCiAgICAgLy8gICAyLiBpbmRpcmVjdGx5IGNhbGxzIG5vdGlmeVN5bmNS
ZXF1aXJlZCwgZXhhY3RseSBvbmNlIGZvciBlYWNoIGNhbGwgdG8gc2V0TmVlZHNEaXNwbGF5Lgog
CiAgICAgTW9ja0xheWVyRGVsZWdhdGUgbW9ja0RlbGVnYXRlOwpAQCAtNTQ0LDQwICs1NDQsMzcg
QEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRzRGlzcGxheUNhdXNlc0Nv
cnJlY3RCZWhhdmlvcikKICAgICBGbG9hdFJlY3QgZW1wdHlEaXJ0eVJlY3QgPSBGbG9hdFJlY3Qo
NDAuMGYsIDQ1LjBmLCAwLCAwKTsKICAgICBGbG9hdFJlY3Qgb3V0T2ZCb3VuZHNEaXJ0eVJlY3Qg
PSBGbG9hdFJlY3QoNDAwLjBmLCA0MDUuMGYsIDUwMC4wZiwgNTAyLjBmKTsKIAotICAgIC8vIEJl
Zm9yZSBhbnl0aGluZywgdGVzdExheWVyIHNob3VsZCBoYXZlIGFuIGVtcHR5IGRpcnR5IHJlY3Qu
Ci0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAg
IC8vIEJlZm9yZSBhbnl0aGluZywgdGVzdExheWVyIHNob3VsZCBub3QgYmUgZGlydHkuCisgICAg
RVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gVGhpcyBp
cyBqdXN0IGluaXRpYWxpemF0aW9uLCBidXQgbm90aWZ5U3luY1JlcXVpcmVkIGJlaGF2aW9yIGlz
IHZlcmlmaWVkIGFueXdheSB0byBhdm9pZCB3YXJuaW5ncy4KICAgICBFWEVDVVRFX0FORF9WRVJJ
RllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldEJv
dW5kcyh0ZXN0Qm91bmRzKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JF
SEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgpKTsK
LSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAg
dGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtb2NrRGVsZWdhdGUpOworICAgIEVY
UEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIFRoZSByZWFs
IHRlc3QgYmVnaW5zIGhlcmUuCiAKLSAgICAvLyBDYXNlIDE6IGJhc2ljCisgICAgLy8gQ2FzZSAx
OiBuZWVkc0Rpc3BsYXkgZmxhZyBzaG91bGQgbm90IGNoYW5nZSBiZWNhdXNlIG9mIGFuIGVtcHR5
IGRpcnR5IHJlY3QuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9S
KG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZW1wdHlEaXJ0eVJl
Y3QpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CisKKyAg
ICAvLyBDYXNlIDI6IGJhc2ljLgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19C
RUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5
MSkpOwotICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKGRpcnR5MSwgdGVzdExheWVyLT5kaXJ0eVJl
Y3QoKSk7CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKLSAg
ICAvLyBDYXNlIDI6IGEgc2Vjb25kIGRpcnR5IHJlY3Qgc2hvdWxkIGJlIHVuaW9uZWQgb2YgZGly
dHkxIGFuZCBkaXJ0eTIuCisgICAgLy8gQ2FzZSAzOiBhIHNlY29uZCBkaXJ0eSByZWN0LgogICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEs
IHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5MikpOwotICAgIEVYUEVDVF9GTE9BVF9S
RUNUX0VRKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEzLjBmLCAxNC4wZiksIHRlc3RMYXllci0+
ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkp
OwogCi0gICAgLy8gQ2FzZSAzOiBkaXJ0eSByZWN0IHNob3VsZCBub3QgY2hhbmdlIGJlY2F1c2Ug
b2YgYW4gZW1wdHkgZGlydHkgcmVjdC4KLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZ
TkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShl
bXB0eURpcnR5UmVjdCkpOwotICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxMC4w
ZiwgMTUuMGYsIDEzLjBmLCAxNC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwotCi0gICAg
Ly8gQ2FzZSA0OiBMYXllckNocm9taXVtIHNob3VsZCBhY2NlcHQgZGlydHkgcmVjdHMgdGhhdCBn
byBiZXlvbmQgaXRzIGJvdW5kcworICAgIC8vIENhc2UgNDogTGF5ZXJDaHJvbWl1bSBzaG91bGQg
YWNjZXB0IGRpcnR5IHJlY3RzIHRoYXQgZ28gYmV5b25kIGl0cyBib3VuZHMuCisgICAgdGVzdExh
eWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtb2NrRGVsZWdhdGUpOwogICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXll
ci0+c2V0TmVlZHNEaXNwbGF5KG91dE9mQm91bmRzRGlydHlSZWN0KSk7Ci0gICAgRVhQRUNUX0ZM
T0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgODkwLjBmLCA4OTIuMGYpLCB0ZXN0
TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlz
cGxheSgpKTsKIAotICAgIC8vIENhc2UgNTogc2V0TmVlZHNEaXNwbGF5KCkgd2l0aG91dCB0aGUg
ZGlydHkgcmVjdCBhcmcgc2hvdWxkIGNhdXNlIHRoZSBlbnRpcmUgYm91bmRzIHRvIGJlIGRpcnR5
LAotICAgIC8vICAgICAgICAgb3ZlcnJpZGluZyBhbnkgZXhpc3RpbmcgZGlydHkgcmVjdC4KKyAg
ICAvLyBDYXNlIDU6IHNldE5lZWRzRGlzcGxheSgpIHdpdGhvdXQgdGhlIGRpcnR5IHJlY3QgYXJn
LgorICAgIHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbW9ja0RlbGVnYXRlKTsK
ICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRl
LCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRfUkVD
VF9FUShGbG9hdFJlY3QoMCwgMCwgdGVzdEJvdW5kcy53aWR0aCgpLCB0ZXN0Qm91bmRzLmhlaWdo
dCgpKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7Ci0KLSAgICAvLyByZXNldE5lZWRzRGlzcGxh
eSBzaG91bGQgZW1wdHkgdGhlIGRpcnR5IHJlY3QsIGFuZCBOT1QgY2FsbCBub3RpZnlTeW5jUmVx
dWlyZWQuCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tE
ZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgpKTsKLSAgICBFWFBFQ1Rf
VFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUo
dGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9taXVtVGVz
dCwgY2hlY2tTZXROZWVkc0Rpc3BsYXlXaXRoTnVsbERlbGVnYXRlKQpAQCAtNTkwLDEzICs1ODcs
MTMgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRzRGlzcGxheVdpdGhO
dWxsRGVsZWdhdGUpCiAgICAgRmxvYXRSZWN0IGRpcnR5ID0gRmxvYXRSZWN0KDEwLjBmLCAxNS4w
ZiwgMS4wZiwgMi4wZik7CiAKICAgICB0ZXN0TGF5ZXItPnNldEJvdW5kcyh0ZXN0Qm91bmRzKTsK
LSAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMC4wZiwgMC4wZiwgNTAxLjBmLCA1
MDguMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5
ZXItPm5lZWRzRGlzcGxheSgpKTsKIAotICAgIHRlc3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXko
KTsKLSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7Cisg
ICAgdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIEVYUEVDVF9GQUxT
RSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAgIHRlc3RMYXllci0+c2V0TmVlZHNE
aXNwbGF5KGRpcnR5KTsKLSAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShkaXJ0eSwgdGVzdExheWVy
LT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXko
KSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tQcm9wZXJ0eUNoYW5nZUNh
dXNlc0NvcnJlY3RCZWhhdmlvcikKQEAgLTYwNywxMCArNjA0LDEwIEBAIFRFU1RfRihMYXllckNo
cm9taXVtVGVzdCwgY2hlY2tQcm9wZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKICAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZHVtbXlMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7IC8vIGp1c3QgYSBkdW1teSBsYXllciBmb3IgdGhpcyB0ZXN0
IGNhc2UuCiAKICAgICAvLyBzYW5pdHkgY2hlY2sgb2YgaW5pdGlhbCB0ZXN0IGNvbmRpdGlvbgot
ICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICBF
WFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBUZXN0IHBy
b3BlcnRpZXMgdGhhdCBzaG91bGQgbm90IGNhbGwgbmVlZHNEaXNwbGF5IGFuZCBuZWVkc0NvbW1p
dCB3aGVuIGNoYW5nZWQuCi0gICAgLy8gbm90aWZ5U3luY1JlcXVpcmVkIHNob3VsZCBub3QgYmUg
Y2FsbGVkLCBhbmQgdGhlIGRpcnR5UmVjdCBzaG91bGQgcmVtYWluIHN0aWxsIGVtcHR5LgorICAg
IC8vIG5vdGlmeVN5bmNSZXF1aXJlZCBzaG91bGQgbm90IGJlIGNhbGxlZCwgYW5kIHRoZSBuZWVk
c0Rpc3BsYXkgZmxhZyBzaG91bGQgcmVtYWluIGZhbHNlLgogICAgIEVYUEVDVF9DQUxMKGluaXRp
YWxEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDApOyAvLyBvbGQgZGVsZWdh
dGUgc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gc2V0RGVsZWdhdGUgZ2l2ZXMgYSBuZXcgZGVsZWdh
dGUuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxl
Z2F0ZSwgMCwgdGVzdExheWVyLT5zZXREZWxlZ2F0ZSgmbW9ja0RlbGVnYXRlKSk7CiAgICAgRVhF
Q1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVz
dExheWVyLT5zZXROYW1lKCJUZXN0IExheWVyIikpOwpAQCAtNjI1LDEwICs2MjIsMTAgQEAgVEVT
VF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1Byb3BlcnR5Q2hhbmdlQ2F1c2VzQ29ycmVjdEJl
aGF2aW9yKQogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2Nr
RGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0RHJhd1RyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpKSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1v
Y2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXRTY3JlZW5TcGFjZVRyYW5zZm9ybShUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpKSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JF
SEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0
KEludFJlY3QoNCwgNSwgNiwgNykpKTsKLSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5
UmVjdCgpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNw
bGF5KCkpOwogCiAgICAgLy8gTmV4dCwgdGVzdCBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGNhbGwg
c2V0TmVlZHNDb21taXQgKGJ1dCBub3Qgc2V0TmVlZHNEaXNwbGF5KQotICAgIC8vIFRoZXNlIHBy
b3BlcnRpZXMgc2hvdWxkIGluZGlyZWN0bHkgY2FsbCBub3RpZnlTeW5jUmVxdWlyZWQsIGJ1dCB0
aGUgZGlydHkgcmVjdCBzaG91bGQgbm90IGNoYW5nZS4KKyAgICAvLyBUaGVzZSBwcm9wZXJ0aWVz
IHNob3VsZCBpbmRpcmVjdGx5IGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkLCBidXQgdGhlIG5lZWRz
RGlzcGxheSBmbGFnIHNob3VsZCBub3QgY2hhbmdlLgogICAgIC8vIE5vdGUgdGhhdCBmb3IgbWFu
eSBvZiB0aGVzZSBwcm9wZXJ0aWVzIGl0IGlzIGltcG9ydGFudCB0byB0ZXN0IHNldHRpbmcgdGhl
IHByb3BlcnR5IHRvIGEgdmFsdWUgdGhhdAogICAgIC8vIGlzIGRpZmZlcmVudCB0aGFuIHdoYXQg
dGhlIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIGl0IHRvLgogICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0QW5j
aG9yUG9pbnQoRmxvYXRQb2ludCgxLjIzZiwgNC41NmYpKSk7CkBAIC02NDQsMTUgKzY0MSwxMyBA
QCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVydHlDaGFuZ2VDYXVzZXNDb3Jy
ZWN0QmVoYXZpb3IpCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9S
KG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25N
YXRyaXgoKSkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUiht
b2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0RG91YmxlU2lkZWQoZmFsc2UpKTsKIAotICAg
IC8vIFRoZSBhYm92ZSB0ZXN0cyBzaG91bGQgbm90IGhhdmUgY2F1c2VkIGEgbm9uLWVtcHR5IGRp
cnR5IHJlY3QuCi0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5
KCkpOworICAgIC8vIFRoZSBhYm92ZSB0ZXN0cyBzaG91bGQgbm90IGhhdmUgY2F1c2VkIGEgY2hh
bmdlIHRvIHRoZSBuZWVkc0Rpc3BsYXkgZmxhZy4KKyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVy
LT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBUZXN0IHByb3BlcnRpZXMgdGhhdCBzaG91bGQg
Y2FsbCBzZXROZWVkc0Rpc3BsYXkKLSAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIHdpbGwgY2FsbCBu
b3RpZnlTeW5jUmVxdWlyZWQgYW5kIGNoYW5nZSB0aGUgZGlydHkgcmVjdC4KKyAgICAvLyBUaGVz
ZSBwcm9wZXJ0aWVzIHdpbGwgY2FsbCBub3RpZnlTeW5jUmVxdWlyZWQgYW5kIGNoYW5nZSB0aGUg
bmVlZHNEaXNwbGF5IGZsYWcuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JF
SEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSg1LCAx
MCkpKTsKLSAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMC4wZiwgMC4wZiwgNS4w
ZiwgMTAuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKLSAgICB0ZXN0TGF5ZXItPnJlc2V0
TmVlZHNEaXNwbGF5KCk7Ci0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5p
c0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwog
CiAgICAgLy8gRklYTUU6IG5lZWQgdG8gYWRkIGEgdGVzdCBmb3Igc2V0TGF5ZXJUcmVlSG9zdCB3
aXRoIGEgbm9uLW51bGwgc3R1YmJlZCBDQ0xheWVyVHJlZUhvc3QuCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117055</attachid>
            <date>2011-11-29 15:13:52 -0800</date>
            <delta_ts>2011-11-30 22:22:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71872-20111129181351.patch</filename>
            <type>text/plain</type>
            <size>24293</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNDAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTdmNzY1NmUyYmU3MzYw
ZGZmNmNmMjA2N2IyMzQyMmM2YzVmZDQxYy4uZDU0NDkwNWFiOTRlODMwZjU3OTA3ZDQ0OWRlNDQ3
NjgxNjEyYTlkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDExLTExLTI5ICBEYXZp
ZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBJ
bXByb3ZlIHRpbGUgaW52YWxpZGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzE4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBWaXJ0dWFsaXplIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxh
eSBzbyB0aGF0IGRpcnR5IHJlY3RhbmdsZXMgY2FuCisgICAgICAgIGJlIGhhbmRsZWQgZGlyZWN0
bHkgYnkgdGhlIFRpbGVkTGF5ZXJDaHJvbWl1bSBjbGFzcy4gUmVwbGFjZQorICAgICAgICBMYXll
ckNocm9taXVtOjpkaXJ0eVJlY3QoKSB3aXRoIExheWVyQ2hyb21pdW06Om5lZWRzRGlzcGxheSgp
IGFuZAorICAgICAgICByZW1vdmUgdW5uZWNlc3NhcnkgdW5pb24gb2YgZGlydHkgcmVjdGFuZ2xl
cy4gQnkgaW52YWxpZGF0aW5nIGV4aXN0aW5nCisgICAgICAgIHRpbGVzIHVzaW5nIHRoZSBpbml0
aWFsIGRpcnR5IHJlY3RhbmdsZXMgaW5zdGVhZCBvZiB0aGVpciB1bmlvbiB3ZQorICAgICAgICBh
dm9pZCBhIGxhcmdlIGFtb3VudCBvZiB1bm5lY2Vzc2FyeSB0aWxlIHVwZGF0ZXMuCisKKyAgICAg
ICAgVXBkYXRlIExheWVyQ2hyb21pdW1UZXN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJ
ZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpzZXRD
b250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29u
dGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6bmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmg6CisgICAg
ICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisKIDIwMTEtMTEtMjkgIFRvbnkgQ2hhbmcgIDx0b255
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBmbGV4LWFsaWduOnN0cmV0Y2ggKyBtYXgtaGVpZ2h0
IG5lZWRzIHRvIGNsYW1wIHRvIG1heC1oZWlnaHQgYW5kIHBvc2l0aW9uIGFwcHJvcHJpYXRlbHkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMDg5MjljNDBmNzFhNmQ0NWI5Mjc1MTg1NTEy
YzE4NmNmYzI1MGJiYS4uN2EwZTU3ZmY1ZTE1ZDk5Y2EwNzYwNDYxY2QwZWU0NTJkYjQ5ZTEzNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMS0xMS0yOSAg
RGF2aWQgUmV2ZW1hbiAgPHJldmVtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1
bV0gSW1wcm92ZSB0aWxlIGludmFsaWRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcxODcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHB1YmxpYyBBUEkgZnVuY3Rpb24gV2ViQ29udGVu
dExheWVyOjppbnZhbGlkUmVjdCgpLiBBZGQgbmV3CisgICAgICAgIHRlc3QgY2FzZSB0bworICAg
ICAgICBMYXllckNocm9taXVtVGVzdC5jaGVja1NldE5lZWRzRGlzcGxheUNhdXNlc0NvcnJlY3RC
ZWhhdmlvciB0aGF0CisgICAgICAgIHZlcmlmaWVzIHRoYXQgY2FsbGluZyBzZXROZWVkc0Rpc3Bs
YXkoKSBvbiBhIExheWVyQ2hyb21pdW0gd2l0aAorICAgICAgICBlbXB0eSBib3VuZHMgaXMgaGFu
ZGxlZCBjb3JyZWN0bHkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViQ29udGVudExheWVyLmg6Cisg
ICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllci5jcHA6CisgICAgICAgICogdGVzdHMvTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwOgorCiAyMDExLTExLTI5ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5A
Z29vZ2xlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBzcGxpdCBQcmVmZXJlbmNlcyBp
bnRvIFByZWZlcmVuY2VzIGFuZCBDYXBhYmlsaXRpZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXll
ckNocm9taXVtLmNwcAppbmRleCA0NDk0NTg2YTU3Y2ExNmJjNGI0ZjIzMjQxMGRiOGY3ZmQ0Y2Q4
OGMxLi5iMGM0ZTA3Mzk0NmJhNWU1MWUzZGM2YTI1MzczNmEwZWNhMzhjYWNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTY3LDcgKzY3LDcgQEAgYm9vbCBDYW52
YXMyRExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiAKIHZvaWQgQ2FudmFzMkRM
YXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNE
KiwgQ0NUZXh0dXJlVXBkYXRlciYpCiB7Ci0gICAgaWYgKG1fZGlydHlSZWN0LmlzRW1wdHkoKSB8
fCAhZHJhd3NDb250ZW50KCkpCisgICAgaWYgKCFtX25lZWRzRGlzcGxheSB8fCAhZHJhd3NDb250
ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2NvbnRleHQpIHsKQEAgLTgyLDcg
KzgyLDcgQEAgdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHQKICAgICB9CiAKICAgICBtX3VwZGF0ZVJl
Y3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBib3VuZHMoKSk7Ci0gICAgcmVzZXROZWVkc0Rp
c3BsYXkoKTsKKyAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwogfQogCiB2b2lkIENhbnZhczJE
TGF5ZXJDaHJvbWl1bTo6Y29udGVudENoYW5nZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwCmluZGV4IDllYjFkNzk5ZjZkOTFlY2VjNjc5ODEwNmVjNjAyN2JiNDFlNTI1MjAu
LjhkZjY5MzQzMjUzYmJhZDNiNTEzMzc4NmQ2NTkzNWViOTBkNjNlYzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTEwMywxMiArMTAzLDggQEAgdm9pZCBDb250ZW50
TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQogICAgIGlmIChkcmF3c0NvbnRl
bnQoKSkKICAgICAgICAgbGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVjdCgpOwogCi0gICAgSW50
UmVjdCBkaXJ0eSA9IGVuY2xvc2luZ0ludFJlY3QobV9kaXJ0eVJlY3QpOwotICAgIGRpcnR5Lmlu
dGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSkpOwotICAgIGludmFs
aWRhdGVSZWN0KGRpcnR5KTsKLQogICAgIHByZXBhcmVUb1VwZGF0ZShsYXllclJlY3QpOwotICAg
IHJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKIH0KIAog
Ym9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDlkM2U5ZjNhMWU3MGRlZTVmMTllM2NmMGIyNDhi
OTQzYWZhMTAyYzAuLmYwZGMzNTIxZjU4MDE3MTdkNDA4NTM3YmY1YmZlZWFkMDg2ZTRiMjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtMTM5LDIwICsxMzksMTkgQEAgdm9p
ZCBJbWFnZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKEltYWdlKiBjb250ZW50cykKIAogICAg
IG1fY29udGVudHMgPSBjb250ZW50czsKICAgICBtX2ltYWdlRm9yQ3VycmVudEZyYW1lID0gbV9j
b250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBtX2RpcnR5UmVjdCA9
IEludFJlY3QoSW50UG9pbnQoMCwgMCksIGJvdW5kcygpKTsKICAgICBzZXROZWVkc0Rpc3BsYXko
KTsKICAgICBzZXRPcGFxdWUoIW1fY29udGVudHMtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkpOwog
fQogCiB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQogewot
ICAgIGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fbmVlZHNEaXNwbGF5
KSB7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPnVwZGF0ZUZyb21JbWFnZShtX2NvbnRlbnRz
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKTsKICAgICAgICAgdXBkYXRlVGlsZVNpemVB
bmRUaWxpbmdPcHRpb24oKTsKICAgICAgICAgSW50UmVjdCBwYWludFJlY3QoSW50UG9pbnQoKSwg
Y29udGVudEJvdW5kcygpKTsKLSAgICAgICAgaWYgKCFtX2RpcnR5UmVjdC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgaWYgKG1fbmVlZHNEaXNwbGF5KSB7CiAgICAgICAgICAgICBpbnZhbGlkYXRlUmVj
dChwYWludFJlY3QpOwotICAgICAgICAgICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAg
ICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5jcHAKaW5kZXggNTRhN2Y4ODU3ZDY4OTAzODZhZWZhODU2NmE4ZDI3ZDVkNWNlNTAy
OC4uMTFlMWUxM2FiZDE1NWI3ODRjMGQ4NDg2ZGE2OTlkZjQ2ZWQwOGZmZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5jcHAKQEAgLTU2LDYgKzU2LDcgQEAgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBM
YXllckNocm9taXVtOjpjcmVhdGUoQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKIAogTGF5ZXJD
aHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogICAgIDog
bV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKKyAgICAsIG1fbmVlZHNEaXNwbGF5KGZhbHNlKQogICAgICwg
bV9sYXllcklkKHNfbmV4dExheWVySWQrKykKICAgICAsIG1fcGFyZW50KDApCiAgICAgLCBtX3Nj
cm9sbGFibGUoZmFsc2UpCkBAIC0yNjMsMjIgKzI2NCwxMiBAQCB2b2lkIExheWVyQ2hyb21pdW06
OnNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkKICAgICAvLyBTaW1w
bHkgbWFyayB0aGUgY29udGVudHMgYXMgZGlydHkuIEZvciBub24tcm9vdCBsYXllcnMsIHRoZSBj
YWxsIHRvCiAgICAgLy8gc2V0TmVlZHNDb21taXQgd2lsbCBzY2hlZHVsZSBhIGZyZXNoIGNvbXBv
c2l0aW5nIHBhc3MuCiAgICAgLy8gRm9yIHRoZSByb290IGxheWVyLCBzZXROZWVkc0NvbW1pdCBo
YXMgbm8gZWZmZWN0LgotICAgIG1fZGlydHlSZWN0LnVuaXRlKGRpcnR5UmVjdCk7Ci0gICAgc2V0
TmVlZHNDb21taXQoKTsKLX0KKyAgICBpZiAoIWRpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAg
IG1fbmVlZHNEaXNwbGF5ID0gdHJ1ZTsKIAotdm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0Rp
c3BsYXkoKQotewotICAgIG1fZGlydHlSZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7Ci0g
ICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShib3VuZHMoKSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsK
IH0KIAotdm9pZCBMYXllckNocm9taXVtOjpyZXNldE5lZWRzRGlzcGxheSgpCi17Ci0gICAgbV9k
aXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKLX0KLQogdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJv
cGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKIHsKICAgICBsYXllci0+c2V0QW5jaG9yUG9p
bnQobV9hbmNob3JQb2ludCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggNzEzZGZiMjUyMzAxMDg2
ZmZhN2U1ODFjMDQyMDQ3NWU4YmRmZmI3ZC4uZjY4NzQzMjRiMmNmZWE0ZjhhNWQ1ZDg2MWE4MmI1
NmVhMDNlNDAzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTA1LDEwICsxMDUsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRNYXNrTGF5ZXIoTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyKSB7IG1f
bWFza0xheWVyID0gbWFza0xheWVyOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgTGF5ZXJDaHJv
bWl1bSogbWFza0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIuZ2V0KCk7IH0KIAot
ICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KTsKLSAg
ICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotICAgIGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9kaXJ0eVJlY3Q7IH0KLSAgICB2b2lkIHJlc2V0TmVlZHNEaXNw
bGF5KCk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3Qm
IGRpcnR5UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpIHsgTGF5ZXJD
aHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvbnRlbnRC
b3VuZHMoKSkpOyB9CisgICAgdmlydHVhbCBib29sIG5lZWRzRGlzcGxheSgpIGNvbnN0IHsgcmV0
dXJuIG1fbmVlZHNEaXNwbGF5OyB9CiAKICAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0
eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgZmxvYXQg
b3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQpAQCAtMjE4LDggKzIxNyw4IEBA
IHByb3RlY3RlZDoKIAogICAgIHZvaWQgc2V0TmVlZHNDb21taXQoKTsKIAotICAgIC8vIFRoZSBk
aXJ0eSByZWN0IGlzIHRoZSB1bmlvbiBvZiBkYW1hZ2VkIHJlZ2lvbnMgdGhhdCBuZWVkIHJlcGFp
bnRpbmcvdXBkYXRpbmcuCi0gICAgRmxvYXRSZWN0IG1fZGlydHlSZWN0OworICAgIC8vIFRoaXMg
ZmxhZyBpcyBzZXQgd2hlbiBsYXllciBuZWVkIHJlcGFpbnRpbmcvdXBkYXRpbmcuCisgICAgYm9v
bCBtX25lZWRzRGlzcGxheTsKIAogICAgIC8vIFRoZSB1cGRhdGUgcmVjdCBpcyB0aGUgcmVnaW9u
IG9mIHRoZSBjb21wb3NpdG9yIHJlc291cmNlIHRoYXQgd2FzIGFjdHVhbGx5IHVwZGF0ZWQgYnkg
dGhlIGNvbXBvc2l0b3IuCiAgICAgLy8gRm9yIGxheWVycyB0aGF0IG1heSBkbyB1cGRhdGluZyBv
dXRzaWRlIHRoZSBjb21wb3NpdG9yJ3MgY29udHJvbCAoaS5lLiBwbHVnaW4gbGF5ZXJzKSwgdGhp
cyBpbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZmZhZDJm
NWIxNzVjOTY2NWQ2NjU3NWJhZmNjMzliZmNlZTBlMWU2YS4uNGU3ZGZmYTNiMGIxZDk0OGNjODU3
Y2YyMWJlZTU3ZmQ4NjBkMGExNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBA
IC0yODUsMTMgKzI4NSwxOCBAQCBVcGRhdGFibGVUaWxlKiBUaWxlZExheWVyQ2hyb21pdW06OmNy
ZWF0ZVRpbGUoaW50IGksIGludCBqKQogICAgIHJldHVybiB0aWxlLmdldCgpOwogfQogCit2b2lk
IFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGly
dHlSZWN0KQoreworICAgIEludFJlY3QgZGlydHkgPSBlbmNsb3NpbmdJbnRSZWN0KGRpcnR5UmVj
dCk7CisgICAgaW52YWxpZGF0ZVJlY3QoZGlydHkpOworICAgIExheWVyQ2hyb21pdW06OnNldE5l
ZWRzRGlzcGxheShkaXJ0eVJlY3QpOworfQorCiB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52
YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiB7CiAgICAgaWYgKCFtX3Rp
bGVyIHx8IGNvbnRlbnRSZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBzRHJhdykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV90aWxlci0+Z3Jvd0xheWVyVG9Db250YWluKGNvbnRlbnRSZWN0KTsKLQog
ICAgIC8vIERpcnR5IHJlY3RzIGFyZSBhbHdheXMgaW4gbGF5ZXIgc3BhY2UsIGFzIHRoZSBsYXll
ciBjb3VsZCBiZSByZXBvc2l0aW9uZWQKICAgICAvLyBhZnRlciBpbnZhbGlkYXRpb24uCiAgICAg
Y29uc3QgSW50UmVjdCBsYXllclJlY3QgPSBtX3RpbGVyLT5jb250ZW50UmVjdFRvTGF5ZXJSZWN0
KGNvbnRlbnRSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5kZXggMzYzZGE2MTg1
ODAyZWVkYzc0ZjUxNTJhZTQ5ZjM4N2M5MmRjMGY4ZS4uZWQ1NzFmYjVjMjEzM2E4ODViZDE1NWMx
OTQxMzdiMzJlZjU5YmI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKQEAgLTUzLDYg
KzUzLDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBJbnRTaXplIGNvbnRlbnRCb3VuZHMoKSBj
b25zdDsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0
Jik7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpIHsgc2V0TmVlZHNEaXNwbGF5
KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSkpOyB9CisKICAgICAvLyBS
ZXNlcnZlcyBhbGwgZXhpc3RpbmcgYW5kIHZhbGlkIHRpbGUgdGV4dHVyZXMgdG8gcHJvdGVjdCB0
aGVtIGZyb20gYmVpbmcKICAgICAvLyByZWN5Y2xlZCBieSB0aGUgdGV4dHVyZSBtYW5hZ2VyLgog
ICAgIHZvaWQgcHJvdGVjdFRpbGVUZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9W
aWRlb0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAppbmRleCAxOWE5OTNiZGI5ZWQ5NzAyZDVk
NGQ0MjkwZTY4MTQxMmIxNTMyY2IwLi5lYzkzZjE2OGRhMTRlYTQxZTNjMTZkZjZkN2M0OWJlZTQ1
MTNlYWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTgzLDcgKzgzLDcg
QEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEMKICAgICBpZiAoIW1fZGVsZWdhdGUgfHwgIW1fcHJv
dmlkZXIgfHwgIWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9k
aXJ0eVJlY3QuaXNFbXB0eSgpICYmIHRleHR1cmVzVmFsaWQoKSkgeworICAgIGlmICghbV9uZWVk
c0Rpc3BsYXkgJiYgdGV4dHVyZXNWYWxpZCgpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgcGxh
bmUgPSAwOyBwbGFuZSA8IG1fcGxhbmVzOyBwbGFuZSsrKSB7CiAgICAgICAgICAgICBNYW5hZ2Vk
VGV4dHVyZSogdGV4ID0gbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLmdldCgpOwogICAgICAg
ICAgICAgaWYgKCF0ZXgtPnJlc2VydmUodGV4LT5zaXplKCksIHRleC0+Zm9ybWF0KCkpKSB7CkBA
IC0xMTgsNyArMTE4LDcgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEMKICAgICAgICAgbV9uYXRp
dmVUZXh0dXJlSWQgPSBmcmFtZS0+dGV4dHVyZUlkKCk7CiAgICAgICAgIG1fbmF0aXZlVGV4dHVy
ZVNpemUgPSBJbnRTaXplKGZyYW1lLT53aWR0aCgpLCBmcmFtZS0+aGVpZ2h0KCkpOwogICAgICAg
ICBtX25hdGl2ZVRleHR1cmVWaXNpYmxlU2l6ZSA9IEludFNpemUoZnJhbWUtPndpZHRoKCksIGZy
YW1lLT5oZWlnaHQoKSk7Ci0gICAgICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgICAgIG1f
bmVlZHNEaXNwbGF5ID0gZmFsc2U7CiAgICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFt
ZShmcmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9p
ZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIEMKICAgICBBU1NFUlQobV9wbGFuZXMgPD0gTWF4UGxhbmVzKTsK
IAogICAgIG1fdXBkYXRlUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGJvdW5kcygpKTsK
LSAgICByZXNldE5lZWRzRGlzcGxheSgpOworICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiAK
ICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdM
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMjc2ZjNjOWZjMmZlMTA3ZjE2M2IyYWJhMDk4YzAzZmJi
MzM0NGNiNi4uN2FhOTg2ZWNmNzEyMTZjZTE4MzcwNTVlMDEwMTM0ZDk1NDg5OTIwNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgV2ViR0xM
YXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNE
KiByZW5kZXJlckNvCiAgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKG1fZGlydHlSZWN0LmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fbmVlZHNEaXNwbGF5
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV90ZXh0dXJlQ2hhbmdlZCkgewpAQCAtODUs
MTIgKzg1LDEyIEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiByZW5kZXJlckNvCiAgICAgICAgIG1fdGV4dHVyZUNo
YW5nZWQgPSBmYWxzZTsKICAgICB9CiAgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUg
dGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgotICAgIGlmICghbV9kaXJ0eVJlY3QuaXNF
bXB0eSgpICYmIG1fdGV4dHVyZVVwZGF0ZWQpIHsKKyAgICBpZiAobV9uZWVkc0Rpc3BsYXkgJiYg
bV90ZXh0dXJlVXBkYXRlZCkgewogICAgICAgICAvLyBwdWJsaXNoVG9QbGF0Zm9ybUxheWVyIHBy
ZXBhcmVzIHRoZSBjb250ZW50cyBvZiB0aGUgb2ZmLXNjcmVlbiByZW5kZXIgdGFyZ2V0IGZvciB1
c2UgYnkgdGhlIGNvbXBvc2l0b3IuCiAgICAgICAgIGRyYXdpbmdCdWZmZXIoKS0+cHVibGlzaFRv
UGxhdGZvcm1MYXllcigpOwogICAgICAgICBjb250ZXh0KCktPm1hcmtMYXllckNvbXBvc2l0ZWQo
KTsKICAgICAgICAgbV91cGRhdGVSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYm91bmRz
KCkpOwotICAgICAgICByZXNldE5lZWRzRGlzcGxheSgpOworICAgICAgICBtX25lZWRzRGlzcGxh
eSA9IGZhbHNlOwogICAgICAgICBtX3RleHR1cmVVcGRhdGVkID0gZmFsc2U7CiAgICAgfQogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVy
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaAppbmRl
eCBlM2MxOTdhMzNhODkyNDcwYzc5YzAxNzA0YTg1ZTFlMGZjYzRmZGNkLi5mN2E5OGMxM2JlZTA5
NGZjNmZmNWRhOWZlODFlNTg4ZWFlZjk2YTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaApAQCAtNjAsOSArNjAsNiBAQCBwdWJsaWM6CiAg
ICAgLy8gU2V0cyB0aGUgZW50aXJlIGxheWVyIGFzIGludmFsaWQsIGkuZS4gbmVlZHMgdG8gdXBk
YXRlIGl0cyBjb250ZW50LgogICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7CiAK
LSAgICAvLyBSZXR1cm5zIHRoZSByZWdpb24gb2YgdGhlIGxheWVyIHRoYXQgaXMgY3VycmVudGx5
IGludmFsaWQuCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJGbG9hdFJlY3QgaW52YWxpZFJlY3QoKSBj
b25zdDsKLQogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgogICAgIFdlYkNvbnRlbnRMYXllcihj
b25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4mKTsKICAgICBXZWJDb250
ZW50TGF5ZXImIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29udGVudExheWVy
SW1wbD4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRl
bnRMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIu
Y3BwCmluZGV4IGRlOGQ5OThhZTk4YzRjMWNkZWQ1NmI3YTQ4NzhjOGYzNDRlMjhhZDguLjczZGJi
NTRlMTcxNDQ2NDhhNWVlNWFhZmNiMzA3M2RjZTYyMGFmMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcApAQCAtNTYsMTEgKzU2LDYgQEAgdm9p
ZCBXZWJDb250ZW50TGF5ZXI6OmludmFsaWRhdGUoKQogICAgIHVud3JhcDxXZWJDb250ZW50TGF5
ZXJJbXBsPigpLT5zZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAotV2ViRmxvYXRSZWN0IFdlYkNvbnRl
bnRMYXllcjo6aW52YWxpZFJlY3QoKSBjb25zdAotewotICAgIHJldHVybiBXZWJGbG9hdFJlY3Qo
Y29uc3RVbndyYXA8V2ViQ29udGVudExheWVySW1wbD4oKS0+ZGlydHlSZWN0KCkpOwotfQotCiBX
ZWJDb250ZW50TGF5ZXI6OldlYkNvbnRlbnRMYXllcihjb25zdCBQYXNzUmVmUHRyPFdlYkNvbnRl
bnRMYXllckltcGw+JiBub2RlKQogICAgIDogV2ViTGF5ZXIobm9kZSkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggNzgw
OWQxOGE0MzY3MGQ0OGFhNzg2MWZiODcwNDY1NjI4NTkzZmEyNy4uODhkNTE2NzZhMGUxODUzZjVi
ODJmMWY4NTBjN2YwMTNiZGE4MjFiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTUzMiw3ICs1MzIsNyBAQCBURVNUX0Yo
TGF5ZXJDaHJvbWl1bVRlc3QsIGdldFJvb3RMYXllckFmdGVyVHJlZU1hbmlwdWxhdGlvbnMpCiBU
RVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5Q2F1c2VzQ29ycmVj
dEJlaGF2aW9yKQogewogICAgIC8vIFRoZSBzZW1hbnRpY3MgZm9yIHNldE5lZWRzRGlzcGxheSB3
aGljaCBhcmUgdGVzdGVkIGhlcmU6Ci0gICAgLy8gICAxLiBjcmVhdGVzIGEgdW5pb25lZCBkaXJ0
eVJlY3QgYXBwcm9wcmlhdGVseS4KKyAgICAvLyAgIDEuIHNldHMgbmVlZHNEaXNwbGF5IGZsYWcg
YXBwcm9wcmlhdGVseS4KICAgICAvLyAgIDIuIGluZGlyZWN0bHkgY2FsbHMgbm90aWZ5U3luY1Jl
cXVpcmVkLCBleGFjdGx5IG9uY2UgZm9yIGVhY2ggY2FsbCB0byBzZXROZWVkc0Rpc3BsYXkuCiAK
ICAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBtb2NrRGVsZWdhdGU7CkBAIC01NDQsNDAgKzU0NCw0NSBA
QCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5Q2F1c2VzQ29y
cmVjdEJlaGF2aW9yKQogICAgIEZsb2F0UmVjdCBlbXB0eURpcnR5UmVjdCA9IEZsb2F0UmVjdCg0
MC4wZiwgNDUuMGYsIDAsIDApOwogICAgIEZsb2F0UmVjdCBvdXRPZkJvdW5kc0RpcnR5UmVjdCA9
IEZsb2F0UmVjdCg0MDAuMGYsIDQwNS4wZiwgNTAwLjBmLCA1MDIuMGYpOwogCi0gICAgLy8gQmVm
b3JlIGFueXRoaW5nLCB0ZXN0TGF5ZXIgc2hvdWxkIGhhdmUgYW4gZW1wdHkgZGlydHkgcmVjdC4K
LSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAg
Ly8gQmVmb3JlIGFueXRoaW5nLCB0ZXN0TGF5ZXIgc2hvdWxkIG5vdCBiZSBkaXJ0eS4KKyAgICBF
WFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBUaGlzIGlz
IGp1c3QgaW5pdGlhbGl6YXRpb24sIGJ1dCBub3RpZnlTeW5jUmVxdWlyZWQgYmVoYXZpb3IgaXMg
dmVyaWZpZWQgYW55d2F5IHRvIGF2b2lkIHdhcm5pbmdzLgogICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0Qm91
bmRzKHRlc3RCb3VuZHMpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVI
QVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCkpOwot
ICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICB0
ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1vY2tEZWxlZ2F0ZSk7CisgICAgRVhQ
RUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gVGhlIHJlYWwg
dGVzdCBiZWdpbnMgaGVyZS4KIAotICAgIC8vIENhc2UgMTogYmFzaWMKKyAgICAvLyBDYXNlIDE6
IG5lZWRzRGlzcGxheSBmbGFnIHNob3VsZCBub3QgY2hhbmdlIGJlY2F1c2Ugb2YgYW4gZW1wdHkg
ZGlydHkgcmVjdC4KKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1Io
bW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShlbXB0eURpcnR5UmVj
dCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKKworICAg
IC8vIENhc2UgMjogYmFzaWMuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JF
SEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHkx
KSk7Ci0gICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoZGlydHkxLCB0ZXN0TGF5ZXItPmRpcnR5UmVj
dCgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAotICAg
IC8vIENhc2UgMjogYSBzZWNvbmQgZGlydHkgcmVjdCBzaG91bGQgYmUgdW5pb25lZCBvZiBkaXJ0
eTEgYW5kIGRpcnR5Mi4KKyAgICAvLyBDYXNlIDM6IGEgc2Vjb25kIGRpcnR5IHJlY3QuCiAgICAg
RVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwg
dGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHkyKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX1JF
Q1RfRVEoRmxvYXRSZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYsIDE0LjBmKSwgdGVzdExheWVyLT5k
aXJ0eVJlY3QoKSk7Ci0KLSAgICAvLyBDYXNlIDM6IGRpcnR5IHJlY3Qgc2hvdWxkIG5vdCBjaGFu
Z2UgYmVjYXVzZSBvZiBhbiBlbXB0eSBkaXJ0eSByZWN0LgotICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVl
ZHNEaXNwbGF5KGVtcHR5RGlydHlSZWN0KSk7Ci0gICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxv
YXRSZWN0KDEwLjBmLCAxNS4wZiwgMTMuMGYsIDE0LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3Qo
KSk7CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKLSAgICAv
LyBDYXNlIDQ6IExheWVyQ2hyb21pdW0gc2hvdWxkIGFjY2VwdCBkaXJ0eSByZWN0cyB0aGF0IGdv
IGJleW9uZCBpdHMgYm91bmRzCisgICAgLy8gQ2FzZSA0OiBMYXllckNocm9taXVtIHNob3VsZCBh
Y2NlcHQgZGlydHkgcmVjdHMgdGhhdCBnbyBiZXlvbmQgaXRzIGJvdW5kcy4KKyAgICB0ZXN0TGF5
ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1vY2tEZWxlZ2F0ZSk7CisgICAgRVhFQ1VURV9B
TkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVy
LT5zZXRCb3VuZHModGVzdEJvdW5kcykpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllf
U1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5
KG91dE9mQm91bmRzRGlydHlSZWN0KSk7Ci0gICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRS
ZWN0KDEwLjBmLCAxNS4wZiwgODkwLjBmLCA4OTIuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgp
KTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAotICAgIC8v
IENhc2UgNTogc2V0TmVlZHNEaXNwbGF5KCkgd2l0aG91dCB0aGUgZGlydHkgcmVjdCBhcmcgc2hv
dWxkIGNhdXNlIHRoZSBlbnRpcmUgYm91bmRzIHRvIGJlIGRpcnR5LAotICAgIC8vICAgICAgICAg
b3ZlcnJpZGluZyBhbnkgZXhpc3RpbmcgZGlydHkgcmVjdC4KKyAgICAvLyBDYXNlIDU6IHNldE5l
ZWRzRGlzcGxheSgpIHdpdGhvdXQgdGhlIGRpcnR5IHJlY3QgYXJnLgorICAgIHRlc3RMYXllciA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbW9ja0RlbGVnYXRlKTsKKyAgICBFWEVDVVRFX0FORF9W
RVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNl
dEJvdW5kcyh0ZXN0Qm91bmRzKSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5D
X0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKSk7
Ci0gICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAsIDAsIHRlc3RCb3VuZHMud2lk
dGgoKSwgdGVzdEJvdW5kcy5oZWlnaHQoKSksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAg
IEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCi0gICAgLy8gcmVzZXRO
ZWVkc0Rpc3BsYXkgc2hvdWxkIGVtcHR5IHRoZSBkaXJ0eSByZWN0LCBhbmQgTk9UIGNhbGwgbm90
aWZ5U3luY1JlcXVpcmVkLgotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhB
VklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKSk7Ci0g
ICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIC8v
IENhc2UgNjogc2V0TmVlZHNEaXNwbGF5KCkgd2l0aG91dCB0aGUgZGlydHkgcmVjdCBhcmcgc2hv
dWxkIG5vdCBjYXVzZQorICAgIC8vIG5lZWRzRGlzcGxheSBmbGFnIHRvIGNoYW5nZSBmb3IgTGF5
ZXJDaHJvbWl1bSB3aXRoIGVtcHR5IGJvdW5kcy4KKyAgICB0ZXN0TGF5ZXIgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoJm1vY2tEZWxlZ2F0ZSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElG
WV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3Bs
YXkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogfQog
CiBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5V2l0aE51bGxE
ZWxlZ2F0ZSkKQEAgLTU5MCwxMyArNTk1LDEzIEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwg
Y2hlY2tTZXROZWVkc0Rpc3BsYXlXaXRoTnVsbERlbGVnYXRlKQogICAgIEZsb2F0UmVjdCBkaXJ0
eSA9IEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEuMGYsIDIuMGYpOwogCiAgICAgdGVzdExheWVy
LT5zZXRCb3VuZHModGVzdEJvdW5kcyk7Ci0gICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRS
ZWN0KDAuMGYsIDAuMGYsIDUwMS4wZiwgNTA4LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7
CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKLSAgICB0ZXN0
TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5k
aXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgwKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAK
ICAgICB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0eSk7Ci0gICAgRVhQRUNUX0ZMT0FU
X1JFQ1RfRVEoZGlydHksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9UUlVF
KHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogfQogCiBURVNUX0YoTGF5ZXJDaHJvbWl1bVRl
c3QsIGNoZWNrUHJvcGVydHlDaGFuZ2VDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCkBAIC02MDcsMTAg
KzYxMiwxMCBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVydHlDaGFuZ2VD
YXVzZXNDb3JyZWN0QmVoYXZpb3IpCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGR1bW15TGF5
ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1fc2lsZW50RGVsZWdhdGUpOyAvLyBqdXN0IGEg
ZHVtbXkgbGF5ZXIgZm9yIHRoaXMgdGVzdCBjYXNlLgogCiAgICAgLy8gc2FuaXR5IGNoZWNrIG9m
IGluaXRpYWwgdGVzdCBjb25kaXRpb24KLSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5
UmVjdCgpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNw
bGF5KCkpOwogCiAgICAgLy8gVGVzdCBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIG5vdCBjYWxsIG5l
ZWRzRGlzcGxheSBhbmQgbmVlZHNDb21taXQgd2hlbiBjaGFuZ2VkLgotICAgIC8vIG5vdGlmeVN5
bmNSZXF1aXJlZCBzaG91bGQgbm90IGJlIGNhbGxlZCwgYW5kIHRoZSBkaXJ0eVJlY3Qgc2hvdWxk
IHJlbWFpbiBzdGlsbCBlbXB0eS4KKyAgICAvLyBub3RpZnlTeW5jUmVxdWlyZWQgc2hvdWxkIG5v
dCBiZSBjYWxsZWQsIGFuZCB0aGUgbmVlZHNEaXNwbGF5IGZsYWcgc2hvdWxkIHJlbWFpbiBmYWxz
ZS4KICAgICBFWFBFQ1RfQ0FMTChpbml0aWFsRGVsZWdhdGUsIG5vdGlmeVN5bmNSZXF1aXJlZCgp
KS5UaW1lcygwKTsgLy8gb2xkIGRlbGVnYXRlIHNob3VsZCBub3QgYmUgdXNlZCB3aGVuIHNldERl
bGVnYXRlIGdpdmVzIGEgbmV3IGRlbGVnYXRlLgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJ
RllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0RGVsZWdhdGUo
Jm1vY2tEZWxlZ2F0ZSkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhB
VklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0TmFtZSgiVGVzdCBMYXllciIpKTsK
QEAgLTYyNSwxMCArNjMwLDEwIEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tQcm9w
ZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKICAgICBFWEVDVVRFX0FORF9WRVJJRllf
Tk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldERyYXdU
cmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0U2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkpOwogICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXll
ci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0KDQsIDUsIDYsIDcpKSk7Ci0gICAgRVhQ
RUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9G
QUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIE5leHQsIHRlc3QgcHJv
cGVydGllcyB0aGF0IHNob3VsZCBjYWxsIHNldE5lZWRzQ29tbWl0IChidXQgbm90IHNldE5lZWRz
RGlzcGxheSkKLSAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIHNob3VsZCBpbmRpcmVjdGx5IGNhbGwg
bm90aWZ5U3luY1JlcXVpcmVkLCBidXQgdGhlIGRpcnR5IHJlY3Qgc2hvdWxkIG5vdCBjaGFuZ2Uu
CisgICAgLy8gVGhlc2UgcHJvcGVydGllcyBzaG91bGQgaW5kaXJlY3RseSBjYWxsIG5vdGlmeVN5
bmNSZXF1aXJlZCwgYnV0IHRoZSBuZWVkc0Rpc3BsYXkgZmxhZyBzaG91bGQgbm90IGNoYW5nZS4K
ICAgICAvLyBOb3RlIHRoYXQgZm9yIG1hbnkgb2YgdGhlc2UgcHJvcGVydGllcyBpdCBpcyBpbXBv
cnRhbnQgdG8gdGVzdCBzZXR0aW5nIHRoZSBwcm9wZXJ0eSB0byBhIHZhbHVlIHRoYXQKICAgICAv
LyBpcyBkaWZmZXJlbnQgdGhhbiB3aGF0IHRoZSBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyBpdCB0
by4KICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVn
YXRlLCAxLCB0ZXN0TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMS4yM2YsIDQuNTZm
KSkpOwpAQCAtNjQ0LDE1ICs2NDksMTMgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVj
a1Byb3BlcnR5Q2hhbmdlQ2F1c2VzQ29ycmVjdEJlaGF2aW9yKQogICAgIEVYRUNVVEVfQU5EX1ZF
UklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0
VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJ
RllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldERv
dWJsZVNpZGVkKGZhbHNlKSk7CiAKLSAgICAvLyBUaGUgYWJvdmUgdGVzdHMgc2hvdWxkIG5vdCBo
YXZlIGNhdXNlZCBhIG5vbi1lbXB0eSBkaXJ0eSByZWN0LgotICAgIEVYUEVDVF9UUlVFKHRlc3RM
YXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICAvLyBUaGUgYWJvdmUgdGVzdHMgc2hv
dWxkIG5vdCBoYXZlIGNhdXNlZCBhIGNoYW5nZSB0byB0aGUgbmVlZHNEaXNwbGF5IGZsYWcuCisg
ICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gVGVz
dCBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGNhbGwgc2V0TmVlZHNEaXNwbGF5Ci0gICAgLy8gVGhl
c2UgcHJvcGVydGllcyB3aWxsIGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkIGFuZCBjaGFuZ2UgdGhl
IGRpcnR5IHJlY3QuCisgICAgLy8gVGhlc2UgcHJvcGVydGllcyB3aWxsIGNhbGwgbm90aWZ5U3lu
Y1JlcXVpcmVkIGFuZCBjaGFuZ2UgdGhlIG5lZWRzRGlzcGxheSBmbGFnLgogICAgIEVYRUNVVEVf
QU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXll
ci0+c2V0Qm91bmRzKEludFNpemUoNSwgMTApKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEo
RmxvYXRSZWN0KDAuMGYsIDAuMGYsIDUuMGYsIDEwLjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3Qo
KSk7Ci0gICAgdGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgpOwotICAgIEVYUEVDVF9UUlVF
KHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0
TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIEZJWE1FOiBuZWVkIHRvIGFkZCBhIHRl
c3QgZm9yIHNldExheWVyVHJlZUhvc3Qgd2l0aCBhIG5vbi1udWxsIHN0dWJiZWQgQ0NMYXllclRy
ZWVIb3N0LgogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117324</attachid>
            <date>2011-11-30 21:19:32 -0800</date>
            <delta_ts>2011-11-30 21:40:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71872-20111201001930.patch</filename>
            <type>text/plain</type>
            <size>24306</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWUyYzZlMmI5MTdiZWI3
MmVhM2QyZjU1NDRjZmMyNDRjZDkwZTBkZi4uMTEwYTZmYTE1ODJkN2RkODZlMDMyOTM0YjBkYmJj
MzViZDVhYzAzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDExLTExLTMwICBEYXZp
ZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBJ
bXByb3ZlIHRpbGUgaW52YWxpZGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzE4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBWaXJ0dWFsaXplIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxh
eSBzbyB0aGF0IGRpcnR5IHJlY3RhbmdsZXMgY2FuCisgICAgICAgIGJlIGhhbmRsZWQgZGlyZWN0
bHkgYnkgdGhlIFRpbGVkTGF5ZXJDaHJvbWl1bSBjbGFzcy4gUmVwbGFjZQorICAgICAgICBMYXll
ckNocm9taXVtOjpkaXJ0eVJlY3QoKSB3aXRoIExheWVyQ2hyb21pdW06Om5lZWRzRGlzcGxheSgp
IGFuZAorICAgICAgICByZW1vdmUgdW5uZWNlc3NhcnkgdW5pb24gb2YgZGlydHkgcmVjdGFuZ2xl
cy4gQnkgaW52YWxpZGF0aW5nIGV4aXN0aW5nCisgICAgICAgIHRpbGVzIHVzaW5nIHRoZSBpbml0
aWFsIGRpcnR5IHJlY3RhbmdsZXMgaW5zdGVhZCBvZiB0aGVpciB1bmlvbiB3ZQorICAgICAgICBh
dm9pZCBhIGxhcmdlIGFtb3VudCBvZiB1bm5lY2Vzc2FyeSB0aWxlIHVwZGF0ZXMuCisKKyAgICAg
ICAgVXBkYXRlIExheWVyQ2hyb21pdW1UZXN0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9P
UFMhKQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpzZXRDb250ZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6bmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNo
cm9taXVtOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNo
cm9taXVtOjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVv
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6
CisKIDIwMTEtMTEtMzAgIEFubmEgQ2F2ZW5kZXIgIDxhbm5hY2NAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIE1pc3NpbmcgUnVudGltZUVuYWJsZWQgY2hlY2sgZm9yIDx0cmFjaz4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKaW5kZXggMDQwNTlmYjU3ZThmZmZlYjU3Nzk2NDFjOTE4Y2MyZTIzMGVm
YjI5Ni4uMGFkNzYyYmU4ZDM0NWJlZGM5NzQzMDJlNDc1MjNjZGQ0MGZlMGNkNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMS0xMS0zMCAgRGF2aWQgUmV2
ZW1hbiAgPHJldmVtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gSW1wcm92
ZSB0aWxlIGludmFsaWRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcxODcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUmVtb3ZlIHB1YmxpYyBBUEkgZnVuY3Rpb24gV2ViQ29udGVudExheWVyOjpp
bnZhbGlkUmVjdCgpLiBBZGQgbmV3CisgICAgICAgIHRlc3QgY2FzZSB0bworICAgICAgICBMYXll
ckNocm9taXVtVGVzdC5jaGVja1NldE5lZWRzRGlzcGxheUNhdXNlc0NvcnJlY3RCZWhhdmlvciB0
aGF0CisgICAgICAgIHZlcmlmaWVzIHRoYXQgY2FsbGluZyBzZXROZWVkc0Rpc3BsYXkoKSBvbiBh
IExheWVyQ2hyb21pdW0gd2l0aAorICAgICAgICBlbXB0eSBib3VuZHMgaXMgaGFuZGxlZCBjb3Jy
ZWN0bHkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViQ29udGVudExheWVyLmg6CisgICAgICAgICog
c3JjL1dlYkNvbnRlbnRMYXllci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXll
cjo6aW52YWxpZGF0ZSk6CisgICAgICAgICogdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgor
CiAyMDExLTExLTMwICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBnZXQgcmlkIG9mIGRlZmVycmVkIGJhY2tlbmQtPmZyb250LWVu
ZCBjb21tYW5kcyBwcm9jZXNzaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggNDQ5NDU4NmE1N2NhMTZiYzRiNGYyMzI0MTBkYjhmN2ZkNGNkODhjMS4uYjBjNGUw
NzM5NDZiYTVlNTFlM2RjNmEyNTM3MzZhMGVjYTM4Y2FjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMy
RExheWVyQ2hyb21pdW0uY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIGJvb2wgQ2FudmFzMkRMYXllckNo
cm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogCiB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVy
ZVVwZGF0ZXImKQogewotICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5KCkgfHwgIWRyYXdzQ29u
dGVudCgpKQorICAgIGlmICghbV9uZWVkc0Rpc3BsYXkgfHwgIWRyYXdzQ29udGVudCgpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAobV9jb250ZXh0KSB7CkBAIC04Miw3ICs4Miw3IEBAIHZv
aWQgQ2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBo
aWNzQ29udGV4dDNEKiwgQ0NUZXh0CiAgICAgfQogCiAgICAgbV91cGRhdGVSZWN0ID0gRmxvYXRS
ZWN0KEZsb2F0UG9pbnQoKSwgYm91bmRzKCkpOwotICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7Cisg
ICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKIH0KIAogdm9pZCBDYW52YXMyRExheWVyQ2hyb21p
dW06OmNvbnRlbnRDaGFuZ2VkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApp
bmRleCA5ZWIxZDc5OWY2ZDkxZWNlYzY3OTgxMDZlYzYwMjdiYjQxZTUyNTIwLi44ZGY2OTM0MzI1
M2JiYWQzYjUxMzM3ODZkNjU5MzVlYjkwZDYzZWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uY3BwCkBAIC0xMDMsMTIgKzEwMyw4IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21p
dW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKICAgICBpZiAoZHJhd3NDb250ZW50KCkpCiAgICAg
ICAgIGxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKIAotICAgIEludFJlY3QgZGlydHkg
PSBlbmNsb3NpbmdJbnRSZWN0KG1fZGlydHlSZWN0KTsKLSAgICBkaXJ0eS5pbnRlcnNlY3QoSW50
UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkpKTsKLSAgICBpbnZhbGlkYXRlUmVjdChk
aXJ0eSk7Ci0KICAgICBwcmVwYXJlVG9VcGRhdGUobGF5ZXJSZWN0KTsKLSAgICByZXNldE5lZWRz
RGlzcGxheSgpOworICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CiAKIGJvb2wgQ29udGVu
dExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNo
cm9taXVtLmNwcAppbmRleCA5ZDNlOWYzYTFlNzBkZWU1ZjE5ZTNjZjBiMjQ4Yjk0M2FmYTEwMmMw
Li42YjhlYzZlZDE0OTJlNGVkNzBlMGRkZjM5YTUyZmE4NjNmODRhMjc1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTEzOSwyMCArMTM5LDE5IEBAIHZvaWQgSW1hZ2VMYXll
ckNocm9taXVtOjpzZXRDb250ZW50cyhJbWFnZSogY29udGVudHMpCiAKICAgICBtX2NvbnRlbnRz
ID0gY29udGVudHM7CiAgICAgbV9pbWFnZUZvckN1cnJlbnRGcmFtZSA9IG1fY29udGVudHMtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgbV9kaXJ0eVJlY3QgPSBJbnRSZWN0KElu
dFBvaW50KDAsIDApLCBib3VuZHMoKSk7Ci0gICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgTGF5
ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgc2V0T3BhcXVlKCFtX2NvbnRlbnRz
LT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsKIH0KIAogdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06
OnBhaW50Q29udGVudHNJZkRpcnR5KCkKIHsKLSAgICBpZiAoIW1fZGlydHlSZWN0LmlzRW1wdHko
KSkgeworICAgIGlmIChtX25lZWRzRGlzcGxheSkgewogICAgICAgICBtX3RleHR1cmVVcGRhdGVy
LT51cGRhdGVGcm9tSW1hZ2UobV9jb250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KSk7CiAgICAgICAgIHVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCk7CiAgICAgICAgIElu
dFJlY3QgcGFpbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSk7Ci0gICAgICAgIGlm
ICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX25lZWRzRGlzcGxheSkg
ewogICAgICAgICAgICAgaW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0KTsKLSAgICAgICAgICAgIHJl
c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgICAgICAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwog
ICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDU0YTdmODg1N2Q2
ODkwMzg2YWVmYTg1NjZhOGQyN2Q1ZDVjZTUwMjguLjExZTFlMTNhYmQxNTViNzg0YzBkODQ4NmRh
Njk5ZGY0NmVkMDhmZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC01Niw2ICs1Niw3IEBA
IFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJE
ZWxlZ2F0ZSogZGVsZWdhdGUpCiAKIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oQ0NMYXll
ckRlbGVnYXRlKiBkZWxlZ2F0ZSkKICAgICA6IG1fZGVsZWdhdGUoZGVsZWdhdGUpCisgICAgLCBt
X25lZWRzRGlzcGxheShmYWxzZSkKICAgICAsIG1fbGF5ZXJJZChzX25leHRMYXllcklkKyspCiAg
ICAgLCBtX3BhcmVudCgwKQogICAgICwgbV9zY3JvbGxhYmxlKGZhbHNlKQpAQCAtMjYzLDIyICsy
NjQsMTIgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRS
ZWN0JiBkaXJ0eVJlY3QpCiAgICAgLy8gU2ltcGx5IG1hcmsgdGhlIGNvbnRlbnRzIGFzIGRpcnR5
LiBGb3Igbm9uLXJvb3QgbGF5ZXJzLCB0aGUgY2FsbCB0bwogICAgIC8vIHNldE5lZWRzQ29tbWl0
IHdpbGwgc2NoZWR1bGUgYSBmcmVzaCBjb21wb3NpdGluZyBwYXNzLgogICAgIC8vIEZvciB0aGUg
cm9vdCBsYXllciwgc2V0TmVlZHNDb21taXQgaGFzIG5vIGVmZmVjdC4KLSAgICBtX2RpcnR5UmVj
dC51bml0ZShkaXJ0eVJlY3QpOwotICAgIHNldE5lZWRzQ29tbWl0KCk7Ci19CisgICAgaWYgKCFk
aXJ0eVJlY3QuaXNFbXB0eSgpKQorICAgICAgICBtX25lZWRzRGlzcGxheSA9IHRydWU7CiAKLXZv
aWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBtX2RpcnR5UmVjdC5z
ZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOwotICAgIG1fZGlydHlSZWN0LnNldFNpemUoYm91bmRz
KCkpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLXZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVz
ZXROZWVkc0Rpc3BsYXkoKQotewotICAgIG1fZGlydHlSZWN0ID0gRmxvYXRSZWN0KCk7Ci19Ci0K
IHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIp
CiB7CiAgICAgbGF5ZXItPnNldEFuY2hvclBvaW50KG1fYW5jaG9yUG9pbnQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oCmluZGV4IDcxM2RmYjI1MjMwMTA4NmZmYTdlNTgxYzA0MjA0NzVlOGJkZmZiN2QuLjcx
NThjOWFkZGU3MGVhMzU1OTk4YzNlZjg1MjM5MjM2ZWY5YmIwOGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmgKQEAgLTEwNSwxMCArMTA1LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TWFza0xheWVyKExh
eWVyQ2hyb21pdW0qIG1hc2tMYXllcikgeyBtX21hc2tMYXllciA9IG1hc2tMYXllcjsgc2V0TmVl
ZHNDb21taXQoKTsgfQogICAgIExheWVyQ2hyb21pdW0qIG1hc2tMYXllcigpIGNvbnN0IHsgcmV0
dXJuIG1fbWFza0xheWVyLmdldCgpOyB9CiAKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25z
dCBGbG9hdFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLSAg
ICBjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlydHlSZWN0
OyB9Ci0gICAgdm9pZCByZXNldE5lZWRzRGlzcGxheSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KCkgeyBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgY29u
dGVudEJvdW5kcygpKSk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbmVlZHNEaXNwbGF5KCkgY29uc3Qg
eyByZXR1cm4gbV9uZWVkc0Rpc3BsYXk7IH0KIAogICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCBv
cGFjaXR5KSB7IG1fb3BhY2l0eSA9IG9wYWNpdHk7IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBm
bG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CkBAIC0yMTgsOCArMjE3
LDggQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBzZXROZWVkc0NvbW1pdCgpOwogCi0gICAgLy8g
VGhlIGRpcnR5IHJlY3QgaXMgdGhlIHVuaW9uIG9mIGRhbWFnZWQgcmVnaW9ucyB0aGF0IG5lZWQg
cmVwYWludGluZy91cGRhdGluZy4KLSAgICBGbG9hdFJlY3QgbV9kaXJ0eVJlY3Q7CisgICAgLy8g
VGhpcyBmbGFnIGlzIHNldCB3aGVuIGxheWVyIG5lZWQgcmVwYWludGluZy91cGRhdGluZy4KKyAg
ICBib29sIG1fbmVlZHNEaXNwbGF5OwogCiAgICAgLy8gVGhlIHVwZGF0ZSByZWN0IGlzIHRoZSBy
ZWdpb24gb2YgdGhlIGNvbXBvc2l0b3IgcmVzb3VyY2UgdGhhdCB3YXMgYWN0dWFsbHkgdXBkYXRl
ZCBieSB0aGUgY29tcG9zaXRvci4KICAgICAvLyBGb3IgbGF5ZXJzIHRoYXQgbWF5IGRvIHVwZGF0
aW5nIG91dHNpZGUgdGhlIGNvbXBvc2l0b3IncyBjb250cm9sIChpLmUuIHBsdWdpbiBsYXllcnMp
LCB0aGlzIGluZm9ybWF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCBm
ZmFkMmY1YjE3NWM5NjY1ZDY2NTc1YmFmY2MzOWJmY2VlMGUxZTZhLi40ZTdkZmZhM2IwYjFkOTQ4
Y2M4NTdjZjIxYmVlNTdmZDg2MGQwYTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAKQEAgLTI4NSwxMyArMjg1LDE4IEBAIFVwZGF0YWJsZVRpbGUqIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlVGlsZShpbnQgaSwgaW50IGopCiAgICAgcmV0dXJuIHRpbGUuZ2V0KCk7CiB9CiAK
K3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0
JiBkaXJ0eVJlY3QpCit7CisgICAgSW50UmVjdCBkaXJ0eSA9IGVuY2xvc2luZ0ludFJlY3QoZGly
dHlSZWN0KTsKKyAgICBpbnZhbGlkYXRlUmVjdChkaXJ0eSk7CisgICAgTGF5ZXJDaHJvbWl1bTo6
c2V0TmVlZHNEaXNwbGF5KGRpcnR5UmVjdCk7Cit9CisKIHZvaWQgVGlsZWRMYXllckNocm9taXVt
OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKIHsKICAgICBpZiAo
IW1fdGlsZXIgfHwgY29udGVudFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNEcmF3KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJlY3Qp
OwotCiAgICAgLy8gRGlydHkgcmVjdHMgYXJlIGFsd2F5cyBpbiBsYXllciBzcGFjZSwgYXMgdGhl
IGxheWVyIGNvdWxkIGJlIHJlcG9zaXRpb25lZAogICAgIC8vIGFmdGVyIGludmFsaWRhdGlvbi4K
ICAgICBjb25zdCBJbnRSZWN0IGxheWVyUmVjdCA9IG1fdGlsZXItPmNvbnRlbnRSZWN0VG9MYXll
clJlY3QoY29udGVudFJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAppbmRleCAzNjNk
YTYxODU4MDJlZWRjNzRmNTE1MmFlNDlmMzg3YzkyZGMwZjhlLi40MTU5Zjk1N2YxOTk5NWU5Yzk5
MzY0NGFkZmZkYTJjM2U5ZTcyOTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaApAQCAt
NTMsNiArNTMsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEludFNpemUgY29udGVudEJvdW5k
cygpIGNvbnN0OwogCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9h
dFJlY3QmKTsKKwogICAgIC8vIFJlc2VydmVzIGFsbCBleGlzdGluZyBhbmQgdmFsaWQgdGlsZSB0
ZXh0dXJlcyB0byBwcm90ZWN0IHRoZW0gZnJvbSBiZWluZwogICAgIC8vIHJlY3ljbGVkIGJ5IHRo
ZSB0ZXh0dXJlIG1hbmFnZXIuCiAgICAgdm9pZCBwcm90ZWN0VGlsZVRleHR1cmVzKGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCmluZGV4
IDE5YTk5M2JkYjllZDk3MDJkNWQ0ZDQyOTBlNjgxNDEyYjE1MzJjYjAuLmVjOTNmMTY4ZGExNGVh
NDFlM2MxNmRmNmQ3YzQ5YmVlNDUxM2VhY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVt
LmNwcApAQCAtODMsNyArODMsNyBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQwogICAgIGlmICgh
bV9kZWxlZ2F0ZSB8fCAhbV9wcm92aWRlciB8fCAhZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5KCkgJiYgdGV4dHVyZXNWYWxpZCgp
KSB7CisgICAgaWYgKCFtX25lZWRzRGlzcGxheSAmJiB0ZXh0dXJlc1ZhbGlkKCkpIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgbV9wbGFuZXM7IHBsYW5lKyspIHsK
ICAgICAgICAgICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXggPSBtX3RleHR1cmVzW3BsYW5lXS5tX3Rl
eHR1cmUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIXRleC0+cmVzZXJ2ZSh0ZXgtPnNpemUoKSwg
dGV4LT5mb3JtYXQoKSkpIHsKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCwgQwogICAgICAgICBtX25hdGl2ZVRleHR1cmVJZCA9IGZyYW1lLT50ZXh0dXJlSWQoKTsKICAg
ICAgICAgbV9uYXRpdmVUZXh0dXJlU2l6ZSA9IEludFNpemUoZnJhbWUtPndpZHRoKCksIGZyYW1l
LT5oZWlnaHQoKSk7CiAgICAgICAgIG1fbmF0aXZlVGV4dHVyZVZpc2libGVTaXplID0gSW50U2l6
ZShmcmFtZS0+d2lkdGgoKSwgZnJhbWUtPmhlaWdodCgpKTsKLSAgICAgICAgcmVzZXROZWVkc0Rp
c3BsYXkoKTsKKyAgICAgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKICAgICAgICAgbV9wcm92
aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTE0NCw3ICsxNDQsNyBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQwogICAgIEFTU0VSVChtX3Bs
YW5lcyA8PSBNYXhQbGFuZXMpOwogCiAgICAgbV91cGRhdGVSZWN0ID0gRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgYm91bmRzKCkpOwotICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbV9uZWVk
c0Rpc3BsYXkgPSBmYWxzZTsKIAogICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFt
ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAppbmRleCAyNzZmM2M5ZmMyZmUx
MDdmMTYzYjJhYmEwOThjMDNmYmIzMzQ0Y2I2Li43YWE5ODZlY2Y3MTIxNmNlMTgzNzA1NWUwMTAx
MzRkOTU0ODk5MjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTcxLDcg
KzcxLDcgQEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoR3JhcGhpY3NDb250ZXh0M0QqIHJlbmRlcmVyQ28KICAgICBpZiAoIWRyYXdzQ29udGVudCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9kaXJ0eVJlY3QuaXNFbXB0eSgpKQorICAg
IGlmICghbV9uZWVkc0Rpc3BsYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3RleHR1
cmVDaGFuZ2VkKSB7CkBAIC04NSwxMiArODUsMTIgQEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06
OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIHJlbmRlcmVyQ28K
ICAgICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9IGZhbHNlOwogICAgIH0KICAgICAvLyBVcGRhdGUg
dGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0dXJlIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuCi0gICAg
aWYgKCFtX2RpcnR5UmVjdC5pc0VtcHR5KCkgJiYgbV90ZXh0dXJlVXBkYXRlZCkgeworICAgIGlm
IChtX25lZWRzRGlzcGxheSAmJiBtX3RleHR1cmVVcGRhdGVkKSB7CiAgICAgICAgIC8vIHB1Ymxp
c2hUb1BsYXRmb3JtTGF5ZXIgcHJlcGFyZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBvZmYtc2NyZWVu
IHJlbmRlciB0YXJnZXQgZm9yIHVzZSBieSB0aGUgY29tcG9zaXRvci4KICAgICAgICAgZHJhd2lu
Z0J1ZmZlcigpLT5wdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCk7CiAgICAgICAgIGNvbnRleHQoKS0+
bWFya0xheWVyQ29tcG9zaXRlZCgpOwogICAgICAgICBtX3VwZGF0ZVJlY3QgPSBGbG9hdFJlY3Qo
RmxvYXRQb2ludCgpLCBib3VuZHMoKSk7Ci0gICAgICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7Cisg
ICAgICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZWQg
PSBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJDb250ZW50TGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkNvbnRlbnRMYXllci5oCmluZGV4IGUzYzE5N2EzM2E4OTI0NzBjNzljMDE3MDRhODVlMWUwZmNj
NGZkY2QuLmY3YTk4YzEzYmVlMDk0ZmM2ZmY1ZGE5ZmU4MWU1ODhlYWVmOTZhN2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllci5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllci5oCkBAIC02MCw5
ICs2MCw2IEBAIHB1YmxpYzoKICAgICAvLyBTZXRzIHRoZSBlbnRpcmUgbGF5ZXIgYXMgaW52YWxp
ZCwgaS5lLiBuZWVkcyB0byB1cGRhdGUgaXRzIGNvbnRlbnQuCiAgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIGludmFsaWRhdGUoKTsKIAotICAgIC8vIFJldHVybnMgdGhlIHJlZ2lvbiBvZiB0aGUgbGF5
ZXIgdGhhdCBpcyBjdXJyZW50bHkgaW52YWxpZC4KLSAgICBXRUJLSVRfRVhQT1JUIFdlYkZsb2F0
UmVjdCBpbnZhbGlkUmVjdCgpIGNvbnN0OwotCiAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCiAg
ICAgV2ViQ29udGVudExheWVyKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb250ZW50TGF5ZXJJ
bXBsPiYpOwogICAgIFdlYkNvbnRlbnRMYXllciYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkNvbnRlbnRMYXllci5jcHAKaW5kZXggZGU4ZDk5OGFlOThjNGMxY2RlZDU2YjdhNDg3
OGM4ZjM0NGUyOGFkOC4uOTljYmYwNTg4ZjA1N2NkNzUyMDZjMDI0OTQwZTA3ZDllZDlhY2IyZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwCkBA
IC01MywxMiArNTMsNyBAQCB2b2lkIFdlYkNvbnRlbnRMYXllcjo6aW52YWxpZGF0ZVJlY3QoY29u
c3QgV2ViRmxvYXRSZWN0JiBkaXJ0eVJlY3QpCiAKIHZvaWQgV2ViQ29udGVudExheWVyOjppbnZh
bGlkYXRlKCkKIHsKLSAgICB1bndyYXA8V2ViQ29udGVudExheWVySW1wbD4oKS0+c2V0TmVlZHNE
aXNwbGF5KCk7Ci19Ci0KLVdlYkZsb2F0UmVjdCBXZWJDb250ZW50TGF5ZXI6OmludmFsaWRSZWN0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gV2ViRmxvYXRSZWN0KGNvbnN0VW53cmFwPFdlYkNvbnRl
bnRMYXllckltcGw+KCktPmRpcnR5UmVjdCgpKTsKKyAgICB1bndyYXA8V2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bT4oKS0+c2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKIFdlYkNvbnRlbnRMYXllcjo6V2Vi
Q29udGVudExheWVyKGNvbnN0IFBhc3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4mIG5vZGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1U
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3Qu
Y3BwCmluZGV4IDc4MDlkMThhNDM2NzBkNDhhYTc4NjFmYjg3MDQ2NTYyODU5M2ZhMjcuLjg4ZDUx
Njc2YTBlMTg1M2Y1YjgyZjFmODUwYzdmMDEzYmRhODIxYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC01MzIsNyArNTMy
LDcgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBnZXRSb290TGF5ZXJBZnRlclRyZWVNYW5p
cHVsYXRpb25zKQogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRzRGlzcGxh
eUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKIHsKICAgICAvLyBUaGUgc2VtYW50aWNzIGZvciBzZXRO
ZWVkc0Rpc3BsYXkgd2hpY2ggYXJlIHRlc3RlZCBoZXJlOgotICAgIC8vICAgMS4gY3JlYXRlcyBh
IHVuaW9uZWQgZGlydHlSZWN0IGFwcHJvcHJpYXRlbHkuCisgICAgLy8gICAxLiBzZXRzIG5lZWRz
RGlzcGxheSBmbGFnIGFwcHJvcHJpYXRlbHkuCiAgICAgLy8gICAyLiBpbmRpcmVjdGx5IGNhbGxz
IG5vdGlmeVN5bmNSZXF1aXJlZCwgZXhhY3RseSBvbmNlIGZvciBlYWNoIGNhbGwgdG8gc2V0TmVl
ZHNEaXNwbGF5LgogCiAgICAgTW9ja0xheWVyRGVsZWdhdGUgbW9ja0RlbGVnYXRlOwpAQCAtNTQ0
LDQwICs1NDQsNDUgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRzRGlz
cGxheUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKICAgICBGbG9hdFJlY3QgZW1wdHlEaXJ0eVJlY3Qg
PSBGbG9hdFJlY3QoNDAuMGYsIDQ1LjBmLCAwLCAwKTsKICAgICBGbG9hdFJlY3Qgb3V0T2ZCb3Vu
ZHNEaXJ0eVJlY3QgPSBGbG9hdFJlY3QoNDAwLjBmLCA0MDUuMGYsIDUwMC4wZiwgNTAyLjBmKTsK
IAotICAgIC8vIEJlZm9yZSBhbnl0aGluZywgdGVzdExheWVyIHNob3VsZCBoYXZlIGFuIGVtcHR5
IGRpcnR5IHJlY3QuCi0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0Vt
cHR5KCkpOworICAgIC8vIEJlZm9yZSBhbnl0aGluZywgdGVzdExheWVyIHNob3VsZCBub3QgYmUg
ZGlydHkuCisgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCiAg
ICAgLy8gVGhpcyBpcyBqdXN0IGluaXRpYWxpemF0aW9uLCBidXQgbm90aWZ5U3luY1JlcXVpcmVk
IGJlaGF2aW9yIGlzIHZlcmlmaWVkIGFueXdheSB0byBhdm9pZCB3YXJuaW5ncy4KICAgICBFWEVD
VVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0
TGF5ZXItPnNldEJvdW5kcyh0ZXN0Qm91bmRzKSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05P
VElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5yZXNldE5lZWRz
RGlzcGxheSgpKTsKLSAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1w
dHkoKSk7CisgICAgdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtb2NrRGVsZWdh
dGUpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAg
IC8vIFRoZSByZWFsIHRlc3QgYmVnaW5zIGhlcmUuCiAKLSAgICAvLyBDYXNlIDE6IGJhc2ljCisg
ICAgLy8gQ2FzZSAxOiBuZWVkc0Rpc3BsYXkgZmxhZyBzaG91bGQgbm90IGNoYW5nZSBiZWNhdXNl
IG9mIGFuIGVtcHR5IGRpcnR5IHJlY3QuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9T
WU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXko
ZW1wdHlEaXJ0eVJlY3QpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3Bs
YXkoKSk7CisKKyAgICAvLyBDYXNlIDI6IGJhc2ljLgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9O
T1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNE
aXNwbGF5KGRpcnR5MSkpOwotICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKGRpcnR5MSwgdGVzdExh
eWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3Bs
YXkoKSk7CiAKLSAgICAvLyBDYXNlIDI6IGEgc2Vjb25kIGRpcnR5IHJlY3Qgc2hvdWxkIGJlIHVu
aW9uZWQgb2YgZGlydHkxIGFuZCBkaXJ0eTIuCisgICAgLy8gQ2FzZSAzOiBhIHNlY29uZCBkaXJ0
eSByZWN0LgogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2Nr
RGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5MikpOwotICAgIEVY
UEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEzLjBmLCAxNC4wZiks
IHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOwotCi0gICAgLy8gQ2FzZSAzOiBkaXJ0eSByZWN0IHNo
b3VsZCBub3QgY2hhbmdlIGJlY2F1c2Ugb2YgYW4gZW1wdHkgZGlydHkgcmVjdC4KLSAgICBFWEVD
VVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0
TGF5ZXItPnNldE5lZWRzRGlzcGxheShlbXB0eURpcnR5UmVjdCkpOwotICAgIEVYUEVDVF9GTE9B
VF9SRUNUX0VRKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEzLjBmLCAxNC4wZiksIHRlc3RMYXll
ci0+ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5
KCkpOwogCi0gICAgLy8gQ2FzZSA0OiBMYXllckNocm9taXVtIHNob3VsZCBhY2NlcHQgZGlydHkg
cmVjdHMgdGhhdCBnbyBiZXlvbmQgaXRzIGJvdW5kcworICAgIC8vIENhc2UgNDogTGF5ZXJDaHJv
bWl1bSBzaG91bGQgYWNjZXB0IGRpcnR5IHJlY3RzIHRoYXQgZ28gYmV5b25kIGl0cyBib3VuZHMu
CisgICAgdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtb2NrRGVsZWdhdGUpOwor
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUs
IDEsIHRlc3RMYXllci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpKTsKICAgICBFWEVDVVRFX0FORF9W
RVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNl
dE5lZWRzRGlzcGxheShvdXRPZkJvdW5kc0RpcnR5UmVjdCkpOwotICAgIEVYUEVDVF9GTE9BVF9S
RUNUX0VRKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDg5MC4wZiwgODkyLjBmKSwgdGVzdExheWVy
LT5kaXJ0eVJlY3QoKSk7CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXko
KSk7CiAKLSAgICAvLyBDYXNlIDU6IHNldE5lZWRzRGlzcGxheSgpIHdpdGhvdXQgdGhlIGRpcnR5
IHJlY3QgYXJnIHNob3VsZCBjYXVzZSB0aGUgZW50aXJlIGJvdW5kcyB0byBiZSBkaXJ0eSwKLSAg
ICAvLyAgICAgICAgIG92ZXJyaWRpbmcgYW55IGV4aXN0aW5nIGRpcnR5IHJlY3QuCisgICAgLy8g
Q2FzZSA1OiBzZXROZWVkc0Rpc3BsYXkoKSB3aXRob3V0IHRoZSBkaXJ0eSByZWN0IGFyZy4KKyAg
ICB0ZXN0TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoJm1vY2tEZWxlZ2F0ZSk7CisgICAg
RVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwg
dGVzdExheWVyLT5zZXRCb3VuZHModGVzdEJvdW5kcykpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVl
ZHNEaXNwbGF5KCkpOwotICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAwLCB0
ZXN0Qm91bmRzLndpZHRoKCksIHRlc3RCb3VuZHMuaGVpZ2h0KCkpLCB0ZXN0TGF5ZXItPmRpcnR5
UmVjdCgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAot
ICAgIC8vIHJlc2V0TmVlZHNEaXNwbGF5IHNob3VsZCBlbXB0eSB0aGUgZGlydHkgcmVjdCwgYW5k
IE5PVCBjYWxsIG5vdGlmeVN5bmNSZXF1aXJlZC4KLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9U
SUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnJlc2V0TmVlZHNE
aXNwbGF5KCkpOwotICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0
eSgpKTsKKyAgICAvLyBDYXNlIDY6IHNldE5lZWRzRGlzcGxheSgpIHdpdGhvdXQgdGhlIGRpcnR5
IHJlY3QgYXJnIHNob3VsZCBub3QgY2F1c2UKKyAgICAvLyBuZWVkc0Rpc3BsYXkgZmxhZyB0byBj
aGFuZ2UgZm9yIExheWVyQ2hyb21pdW0gd2l0aCBlbXB0eSBib3VuZHMuCisgICAgdGVzdExheWVy
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtb2NrRGVsZWdhdGUpOworICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+
c2V0TmVlZHNEaXNwbGF5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlz
cGxheSgpKTsKIH0KIAogVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1NldE5lZWRzRGlz
cGxheVdpdGhOdWxsRGVsZWdhdGUpCkBAIC01OTAsMTMgKzU5NSwxMyBAQCBURVNUX0YoTGF5ZXJD
aHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5V2l0aE51bGxEZWxlZ2F0ZSkKICAgICBG
bG9hdFJlY3QgZGlydHkgPSBGbG9hdFJlY3QoMTAuMGYsIDE1LjBmLCAxLjBmLCAyLjBmKTsKIAog
ICAgIHRlc3RMYXllci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpOwotICAgIEVYUEVDVF9GTE9BVF9S
RUNUX0VRKEZsb2F0UmVjdCgwLjBmLCAwLjBmLCA1MDEuMGYsIDUwOC4wZiksIHRlc3RMYXllci0+
ZGlydHlSZWN0KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkp
OwogCi0gICAgdGVzdExheWVyLT5yZXNldE5lZWRzRGlzcGxheSgpOwotICAgIEVYUEVDVF9UUlVF
KHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICB0ZXN0TGF5ZXIgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNE
aXNwbGF5KCkpOwogCiAgICAgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHkpOwotICAg
IEVYUEVDVF9GTE9BVF9SRUNUX0VRKGRpcnR5LCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKKyAg
ICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIH0KIAogVEVTVF9GKExh
eWVyQ2hyb21pdW1UZXN0LCBjaGVja1Byb3BlcnR5Q2hhbmdlQ2F1c2VzQ29ycmVjdEJlaGF2aW9y
KQpAQCAtNjA3LDEwICs2MTIsMTAgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1By
b3BlcnR5Q2hhbmdlQ2F1c2VzQ29ycmVjdEJlaGF2aW9yKQogICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBkdW1teUxheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZtX3NpbGVudERlbGVnYXRl
KTsgLy8ganVzdCBhIGR1bW15IGxheWVyIGZvciB0aGlzIHRlc3QgY2FzZS4KIAogICAgIC8vIHNh
bml0eSBjaGVjayBvZiBpbml0aWFsIHRlc3QgY29uZGl0aW9uCi0gICAgRVhQRUNUX1RSVUUodGVz
dExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5
ZXItPm5lZWRzRGlzcGxheSgpKTsKIAogICAgIC8vIFRlc3QgcHJvcGVydGllcyB0aGF0IHNob3Vs
ZCBub3QgY2FsbCBuZWVkc0Rpc3BsYXkgYW5kIG5lZWRzQ29tbWl0IHdoZW4gY2hhbmdlZC4KLSAg
ICAvLyBub3RpZnlTeW5jUmVxdWlyZWQgc2hvdWxkIG5vdCBiZSBjYWxsZWQsIGFuZCB0aGUgZGly
dHlSZWN0IHNob3VsZCByZW1haW4gc3RpbGwgZW1wdHkuCisgICAgLy8gbm90aWZ5U3luY1JlcXVp
cmVkIHNob3VsZCBub3QgYmUgY2FsbGVkLCBhbmQgdGhlIG5lZWRzRGlzcGxheSBmbGFnIHNob3Vs
ZCByZW1haW4gZmFsc2UuCiAgICAgRVhQRUNUX0NBTEwoaW5pdGlhbERlbGVnYXRlLCBub3RpZnlT
eW5jUmVxdWlyZWQoKSkuVGltZXMoMCk7IC8vIG9sZCBkZWxlZ2F0ZSBzaG91bGQgbm90IGJlIHVz
ZWQgd2hlbiBzZXREZWxlZ2F0ZSBnaXZlcyBhIG5ldyBkZWxlZ2F0ZS4KICAgICBFWEVDVVRFX0FO
RF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXIt
PnNldERlbGVnYXRlKCZtb2NrRGVsZWdhdGUpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9U
SUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0TGF5ZXItPnNldE5hbWUoIlRl
c3QgTGF5ZXIiKSk7CkBAIC02MjUsMTAgKzYzMCwxMCBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRl
c3QsIGNoZWNrUHJvcGVydHlDaGFuZ2VDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiAgICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExh
eWVyLT5zZXREcmF3VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsKICAgICBFWEVD
VVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAwLCB0ZXN0
TGF5ZXItPnNldFNjcmVlblNwYWNlVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpKTsK
ICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRl
LCAwLCB0ZXN0TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCg0LCA1LCA2LCA3
KSkpOwotICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0eSgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBO
ZXh0LCB0ZXN0IHByb3BlcnRpZXMgdGhhdCBzaG91bGQgY2FsbCBzZXROZWVkc0NvbW1pdCAoYnV0
IG5vdCBzZXROZWVkc0Rpc3BsYXkpCi0gICAgLy8gVGhlc2UgcHJvcGVydGllcyBzaG91bGQgaW5k
aXJlY3RseSBjYWxsIG5vdGlmeVN5bmNSZXF1aXJlZCwgYnV0IHRoZSBkaXJ0eSByZWN0IHNob3Vs
ZCBub3QgY2hhbmdlLgorICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIGluZGlyZWN0bHkg
Y2FsbCBub3RpZnlTeW5jUmVxdWlyZWQsIGJ1dCB0aGUgbmVlZHNEaXNwbGF5IGZsYWcgc2hvdWxk
IG5vdCBjaGFuZ2UuCiAgICAgLy8gTm90ZSB0aGF0IGZvciBtYW55IG9mIHRoZXNlIHByb3BlcnRp
ZXMgaXQgaXMgaW1wb3J0YW50IHRvIHRlc3Qgc2V0dGluZyB0aGUgcHJvcGVydHkgdG8gYSB2YWx1
ZSB0aGF0CiAgICAgLy8gaXMgZGlmZmVyZW50IHRoYW4gd2hhdCB0aGUgY29uc3RydWN0b3IgaW5p
dGlhbGl6ZXMgaXQgdG8uCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFW
SU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50
KDEuMjNmLCA0LjU2ZikpKTsKQEAgLTY0NCwxNSArNjQ5LDEzIEBAIFRFU1RfRihMYXllckNocm9t
aXVtVGVzdCwgY2hlY2tQcm9wZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKICAgICBF
WEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0
ZXN0TGF5ZXItPnNldFRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKSk7CiAgICAgRVhF
Q1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVz
dExheWVyLT5zZXREb3VibGVTaWRlZChmYWxzZSkpOwogCi0gICAgLy8gVGhlIGFib3ZlIHRlc3Rz
IHNob3VsZCBub3QgaGF2ZSBjYXVzZWQgYSBub24tZW1wdHkgZGlydHkgcmVjdC4KLSAgICBFWFBF
Q1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAgLy8gVGhlIGFi
b3ZlIHRlc3RzIHNob3VsZCBub3QgaGF2ZSBjYXVzZWQgYSBjaGFuZ2UgdG8gdGhlIG5lZWRzRGlz
cGxheSBmbGFnLgorICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsK
IAogICAgIC8vIFRlc3QgcHJvcGVydGllcyB0aGF0IHNob3VsZCBjYWxsIHNldE5lZWRzRGlzcGxh
eQotICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgd2lsbCBjYWxsIG5vdGlmeVN5bmNSZXF1aXJlZCBh
bmQgY2hhbmdlIHRoZSBkaXJ0eSByZWN0LgorICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgd2lsbCBj
YWxsIG5vdGlmeVN5bmNSZXF1aXJlZCBhbmQgY2hhbmdlIHRoZSBuZWVkc0Rpc3BsYXkgZmxhZy4K
ICAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRl
LCAxLCB0ZXN0TGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDUsIDEwKSkpOwotICAgIEVYUEVDVF9G
TE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLjBmLCAwLjBmLCA1LjBmLCAxMC4wZiksIHRlc3RMYXll
ci0+ZGlydHlSZWN0KCkpOwotICAgIHRlc3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKTsKLSAg
ICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAgRVhQ
RUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBGSVhNRTogbmVl
ZCB0byBhZGQgYSB0ZXN0IGZvciBzZXRMYXllclRyZWVIb3N0IHdpdGggYSBub24tbnVsbCBzdHVi
YmVkIENDTGF5ZXJUcmVlSG9zdC4KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117332</attachid>
            <date>2011-11-30 21:45:14 -0800</date>
            <delta_ts>2011-11-30 23:40:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71872-20111201004512.patch</filename>
            <type>text/plain</type>
            <size>27130</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWUyYzZlMmI5MTdiZWI3
MmVhM2QyZjU1NDRjZmMyNDRjZDkwZTBkZi4uZDAzY2QwNDRjOGI1MjA1ZjlhMjgzMjM3NjZkNDcx
ZGQxNGFlZjJjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDExLTExLTMwICBEYXZp
ZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBJ
bXByb3ZlIHRpbGUgaW52YWxpZGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MTg3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFZpcnR1YWxpemUgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5
IHNvIHRoYXQgZGlydHkgcmVjdGFuZ2xlcyBjYW4KKyAgICAgICAgYmUgaGFuZGxlZCBkaXJlY3Rs
eSBieSB0aGUgVGlsZWRMYXllckNocm9taXVtIGNsYXNzLiBSZXBsYWNlCisgICAgICAgIExheWVy
Q2hyb21pdW06OmRpcnR5UmVjdCgpIHdpdGggTGF5ZXJDaHJvbWl1bTo6bmVlZHNEaXNwbGF5KCkg
YW5kCisgICAgICAgIHJlbW92ZSB1bm5lY2Vzc2FyeSB1bmlvbiBvZiBkaXJ0eSByZWN0YW5nbGVz
LiBCeSBpbnZhbGlkYXRpbmcgZXhpc3RpbmcKKyAgICAgICAgdGlsZXMgdXNpbmcgdGhlIGluaXRp
YWwgZGlydHkgcmVjdGFuZ2xlcyBpbnN0ZWFkIG9mIHRoZWlyIHVuaW9uIHdlCisgICAgICAgIGF2
b2lkIGEgbGFyZ2UgYW1vdW50IG9mIHVubmVjZXNzYXJ5IHRpbGUgdXBkYXRlcy4KKworICAgICAg
ICBVcGRhdGUgTGF5ZXJDaHJvbWl1bVRlc3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lm
RGlydHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06
OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5
ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNo
cm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNo
cm9taXVtOjpMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06
OnNldEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXROZWVkc0Rp
c3BsYXlSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6bmVlZHNEaXNwbGF5KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXlS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0
ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVy
Q2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorCiAyMDExLTExLTMwICBBbm5h
IENhdmVuZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNaXNzaW5nIFJ1bnRp
bWVFbmFibGVkIGNoZWNrIGZvciA8dHJhY2s+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDA0MDU5ZmI1N2U4ZmZmZWI1Nzc5NjQxYzkxOGNjMmUyMzBlZmIyOTYuLjIwZWU5OTE0M2U4ZTJi
Nzk2NWQ4ZDY0Yzc5YWMxODE2ZDI5YjE0MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTEtMTEtMzAgIERhdmlkIFJldmVtYW4gIDxyZXZlbWFuQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEltcHJvdmUgdGlsZSBpbnZhbGlkYXRpb24u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTg3Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBw
dWJsaWMgQVBJIGZ1bmN0aW9uIFdlYkNvbnRlbnRMYXllcjo6aW52YWxpZFJlY3QoKS4gQWRkIG5l
dworICAgICAgICB0ZXN0IGNhc2UgdG8KKyAgICAgICAgTGF5ZXJDaHJvbWl1bVRlc3QuY2hlY2tT
ZXROZWVkc0Rpc3BsYXlDYXVzZXNDb3JyZWN0QmVoYXZpb3IgdGhhdAorICAgICAgICB2ZXJpZmll
cyB0aGF0IGNhbGxpbmcgc2V0TmVlZHNEaXNwbGF5KCkgb24gYSBMYXllckNocm9taXVtIHdpdGgK
KyAgICAgICAgZW1wdHkgYm91bmRzIGlzIGhhbmRsZWQgY29ycmVjdGx5LgorCisgICAgICAgICog
cHVibGljL1dlYkNvbnRlbnRMYXllci5oOgorICAgICAgICAqIHNyYy9XZWJDb250ZW50TGF5ZXIu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6OmludmFsaWRhdGVSZWN0KToK
KyAgICAgICAgKiBzcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpyZXBhaW50KToKKyAgICAgICAgKiB0ZXN0
cy9MYXllckNocm9taXVtVGVzdC5jcHA6CisKIDIwMTEtMTEtMzAgIFBhdmVsIEZlbGRtYW4gIDxw
ZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGdldCByaWQgb2Yg
ZGVmZXJyZWQgYmFja2VuZC0+ZnJvbnQtZW5kIGNvbW1hbmRzIHByb2Nlc3NpbmcuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExh
eWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAppbmRleCA0NDk0NTg2YTU3Y2ExNmJjNGI0ZjIz
MjQxMGRiOGY3ZmQ0Y2Q4OGMxLi5iMGM0ZTA3Mzk0NmJhNWU1MWUzZGM2YTI1MzczNmEwZWNhMzhj
YWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTY3LDcgKzY3
LDcgQEAgYm9vbCBDYW52YXMyRExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiAK
IHZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdy
YXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpCiB7Ci0gICAgaWYgKG1fZGlydHlS
ZWN0LmlzRW1wdHkoKSB8fCAhZHJhd3NDb250ZW50KCkpCisgICAgaWYgKCFtX25lZWRzRGlzcGxh
eSB8fCAhZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2NvbnRl
eHQpIHsKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0
ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHQKICAgICB9CiAK
ICAgICBtX3VwZGF0ZVJlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBib3VuZHMoKSk7Ci0g
ICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwogfQog
CiB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y29udGVudENoYW5nZWQoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDllYjFkNzk5ZjZkOTFlY2VjNjc5ODEwNmVj
NjAyN2JiNDFlNTI1MjAuLjhkZjY5MzQzMjUzYmJhZDNiNTEzMzc4NmQ2NTkzNWViOTBkNjNlYzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTEwMywxMiArMTAzLDgg
QEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQogICAg
IGlmIChkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgbGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVj
dCgpOwogCi0gICAgSW50UmVjdCBkaXJ0eSA9IGVuY2xvc2luZ0ludFJlY3QobV9kaXJ0eVJlY3Qp
OwotICAgIGRpcnR5LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMo
KSkpOwotICAgIGludmFsaWRhdGVSZWN0KGRpcnR5KTsKLQogICAgIHByZXBhcmVUb1VwZGF0ZShs
YXllclJlY3QpOwotICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbV9uZWVkc0Rpc3BsYXkg
PSBmYWxzZTsKIH0KIAogYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDRiZWFhNTI1
NWNhNjI4ODM5ZmE0N2JhZDY1ZTYxNGI2ZmM1NTE3NTguLjU1ZThhZDk4NTJkNDRlNTAyYmFjZTYz
NDQ4NjE0ZmI3MmIxY2E1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNw
cApAQCAtMzI1LDcgKzMyNSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXROZWVk
c0Rpc3BsYXkoKQogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheUlu
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKGRyYXdzQ29udGVudCgpKQot
ICAgICAgICBtX2xheWVyLT5zZXROZWVkc0Rpc3BsYXkocmVjdCk7CisgICAgICAgIG1fbGF5ZXIt
PnNldE5lZWRzRGlzcGxheVJlY3QocmVjdCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9t
aXVtOjpzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxh
eWVyQ2hyb21pdW0uY3BwCmluZGV4IDlkM2U5ZjNhMWU3MGRlZTVmMTllM2NmMGIyNDhiOTQzYWZh
MTAyYzAuLmYwZGMzNTIxZjU4MDE3MTdkNDA4NTM3YmY1YmZlZWFkMDg2ZTRiMjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtMTM5LDIwICsxMzksMTkgQEAgdm9pZCBJbWFn
ZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKEltYWdlKiBjb250ZW50cykKIAogICAgIG1fY29u
dGVudHMgPSBjb250ZW50czsKICAgICBtX2ltYWdlRm9yQ3VycmVudEZyYW1lID0gbV9jb250ZW50
cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBtX2RpcnR5UmVjdCA9IEludFJl
Y3QoSW50UG9pbnQoMCwgMCksIGJvdW5kcygpKTsKICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKICAg
ICBzZXRPcGFxdWUoIW1fY29udGVudHMtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkpOwogfQogCiB2
b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQogewotICAgIGlm
ICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fbmVlZHNEaXNwbGF5KSB7CiAg
ICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPnVwZGF0ZUZyb21JbWFnZShtX2NvbnRlbnRzLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKTsKICAgICAgICAgdXBkYXRlVGlsZVNpemVBbmRUaWxp
bmdPcHRpb24oKTsKICAgICAgICAgSW50UmVjdCBwYWludFJlY3QoSW50UG9pbnQoKSwgY29udGVu
dEJvdW5kcygpKTsKLSAgICAgICAgaWYgKCFtX2RpcnR5UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgaWYgKG1fbmVlZHNEaXNwbGF5KSB7CiAgICAgICAgICAgICBpbnZhbGlkYXRlUmVjdChwYWlu
dFJlY3QpOwotICAgICAgICAgICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAgICAgIG1f
bmVlZHNEaXNwbGF5ID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHAKaW5kZXggNTRhN2Y4ODU3ZDY4OTAzODZhZWZhODU2NmE4ZDI3ZDVkNWNlNTAyOC4uZTFk
OWJlOGU0ZWEwOTA0YTllM2Y3NDkzMmIzYjUxMDc3OWNjYTU2NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHAKQEAgLTU2LDYgKzU2LDcgQEAgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBMYXllckNo
cm9taXVtOjpjcmVhdGUoQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKIAogTGF5ZXJDaHJvbWl1
bTo6TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogICAgIDogbV9kZWxl
Z2F0ZShkZWxlZ2F0ZSkKKyAgICAsIG1fbmVlZHNEaXNwbGF5KGZhbHNlKQogICAgICwgbV9sYXll
cklkKHNfbmV4dExheWVySWQrKykKICAgICAsIG1fcGFyZW50KDApCiAgICAgLCBtX3Njcm9sbGFi
bGUoZmFsc2UpCkBAIC0yMTQsNyArMjE1LDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRCb3Vu
ZHMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICBtX2JvdW5kcyA9IHNpemU7CiAKICAgICBpZiAo
Zmlyc3RSZXNpemUgfHwgbV9wYWdlU2NhbGVEaXJ0eSkKLSAgICAgICAgc2V0TmVlZHNEaXNwbGF5
KEZsb2F0UmVjdCgwLCAwLCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSkpOwor
ICAgICAgICBzZXROZWVkc0Rpc3BsYXlSZWN0KEZsb2F0UmVjdCgwLCAwLCBib3VuZHMoKS53aWR0
aCgpLCBib3VuZHMoKS5oZWlnaHQoKSkpOwogICAgIGVsc2UKICAgICAgICAgc2V0TmVlZHNDb21t
aXQoKTsKIApAQCAtMjU4LDI3ICsyNTksMTcgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXROYW1l
KGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICBtX25hbWUgPSBuYW1lOwogfQogCi12b2lkIExheWVy
Q2hyb21pdW06OnNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkKK3Zv
aWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5UmVjdChjb25zdCBGbG9hdFJlY3QmIGRp
cnR5UmVjdCkKIHsKICAgICAvLyBTaW1wbHkgbWFyayB0aGUgY29udGVudHMgYXMgZGlydHkuIEZv
ciBub24tcm9vdCBsYXllcnMsIHRoZSBjYWxsIHRvCiAgICAgLy8gc2V0TmVlZHNDb21taXQgd2ls
bCBzY2hlZHVsZSBhIGZyZXNoIGNvbXBvc2l0aW5nIHBhc3MuCiAgICAgLy8gRm9yIHRoZSByb290
IGxheWVyLCBzZXROZWVkc0NvbW1pdCBoYXMgbm8gZWZmZWN0LgotICAgIG1fZGlydHlSZWN0LnVu
aXRlKGRpcnR5UmVjdCk7Ci0gICAgc2V0TmVlZHNDb21taXQoKTsKLX0KKyAgICBpZiAoIWRpcnR5
UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIG1fbmVlZHNEaXNwbGF5ID0gdHJ1ZTsKIAotdm9pZCBM
YXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoKQotewotICAgIG1fZGlydHlSZWN0LnNldExv
Y2F0aW9uKEZsb2F0UG9pbnQoKSk7Ci0gICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShib3VuZHMoKSk7
CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9pZCBMYXllckNocm9taXVtOjpyZXNldE5l
ZWRzRGlzcGxheSgpCi17Ci0gICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKLX0KLQogdm9p
ZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKIHsK
ICAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQobV9hbmNob3JQb2ludCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmgKaW5kZXggNzEzZGZiMjUyMzAxMDg2ZmZhN2U1ODFjMDQyMDQ3NWU4YmRmZmI3ZC4uMTc1ZmMy
ZjkwNTlhMzA4MDM3ZTBlZTg0OGI5ZmMxMzEyNTA5ZThkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApA
QCAtMTA1LDEwICsxMDUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNYXNrTGF5ZXIoTGF5ZXJD
aHJvbWl1bSogbWFza0xheWVyKSB7IG1fbWFza0xheWVyID0gbWFza0xheWVyOyBzZXROZWVkc0Nv
bW1pdCgpOyB9CiAgICAgTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyKCkgY29uc3QgeyByZXR1cm4g
bV9tYXNrTGF5ZXIuZ2V0KCk7IH0KIAotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZs
b2F0UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotICAgIGNv
bnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kaXJ0eVJlY3Q7IH0K
LSAgICB2b2lkIHJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRz
RGlzcGxheVJlY3QoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KCkgeyBzZXROZWVkc0Rpc3BsYXlSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IGNvbnRlbnRCb3VuZHMoKSkpOyB9CisgICAgdmlydHVhbCBib29sIG5lZWRzRGlzcGxheSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmVlZHNEaXNwbGF5OyB9CiAKICAgICB2b2lkIHNldE9wYWNpdHkoZmxv
YXQgb3BhY2l0eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyBzZXROZWVkc0NvbW1pdCgpOyB9CiAg
ICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQpAQCAtMjE4LDgg
KzIxNyw4IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgc2V0TmVlZHNDb21taXQoKTsKIAotICAg
IC8vIFRoZSBkaXJ0eSByZWN0IGlzIHRoZSB1bmlvbiBvZiBkYW1hZ2VkIHJlZ2lvbnMgdGhhdCBu
ZWVkIHJlcGFpbnRpbmcvdXBkYXRpbmcuCi0gICAgRmxvYXRSZWN0IG1fZGlydHlSZWN0OworICAg
IC8vIFRoaXMgZmxhZyBpcyBzZXQgd2hlbiBsYXllciBuZWVkIHJlcGFpbnRpbmcvdXBkYXRpbmcu
CisgICAgYm9vbCBtX25lZWRzRGlzcGxheTsKIAogICAgIC8vIFRoZSB1cGRhdGUgcmVjdCBpcyB0
aGUgcmVnaW9uIG9mIHRoZSBjb21wb3NpdG9yIHJlc291cmNlIHRoYXQgd2FzIGFjdHVhbGx5IHVw
ZGF0ZWQgYnkgdGhlIGNvbXBvc2l0b3IuCiAgICAgLy8gRm9yIGxheWVycyB0aGF0IG1heSBkbyB1
cGRhdGluZyBvdXRzaWRlIHRoZSBjb21wb3NpdG9yJ3MgY29udHJvbCAoaS5lLiBwbHVnaW4gbGF5
ZXJzKSwgdGhpcyBpbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggZmZhZDJmNWIxNzVjOTY2NWQ2NjU3NWJhZmNjMzliZmNlZTBlMWU2YS4uMzczOTAwZjU0MTUw
MGU5ODQ0NDI1N2QyNWZjYmMxM2ZiNzY1YWM0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwCkBAIC0yODUsMTMgKzI4NSwxOCBAQCBVcGRhdGFibGVUaWxlKiBUaWxlZExheWVyQ2hy
b21pdW06OmNyZWF0ZVRpbGUoaW50IGksIGludCBqKQogICAgIHJldHVybiB0aWxlLmdldCgpOwog
fQogCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5UmVjdChjb25zdCBG
bG9hdFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBJbnRSZWN0IGRpcnR5ID0gZW5jbG9zaW5nSW50
UmVjdChkaXJ0eVJlY3QpOworICAgIGludmFsaWRhdGVSZWN0KGRpcnR5KTsKKyAgICBMYXllckNo
cm9taXVtOjpzZXROZWVkc0Rpc3BsYXlSZWN0KGRpcnR5UmVjdCk7Cit9CisKIHZvaWQgVGlsZWRM
YXllckNocm9taXVtOjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkK
IHsKICAgICBpZiAoIW1fdGlsZXIgfHwgY29udGVudFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNE
cmF3KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4o
Y29udGVudFJlY3QpOwotCiAgICAgLy8gRGlydHkgcmVjdHMgYXJlIGFsd2F5cyBpbiBsYXllciBz
cGFjZSwgYXMgdGhlIGxheWVyIGNvdWxkIGJlIHJlcG9zaXRpb25lZAogICAgIC8vIGFmdGVyIGlu
dmFsaWRhdGlvbi4KICAgICBjb25zdCBJbnRSZWN0IGxheWVyUmVjdCA9IG1fdGlsZXItPmNvbnRl
bnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
aAppbmRleCAzNjNkYTYxODU4MDJlZWRjNzRmNTE1MmFlNDlmMzg3YzkyZGMwZjhlLi4yOGU3ZDFk
MGM1Njk2ODAwZjNkNjIxMjQwOGRkOGQxOGJjZWRiZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uaApAQCAtNTMsNiArNTMsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEludFNpemUg
Y29udGVudEJvdW5kcygpIGNvbnN0OwogCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxh
eVJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisKICAgICAvLyBSZXNlcnZlcyBhbGwgZXhpc3Rpbmcg
YW5kIHZhbGlkIHRpbGUgdGV4dHVyZXMgdG8gcHJvdGVjdCB0aGVtIGZyb20gYmVpbmcKICAgICAv
LyByZWN5Y2xlZCBieSB0aGUgdGV4dHVyZSBtYW5hZ2VyLgogICAgIHZvaWQgcHJvdGVjdFRpbGVU
ZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmNwcAppbmRleCAxOWE5OTNiZGI5ZWQ5NzAyZDVkNGQ0MjkwZTY4MTQxMmIxNTMyY2Iw
Li5lYzkzZjE2OGRhMTRlYTQxZTNjMTZkZjZkN2M0OWJlZTQ1MTNlYWNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Zp
ZGVvTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBWaWRlb0xheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIEMKICAgICBpZiAoIW1fZGVsZWdhdGUgfHwgIW1fcHJvdmlkZXIgfHwgIWRyYXdzQ29udGVu
dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9kaXJ0eVJlY3QuaXNFbXB0eSgpICYm
IHRleHR1cmVzVmFsaWQoKSkgeworICAgIGlmICghbV9uZWVkc0Rpc3BsYXkgJiYgdGV4dHVyZXNW
YWxpZCgpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IG1fcGxh
bmVzOyBwbGFuZSsrKSB7CiAgICAgICAgICAgICBNYW5hZ2VkVGV4dHVyZSogdGV4ID0gbV90ZXh0
dXJlc1twbGFuZV0ubV90ZXh0dXJlLmdldCgpOwogICAgICAgICAgICAgaWYgKCF0ZXgtPnJlc2Vy
dmUodGV4LT5zaXplKCksIHRleC0+Zm9ybWF0KCkpKSB7CkBAIC0xMTgsNyArMTE4LDcgQEAgdm9p
ZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIEMKICAgICAgICAgbV9uYXRpdmVUZXh0dXJlSWQgPSBmcmFtZS0+
dGV4dHVyZUlkKCk7CiAgICAgICAgIG1fbmF0aXZlVGV4dHVyZVNpemUgPSBJbnRTaXplKGZyYW1l
LT53aWR0aCgpLCBmcmFtZS0+aGVpZ2h0KCkpOwogICAgICAgICBtX25hdGl2ZVRleHR1cmVWaXNp
YmxlU2l6ZSA9IEludFNpemUoZnJhbWUtPndpZHRoKCksIGZyYW1lLT5oZWlnaHQoKSk7Ci0gICAg
ICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7
CiAgICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06
OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEMK
ICAgICBBU1NFUlQobV9wbGFuZXMgPD0gTWF4UGxhbmVzKTsKIAogICAgIG1fdXBkYXRlUmVjdCA9
IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGJvdW5kcygpKTsKLSAgICByZXNldE5lZWRzRGlzcGxh
eSgpOworICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiAKICAgICBtX3Byb3ZpZGVyLT5wdXRD
dXJyZW50RnJhbWUoZnJhbWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggMjc2ZjNjOWZjMmZlMTA3ZjE2M2IyYWJhMDk4YzAzZmJiMzM0NGNiNi4uN2FhOTg2ZWNmNzEy
MTZjZTE4MzcwNTVlMDEwMTM0ZDk1NDg5OTIwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uY3BwCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiByZW5kZXJlckNvCiAgICAgaWYg
KCFkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fZGlydHlSZWN0
LmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fbmVlZHNEaXNwbGF5KQogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAobV90ZXh0dXJlQ2hhbmdlZCkgewpAQCAtODUsMTIgKzg1LDEyIEBAIHZvaWQgV2Vi
R0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4
dDNEKiByZW5kZXJlckNvCiAgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSBmYWxzZTsKICAgICB9
CiAgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBj
b21wb3NpdG9yLgotICAgIGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpICYmIG1fdGV4dHVyZVVw
ZGF0ZWQpIHsKKyAgICBpZiAobV9uZWVkc0Rpc3BsYXkgJiYgbV90ZXh0dXJlVXBkYXRlZCkgewog
ICAgICAgICAvLyBwdWJsaXNoVG9QbGF0Zm9ybUxheWVyIHByZXBhcmVzIHRoZSBjb250ZW50cyBv
ZiB0aGUgb2ZmLXNjcmVlbiByZW5kZXIgdGFyZ2V0IGZvciB1c2UgYnkgdGhlIGNvbXBvc2l0b3Iu
CiAgICAgICAgIGRyYXdpbmdCdWZmZXIoKS0+cHVibGlzaFRvUGxhdGZvcm1MYXllcigpOwogICAg
ICAgICBjb250ZXh0KCktPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKICAgICAgICAgbV91cGRhdGVS
ZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYm91bmRzKCkpOwotICAgICAgICByZXNldE5l
ZWRzRGlzcGxheSgpOworICAgICAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwogICAgICAgICBt
X3RleHR1cmVVcGRhdGVkID0gZmFsc2U7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaAppbmRleCBlM2MxOTdhMzNhODkyNDcwYzc5
YzAxNzA0YTg1ZTFlMGZjYzRmZGNkLi5mN2E5OGMxM2JlZTA5NGZjNmZmNWRhOWZlODFlNTg4ZWFl
Zjk2YTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250
ZW50TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50
TGF5ZXIuaApAQCAtNjAsOSArNjAsNiBAQCBwdWJsaWM6CiAgICAgLy8gU2V0cyB0aGUgZW50aXJl
IGxheWVyIGFzIGludmFsaWQsIGkuZS4gbmVlZHMgdG8gdXBkYXRlIGl0cyBjb250ZW50LgogICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7CiAKLSAgICAvLyBSZXR1cm5zIHRoZSBy
ZWdpb24gb2YgdGhlIGxheWVyIHRoYXQgaXMgY3VycmVudGx5IGludmFsaWQuCi0gICAgV0VCS0lU
X0VYUE9SVCBXZWJGbG9hdFJlY3QgaW52YWxpZFJlY3QoKSBjb25zdDsKLQogI2lmIFdFQktJVF9J
TVBMRU1FTlRBVElPTgogICAgIFdlYkNvbnRlbnRMYXllcihjb25zdCBXVEY6OlBhc3NSZWZQdHI8
V2ViQ29udGVudExheWVySW1wbD4mKTsKICAgICBXZWJDb250ZW50TGF5ZXImIG9wZXJhdG9yPShj
b25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4mKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwCmluZGV4IGRlOGQ5OThhZTk4
YzRjMWNkZWQ1NmI3YTQ4NzhjOGYzNDRlMjhhZDguLjM5MmViMTM1ODc2ODk0MGI4ZTY4MDIyOWUz
MDA0MWM0M2JiMzgwOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkNvbnRlbnRMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29u
dGVudExheWVyLmNwcApAQCAtNDgsNyArNDgsNyBAQCBib29sIFdlYkNvbnRlbnRMYXllcjo6ZHJh
d3NDb250ZW50KCkgY29uc3QKIAogdm9pZCBXZWJDb250ZW50TGF5ZXI6OmludmFsaWRhdGVSZWN0
KGNvbnN0IFdlYkZsb2F0UmVjdCYgZGlydHlSZWN0KQogewotICAgIHVud3JhcDxXZWJDb250ZW50
TGF5ZXJJbXBsPigpLT5zZXROZWVkc0Rpc3BsYXkoZGlydHlSZWN0KTsKKyAgICB1bndyYXA8V2Vi
Q29udGVudExheWVySW1wbD4oKS0+c2V0TmVlZHNEaXNwbGF5UmVjdChkaXJ0eVJlY3QpOwogfQog
CiB2b2lkIFdlYkNvbnRlbnRMYXllcjo6aW52YWxpZGF0ZSgpCkBAIC01NiwxMSArNTYsNiBAQCB2
b2lkIFdlYkNvbnRlbnRMYXllcjo6aW52YWxpZGF0ZSgpCiAgICAgdW53cmFwPFdlYkNvbnRlbnRM
YXllckltcGw+KCktPnNldE5lZWRzRGlzcGxheSgpOwogfQogCi1XZWJGbG9hdFJlY3QgV2ViQ29u
dGVudExheWVyOjppbnZhbGlkUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdlYkZsb2F0UmVj
dChjb25zdFVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5kaXJ0eVJlY3QoKSk7Ci19Ci0K
IFdlYkNvbnRlbnRMYXllcjo6V2ViQ29udGVudExheWVyKGNvbnN0IFBhc3NSZWZQdHI8V2ViQ29u
dGVudExheWVySW1wbD4mIG5vZGUpCiAgICAgOiBXZWJMYXllcihub2RlKQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5j
cHAKaW5kZXggMDlhMTE4MmY0MDAwMzhiY2ExNWQwYjQwZTMzODc1ODIwMDk5ODYzYi4uOThlMTY3
YmExYmZlMWUxZjlmMTZjYTQ0YWZmNGE2NjUwNDRhNTMzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwCkBAIC0x
NDgsNyArMTQ4LDcgQEAgdm9pZCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnJlcGFpbnQoKQog
ICAgIEFTU0VSVChtX21lZGlhUGxheWVyKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAgICAgaWYgKG1fdmlkZW9MYXllciAmJiBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5n
KCkpCi0gICAgICAgIG1fdmlkZW9MYXllci0+c2V0TmVlZHNEaXNwbGF5KEludFJlY3QoMCwgMCwg
bV92aWRlb0xheWVyLT5ib3VuZHMoKS53aWR0aCgpLCBtX3ZpZGVvTGF5ZXItPmJvdW5kcygpLmhl
aWdodCgpKSk7CisgICAgICAgIG1fdmlkZW9MYXllci0+c2V0TmVlZHNEaXNwbGF5UmVjdChJbnRS
ZWN0KDAsIDAsIG1fdmlkZW9MYXllci0+Ym91bmRzKCkud2lkdGgoKSwgbV92aWRlb0xheWVyLT5i
b3VuZHMoKS5oZWlnaHQoKSkpOwogI2VuZGlmCiAgICAgbV9tZWRpYVBsYXllci0+cmVwYWludCgp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9t
aXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1U
ZXN0LmNwcAppbmRleCA3ODA5ZDE4YTQzNjcwZDQ4YWE3ODYxZmI4NzA0NjU2Mjg1OTNmYTI3Li5m
NGE0YTMyNzk3MWE5ZmYyNzFkYzRmNjg4YmJjOTdlMDk4YzkzMjBiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtNTMyLDcg
KzUzMiw3IEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgZ2V0Um9vdExheWVyQWZ0ZXJUcmVl
TWFuaXB1bGF0aW9ucykKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tTZXROZWVkc0Rp
c3BsYXlDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiB7CiAgICAgLy8gVGhlIHNlbWFudGljcyBmb3Ig
c2V0TmVlZHNEaXNwbGF5IHdoaWNoIGFyZSB0ZXN0ZWQgaGVyZToKLSAgICAvLyAgIDEuIGNyZWF0
ZXMgYSB1bmlvbmVkIGRpcnR5UmVjdCBhcHByb3ByaWF0ZWx5LgorICAgIC8vICAgMS4gc2V0cyBu
ZWVkc0Rpc3BsYXkgZmxhZyBhcHByb3ByaWF0ZWx5LgogICAgIC8vICAgMi4gaW5kaXJlY3RseSBj
YWxscyBub3RpZnlTeW5jUmVxdWlyZWQsIGV4YWN0bHkgb25jZSBmb3IgZWFjaCBjYWxsIHRvIHNl
dE5lZWRzRGlzcGxheS4KIAogICAgIE1vY2tMYXllckRlbGVnYXRlIG1vY2tEZWxlZ2F0ZTsKQEAg
LTU0NCw0MCArNTQ0LDQ1IEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tTZXROZWVk
c0Rpc3BsYXlDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiAgICAgRmxvYXRSZWN0IGVtcHR5RGlydHlS
ZWN0ID0gRmxvYXRSZWN0KDQwLjBmLCA0NS4wZiwgMCwgMCk7CiAgICAgRmxvYXRSZWN0IG91dE9m
Qm91bmRzRGlydHlSZWN0ID0gRmxvYXRSZWN0KDQwMC4wZiwgNDA1LjBmLCA1MDAuMGYsIDUwMi4w
Zik7CiAKLSAgICAvLyBCZWZvcmUgYW55dGhpbmcsIHRlc3RMYXllciBzaG91bGQgaGF2ZSBhbiBl
bXB0eSBkaXJ0eSByZWN0LgotICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCku
aXNFbXB0eSgpKTsKKyAgICAvLyBCZWZvcmUgYW55dGhpbmcsIHRlc3RMYXllciBzaG91bGQgbm90
IGJlIGRpcnR5LgorICAgIEVYUEVDVF9GQUxTRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsK
IAogICAgIC8vIFRoaXMgaXMganVzdCBpbml0aWFsaXphdGlvbiwgYnV0IG5vdGlmeVN5bmNSZXF1
aXJlZCBiZWhhdmlvciBpcyB2ZXJpZmllZCBhbnl3YXkgdG8gYXZvaWQgd2FybmluZ3MuCiAgICAg
RVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwg
dGVzdExheWVyLT5zZXRCb3VuZHModGVzdEJvdW5kcykpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+cmVzZXRO
ZWVkc0Rpc3BsYXkoKSk7Ci0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5p
c0VtcHR5KCkpOworICAgIHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbW9ja0Rl
bGVnYXRlKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAK
ICAgICAvLyBUaGUgcmVhbCB0ZXN0IGJlZ2lucyBoZXJlLgogCi0gICAgLy8gQ2FzZSAxOiBiYXNp
YwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdh
dGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5MSkpOwotICAgIEVYUEVDVF9G
TE9BVF9SRUNUX0VRKGRpcnR5MSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7CisgICAgLy8gQ2Fz
ZSAxOiBuZWVkc0Rpc3BsYXkgZmxhZyBzaG91bGQgbm90IGNoYW5nZSBiZWNhdXNlIG9mIGFuIGVt
cHR5IGRpcnR5IHJlY3QuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFW
SU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXlSZWN0KGVtcHR5
RGlydHlSZWN0KSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkp
OwogCi0gICAgLy8gQ2FzZSAyOiBhIHNlY29uZCBkaXJ0eSByZWN0IHNob3VsZCBiZSB1bmlvbmVk
IG9mIGRpcnR5MSBhbmQgZGlydHkyLgotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lO
Q19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KGRp
cnR5MikpOwotICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYs
IDEzLjBmLCAxNC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIC8vIENhc2UgMjog
YmFzaWMuCisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tE
ZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXlSZWN0KGRpcnR5MSkpOworICAg
IEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCi0gICAgLy8gQ2FzZSAz
OiBkaXJ0eSByZWN0IHNob3VsZCBub3QgY2hhbmdlIGJlY2F1c2Ugb2YgYW4gZW1wdHkgZGlydHkg
cmVjdC4KLSAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0Rl
bGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShlbXB0eURpcnR5UmVjdCkpOwot
ICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEzLjBmLCAx
NC4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIC8vIENhc2UgMzogYSBzZWNvbmQg
ZGlydHkgcmVjdC4KKyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1Io
bW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheVJlY3QoZGlydHkyKSk7
CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKLSAgICAvLyBD
YXNlIDQ6IExheWVyQ2hyb21pdW0gc2hvdWxkIGFjY2VwdCBkaXJ0eSByZWN0cyB0aGF0IGdvIGJl
eW9uZCBpdHMgYm91bmRzCi0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFW
SU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkob3V0T2ZCb3Vu
ZHNEaXJ0eVJlY3QpKTsKLSAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMTAuMGYs
IDE1LjBmLCA4OTAuMGYsIDg5Mi4wZiksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIC8v
IENhc2UgNDogTGF5ZXJDaHJvbWl1bSBzaG91bGQgYWNjZXB0IGRpcnR5IHJlY3RzIHRoYXQgZ28g
YmV5b25kIGl0cyBib3VuZHMuCisgICAgdGVzdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCZtb2NrRGVsZWdhdGUpOworICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhB
VklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0Qm91bmRzKHRlc3RCb3VuZHMpKTsK
KyAgICBFWEVDVVRFX0FORF9WRVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRl
LCAxLCB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheVJlY3Qob3V0T2ZCb3VuZHNEaXJ0eVJlY3Qp
KTsKKyAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIAotICAgIC8v
IENhc2UgNTogc2V0TmVlZHNEaXNwbGF5KCkgd2l0aG91dCB0aGUgZGlydHkgcmVjdCBhcmcgc2hv
dWxkIGNhdXNlIHRoZSBlbnRpcmUgYm91bmRzIHRvIGJlIGRpcnR5LAotICAgIC8vICAgICAgICAg
b3ZlcnJpZGluZyBhbnkgZXhpc3RpbmcgZGlydHkgcmVjdC4KKyAgICAvLyBDYXNlIDU6IHNldE5l
ZWRzRGlzcGxheSgpIHdpdGhvdXQgdGhlIGRpcnR5IHJlY3QgYXJnLgorICAgIHRlc3RMYXllciA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgmbW9ja0RlbGVnYXRlKTsKKyAgICBFWEVDVVRFX0FORF9W
RVJJRllfTk9USUZZX1NZTkNfQkVIQVZJT1IobW9ja0RlbGVnYXRlLCAxLCB0ZXN0TGF5ZXItPnNl
dEJvdW5kcyh0ZXN0Qm91bmRzKSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5D
X0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKSk7
Ci0gICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDAsIDAsIHRlc3RCb3VuZHMud2lk
dGgoKSwgdGVzdEJvdW5kcy5oZWlnaHQoKSksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAg
IEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogCi0gICAgLy8gcmVzZXRO
ZWVkc0Rpc3BsYXkgc2hvdWxkIGVtcHR5IHRoZSBkaXJ0eSByZWN0LCBhbmQgTk9UIGNhbGwgbm90
aWZ5U3luY1JlcXVpcmVkLgotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhB
VklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+cmVzZXROZWVkc0Rpc3BsYXkoKSk7Ci0g
ICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIC8v
IENhc2UgNjogc2V0TmVlZHNEaXNwbGF5KCkgd2l0aG91dCB0aGUgZGlydHkgcmVjdCBhcmcgc2hv
dWxkIG5vdCBjYXVzZQorICAgIC8vIG5lZWRzRGlzcGxheSBmbGFnIHRvIGNoYW5nZSBmb3IgTGF5
ZXJDaHJvbWl1bSB3aXRoIGVtcHR5IGJvdW5kcy4KKyAgICB0ZXN0TGF5ZXIgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoJm1vY2tEZWxlZ2F0ZSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElG
WV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXROZWVkc0Rpc3Bs
YXkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwogfQog
CiBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrU2V0TmVlZHNEaXNwbGF5V2l0aE51bGxE
ZWxlZ2F0ZSkKQEAgLTU5MCwxMyArNTk1LDEzIEBAIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwg
Y2hlY2tTZXROZWVkc0Rpc3BsYXlXaXRoTnVsbERlbGVnYXRlKQogICAgIEZsb2F0UmVjdCBkaXJ0
eSA9IEZsb2F0UmVjdCgxMC4wZiwgMTUuMGYsIDEuMGYsIDIuMGYpOwogCiAgICAgdGVzdExheWVy
LT5zZXRCb3VuZHModGVzdEJvdW5kcyk7Ci0gICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRS
ZWN0KDAuMGYsIDAuMGYsIDUwMS4wZiwgNTA4LjBmKSwgdGVzdExheWVyLT5kaXJ0eVJlY3QoKSk7
CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKLSAgICB0ZXN0
TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5k
aXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIHRlc3RMYXllciA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgwKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAK
LSAgICB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheShkaXJ0eSk7Ci0gICAgRVhQRUNUX0ZMT0FU
X1JFQ1RfRVEoZGlydHksIHRlc3RMYXllci0+ZGlydHlSZWN0KCkpOworICAgIHRlc3RMYXllci0+
c2V0TmVlZHNEaXNwbGF5UmVjdChkaXJ0eSk7CisgICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5u
ZWVkc0Rpc3BsYXkoKSk7CiB9CiAKIFRFU1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tQcm9w
ZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RCZWhhdmlvcikKQEAgLTYwNywxMCArNjEyLDEwIEBAIFRF
U1RfRihMYXllckNocm9taXVtVGVzdCwgY2hlY2tQcm9wZXJ0eUNoYW5nZUNhdXNlc0NvcnJlY3RC
ZWhhdmlvcikKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZHVtbXlMYXllciA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgmbV9zaWxlbnREZWxlZ2F0ZSk7IC8vIGp1c3QgYSBkdW1teSBsYXllciBm
b3IgdGhpcyB0ZXN0IGNhc2UuCiAKICAgICAvLyBzYW5pdHkgY2hlY2sgb2YgaW5pdGlhbCB0ZXN0
IGNvbmRpdGlvbgotICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+ZGlydHlSZWN0KCkuaXNFbXB0
eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAg
ICAvLyBUZXN0IHByb3BlcnRpZXMgdGhhdCBzaG91bGQgbm90IGNhbGwgbmVlZHNEaXNwbGF5IGFu
ZCBuZWVkc0NvbW1pdCB3aGVuIGNoYW5nZWQuCi0gICAgLy8gbm90aWZ5U3luY1JlcXVpcmVkIHNo
b3VsZCBub3QgYmUgY2FsbGVkLCBhbmQgdGhlIGRpcnR5UmVjdCBzaG91bGQgcmVtYWluIHN0aWxs
IGVtcHR5LgorICAgIC8vIG5vdGlmeVN5bmNSZXF1aXJlZCBzaG91bGQgbm90IGJlIGNhbGxlZCwg
YW5kIHRoZSBuZWVkc0Rpc3BsYXkgZmxhZyBzaG91bGQgcmVtYWluIGZhbHNlLgogICAgIEVYUEVD
VF9DQUxMKGluaXRpYWxEZWxlZ2F0ZSwgbm90aWZ5U3luY1JlcXVpcmVkKCkpLlRpbWVzKDApOyAv
LyBvbGQgZGVsZWdhdGUgc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gc2V0RGVsZWdhdGUgZ2l2ZXMg
YSBuZXcgZGVsZWdhdGUuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFW
SU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXREZWxlZ2F0ZSgmbW9ja0RlbGVnYXRl
KSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxl
Z2F0ZSwgMCwgdGVzdExheWVyLT5zZXROYW1lKCJUZXN0IExheWVyIikpOwpAQCAtNjI1LDEwICs2
MzAsMTAgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1Byb3BlcnR5Q2hhbmdlQ2F1
c2VzQ29ycmVjdEJlaGF2aW9yKQogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19C
RUhBVklPUihtb2NrRGVsZWdhdGUsIDAsIHRlc3RMYXllci0+c2V0RHJhd1RyYW5zZm9ybShUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpKSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9TWU5D
X0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXRTY3JlZW5TcGFjZVRyYW5z
Zm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05P
VElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMCwgdGVzdExheWVyLT5zZXREcmF3YWJs
ZUNvbnRlbnRSZWN0KEludFJlY3QoNCwgNSwgNiwgNykpKTsKLSAgICBFWFBFQ1RfVFJVRSh0ZXN0
TGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXll
ci0+bmVlZHNEaXNwbGF5KCkpOwogCiAgICAgLy8gTmV4dCwgdGVzdCBwcm9wZXJ0aWVzIHRoYXQg
c2hvdWxkIGNhbGwgc2V0TmVlZHNDb21taXQgKGJ1dCBub3Qgc2V0TmVlZHNEaXNwbGF5KQotICAg
IC8vIFRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIGluZGlyZWN0bHkgY2FsbCBub3RpZnlTeW5jUmVx
dWlyZWQsIGJ1dCB0aGUgZGlydHkgcmVjdCBzaG91bGQgbm90IGNoYW5nZS4KKyAgICAvLyBUaGVz
ZSBwcm9wZXJ0aWVzIHNob3VsZCBpbmRpcmVjdGx5IGNhbGwgbm90aWZ5U3luY1JlcXVpcmVkLCBi
dXQgdGhlIG5lZWRzRGlzcGxheSBmbGFnIHNob3VsZCBub3QgY2hhbmdlLgogICAgIC8vIE5vdGUg
dGhhdCBmb3IgbWFueSBvZiB0aGVzZSBwcm9wZXJ0aWVzIGl0IGlzIGltcG9ydGFudCB0byB0ZXN0
IHNldHRpbmcgdGhlIHByb3BlcnR5IHRvIGEgdmFsdWUgdGhhdAogICAgIC8vIGlzIGRpZmZlcmVu
dCB0aGFuIHdoYXQgdGhlIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIGl0IHRvLgogICAgIEVYRUNV
VEVfQU5EX1ZFUklGWV9OT1RJRllfU1lOQ19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RM
YXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgxLjIzZiwgNC41NmYpKSk7CkBAIC02NDQs
MTUgKzY0OSwxMyBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVydHlDaGFu
Z2VDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05PVElGWV9T
WU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRUcmFuc2Zvcm0oVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9OT1RJRllfU1lO
Q19CRUhBVklPUihtb2NrRGVsZWdhdGUsIDEsIHRlc3RMYXllci0+c2V0RG91YmxlU2lkZWQoZmFs
c2UpKTsKIAotICAgIC8vIFRoZSBhYm92ZSB0ZXN0cyBzaG91bGQgbm90IGhhdmUgY2F1c2VkIGEg
bm9uLWVtcHR5IGRpcnR5IHJlY3QuCi0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5kaXJ0eVJl
Y3QoKS5pc0VtcHR5KCkpOworICAgIC8vIFRoZSBhYm92ZSB0ZXN0cyBzaG91bGQgbm90IGhhdmUg
Y2F1c2VkIGEgY2hhbmdlIHRvIHRoZSBuZWVkc0Rpc3BsYXkgZmxhZy4KKyAgICBFWFBFQ1RfRkFM
U0UodGVzdExheWVyLT5uZWVkc0Rpc3BsYXkoKSk7CiAKICAgICAvLyBUZXN0IHByb3BlcnRpZXMg
dGhhdCBzaG91bGQgY2FsbCBzZXROZWVkc0Rpc3BsYXkKLSAgICAvLyBUaGVzZSBwcm9wZXJ0aWVz
IHdpbGwgY2FsbCBub3RpZnlTeW5jUmVxdWlyZWQgYW5kIGNoYW5nZSB0aGUgZGlydHkgcmVjdC4K
KyAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIHdpbGwgY2FsbCBub3RpZnlTeW5jUmVxdWlyZWQgYW5k
IGNoYW5nZSB0aGUgbmVlZHNEaXNwbGF5IGZsYWcuCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX05P
VElGWV9TWU5DX0JFSEFWSU9SKG1vY2tEZWxlZ2F0ZSwgMSwgdGVzdExheWVyLT5zZXRCb3VuZHMo
SW50U2l6ZSg1LCAxMCkpKTsKLSAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShGbG9hdFJlY3QoMC4w
ZiwgMC4wZiwgNS4wZiwgMTAuMGYpLCB0ZXN0TGF5ZXItPmRpcnR5UmVjdCgpKTsKLSAgICB0ZXN0
TGF5ZXItPnJlc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5k
aXJ0eVJlY3QoKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVlZHNE
aXNwbGF5KCkpOwogCiAgICAgLy8gRklYTUU6IG5lZWQgdG8gYWRkIGEgdGVzdCBmb3Igc2V0TGF5
ZXJUcmVlSG9zdCB3aXRoIGEgbm9uLW51bGwgc3R1YmJlZCBDQ0xheWVyVHJlZUhvc3QuCiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>