<?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>78054</bug_id>
          
          <creation_ts>2012-02-07 16:15:07 -0800</creation_ts>
          <short_desc>Add pixelSnappedIntRect method</short_desc>
          <delta_ts>2012-02-10 16:58:27 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>60318</blocked>
    
    <blocked>78287</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>551529</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-07 16:15:07 -0800</bug_when>
    <thetext>Adding a pixelSnappedIntRect method that operates on LayoutRects. Once we transition to sub-pixel layout, this will snap a LayoutRect to pixel bounds. From Emil&apos;s description on Bug 78040:

x: round(x)
y: round(y)
maxX: round(x + width) - round(x)
maxY: round(y + height) - round(y)

The idea is to land this as a no-op for now, so ultimately we can flip the switch using a much smaller patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552369</commentid>
    <comment_count>1</comment_count>
      <attachid>126130</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-08 12:06:53 -0800</bug_when>
    <thetext>Created attachment 126130
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552441</commentid>
    <comment_count>2</comment_count>
      <attachid>126130</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-08 13:30:33 -0800</bug_when>
    <thetext>Comment on attachment 126130
Patch

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

&gt; Source/WebCore/rendering/style/RenderStyle.cpp:889
&gt; +    RoundedRect roundedRect(pixelSnappedIntRect(borderRect));

This sort of thing makes me think that we should not allow transparent conversion from LayoutRect to IntRect/FloatRect, and that all callsites should have to choose one or the other.  That might help make it clear when we&apos;re snapping vs. not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552449</commentid>
    <comment_count>3</comment_count>
      <attachid>126130</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-08 13:35:19 -0800</bug_when>
    <thetext>Comment on attachment 126130
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:713
&gt; +    viewRect.intersect(pixelSnappedIntRect(contentRect));

I would have done this when assigning the local, and made the local IntRect contentRect = pixelSnappedIntRect(m_renderer-&gt;absoluteClippedOverflowRect()).  But this is part of my general feeling that only the layout code should deal with Layout*, and anyone ouside of layout will need to make an explicit choice if they want an int rect or float rect,a nd if they want it snapped or not.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2633
&gt; +    return m_renderer-&gt;document()-&gt;view()-&gt;contentsToScreen(pixelSnappedIntRect(ourrect));

I probably would have used a local here to avoid two separate snapped calls.

&gt; Source/WebCore/html/HTMLCanvasElement.cpp:287
&gt; +                context-&gt;drawImageBuffer(imageBuffer, ColorSpaceDeviceRGB, pixelSnappedIntRect(r), CompositeSourceOver, useLowQualityScale);

This makes me wonder why we don&apos;t define pixelSnappedIntRect() on LayoutRect directly?  (And until then on IntRect directly?)

&gt; Source/WebCore/html/shadow/TextControlInnerElements.cpp:553
&gt; +    IntRect rect = pixelSnappedIntRect(renderer()-&gt;view()-&gt;frameView()-&gt;contentsToWindow(renderer()-&gt;absoluteBoundingBoxRectIgnoringTransforms()));

What a horribly complicated line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552463</commentid>
    <comment_count>4</comment_count>
      <attachid>126130</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-08 13:51:01 -0800</bug_when>
    <thetext>Comment on attachment 126130
Patch

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

&gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:713
&gt;&gt; +    viewRect.intersect(pixelSnappedIntRect(contentRect));
&gt; 
&gt; I would have done this when assigning the local, and made the local IntRect contentRect = pixelSnappedIntRect(m_renderer-&gt;absoluteClippedOverflowRect()).  But this is part of my general feeling that only the layout code should deal with Layout*, and anyone ouside of layout will need to make an explicit choice if they want an int rect or float rect,a nd if they want it snapped or not.

Seems reasonable.

&gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2633
&gt;&gt; +    return m_renderer-&gt;document()-&gt;view()-&gt;contentsToScreen(pixelSnappedIntRect(ourrect));
&gt; 
&gt; I probably would have used a local here to avoid two separate snapped calls.

It&apos;s only one actual call, since only one of these is compiled depending on the platform.

&gt;&gt; Source/WebCore/html/HTMLCanvasElement.cpp:287
&gt;&gt; +                context-&gt;drawImageBuffer(imageBuffer, ColorSpaceDeviceRGB, pixelSnappedIntRect(r), CompositeSourceOver, useLowQualityScale);
&gt; 
&gt; This makes me wonder why we don&apos;t define pixelSnappedIntRect() on LayoutRect directly?  (And until then on IntRect directly?)

We followed the enclosingIntRect convention by making this a global method. Neither seems clearer to me, so I&apos;m happy to go the other way if you have strong feelings about it.

&gt;&gt; Source/WebCore/html/shadow/TextControlInnerElements.cpp:553
&gt;&gt; +    IntRect rect = pixelSnappedIntRect(renderer()-&gt;view()-&gt;frameView()-&gt;contentsToWindow(renderer()-&gt;absoluteBoundingBoxRectIgnoringTransforms()));
&gt; 
&gt; What a horribly complicated line.

:(

&gt;&gt; Source/WebCore/rendering/style/RenderStyle.cpp:889
&gt;&gt; +    RoundedRect roundedRect(pixelSnappedIntRect(borderRect));
&gt; 
&gt; This sort of thing makes me think that we should not allow transparent conversion from LayoutRect to IntRect/FloatRect, and that all callsites should have to choose one or the other.  That might help make it clear when we&apos;re snapping vs. not.

I agree!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553557</commentid>
    <comment_count>5</comment_count>
      <attachid>126387</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-09 15:18:38 -0800</bug_when>
    <thetext>Created attachment 126387
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553629</commentid>
    <comment_count>6</comment_count>
      <attachid>126387</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-09 17:13:47 -0800</bug_when>
    <thetext>Comment on attachment 126387
Patch

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

I&apos;m willing to aprove this and let you all move foward.  But I think you/we shoudl focus on making the boundaries crystal clear.  It&apos;s less important that we get each spot right, more than that it&apos;s easy to tell when a spot is right or wrong.  Right now it&apos;s very difficult to tell what should be a layout rect vs. an IntRect because the rules are not clear (at least to me).  We need to make them clear.  NOt just for me, but for all the others who are going to touch this code and be confused as to what type of rect to use where.

&gt; Source/WebCore/page/FrameView.cpp:1777
&gt; +                unionedRect.unite(pixelSnappedIntRect(m_repaintRects[i]));

Isn&apos;t a repaint rect a pixel rect by definition already?  And thus an IntRect and not a LayoutRect?

&gt; Source/WebCore/rendering/RenderObject.cpp:968
&gt; -                graphicsContext-&gt;drawRect(IntRect(x1, y1, x2 - x1, y2 - y1));
&gt; +                graphicsContext-&gt;drawRect(pixelSnappedIntRect(LayoutRect(x1, y1, x2 - x1, y2 - y1)));

Feels a little odd that we convert from int to layout to int here...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554508</commentid>
    <comment_count>7</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-10 16:58:27 -0800</bug_when>
    <thetext>Committed r107461: &lt;http://trac.webkit.org/changeset/107461&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126130</attachid>
            <date>2012-02-08 12:06:53 -0800</date>
            <delta_ts>2012-02-09 15:18:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78054-20120208120651.patch</filename>
            <type>text/plain</type>
            <size>35993</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzExMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBACisyMDEyLTAyLTA4ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgcGl4ZWxTbmFwcGVk
SW50UmVjdCBtZXRob2QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc4MDU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgcGl4ZWxTbmFwcGVkSW50UmVjdCBtZXRob2Qg
dGhhdCB3aWxsIHNuYXAgYSBzdWItcGl4ZWwgTGF5b3V0UmVjdCB0bworICAgICAgICBwaXhlbCBi
b3VuZGFyaWVzLiBUaGVzZSBwaXhlbCBzbmFwcGVkIGZvcm1zIGFyZSB3aGF0IGlzIHVzZWQgdG8g
Y29tbXVuaWNhdGUgd2l0aCB0aGUgZ3JhcGhpY3MKKyAgICAgICAgZW5naW5lICh0byBwYWludCBh
dCB3aG9sZSBwaXhlbCBib3VuZGFyaWVzKSBhbmQgdGhlIGVtYmVkZGluZyBhcHAgKHNvIHRoZXkg
ZG9uJ3QgbmVlZCB0byAKKyAgICAgICAgdW5kZXJzdGFuZCB3ZSdyZSB1c2luZyBzdWItcGl4ZWwg
dW5pdHMpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzT2ZmU2NyZWVuKToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5kc0ZvclZpc2libGVQb3NpdGlv
blJhbmdlKToKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFu
Z2U6OmJvdW5kaW5nQm94KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwYWludCk6CisgICAgICAgICog
aHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpzdGFydFNwZWVjaElucHV0KToKKyAg
ICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpub2RlSW1h
Z2UpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6cmVwYWludENvbnRlbnRSZWN0YW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3Ojpkb0RlZmVycmVkUmVwYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
Ojp3aW5kb3dDbGlwUmVjdEZvckxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OnBhaW50
R3JhcGhpY3NMYXllckNvbnRlbnRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpwYWludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL0xheW91dFR5cGVzLmg6CisgICAgICAgIChXZWJDb3JlOjpwaXhlbFNuYXBw
ZWRJbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5D
b250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2Fwcyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpwdXNoQ29udGVudHNDbGlwKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBh
aW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OmNhbGN1bGF0ZUJhY2tncm91bmRJbWFnZUdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRGV0YWlsc01hcmtlcjo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
bG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnBhaW50
SW50b1JlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYW1lU2V0OjpwYWludENvbHVtbkJvcmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZVNldDo6cGFpbnRSb3dCb3JkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6OnBvc2l0aW9uRnJhbWVzV2l0aEZsYXR0ZW5pbmcpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNp
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwb3NpdGlvbk92ZXJmbG93Q29u
dHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21ldHJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OnBhaW50U2Nyb2xsYmFyKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6Y2FsY3VsYXRlQ29tcG9zaXRlZEJvdW5kcyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmRy
YXdMaW5lRm9yQm94U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFkZFBE
RlVSTFJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpz
aG93UG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmdldFJv
dW5kZWRCb3JkZXJGb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmdldFJvdW5k
ZWRJbm5lckJvcmRlckZvcik6CisKIDIwMTItMDItMDggIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICB2aWV3Qm94IG9uIG5lc3RlZCBTVkcgY2F1c2VzIHdyb25nIGNv
bnRlbnQgc2l6ZSBmb3IgcmVsYXRpdmUgdmFsdWVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJ
KHJldmlzaW9uIDEwNzAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxMCw3ICs3MTAsNyBA
QCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzT2ZmU2NyCiAgICAgTGF5b3V0UmVj
dCBjb250ZW50UmVjdCA9IG1fcmVuZGVyZXItPmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgp
OwogICAgIEZyYW1lVmlldyogdmlldyA9IG1fcmVuZGVyZXItPmZyYW1lKCktPnZpZXcoKTsKICAg
ICBJbnRSZWN0IHZpZXdSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgdmll
d1JlY3QuaW50ZXJzZWN0KGNvbnRlbnRSZWN0KTsKKyAgICB2aWV3UmVjdC5pbnRlcnNlY3QocGl4
ZWxTbmFwcGVkSW50UmVjdChjb250ZW50UmVjdCkpOwogICAgIHJldHVybiB2aWV3UmVjdC5pc0Vt
cHR5KCk7CiB9CiAKQEAgLTI2MzAsOSArMjYzMCw5IEBAIEludFJlY3QgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6Ym91bmQKICAgICB9CiAgICAgCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHJl
dHVybiBtX3JlbmRlcmVyLT5kb2N1bWVudCgpLT52aWV3KCktPmNvbnRlbnRzVG9TY3JlZW4ob3Vy
cmVjdCk7CisgICAgcmV0dXJuIG1fcmVuZGVyZXItPmRvY3VtZW50KCktPnZpZXcoKS0+Y29udGVu
dHNUb1NjcmVlbihwaXhlbFNuYXBwZWRJbnRSZWN0KG91cnJlY3QpKTsKICNlbHNlCi0gICAgcmV0
dXJuIG91cnJlY3Q7CisgICAgcmV0dXJuIHBpeGVsU25hcHBlZEludFJlY3Qob3VycmVjdCk7CiAj
ZW5kaWYKIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkocmV2aXNpb24gMTA3MDEwKQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3OCw3
ICsxNjc4LDcgQEAgSW50UmVjdCBSYW5nZTo6Ym91bmRpbmdCb3goKQogICAgIGNvbnN0IHNpemVf
dCBuID0gcmVjdHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKQog
ICAgICAgICByZXN1bHQudW5pdGUocmVjdHNbaV0pOwotICAgIHJldHVybiByZXN1bHQ7CisgICAg
cmV0dXJuIHBpeGVsU25hcHBlZEludFJlY3QocmVzdWx0KTsKIH0KIAogdm9pZCBSYW5nZTo6dGV4
dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0LCBS
YW5nZUluRml4ZWRQb3NpdGlvbiogaW5GaXhlZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDcwMTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgyLDkgKzI4
Miw5IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50KEdyYXBoaWNzQ28KICAgICAgICAg
SW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gYnVmZmVyKCk7CiAgICAgICAgIGlmIChpbWFnZUJ1
ZmZlcikgewogICAgICAgICAgICAgaWYgKG1fcHJlc2VudGVkSW1hZ2UpCi0gICAgICAgICAgICAg
ICAgY29udGV4dC0+ZHJhd0ltYWdlKG1fcHJlc2VudGVkSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIHIsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKG1fcHJlc2VudGVkSW1hZ2UuZ2V0KCks
IENvbG9yU3BhY2VEZXZpY2VSR0IsIHBpeGVsU25hcHBlZEludFJlY3QociksIENvbXBvc2l0ZVNv
dXJjZU92ZXIsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCByLCBDb21wb3NpdGVTb3VyY2VPdmVyLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgQ29s
b3JTcGFjZURldmljZVJHQiwgcGl4ZWxTbmFwcGVkSW50UmVjdChyKSwgQ29tcG9zaXRlU291cmNl
T3ZlciwgdXNlTG93UXVhbGl0eVNjYWxlKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxl
bWVudHMuY3BwCShyZXZpc2lvbiAxMDcwMTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTAsNyAr
NTUwLDcgQEAgdm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c3RhcgogICAgIEF0
b21pY1N0cmluZyBsYW5ndWFnZSA9IGlucHV0LT5jb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKTsK
ICAgICBTdHJpbmcgZ3JhbW1hciA9IGlucHV0LT5nZXRBdHRyaWJ1dGUod2Via2l0Z3JhbW1hckF0
dHIpOwogICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBwcm9iYWJseSByZXNwZWN0IHRyYW5zZm9y
bXMKLSAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlcigpLT52aWV3KCktPmZyYW1lVmlldygpLT5j
b250ZW50c1RvV2luZG93KHJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0SWdub3Jp
bmdUcmFuc2Zvcm1zKCkpOworICAgIEludFJlY3QgcmVjdCA9IHBpeGVsU25hcHBlZEludFJlY3Qo
cmVuZGVyZXIoKS0+dmlldygpLT5mcmFtZVZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZW5kZXJl
cigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdElnbm9yaW5nVHJhbnNmb3JtcygpKSk7CiAgICAg
aWYgKHNwZWVjaElucHV0KCktPnN0YXJ0UmVjb2duaXRpb24obV9saXN0ZW5lcklkLCByZWN0LCBs
YW5ndWFnZSwgZ3JhbW1hciwgZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSkpCiAgICAgICAg
IHNldFN0YXRlKFJlY29yZGluZyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNp
b24gMTA3MDEwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNzIsNyArMTA3Miw3IEBAIERyYWdJbWFnZVJlZiBGcmFtZTo6bm9kZUltYWdlKE5v
ZGUqIG5vZGUKICAgICBtX3ZpZXctPnNldE5vZGVUb0RyYXcobm9kZSk7IC8vIEVuYWJsZSBzcGVj
aWFsIHN1Yi10cmVlIGRyYXdpbmcgbW9kZS4KIAogICAgIExheW91dFJlY3QgdG9wTGV2ZWxSZWN0
OwotICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gcmVuZGVyZXItPnBhaW50aW5nUm9vdFJlY3Qo
dG9wTGV2ZWxSZWN0KTsKKyAgICBJbnRSZWN0IHBhaW50aW5nUmVjdCA9IHBpeGVsU25hcHBlZElu
dFJlY3QocmVuZGVyZXItPnBhaW50aW5nUm9vdFJlY3QodG9wTGV2ZWxSZWN0KSk7CiAKICAgICBP
d25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVj
dC5zaXplKCkpKTsKICAgICBpZiAoIWJ1ZmZlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAJKHJldmlzaW9uIDEwNzAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4NSw3ICsxNzg1LDcgQEAgdm9pZCBGcmFtZVZpZXc6
OnJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKAogICAgICAgICBpZiAobV9yZXBhaW50Q291bnQgPT0g
Y1JlcGFpbnRSZWN0VW5pb25UaHJlc2hvbGQpIHsKICAgICAgICAgICAgIEludFJlY3QgdW5pb25l
ZFJlY3Q7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY1JlcGFpbnRSZWN0
VW5pb25UaHJlc2hvbGQ7ICsraSkKLSAgICAgICAgICAgICAgICB1bmlvbmVkUmVjdC51bml0ZSht
X3JlcGFpbnRSZWN0c1tpXSk7CisgICAgICAgICAgICAgICAgdW5pb25lZFJlY3QudW5pdGUocGl4
ZWxTbmFwcGVkSW50UmVjdChtX3JlcGFpbnRSZWN0c1tpXSkpOwogICAgICAgICAgICAgbV9yZXBh
aW50UmVjdHMuY2xlYXIoKTsKICAgICAgICAgICAgIG1fcmVwYWludFJlY3RzLmFwcGVuZCh1bmlv
bmVkUmVjdCk7CiAgICAgICAgIH0KQEAgLTE5MDAsMTEgKzE5MDAsMTEgQEAgdm9pZCBGcmFtZVZp
ZXc6OmRvRGVmZXJyZWRSZXBhaW50cygpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7IGkrKykgewogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgICAgICBpZiAoZnJh
bWUoKS0+dGlsZWRCYWNraW5nU3RvcmUoKSkgewotICAgICAgICAgICAgZnJhbWUoKS0+dGlsZWRC
YWNraW5nU3RvcmUoKS0+aW52YWxpZGF0ZShtX3JlcGFpbnRSZWN0c1tpXSk7CisgICAgICAgICAg
ICBmcmFtZSgpLT50aWxlZEJhY2tpbmdTdG9yZSgpLT5pbnZhbGlkYXRlKHBpeGVsU25hcHBlZElu
dFJlY3QobV9yZXBhaW50UmVjdHNbaV0pKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAjZW5kaWYKLSAgICAgICAgU2Nyb2xsVmlldzo6cmVwYWludENvbnRlbnRSZWN0YW5nbGUo
bV9yZXBhaW50UmVjdHNbaV0sIGZhbHNlKTsKKyAgICAgICAgU2Nyb2xsVmlldzo6cmVwYWludENv
bnRlbnRSZWN0YW5nbGUocGl4ZWxTbmFwcGVkSW50UmVjdChtX3JlcGFpbnRSZWN0c1tpXSksIGZh
bHNlKTsKICAgICB9CiAgICAgbV9yZXBhaW50UmVjdHMuY2xlYXIoKTsKICAgICBtX3JlcGFpbnRD
b3VudCA9IDA7CkBAIC0yNDc5LDkgKzI0NzksOSBAQCBJbnRSZWN0IEZyYW1lVmlldzo6d2luZG93
Q2xpcFJlY3RGb3JMYXllCiAgICAgLy8gQXBwbHkgdGhlIGNsaXAgZnJvbSB0aGUgbGF5ZXIuCiAg
ICAgSW50UmVjdCBjbGlwUmVjdDsKICAgICBpZiAoY2xpcFRvTGF5ZXJDb250ZW50cykKLSAgICAg
ICAgY2xpcFJlY3QgPSBsYXllci0+Y2hpbGRyZW5DbGlwUmVjdCgpOworICAgICAgICBjbGlwUmVj
dCA9IHBpeGVsU25hcHBlZEludFJlY3QobGF5ZXItPmNoaWxkcmVuQ2xpcFJlY3QoKSk7CiAgICAg
ZWxzZQotICAgICAgICBjbGlwUmVjdCA9IGxheWVyLT5zZWxmQ2xpcFJlY3QoKTsKKyAgICAgICAg
Y2xpcFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGxheWVyLT5zZWxmQ2xpcFJlY3QoKSk7CiAg
ICAgY2xpcFJlY3QgPSBjb250ZW50c1RvV2luZG93KGNsaXBSZWN0KTsgCiAgICAgcmV0dXJuIGlu
dGVyc2VjdGlvbihjbGlwUmVjdCwgd2luZG93Q2xpcFJlY3QoKSk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAkocmV2
aXNpb24gMTA3MDEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OCw3ICsyOTgsNyBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXI6OnBhaW50R3JhcGhpY3NMYXllckNvCiAgICAgICAgIExheW91dFJlY3QgY2xpcFJl
Y3QoY2xpcCk7CiAgICAgICAgIGNsaXBSZWN0Lm1vdmUob2Zmc2V0KTsKIAotICAgICAgICBtX2Ns
aWVudC0+cGFpbnRDb250ZW50cyh0aGlzLCBjb250ZXh0LCBtX3BhaW50aW5nUGhhc2UsIGNsaXBS
ZWN0KTsKKyAgICAgICAgbV9jbGllbnQtPnBhaW50Q29udGVudHModGhpcywgY29udGV4dCwgbV9w
YWludGluZ1BoYXNlLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNsaXBSZWN0KSk7CiAgICAgfQogI2lm
bmRlZiBOREVCVUcKICAgICBzX2luUGFpbnRDb250ZW50cyA9IGZhbHNlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMTA3MDEwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDA4LDcgKzEwMDgsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50KFBhaW50
SW5mbyYgcGFpCiAgICAgZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CiAgICAgb3Zl
cmZsb3dSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CiAgICAgCi0gICAgaWYgKCFwYWludEluZm8u
cmVjdC5pbnRlcnNlY3RzKG92ZXJmbG93UmVjdCkpCisgICAgaWYgKCFwYWludEluZm8ucmVjdC5p
bnRlcnNlY3RzKHBpeGVsU25hcHBlZEludFJlY3Qob3ZlcmZsb3dSZWN0KSkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUNoaWxkT3V0bGlu
ZXMpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCShyZXZpc2lv
biAxMDcwMTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTEgQEAgaW5saW5lIExheW91dFJlY3QgZW5jbG9zaW5n
TGF5b3V0UmVjdChjbwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwogfQogCitp
bmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3Qp
Cit7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKIGlubGluZSBMYXlvdXRTaXplIHJvdW5kZWRMYXlv
dXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgcykKIHsKICAgICByZXR1cm4gcm91bmRlZEludFNpemUo
cyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlz
aW9uIDEwNzAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1NDAsNyArMjU0MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBh
aW50Q29sdW1uQ29udGVudHMoUGEKICAgICAgICAgfQogICAgICAgICBjb2xSZWN0Lm1vdmVCeShw
YWludE9mZnNldCk7CiAgICAgICAgIFBhaW50SW5mbyBpbmZvKHBhaW50SW5mbyk7Ci0gICAgICAg
IGluZm8ucmVjdC5pbnRlcnNlY3QoY29sUmVjdCk7CisgICAgICAgIGluZm8ucmVjdC5pbnRlcnNl
Y3QocGl4ZWxTbmFwcGVkSW50UmVjdChjb2xSZWN0KSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
IWluZm8ucmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CkBAIC0zMDE5LDcgKzMwMTksNyBAQCBHYXBSZWN0
cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByLT5tX3JlbmRlcmVyLT53aWR0aCgpLCByLT5tX3JlbmRlcmVyLT5oZWln
aHQoKSk7CiAgICAgICAgICAgICAgICAgcm9vdEJsb2NrLT5mbGlwRm9yV3JpdGluZ01vZGUoZmxv
YXRCb3gpOwogICAgICAgICAgICAgICAgIGZsb2F0Qm94Lm1vdmUocm9vdEJsb2NrUGh5c2ljYWxQ
b3NpdGlvbi54KCksIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24ueSgpKTsKLSAgICAgICAgICAg
ICAgICBwYWludEluZm8tPmNvbnRleHQtPmNsaXBPdXQoZmxvYXRCb3gpOworICAgICAgICAgICAg
ICAgIHBhaW50SW5mby0+Y29udGV4dC0+Y2xpcE91dChwaXhlbFNuYXBwZWRJbnRSZWN0KGZsb2F0
Qm94KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTA3MDEwKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzMSwxMiAr
OTMxLDEyIEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEJveERlY29yYXRpb25zKFBhaW4KICAgICAg
ICAgcGFpbnRCYWNrZ3JvdW5kKHBhaW50SW5mbywgcGFpbnRSZWN0LCBibGVlZEF2b2lkYW5jZSk7
CiAKICAgICAgICAgaWYgKHN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgICAgIHRo
ZW1lKCktPnBhaW50RGVjb3JhdGlvbnModGhpcywgcGFpbnRJbmZvLCBwYWludFJlY3QpOworICAg
ICAgICAgICAgdGhlbWUoKS0+cGFpbnREZWNvcmF0aW9ucyh0aGlzLCBwYWludEluZm8sIHBpeGVs
U25hcHBlZEludFJlY3QocGFpbnRSZWN0KSk7CiAgICAgfQogICAgIHBhaW50Qm94U2hhZG93KHBh
aW50SW5mbywgcGFpbnRSZWN0LCBzdHlsZSgpLCBJbnNldCk7CiAKICAgICAvLyBUaGUgdGhlbWUg
d2lsbCB0ZWxsIHVzIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBhbHNvIHBhaW50IHRoZSBDU1Mg
Ym9yZGVyLgotICAgIGlmICgoIXN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSB8fCAoIXRoZW1lUGFp
bnRlZCAmJiB0aGVtZSgpLT5wYWludEJvcmRlck9ubHkodGhpcywgcGFpbnRJbmZvLCBwYWludFJl
Y3QpKSkgJiYgc3R5bGUoKS0+aGFzQm9yZGVyKCkpCisgICAgaWYgKCghc3R5bGUoKS0+aGFzQXBw
ZWFyYW5jZSgpIHx8ICghdGhlbWVQYWludGVkICYmIHRoZW1lKCktPnBhaW50Qm9yZGVyT25seSh0
aGlzLCBwYWludEluZm8sIHBpeGVsU25hcHBlZEludFJlY3QocGFpbnRSZWN0KSkpKSAmJiBzdHls
ZSgpLT5oYXNCb3JkZXIoKSkKICAgICAgICAgcGFpbnRCb3JkZXIocGFpbnRJbmZvLCBwYWludFJl
Y3QsIHN0eWxlKCksIGJsZWVkQXZvaWRhbmNlKTsKIAogICAgIGlmIChibGVlZEF2b2lkYW5jZSA9
PSBCYWNrZ3JvdW5kQmxlZWRVc2VUcmFuc3BhcmVuY3lMYXllcikKQEAgLTExNzYsNyArMTE3Niw3
IEBAIGJvb2wgUmVuZGVyQm94OjpwdXNoQ29udGVudHNDbGlwKFBhaW50SW4KICAgICAgICAgcGFp
bnRPYmplY3QocGFpbnRJbmZvLCBhY2N1bXVsYXRlZE9mZnNldCk7CiAgICAgICAgIHBhaW50SW5m
by5waGFzZSA9IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHM7CiAgICAgfQotICAgIElu
dFJlY3QgY2xpcFJlY3QoaXNDb250cm9sQ2xpcCA/IGNvbnRyb2xDbGlwUmVjdChhY2N1bXVsYXRl
ZE9mZnNldCkgOiBvdmVyZmxvd0NsaXBSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0LCBwYWludEluZm8u
cmVuZGVyUmVnaW9uKSk7CisgICAgSW50UmVjdCBjbGlwUmVjdCA9IHBpeGVsU25hcHBlZEludFJl
Y3QoaXNDb250cm9sQ2xpcCA/IGNvbnRyb2xDbGlwUmVjdChhY2N1bXVsYXRlZE9mZnNldCkgOiBv
dmVyZmxvd0NsaXBSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0LCBwYWludEluZm8ucmVuZGVyUmVnaW9u
KSk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKICAgICBpZiAoc3R5bGUoKS0+aGFz
Qm9yZGVyUmFkaXVzKCkpCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVj
dENsaXAoc3R5bGUoKS0+Z2V0Um91bmRlZElubmVyQm9yZGVyRm9yKExheW91dFJlY3QoYWNjdW11
bGF0ZWRPZmZzZXQsIHNpemUoKSkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gMTA3MDEwKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjYzLDcgKzY2Myw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50
RmlsbExheWUKICAgICAgICAgICAgIFJvdW5kZWRSZWN0IGJvcmRlciA9IGdldEJhY2tncm91bmRS
b3VuZGVkUmVjdChiYWNrZ3JvdW5kUmVjdEFkanVzdGVkRm9yQmxlZWRBdm9pZGFuY2UoY29udGV4
dCwgcmVjdCwgYmxlZWRBdm9pZGFuY2UpLCBib3gsIGJveFNpemUud2lkdGgoKSwgYm94U2l6ZS5o
ZWlnaHQoKSwgaW5jbHVkZUxlZnRFZGdlLCBpbmNsdWRlUmlnaHRFZGdlKTsKICAgICAgICAgICAg
IGNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChib3JkZXIsIGJnQ29sb3IsIHN0eWxlKCktPmNvbG9y
U3BhY2UoKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3Qo
cmVjdCwgYmdDb2xvciwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmZpbGxSZWN0KHBpeGVsU25hcHBlZEludFJlY3QocmVjdCksIGJnQ29sb3IsIHN0eWxlKCkt
PmNvbG9yU3BhY2UoKSk7CiAgICAgICAgIAogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzA3
LDcgKzcwNyw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWUKICAg
ICAgICAgLy8gV2UgaGF2ZSB0byBkcmF3IG91ciB0ZXh0IGludG8gYSBtYXNrIHRoYXQgY2FuIHRo
ZW4gYmUgdXNlZCB0byBjbGlwIGJhY2tncm91bmQgZHJhd2luZy4KICAgICAgICAgLy8gRmlyc3Qg
ZmlndXJlIG91dCBob3cgYmlnIHRoZSBtYXNrIGhhcyB0byBiZS4gIEl0IHNob3VsZCBiZSBubyBi
aWdnZXIgdGhhbiB3aGF0IHdlIG5lZWQKICAgICAgICAgLy8gdG8gYWN0dWFsbHkgcmVuZGVyLCBz
byB3ZSBzaG91bGQgaW50ZXJzZWN0IHRoZSBkaXJ0eSByZWN0IHdpdGggdGhlIGJvcmRlciBib3gg
b2YgdGhlIGJhY2tncm91bmQuCi0gICAgICAgIExheW91dFJlY3QgbWFza1JlY3QgPSByZWN0Owor
ICAgICAgICBJbnRSZWN0IG1hc2tSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChyZWN0KTsKICAg
ICAgICAgbWFza1JlY3QuaW50ZXJzZWN0KHBhaW50SW5mby5yZWN0KTsKICAgICAgICAgCiAgICAg
ICAgIC8vIE5vdyBjcmVhdGUgdGhlIG1hc2suCkBAIC03NjcsNyArNzY3LDcgQEAgdm9pZCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZQogCiAgICAgLy8gUGFpbnQgdGhlIGNvbG9y
IGZpcnN0IHVuZGVybmVhdGggYWxsIGltYWdlcy4KICAgICBpZiAoIWJnTGF5ZXItPm5leHQoKSkg
ewotICAgICAgICBMYXlvdXRSZWN0IGJhY2tncm91bmRSZWN0KHNjcm9sbGVkUGFpbnRSZWN0KTsK
KyAgICAgICAgSW50UmVjdCBiYWNrZ3JvdW5kUmVjdChwaXhlbFNuYXBwZWRJbnRSZWN0KHNjcm9s
bGVkUGFpbnRSZWN0KSk7CiAgICAgICAgIGJhY2tncm91bmRSZWN0LmludGVyc2VjdChwYWludElu
Zm8ucmVjdCk7CiAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gYWxwaGEgYW5kIHdlIGFyZSBwYWlu
dGluZyB0aGUgcm9vdCBlbGVtZW50LCBnbyBhaGVhZCBhbmQgYmxlbmQgd2l0aCB0aGUgYmFzZSBi
YWNrZ3JvdW5kIGNvbG9yLgogICAgICAgICBDb2xvciBiYXNlQ29sb3I7CkBAIC0xMDU0LDcgKzEw
NTQsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVCYWNrCiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgcG9zaXRpb25pbmdBcmVhU2l6ZSA9IExheW91dFNpemUocGFp
bnRSZWN0LndpZHRoKCkgLSBsZWZ0IC0gcmlnaHQsIHBhaW50UmVjdC5oZWlnaHQoKSAtIHRvcCAt
IGJvdHRvbSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZ2VvbWV0cnkuc2V0RGVzdFJlY3Qodmll
d1JlY3QoKSk7CisgICAgICAgIGdlb21ldHJ5LnNldERlc3RSZWN0KHBpeGVsU25hcHBlZEludFJl
Y3Qodmlld1JlY3QoKSkpOwogICAgICAgICBwb3NpdGlvbmluZ0FyZWFTaXplID0gZ2VvbWV0cnku
ZGVzdFJlY3QoKS5zaXplKCk7CiAgICAgfQogCkBAIC0xOTIzLDcgKzE5MjMsNyBAQCB2b2lkIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyCiAKICAgICBncmFwaGljc0NvbnRleHQt
PnNldFN0cm9rZVN0eWxlKE5vU3Ryb2tlKTsKICAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxD
b2xvcihjb2xvciwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5k
cmF3UmVjdChib3JkZXJSZWN0KTsKKyAgICBncmFwaGljc0NvbnRleHQtPmRyYXdSZWN0KHBpeGVs
U25hcHBlZEludFJlY3QoYm9yZGVyUmVjdCkpOwogfQogI2Vsc2UKIHZvaWQgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OnBhaW50Qm9yZGVyKGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLApAQCAtMjYyNCw3ICsyNjI0LDcgQEAg
dm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkbwogICAgICAgICAgICAgICAg
IGlmICghcmVjdFRvQ2xpcE91dC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmNsaXBPdXRSb3VuZGVkUmVjdChyZWN0VG9DbGlwT3V0KTsKIAotICAgICAgICAgICAgICAg
IFJvdW5kZWRSZWN0IGluZmx1ZW5jZVJlY3Qoc2hhZG93UmVjdCwgYm9yZGVyLnJhZGlpKCkpOwor
ICAgICAgICAgICAgICAgIFJvdW5kZWRSZWN0IGluZmx1ZW5jZVJlY3QocGl4ZWxTbmFwcGVkSW50
UmVjdChzaGFkb3dSZWN0KSwgYm9yZGVyLnJhZGlpKCkpOwogICAgICAgICAgICAgICAgIGluZmx1
ZW5jZVJlY3QuZXhwYW5kUmFkaWkoMiAqIHNoYWRvd0JsdXIgKyBzaGFkb3dTcHJlYWQpOwogICAg
ICAgICAgICAgICAgIGlmIChhbGxDb3JuZXJzQ2xpcHBlZE91dChpbmZsdWVuY2VSZWN0LCBpbmZv
LnJlY3QpKQogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5maWxsUmVjdChmaWxsUmVjdC5y
ZWN0KCksIENvbG9yOjpibGFjaywgcy0+Y29sb3JTcGFjZSgpKTsKQEAgLTI2NDgsNyArMjY0OCw3
IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG8KICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoIXJlY3RUb0NsaXBPdXQuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5jbGlwT3V0KHJlY3RUb0NsaXBPdXQpOworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5jbGlwT3V0KHBpeGVsU25hcHBlZEludFJlY3QocmVj
dFRvQ2xpcE91dCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KGZpbGxSZWN0
LnJlY3QoKSwgQ29sb3I6OmJsYWNrLCBzLT5jb2xvclNwYWNlKCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewpAQCAtMjY4Myw3ICsyNjgzLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6cGFpbnRCb3hTaGFkbwogICAgICAgICAgICAgQ29sb3IgZmlsbENvbG9yKHNoYWRv
d0NvbG9yLnJlZCgpLCBzaGFkb3dDb2xvci5ncmVlbigpLCBzaGFkb3dDb2xvci5ibHVlKCksIDI1
NSk7CiAKICAgICAgICAgICAgIExheW91dFJlY3Qgb3V0ZXJSZWN0ID0gYXJlYUNhc3RpbmdTaGFk
b3dJbkhvbGUoYm9yZGVyLnJlY3QoKSwgc2hhZG93Qmx1ciwgc2hhZG93U3ByZWFkLCBzaGFkb3dP
ZmZzZXQpOwotICAgICAgICAgICAgUm91bmRlZFJlY3Qgcm91bmRlZEhvbGUoaG9sZVJlY3QsIGJv
cmRlci5yYWRpaSgpKTsKKyAgICAgICAgICAgIFJvdW5kZWRSZWN0IHJvdW5kZWRIb2xlKHBpeGVs
U25hcHBlZEludFJlY3QoaG9sZVJlY3QpLCBib3JkZXIucmFkaWkoKSk7CiAKICAgICAgICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CiAgICAgICAg
ICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7CkBAIC0yNzAzLDcgKzI3MDMsNyBAQCB2b2lkIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvCiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwg
c2hhZG93Q29sb3IsIHMtPmNvbG9yU3BhY2UoKSk7CiAKLSAgICAgICAgICAgIGNvbnRleHQtPmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKG91dGVyUmVjdCwgcm91bmRlZEhvbGUsIGZpbGxDb2xvciwg
cy0+Y29sb3JTcGFjZSgpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKHBpeGVsU25hcHBlZEludFJlY3Qob3V0ZXJSZWN0KSwgcm91bmRlZEhvbGUsIGZpbGxD
b2xvciwgcy0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAJKHJldmlz
aW9uIDEwNzAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFy
a2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgUmVuZGVyRGV0
YWlsc01hcmtlcjo6cGFpbnQoUGFpbnRJbmYKICAgICBvdmVyZmxvd1JlY3QubW92ZUJ5KGJveE9y
aWdpbik7CiAgICAgb3ZlcmZsb3dSZWN0LmluZmxhdGUobWF4aW1hbE91dGxpbmVTaXplKHBhaW50
SW5mby5waGFzZSkpOwogCi0gICAgaWYgKCFwYWludEluZm8ucmVjdC5pbnRlcnNlY3RzKG92ZXJm
bG93UmVjdCkpCisgICAgaWYgKCFwYWludEluZm8ucmVjdC5pbnRlcnNlY3RzKHBpeGVsU25hcHBl
ZEludFJlY3Qob3ZlcmZsb3dSZWN0KSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IENv
bG9yIGNvbG9yKHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9y
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQu
Y3BwCShyZXZpc2lvbiAxMDcwMTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Rmxvd1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NSw3ICs0NDUsNyBAQCB2b2lkIFJl
bmRlckZsb3dUaHJlYWQ6OnBhaW50SW50b1JlZ2lvbihQCiAgICAgTGF5b3V0UmVjdCByZWdpb25D
bGlwcGluZ1JlY3QocGFpbnRPZmZzZXQgKyAocmVnaW9uT3ZlcmZsb3dSZWN0LmxvY2F0aW9uKCkg
LSByZWdpb25SZWN0LmxvY2F0aW9uKCkpLCByZWdpb25PdmVyZmxvd1JlY3Quc2l6ZSgpKTsKIAog
ICAgIFBhaW50SW5mbyBpbmZvKHBhaW50SW5mbyk7Ci0gICAgaW5mby5yZWN0LmludGVyc2VjdChy
ZWdpb25DbGlwcGluZ1JlY3QpOworICAgIGluZm8ucmVjdC5pbnRlcnNlY3QocGl4ZWxTbmFwcGVk
SW50UmVjdChyZWdpb25DbGlwcGluZ1JlY3QpKTsKIAogICAgIGlmICghaW5mby5yZWN0LmlzRW1w
dHkoKSkgewogICAgICAgICBjb250ZXh0LT5zYXZlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHJldmlzaW9uIDEwNzAxMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDcgKzgyLDcgQEAgc3RhdGljIENvbG9yIGJvcmRlckZpbGxDb2xvcigpCiAKIHZvaWQgUmVu
ZGVyRnJhbWVTZXQ6OnBhaW50Q29sdW1uQm9yZGVyKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRSZWN0JiBib3JkZXJSZWN0KQogewotICAgIGlmICghcGFpbnRJbmZvLnJl
Y3QuaW50ZXJzZWN0cyhib3JkZXJSZWN0KSkKKyAgICBpZiAoIXBhaW50SW5mby5yZWN0LmludGVy
c2VjdHMocGl4ZWxTbmFwcGVkSW50UmVjdChib3JkZXJSZWN0KSkpCiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBzb21ldGhpbmcgY2xldmVyIHdo
ZW4gYm9yZGVycyBmcm9tIGRpc3RpbmN0IGZyYW1lc2V0cyBtZWV0IGF0IGEgam9pbi4KQEAgLTEw
Miw3ICsxMDIsNyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpwYWludENvbHVtbkJvcmRlcihjCiAK
IHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50Um93Qm9yZGVyKGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBMYXlvdXRSZWN0JiBib3JkZXJSZWN0KQogewotICAgIGlmICghcGFpbnRJ
bmZvLnJlY3QuaW50ZXJzZWN0cyhib3JkZXJSZWN0KSkKKyAgICBpZiAoIXBhaW50SW5mby5yZWN0
LmludGVyc2VjdHMocGl4ZWxTbmFwcGVkSW50UmVjdChib3JkZXJSZWN0KSkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gc29tZXRoaW5nIGNsZXZlciB3aGVu
IGJvcmRlcnMgZnJvbSBkaXN0aW5jdCBmcmFtZXNldHMgbWVldCBhdCBhIGpvaW4uCkBAIC01NzEs
NyArNTcxLDcgQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cG9zaXRpb25GcmFtZXNXaXRoRgogICAg
ICAgICBpbnQgaGVpZ2h0ID0gbV9yb3dzLm1fc2l6ZXNbcl07CiAKICAgICAgICAgZm9yIChpbnQg
YyA9IDA7IGMgPCBjb2xzOyBjKyspIHsKLSAgICAgICAgICAgIEludFJlY3Qgb2xkRnJhbWVSZWN0
ID0gY2hpbGQtPmZyYW1lUmVjdCgpOworICAgICAgICAgICAgSW50UmVjdCBvbGRGcmFtZVJlY3Qg
PSBwaXhlbFNuYXBwZWRJbnRSZWN0KGNoaWxkLT5mcmFtZVJlY3QoKSk7CiAKICAgICAgICAgICAg
IGludCB3aWR0aCA9IG1fY29scy5tX3NpemVzW2NdOwogCkBAIC02MTksNyArNjE5LDcgQEAgdm9p
ZCBSZW5kZXJGcmFtZVNldDo6cG9zaXRpb25GcmFtZXNXaXRoRgogICAgICAgICB4UG9zID0gMDsK
ICAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBjb2xzOyBjKyspIHsKICAgICAgICAgICAgIC8v
IGVuc3VyZSB0aGUgcm93cyBhbmQgY29sdW1ucyBhcmUgZmlsbGVkCi0gICAgICAgICAgICBJbnRS
ZWN0IG9sZFJlY3QgPSBjaGlsZC0+ZnJhbWVSZWN0KCk7CisgICAgICAgICAgICBJbnRSZWN0IG9s
ZFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGNoaWxkLT5mcmFtZVJlY3QoKSk7CiAKICAgICAg
ICAgICAgIGNoaWxkLT5zZXRMb2NhdGlvbihJbnRQb2ludCh4UG9zLCB5UG9zKSk7CiAgICAgICAg
ICAgICBjaGlsZC0+c2V0SGVpZ2h0KG1fcm93cy5tX3NpemVzW3JdKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gMTA3MDEwKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjczLDcgKzI3Myw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmYK
ICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICAg
ICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yOjpsaWdodEdyYXksIHN0eWxlKCkt
PmNvbG9yU3BhY2UoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6
OnRyYW5zcGFyZW50LCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOwotICAgICAgICAgICAgY29udGV4
dC0+ZHJhd1JlY3QoTGF5b3V0UmVjdChwYWludE9mZnNldC54KCkgKyBsZWZ0Qm9yZGVyICsgbGVm
dFBhZCwgcGFpbnRPZmZzZXQueSgpICsgdG9wQm9yZGVyICsgdG9wUGFkLCBjV2lkdGgsIGNIZWln
aHQpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdSZWN0KHBpeGVsU25hcHBlZEludFJlY3Qo
TGF5b3V0UmVjdChwYWludE9mZnNldC54KCkgKyBsZWZ0Qm9yZGVyICsgbGVmdFBhZCwgcGFpbnRP
ZmZzZXQueSgpICsgdG9wQm9yZGVyICsgdG9wUGFkLCBjV2lkdGgsIGNIZWlnaHQpKSk7CiAKICAg
ICAgICAgICAgIGJvb2wgZXJyb3JQaWN0dXJlRHJhd24gPSBmYWxzZTsKICAgICAgICAgICAgIExh
eW91dFNpemUgaW1hZ2VPZmZzZXQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAJKHJldmlzaW9uIDEwNzAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1ODcsNyArMTU4Nyw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY28KICAgICAgICAgICAgICAgICAv
LyBUaGUgY2FuQXV0b3Njcm9sbCBmdW5jdGlvbiBpbiBFdmVudEhhbmRsZXIgYWxzbyBrbm93cyBh
Ym91dCB0aGlzLgogICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBmcmFtZVZpZXct
PmZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+
cGFnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCktPnNjcm9sbFJl
Y3RJbnRvVmlldyhyZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UtPmNocm9tZSgp
LT5zY3JvbGxSZWN0SW50b1ZpZXcocGl4ZWxTbmFwcGVkSW50UmVjdChyZWN0KSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMTY3LDcgKzIxNjcsNyBA
QCB2b2lkIFJlbmRlckxheWVyOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvCiAgICAgaWYgKCFib3gp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IEludFJlY3QgYm9yZGVyQm94ID0gYm94LT5i
b3JkZXJCb3hSZWN0KCk7CisgICAgY29uc3QgSW50UmVjdCBib3JkZXJCb3ggPSBwaXhlbFNuYXBw
ZWRJbnRSZWN0KGJveC0+Ym9yZGVyQm94UmVjdCgpKTsKICAgICBjb25zdCBJbnRSZWN0JiBzY3Jv
bGxDb3JuZXIgPSBzY3JvbGxDb3JuZXJSZWN0KCk7CiAgICAgSW50UmVjdCBhYnNCb3VuZHMoYm9y
ZGVyQm94LmxvY2F0aW9uKCkgKyBvZmZzZXRGcm9tTGF5ZXIsIGJvcmRlckJveC5zaXplKCkpOwog
ICAgIGlmIChtX3ZCYXIpCkBAIC0zNzUwLDcgKzM3NTAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpj
YWxjdWxhdGVSZWN0cyhjb25zdCBSCiAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRlcnNl
Y3QobGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgLy8gU2hpZnQgdGhlIGJvdW5kcyB0byBiZSBmb3Igb3VyIHJlZ2lvbiBvbmx5Lgot
ICAgICAgICAgICAgTGF5b3V0UmVjdCBib3VuZHMgPSByZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVj
dEluUmVnaW9uKHJlZ2lvbik7CisgICAgICAgICAgICBMYXlvdXRSZWN0IGJvdW5kcyA9IHBpeGVs
U25hcHBlZEludFJlY3QocmVuZGVyQm94KCktPmJvcmRlckJveFJlY3RJblJlZ2lvbihyZWdpb24p
KTsKICAgICAgICAgICAgIGJvdW5kcy5tb3ZlQnkob2Zmc2V0KTsKICAgICAgICAgICAgIGJhY2tn
cm91bmRSZWN0LmludGVyc2VjdChib3VuZHMpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gMTA3
MDEwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxNiwxNiArNDE2LDE2IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVHcmFwaGljc0wKICAgICBSZW5kZXJMYXllciogY29tcEFuY2VzdG9yID0gbV9v
d25pbmdMYXllci0+YW5jZXN0b3JDb21wb3NpdGluZ0xheWVyKCk7CiAgICAgCiAgICAgLy8gV2Ug
Y29tcHV0ZSBldmVyeXRoaW5nIHJlbGF0aXZlIHRvIHRoZSBlbmNsb3NpbmcgY29tcG9zaXRpbmcg
bGF5ZXIuCi0gICAgTGF5b3V0UmVjdCBhbmNlc3RvckNvbXBvc2l0aW5nQm91bmRzOworICAgIElu
dFJlY3QgYW5jZXN0b3JDb21wb3NpdGluZ0JvdW5kczsKICAgICBpZiAoY29tcEFuY2VzdG9yKSB7
CiAgICAgICAgIEFTU0VSVChjb21wQW5jZXN0b3ItPmJhY2tpbmcoKSk7Ci0gICAgICAgIGFuY2Vz
dG9yQ29tcG9zaXRpbmdCb3VuZHMgPSBjb21wQW5jZXN0b3ItPmJhY2tpbmcoKS0+Y29tcG9zaXRl
ZEJvdW5kcygpOworICAgICAgICBhbmNlc3RvckNvbXBvc2l0aW5nQm91bmRzID0gcGl4ZWxTbmFw
cGVkSW50UmVjdChjb21wQW5jZXN0b3ItPmJhY2tpbmcoKS0+Y29tcG9zaXRlZEJvdW5kcygpKTsK
ICAgICB9CiAKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMgPSBjb21wb3Np
dGVkQm91bmRzKCk7CisgICAgSW50UmVjdCBsb2NhbENvbXBvc2l0aW5nQm91bmRzID0gcGl4ZWxT
bmFwcGVkSW50UmVjdChjb21wb3NpdGVkQm91bmRzKCkpOwogCi0gICAgTGF5b3V0UmVjdCByZWxh
dGl2ZUNvbXBvc2l0aW5nQm91bmRzKGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMpOwotICAgIExheW91
dFBvaW50IGRlbHRhOworICAgIEludFJlY3QgcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcyhsb2Nh
bENvbXBvc2l0aW5nQm91bmRzKTsKKyAgICBJbnRQb2ludCBkZWx0YTsKICAgICBtX293bmluZ0xh
eWVyLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhjb21wQW5jZXN0b3IsIGRlbHRhKTsKICAgICByZWxh
dGl2ZUNvbXBvc2l0aW5nQm91bmRzLm1vdmVCeShkZWx0YSk7CiAKQEAgLTQzMyw3ICs0MzMsNyBA
QCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAgICAgaWYgKGNvbXBB
bmNlc3RvciAmJiBjb21wQW5jZXN0b3ItPmJhY2tpbmcoKS0+aGFzQ2xpcHBpbmdMYXllcigpKSB7
CiAgICAgICAgIC8vIElmIHRoZSBjb21wb3NpdGluZyBhbmNlc3RvciBoYXMgYSBsYXllciB0byBj
bGlwIGNoaWxkcmVuLCB3ZSBwYXJlbnQgaW4gdGhhdCwgYW5kIHRoZXJlZm9yZQogICAgICAgICAv
LyBwb3NpdGlvbiByZWxhdGl2ZSB0byBpdC4KLSAgICAgICAgTGF5b3V0UmVjdCBjbGlwcGluZ0Jv
eCA9IGNsaXBCb3godG9SZW5kZXJCb3goY29tcEFuY2VzdG9yLT5yZW5kZXJlcigpKSk7CisgICAg
ICAgIEludFJlY3QgY2xpcHBpbmdCb3ggPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGNsaXBCb3godG9S
ZW5kZXJCb3goY29tcEFuY2VzdG9yLT5yZW5kZXJlcigpKSkpOwogICAgICAgICBncmFwaGljc0xh
eWVyUGFyZW50TG9jYXRpb24gPSBjbGlwcGluZ0JveC5sb2NhdGlvbigpOwogICAgIH0gZWxzZSBp
ZiAoY29tcEFuY2VzdG9yKQogICAgICAgICBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24gPSBh
bmNlc3RvckNvbXBvc2l0aW5nQm91bmRzLmxvY2F0aW9uKCk7CkBAIC00NDQsNyArNDQ0LDcgQEAg
dm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTAogICAgICAgICAvLyBDYWxs
IGNhbGN1bGF0ZVJlY3RzIHRvIGdldCB0aGUgYmFja2dyb3VuZFJlY3Qgd2hpY2ggaXMgd2hhdCBp
cyB1c2VkIHRvIGNsaXAgdGhlIGNvbnRlbnRzIG9mIHRoaXMKICAgICAgICAgLy8gbGF5ZXIuIE5v
dGUgdGhhdCB3ZSBjYWxsIGl0IHdpdGggdGVtcG9yYXJ5Q2xpcFJlY3RzID0gdHJ1ZSBiZWNhdXNl
IG5vcm1hbGx5IHdoZW4gY29tcHV0aW5nIGNsaXAgcmVjdHMKICAgICAgICAgLy8gZm9yIGEgY29t
cG9zaXRpbmcgbGF5ZXIsIHJvb3RMYXllciBpcyB0aGUgbGF5ZXIgaXRzZWxmLgotICAgICAgICBM
YXlvdXRSZWN0IHBhcmVudENsaXBSZWN0ID0gbV9vd25pbmdMYXllci0+YmFja2dyb3VuZENsaXBS
ZWN0KGNvbXBBbmNlc3RvciwgMCwgdHJ1ZSkucmVjdCgpOyAvLyBGSVhNRTogSW5jb3JyZWN0IGZv
ciBDU1MgcmVnaW9ucy4KKyAgICAgICAgSW50UmVjdCBwYXJlbnRDbGlwUmVjdCA9IHBpeGVsU25h
cHBlZEludFJlY3QobV9vd25pbmdMYXllci0+YmFja2dyb3VuZENsaXBSZWN0KGNvbXBBbmNlc3Rv
ciwgMCwgdHJ1ZSkucmVjdCgpKTsgLy8gRklYTUU6IEluY29ycmVjdCBmb3IgQ1NTIHJlZ2lvbnMu
CiAgICAgICAgIEFTU0VSVChwYXJlbnRDbGlwUmVjdCAhPSBQYWludEluZm86OmluZmluaXRlUmVj
dCgpKTsKICAgICAgICAgbV9hbmNlc3RvckNsaXBwaW5nTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0
UG9pbnQoKSArIChwYXJlbnRDbGlwUmVjdC5sb2NhdGlvbigpIC0gZ3JhcGhpY3NMYXllclBhcmVu
dExvY2F0aW9uKSk7CiAgICAgICAgIG1fYW5jZXN0b3JDbGlwcGluZ0xheWVyLT5zZXRTaXplKHBh
cmVudENsaXBSZWN0LnNpemUoKSk7CkBAIC00NTcsNyArNDU3LDcgQEAgdm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTAogICAgIH0KIAogICAgIG1fZ3JhcGhpY3NMYXllci0+
c2V0UG9zaXRpb24oRmxvYXRQb2ludCgpICsgKHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMubG9j
YXRpb24oKSAtIGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlvbikpOwotICAgIG1fZ3JhcGhpY3NM
YXllci0+c2V0T2Zmc2V0RnJvbVJlbmRlcmVyKGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRp
b24oKSAtIExheW91dFBvaW50KCkpOworICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0T2Zmc2V0RnJv
bVJlbmRlcmVyKGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSAtIEludFBvaW50KCkp
OwogICAgIAogICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ncmFwaGljc0xheWVyLT5zaXplKCk7
CiAgICAgRmxvYXRTaXplIG5ld1NpemUgPSByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLnNpemUo
KTsKQEAgLTQ3MCw5ICs0NzAsOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3Jh
cGhpY3NMCiAgICAgfQogCiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxheWVyIHRoYXQgY2xpcHMgY2hp
bGRyZW4sIHBvc2l0aW9uIGl0LgotICAgIExheW91dFJlY3QgY2xpcHBpbmdCb3g7CisgICAgSW50
UmVjdCBjbGlwcGluZ0JveDsKICAgICBpZiAobV9jbGlwcGluZ0xheWVyKSB7Ci0gICAgICAgIGNs
aXBwaW5nQm94ID0gY2xpcEJveCh0b1JlbmRlckJveChyZW5kZXJlcigpKSk7CisgICAgICAgIGNs
aXBwaW5nQm94ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChjbGlwQm94KHRvUmVuZGVyQm94KHJlbmRl
cmVyKCkpKSk7CiAgICAgICAgIG1fY2xpcHBpbmdMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2lu
dCgpICsgKGNsaXBwaW5nQm94LmxvY2F0aW9uKCkgLSBsb2NhbENvbXBvc2l0aW5nQm91bmRzLmxv
Y2F0aW9uKCkpKTsKICAgICAgICAgbV9jbGlwcGluZ0xheWVyLT5zZXRTaXplKGNsaXBwaW5nQm94
LnNpemUoKSk7CiAgICAgICAgIG1fY2xpcHBpbmdMYXllci0+c2V0T2Zmc2V0RnJvbVJlbmRlcmVy
KGNsaXBwaW5nQm94LmxvY2F0aW9uKCkgLSBMYXlvdXRQb2ludCgpKTsKQEAgLTQ4OCwxMCArNDg4
LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0wKICAgICB9CiAg
ICAgCiAgICAgaWYgKG1fb3duaW5nTGF5ZXItPmhhc1RyYW5zZm9ybSgpKSB7Ci0gICAgICAgIGNv
bnN0IExheW91dFJlY3QgYm9yZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmJvcmRl
ckJveFJlY3QoKTsKKyAgICAgICAgY29uc3QgSW50UmVjdCBib3JkZXJCb3ggPSBwaXhlbFNuYXBw
ZWRJbnRSZWN0KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5ib3JkZXJCb3hSZWN0KCkpOwogCiAg
ICAgICAgIC8vIEdldCBsYXlvdXQgYm91bmRzIGluIHRoZSBjb29yZHMgb2YgY29tcEFuY2VzdG9y
IHRvIG1hdGNoIHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMuCi0gICAgICAgIExheW91dFJlY3Qg
bGF5ZXJCb3VuZHMgPSBMYXlvdXRSZWN0KGRlbHRhLCBib3JkZXJCb3guc2l6ZSgpKTsKKyAgICAg
ICAgSW50UmVjdCBsYXllckJvdW5kcyA9IEludFJlY3QoZGVsdGEsIGJvcmRlckJveC5zaXplKCkp
OwogCiAgICAgICAgIC8vIFVwZGF0ZSBwcm9wZXJ0aWVzIHRoYXQgZGVwZW5kIG9uIGxheWVyIGRp
bWVuc2lvbnMKICAgICAgICAgRmxvYXRQb2ludDNEIHRyYW5zZm9ybU9yaWdpbiA9IGNvbXB1dGVU
cmFuc2Zvcm1PcmlnaW4oYm9yZGVyQm94KTsKQEAgLTUyNCwxMiArNTI0LDEyIEBAIHZvaWQgUmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0wKICAgICBpZiAobV9mb3JlZ3JvdW5kTGF5
ZXIpIHsKICAgICAgICAgRmxvYXRQb2ludCBmb3JlZ3JvdW5kUG9zaXRpb247CiAgICAgICAgIEZs
b2F0U2l6ZSBmb3JlZ3JvdW5kU2l6ZSA9IG5ld1NpemU7Ci0gICAgICAgIExheW91dFNpemUgZm9y
ZWdyb3VuZE9mZnNldCA9IG1fZ3JhcGhpY3NMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCk7Cisg
ICAgICAgIEludFNpemUgZm9yZWdyb3VuZE9mZnNldCA9IG1fZ3JhcGhpY3NMYXllci0+b2Zmc2V0
RnJvbVJlbmRlcmVyKCk7CiAgICAgICAgIGlmIChtX2NsaXBwaW5nTGF5ZXIpIHsKICAgICAgICAg
ICAgIC8vIElmIHdlIGhhdmUgYSBjbGlwcGluZyBsYXllciAod2hpY2ggY2xpcHMgZGVzY2VuZGFu
dHMpLCB0aGVuIHRoZSBmb3JlZ3JvdW5kIGxheWVyIGlzIGEgY2hpbGQgb2YgaXQsCiAgICAgICAg
ICAgICAvLyBzbyB0aGF0IGl0IGdldHMgY29ycmVjdGx5IHNvcnRlZCB3aXRoIGNoaWxkcmVuLiBJ
biB0aGF0IGNhc2UsIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBjbGlwcGluZyBsYXllci4KICAg
ICAgICAgICAgIGZvcmVncm91bmRTaXplID0gRmxvYXRTaXplKGNsaXBwaW5nQm94LnNpemUoKSk7
Ci0gICAgICAgICAgICBmb3JlZ3JvdW5kT2Zmc2V0ID0gY2xpcHBpbmdCb3gubG9jYXRpb24oKSAt
IExheW91dFBvaW50KCk7CisgICAgICAgICAgICBmb3JlZ3JvdW5kT2Zmc2V0ID0gY2xpcHBpbmdC
b3gubG9jYXRpb24oKSAtIEludFBvaW50KCk7CiAgICAgICAgIH0KIAogICAgICAgICBtX2ZvcmVn
cm91bmRMYXllci0+c2V0UG9zaXRpb24oZm9yZWdyb3VuZFBvc2l0aW9uKTsKQEAgLTU0OCw3ICs1
NDgsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAgICAgICAg
IHJlZmxlY3Rpb25CYWNraW5nLT5ncmFwaGljc0xheWVyKCktPnNldFJlcGxpY2F0ZWRMYXllclBv
c2l0aW9uKEZsb2F0UG9pbnQoKSArIChsYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVmbGVjdGlv
bkxheWVyQm91bmRzLmxvY2F0aW9uKCkpKTsKICAgICB9CiAKLSAgICBtX2dyYXBoaWNzTGF5ZXIt
PnNldENvbnRlbnRzUmVjdChjb250ZW50c0JveCgpKTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnNl
dENvbnRlbnRzUmVjdChwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnRlbnRzQm94KCkpKTsKICAgICB1
cGRhdGVEcmF3c0NvbnRlbnQoKTsKICAgICB1cGRhdGVBZnRlcldpZGdldFJlc2l6ZSgpOwogfQpA
QCAtMTEzNCw3ICsxMTM0LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRTY3JvbGxiYXIoU2Nyb2xsYmFy
KiBzYwogICAgIGNvbnRleHQudHJhbnNsYXRlKC1zY3JvbGxiYXJSZWN0LngoKSwgLXNjcm9sbGJh
clJlY3QueSgpKTsKICAgICBMYXlvdXRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IGNsaXA7CiAgICAg
dHJhbnNmb3JtZWRDbGlwLm1vdmVCeShzY3JvbGxiYXJSZWN0LmxvY2F0aW9uKCkpOwotICAgIHNj
cm9sbGJhci0+cGFpbnQoJmNvbnRleHQsIHRyYW5zZm9ybWVkQ2xpcCk7CisgICAgc2Nyb2xsYmFy
LT5wYWludCgmY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsK
ICAgICBjb250ZXh0LnJlc3RvcmUoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDEwNzAxMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00ODEsNyArNDgxLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmNhbGN1bAogICAgICAgICBMYXlvdXRQb2ludCBhbmNlc3RvclJlbE9mZnNldDsK
ICAgICAgICAgbGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIsIGFuY2Vz
dG9yUmVsT2Zmc2V0KTsKICAgICAgICAgYm91bmRpbmdCb3hSZWN0Lm1vdmVCeShhbmNlc3RvclJl
bE9mZnNldCk7Ci0gICAgICAgIHJldHVybiBib3VuZGluZ0JveFJlY3Q7CisgICAgICAgIHJldHVy
biBwaXhlbFNuYXBwZWRJbnRSZWN0KGJvdW5kaW5nQm94UmVjdCk7CiAgICAgfQogCiAgICAgaWYg
KFJlbmRlckxheWVyKiByZWZsZWN0aW9uID0gbGF5ZXItPnJlZmxlY3Rpb25MYXllcigpKSB7CkBA
IC01MzYsNyArNTM2LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbGN1
bAogICAgIGxheWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBhbmNlc3Rv
clJlbE9mZnNldCk7CiAgICAgdW5pb25Cb3VuZHMubW92ZUJ5KGFuY2VzdG9yUmVsT2Zmc2V0KTsK
IAotICAgIHJldHVybiB1bmlvbkJvdW5kczsKKyAgICByZXR1cm4gcGl4ZWxTbmFwcGVkSW50UmVj
dCh1bmlvbkJvdW5kcyk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllcldh
c0FkZGVkKFJlbmRlckxheWVyKiAvKnBhcmVudCovLCBSZW5kZXJMYXllciogLypjaGlsZCovKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9u
IDEwNzAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NjUsNyArOTY1LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdM
aW5lRm9yQm94U2lkZShHcgogICAgICAgICAgICAgICAgIC8vIHRoaXMgbWF0dGVycyBmb3IgcmVj
dHMgaW4gdHJhbnNmb3JtZWQgY29udGV4dHMuCiAgICAgICAgICAgICAgICAgYm9vbCB3YXNBbnRp
YWxpYXNlZCA9IGdyYXBoaWNzQ29udGV4dC0+c2hvdWxkQW50aWFsaWFzKCk7CiAgICAgICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTaG91bGRBbnRpYWxpYXMoYW50aWFsaWFzKTsKLSAg
ICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdSZWN0KEludFJlY3QoeDEsIHkxLCB4
MiAtIHgxLCB5MiAtIHkxKSk7CisgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3
UmVjdChwaXhlbFNuYXBwZWRJbnRSZWN0KExheW91dFJlY3QoeDEsIHkxLCB4MiAtIHgxLCB5MiAt
IHkxKSkpOwogICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U2hvdWxkQW50aWFs
aWFzKHdhc0FudGlhbGlhc2VkKTsKICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNl
dFN0cm9rZVN0eWxlKG9sZFN0cm9rZVN0eWxlKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBA
IC0xMTEwLDcgKzExMTAsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRkUERGVVJMUmVjdChHcmFw
aGljCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBocmVmID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG4pLT5nZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOwogICAgIGlmIChocmVmLmlzTnVsbCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgY29udGV4dC0+c2V0VVJMRm9yUmVjdChuLT5kb2N1bWVudCgpLT5j
b21wbGV0ZVVSTChocmVmKSwgcmVjdCk7CisgICAgY29udGV4dC0+c2V0VVJMRm9yUmVjdChuLT5k
b2N1bWVudCgpLT5jb21wbGV0ZVVSTChocmVmKSwgcGl4ZWxTbmFwcGVkSW50UmVjdChyZWN0KSk7
CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHBhaW50UmVjdCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuY3BwCShyZXZpc2lvbiAxMDcwMTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDcg
KzE3NSw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzaG93UG8KICAgICAg
ICAgbV9zZWFyY2hQb3B1cC0+c2F2ZVJlY2VudFNlYXJjaGVzKG5hbWUsIG1fcmVjZW50U2VhcmNo
ZXMpOwogICAgIH0KIAotICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgpLT5zaG93KGFic29s
dXRlQm91bmRpbmdCb3hSZWN0KCksIGRvY3VtZW50KCktPnZpZXcoKSwgLTEpOworICAgIG1fc2Vh
cmNoUG9wdXAtPnBvcHVwTWVudSgpLT5zaG93KHBpeGVsU25hcHBlZEludFJlY3QoYWJzb2x1dGVC
b3VuZGluZ0JveFJlY3QoKSksIGRvY3VtZW50KCktPnZpZXcoKSwgLTEpOwogfQogCiB2b2lkIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aGlkZVBvcHVwKCkKQEAgLTE5Niw3ICsxOTYsNyBA
QCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFpbnQoCiAKICAgICAgICAgLy8g
Q29udmVydCB0aGUgcmVjdCBpbnRvIHRoZSBjb29yZHMgdXNlZCBmb3IgcGFpbnRpbmcgdGhlIGNv
bnRlbnQKICAgICAgICAgY29udGVudHNSZWN0Lm1vdmVCeShwYWludE9mZnNldCArIGxvY2F0aW9u
KCkpOwotICAgICAgICB0aGVtZSgpLT5wYWludENhcHNMb2NrSW5kaWNhdG9yKHRoaXMsIHBhaW50
SW5mbywgY29udGVudHNSZWN0KTsKKyAgICAgICAgdGhlbWUoKS0+cGFpbnRDYXBzTG9ja0luZGlj
YXRvcih0aGlzLCBwYWludEluZm8sIHBpeGVsU25hcHBlZEludFJlY3QoY29udGVudHNSZWN0KSk7
CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcAkocmV2aXNpb24gMTA3MDEwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cldpZGdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw3ICszMDgsNyBAQCB2b2lkIFJlbmRl
cldpZGdldDo6cGFpbnQoUGFpbnRJbmZvJiBwYWluCiAgICAgLy8gUGFpbnQgYSBwYXJ0aWFsbHkg
dHJhbnNwYXJlbnQgd2FzaCBvdmVyIHNlbGVjdGVkIHdpZGdldHMuCiAgICAgaWYgKGlzU2VsZWN0
ZWQoKSAmJiAhZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSkgewogICAgICAgICAvLyBGSVhNRTogc2Vs
ZWN0aW9uUmVjdCgpIGlzIGluIGFic29sdXRlLCBub3QgcGFpbnRpbmcgY29vcmRpbmF0ZXMuCi0g
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUmVjdChzZWxlY3Rpb25SZWN0KCksIHNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOworICAgICAgICBw
YWludEluZm8uY29udGV4dC0+ZmlsbFJlY3QocGl4ZWxTbmFwcGVkSW50UmVjdChzZWxlY3Rpb25S
ZWN0KCkpLCBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgp
KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmNwcAkocmV2aXNpb24gMTA3MDEwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODg2LDcgKzg4
Niw3IEBAIHN0YXRpYyBmbG9hdCBjYWxjQ29uc3RyYWludFNjYWxlRm9yKGNvbnMKIAogUm91bmRl
ZFJlY3QgUmVuZGVyU3R5bGU6OmdldFJvdW5kZWRCb3JkZXJGb3IoY29uc3QgTGF5b3V0UmVjdCYg
Ym9yZGVyUmVjdCwgYm9vbCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBib29sIGluY2x1ZGVMb2dp
Y2FsUmlnaHRFZGdlKSBjb25zdAogewotICAgIFJvdW5kZWRSZWN0IHJvdW5kZWRSZWN0KGJvcmRl
clJlY3QpOworICAgIFJvdW5kZWRSZWN0IHJvdW5kZWRSZWN0KHBpeGVsU25hcHBlZEludFJlY3Qo
Ym9yZGVyUmVjdCkpOwogICAgIGlmIChoYXNCb3JkZXJSYWRpdXMoKSkgewogICAgICAgICBSb3Vu
ZGVkUmVjdDo6UmFkaWkgcmFkaWkgPSBjYWxjUmFkaWlGb3Ioc3Vycm91bmQtPmJvcmRlciwgYm9y
ZGVyUmVjdC5zaXplKCkpOwogICAgICAgICByYWRpaS5zY2FsZShjYWxjQ29uc3RyYWludFNjYWxl
Rm9yKGJvcmRlclJlY3QsIHJhZGlpKSk7CkBAIC05MTUsNyArOTE1LDcgQEAgUm91bmRlZFJlY3Qg
UmVuZGVyU3R5bGU6OmdldFJvdW5kZWRJbm5lcgogICAgICAgICAgICAgICAgYm9yZGVyUmVjdC53
aWR0aCgpIC0gbGVmdFdpZHRoIC0gcmlnaHRXaWR0aCwgCiAgICAgICAgICAgICAgICBib3JkZXJS
ZWN0LmhlaWdodCgpIC0gdG9wV2lkdGggLSBib3R0b21XaWR0aCk7CiAKLSAgICBSb3VuZGVkUmVj
dCByb3VuZGVkUmVjdChpbm5lclJlY3QpOworICAgIFJvdW5kZWRSZWN0IHJvdW5kZWRSZWN0KHBp
eGVsU25hcHBlZEludFJlY3QoaW5uZXJSZWN0KSk7CiAKICAgICBpZiAoaGFzQm9yZGVyUmFkaXVz
KCkpIHsKICAgICAgICAgUm91bmRlZFJlY3Q6OlJhZGlpIHJhZGlpID0gZ2V0Um91bmRlZEJvcmRl
ckZvcihib3JkZXJSZWN0KS5yYWRpaSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126387</attachid>
            <date>2012-02-09 15:18:38 -0800</date>
            <delta_ts>2012-02-09 17:13:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78054-20120209151837.patch</filename>
            <type>text/plain</type>
            <size>36050</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzI5NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBACisyMDEyLTAyLTA5ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgcGl4ZWxTbmFwcGVk
SW50UmVjdCBtZXRob2QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc4MDU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgcGl4ZWxTbmFwcGVkSW50UmVjdCBtZXRob2Qg
dGhhdCB3aWxsIHNuYXAgYSBzdWItcGl4ZWwgTGF5b3V0UmVjdCB0bworICAgICAgICBwaXhlbCBi
b3VuZGFyaWVzLiBUaGVzZSBwaXhlbCBzbmFwcGVkIGZvcm1zIGFyZSB3aGF0IGlzIHVzZWQgdG8g
Y29tbXVuaWNhdGUgd2l0aCB0aGUgZ3JhcGhpY3MKKyAgICAgICAgZW5naW5lICh0byBwYWludCBh
dCB3aG9sZSBwaXhlbCBib3VuZGFyaWVzKSBhbmQgdGhlIGVtYmVkZGluZyBhcHAgKHNvIHRoZXkg
ZG9uJ3QgbmVlZCB0byAKKyAgICAgICAgdW5kZXJzdGFuZCB3ZSdyZSB1c2luZyBzdWItcGl4ZWwg
dW5pdHMpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzT2ZmU2NyZWVuKToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5kc0ZvclZpc2libGVQb3NpdGlv
blJhbmdlKToKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFu
Z2U6OmJvdW5kaW5nQm94KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwYWludCk6CisgICAgICAgICog
aHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpzdGFydFNwZWVjaElucHV0KToKKyAg
ICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpub2RlSW1h
Z2UpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6cmVwYWludENvbnRlbnRSZWN0YW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3Ojpkb0RlZmVycmVkUmVwYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
Ojp3aW5kb3dDbGlwUmVjdEZvckxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OnBhaW50
R3JhcGhpY3NMYXllckNvbnRlbnRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpwYWludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL0xheW91dFR5cGVzLmg6CisgICAgICAgIChXZWJDb3JlOjpwaXhlbFNuYXBw
ZWRJbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5D
b250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2Fwcyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpwdXNoQ29udGVudHNDbGlwKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBh
aW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OmNhbGN1bGF0ZUJhY2tncm91bmRJbWFnZUdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRGV0YWlsc01hcmtlcjo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
bG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnBhaW50
SW50b1JlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYW1lU2V0OjpwYWludENvbHVtbkJvcmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZVNldDo6cGFpbnRSb3dCb3JkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6OnBvc2l0aW9uRnJhbWVzV2l0aEZsYXR0ZW5pbmcpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNp
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwb3NpdGlvbk92ZXJmbG93Q29u
dHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21ldHJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OnBhaW50U2Nyb2xsYmFyKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6Y2FsY3VsYXRlQ29tcG9zaXRlZEJvdW5kcyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmRy
YXdMaW5lRm9yQm94U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFkZFBE
RlVSTFJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpz
aG93UG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmdldFJv
dW5kZWRCb3JkZXJGb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmdldFJvdW5k
ZWRJbm5lckJvcmRlckZvcik6CisKIDIwMTItMDItMDkgIExldmkgV2VpbnRyYXViICA8bGV2aXdA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCByb3VuZGVkSW50UG9pbnQgbWV0aG9kIGZvciBM
YXlvdXRQb2ludHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTA3Mjk3KQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzA3LDcgKzcwNyw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6aXNSZWFkT24KIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
aXNPZmZTY3JlZW4oKSBjb25zdAogewogICAgIEFTU0VSVChtX3JlbmRlcmVyKTsKLSAgICBMYXlv
dXRSZWN0IGNvbnRlbnRSZWN0ID0gbV9yZW5kZXJlci0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dS
ZWN0KCk7CisgICAgSW50UmVjdCBjb250ZW50UmVjdCA9IHBpeGVsU25hcHBlZEludFJlY3QobV9y
ZW5kZXJlci0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkpOwogICAgIEZyYW1lVmlldyog
dmlldyA9IG1fcmVuZGVyZXItPmZyYW1lKCktPnZpZXcoKTsKICAgICBJbnRSZWN0IHZpZXdSZWN0
ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgdmlld1JlY3QuaW50ZXJzZWN0KGNv
bnRlbnRSZWN0KTsKQEAgLTI2MzAsOSArMjYzMCw5IEBAIEludFJlY3QgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6Ym91bmQKICAgICB9CiAgICAgCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHJl
dHVybiBtX3JlbmRlcmVyLT5kb2N1bWVudCgpLT52aWV3KCktPmNvbnRlbnRzVG9TY3JlZW4ob3Vy
cmVjdCk7CisgICAgcmV0dXJuIG1fcmVuZGVyZXItPmRvY3VtZW50KCktPnZpZXcoKS0+Y29udGVu
dHNUb1NjcmVlbihwaXhlbFNuYXBwZWRJbnRSZWN0KG91cnJlY3QpKTsKICNlbHNlCi0gICAgcmV0
dXJuIG91cnJlY3Q7CisgICAgcmV0dXJuIHBpeGVsU25hcHBlZEludFJlY3Qob3VycmVjdCk7CiAj
ZW5kaWYKIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkocmV2aXNpb24gMTA3Mjk3KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3OCw3
ICsxNjc4LDcgQEAgSW50UmVjdCBSYW5nZTo6Ym91bmRpbmdCb3goKQogICAgIGNvbnN0IHNpemVf
dCBuID0gcmVjdHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKQog
ICAgICAgICByZXN1bHQudW5pdGUocmVjdHNbaV0pOwotICAgIHJldHVybiByZXN1bHQ7CisgICAg
cmV0dXJuIHBpeGVsU25hcHBlZEludFJlY3QocmVzdWx0KTsKIH0KIAogdm9pZCBSYW5nZTo6dGV4
dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0LCBS
YW5nZUluRml4ZWRQb3NpdGlvbiogaW5GaXhlZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDcyOTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgyLDkgKzI4
Miw5IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50KEdyYXBoaWNzQ28KICAgICAgICAg
SW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gYnVmZmVyKCk7CiAgICAgICAgIGlmIChpbWFnZUJ1
ZmZlcikgewogICAgICAgICAgICAgaWYgKG1fcHJlc2VudGVkSW1hZ2UpCi0gICAgICAgICAgICAg
ICAgY29udGV4dC0+ZHJhd0ltYWdlKG1fcHJlc2VudGVkSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIHIsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKG1fcHJlc2VudGVkSW1hZ2UuZ2V0KCks
IENvbG9yU3BhY2VEZXZpY2VSR0IsIHBpeGVsU25hcHBlZEludFJlY3QociksIENvbXBvc2l0ZVNv
dXJjZU92ZXIsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCByLCBDb21wb3NpdGVTb3VyY2VPdmVyLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgQ29s
b3JTcGFjZURldmljZVJHQiwgcGl4ZWxTbmFwcGVkSW50UmVjdChyKSwgQ29tcG9zaXRlU291cmNl
T3ZlciwgdXNlTG93UXVhbGl0eVNjYWxlKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxl
bWVudHMuY3BwCShyZXZpc2lvbiAxMDcyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTAsNyAr
NTUwLDcgQEAgdm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c3RhcgogICAgIEF0
b21pY1N0cmluZyBsYW5ndWFnZSA9IGlucHV0LT5jb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKTsK
ICAgICBTdHJpbmcgZ3JhbW1hciA9IGlucHV0LT5nZXRBdHRyaWJ1dGUod2Via2l0Z3JhbW1hckF0
dHIpOwogICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBwcm9iYWJseSByZXNwZWN0IHRyYW5zZm9y
bXMKLSAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlcigpLT52aWV3KCktPmZyYW1lVmlldygpLT5j
b250ZW50c1RvV2luZG93KHJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0SWdub3Jp
bmdUcmFuc2Zvcm1zKCkpOworICAgIEludFJlY3QgcmVjdCA9IHBpeGVsU25hcHBlZEludFJlY3Qo
cmVuZGVyZXIoKS0+dmlldygpLT5mcmFtZVZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZW5kZXJl
cigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdElnbm9yaW5nVHJhbnNmb3JtcygpKSk7CiAgICAg
aWYgKHNwZWVjaElucHV0KCktPnN0YXJ0UmVjb2duaXRpb24obV9saXN0ZW5lcklkLCByZWN0LCBs
YW5ndWFnZSwgZ3JhbW1hciwgZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSkpCiAgICAgICAg
IHNldFN0YXRlKFJlY29yZGluZyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNp
b24gMTA3Mjk3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNzIsNyArMTA3Miw3IEBAIERyYWdJbWFnZVJlZiBGcmFtZTo6bm9kZUltYWdlKE5v
ZGUqIG5vZGUKICAgICBtX3ZpZXctPnNldE5vZGVUb0RyYXcobm9kZSk7IC8vIEVuYWJsZSBzcGVj
aWFsIHN1Yi10cmVlIGRyYXdpbmcgbW9kZS4KIAogICAgIExheW91dFJlY3QgdG9wTGV2ZWxSZWN0
OwotICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gcmVuZGVyZXItPnBhaW50aW5nUm9vdFJlY3Qo
dG9wTGV2ZWxSZWN0KTsKKyAgICBJbnRSZWN0IHBhaW50aW5nUmVjdCA9IHBpeGVsU25hcHBlZElu
dFJlY3QocmVuZGVyZXItPnBhaW50aW5nUm9vdFJlY3QodG9wTGV2ZWxSZWN0KSk7CiAKICAgICBP
d25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVj
dC5zaXplKCkpKTsKICAgICBpZiAoIWJ1ZmZlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAJKHJldmlzaW9uIDEwNzI5NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3NCw3ICsxNzc0LDcgQEAgdm9pZCBGcmFtZVZpZXc6
OnJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKAogICAgICAgICBpZiAobV9yZXBhaW50Q291bnQgPT0g
Y1JlcGFpbnRSZWN0VW5pb25UaHJlc2hvbGQpIHsKICAgICAgICAgICAgIEludFJlY3QgdW5pb25l
ZFJlY3Q7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY1JlcGFpbnRSZWN0
VW5pb25UaHJlc2hvbGQ7ICsraSkKLSAgICAgICAgICAgICAgICB1bmlvbmVkUmVjdC51bml0ZSht
X3JlcGFpbnRSZWN0c1tpXSk7CisgICAgICAgICAgICAgICAgdW5pb25lZFJlY3QudW5pdGUocGl4
ZWxTbmFwcGVkSW50UmVjdChtX3JlcGFpbnRSZWN0c1tpXSkpOwogICAgICAgICAgICAgbV9yZXBh
aW50UmVjdHMuY2xlYXIoKTsKICAgICAgICAgICAgIG1fcmVwYWludFJlY3RzLmFwcGVuZCh1bmlv
bmVkUmVjdCk7CiAgICAgICAgIH0KQEAgLTE4ODksMTEgKzE4ODksMTEgQEAgdm9pZCBGcmFtZVZp
ZXc6OmRvRGVmZXJyZWRSZXBhaW50cygpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7IGkrKykgewogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgICAgICBpZiAoZnJh
bWUoKS0+dGlsZWRCYWNraW5nU3RvcmUoKSkgewotICAgICAgICAgICAgZnJhbWUoKS0+dGlsZWRC
YWNraW5nU3RvcmUoKS0+aW52YWxpZGF0ZShtX3JlcGFpbnRSZWN0c1tpXSk7CisgICAgICAgICAg
ICBmcmFtZSgpLT50aWxlZEJhY2tpbmdTdG9yZSgpLT5pbnZhbGlkYXRlKHBpeGVsU25hcHBlZElu
dFJlY3QobV9yZXBhaW50UmVjdHNbaV0pKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAjZW5kaWYKLSAgICAgICAgU2Nyb2xsVmlldzo6cmVwYWludENvbnRlbnRSZWN0YW5nbGUo
bV9yZXBhaW50UmVjdHNbaV0sIGZhbHNlKTsKKyAgICAgICAgU2Nyb2xsVmlldzo6cmVwYWludENv
bnRlbnRSZWN0YW5nbGUocGl4ZWxTbmFwcGVkSW50UmVjdChtX3JlcGFpbnRSZWN0c1tpXSksIGZh
bHNlKTsKICAgICB9CiAgICAgbV9yZXBhaW50UmVjdHMuY2xlYXIoKTsKICAgICBtX3JlcGFpbnRD
b3VudCA9IDA7CkBAIC0yNDY4LDkgKzI0NjgsOSBAQCBJbnRSZWN0IEZyYW1lVmlldzo6d2luZG93
Q2xpcFJlY3RGb3JMYXllCiAgICAgLy8gQXBwbHkgdGhlIGNsaXAgZnJvbSB0aGUgbGF5ZXIuCiAg
ICAgSW50UmVjdCBjbGlwUmVjdDsKICAgICBpZiAoY2xpcFRvTGF5ZXJDb250ZW50cykKLSAgICAg
ICAgY2xpcFJlY3QgPSBsYXllci0+Y2hpbGRyZW5DbGlwUmVjdCgpOworICAgICAgICBjbGlwUmVj
dCA9IHBpeGVsU25hcHBlZEludFJlY3QobGF5ZXItPmNoaWxkcmVuQ2xpcFJlY3QoKSk7CiAgICAg
ZWxzZQotICAgICAgICBjbGlwUmVjdCA9IGxheWVyLT5zZWxmQ2xpcFJlY3QoKTsKKyAgICAgICAg
Y2xpcFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGxheWVyLT5zZWxmQ2xpcFJlY3QoKSk7CiAg
ICAgY2xpcFJlY3QgPSBjb250ZW50c1RvV2luZG93KGNsaXBSZWN0KTsgCiAgICAgcmV0dXJuIGlu
dGVyc2VjdGlvbihjbGlwUmVjdCwgd2luZG93Q2xpcFJlY3QoKSk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAkocmV2
aXNpb24gMTA3Mjk3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OCw3ICsyOTgsNyBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXI6OnBhaW50R3JhcGhpY3NMYXllckNvCiAgICAgICAgIExheW91dFJlY3QgY2xpcFJl
Y3QoY2xpcCk7CiAgICAgICAgIGNsaXBSZWN0Lm1vdmUob2Zmc2V0KTsKIAotICAgICAgICBtX2Ns
aWVudC0+cGFpbnRDb250ZW50cyh0aGlzLCBjb250ZXh0LCBtX3BhaW50aW5nUGhhc2UsIGNsaXBS
ZWN0KTsKKyAgICAgICAgbV9jbGllbnQtPnBhaW50Q29udGVudHModGhpcywgY29udGV4dCwgbV9w
YWludGluZ1BoYXNlLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNsaXBSZWN0KSk7CiAgICAgfQogI2lm
bmRlZiBOREVCVUcKICAgICBzX2luUGFpbnRDb250ZW50cyA9IGZhbHNlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMTA3Mjk3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDA4LDcgKzEwMDgsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50KFBhaW50
SW5mbyYgcGFpCiAgICAgZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CiAgICAgb3Zl
cmZsb3dSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CiAgICAgCi0gICAgaWYgKCFwYWludEluZm8u
cmVjdC5pbnRlcnNlY3RzKG92ZXJmbG93UmVjdCkpCisgICAgaWYgKCFwYWludEluZm8ucmVjdC5p
bnRlcnNlY3RzKHBpeGVsU25hcHBlZEludFJlY3Qob3ZlcmZsb3dSZWN0KSkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUNoaWxkT3V0bGlu
ZXMpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCShyZXZpc2lv
biAxMDcyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTEgQEAgaW5saW5lIExheW91dFJlY3QgZW5jbG9zaW5n
TGF5b3V0UmVjdChjbwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwogfQogCitp
bmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3Qp
Cit7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKIGlubGluZSBMYXlvdXRTaXplIHJvdW5kZWRMYXlv
dXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgcykKIHsKICAgICByZXR1cm4gcm91bmRlZEludFNpemUo
cyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlz
aW9uIDEwNzI5NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1NDAsNyArMjU0MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBh
aW50Q29sdW1uQ29udGVudHMoUGEKICAgICAgICAgfQogICAgICAgICBjb2xSZWN0Lm1vdmVCeShw
YWludE9mZnNldCk7CiAgICAgICAgIFBhaW50SW5mbyBpbmZvKHBhaW50SW5mbyk7Ci0gICAgICAg
IGluZm8ucmVjdC5pbnRlcnNlY3QoY29sUmVjdCk7CisgICAgICAgIGluZm8ucmVjdC5pbnRlcnNl
Y3QocGl4ZWxTbmFwcGVkSW50UmVjdChjb2xSZWN0KSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
IWluZm8ucmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CkBAIC0zMDE5LDcgKzMwMTksNyBAQCBHYXBSZWN0
cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByLT5tX3JlbmRlcmVyLT53aWR0aCgpLCByLT5tX3JlbmRlcmVyLT5oZWln
aHQoKSk7CiAgICAgICAgICAgICAgICAgcm9vdEJsb2NrLT5mbGlwRm9yV3JpdGluZ01vZGUoZmxv
YXRCb3gpOwogICAgICAgICAgICAgICAgIGZsb2F0Qm94Lm1vdmUocm9vdEJsb2NrUGh5c2ljYWxQ
b3NpdGlvbi54KCksIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24ueSgpKTsKLSAgICAgICAgICAg
ICAgICBwYWludEluZm8tPmNvbnRleHQtPmNsaXBPdXQoZmxvYXRCb3gpOworICAgICAgICAgICAg
ICAgIHBhaW50SW5mby0+Y29udGV4dC0+Y2xpcE91dChwaXhlbFNuYXBwZWRJbnRSZWN0KGZsb2F0
Qm94KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTA3Mjk3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0MSwxMiAr
OTQxLDEyIEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEJveERlY29yYXRpb25zKFBhaW4KICAgICAg
ICAgcGFpbnRCYWNrZ3JvdW5kKHBhaW50SW5mbywgcGFpbnRSZWN0LCBibGVlZEF2b2lkYW5jZSk7
CiAKICAgICAgICAgaWYgKHN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgICAgIHRo
ZW1lKCktPnBhaW50RGVjb3JhdGlvbnModGhpcywgcGFpbnRJbmZvLCBwYWludFJlY3QpOworICAg
ICAgICAgICAgdGhlbWUoKS0+cGFpbnREZWNvcmF0aW9ucyh0aGlzLCBwYWludEluZm8sIHBpeGVs
U25hcHBlZEludFJlY3QocGFpbnRSZWN0KSk7CiAgICAgfQogICAgIHBhaW50Qm94U2hhZG93KHBh
aW50SW5mbywgcGFpbnRSZWN0LCBzdHlsZSgpLCBJbnNldCk7CiAKICAgICAvLyBUaGUgdGhlbWUg
d2lsbCB0ZWxsIHVzIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBhbHNvIHBhaW50IHRoZSBDU1Mg
Ym9yZGVyLgotICAgIGlmICgoIXN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSB8fCAoIXRoZW1lUGFp
bnRlZCAmJiB0aGVtZSgpLT5wYWludEJvcmRlck9ubHkodGhpcywgcGFpbnRJbmZvLCBwYWludFJl
Y3QpKSkgJiYgc3R5bGUoKS0+aGFzQm9yZGVyKCkpCisgICAgaWYgKCghc3R5bGUoKS0+aGFzQXBw
ZWFyYW5jZSgpIHx8ICghdGhlbWVQYWludGVkICYmIHRoZW1lKCktPnBhaW50Qm9yZGVyT25seSh0
aGlzLCBwYWludEluZm8sIHBpeGVsU25hcHBlZEludFJlY3QocGFpbnRSZWN0KSkpKSAmJiBzdHls
ZSgpLT5oYXNCb3JkZXIoKSkKICAgICAgICAgcGFpbnRCb3JkZXIocGFpbnRJbmZvLCBwYWludFJl
Y3QsIHN0eWxlKCksIGJsZWVkQXZvaWRhbmNlKTsKIAogICAgIGlmIChibGVlZEF2b2lkYW5jZSA9
PSBCYWNrZ3JvdW5kQmxlZWRVc2VUcmFuc3BhcmVuY3lMYXllcikKQEAgLTExODYsNyArMTE4Niw3
IEBAIGJvb2wgUmVuZGVyQm94OjpwdXNoQ29udGVudHNDbGlwKFBhaW50SW4KICAgICAgICAgcGFp
bnRPYmplY3QocGFpbnRJbmZvLCBhY2N1bXVsYXRlZE9mZnNldCk7CiAgICAgICAgIHBhaW50SW5m
by5waGFzZSA9IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHM7CiAgICAgfQotICAgIElu
dFJlY3QgY2xpcFJlY3QoaXNDb250cm9sQ2xpcCA/IGNvbnRyb2xDbGlwUmVjdChhY2N1bXVsYXRl
ZE9mZnNldCkgOiBvdmVyZmxvd0NsaXBSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0LCBwYWludEluZm8u
cmVuZGVyUmVnaW9uKSk7CisgICAgSW50UmVjdCBjbGlwUmVjdCA9IHBpeGVsU25hcHBlZEludFJl
Y3QoaXNDb250cm9sQ2xpcCA/IGNvbnRyb2xDbGlwUmVjdChhY2N1bXVsYXRlZE9mZnNldCkgOiBv
dmVyZmxvd0NsaXBSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0LCBwYWludEluZm8ucmVuZGVyUmVnaW9u
KSk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKICAgICBpZiAoc3R5bGUoKS0+aGFz
Qm9yZGVyUmFkaXVzKCkpCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVj
dENsaXAoc3R5bGUoKS0+Z2V0Um91bmRlZElubmVyQm9yZGVyRm9yKExheW91dFJlY3QoYWNjdW11
bGF0ZWRPZmZzZXQsIHNpemUoKSkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gMTA3Mjk3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjczLDcgKzY3Myw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50
RmlsbExheWUKICAgICAgICAgICAgIFJvdW5kZWRSZWN0IGJvcmRlciA9IGdldEJhY2tncm91bmRS
b3VuZGVkUmVjdChiYWNrZ3JvdW5kUmVjdEFkanVzdGVkRm9yQmxlZWRBdm9pZGFuY2UoY29udGV4
dCwgcmVjdCwgYmxlZWRBdm9pZGFuY2UpLCBib3gsIGJveFNpemUud2lkdGgoKSwgYm94U2l6ZS5o
ZWlnaHQoKSwgaW5jbHVkZUxlZnRFZGdlLCBpbmNsdWRlUmlnaHRFZGdlKTsKICAgICAgICAgICAg
IGNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChib3JkZXIsIGJnQ29sb3IsIHN0eWxlKCktPmNvbG9y
U3BhY2UoKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3Qo
cmVjdCwgYmdDb2xvciwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmZpbGxSZWN0KHBpeGVsU25hcHBlZEludFJlY3QocmVjdCksIGJnQ29sb3IsIHN0eWxlKCkt
PmNvbG9yU3BhY2UoKSk7CiAgICAgICAgIAogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzE3
LDcgKzcxNyw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWUKICAg
ICAgICAgLy8gV2UgaGF2ZSB0byBkcmF3IG91ciB0ZXh0IGludG8gYSBtYXNrIHRoYXQgY2FuIHRo
ZW4gYmUgdXNlZCB0byBjbGlwIGJhY2tncm91bmQgZHJhd2luZy4KICAgICAgICAgLy8gRmlyc3Qg
ZmlndXJlIG91dCBob3cgYmlnIHRoZSBtYXNrIGhhcyB0byBiZS4gIEl0IHNob3VsZCBiZSBubyBi
aWdnZXIgdGhhbiB3aGF0IHdlIG5lZWQKICAgICAgICAgLy8gdG8gYWN0dWFsbHkgcmVuZGVyLCBz
byB3ZSBzaG91bGQgaW50ZXJzZWN0IHRoZSBkaXJ0eSByZWN0IHdpdGggdGhlIGJvcmRlciBib3gg
b2YgdGhlIGJhY2tncm91bmQuCi0gICAgICAgIExheW91dFJlY3QgbWFza1JlY3QgPSByZWN0Owor
ICAgICAgICBJbnRSZWN0IG1hc2tSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChyZWN0KTsKICAg
ICAgICAgbWFza1JlY3QuaW50ZXJzZWN0KHBhaW50SW5mby5yZWN0KTsKICAgICAgICAgCiAgICAg
ICAgIC8vIE5vdyBjcmVhdGUgdGhlIG1hc2suCkBAIC03NzcsNyArNzc3LDcgQEAgdm9pZCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZQogCiAgICAgLy8gUGFpbnQgdGhlIGNvbG9y
IGZpcnN0IHVuZGVybmVhdGggYWxsIGltYWdlcy4KICAgICBpZiAoIWJnTGF5ZXItPm5leHQoKSkg
ewotICAgICAgICBMYXlvdXRSZWN0IGJhY2tncm91bmRSZWN0KHNjcm9sbGVkUGFpbnRSZWN0KTsK
KyAgICAgICAgSW50UmVjdCBiYWNrZ3JvdW5kUmVjdChwaXhlbFNuYXBwZWRJbnRSZWN0KHNjcm9s
bGVkUGFpbnRSZWN0KSk7CiAgICAgICAgIGJhY2tncm91bmRSZWN0LmludGVyc2VjdChwYWludElu
Zm8ucmVjdCk7CiAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gYWxwaGEgYW5kIHdlIGFyZSBwYWlu
dGluZyB0aGUgcm9vdCBlbGVtZW50LCBnbyBhaGVhZCBhbmQgYmxlbmQgd2l0aCB0aGUgYmFzZSBi
YWNrZ3JvdW5kIGNvbG9yLgogICAgICAgICBDb2xvciBiYXNlQ29sb3I7CkBAIC0xMDY0LDcgKzEw
NjQsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVCYWNrCiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgcG9zaXRpb25pbmdBcmVhU2l6ZSA9IExheW91dFNpemUocGFp
bnRSZWN0LndpZHRoKCkgLSBsZWZ0IC0gcmlnaHQsIHBhaW50UmVjdC5oZWlnaHQoKSAtIHRvcCAt
IGJvdHRvbSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZ2VvbWV0cnkuc2V0RGVzdFJlY3Qodmll
d1JlY3QoKSk7CisgICAgICAgIGdlb21ldHJ5LnNldERlc3RSZWN0KHBpeGVsU25hcHBlZEludFJl
Y3Qodmlld1JlY3QoKSkpOwogICAgICAgICBwb3NpdGlvbmluZ0FyZWFTaXplID0gZ2VvbWV0cnku
ZGVzdFJlY3QoKS5zaXplKCk7CiAgICAgfQogCkBAIC0xOTMzLDcgKzE5MzMsNyBAQCB2b2lkIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyCiAKICAgICBncmFwaGljc0NvbnRleHQt
PnNldFN0cm9rZVN0eWxlKE5vU3Ryb2tlKTsKICAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxD
b2xvcihjb2xvciwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5k
cmF3UmVjdChib3JkZXJSZWN0KTsKKyAgICBncmFwaGljc0NvbnRleHQtPmRyYXdSZWN0KHBpeGVs
U25hcHBlZEludFJlY3QoYm9yZGVyUmVjdCkpOwogfQogI2Vsc2UKIHZvaWQgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OnBhaW50Qm9yZGVyKGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLApAQCAtMjYzNCw3ICsyNjM0LDcgQEAg
dm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkbwogICAgICAgICAgICAgICAg
IGlmICghcmVjdFRvQ2xpcE91dC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmNsaXBPdXRSb3VuZGVkUmVjdChyZWN0VG9DbGlwT3V0KTsKIAotICAgICAgICAgICAgICAg
IFJvdW5kZWRSZWN0IGluZmx1ZW5jZVJlY3Qoc2hhZG93UmVjdCwgYm9yZGVyLnJhZGlpKCkpOwor
ICAgICAgICAgICAgICAgIFJvdW5kZWRSZWN0IGluZmx1ZW5jZVJlY3QocGl4ZWxTbmFwcGVkSW50
UmVjdChzaGFkb3dSZWN0KSwgYm9yZGVyLnJhZGlpKCkpOwogICAgICAgICAgICAgICAgIGluZmx1
ZW5jZVJlY3QuZXhwYW5kUmFkaWkoMiAqIHNoYWRvd0JsdXIgKyBzaGFkb3dTcHJlYWQpOwogICAg
ICAgICAgICAgICAgIGlmIChhbGxDb3JuZXJzQ2xpcHBlZE91dChpbmZsdWVuY2VSZWN0LCBpbmZv
LnJlY3QpKQogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5maWxsUmVjdChmaWxsUmVjdC5y
ZWN0KCksIENvbG9yOjpibGFjaywgcy0+Y29sb3JTcGFjZSgpKTsKQEAgLTI2NTgsNyArMjY1OCw3
IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG8KICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoIXJlY3RUb0NsaXBPdXQuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5jbGlwT3V0KHJlY3RUb0NsaXBPdXQpOworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5jbGlwT3V0KHBpeGVsU25hcHBlZEludFJlY3QocmVj
dFRvQ2xpcE91dCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KGZpbGxSZWN0
LnJlY3QoKSwgQ29sb3I6OmJsYWNrLCBzLT5jb2xvclNwYWNlKCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewpAQCAtMjY5Myw3ICsyNjkzLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6cGFpbnRCb3hTaGFkbwogICAgICAgICAgICAgQ29sb3IgZmlsbENvbG9yKHNoYWRv
d0NvbG9yLnJlZCgpLCBzaGFkb3dDb2xvci5ncmVlbigpLCBzaGFkb3dDb2xvci5ibHVlKCksIDI1
NSk7CiAKICAgICAgICAgICAgIExheW91dFJlY3Qgb3V0ZXJSZWN0ID0gYXJlYUNhc3RpbmdTaGFk
b3dJbkhvbGUoYm9yZGVyLnJlY3QoKSwgc2hhZG93Qmx1ciwgc2hhZG93U3ByZWFkLCBzaGFkb3dP
ZmZzZXQpOwotICAgICAgICAgICAgUm91bmRlZFJlY3Qgcm91bmRlZEhvbGUoaG9sZVJlY3QsIGJv
cmRlci5yYWRpaSgpKTsKKyAgICAgICAgICAgIFJvdW5kZWRSZWN0IHJvdW5kZWRIb2xlKHBpeGVs
U25hcHBlZEludFJlY3QoaG9sZVJlY3QpLCBib3JkZXIucmFkaWkoKSk7CiAKICAgICAgICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CiAgICAgICAg
ICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7CkBAIC0yNzEzLDcgKzI3MTMsNyBAQCB2b2lkIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvCiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwg
c2hhZG93Q29sb3IsIHMtPmNvbG9yU3BhY2UoKSk7CiAKLSAgICAgICAgICAgIGNvbnRleHQtPmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKG91dGVyUmVjdCwgcm91bmRlZEhvbGUsIGZpbGxDb2xvciwg
cy0+Y29sb3JTcGFjZSgpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKHBpeGVsU25hcHBlZEludFJlY3Qob3V0ZXJSZWN0KSwgcm91bmRlZEhvbGUsIGZpbGxD
b2xvciwgcy0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAJKHJldmlz
aW9uIDEwNzI5NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFy
a2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgUmVuZGVyRGV0
YWlsc01hcmtlcjo6cGFpbnQoUGFpbnRJbmYKICAgICBvdmVyZmxvd1JlY3QubW92ZUJ5KGJveE9y
aWdpbik7CiAgICAgb3ZlcmZsb3dSZWN0LmluZmxhdGUobWF4aW1hbE91dGxpbmVTaXplKHBhaW50
SW5mby5waGFzZSkpOwogCi0gICAgaWYgKCFwYWludEluZm8ucmVjdC5pbnRlcnNlY3RzKG92ZXJm
bG93UmVjdCkpCisgICAgaWYgKCFwYWludEluZm8ucmVjdC5pbnRlcnNlY3RzKHBpeGVsU25hcHBl
ZEludFJlY3Qob3ZlcmZsb3dSZWN0KSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IENv
bG9yIGNvbG9yKHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9y
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQu
Y3BwCShyZXZpc2lvbiAxMDcyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Rmxvd1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NSw3ICs0NDUsNyBAQCB2b2lkIFJl
bmRlckZsb3dUaHJlYWQ6OnBhaW50SW50b1JlZ2lvbihQCiAgICAgTGF5b3V0UmVjdCByZWdpb25D
bGlwcGluZ1JlY3QocGFpbnRPZmZzZXQgKyAocmVnaW9uT3ZlcmZsb3dSZWN0LmxvY2F0aW9uKCkg
LSByZWdpb25SZWN0LmxvY2F0aW9uKCkpLCByZWdpb25PdmVyZmxvd1JlY3Quc2l6ZSgpKTsKIAog
ICAgIFBhaW50SW5mbyBpbmZvKHBhaW50SW5mbyk7Ci0gICAgaW5mby5yZWN0LmludGVyc2VjdChy
ZWdpb25DbGlwcGluZ1JlY3QpOworICAgIGluZm8ucmVjdC5pbnRlcnNlY3QocGl4ZWxTbmFwcGVk
SW50UmVjdChyZWdpb25DbGlwcGluZ1JlY3QpKTsKIAogICAgIGlmICghaW5mby5yZWN0LmlzRW1w
dHkoKSkgewogICAgICAgICBjb250ZXh0LT5zYXZlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHJldmlzaW9uIDEwNzI5NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDcgKzgyLDcgQEAgc3RhdGljIENvbG9yIGJvcmRlckZpbGxDb2xvcigpCiAKIHZvaWQgUmVu
ZGVyRnJhbWVTZXQ6OnBhaW50Q29sdW1uQm9yZGVyKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRSZWN0JiBib3JkZXJSZWN0KQogewotICAgIGlmICghcGFpbnRJbmZvLnJl
Y3QuaW50ZXJzZWN0cyhib3JkZXJSZWN0KSkKKyAgICBpZiAoIXBhaW50SW5mby5yZWN0LmludGVy
c2VjdHMocGl4ZWxTbmFwcGVkSW50UmVjdChib3JkZXJSZWN0KSkpCiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBzb21ldGhpbmcgY2xldmVyIHdo
ZW4gYm9yZGVycyBmcm9tIGRpc3RpbmN0IGZyYW1lc2V0cyBtZWV0IGF0IGEgam9pbi4KQEAgLTEw
Miw3ICsxMDIsNyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpwYWludENvbHVtbkJvcmRlcihjCiAK
IHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50Um93Qm9yZGVyKGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBMYXlvdXRSZWN0JiBib3JkZXJSZWN0KQogewotICAgIGlmICghcGFpbnRJ
bmZvLnJlY3QuaW50ZXJzZWN0cyhib3JkZXJSZWN0KSkKKyAgICBpZiAoIXBhaW50SW5mby5yZWN0
LmludGVyc2VjdHMocGl4ZWxTbmFwcGVkSW50UmVjdChib3JkZXJSZWN0KSkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gc29tZXRoaW5nIGNsZXZlciB3aGVu
IGJvcmRlcnMgZnJvbSBkaXN0aW5jdCBmcmFtZXNldHMgbWVldCBhdCBhIGpvaW4uCkBAIC01NzEs
NyArNTcxLDcgQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cG9zaXRpb25GcmFtZXNXaXRoRgogICAg
ICAgICBpbnQgaGVpZ2h0ID0gbV9yb3dzLm1fc2l6ZXNbcl07CiAKICAgICAgICAgZm9yIChpbnQg
YyA9IDA7IGMgPCBjb2xzOyBjKyspIHsKLSAgICAgICAgICAgIEludFJlY3Qgb2xkRnJhbWVSZWN0
ID0gY2hpbGQtPmZyYW1lUmVjdCgpOworICAgICAgICAgICAgSW50UmVjdCBvbGRGcmFtZVJlY3Qg
PSBwaXhlbFNuYXBwZWRJbnRSZWN0KGNoaWxkLT5mcmFtZVJlY3QoKSk7CiAKICAgICAgICAgICAg
IGludCB3aWR0aCA9IG1fY29scy5tX3NpemVzW2NdOwogCkBAIC02MTksNyArNjE5LDcgQEAgdm9p
ZCBSZW5kZXJGcmFtZVNldDo6cG9zaXRpb25GcmFtZXNXaXRoRgogICAgICAgICB4UG9zID0gMDsK
ICAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBjb2xzOyBjKyspIHsKICAgICAgICAgICAgIC8v
IGVuc3VyZSB0aGUgcm93cyBhbmQgY29sdW1ucyBhcmUgZmlsbGVkCi0gICAgICAgICAgICBJbnRS
ZWN0IG9sZFJlY3QgPSBjaGlsZC0+ZnJhbWVSZWN0KCk7CisgICAgICAgICAgICBJbnRSZWN0IG9s
ZFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGNoaWxkLT5mcmFtZVJlY3QoKSk7CiAKICAgICAg
ICAgICAgIGNoaWxkLT5zZXRMb2NhdGlvbihJbnRQb2ludCh4UG9zLCB5UG9zKSk7CiAgICAgICAg
ICAgICBjaGlsZC0+c2V0SGVpZ2h0KG1fcm93cy5tX3NpemVzW3JdKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gMTA3Mjk3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjczLDcgKzI3Myw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmYK
ICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICAg
ICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yOjpsaWdodEdyYXksIHN0eWxlKCkt
PmNvbG9yU3BhY2UoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6
OnRyYW5zcGFyZW50LCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOwotICAgICAgICAgICAgY29udGV4
dC0+ZHJhd1JlY3QoTGF5b3V0UmVjdChwYWludE9mZnNldC54KCkgKyBsZWZ0Qm9yZGVyICsgbGVm
dFBhZCwgcGFpbnRPZmZzZXQueSgpICsgdG9wQm9yZGVyICsgdG9wUGFkLCBjV2lkdGgsIGNIZWln
aHQpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdSZWN0KHBpeGVsU25hcHBlZEludFJlY3Qo
TGF5b3V0UmVjdChwYWludE9mZnNldC54KCkgKyBsZWZ0Qm9yZGVyICsgbGVmdFBhZCwgcGFpbnRP
ZmZzZXQueSgpICsgdG9wQm9yZGVyICsgdG9wUGFkLCBjV2lkdGgsIGNIZWlnaHQpKSk7CiAKICAg
ICAgICAgICAgIGJvb2wgZXJyb3JQaWN0dXJlRHJhd24gPSBmYWxzZTsKICAgICAgICAgICAgIExh
eW91dFNpemUgaW1hZ2VPZmZzZXQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAJKHJldmlzaW9uIDEwNzI5NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1ODcsNyArMTU4Nyw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY28KICAgICAgICAgICAgICAgICAv
LyBUaGUgY2FuQXV0b3Njcm9sbCBmdW5jdGlvbiBpbiBFdmVudEhhbmRsZXIgYWxzbyBrbm93cyBh
Ym91dCB0aGlzLgogICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBmcmFtZVZpZXct
PmZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+
cGFnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCktPnNjcm9sbFJl
Y3RJbnRvVmlldyhyZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UtPmNocm9tZSgp
LT5zY3JvbGxSZWN0SW50b1ZpZXcocGl4ZWxTbmFwcGVkSW50UmVjdChyZWN0KSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMTU0LDcgKzIxNTQsNyBA
QCB2b2lkIFJlbmRlckxheWVyOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvCiAgICAgaWYgKCFib3gp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IEludFJlY3QgYm9yZGVyQm94ID0gYm94LT5i
b3JkZXJCb3hSZWN0KCk7CisgICAgY29uc3QgSW50UmVjdCBib3JkZXJCb3ggPSBwaXhlbFNuYXBw
ZWRJbnRSZWN0KGJveC0+Ym9yZGVyQm94UmVjdCgpKTsKICAgICBjb25zdCBJbnRSZWN0JiBzY3Jv
bGxDb3JuZXIgPSBzY3JvbGxDb3JuZXJSZWN0KCk7CiAgICAgSW50UmVjdCBhYnNCb3VuZHMoYm9y
ZGVyQm94LmxvY2F0aW9uKCkgKyBvZmZzZXRGcm9tTGF5ZXIsIGJvcmRlckJveC5zaXplKCkpOwog
ICAgIGlmIChtX3ZCYXIpCkBAIC0zNzQ3LDcgKzM3NDcsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpj
YWxjdWxhdGVSZWN0cyhjb25zdCBSCiAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRlcnNl
Y3QobGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgLy8gU2hpZnQgdGhlIGJvdW5kcyB0byBiZSBmb3Igb3VyIHJlZ2lvbiBvbmx5Lgot
ICAgICAgICAgICAgTGF5b3V0UmVjdCBib3VuZHMgPSByZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVj
dEluUmVnaW9uKHJlZ2lvbik7CisgICAgICAgICAgICBMYXlvdXRSZWN0IGJvdW5kcyA9IHBpeGVs
U25hcHBlZEludFJlY3QocmVuZGVyQm94KCktPmJvcmRlckJveFJlY3RJblJlZ2lvbihyZWdpb24p
KTsKICAgICAgICAgICAgIGJvdW5kcy5tb3ZlQnkob2Zmc2V0KTsKICAgICAgICAgICAgIGJhY2tn
cm91bmRSZWN0LmludGVyc2VjdChib3VuZHMpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gMTA3
Mjk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxNiwxNiArNDE2LDE2IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVHcmFwaGljc0wKICAgICBSZW5kZXJMYXllciogY29tcEFuY2VzdG9yID0gbV9v
d25pbmdMYXllci0+YW5jZXN0b3JDb21wb3NpdGluZ0xheWVyKCk7CiAgICAgCiAgICAgLy8gV2Ug
Y29tcHV0ZSBldmVyeXRoaW5nIHJlbGF0aXZlIHRvIHRoZSBlbmNsb3NpbmcgY29tcG9zaXRpbmcg
bGF5ZXIuCi0gICAgTGF5b3V0UmVjdCBhbmNlc3RvckNvbXBvc2l0aW5nQm91bmRzOworICAgIElu
dFJlY3QgYW5jZXN0b3JDb21wb3NpdGluZ0JvdW5kczsKICAgICBpZiAoY29tcEFuY2VzdG9yKSB7
CiAgICAgICAgIEFTU0VSVChjb21wQW5jZXN0b3ItPmJhY2tpbmcoKSk7Ci0gICAgICAgIGFuY2Vz
dG9yQ29tcG9zaXRpbmdCb3VuZHMgPSBjb21wQW5jZXN0b3ItPmJhY2tpbmcoKS0+Y29tcG9zaXRl
ZEJvdW5kcygpOworICAgICAgICBhbmNlc3RvckNvbXBvc2l0aW5nQm91bmRzID0gcGl4ZWxTbmFw
cGVkSW50UmVjdChjb21wQW5jZXN0b3ItPmJhY2tpbmcoKS0+Y29tcG9zaXRlZEJvdW5kcygpKTsK
ICAgICB9CiAKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMgPSBjb21wb3Np
dGVkQm91bmRzKCk7CisgICAgSW50UmVjdCBsb2NhbENvbXBvc2l0aW5nQm91bmRzID0gcGl4ZWxT
bmFwcGVkSW50UmVjdChjb21wb3NpdGVkQm91bmRzKCkpOwogCi0gICAgTGF5b3V0UmVjdCByZWxh
dGl2ZUNvbXBvc2l0aW5nQm91bmRzKGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMpOwotICAgIExheW91
dFBvaW50IGRlbHRhOworICAgIEludFJlY3QgcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcyhsb2Nh
bENvbXBvc2l0aW5nQm91bmRzKTsKKyAgICBJbnRQb2ludCBkZWx0YTsKICAgICBtX293bmluZ0xh
eWVyLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhjb21wQW5jZXN0b3IsIGRlbHRhKTsKICAgICByZWxh
dGl2ZUNvbXBvc2l0aW5nQm91bmRzLm1vdmVCeShkZWx0YSk7CiAKQEAgLTQzMyw3ICs0MzMsNyBA
QCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAgICAgaWYgKGNvbXBB
bmNlc3RvciAmJiBjb21wQW5jZXN0b3ItPmJhY2tpbmcoKS0+aGFzQ2xpcHBpbmdMYXllcigpKSB7
CiAgICAgICAgIC8vIElmIHRoZSBjb21wb3NpdGluZyBhbmNlc3RvciBoYXMgYSBsYXllciB0byBj
bGlwIGNoaWxkcmVuLCB3ZSBwYXJlbnQgaW4gdGhhdCwgYW5kIHRoZXJlZm9yZQogICAgICAgICAv
LyBwb3NpdGlvbiByZWxhdGl2ZSB0byBpdC4KLSAgICAgICAgTGF5b3V0UmVjdCBjbGlwcGluZ0Jv
eCA9IGNsaXBCb3godG9SZW5kZXJCb3goY29tcEFuY2VzdG9yLT5yZW5kZXJlcigpKSk7CisgICAg
ICAgIEludFJlY3QgY2xpcHBpbmdCb3ggPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGNsaXBCb3godG9S
ZW5kZXJCb3goY29tcEFuY2VzdG9yLT5yZW5kZXJlcigpKSkpOwogICAgICAgICBncmFwaGljc0xh
eWVyUGFyZW50TG9jYXRpb24gPSBjbGlwcGluZ0JveC5sb2NhdGlvbigpOwogICAgIH0gZWxzZSBp
ZiAoY29tcEFuY2VzdG9yKQogICAgICAgICBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24gPSBh
bmNlc3RvckNvbXBvc2l0aW5nQm91bmRzLmxvY2F0aW9uKCk7CkBAIC00NDQsNyArNDQ0LDcgQEAg
dm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTAogICAgICAgICAvLyBDYWxs
IGNhbGN1bGF0ZVJlY3RzIHRvIGdldCB0aGUgYmFja2dyb3VuZFJlY3Qgd2hpY2ggaXMgd2hhdCBp
cyB1c2VkIHRvIGNsaXAgdGhlIGNvbnRlbnRzIG9mIHRoaXMKICAgICAgICAgLy8gbGF5ZXIuIE5v
dGUgdGhhdCB3ZSBjYWxsIGl0IHdpdGggdGVtcG9yYXJ5Q2xpcFJlY3RzID0gdHJ1ZSBiZWNhdXNl
IG5vcm1hbGx5IHdoZW4gY29tcHV0aW5nIGNsaXAgcmVjdHMKICAgICAgICAgLy8gZm9yIGEgY29t
cG9zaXRpbmcgbGF5ZXIsIHJvb3RMYXllciBpcyB0aGUgbGF5ZXIgaXRzZWxmLgotICAgICAgICBM
YXlvdXRSZWN0IHBhcmVudENsaXBSZWN0ID0gbV9vd25pbmdMYXllci0+YmFja2dyb3VuZENsaXBS
ZWN0KGNvbXBBbmNlc3RvciwgMCwgdHJ1ZSkucmVjdCgpOyAvLyBGSVhNRTogSW5jb3JyZWN0IGZv
ciBDU1MgcmVnaW9ucy4KKyAgICAgICAgSW50UmVjdCBwYXJlbnRDbGlwUmVjdCA9IHBpeGVsU25h
cHBlZEludFJlY3QobV9vd25pbmdMYXllci0+YmFja2dyb3VuZENsaXBSZWN0KGNvbXBBbmNlc3Rv
ciwgMCwgdHJ1ZSkucmVjdCgpKTsgLy8gRklYTUU6IEluY29ycmVjdCBmb3IgQ1NTIHJlZ2lvbnMu
CiAgICAgICAgIEFTU0VSVChwYXJlbnRDbGlwUmVjdCAhPSBQYWludEluZm86OmluZmluaXRlUmVj
dCgpKTsKICAgICAgICAgbV9hbmNlc3RvckNsaXBwaW5nTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0
UG9pbnQoKSArIChwYXJlbnRDbGlwUmVjdC5sb2NhdGlvbigpIC0gZ3JhcGhpY3NMYXllclBhcmVu
dExvY2F0aW9uKSk7CiAgICAgICAgIG1fYW5jZXN0b3JDbGlwcGluZ0xheWVyLT5zZXRTaXplKHBh
cmVudENsaXBSZWN0LnNpemUoKSk7CkBAIC00NTcsNyArNDU3LDcgQEAgdm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTAogICAgIH0KIAogICAgIG1fZ3JhcGhpY3NMYXllci0+
c2V0UG9zaXRpb24oRmxvYXRQb2ludCgpICsgKHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMubG9j
YXRpb24oKSAtIGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlvbikpOwotICAgIG1fZ3JhcGhpY3NM
YXllci0+c2V0T2Zmc2V0RnJvbVJlbmRlcmVyKGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRp
b24oKSAtIExheW91dFBvaW50KCkpOworICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0T2Zmc2V0RnJv
bVJlbmRlcmVyKGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSAtIEludFBvaW50KCkp
OwogICAgIAogICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ncmFwaGljc0xheWVyLT5zaXplKCk7
CiAgICAgRmxvYXRTaXplIG5ld1NpemUgPSByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLnNpemUo
KTsKQEAgLTQ3MCw5ICs0NzAsOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3Jh
cGhpY3NMCiAgICAgfQogCiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxheWVyIHRoYXQgY2xpcHMgY2hp
bGRyZW4sIHBvc2l0aW9uIGl0LgotICAgIExheW91dFJlY3QgY2xpcHBpbmdCb3g7CisgICAgSW50
UmVjdCBjbGlwcGluZ0JveDsKICAgICBpZiAobV9jbGlwcGluZ0xheWVyKSB7Ci0gICAgICAgIGNs
aXBwaW5nQm94ID0gY2xpcEJveCh0b1JlbmRlckJveChyZW5kZXJlcigpKSk7CisgICAgICAgIGNs
aXBwaW5nQm94ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChjbGlwQm94KHRvUmVuZGVyQm94KHJlbmRl
cmVyKCkpKSk7CiAgICAgICAgIG1fY2xpcHBpbmdMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2lu
dCgpICsgKGNsaXBwaW5nQm94LmxvY2F0aW9uKCkgLSBsb2NhbENvbXBvc2l0aW5nQm91bmRzLmxv
Y2F0aW9uKCkpKTsKICAgICAgICAgbV9jbGlwcGluZ0xheWVyLT5zZXRTaXplKGNsaXBwaW5nQm94
LnNpemUoKSk7CiAgICAgICAgIG1fY2xpcHBpbmdMYXllci0+c2V0T2Zmc2V0RnJvbVJlbmRlcmVy
KGNsaXBwaW5nQm94LmxvY2F0aW9uKCkgLSBMYXlvdXRQb2ludCgpKTsKQEAgLTQ4OCwxMCArNDg4
LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0wKICAgICB9CiAg
ICAgCiAgICAgaWYgKG1fb3duaW5nTGF5ZXItPmhhc1RyYW5zZm9ybSgpKSB7Ci0gICAgICAgIGNv
bnN0IExheW91dFJlY3QgYm9yZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmJvcmRl
ckJveFJlY3QoKTsKKyAgICAgICAgY29uc3QgSW50UmVjdCBib3JkZXJCb3ggPSBwaXhlbFNuYXBw
ZWRJbnRSZWN0KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5ib3JkZXJCb3hSZWN0KCkpOwogCiAg
ICAgICAgIC8vIEdldCBsYXlvdXQgYm91bmRzIGluIHRoZSBjb29yZHMgb2YgY29tcEFuY2VzdG9y
IHRvIG1hdGNoIHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMuCi0gICAgICAgIExheW91dFJlY3Qg
bGF5ZXJCb3VuZHMgPSBMYXlvdXRSZWN0KGRlbHRhLCBib3JkZXJCb3guc2l6ZSgpKTsKKyAgICAg
ICAgSW50UmVjdCBsYXllckJvdW5kcyA9IEludFJlY3QoZGVsdGEsIGJvcmRlckJveC5zaXplKCkp
OwogCiAgICAgICAgIC8vIFVwZGF0ZSBwcm9wZXJ0aWVzIHRoYXQgZGVwZW5kIG9uIGxheWVyIGRp
bWVuc2lvbnMKICAgICAgICAgRmxvYXRQb2ludDNEIHRyYW5zZm9ybU9yaWdpbiA9IGNvbXB1dGVU
cmFuc2Zvcm1PcmlnaW4oYm9yZGVyQm94KTsKQEAgLTUyNCwxMiArNTI0LDEyIEBAIHZvaWQgUmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0wKICAgICBpZiAobV9mb3JlZ3JvdW5kTGF5
ZXIpIHsKICAgICAgICAgRmxvYXRQb2ludCBmb3JlZ3JvdW5kUG9zaXRpb247CiAgICAgICAgIEZs
b2F0U2l6ZSBmb3JlZ3JvdW5kU2l6ZSA9IG5ld1NpemU7Ci0gICAgICAgIExheW91dFNpemUgZm9y
ZWdyb3VuZE9mZnNldCA9IG1fZ3JhcGhpY3NMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCk7Cisg
ICAgICAgIEludFNpemUgZm9yZWdyb3VuZE9mZnNldCA9IG1fZ3JhcGhpY3NMYXllci0+b2Zmc2V0
RnJvbVJlbmRlcmVyKCk7CiAgICAgICAgIGlmIChtX2NsaXBwaW5nTGF5ZXIpIHsKICAgICAgICAg
ICAgIC8vIElmIHdlIGhhdmUgYSBjbGlwcGluZyBsYXllciAod2hpY2ggY2xpcHMgZGVzY2VuZGFu
dHMpLCB0aGVuIHRoZSBmb3JlZ3JvdW5kIGxheWVyIGlzIGEgY2hpbGQgb2YgaXQsCiAgICAgICAg
ICAgICAvLyBzbyB0aGF0IGl0IGdldHMgY29ycmVjdGx5IHNvcnRlZCB3aXRoIGNoaWxkcmVuLiBJ
biB0aGF0IGNhc2UsIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBjbGlwcGluZyBsYXllci4KICAg
ICAgICAgICAgIGZvcmVncm91bmRTaXplID0gRmxvYXRTaXplKGNsaXBwaW5nQm94LnNpemUoKSk7
Ci0gICAgICAgICAgICBmb3JlZ3JvdW5kT2Zmc2V0ID0gY2xpcHBpbmdCb3gubG9jYXRpb24oKSAt
IExheW91dFBvaW50KCk7CisgICAgICAgICAgICBmb3JlZ3JvdW5kT2Zmc2V0ID0gY2xpcHBpbmdC
b3gubG9jYXRpb24oKSAtIEludFBvaW50KCk7CiAgICAgICAgIH0KIAogICAgICAgICBtX2ZvcmVn
cm91bmRMYXllci0+c2V0UG9zaXRpb24oZm9yZWdyb3VuZFBvc2l0aW9uKTsKQEAgLTU0OCw3ICs1
NDgsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAgICAgICAg
IHJlZmxlY3Rpb25CYWNraW5nLT5ncmFwaGljc0xheWVyKCktPnNldFJlcGxpY2F0ZWRMYXllclBv
c2l0aW9uKEZsb2F0UG9pbnQoKSArIChsYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVmbGVjdGlv
bkxheWVyQm91bmRzLmxvY2F0aW9uKCkpKTsKICAgICB9CiAKLSAgICBtX2dyYXBoaWNzTGF5ZXIt
PnNldENvbnRlbnRzUmVjdChjb250ZW50c0JveCgpKTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnNl
dENvbnRlbnRzUmVjdChwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnRlbnRzQm94KCkpKTsKICAgICB1
cGRhdGVEcmF3c0NvbnRlbnQoKTsKICAgICB1cGRhdGVBZnRlcldpZGdldFJlc2l6ZSgpOwogfQpA
QCAtMTEzNCw3ICsxMTM0LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRTY3JvbGxiYXIoU2Nyb2xsYmFy
KiBzYwogICAgIGNvbnRleHQudHJhbnNsYXRlKC1zY3JvbGxiYXJSZWN0LngoKSwgLXNjcm9sbGJh
clJlY3QueSgpKTsKICAgICBMYXlvdXRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IGNsaXA7CiAgICAg
dHJhbnNmb3JtZWRDbGlwLm1vdmVCeShzY3JvbGxiYXJSZWN0LmxvY2F0aW9uKCkpOwotICAgIHNj
cm9sbGJhci0+cGFpbnQoJmNvbnRleHQsIHRyYW5zZm9ybWVkQ2xpcCk7CisgICAgc2Nyb2xsYmFy
LT5wYWludCgmY29udGV4dCwgcGl4ZWxTbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsK
ICAgICBjb250ZXh0LnJlc3RvcmUoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDEwNzI5NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00ODEsNyArNDgxLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmNhbGN1bAogICAgICAgICBMYXlvdXRQb2ludCBhbmNlc3RvclJlbE9mZnNldDsK
ICAgICAgICAgbGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIsIGFuY2Vz
dG9yUmVsT2Zmc2V0KTsKICAgICAgICAgYm91bmRpbmdCb3hSZWN0Lm1vdmVCeShhbmNlc3RvclJl
bE9mZnNldCk7Ci0gICAgICAgIHJldHVybiBib3VuZGluZ0JveFJlY3Q7CisgICAgICAgIHJldHVy
biBwaXhlbFNuYXBwZWRJbnRSZWN0KGJvdW5kaW5nQm94UmVjdCk7CiAgICAgfQogCiAgICAgaWYg
KFJlbmRlckxheWVyKiByZWZsZWN0aW9uID0gbGF5ZXItPnJlZmxlY3Rpb25MYXllcigpKSB7CkBA
IC01MzYsNyArNTM2LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbGN1
bAogICAgIGxheWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBhbmNlc3Rv
clJlbE9mZnNldCk7CiAgICAgdW5pb25Cb3VuZHMubW92ZUJ5KGFuY2VzdG9yUmVsT2Zmc2V0KTsK
IAotICAgIHJldHVybiB1bmlvbkJvdW5kczsKKyAgICByZXR1cm4gcGl4ZWxTbmFwcGVkSW50UmVj
dCh1bmlvbkJvdW5kcyk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllcldh
c0FkZGVkKFJlbmRlckxheWVyKiAvKnBhcmVudCovLCBSZW5kZXJMYXllciogLypjaGlsZCovKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9u
IDEwNzI5NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NjUsNyArOTY1LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdM
aW5lRm9yQm94U2lkZShHcgogICAgICAgICAgICAgICAgIC8vIHRoaXMgbWF0dGVycyBmb3IgcmVj
dHMgaW4gdHJhbnNmb3JtZWQgY29udGV4dHMuCiAgICAgICAgICAgICAgICAgYm9vbCB3YXNBbnRp
YWxpYXNlZCA9IGdyYXBoaWNzQ29udGV4dC0+c2hvdWxkQW50aWFsaWFzKCk7CiAgICAgICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTaG91bGRBbnRpYWxpYXMoYW50aWFsaWFzKTsKLSAg
ICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdSZWN0KEludFJlY3QoeDEsIHkxLCB4
MiAtIHgxLCB5MiAtIHkxKSk7CisgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3
UmVjdChwaXhlbFNuYXBwZWRJbnRSZWN0KExheW91dFJlY3QoeDEsIHkxLCB4MiAtIHgxLCB5MiAt
IHkxKSkpOwogICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U2hvdWxkQW50aWFs
aWFzKHdhc0FudGlhbGlhc2VkKTsKICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNl
dFN0cm9rZVN0eWxlKG9sZFN0cm9rZVN0eWxlKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBA
IC0xMTEwLDcgKzExMTAsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRkUERGVVJMUmVjdChHcmFw
aGljCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBocmVmID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG4pLT5nZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOwogICAgIGlmIChocmVmLmlzTnVsbCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgY29udGV4dC0+c2V0VVJMRm9yUmVjdChuLT5kb2N1bWVudCgpLT5j
b21wbGV0ZVVSTChocmVmKSwgcmVjdCk7CisgICAgY29udGV4dC0+c2V0VVJMRm9yUmVjdChuLT5k
b2N1bWVudCgpLT5jb21wbGV0ZVVSTChocmVmKSwgcGl4ZWxTbmFwcGVkSW50UmVjdChyZWN0KSk7
CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHBhaW50UmVjdCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuY3BwCShyZXZpc2lvbiAxMDcyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDcg
KzE3NSw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzaG93UG8KICAgICAg
ICAgbV9zZWFyY2hQb3B1cC0+c2F2ZVJlY2VudFNlYXJjaGVzKG5hbWUsIG1fcmVjZW50U2VhcmNo
ZXMpOwogICAgIH0KIAotICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgpLT5zaG93KGFic29s
dXRlQm91bmRpbmdCb3hSZWN0KCksIGRvY3VtZW50KCktPnZpZXcoKSwgLTEpOworICAgIG1fc2Vh
cmNoUG9wdXAtPnBvcHVwTWVudSgpLT5zaG93KHBpeGVsU25hcHBlZEludFJlY3QoYWJzb2x1dGVC
b3VuZGluZ0JveFJlY3QoKSksIGRvY3VtZW50KCktPnZpZXcoKSwgLTEpOwogfQogCiB2b2lkIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aGlkZVBvcHVwKCkKQEAgLTE5Niw3ICsxOTYsNyBA
QCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFpbnQoCiAKICAgICAgICAgLy8g
Q29udmVydCB0aGUgcmVjdCBpbnRvIHRoZSBjb29yZHMgdXNlZCBmb3IgcGFpbnRpbmcgdGhlIGNv
bnRlbnQKICAgICAgICAgY29udGVudHNSZWN0Lm1vdmVCeShwYWludE9mZnNldCArIGxvY2F0aW9u
KCkpOwotICAgICAgICB0aGVtZSgpLT5wYWludENhcHNMb2NrSW5kaWNhdG9yKHRoaXMsIHBhaW50
SW5mbywgY29udGVudHNSZWN0KTsKKyAgICAgICAgdGhlbWUoKS0+cGFpbnRDYXBzTG9ja0luZGlj
YXRvcih0aGlzLCBwYWludEluZm8sIHBpeGVsU25hcHBlZEludFJlY3QoY29udGVudHNSZWN0KSk7
CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcAkocmV2aXNpb24gMTA3Mjk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cldpZGdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw3ICszMDgsNyBAQCB2b2lkIFJlbmRl
cldpZGdldDo6cGFpbnQoUGFpbnRJbmZvJiBwYWluCiAgICAgLy8gUGFpbnQgYSBwYXJ0aWFsbHkg
dHJhbnNwYXJlbnQgd2FzaCBvdmVyIHNlbGVjdGVkIHdpZGdldHMuCiAgICAgaWYgKGlzU2VsZWN0
ZWQoKSAmJiAhZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSkgewogICAgICAgICAvLyBGSVhNRTogc2Vs
ZWN0aW9uUmVjdCgpIGlzIGluIGFic29sdXRlLCBub3QgcGFpbnRpbmcgY29vcmRpbmF0ZXMuCi0g
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUmVjdChzZWxlY3Rpb25SZWN0KCksIHNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOworICAgICAgICBw
YWludEluZm8uY29udGV4dC0+ZmlsbFJlY3QocGl4ZWxTbmFwcGVkSW50UmVjdChzZWxlY3Rpb25S
ZWN0KCkpLCBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgp
KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmNwcAkocmV2aXNpb24gMTA3Mjk3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODg2LDcgKzg4
Niw3IEBAIHN0YXRpYyBmbG9hdCBjYWxjQ29uc3RyYWludFNjYWxlRm9yKGNvbnMKIAogUm91bmRl
ZFJlY3QgUmVuZGVyU3R5bGU6OmdldFJvdW5kZWRCb3JkZXJGb3IoY29uc3QgTGF5b3V0UmVjdCYg
Ym9yZGVyUmVjdCwgYm9vbCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBib29sIGluY2x1ZGVMb2dp
Y2FsUmlnaHRFZGdlKSBjb25zdAogewotICAgIFJvdW5kZWRSZWN0IHJvdW5kZWRSZWN0KGJvcmRl
clJlY3QpOworICAgIFJvdW5kZWRSZWN0IHJvdW5kZWRSZWN0KHBpeGVsU25hcHBlZEludFJlY3Qo
Ym9yZGVyUmVjdCkpOwogICAgIGlmIChoYXNCb3JkZXJSYWRpdXMoKSkgewogICAgICAgICBSb3Vu
ZGVkUmVjdDo6UmFkaWkgcmFkaWkgPSBjYWxjUmFkaWlGb3Ioc3Vycm91bmQtPmJvcmRlciwgYm9y
ZGVyUmVjdC5zaXplKCkpOwogICAgICAgICByYWRpaS5zY2FsZShjYWxjQ29uc3RyYWludFNjYWxl
Rm9yKGJvcmRlclJlY3QsIHJhZGlpKSk7CkBAIC05MTUsNyArOTE1LDcgQEAgUm91bmRlZFJlY3Qg
UmVuZGVyU3R5bGU6OmdldFJvdW5kZWRJbm5lcgogICAgICAgICAgICAgICAgYm9yZGVyUmVjdC53
aWR0aCgpIC0gbGVmdFdpZHRoIC0gcmlnaHRXaWR0aCwgCiAgICAgICAgICAgICAgICBib3JkZXJS
ZWN0LmhlaWdodCgpIC0gdG9wV2lkdGggLSBib3R0b21XaWR0aCk7CiAKLSAgICBSb3VuZGVkUmVj
dCByb3VuZGVkUmVjdChpbm5lclJlY3QpOworICAgIFJvdW5kZWRSZWN0IHJvdW5kZWRSZWN0KHBp
eGVsU25hcHBlZEludFJlY3QoaW5uZXJSZWN0KSk7CiAKICAgICBpZiAoaGFzQm9yZGVyUmFkaXVz
KCkpIHsKICAgICAgICAgUm91bmRlZFJlY3Q6OlJhZGlpIHJhZGlpID0gZ2V0Um91bmRlZEJvcmRl
ckZvcihib3JkZXJSZWN0KS5yYWRpaSgpOwo=
</data>
<flag name="review"
          id="128193"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>