<?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>78040</bug_id>
          
          <creation_ts>2012-02-07 14:16:52 -0800</creation_ts>
          <short_desc>Add pixelSnappedX/Y/Width/Height methods</short_desc>
          <delta_ts>2012-02-08 00:42:52 -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>
          <everconfirmed>1</everconfirmed>
          <reporter name="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>leviw</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>551378</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-07 14:16:52 -0800</bug_when>
    <thetext>Add pixel snapped versions of x/y/width/height methods. These return the same value as the x/w/width/height methods for now but once we move over to sub pixel layout they will snap the subpixel value to a device pixel and return an integer value.

When snapping the left and top edge is simply rounded to the nearest device pixel.
The right and bottom edges are computed by subtracting the rounded left/top edge from the precise location and size. This ensures that the edges all line up with device pixels and that the total size of an object, including borders, is at most one pixel off.

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

We use the term pixel snapped to indicate that the numbers are not merely rounded. Aligned might have been a better name but the term is already quite overloaded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551478</commentid>
    <comment_count>1</comment_count>
      <attachid>125945</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-07 15:39:22 -0800</bug_when>
    <thetext>Created attachment 125945
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551505</commentid>
    <comment_count>2</comment_count>
      <attachid>125945</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-07 15:58:12 -0800</bug_when>
    <thetext>Comment on attachment 125945
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.h:579
&gt; +        int pixelSnappedX() const { return x(); }
&gt; +        int pixelSnappedMaxX() const { return maxX(); }
&gt; +        int pixelSnappedY() const { return y(); }
&gt; +        int pixelSnappedMaxY() const { return maxY(); }
&gt; +        int pixelSnappedWidth() const { return width(); }
&gt; +        int pixelSnappedHeight() const { return height(); }

You should add a note/FIXME next to functions like this that will change when we move to app-units.

&gt; Source/WebCore/rendering/RenderBlock.h:618
&gt; +    int pixelSnappedLogicalTopForFloat(const FloatingObject* child) const { return logicalTopForFloat(child); }
&gt; +    int pixelSnappedLogicalBottomForFloat(const FloatingObject* child) const { return logicalBottomForFloat(child); }
&gt; +    int pixelSnappedLogicalLeftForFloat(const FloatingObject* child) const { return logicalLeftForFloat(child); }
&gt; +    int pixelSnappedLogicalRightForFloat(const FloatingObject* child) const { return logicalRightForFloat(child); }

This method name sounds like you&apos;e supposed to pass it a &quot;float&quot;.  But I&apos;m not sure I have better suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551518</commentid>
    <comment_count>3</comment_count>
      <attachid>125949</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-07 16:09:17 -0800</bug_when>
    <thetext>Created attachment 125949
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551521</commentid>
    <comment_count>4</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-07 16:10:44 -0800</bug_when>
    <thetext>&gt; You should add a note/FIXME next to functions like this that will change when we move to app-units.

Added a couple of FIXMEs, let me know if I went overboard.


&gt; &gt; +    int pixelSnappedLogicalRightForFloat(const FloatingObject* child) const { return logicalRightForFloat(child); }
&gt; 
&gt; This method name sounds like you&apos;e supposed to pass it a &quot;float&quot;.  But I&apos;m not sure I have better suggestions.

It&apos;s unfortunate that Float is overloaded to mean both a floating object and floating point. Hopefully the context will make this distinction obvious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551530</commentid>
    <comment_count>5</comment_count>
      <attachid>125949</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-07 16:15:23 -0800</bug_when>
    <thetext>Comment on attachment 125949
Patch

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

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:271
&gt; -    String widthNumberPart = &quot; &quot; + String::number(modelObject ? adjustForAbsoluteZoom(modelObject-&gt;offsetWidth(), modelObject) : boundingBox.width());
&gt; +    String widthNumberPart = &quot; &quot; + String::number(modelObject ? adjustForAbsoluteZoom(modelObject-&gt;pixelSnappedOffsetWidth(), modelObject) : boundingBox.width());

Are we intentionally adjusting for zoom after snapping to pixel boundaries?

&gt; Source/WebCore/rendering/RenderTreeAsText.cpp:623
&gt; +        if (l.renderBox() &amp;&amp; l.renderBox()-&gt;pixelSnappedClientWidth() != l.pixelSnappedScrollWidth())
&gt; +            ts &lt;&lt; &quot; scrollWidth &quot; &lt;&lt; l.pixelSnappedScrollWidth();
&gt; +        if (l.renderBox() &amp;&amp; l.renderBox()-&gt;pixelSnappedClientHeight() != l.pixelSnappedScrollHeight())
&gt; +            ts &lt;&lt; &quot; scrollHeight &quot; &lt;&lt; l.pixelSnappedScrollHeight();

Do we need a fixme about dumping non-snapped values eventually?  Or should we always dump snapped values?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551559</commentid>
    <comment_count>6</comment_count>
      <attachid>125949</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-07 16:54:47 -0800</bug_when>
    <thetext>Comment on attachment 125949
Patch

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

&gt;&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:271
&gt;&gt; +    String widthNumberPart = &quot; &quot; + String::number(modelObject ? adjustForAbsoluteZoom(modelObject-&gt;pixelSnappedOffsetWidth(), modelObject) : boundingBox.width());
&gt; 
&gt; Are we intentionally adjusting for zoom after snapping to pixel boundaries?

Good catch, we should clearly not round before adjusting for zoom.

&gt;&gt; Source/WebCore/rendering/RenderTreeAsText.cpp:623
&gt;&gt; +            ts &lt;&lt; &quot; scrollHeight &quot; &lt;&lt; l.pixelSnappedScrollHeight();
&gt; 
&gt; Do we need a fixme about dumping non-snapped values eventually?  Or should we always dump snapped values?

For these values we probably always want them to be snapped as that best represents what we are painting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551566</commentid>
    <comment_count>7</comment_count>
      <attachid>125958</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-07 16:59:49 -0800</bug_when>
    <thetext>Created attachment 125958
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551579</commentid>
    <comment_count>8</comment_count>
      <attachid>125958</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-07 17:10:23 -0800</bug_when>
    <thetext>Comment on attachment 125958
Patch

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551726</commentid>
    <comment_count>9</comment_count>
      <attachid>125958</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-07 19:56:44 -0800</bug_when>
    <thetext>Comment on attachment 125958
Patch

Clearing flags on attachment: 125958

Committed r107032: &lt;http://trac.webkit.org/changeset/107032&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551727</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-07 19:56:49 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551858</commentid>
    <comment_count>11</comment_count>
      <attachid>125958</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-02-08 00:42:52 -0800</bug_when>
    <thetext>Comment on attachment 125958
Patch

I think I would have preferred the term &quot;aligned&quot; to &quot;snapped&quot;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125945</attachid>
            <date>2012-02-07 15:39:22 -0800</date>
            <delta_ts>2012-02-07 16:09:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78040-20120207153921.patch</filename>
            <type>text/plain</type>
            <size>21595</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjk5NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBACisyMDEyLTAyLTA3ICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgcGl4ZWxTbmFwcGVkWC9Z
L1dpZHRoL0hlaWdodCBtZXRob2RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03ODA0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBwaXhlbCBzbmFwcGVkIHZlcnNpb25zIG9mIHgveS93aWR0aC9oZWln
aHQgbWV0aG9kcy4gVGhlc2UgcmV0dXJuIHRoZQorICAgICAgICBzYW1lIHZhbHVlIGFzIHRoZSB4
L3cvd2lkdGgvaGVpZ2h0IG1ldGhvZHMgZm9yIG5vdyBidXQgb25jZSB3ZSBtb3ZlIG92ZXIKKyAg
ICAgICAgdG8gc3ViIHBpeGVsIGxheW91dCB0aGV5IHdpbGwgc25hcCB0aGUgc3VicGl4ZWwgdmFs
dWUgdG8gYSBkZXZpY2UgcGl4ZWwKKyAgICAgICAgYW5kIHJldHVybiBhbiBpbnRlZ2VyIHZhbHVl
LgorCisgICAgICAgIFdoZW4gc25hcHBpbmcgdGhlIGxlZnQgYW5kIHRvcCBlZGdlIGlzIHNpbXBs
eSByb3VuZGVkIHRvIHRoZSBuZWFyZXN0CisgICAgICAgIGRldmljZSBwaXhlbC4KKyAgICAgICAg
VGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgYXJlIGNvbXB1dGVkIGJ5IHN1YnRyYWN0aW5nIHRo
ZSByb3VuZGVkIGxlZnQvCisgICAgICAgIHRvcCBlZGdlIGZyb20gdGhlIHByZWNpc2UgbG9jYXRp
b24gYW5kIHNpemUuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBlZGdlcworICAgICAgICBhbGwgbGlu
ZSB1cCB3aXRoIGRldmljZSBwaXhlbHMgYW5kIHRoYXQgdGhlIHRvdGFsIHNpemUgb2YgYW4gb2Jq
ZWN0LAorICAgICAgICBpbmNsdWRpbmcgYm9yZGVycywgaXMgYXQgbW9zdCBvbmUgcGl4ZWwgb2Zm
LgorCisgICAgICAgIEluIHN1bW1hcnksIHRoZSB2YWx1ZXMgYXJlIGNvbXB1dGVkIGFzIGZvbGxv
d3M6CisgICAgICAgICAgICAgICAgeDogcm91bmQoeCkKKyAgICAgICAgICAgICAgICB5OiByb3Vu
ZCh5KQorICAgICAgICAgICAgICAgIG1heFg6IHJvdW5kKHggKyB3aWR0aCkKKyAgICAgICAgICAg
ICAgICBtYXhZOiByb3VuZCh5ICsgaGVpZ2h0KQorICAgICAgICAgICAgICAgIHdpZHRoOiByb3Vu
ZCh4ICsgd2lkdGgpIC0gcm91bmQoeCkKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IHJvdW5kKHkg
KyBoZWlnaHQpIC0gcm91bmQoeSkKKworICAgICAgICBXZSB1c2UgdGhlIHRlcm0gcGl4ZWwgc25h
cHBlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBudW1iZXJzIGFyZSBub3QgbWVyZWx5CisgICAgICAg
IHJvdW5kZWQuIFRoaXMgYWxzbyBtYXRjaGVzIHRoZSBuYW1pbmcgdXNlZCBieSB0aGUgbGluZSBi
b3ggdHJlZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdl
cy4KKworICAgICAgICAqIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwOgorICAgICAg
ICAqIHBhZ2UvUHJpbnRDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByaW50Q29udGV4
dDo6cGFnZU51bWJlckZvckVsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjo6OmNvbGxlY3RJZk5lZWRlZCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgIChSZW5kZXJCbG9jayk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGl4ZWxTbmFwcGVkTG9naWNhbFJpZ2h0T2Zmc2V0Rm9y
TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGl4ZWxTbmFwcGVkTG9naWNh
bExlZnRPZmZzZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9h
dGluZ09iamVjdDo6cGl4ZWxTbmFwcGVkWCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBlZE1heFgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpwaXhlbFNuYXBwZWRZKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6cGl4ZWxTbmFwcGVkTWF4WSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBl
ZFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6
cGl4ZWxTbmFwcGVkSGVpZ2h0KToKKyAgICAgICAgKEZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwaXhlbFNuYXBwZWRMb2dpY2FsVG9wRm9yRmxvYXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBpeGVsU25hcHBlZExvZ2ljYWxCb3R0b21G
b3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGl4ZWxTbmFwcGVkTG9n
aWNhbExlZnRGb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGl4ZWxT
bmFwcGVkTG9naWNhbFJpZ2h0Rm9yRmxvYXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpzaHJpbmtB
dmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwaXhlbFNuYXBwZWRD
bGllbnRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6cGl4ZWxTbmFwcGVkQ2xpZW50SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6c2Nyb2xsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBpeGVsU25hcHBlZFdpZHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6cGl4ZWxTbmFwcGVkSGVpZ2h0KToKKyAgICAgICAgKFJlbmRl
ckJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBpeGVsU25hcHBlZE9mZnNldFdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGl4ZWxTbmFwcGVkT2Zmc2V0SGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2xpZW50TG9naWNhbFdpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2xpZW50TG9naWNhbEhlaWdodCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwaXhlbFNuYXBwZWRPZmZzZXRXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpw
aXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBp
eGVsU25hcHBlZE9mZnNldExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBpeGVsU25hcHBlZE9mZnNldFRvcCk6CisgICAgICAgIChSZW5kZXJCb3hNb2RlbE9i
amVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpwaXhlbFNuYXBwZWRTY3JvbGxXaWR0aCk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwaXhlbFNuYXBwZWRTY3Jv
bGxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVTY3JvbGxE
aW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJ
bmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAg
ICAgICAoUmVuZGVyTGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9sbEhlaWdodCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGUpOgor
CiAyMDEyLTAyLTA3ICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW0Nocm9taXVtXSBDcmFzaCB3aGVuIHVzaW5nIHBlci10aWxlIHBhaW50aW5nIG9uIFdp
bmRvd3MuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hs
aWdodGVyLmNwcAkocmV2aXNpb24gMTA2OTU2KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0RPTU5vZGVIaWdobGlnaHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2OCwxMSArMjY4LDEx
IEBAIHZvaWQgZHJhd0VsZW1lbnRUaXRsZShHcmFwaGljc0NvbnRleHQmIGMKIAogICAgIFJlbmRl
ckJveE1vZGVsT2JqZWN0KiBtb2RlbE9iamVjdCA9IHJlbmRlcmVyLT5pc0JveE1vZGVsT2JqZWN0
KCkgPyB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKSA6IDA7CiAKLSAgICBTdHJpbmcg
d2lkdGhOdW1iZXJQYXJ0ID0gIiAiICsgU3RyaW5nOjpudW1iZXIobW9kZWxPYmplY3QgPyBhZGp1
c3RGb3JBYnNvbHV0ZVpvb20obW9kZWxPYmplY3QtPm9mZnNldFdpZHRoKCksIG1vZGVsT2JqZWN0
KSA6IGJvdW5kaW5nQm94LndpZHRoKCkpOworICAgIFN0cmluZyB3aWR0aE51bWJlclBhcnQgPSAi
ICIgKyBTdHJpbmc6Om51bWJlcihtb2RlbE9iamVjdCA/IGFkanVzdEZvckFic29sdXRlWm9vbSht
b2RlbE9iamVjdC0+cGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgoKSwgbW9kZWxPYmplY3QpIDogYm91
bmRpbmdCb3gud2lkdGgoKSk7CiAgICAgbm9kZVRpdGxlLmFwcGVuZCh3aWR0aE51bWJlclBhcnQp
OwogICAgIG5vZGVUaXRsZS5hcHBlbmQocHhTdHJpbmcpOwogICAgIG5vZGVUaXRsZS5hcHBlbmQo
dGltZXNTdHJpbmcpOwotICAgIFN0cmluZyBoZWlnaHROdW1iZXJQYXJ0ID0gU3RyaW5nOjpudW1i
ZXIobW9kZWxPYmplY3QgPyBhZGp1c3RGb3JBYnNvbHV0ZVpvb20obW9kZWxPYmplY3QtPm9mZnNl
dEhlaWdodCgpLCBtb2RlbE9iamVjdCkgOiBib3VuZGluZ0JveC5oZWlnaHQoKSk7CisgICAgU3Ry
aW5nIGhlaWdodE51bWJlclBhcnQgPSBTdHJpbmc6Om51bWJlcihtb2RlbE9iamVjdCA/IGFkanVz
dEZvckFic29sdXRlWm9vbShtb2RlbE9iamVjdC0+cGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCks
IG1vZGVsT2JqZWN0KSA6IGJvdW5kaW5nQm94LmhlaWdodCgpKTsKICAgICBub2RlVGl0bGUuYXBw
ZW5kKGhlaWdodE51bWJlclBhcnQpOwogICAgIG5vZGVUaXRsZS5hcHBlbmQocHhTdHJpbmcpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCShyZXZpc2lvbiAxMDY5NTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0OSw4ICsyNDksOCBAQCBpbnQgUHJpbnRDb250ZXh0OjpwYWdlTnVtYmVyRm9yRWxlbWVu
dChFCiAgICAgc2NhbGVkUGFnZVNpemUuc2NhbGUoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNTaXpl
KCkud2lkdGgoKSAvIHBhZ2VSZWN0LndpZHRoKCkpOwogICAgIHByaW50Q29udGV4dC5jb21wdXRl
UGFnZVJlY3RzV2l0aFBhZ2VTaXplKHNjYWxlZFBhZ2VTaXplLCBmYWxzZSk7CiAKLSAgICBpbnQg
dG9wID0gYm94LT5vZmZzZXRUb3AoKTsKLSAgICBpbnQgbGVmdCA9IGJveC0+b2Zmc2V0TGVmdCgp
OworICAgIGludCB0b3AgPSBib3gtPnBpeGVsU25hcHBlZE9mZnNldFRvcCgpOworICAgIGludCBs
ZWZ0ID0gYm94LT5waXhlbFNuYXBwZWRPZmZzZXRMZWZ0KCk7CiAgICAgc2l6ZV90IHBhZ2VOdW1i
ZXIgPSAwOwogICAgIGZvciAoOyBwYWdlTnVtYmVyIDwgcHJpbnRDb250ZXh0LnBhZ2VDb3VudCgp
OyBwYWdlTnVtYmVyKyspIHsKICAgICAgICAgY29uc3QgSW50UmVjdCYgcGFnZSA9IHByaW50Q29u
dGV4dC5wYWdlUmVjdChwYWdlTnVtYmVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTA2OTU2KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3Myw3ICszNjczLDcg
QEAgaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0SW50ZXJ2YWxTZQogICAgIGNvbnN0IEZs
b2F0aW5nT2JqZWN0KiByID0gaW50ZXJ2YWwuZGF0YSgpOwogICAgIGlmIChyLT50eXBlKCkgPT0g
RmxvYXRUeXBlVmFsdWUgJiYgaW50ZXJ2YWwubG93KCkgPD0gbV92YWx1ZSAmJiBtX3ZhbHVlIDwg
aW50ZXJ2YWwuaGlnaCgpKSB7CiAgICAgICAgIC8vIEFsbCB0aGUgb2JqZWN0cyByZXR1cm5lZCBm
cm9tIHRoZSB0cmVlIHNob3VsZCBiZSBhbHJlYWR5IHBsYWNlZC4KLSAgICAgICAgQVNTRVJUKHIt
PmlzUGxhY2VkKCkgJiYgbV9yZW5kZXJlci0+bG9naWNhbFRvcEZvckZsb2F0KHIpIDw9IG1fdmFs
dWUgJiYgbV9yZW5kZXJlci0+bG9naWNhbEJvdHRvbUZvckZsb2F0KHIpID4gbV92YWx1ZSk7Cisg
ICAgICAgIEFTU0VSVChyLT5pc1BsYWNlZCgpICYmIG1fcmVuZGVyZXItPnBpeGVsU25hcHBlZExv
Z2ljYWxUb3BGb3JGbG9hdChyKSA8PSBtX3ZhbHVlICYmIG1fcmVuZGVyZXItPnBpeGVsU25hcHBl
ZExvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSA+IG1fdmFsdWUpOwogCiAgICAgICAgIGlmIChGbG9h
dFR5cGVWYWx1ZSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0IAogICAgICAgICAgICAgJiYg
bV9yZW5kZXJlci0+bG9naWNhbFJpZ2h0Rm9yRmxvYXQocikgPiBtX29mZnNldCkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDEwNjk1NikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjMsNiArMTYzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0eWxlKCktPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwg
Zmlyc3RMaW5lKQogICAgICAgICAgICAgOiBsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxSaWdodE9m
ZnNldEZvckxpbmUocG9zaXRpb24sIGZpcnN0TGluZSk7CiAgICAgfQorCisgICAgaW50IHBpeGVs
U25hcHBlZExvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgYm9v
bCBmaXJzdExpbmUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbG9naWNhbFJpZ2h0T2Zm
c2V0Rm9yTGluZShwb3NpdGlvbiwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChwb3NpdGlv
biksIGZpcnN0TGluZSwgMCk7CisgICAgfQorCisgICAgaW50IHBpeGVsU25hcHBlZExvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9zaXRp
b24sIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChwb3NpdGlvbiksIGZpcnN0TGluZSwgMCk7
CisgICAgfQogICAgIAogICAgIExheW91dFVuaXQgc3RhcnRBbGlnbmVkT2Zmc2V0Rm9yTGluZShS
ZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSk7CiAg
ICAgTGF5b3V0VW5pdCB0ZXh0SW5kZW50T2Zmc2V0KCkgY29uc3Q7CkBAIC01NjEsNiArNTcxLDEz
IEBAIHByaXZhdGU6CiAgICAgICAgIExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X2ZyYW1lUmVjdC53aWR0aCgpOyB9CiAgICAgICAgIExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9mcmFtZVJlY3QuaGVpZ2h0KCk7IH0KIAorICAgICAgICBpbnQgcGl4ZWxTbmFw
cGVkWCgpIGNvbnN0IHsgcmV0dXJuIHgoKTsgfQorICAgICAgICBpbnQgcGl4ZWxTbmFwcGVkTWF4
WCgpIGNvbnN0IHsgcmV0dXJuIG1heFgoKTsgfQorICAgICAgICBpbnQgcGl4ZWxTbmFwcGVkWSgp
IGNvbnN0IHsgcmV0dXJuIHkoKTsgfQorICAgICAgICBpbnQgcGl4ZWxTbmFwcGVkTWF4WSgpIGNv
bnN0IHsgcmV0dXJuIG1heFkoKTsgfQorICAgICAgICBpbnQgcGl4ZWxTbmFwcGVkV2lkdGgoKSBj
b25zdCB7IHJldHVybiB3aWR0aCgpOyB9CisgICAgICAgIGludCBwaXhlbFNuYXBwZWRIZWlnaHQo
KSBjb25zdCB7IHJldHVybiBoZWlnaHQoKTsgfQorCiAgICAgICAgIHZvaWQgc2V0WChMYXlvdXRV
bml0IHgpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3Quc2V0WCh4KTsg
fQogICAgICAgICB2b2lkIHNldFkoTGF5b3V0VW5pdCB5KSB7IEFTU0VSVCghaXNJblBsYWNlZFRy
ZWUoKSk7IG1fZnJhbWVSZWN0LnNldFkoeSk7IH0KICAgICAgICAgdm9pZCBzZXRXaWR0aChMYXlv
dXRVbml0IHdpZHRoKSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNl
dFdpZHRoKHdpZHRoKTsgfQpAQCAtNTk1LDYgKzYxMiwxMSBAQCBwcml2YXRlOgogICAgIExheW91
dFVuaXQgbG9naWNhbFJpZ2h0Rm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBj
b25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPm1heFgoKSA6
IGNoaWxkLT5tYXhZKCk7IH0KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aEZvckZsb2F0KGNv
bnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IGNoaWxkLT53aWR0aCgpIDogY2hpbGQtPmhlaWdodCgpOyB9CiAKKyAgICBp
bnQgcGl4ZWxTbmFwcGVkTG9naWNhbFRvcEZvckZsb2F0KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBj
aGlsZCkgY29uc3QgeyByZXR1cm4gbG9naWNhbFRvcEZvckZsb2F0KGNoaWxkKTsgfQorICAgIGlu
dCBwaXhlbFNuYXBwZWRMb2dpY2FsQm90dG9tRm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3Qq
IGNoaWxkKSBjb25zdCB7IHJldHVybiBsb2dpY2FsQm90dG9tRm9yRmxvYXQoY2hpbGQpOyB9Cisg
ICAgaW50IHBpeGVsU25hcHBlZExvZ2ljYWxMZWZ0Rm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmpl
Y3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBsb2dpY2FsTGVmdEZvckZsb2F0KGNoaWxkKTsgfQor
ICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsUmlnaHRGb3JGbG9hdChjb25zdCBGbG9hdGluZ09i
amVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxSaWdodEZvckZsb2F0KGNoaWxkKTsg
fQorCiAgICAgdm9pZCBzZXRMb2dpY2FsVG9wRm9yRmxvYXQoRmxvYXRpbmdPYmplY3QqIGNoaWxk
LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3ApCiAgICAgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxMDY5NTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI4LDExICsxMjgsMTEgQEAgaW5saW5lIHZvaWQgTGluZVdpZHRoOjpzaHJpbmtBdmFpbGFi
bGVXaQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobmV3RmxvYXQtPnR5cGUoKSA9PSBSZW5k
ZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCkgewotICAgICAgICBtX2xlZnQgPSBt
X2Jsb2NrLT5sb2dpY2FsUmlnaHRGb3JGbG9hdChuZXdGbG9hdCk7CisgICAgICAgIG1fbGVmdCA9
IG1fYmxvY2stPnBpeGVsU25hcHBlZExvZ2ljYWxSaWdodEZvckZsb2F0KG5ld0Zsb2F0KTsKICAg
ICAgICAgaWYgKG1faXNGaXJzdExpbmUgJiYgbV9ibG9jay0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKQogICAgICAgICAgICAgbV9sZWZ0ICs9IG1fYmxvY2stPnRleHRJbmRlbnRP
ZmZzZXQoKTsKICAgICB9IGVsc2UgewotICAgICAgICBtX3JpZ2h0ID0gbV9ibG9jay0+bG9naWNh
bExlZnRGb3JGbG9hdChuZXdGbG9hdCk7CisgICAgICAgIG1fcmlnaHQgPSBtX2Jsb2NrLT5waXhl
bFNuYXBwZWRMb2dpY2FsTGVmdEZvckZsb2F0KG5ld0Zsb2F0KTsKICAgICAgICAgaWYgKG1faXNG
aXJzdExpbmUgJiYgIW1fYmxvY2stPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkK
ICAgICAgICAgICAgIG1fcmlnaHQgLT0gbV9ibG9jay0+dGV4dEluZGVudE9mZnNldCgpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAx
MDY5NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDc4LDYgKzQ3OCwxNiBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y2xpZW50
SGVpZ2h0KCkgY29uCiAgICAgcmV0dXJuIGhlaWdodCgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJC
b3R0b20oKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKIH0KIAoraW50IFJlbmRlckJv
eDo6cGl4ZWxTbmFwcGVkQ2xpZW50V2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBjbGllbnRX
aWR0aCgpOworfQorCitpbnQgUmVuZGVyQm94OjpwaXhlbFNuYXBwZWRDbGllbnRIZWlnaHQoKSBj
b25zdAoreworICAgIHJldHVybiBjbGllbnRIZWlnaHQoKTsKK30KKwogaW50IFJlbmRlckJveDo6
c2Nyb2xsV2lkdGgoKSBjb25zdAogewogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkKQEAgLTQ5
NSw3ICs1MDUsNyBAQCBpbnQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAogICAgICAg
ICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0KCk7CiAgICAgLy8gRm9yIG9iamVjdHMgd2l0
aCB2aXNpYmxlIG92ZXJmbG93LCB0aGlzIG1hdGNoZXMgSUUuCiAgICAgLy8gRklYTUU6IE5lZWQg
dG8gd29yayByaWdodCB3aXRoIHdyaXRpbmcgbW9kZXMuCi0gICAgcmV0dXJuIG1heChjbGllbnRI
ZWlnaHQoKSwgbWF4WUxheW91dE92ZXJmbG93KCkgLSBib3JkZXJUb3AoKSk7CisgICAgcmV0dXJu
IG1heChwaXhlbFNuYXBwZWRDbGllbnRIZWlnaHQoKSwgbWF4WUxheW91dE92ZXJmbG93KCkgLSBi
b3JkZXJUb3AoKSk7CiB9CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbExlZnQoKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gMTA2OTU2KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw2ICs1MSw5IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9mcmFtZVJlY3Qud2lkdGgoKTsgfQogICAgIExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9mcmFtZVJlY3QuaGVpZ2h0KCk7IH0KIAorICAgIGludCBwaXhlbFNuYXBwZWRX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LndpZHRoKCk7IH0KKyAgICBpbnQgcGl4
ZWxTbmFwcGVkSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3QuaGVpZ2h0KCk7IH0K
KwogICAgIC8vIFRoZXNlIHJlcHJlc2VudCB5b3VyIGxvY2F0aW9uIHJlbGF0aXZlIHRvIHlvdXIg
Y29udGFpbmVyIGFzIGEgcGh5c2ljYWwgb2Zmc2V0LgogICAgIC8vIEluIGxheW91dCByZWxhdGVk
IG1ldGhvZHMgeW91IGFsbW9zdCBhbHdheXMgd2FudCB0aGUgbG9naWNhbCBsb2NhdGlvbiAoZS5n
LiB4KCkgYW5kIHkoKSkuCiAgICAgTGF5b3V0VW5pdCB0b3AoKSBjb25zdCB7IHJldHVybiB0b3BM
ZWZ0TG9jYXRpb24oKS55KCk7IH0KQEAgLTE4MywxNyArMTg2LDIzIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIExheW91dFVuaXQgb2Zmc2V0V2lkdGgoKSBjb25zdCB7IHJldHVybiB3aWR0aCgpOyB9
CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG9mZnNldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGhl
aWdodCgpOyB9CiAKKyAgICB2aXJ0dWFsIGludCBwaXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIHBpeGVsU25hcHBlZFdpZHRoKCk7IH0KKyAgICB2aXJ0dWFsIGludCBwaXhl
bFNuYXBwZWRPZmZzZXRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBwaXhlbFNuYXBwZWRIZWlnaHQo
KTsgfQorCiAgICAgLy8gTW9yZSBJRSBleHRlbnNpb25zLiAgY2xpZW50V2lkdGggYW5kIGNsaWVu
dEhlaWdodCByZXByZXNlbnQgdGhlIGludGVyaW9yIG9mIGFuIG9iamVjdAogICAgIC8vIGV4Y2x1
ZGluZyBib3JkZXIgYW5kIHNjcm9sbGJhci4gIGNsaWVudExlZnQvVG9wIGFyZSBqdXN0IHRoZSBi
b3JkZXJMZWZ0V2lkdGggYW5kIGJvcmRlclRvcFdpZHRoLgogICAgIExheW91dFVuaXQgY2xpZW50
TGVmdCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckxlZnQoKTsgfQogICAgIExheW91dFVuaXQgY2xp
ZW50VG9wKCkgY29uc3QgeyByZXR1cm4gYm9yZGVyVG9wKCk7IH0KICAgICBMYXlvdXRVbml0IGNs
aWVudFdpZHRoKCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBjbGllbnRIZWlnaHQoKSBjb25zdDsK
LSAgICBMYXlvdXRVbml0IGNsaWVudExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxl
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjbGllbnRXaWR0aCgpIDogY2xpZW50SGVp
Z2h0KCk7IH0KLSAgICBMYXlvdXRVbml0IGNsaWVudExvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2xpZW50SGVpZ2h0KCkg
OiBjbGllbnRXaWR0aCgpOyB9CisgICAgTGF5b3V0VW5pdCBjbGllbnRMb2dpY2FsV2lkdGgoKSBj
b25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcGl4ZWxT
bmFwcGVkQ2xpZW50V2lkdGgoKSA6IHBpeGVsU25hcHBlZENsaWVudEhlaWdodCgpOyB9CisgICAg
TGF5b3V0VW5pdCBjbGllbnRMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBpeGVsU25hcHBlZENsaWVudEhlaWdodCgpIDog
cGl4ZWxTbmFwcGVkQ2xpZW50V2lkdGgoKTsgfQogICAgIExheW91dFVuaXQgY2xpZW50TG9naWNh
bEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckJlZm9yZSgpICsgY2xpZW50TG9naWNhbEhl
aWdodCgpOyB9CiAgICAgTGF5b3V0UmVjdCBjbGllbnRCb3hSZWN0KCkgY29uc3QgeyByZXR1cm4g
TGF5b3V0UmVjdChjbGllbnRMZWZ0KCksIGNsaWVudFRvcCgpLCBjbGllbnRXaWR0aCgpLCBjbGll
bnRIZWlnaHQoKSk7IH0KIAorICAgIGludCBwaXhlbFNuYXBwZWRDbGllbnRXaWR0aCgpIGNvbnN0
OworICAgIGludCBwaXhlbFNuYXBwZWRDbGllbnRIZWlnaHQoKSBjb25zdDsKKwogICAgIC8vIHNj
cm9sbFdpZHRoL3Njcm9sbEhlaWdodCB3aWxsIGJlIHRoZSBzYW1lIGFzIGNsaWVudFdpZHRoL2Ns
aWVudEhlaWdodCB1bmxlc3MgdGhlCiAgICAgLy8gb2JqZWN0IGhhcyBvdmVyZmxvdzpoaWRkZW4v
c2Nyb2xsL2F1dG8gc3BlY2lmaWVkIGFuZCBhbHNvIGhhcyBvdmVyZmxvdy4KICAgICAvLyBzY3Jv
bGxMZWZ0L1RvcCByZXR1cm4gdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLiAgVGhlc2UgbWV0
aG9kcyBhcmUgdmlydHVhbCBzbyB0aGF0IG9iamVjdHMgbGlrZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiAx
MDY5NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTIsNiArNTEyLDE2IEBAIExheW91dFVuaXQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6Om9mZnNldFQKICAgICByZXR1cm4geVBvczsKIH0KIAoraW50IFJlbmRl
ckJveE1vZGVsT2JqZWN0OjpwaXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG9mZnNldFdpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGl4
ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gb2Zmc2V0SGVpZ2h0
KCk7Cit9CisKIExheW91dFVuaXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhZGRpbmdUb3AoYm9v
bCkgY29uc3QKIHsKICAgICBMYXlvdXRVbml0IHcgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHJldmlzaW9uIDEwNjk1NikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw2ICs1OSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlvdXRV
bml0IG9mZnNldFRvcCgpIGNvbnN0OwogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBvZmZzZXRXaWR0
aCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIExheW91dFVuaXQgb2Zmc2V0SGVpZ2h0KCkgY29u
c3QgPSAwOworICAgIGludCBwaXhlbFNuYXBwZWRPZmZzZXRMZWZ0KCkgY29uc3QgeyByZXR1cm4g
b2Zmc2V0TGVmdCgpOyB9CisgICAgaW50IHBpeGVsU25hcHBlZE9mZnNldFRvcCgpIGNvbnN0IHsg
cmV0dXJuIG9mZnNldFRvcCgpOyB9CisgICAgaW50IHBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCkg
Y29uc3Q7CisgICAgaW50IHBpeGVsU25hcHBlZE9mZnNldEhlaWdodCgpIGNvbnN0OwogCiAgICAg
dmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRl
clN0eWxlKiBuZXdTdHlsZSk7CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMTA2OTU2KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIyMCw2ICsyMjIwLDE2IEBAIExheW91dFVuaXQgUmVuZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCgp
CiAgICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKTsKIH0KIAoraW50IFJlbmRlckxheWVy
OjpwaXhlbFNuYXBwZWRTY3JvbGxXaWR0aCgpCit7CisgICAgcmV0dXJuIHNjcm9sbFdpZHRoKCk7
Cit9CisKK2ludCBSZW5kZXJMYXllcjo6cGl4ZWxTbmFwcGVkU2Nyb2xsSGVpZ2h0KCkKK3sKKyAg
ICByZXR1cm4gc2Nyb2xsSGVpZ2h0KCk7Cit9CisKIExheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92
ZXJmbG93VG9wKCkgY29uc3QKIHsKICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwpA
QCAtMjI2OCw5ICsyMjc4LDkgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVNjcm9sbERpbWVu
c2lvbgogICAgIHNldFNjcm9sbE9yaWdpbihJbnRQb2ludCgtbV9zY3JvbGxPdmVyZmxvdy53aWR0
aCgpLCAtbV9zY3JvbGxPdmVyZmxvdy5oZWlnaHQoKSkpOwogCiAgICAgaWYgKG5lZWRIQmFyKQot
ICAgICAgICAqbmVlZEhCYXIgPSBtX3Njcm9sbFNpemUud2lkdGgoKSA+IGJveC0+Y2xpZW50V2lk
dGgoKTsKKyAgICAgICAgKm5lZWRIQmFyID0gcGl4ZWxTbmFwcGVkU2Nyb2xsV2lkdGgoKSA+IGJv
eC0+cGl4ZWxTbmFwcGVkQ2xpZW50V2lkdGgoKTsKICAgICBpZiAobmVlZFZCYXIpCi0gICAgICAg
ICpuZWVkVkJhciA9IG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKSA+IGJveC0+Y2xpZW50SGVpZ2h0KCk7
CisgICAgICAgICpuZWVkVkJhciA9IHBpeGVsU25hcHBlZFNjcm9sbEhlaWdodCgpID4gYm94LT5w
aXhlbFNuYXBwZWRDbGllbnRIZWlnaHQoKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
T3ZlcmZsb3dTdGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJvb2wgdmVydGljYWxPdmVy
ZmxvdykKQEAgLTIzNzUsMTQgKzIzODUsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Ny
b2xsSW5mb0FmdGVyTAogCiAgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9s
aW5lIHN0ZXApLgogICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBjbGllbnRX
aWR0aCA9IGJveC0+Y2xpZW50V2lkdGgoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBwYWdlU3RlcCA9
IG1heDxMYXlvdXRVbml0PihtYXg8TGF5b3V0VW5pdD4oY2xpZW50V2lkdGggKiBTY3JvbGxiYXI6
Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBjbGllbnRXaWR0aCAtIFNjcm9sbGJhcjo6
bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpKSwgMSk7CisgICAgICAgIGludCBjbGllbnRXaWR0aCA9
IGJveC0+cGl4ZWxTbmFwcGVkQ2xpZW50V2lkdGgoKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0g
bWF4KG1heDxpbnQ+KGNsaWVudFdpZHRoICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdo
ZW5QYWdpbmcoKSwgY2xpZW50V2lkdGggLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFn
ZXMoKSksIDEpOwogICAgICAgICBtX2hCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVy
TGluZVN0ZXAoKSwgcGFnZVN0ZXApOwogICAgICAgICBtX2hCYXItPnNldFByb3BvcnRpb24oY2xp
ZW50V2lkdGgsIG1fc2Nyb2xsU2l6ZS53aWR0aCgpKTsKICAgICB9CiAgICAgaWYgKG1fdkJhcikg
ewotICAgICAgICBMYXlvdXRVbml0IGNsaWVudEhlaWdodCA9IGJveC0+Y2xpZW50SGVpZ2h0KCk7
Ci0gICAgICAgIExheW91dFVuaXQgcGFnZVN0ZXAgPSBtYXg8TGF5b3V0VW5pdD4obWF4PExheW91
dFVuaXQ+KGNsaWVudEhlaWdodCAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFn
aW5nKCksIGNsaWVudEhlaWdodCAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygp
KSwgMSk7CisgICAgICAgIGludCBjbGllbnRIZWlnaHQgPSBib3gtPnBpeGVsU25hcHBlZENsaWVu
dEhlaWdodCgpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSBtYXgobWF4PGludD4oY2xpZW50SGVp
Z2h0ICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgY2xpZW50SGVp
Z2h0IC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsKICAgICAgICAg
bV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVw
KTsKICAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3JvbGxT
aXplLmhlaWdodCgpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuaAkocmV2aXNpb24gMTA2OTU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Miw2ICsyODIsOCBAQCBwdWJsaWM6CiAK
ICAgICBMYXlvdXRVbml0IHNjcm9sbFdpZHRoKCk7CiAgICAgTGF5b3V0VW5pdCBzY3JvbGxIZWln
aHQoKTsKKyAgICBpbnQgcGl4ZWxTbmFwcGVkU2Nyb2xsV2lkdGgoKTsKKyAgICBpbnQgcGl4ZWxT
bmFwcGVkU2Nyb2xsSGVpZ2h0KCk7CiAKICAgICB2b2lkIHBhblNjcm9sbEZyb21Qb2ludChjb25z
dCBMYXlvdXRQb2ludCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwCShyZXZpc2lvbiAxMDY5NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1MSw3ICs2NTEsNyBAQCBM
YXlvdXRVbml0IFJlbmRlckxpc3RCb3g6OnNjcm9sbFdpZHRoKCkgCiAKIGludCBSZW5kZXJMaXN0
Qm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAogewotICAgIHJldHVybiBtYXgoY2xpZW50SGVpZ2h0
KCksIGxpc3RIZWlnaHQoKSk7CisgICAgcmV0dXJuIG1heChwaXhlbFNuYXBwZWRDbGllbnRIZWln
aHQoKSwgbGlzdEhlaWdodCgpKTsKIH0KIAogaW50IFJlbmRlckxpc3RCb3g6OnNjcm9sbExlZnQo
KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShy
ZXZpc2lvbiAxMDY5NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDMsNyArNTAzLDcgQEAgU3RyaW5nIFJlbmRlclRoZW1l
Ojpmb3JtYXRNZWRpYUNvbnRyb2xzUgogTGF5b3V0UG9pbnQgUmVuZGVyVGhlbWU6OnZvbHVtZVNs
aWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCogbXV0ZUJ1dHRvbkJveCwgY29uc3Qg
TGF5b3V0U2l6ZSYgc2l6ZSkgY29uc3QKIHsKICAgICBMYXlvdXRVbml0IHkgPSAtc2l6ZS5oZWln
aHQoKTsKLSAgICBGbG9hdFBvaW50IGFic1BvaW50ID0gbXV0ZUJ1dHRvbkJveC0+bG9jYWxUb0Fi
c29sdXRlKEZsb2F0UG9pbnQobXV0ZUJ1dHRvbkJveC0+b2Zmc2V0TGVmdCgpLCB5KSwgdHJ1ZSwg
dHJ1ZSk7CisgICAgRmxvYXRQb2ludCBhYnNQb2ludCA9IG11dGVCdXR0b25Cb3gtPmxvY2FsVG9B
YnNvbHV0ZShGbG9hdFBvaW50KG11dGVCdXR0b25Cb3gtPnBpeGVsU25hcHBlZE9mZnNldExlZnQo
KSwgeSksIHRydWUsIHRydWUpOwogICAgIGlmIChhYnNQb2ludC55KCkgPCAwKQogICAgICAgICB5
ID0gbXV0ZUJ1dHRvbkJveC0+aGVpZ2h0KCk7CiAgICAgcmV0dXJuIExheW91dFBvaW50KDAsIHkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cAkocmV2aXNpb24gMTA2OTU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRy
ZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTcsMTAgKzYxNywxMCBAQCBzdGF0aWMg
dm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgUmVuZGVyCiAgICAgICAgICAgICB0cyA8PCAiIHNj
cm9sbFggIiA8PCBsLnNjcm9sbFhPZmZzZXQoKTsKICAgICAgICAgaWYgKGwuc2Nyb2xsWU9mZnNl
dCgpKQogICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxZICIgPDwgbC5zY3JvbGxZT2Zmc2V0KCk7
Ci0gICAgICAgIGlmIChsLnJlbmRlckJveCgpICYmIGwucmVuZGVyQm94KCktPmNsaWVudFdpZHRo
KCkgIT0gbC5zY3JvbGxXaWR0aCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxXaWR0aCAi
IDw8IGwuc2Nyb2xsV2lkdGgoKTsKLSAgICAgICAgaWYgKGwucmVuZGVyQm94KCkgJiYgbC5yZW5k
ZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkgIT0gbC5zY3JvbGxIZWlnaHQoKSkKLSAgICAgICAgICAg
IHRzIDw8ICIgc2Nyb2xsSGVpZ2h0ICIgPDwgbC5zY3JvbGxIZWlnaHQoKTsKKyAgICAgICAgaWYg
KGwucmVuZGVyQm94KCkgJiYgbC5yZW5kZXJCb3goKS0+cGl4ZWxTbmFwcGVkQ2xpZW50V2lkdGgo
KSAhPSBsLnBpeGVsU25hcHBlZFNjcm9sbFdpZHRoKCkpCisgICAgICAgICAgICB0cyA8PCAiIHNj
cm9sbFdpZHRoICIgPDwgbC5waXhlbFNuYXBwZWRTY3JvbGxXaWR0aCgpOworICAgICAgICBpZiAo
bC5yZW5kZXJCb3goKSAmJiBsLnJlbmRlckJveCgpLT5waXhlbFNuYXBwZWRDbGllbnRIZWlnaHQo
KSAhPSBsLnBpeGVsU25hcHBlZFNjcm9sbEhlaWdodCgpKQorICAgICAgICAgICAgdHMgPDwgIiBz
Y3JvbGxIZWlnaHQgIiA8PCBsLnBpeGVsU25hcHBlZFNjcm9sbEhlaWdodCgpOwogICAgIH0KIAog
ICAgIGlmIChwYWludFBoYXNlID09IExheWVyUGFpbnRQaGFzZUJhY2tncm91bmQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125949</attachid>
            <date>2012-02-07 16:09:17 -0800</date>
            <delta_ts>2012-02-07 16:59:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78040-20120207160916.patch</filename>
            <type>text/plain</type>
            <size>22295</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzAwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBACisyMDEyLTAyLTA3ICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgcGl4ZWxTbmFwcGVkWC9Z
L1dpZHRoL0hlaWdodCBtZXRob2RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03ODA0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBwaXhlbCBzbmFwcGVkIHZlcnNpb25zIG9mIHgveS93aWR0aC9oZWln
aHQgbWV0aG9kcy4gVGhlc2UgcmV0dXJuIHRoZQorICAgICAgICBzYW1lIHZhbHVlIGFzIHRoZSB4
L3cvd2lkdGgvaGVpZ2h0IG1ldGhvZHMgZm9yIG5vdyBidXQgb25jZSB3ZSBtb3ZlIG92ZXIKKyAg
ICAgICAgdG8gc3ViIHBpeGVsIGxheW91dCB0aGV5IHdpbGwgc25hcCB0aGUgc3VicGl4ZWwgdmFs
dWUgdG8gYSBkZXZpY2UgcGl4ZWwKKyAgICAgICAgYW5kIHJldHVybiBhbiBpbnRlZ2VyIHZhbHVl
LgorCisgICAgICAgIFdoZW4gc25hcHBpbmcgdGhlIGxlZnQgYW5kIHRvcCBlZGdlIGlzIHNpbXBs
eSByb3VuZGVkIHRvIHRoZSBuZWFyZXN0CisgICAgICAgIGRldmljZSBwaXhlbC4KKyAgICAgICAg
VGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgYXJlIGNvbXB1dGVkIGJ5IHN1YnRyYWN0aW5nIHRo
ZSByb3VuZGVkIGxlZnQvCisgICAgICAgIHRvcCBlZGdlIGZyb20gdGhlIHByZWNpc2UgbG9jYXRp
b24gYW5kIHNpemUuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBlZGdlcworICAgICAgICBhbGwgbGlu
ZSB1cCB3aXRoIGRldmljZSBwaXhlbHMgYW5kIHRoYXQgdGhlIHRvdGFsIHNpemUgb2YgYW4gb2Jq
ZWN0LAorICAgICAgICBpbmNsdWRpbmcgYm9yZGVycywgaXMgYXQgbW9zdCBvbmUgcGl4ZWwgb2Zm
LgorCisgICAgICAgIEluIHN1bW1hcnksIHRoZSB2YWx1ZXMgYXJlIGNvbXB1dGVkIGFzIGZvbGxv
d3M6CisgICAgICAgICAgICAgICAgeDogcm91bmQoeCkKKyAgICAgICAgICAgICAgICB5OiByb3Vu
ZCh5KQorICAgICAgICAgICAgICAgIG1heFg6IHJvdW5kKHggKyB3aWR0aCkKKyAgICAgICAgICAg
ICAgICBtYXhZOiByb3VuZCh5ICsgaGVpZ2h0KQorICAgICAgICAgICAgICAgIHdpZHRoOiByb3Vu
ZCh4ICsgd2lkdGgpIC0gcm91bmQoeCkKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IHJvdW5kKHkg
KyBoZWlnaHQpIC0gcm91bmQoeSkKKworICAgICAgICBXZSB1c2UgdGhlIHRlcm0gcGl4ZWwgc25h
cHBlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBudW1iZXJzIGFyZSBub3QgbWVyZWx5CisgICAgICAg
IHJvdW5kZWQuIFRoaXMgYWxzbyBtYXRjaGVzIHRoZSBuYW1pbmcgdXNlZCBieSB0aGUgbGluZSBi
b3ggdHJlZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdl
cy4KKworICAgICAgICAqIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwOgorICAgICAg
ICAqIHBhZ2UvUHJpbnRDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByaW50Q29udGV4
dDo6cGFnZU51bWJlckZvckVsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjo6OmNvbGxlY3RJZk5lZWRlZCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgIChSZW5kZXJCbG9jayk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGl4ZWxTbmFwcGVkTG9naWNhbFJpZ2h0T2Zmc2V0Rm9y
TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGl4ZWxTbmFwcGVkTG9naWNh
bExlZnRPZmZzZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9h
dGluZ09iamVjdDo6cGl4ZWxTbmFwcGVkWCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBlZE1heFgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpwaXhlbFNuYXBwZWRZKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6cGl4ZWxTbmFwcGVkTWF4WSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBl
ZFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6
cGl4ZWxTbmFwcGVkSGVpZ2h0KToKKyAgICAgICAgKEZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwaXhlbFNuYXBwZWRMb2dpY2FsVG9wRm9yRmxvYXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBpeGVsU25hcHBlZExvZ2ljYWxCb3R0b21G
b3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGl4ZWxTbmFwcGVkTG9n
aWNhbExlZnRGb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGl4ZWxT
bmFwcGVkTG9naWNhbFJpZ2h0Rm9yRmxvYXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpzaHJpbmtB
dmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwaXhlbFNuYXBwZWRD
bGllbnRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6cGl4ZWxTbmFwcGVkQ2xpZW50SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6c2Nyb2xsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBpeGVsU25hcHBlZFdpZHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6cGl4ZWxTbmFwcGVkSGVpZ2h0KToKKyAgICAgICAgKFJlbmRl
ckJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBpeGVsU25hcHBlZE9mZnNldFdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGl4ZWxTbmFwcGVkT2Zmc2V0SGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2xpZW50TG9naWNhbFdpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2xpZW50TG9naWNhbEhlaWdodCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwaXhlbFNuYXBwZWRPZmZzZXRXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpw
aXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBp
eGVsU25hcHBlZE9mZnNldExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBpeGVsU25hcHBlZE9mZnNldFRvcCk6CisgICAgICAgIChSZW5kZXJCb3hNb2RlbE9i
amVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpwaXhlbFNuYXBwZWRTY3JvbGxXaWR0aCk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwaXhlbFNuYXBwZWRTY3Jv
bGxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVTY3JvbGxE
aW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJ
bmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAg
ICAgICAoUmVuZGVyTGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9sbEhlaWdodCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGUpOgor
CiAyMDEyLTAyLTA3ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZW5hbWUgW3Y4T25Qcm90b10gSURMIGF0dHJpYnV0ZSB0byBbVjhPblByb3RvXSBJREwg
YXR0cmlidXRlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdo
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhp
Z2hsaWdodGVyLmNwcAkocmV2aXNpb24gMTA3MDA0KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2OCwxMSArMjY4
LDExIEBAIHZvaWQgZHJhd0VsZW1lbnRUaXRsZShHcmFwaGljc0NvbnRleHQmIGMKIAogICAgIFJl
bmRlckJveE1vZGVsT2JqZWN0KiBtb2RlbE9iamVjdCA9IHJlbmRlcmVyLT5pc0JveE1vZGVsT2Jq
ZWN0KCkgPyB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKSA6IDA7CiAKLSAgICBTdHJp
bmcgd2lkdGhOdW1iZXJQYXJ0ID0gIiAiICsgU3RyaW5nOjpudW1iZXIobW9kZWxPYmplY3QgPyBh
ZGp1c3RGb3JBYnNvbHV0ZVpvb20obW9kZWxPYmplY3QtPm9mZnNldFdpZHRoKCksIG1vZGVsT2Jq
ZWN0KSA6IGJvdW5kaW5nQm94LndpZHRoKCkpOworICAgIFN0cmluZyB3aWR0aE51bWJlclBhcnQg
PSAiICIgKyBTdHJpbmc6Om51bWJlcihtb2RlbE9iamVjdCA/IGFkanVzdEZvckFic29sdXRlWm9v
bShtb2RlbE9iamVjdC0+cGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgoKSwgbW9kZWxPYmplY3QpIDog
Ym91bmRpbmdCb3gud2lkdGgoKSk7CiAgICAgbm9kZVRpdGxlLmFwcGVuZCh3aWR0aE51bWJlclBh
cnQpOwogICAgIG5vZGVUaXRsZS5hcHBlbmQocHhTdHJpbmcpOwogICAgIG5vZGVUaXRsZS5hcHBl
bmQodGltZXNTdHJpbmcpOwotICAgIFN0cmluZyBoZWlnaHROdW1iZXJQYXJ0ID0gU3RyaW5nOjpu
dW1iZXIobW9kZWxPYmplY3QgPyBhZGp1c3RGb3JBYnNvbHV0ZVpvb20obW9kZWxPYmplY3QtPm9m
ZnNldEhlaWdodCgpLCBtb2RlbE9iamVjdCkgOiBib3VuZGluZ0JveC5oZWlnaHQoKSk7CisgICAg
U3RyaW5nIGhlaWdodE51bWJlclBhcnQgPSBTdHJpbmc6Om51bWJlcihtb2RlbE9iamVjdCA/IGFk
anVzdEZvckFic29sdXRlWm9vbShtb2RlbE9iamVjdC0+cGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0
KCksIG1vZGVsT2JqZWN0KSA6IGJvdW5kaW5nQm94LmhlaWdodCgpKTsKICAgICBub2RlVGl0bGUu
YXBwZW5kKGhlaWdodE51bWJlclBhcnQpOwogICAgIG5vZGVUaXRsZS5hcHBlbmQocHhTdHJpbmcp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCShyZXZpc2lvbiAxMDcw
MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0OSw4ICsyNDksOCBAQCBpbnQgUHJpbnRDb250ZXh0OjpwYWdlTnVtYmVyRm9yRWxl
bWVudChFCiAgICAgc2NhbGVkUGFnZVNpemUuc2NhbGUoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNT
aXplKCkud2lkdGgoKSAvIHBhZ2VSZWN0LndpZHRoKCkpOwogICAgIHByaW50Q29udGV4dC5jb21w
dXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplKHNjYWxlZFBhZ2VTaXplLCBmYWxzZSk7CiAKLSAgICBp
bnQgdG9wID0gYm94LT5vZmZzZXRUb3AoKTsKLSAgICBpbnQgbGVmdCA9IGJveC0+b2Zmc2V0TGVm
dCgpOworICAgIGludCB0b3AgPSBib3gtPnBpeGVsU25hcHBlZE9mZnNldFRvcCgpOworICAgIGlu
dCBsZWZ0ID0gYm94LT5waXhlbFNuYXBwZWRPZmZzZXRMZWZ0KCk7CiAgICAgc2l6ZV90IHBhZ2VO
dW1iZXIgPSAwOwogICAgIGZvciAoOyBwYWdlTnVtYmVyIDwgcHJpbnRDb250ZXh0LnBhZ2VDb3Vu
dCgpOyBwYWdlTnVtYmVyKyspIHsKICAgICAgICAgY29uc3QgSW50UmVjdCYgcGFnZSA9IHByaW50
Q29udGV4dC5wYWdlUmVjdChwYWdlTnVtYmVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTA3MDA0KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3Myw3ICszNjcz
LDcgQEAgaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0SW50ZXJ2YWxTZQogICAgIGNvbnN0
IEZsb2F0aW5nT2JqZWN0KiByID0gaW50ZXJ2YWwuZGF0YSgpOwogICAgIGlmIChyLT50eXBlKCkg
PT0gRmxvYXRUeXBlVmFsdWUgJiYgaW50ZXJ2YWwubG93KCkgPD0gbV92YWx1ZSAmJiBtX3ZhbHVl
IDwgaW50ZXJ2YWwuaGlnaCgpKSB7CiAgICAgICAgIC8vIEFsbCB0aGUgb2JqZWN0cyByZXR1cm5l
ZCBmcm9tIHRoZSB0cmVlIHNob3VsZCBiZSBhbHJlYWR5IHBsYWNlZC4KLSAgICAgICAgQVNTRVJU
KHItPmlzUGxhY2VkKCkgJiYgbV9yZW5kZXJlci0+bG9naWNhbFRvcEZvckZsb2F0KHIpIDw9IG1f
dmFsdWUgJiYgbV9yZW5kZXJlci0+bG9naWNhbEJvdHRvbUZvckZsb2F0KHIpID4gbV92YWx1ZSk7
CisgICAgICAgIEFTU0VSVChyLT5pc1BsYWNlZCgpICYmIG1fcmVuZGVyZXItPnBpeGVsU25hcHBl
ZExvZ2ljYWxUb3BGb3JGbG9hdChyKSA8PSBtX3ZhbHVlICYmIG1fcmVuZGVyZXItPnBpeGVsU25h
cHBlZExvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSA+IG1fdmFsdWUpOwogCiAgICAgICAgIGlmIChG
bG9hdFR5cGVWYWx1ZSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0IAogICAgICAgICAgICAg
JiYgbV9yZW5kZXJlci0+bG9naWNhbFJpZ2h0Rm9yRmxvYXQocikgPiBtX29mZnNldCkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDEwNzAwNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjMsNiArMTYzLDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0eWxlKCktPmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlv
biwgZmlyc3RMaW5lKQogICAgICAgICAgICAgOiBsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxSaWdo
dE9mZnNldEZvckxpbmUocG9zaXRpb24sIGZpcnN0TGluZSk7CiAgICAgfQorCisgICAgLy8gRklY
TUU6IFRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlc2UgZnVuY3Rpb25zIHdpbGwgY2hhbmdlIG9u
Y2Ugd2UgbW92ZSB0byBzdWJwaXhlbCBsYXlvdXQuIFNlZSBidWcgNjAzMTguCisgICAgaW50IHBp
eGVsU25hcHBlZExvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwg
Ym9vbCBmaXJzdExpbmUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbG9naWNhbFJpZ2h0
T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChwb3Np
dGlvbiksIGZpcnN0TGluZSwgMCk7CisgICAgfQorCisgICAgaW50IHBpeGVsU25hcHBlZExvZ2lj
YWxMZWZ0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9z
aXRpb24sIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChwb3NpdGlvbiksIGZpcnN0TGluZSwg
MCk7CisgICAgfQogICAgIAogICAgIExheW91dFVuaXQgc3RhcnRBbGlnbmVkT2Zmc2V0Rm9yTGlu
ZShSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSk7
CiAgICAgTGF5b3V0VW5pdCB0ZXh0SW5kZW50T2Zmc2V0KCkgY29uc3Q7CkBAIC01NjEsNiArNTcy
LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX2ZyYW1lUmVjdC53aWR0aCgpOyB9CiAgICAgICAgIExheW91dFVuaXQgaGVpZ2h0KCkgY29u
c3QgeyByZXR1cm4gbV9mcmFtZVJlY3QuaGVpZ2h0KCk7IH0KIAorICAgICAgICAvLyBGSVhNRTog
VGhlIGltcGxlbWVudGF0aW9uIGZvciB0aGVzZSBmdW5jdGlvbnMgd2lsbCBjaGFuZ2Ugb25jZSB3
ZSBtb3ZlIHRvIHN1YnBpeGVsIGxheW91dC4gU2VlIGJ1ZyA2MDMxOC4KKyAgICAgICAgaW50IHBp
eGVsU25hcHBlZFgoKSBjb25zdCB7IHJldHVybiB4KCk7IH0KKyAgICAgICAgaW50IHBpeGVsU25h
cHBlZE1heFgoKSBjb25zdCB7IHJldHVybiBtYXhYKCk7IH0KKyAgICAgICAgaW50IHBpeGVsU25h
cHBlZFkoKSBjb25zdCB7IHJldHVybiB5KCk7IH0KKyAgICAgICAgaW50IHBpeGVsU25hcHBlZE1h
eFkoKSBjb25zdCB7IHJldHVybiBtYXhZKCk7IH0KKyAgICAgICAgaW50IHBpeGVsU25hcHBlZFdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gd2lkdGgoKTsgfQorICAgICAgICBpbnQgcGl4ZWxTbmFwcGVk
SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gaGVpZ2h0KCk7IH0KKwogICAgICAgICB2b2lkIHNldFgo
TGF5b3V0VW5pdCB4KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNl
dFgoeCk7IH0KICAgICAgICAgdm9pZCBzZXRZKExheW91dFVuaXQgeSkgeyBBU1NFUlQoIWlzSW5Q
bGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRZKHkpOyB9CiAgICAgICAgIHZvaWQgc2V0V2lk
dGgoTGF5b3V0VW5pdCB3aWR0aCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1l
UmVjdC5zZXRXaWR0aCh3aWR0aCk7IH0KQEAgLTU5NSw2ICs2MTQsMTIgQEAgcHJpdmF0ZToKICAg
ICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodEZvckZsb2F0KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBj
aGlsZCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNoaWxkLT5t
YXhYKCkgOiBjaGlsZC0+bWF4WSgpOyB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGhGb3JG
bG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+d2lkdGgoKSA6IGNoaWxkLT5oZWlnaHQoKTsgfQog
CisgICAgLy8gRklYTUU6IFRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlc2UgZnVuY3Rpb25zIHdp
bGwgY2hhbmdlIG9uY2Ugd2UgbW92ZSB0byBzdWJwaXhlbCBsYXlvdXQuIFNlZSBidWcgNjAzMTgu
CisgICAgaW50IHBpeGVsU25hcHBlZExvZ2ljYWxUb3BGb3JGbG9hdChjb25zdCBGbG9hdGluZ09i
amVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxUb3BGb3JGbG9hdChjaGlsZCk7IH0K
KyAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbEJvdHRvbUZvckZsb2F0KGNvbnN0IEZsb2F0aW5n
T2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gbG9naWNhbEJvdHRvbUZvckZsb2F0KGNoaWxk
KTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsTGVmdEZvckZsb2F0KGNvbnN0IEZsb2F0
aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gbG9naWNhbExlZnRGb3JGbG9hdChjaGls
ZCk7IH0KKyAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbFJpZ2h0Rm9yRmxvYXQoY29uc3QgRmxv
YXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBsb2dpY2FsUmlnaHRGb3JGbG9hdChj
aGlsZCk7IH0KKwogICAgIHZvaWQgc2V0TG9naWNhbFRvcEZvckZsb2F0KEZsb2F0aW5nT2JqZWN0
KiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKQogICAgIHsKICAgICAgICAgaWYgKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gMTA3MDA0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyOCwxMSArMTI4LDExIEBAIGlubGluZSB2b2lkIExpbmVXaWR0aDo6c2hyaW5r
QXZhaWxhYmxlV2kKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG5ld0Zsb2F0LT50eXBlKCkg
PT0gUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpGbG9hdExlZnQpIHsKLSAgICAgICAgbV9s
ZWZ0ID0gbV9ibG9jay0+bG9naWNhbFJpZ2h0Rm9yRmxvYXQobmV3RmxvYXQpOworICAgICAgICBt
X2xlZnQgPSBtX2Jsb2NrLT5waXhlbFNuYXBwZWRMb2dpY2FsUmlnaHRGb3JGbG9hdChuZXdGbG9h
dCk7CiAgICAgICAgIGlmIChtX2lzRmlyc3RMaW5lICYmIG1fYmxvY2stPnN0eWxlKCktPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgIG1fbGVmdCArPSBtX2Jsb2NrLT50ZXh0
SW5kZW50T2Zmc2V0KCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9yaWdodCA9IG1fYmxvY2st
PmxvZ2ljYWxMZWZ0Rm9yRmxvYXQobmV3RmxvYXQpOworICAgICAgICBtX3JpZ2h0ID0gbV9ibG9j
ay0+cGl4ZWxTbmFwcGVkTG9naWNhbExlZnRGb3JGbG9hdChuZXdGbG9hdCk7CiAgICAgICAgIGlm
IChtX2lzRmlyc3RMaW5lICYmICFtX2Jsb2NrLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkpCiAgICAgICAgICAgICBtX3JpZ2h0IC09IG1fYmxvY2stPnRleHRJbmRlbnRPZmZzZXQo
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2
aXNpb24gMTA3MDA0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3OCw2ICs0NzgsMTYgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6
OmNsaWVudEhlaWdodCgpIGNvbgogICAgIHJldHVybiBoZWlnaHQoKSAtIGJvcmRlclRvcCgpIC0g
Ym9yZGVyQm90dG9tKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7CiB9CiAKK2ludCBS
ZW5kZXJCb3g6OnBpeGVsU25hcHBlZENsaWVudFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Y2xpZW50V2lkdGgoKTsKK30KKworaW50IFJlbmRlckJveDo6cGl4ZWxTbmFwcGVkQ2xpZW50SGVp
Z2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2xpZW50SGVpZ2h0KCk7Cit9CisKIGludCBSZW5k
ZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QKIHsKICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkp
CkBAIC00OTUsNyArNTA1LDcgQEAgaW50IFJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QK
ICAgICAgICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbEhlaWdodCgpOwogICAgIC8vIEZvciBvYmpl
Y3RzIHdpdGggdmlzaWJsZSBvdmVyZmxvdywgdGhpcyBtYXRjaGVzIElFLgogICAgIC8vIEZJWE1F
OiBOZWVkIHRvIHdvcmsgcmlnaHQgd2l0aCB3cml0aW5nIG1vZGVzLgotICAgIHJldHVybiBtYXgo
Y2xpZW50SGVpZ2h0KCksIG1heFlMYXlvdXRPdmVyZmxvdygpIC0gYm9yZGVyVG9wKCkpOworICAg
IHJldHVybiBtYXgocGl4ZWxTbmFwcGVkQ2xpZW50SGVpZ2h0KCksIG1heFlMYXlvdXRPdmVyZmxv
dygpIC0gYm9yZGVyVG9wKCkpOwogfQogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxMZWZ0KCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDEwNzAw
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5
KQpAQCAtNTEsNiArNTEsMTAgQEAgcHVibGljOgogICAgIExheW91dFVuaXQgd2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX2ZyYW1lUmVjdC53aWR0aCgpOyB9CiAgICAgTGF5b3V0VW5pdCBoZWlnaHQo
KSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC5oZWlnaHQoKTsgfQogCisgICAgLy8gRklYTUU6
IFRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlc2UgZnVuY3Rpb25zIHdpbGwgY2hhbmdlIG9uY2Ug
d2UgbW92ZSB0byBzdWJwaXhlbCBsYXlvdXQuIFNlZSBidWcgNjAzMTguCisgICAgaW50IHBpeGVs
U25hcHBlZFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3Qud2lkdGgoKTsgfQorICAg
IGludCBwaXhlbFNuYXBwZWRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC5oZWln
aHQoKTsgfQorCiAgICAgLy8gVGhlc2UgcmVwcmVzZW50IHlvdXIgbG9jYXRpb24gcmVsYXRpdmUg
dG8geW91ciBjb250YWluZXIgYXMgYSBwaHlzaWNhbCBvZmZzZXQuCiAgICAgLy8gSW4gbGF5b3V0
IHJlbGF0ZWQgbWV0aG9kcyB5b3UgYWxtb3N0IGFsd2F5cyB3YW50IHRoZSBsb2dpY2FsIGxvY2F0
aW9uIChlLmcuIHgoKSBhbmQgeSgpKS4KICAgICBMYXlvdXRVbml0IHRvcCgpIGNvbnN0IHsgcmV0
dXJuIHRvcExlZnRMb2NhdGlvbigpLnkoKTsgfQpAQCAtMTgzLDE3ICsxODcsMjQgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBvZmZzZXRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHdp
ZHRoKCk7IH0KICAgICB2aXJ0dWFsIExheW91dFVuaXQgb2Zmc2V0SGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gaGVpZ2h0KCk7IH0KIAorICAgIC8vIEZJWE1FOiBUaGUgaW1wbGVtZW50YXRpb24gZm9y
IHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGNoYW5nZSBvbmNlIHdlIG1vdmUgdG8gc3VicGl4ZWwgbGF5
b3V0LiBTZWUgYnVnIDYwMzE4LgorICAgIHZpcnR1YWwgaW50IHBpeGVsU25hcHBlZE9mZnNldFdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gcGl4ZWxTbmFwcGVkV2lkdGgoKTsgfQorICAgIHZpcnR1YWwg
aW50IHBpeGVsU25hcHBlZE9mZnNldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHBpeGVsU25hcHBl
ZEhlaWdodCgpOyB9CisKICAgICAvLyBNb3JlIElFIGV4dGVuc2lvbnMuICBjbGllbnRXaWR0aCBh
bmQgY2xpZW50SGVpZ2h0IHJlcHJlc2VudCB0aGUgaW50ZXJpb3Igb2YgYW4gb2JqZWN0CiAgICAg
Ly8gZXhjbHVkaW5nIGJvcmRlciBhbmQgc2Nyb2xsYmFyLiAgY2xpZW50TGVmdC9Ub3AgYXJlIGp1
c3QgdGhlIGJvcmRlckxlZnRXaWR0aCBhbmQgYm9yZGVyVG9wV2lkdGguCiAgICAgTGF5b3V0VW5p
dCBjbGllbnRMZWZ0KCkgY29uc3QgeyByZXR1cm4gYm9yZGVyTGVmdCgpOyB9CiAgICAgTGF5b3V0
VW5pdCBjbGllbnRUb3AoKSBjb25zdCB7IHJldHVybiBib3JkZXJUb3AoKTsgfQogICAgIExheW91
dFVuaXQgY2xpZW50V2lkdGgoKSBjb25zdDsKICAgICBMYXlvdXRVbml0IGNsaWVudEhlaWdodCgp
IGNvbnN0OwotICAgIExheW91dFVuaXQgY2xpZW50TG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1
cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNsaWVudFdpZHRoKCkgOiBj
bGllbnRIZWlnaHQoKTsgfQotICAgIExheW91dFVuaXQgY2xpZW50TG9naWNhbEhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjbGllbnRI
ZWlnaHQoKSA6IGNsaWVudFdpZHRoKCk7IH0KKyAgICBMYXlvdXRVbml0IGNsaWVudExvZ2ljYWxX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBwaXhlbFNuYXBwZWRDbGllbnRXaWR0aCgpIDogcGl4ZWxTbmFwcGVkQ2xpZW50SGVpZ2h0KCk7
IH0KKyAgICBMYXlvdXRVbml0IGNsaWVudExvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBz
dHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcGl4ZWxTbmFwcGVkQ2xpZW50SGVp
Z2h0KCkgOiBwaXhlbFNuYXBwZWRDbGllbnRXaWR0aCgpOyB9CiAgICAgTGF5b3V0VW5pdCBjbGll
bnRMb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gYm9yZGVyQmVmb3JlKCkgKyBjbGllbnRM
b2dpY2FsSGVpZ2h0KCk7IH0KICAgICBMYXlvdXRSZWN0IGNsaWVudEJveFJlY3QoKSBjb25zdCB7
IHJldHVybiBMYXlvdXRSZWN0KGNsaWVudExlZnQoKSwgY2xpZW50VG9wKCksIGNsaWVudFdpZHRo
KCksIGNsaWVudEhlaWdodCgpKTsgfQogCisgICAgaW50IHBpeGVsU25hcHBlZENsaWVudFdpZHRo
KCkgY29uc3Q7CisgICAgaW50IHBpeGVsU25hcHBlZENsaWVudEhlaWdodCgpIGNvbnN0OworCiAg
ICAgLy8gc2Nyb2xsV2lkdGgvc2Nyb2xsSGVpZ2h0IHdpbGwgYmUgdGhlIHNhbWUgYXMgY2xpZW50
V2lkdGgvY2xpZW50SGVpZ2h0IHVubGVzcyB0aGUKICAgICAvLyBvYmplY3QgaGFzIG92ZXJmbG93
OmhpZGRlbi9zY3JvbGwvYXV0byBzcGVjaWZpZWQgYW5kIGFsc28gaGFzIG92ZXJmbG93LgogICAg
IC8vIHNjcm9sbExlZnQvVG9wIHJldHVybiB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24uICBU
aGVzZSBtZXRob2RzIGFyZSB2aXJ0dWFsIHNvIHRoYXQgb2JqZWN0cyBsaWtlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJl
dmlzaW9uIDEwNzAwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMiw2ICs1MTIsMTYgQEAgTGF5b3V0VW5p
dCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6b2Zmc2V0VAogICAgIHJldHVybiB5UG9zOwogfQogCitp
bnQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gb2Zmc2V0V2lkdGgoKTsKK30KKworaW50IFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwaXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBvZmZz
ZXRIZWlnaHQoKTsKK30KKwogTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFkZGlu
Z1RvcChib29sKSBjb25zdAogewogICAgIExheW91dFVuaXQgdyA9IDA7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAkocmV2aXNpb24g
MTA3MDA0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IExheW91dFVuaXQgb2Zmc2V0V2lkdGgoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBMYXlvdXRV
bml0IG9mZnNldEhlaWdodCgpIGNvbnN0ID0gMDsKIAorICAgIC8vIEZJWE1FOiBUaGUgaW1wbGVt
ZW50YXRpb24gZm9yIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGNoYW5nZSBvbmNlIHdlIG1vdmUgdG8g
c3VicGl4ZWwgbGF5b3V0LiBTZWUgYnVnIDYwMzE4LgorICAgIGludCBwaXhlbFNuYXBwZWRPZmZz
ZXRMZWZ0KCkgY29uc3QgeyByZXR1cm4gb2Zmc2V0TGVmdCgpOyB9CisgICAgaW50IHBpeGVsU25h
cHBlZE9mZnNldFRvcCgpIGNvbnN0IHsgcmV0dXJuIG9mZnNldFRvcCgpOyB9CisgICAgaW50IHBp
eGVsU25hcHBlZE9mZnNldFdpZHRoKCkgY29uc3Q7CisgICAgaW50IHBpeGVsU25hcHBlZE9mZnNl
dEhlaWdodCgpIGNvbnN0OworCiAgICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHls
ZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CiAgICAgdmlydHVhbCB2
b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQm94TW9kZWxJbmZvRnJvbVN0eWxlKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9u
IDEwNzAwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyMjYsNiArMjIyNiwxNiBAQCBMYXlvdXRVbml0IFJlbmRlckxheWVy
OjpzY3JvbGxIZWlnaHQoKQogICAgIHJldHVybiBtX3Njcm9sbFNpemUuaGVpZ2h0KCk7CiB9CiAK
K2ludCBSZW5kZXJMYXllcjo6cGl4ZWxTbmFwcGVkU2Nyb2xsV2lkdGgoKQoreworICAgIHJldHVy
biBzY3JvbGxXaWR0aCgpOworfQorCitpbnQgUmVuZGVyTGF5ZXI6OnBpeGVsU25hcHBlZFNjcm9s
bEhlaWdodCgpCit7CisgICAgcmV0dXJuIHNjcm9sbEhlaWdodCgpOworfQorCiBMYXlvdXRVbml0
IFJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCgpIGNvbnN0CiB7CiAgICAgUmVuZGVyQm94KiBib3gg
PSByZW5kZXJCb3goKTsKQEAgLTIyNzQsOSArMjI4NCw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNv
bXB1dGVTY3JvbGxEaW1lbnNpb24KICAgICBzZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQoLW1fc2Ny
b2xsT3ZlcmZsb3cud2lkdGgoKSwgLW1fc2Nyb2xsT3ZlcmZsb3cuaGVpZ2h0KCkpKTsKIAogICAg
IGlmIChuZWVkSEJhcikKLSAgICAgICAgKm5lZWRIQmFyID0gbV9zY3JvbGxTaXplLndpZHRoKCkg
PiBib3gtPmNsaWVudFdpZHRoKCk7CisgICAgICAgICpuZWVkSEJhciA9IHBpeGVsU25hcHBlZFNj
cm9sbFdpZHRoKCkgPiBib3gtPnBpeGVsU25hcHBlZENsaWVudFdpZHRoKCk7CiAgICAgaWYgKG5l
ZWRWQmFyKQotICAgICAgICAqbmVlZFZCYXIgPSBtX3Njcm9sbFNpemUuaGVpZ2h0KCkgPiBib3gt
PmNsaWVudEhlaWdodCgpOworICAgICAgICAqbmVlZFZCYXIgPSBwaXhlbFNuYXBwZWRTY3JvbGxI
ZWlnaHQoKSA+IGJveC0+cGl4ZWxTbmFwcGVkQ2xpZW50SGVpZ2h0KCk7CiB9CiAKIHZvaWQgUmVu
ZGVyTGF5ZXI6OnVwZGF0ZU92ZXJmbG93U3RhdHVzKGJvb2wgaG9yaXpvbnRhbE92ZXJmbG93LCBi
b29sIHZlcnRpY2FsT3ZlcmZsb3cpCkBAIC0yMzgxLDE0ICsyMzkxLDE0IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckwKIAogICAgIC8vIFNldCB1cCB0aGUgcmFuZ2Ug
KGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KICAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIExh
eW91dFVuaXQgY2xpZW50V2lkdGggPSBib3gtPmNsaWVudFdpZHRoKCk7Ci0gICAgICAgIExheW91
dFVuaXQgcGFnZVN0ZXAgPSBtYXg8TGF5b3V0VW5pdD4obWF4PExheW91dFVuaXQ+KGNsaWVudFdp
ZHRoICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgY2xpZW50V2lk
dGggLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSksIDEpOworICAgICAgICBp
bnQgY2xpZW50V2lkdGggPSBib3gtPnBpeGVsU25hcHBlZENsaWVudFdpZHRoKCk7CisgICAgICAg
IGludCBwYWdlU3RlcCA9IG1heChtYXg8aW50PihjbGllbnRXaWR0aCAqIFNjcm9sbGJhcjo6bWlu
RnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIGNsaWVudFdpZHRoIC0gU2Nyb2xsYmFyOjptYXhP
dmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsKICAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3Jv
bGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKICAgICAgICAgbV9oQmFyLT5z
ZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFNpemUud2lkdGgoKSk7CiAgICAgfQog
ICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBjbGllbnRIZWlnaHQgPSBib3gt
PmNsaWVudEhlaWdodCgpOwotICAgICAgICBMYXlvdXRVbml0IHBhZ2VTdGVwID0gbWF4PExheW91
dFVuaXQ+KG1heDxMYXlvdXRVbml0PihjbGllbnRIZWlnaHQgKiBTY3JvbGxiYXI6Om1pbkZyYWN0
aW9uVG9TdGVwV2hlblBhZ2luZygpLCBjbGllbnRIZWlnaHQgLSBTY3JvbGxiYXI6Om1heE92ZXJs
YXBCZXR3ZWVuUGFnZXMoKSksIDEpOworICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gYm94LT5w
aXhlbFNuYXBwZWRDbGllbnRIZWlnaHQoKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gbWF4KG1h
eDxpbnQ+KGNsaWVudEhlaWdodCAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFn
aW5nKCksIGNsaWVudEhlaWdodCAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygp
KSwgMSk7CiAgICAgICAgIG1fdkJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5l
U3RlcCgpLCBwYWdlU3RlcCk7CiAgICAgICAgIG1fdkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRI
ZWlnaHQsIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9uIDEwNzAwNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODIsNiArMjgy
LDggQEAgcHVibGljOgogCiAgICAgTGF5b3V0VW5pdCBzY3JvbGxXaWR0aCgpOwogICAgIExheW91
dFVuaXQgc2Nyb2xsSGVpZ2h0KCk7CisgICAgaW50IHBpeGVsU25hcHBlZFNjcm9sbFdpZHRoKCk7
CisgICAgaW50IHBpeGVsU25hcHBlZFNjcm9sbEhlaWdodCgpOwogCiAgICAgdm9pZCBwYW5TY3Jv
bGxGcm9tUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gMTA3MDA0KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NTEsNyArNjUxLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxXaWR0aCgpIAog
CiBpbnQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bWF4KGNsaWVudEhlaWdodCgpLCBsaXN0SGVpZ2h0KCkpOworICAgIHJldHVybiBtYXgocGl4ZWxT
bmFwcGVkQ2xpZW50SGVpZ2h0KCksIGxpc3RIZWlnaHQoKSk7CiB9CiAKIGludCBSZW5kZXJMaXN0
Qm94OjpzY3JvbGxMZWZ0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmNwcAkocmV2aXNpb24gMTA3MDA0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAzLDcgKzUwMyw3IEBAIFN0
cmluZyBSZW5kZXJUaGVtZTo6Zm9ybWF0TWVkaWFDb250cm9sc1IKIExheW91dFBvaW50IFJlbmRl
clRoZW1lOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihSZW5kZXJCb3gqIG11dGVC
dXR0b25Cb3gsIGNvbnN0IExheW91dFNpemUmIHNpemUpIGNvbnN0CiB7CiAgICAgTGF5b3V0VW5p
dCB5ID0gLXNpemUuaGVpZ2h0KCk7Ci0gICAgRmxvYXRQb2ludCBhYnNQb2ludCA9IG11dGVCdXR0
b25Cb3gtPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KG11dGVCdXR0b25Cb3gtPm9mZnNldExl
ZnQoKSwgeSksIHRydWUsIHRydWUpOworICAgIEZsb2F0UG9pbnQgYWJzUG9pbnQgPSBtdXRlQnV0
dG9uQm94LT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludChtdXRlQnV0dG9uQm94LT5waXhlbFNu
YXBwZWRPZmZzZXRMZWZ0KCksIHkpLCB0cnVlLCB0cnVlKTsKICAgICBpZiAoYWJzUG9pbnQueSgp
IDwgMCkKICAgICAgICAgeSA9IG11dGVCdXR0b25Cb3gtPmhlaWdodCgpOwogICAgIHJldHVybiBM
YXlvdXRQb2ludCgwLCB5KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDEwNzAwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE3LDEwICs2
MTcsMTAgQEAgc3RhdGljIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIFJlbmRlcgogICAgICAg
ICAgICAgdHMgPDwgIiBzY3JvbGxYICIgPDwgbC5zY3JvbGxYT2Zmc2V0KCk7CiAgICAgICAgIGlm
IChsLnNjcm9sbFlPZmZzZXQoKSkKICAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsWSAiIDw8IGwu
c2Nyb2xsWU9mZnNldCgpOwotICAgICAgICBpZiAobC5yZW5kZXJCb3goKSAmJiBsLnJlbmRlckJv
eCgpLT5jbGllbnRXaWR0aCgpICE9IGwuc2Nyb2xsV2lkdGgoKSkKLSAgICAgICAgICAgIHRzIDw8
ICIgc2Nyb2xsV2lkdGggIiA8PCBsLnNjcm9sbFdpZHRoKCk7Ci0gICAgICAgIGlmIChsLnJlbmRl
ckJveCgpICYmIGwucmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpICE9IGwuc2Nyb2xsSGVpZ2h0
KCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdodCAiIDw8IGwuc2Nyb2xsSGVpZ2h0
KCk7CisgICAgICAgIGlmIChsLnJlbmRlckJveCgpICYmIGwucmVuZGVyQm94KCktPnBpeGVsU25h
cHBlZENsaWVudFdpZHRoKCkgIT0gbC5waXhlbFNuYXBwZWRTY3JvbGxXaWR0aCgpKQorICAgICAg
ICAgICAgdHMgPDwgIiBzY3JvbGxXaWR0aCAiIDw8IGwucGl4ZWxTbmFwcGVkU2Nyb2xsV2lkdGgo
KTsKKyAgICAgICAgaWYgKGwucmVuZGVyQm94KCkgJiYgbC5yZW5kZXJCb3goKS0+cGl4ZWxTbmFw
cGVkQ2xpZW50SGVpZ2h0KCkgIT0gbC5waXhlbFNuYXBwZWRTY3JvbGxIZWlnaHQoKSkKKyAgICAg
ICAgICAgIHRzIDw8ICIgc2Nyb2xsSGVpZ2h0ICIgPDwgbC5waXhlbFNuYXBwZWRTY3JvbGxIZWln
aHQoKTsKICAgICB9CiAKICAgICBpZiAocGFpbnRQaGFzZSA9PSBMYXllclBhaW50UGhhc2VCYWNr
Z3JvdW5kKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125958</attachid>
            <date>2012-02-07 16:59:49 -0800</date>
            <delta_ts>2012-02-08 00:42:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78040-20120207165947.patch</filename>
            <type>text/plain</type>
            <size>21002</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzAwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBACisyMDEyLTAyLTA3ICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgcGl4ZWxTbmFwcGVkWC9Z
L1dpZHRoL0hlaWdodCBtZXRob2RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03ODA0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBwaXhlbCBzbmFwcGVkIHZlcnNpb25zIG9mIHgveS93aWR0aC9oZWln
aHQgbWV0aG9kcy4gVGhlc2UgcmV0dXJuIHRoZQorICAgICAgICBzYW1lIHZhbHVlIGFzIHRoZSB4
L3cvd2lkdGgvaGVpZ2h0IG1ldGhvZHMgZm9yIG5vdyBidXQgb25jZSB3ZSBtb3ZlIG92ZXIKKyAg
ICAgICAgdG8gc3ViIHBpeGVsIGxheW91dCB0aGV5IHdpbGwgc25hcCB0aGUgc3VicGl4ZWwgdmFs
dWUgdG8gYSBkZXZpY2UgcGl4ZWwKKyAgICAgICAgYW5kIHJldHVybiBhbiBpbnRlZ2VyIHZhbHVl
LgorCisgICAgICAgIFdoZW4gc25hcHBpbmcgdGhlIGxlZnQgYW5kIHRvcCBlZGdlIGlzIHNpbXBs
eSByb3VuZGVkIHRvIHRoZSBuZWFyZXN0CisgICAgICAgIGRldmljZSBwaXhlbC4KKyAgICAgICAg
VGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgYXJlIGNvbXB1dGVkIGJ5IHN1YnRyYWN0aW5nIHRo
ZSByb3VuZGVkIGxlZnQvCisgICAgICAgIHRvcCBlZGdlIGZyb20gdGhlIHByZWNpc2UgbG9jYXRp
b24gYW5kIHNpemUuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBlZGdlcworICAgICAgICBhbGwgbGlu
ZSB1cCB3aXRoIGRldmljZSBwaXhlbHMgYW5kIHRoYXQgdGhlIHRvdGFsIHNpemUgb2YgYW4gb2Jq
ZWN0LAorICAgICAgICBpbmNsdWRpbmcgYm9yZGVycywgaXMgYXQgbW9zdCBvbmUgcGl4ZWwgb2Zm
LgorCisgICAgICAgIEluIHN1bW1hcnksIHRoZSB2YWx1ZXMgYXJlIGNvbXB1dGVkIGFzIGZvbGxv
d3M6CisgICAgICAgICAgICAgICAgeDogcm91bmQoeCkKKyAgICAgICAgICAgICAgICB5OiByb3Vu
ZCh5KQorICAgICAgICAgICAgICAgIG1heFg6IHJvdW5kKHggKyB3aWR0aCkKKyAgICAgICAgICAg
ICAgICBtYXhZOiByb3VuZCh5ICsgaGVpZ2h0KQorICAgICAgICAgICAgICAgIHdpZHRoOiByb3Vu
ZCh4ICsgd2lkdGgpIC0gcm91bmQoeCkKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IHJvdW5kKHkg
KyBoZWlnaHQpIC0gcm91bmQoeSkKKworICAgICAgICBXZSB1c2UgdGhlIHRlcm0gcGl4ZWwgc25h
cHBlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBudW1iZXJzIGFyZSBub3QgbWVyZWx5CisgICAgICAg
IHJvdW5kZWQuIFRoaXMgYWxzbyBtYXRjaGVzIHRoZSBuYW1pbmcgdXNlZCBieSB0aGUgbGluZSBi
b3ggdHJlZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdl
cy4KKworICAgICAgICAqIHBhZ2UvUHJpbnRDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlByaW50Q29udGV4dDo6cGFnZU51bWJlckZvckVsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjo6OmNvbGxlY3RJZk5lZWRlZCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgIChSZW5kZXJCbG9j
ayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGl4ZWxTbmFwcGVkTG9naWNhbFJp
Z2h0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGl4ZWxT
bmFwcGVkTG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpGbG9hdGluZ09iamVjdDo6cGl4ZWxTbmFwcGVkWCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBlZE1heFgpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpwaXhlbFNuYXBwZWRZKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6cGl4ZWxTbmFw
cGVkTWF4WSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6
OnBpeGVsU25hcHBlZFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9h
dGluZ09iamVjdDo6cGl4ZWxTbmFwcGVkSGVpZ2h0KToKKyAgICAgICAgKEZsb2F0aW5nT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwaXhlbFNuYXBwZWRMb2dpY2FsVG9w
Rm9yRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBpeGVsU25hcHBlZExv
Z2ljYWxCb3R0b21Gb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGl4
ZWxTbmFwcGVkTG9naWNhbExlZnRGb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6cGl4ZWxTbmFwcGVkTG9naWNhbFJpZ2h0Rm9yRmxvYXQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdp
ZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpw
aXhlbFNuYXBwZWRDbGllbnRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6cGl4ZWxTbmFwcGVkQ2xpZW50SGVpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBpeGVsU25hcHBlZFdpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGl4ZWxTbmFwcGVkSGVpZ2h0KToKKyAg
ICAgICAgKFJlbmRlckJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBpeGVsU25h
cHBlZE9mZnNldFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGl4ZWxTbmFw
cGVkT2Zmc2V0SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2xpZW50TG9n
aWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2xpZW50TG9naWNhbEhl
aWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwaXhlbFNuYXBwZWRPZmZzZXRX
aWR0aCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1v
ZGVsT2JqZWN0OjpwaXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9k
ZWxPYmplY3Q6OnBpeGVsU25hcHBlZE9mZnNldExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94TW9kZWxPYmplY3Q6OnBpeGVsU25hcHBlZE9mZnNldFRvcCk6CisgICAgICAgIChSZW5k
ZXJCb3hNb2RlbE9iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwaXhlbFNuYXBwZWRTY3JvbGxXaWR0aCk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwaXhl
bFNuYXBwZWRTY3JvbGxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNv
bXB1dGVTY3JvbGxEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1
cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllci5oOgorICAgICAgICAoUmVuZGVyTGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9sbEhl
aWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6d3JpdGUpOgorCiAyMDEyLTAyLTA3ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZW5hbWUgW3Y4T25Qcm90b10gSURMIGF0dHJpYnV0ZSB0byBbVjhP
blByb3RvXSBJREwgYXR0cmlidXRlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29u
dGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQu
Y3BwCShyZXZpc2lvbiAxMDcwMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OSw4ICsyNDksOCBAQCBpbnQgUHJpbnRDb250ZXh0
OjpwYWdlTnVtYmVyRm9yRWxlbWVudChFCiAgICAgc2NhbGVkUGFnZVNpemUuc2NhbGUoZnJhbWUt
PnZpZXcoKS0+Y29udGVudHNTaXplKCkud2lkdGgoKSAvIHBhZ2VSZWN0LndpZHRoKCkpOwogICAg
IHByaW50Q29udGV4dC5jb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplKHNjYWxlZFBhZ2VTaXpl
LCBmYWxzZSk7CiAKLSAgICBpbnQgdG9wID0gYm94LT5vZmZzZXRUb3AoKTsKLSAgICBpbnQgbGVm
dCA9IGJveC0+b2Zmc2V0TGVmdCgpOworICAgIGludCB0b3AgPSBib3gtPnBpeGVsU25hcHBlZE9m
ZnNldFRvcCgpOworICAgIGludCBsZWZ0ID0gYm94LT5waXhlbFNuYXBwZWRPZmZzZXRMZWZ0KCk7
CiAgICAgc2l6ZV90IHBhZ2VOdW1iZXIgPSAwOwogICAgIGZvciAoOyBwYWdlTnVtYmVyIDwgcHJp
bnRDb250ZXh0LnBhZ2VDb3VudCgpOyBwYWdlTnVtYmVyKyspIHsKICAgICAgICAgY29uc3QgSW50
UmVjdCYgcGFnZSA9IHByaW50Q29udGV4dC5wYWdlUmVjdChwYWdlTnVtYmVyKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTA3MDA0KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzY3Myw3ICszNjczLDcgQEAgaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0SW50
ZXJ2YWxTZQogICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiByID0gaW50ZXJ2YWwuZGF0YSgpOwog
ICAgIGlmIChyLT50eXBlKCkgPT0gRmxvYXRUeXBlVmFsdWUgJiYgaW50ZXJ2YWwubG93KCkgPD0g
bV92YWx1ZSAmJiBtX3ZhbHVlIDwgaW50ZXJ2YWwuaGlnaCgpKSB7CiAgICAgICAgIC8vIEFsbCB0
aGUgb2JqZWN0cyByZXR1cm5lZCBmcm9tIHRoZSB0cmVlIHNob3VsZCBiZSBhbHJlYWR5IHBsYWNl
ZC4KLSAgICAgICAgQVNTRVJUKHItPmlzUGxhY2VkKCkgJiYgbV9yZW5kZXJlci0+bG9naWNhbFRv
cEZvckZsb2F0KHIpIDw9IG1fdmFsdWUgJiYgbV9yZW5kZXJlci0+bG9naWNhbEJvdHRvbUZvckZs
b2F0KHIpID4gbV92YWx1ZSk7CisgICAgICAgIEFTU0VSVChyLT5pc1BsYWNlZCgpICYmIG1fcmVu
ZGVyZXItPnBpeGVsU25hcHBlZExvZ2ljYWxUb3BGb3JGbG9hdChyKSA8PSBtX3ZhbHVlICYmIG1f
cmVuZGVyZXItPnBpeGVsU25hcHBlZExvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSA+IG1fdmFsdWUp
OwogCiAgICAgICAgIGlmIChGbG9hdFR5cGVWYWx1ZSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRM
ZWZ0IAogICAgICAgICAgICAgJiYgbV9yZW5kZXJlci0+bG9naWNhbFJpZ2h0Rm9yRmxvYXQocikg
PiBtX29mZnNldCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJ
KHJldmlzaW9uIDEwNzAwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNiArMTYzLDE3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zm
c2V0Rm9yTGluZShwb3NpdGlvbiwgZmlyc3RMaW5lKQogICAgICAgICAgICAgOiBsb2dpY2FsV2lk
dGgoKSAtIGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUocG9zaXRpb24sIGZpcnN0TGluZSk7CiAg
ICAgfQorCisgICAgLy8gRklYTUU6IFRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlc2UgZnVuY3Rp
b25zIHdpbGwgY2hhbmdlIG9uY2Ugd2UgbW92ZSB0byBzdWJwaXhlbCBsYXlvdXQuIFNlZSBidWcg
NjAzMTguCisgICAgaW50IHBpeGVsU25hcHBlZExvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoTGF5
b3V0VW5pdCBwb3NpdGlvbiwgYm9vbCBmaXJzdExpbmUpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgbG9naWNhbFJpZ2h0T2Zm
c2V0Rm9yQ29udGVudChwb3NpdGlvbiksIGZpcnN0TGluZSwgMCk7CisgICAgfQorCisgICAgaW50
IHBpeGVsU25hcHBlZExvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9u
LCBib29sIGZpcnN0TGluZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsb2dpY2FsTGVm
dE9mZnNldEZvckxpbmUocG9zaXRpb24sIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChwb3Np
dGlvbiksIGZpcnN0TGluZSwgMCk7CisgICAgfQogICAgIAogICAgIExheW91dFVuaXQgc3RhcnRB
bGlnbmVkT2Zmc2V0Rm9yTGluZShSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IHBvc2l0aW9u
LCBib29sIGZpcnN0TGluZSk7CiAgICAgTGF5b3V0VW5pdCB0ZXh0SW5kZW50T2Zmc2V0KCkgY29u
c3Q7CkBAIC01NjEsNiArNTcyLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIExheW91dFVuaXQgd2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC53aWR0aCgpOyB9CiAgICAgICAgIExheW91
dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3QuaGVpZ2h0KCk7IH0KIAor
ICAgICAgICAvLyBGSVhNRTogVGhlIGltcGxlbWVudGF0aW9uIGZvciB0aGVzZSBmdW5jdGlvbnMg
d2lsbCBjaGFuZ2Ugb25jZSB3ZSBtb3ZlIHRvIHN1YnBpeGVsIGxheW91dC4gU2VlIGJ1ZyA2MDMx
OC4KKyAgICAgICAgaW50IHBpeGVsU25hcHBlZFgoKSBjb25zdCB7IHJldHVybiB4KCk7IH0KKyAg
ICAgICAgaW50IHBpeGVsU25hcHBlZE1heFgoKSBjb25zdCB7IHJldHVybiBtYXhYKCk7IH0KKyAg
ICAgICAgaW50IHBpeGVsU25hcHBlZFkoKSBjb25zdCB7IHJldHVybiB5KCk7IH0KKyAgICAgICAg
aW50IHBpeGVsU25hcHBlZE1heFkoKSBjb25zdCB7IHJldHVybiBtYXhZKCk7IH0KKyAgICAgICAg
aW50IHBpeGVsU25hcHBlZFdpZHRoKCkgY29uc3QgeyByZXR1cm4gd2lkdGgoKTsgfQorICAgICAg
ICBpbnQgcGl4ZWxTbmFwcGVkSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gaGVpZ2h0KCk7IH0KKwog
ICAgICAgICB2b2lkIHNldFgoTGF5b3V0VW5pdCB4KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUo
KSk7IG1fZnJhbWVSZWN0LnNldFgoeCk7IH0KICAgICAgICAgdm9pZCBzZXRZKExheW91dFVuaXQg
eSkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRZKHkpOyB9CiAg
ICAgICAgIHZvaWQgc2V0V2lkdGgoTGF5b3V0VW5pdCB3aWR0aCkgeyBBU1NFUlQoIWlzSW5QbGFj
ZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRXaWR0aCh3aWR0aCk7IH0KQEAgLTU5NSw2ICs2MTQs
MTIgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodEZvckZsb2F0KGNvbnN0
IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IGNoaWxkLT5tYXhYKCkgOiBjaGlsZC0+bWF4WSgpOyB9CiAgICAgTGF5b3V0VW5p
dCBsb2dpY2FsV2lkdGhGb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0
IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+d2lkdGgoKSA6IGNo
aWxkLT5oZWlnaHQoKTsgfQogCisgICAgLy8gRklYTUU6IFRoZSBpbXBsZW1lbnRhdGlvbiBmb3Ig
dGhlc2UgZnVuY3Rpb25zIHdpbGwgY2hhbmdlIG9uY2Ugd2UgbW92ZSB0byBzdWJwaXhlbCBsYXlv
dXQuIFNlZSBidWcgNjAzMTguCisgICAgaW50IHBpeGVsU25hcHBlZExvZ2ljYWxUb3BGb3JGbG9h
dChjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxUb3BG
b3JGbG9hdChjaGlsZCk7IH0KKyAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbEJvdHRvbUZvckZs
b2F0KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gbG9naWNhbEJv
dHRvbUZvckZsb2F0KGNoaWxkKTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsTGVmdEZv
ckZsb2F0KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gbG9naWNh
bExlZnRGb3JGbG9hdChjaGlsZCk7IH0KKyAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbFJpZ2h0
Rm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBsb2dp
Y2FsUmlnaHRGb3JGbG9hdChjaGlsZCk7IH0KKwogICAgIHZvaWQgc2V0TG9naWNhbFRvcEZvckZs
b2F0KEZsb2F0aW5nT2JqZWN0KiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKQogICAgIHsK
ICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNp
b24gMTA3MDA0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxh
eW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCwxMSArMTI4LDExIEBAIGlubGluZSB2b2lk
IExpbmVXaWR0aDo6c2hyaW5rQXZhaWxhYmxlV2kKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KG5ld0Zsb2F0LT50eXBlKCkgPT0gUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpGbG9hdExl
ZnQpIHsKLSAgICAgICAgbV9sZWZ0ID0gbV9ibG9jay0+bG9naWNhbFJpZ2h0Rm9yRmxvYXQobmV3
RmxvYXQpOworICAgICAgICBtX2xlZnQgPSBtX2Jsb2NrLT5waXhlbFNuYXBwZWRMb2dpY2FsUmln
aHRGb3JGbG9hdChuZXdGbG9hdCk7CiAgICAgICAgIGlmIChtX2lzRmlyc3RMaW5lICYmIG1fYmxv
Y2stPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgIG1fbGVm
dCArPSBtX2Jsb2NrLT50ZXh0SW5kZW50T2Zmc2V0KCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
bV9yaWdodCA9IG1fYmxvY2stPmxvZ2ljYWxMZWZ0Rm9yRmxvYXQobmV3RmxvYXQpOworICAgICAg
ICBtX3JpZ2h0ID0gbV9ibG9jay0+cGl4ZWxTbmFwcGVkTG9naWNhbExlZnRGb3JGbG9hdChuZXdG
bG9hdCk7CiAgICAgICAgIGlmIChtX2lzRmlyc3RMaW5lICYmICFtX2Jsb2NrLT5zdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAgICBtX3JpZ2h0IC09IG1fYmxvY2st
PnRleHRJbmRlbnRPZmZzZXQoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTA3MDA0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3OCw2ICs0NzgsMTYgQEAgTGF5
b3V0VW5pdCBSZW5kZXJCb3g6OmNsaWVudEhlaWdodCgpIGNvbgogICAgIHJldHVybiBoZWlnaHQo
KSAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0KCk7CiB9CiAKK2ludCBSZW5kZXJCb3g6OnBpeGVsU25hcHBlZENsaWVudFdpZHRoKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gY2xpZW50V2lkdGgoKTsKK30KKworaW50IFJlbmRlckJveDo6cGl4
ZWxTbmFwcGVkQ2xpZW50SGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2xpZW50SGVpZ2h0
KCk7Cit9CisKIGludCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QKIHsKICAgICBpZiAo
aGFzT3ZlcmZsb3dDbGlwKCkpCkBAIC00OTUsNyArNTA1LDcgQEAgaW50IFJlbmRlckJveDo6c2Ny
b2xsSGVpZ2h0KCkgY29uc3QKICAgICAgICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbEhlaWdodCgp
OwogICAgIC8vIEZvciBvYmplY3RzIHdpdGggdmlzaWJsZSBvdmVyZmxvdywgdGhpcyBtYXRjaGVz
IElFLgogICAgIC8vIEZJWE1FOiBOZWVkIHRvIHdvcmsgcmlnaHQgd2l0aCB3cml0aW5nIG1vZGVz
LgotICAgIHJldHVybiBtYXgoY2xpZW50SGVpZ2h0KCksIG1heFlMYXlvdXRPdmVyZmxvdygpIC0g
Ym9yZGVyVG9wKCkpOworICAgIHJldHVybiBtYXgocGl4ZWxTbmFwcGVkQ2xpZW50SGVpZ2h0KCks
IG1heFlMYXlvdXRPdmVyZmxvdygpIC0gYm9yZGVyVG9wKCkpOwogfQogCiBpbnQgUmVuZGVyQm94
OjpzY3JvbGxMZWZ0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmgJKHJldmlzaW9uIDEwNzAwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTAgQEAgcHVibGljOgogICAgIExheW91
dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC53aWR0aCgpOyB9CiAgICAg
TGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC5oZWlnaHQoKTsg
fQogCisgICAgLy8gRklYTUU6IFRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlc2UgZnVuY3Rpb25z
IHdpbGwgY2hhbmdlIG9uY2Ugd2UgbW92ZSB0byBzdWJwaXhlbCBsYXlvdXQuIFNlZSBidWcgNjAz
MTguCisgICAgaW50IHBpeGVsU25hcHBlZFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJl
Y3Qud2lkdGgoKTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRIZWlnaHQoKSBjb25zdCB7IHJldHVy
biBtX2ZyYW1lUmVjdC5oZWlnaHQoKTsgfQorCiAgICAgLy8gVGhlc2UgcmVwcmVzZW50IHlvdXIg
bG9jYXRpb24gcmVsYXRpdmUgdG8geW91ciBjb250YWluZXIgYXMgYSBwaHlzaWNhbCBvZmZzZXQu
CiAgICAgLy8gSW4gbGF5b3V0IHJlbGF0ZWQgbWV0aG9kcyB5b3UgYWxtb3N0IGFsd2F5cyB3YW50
IHRoZSBsb2dpY2FsIGxvY2F0aW9uIChlLmcuIHgoKSBhbmQgeSgpKS4KICAgICBMYXlvdXRVbml0
IHRvcCgpIGNvbnN0IHsgcmV0dXJuIHRvcExlZnRMb2NhdGlvbigpLnkoKTsgfQpAQCAtMTgzLDE3
ICsxODcsMjQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBvZmZzZXRXaWR0aCgp
IGNvbnN0IHsgcmV0dXJuIHdpZHRoKCk7IH0KICAgICB2aXJ0dWFsIExheW91dFVuaXQgb2Zmc2V0
SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gaGVpZ2h0KCk7IH0KIAorICAgIC8vIEZJWE1FOiBUaGUg
aW1wbGVtZW50YXRpb24gZm9yIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGNoYW5nZSBvbmNlIHdlIG1v
dmUgdG8gc3VicGl4ZWwgbGF5b3V0LiBTZWUgYnVnIDYwMzE4LgorICAgIHZpcnR1YWwgaW50IHBp
eGVsU25hcHBlZE9mZnNldFdpZHRoKCkgY29uc3QgeyByZXR1cm4gcGl4ZWxTbmFwcGVkV2lkdGgo
KTsgfQorICAgIHZpcnR1YWwgaW50IHBpeGVsU25hcHBlZE9mZnNldEhlaWdodCgpIGNvbnN0IHsg
cmV0dXJuIHBpeGVsU25hcHBlZEhlaWdodCgpOyB9CisKICAgICAvLyBNb3JlIElFIGV4dGVuc2lv
bnMuICBjbGllbnRXaWR0aCBhbmQgY2xpZW50SGVpZ2h0IHJlcHJlc2VudCB0aGUgaW50ZXJpb3Ig
b2YgYW4gb2JqZWN0CiAgICAgLy8gZXhjbHVkaW5nIGJvcmRlciBhbmQgc2Nyb2xsYmFyLiAgY2xp
ZW50TGVmdC9Ub3AgYXJlIGp1c3QgdGhlIGJvcmRlckxlZnRXaWR0aCBhbmQgYm9yZGVyVG9wV2lk
dGguCiAgICAgTGF5b3V0VW5pdCBjbGllbnRMZWZ0KCkgY29uc3QgeyByZXR1cm4gYm9yZGVyTGVm
dCgpOyB9CiAgICAgTGF5b3V0VW5pdCBjbGllbnRUb3AoKSBjb25zdCB7IHJldHVybiBib3JkZXJU
b3AoKTsgfQogICAgIExheW91dFVuaXQgY2xpZW50V2lkdGgoKSBjb25zdDsKICAgICBMYXlvdXRV
bml0IGNsaWVudEhlaWdodCgpIGNvbnN0OwotICAgIExheW91dFVuaXQgY2xpZW50TG9naWNhbFdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IGNsaWVudFdpZHRoKCkgOiBjbGllbnRIZWlnaHQoKTsgfQotICAgIExheW91dFVuaXQgY2xpZW50
TG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBjbGllbnRIZWlnaHQoKSA6IGNsaWVudFdpZHRoKCk7IH0KKyAgICBMYXlvdXRV
bml0IGNsaWVudExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBwaXhlbFNuYXBwZWRDbGllbnRXaWR0aCgpIDogcGl4ZWxTbmFw
cGVkQ2xpZW50SGVpZ2h0KCk7IH0KKyAgICBMYXlvdXRVbml0IGNsaWVudExvZ2ljYWxIZWlnaHQo
KSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcGl4
ZWxTbmFwcGVkQ2xpZW50SGVpZ2h0KCkgOiBwaXhlbFNuYXBwZWRDbGllbnRXaWR0aCgpOyB9CiAg
ICAgTGF5b3V0VW5pdCBjbGllbnRMb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gYm9yZGVy
QmVmb3JlKCkgKyBjbGllbnRMb2dpY2FsSGVpZ2h0KCk7IH0KICAgICBMYXlvdXRSZWN0IGNsaWVu
dEJveFJlY3QoKSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KGNsaWVudExlZnQoKSwgY2xpZW50
VG9wKCksIGNsaWVudFdpZHRoKCksIGNsaWVudEhlaWdodCgpKTsgfQogCisgICAgaW50IHBpeGVs
U25hcHBlZENsaWVudFdpZHRoKCkgY29uc3Q7CisgICAgaW50IHBpeGVsU25hcHBlZENsaWVudEhl
aWdodCgpIGNvbnN0OworCiAgICAgLy8gc2Nyb2xsV2lkdGgvc2Nyb2xsSGVpZ2h0IHdpbGwgYmUg
dGhlIHNhbWUgYXMgY2xpZW50V2lkdGgvY2xpZW50SGVpZ2h0IHVubGVzcyB0aGUKICAgICAvLyBv
YmplY3QgaGFzIG92ZXJmbG93OmhpZGRlbi9zY3JvbGwvYXV0byBzcGVjaWZpZWQgYW5kIGFsc28g
aGFzIG92ZXJmbG93LgogICAgIC8vIHNjcm9sbExlZnQvVG9wIHJldHVybiB0aGUgY3VycmVudCBz
Y3JvbGwgcG9zaXRpb24uICBUaGVzZSBtZXRob2RzIGFyZSB2aXJ0dWFsIHNvIHRoYXQgb2JqZWN0
cyBsaWtlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDEwNzAwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMiw2ICs1
MTIsMTYgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6b2Zmc2V0VAogICAgIHJl
dHVybiB5UG9zOwogfQogCitpbnQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBpeGVsU25hcHBlZE9m
ZnNldFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gb2Zmc2V0V2lkdGgoKTsKK30KKworaW50
IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwaXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQoKSBjb25zdAor
eworICAgIHJldHVybiBvZmZzZXRIZWlnaHQoKTsKK30KKwogTGF5b3V0VW5pdCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6cGFkZGluZ1RvcChib29sKSBjb25zdAogewogICAgIExheW91dFVuaXQgdyA9
IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuaAkocmV2aXNpb24gMTA3MDA0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDEyIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIExheW91dFVuaXQgb2Zmc2V0V2lkdGgoKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCBMYXlvdXRVbml0IG9mZnNldEhlaWdodCgpIGNvbnN0ID0gMDsKIAorICAgIC8v
IEZJWE1FOiBUaGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGNoYW5n
ZSBvbmNlIHdlIG1vdmUgdG8gc3VicGl4ZWwgbGF5b3V0LiBTZWUgYnVnIDYwMzE4LgorICAgIGlu
dCBwaXhlbFNuYXBwZWRPZmZzZXRMZWZ0KCkgY29uc3QgeyByZXR1cm4gb2Zmc2V0TGVmdCgpOyB9
CisgICAgaW50IHBpeGVsU25hcHBlZE9mZnNldFRvcCgpIGNvbnN0IHsgcmV0dXJuIG9mZnNldFRv
cCgpOyB9CisgICAgaW50IHBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCkgY29uc3Q7CisgICAgaW50
IHBpeGVsU25hcHBlZE9mZnNldEhlaWdodCgpIGNvbnN0OworCiAgICAgdmlydHVhbCB2b2lkIHN0
eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHls
ZSk7CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQm94TW9k
ZWxJbmZvRnJvbVN0eWxlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAJKHJldmlzaW9uIDEwNzAwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMjYsNiArMjIyNiwxNiBAQCBMYXlv
dXRVbml0IFJlbmRlckxheWVyOjpzY3JvbGxIZWlnaHQoKQogICAgIHJldHVybiBtX3Njcm9sbFNp
emUuaGVpZ2h0KCk7CiB9CiAKK2ludCBSZW5kZXJMYXllcjo6cGl4ZWxTbmFwcGVkU2Nyb2xsV2lk
dGgoKQoreworICAgIHJldHVybiBzY3JvbGxXaWR0aCgpOworfQorCitpbnQgUmVuZGVyTGF5ZXI6
OnBpeGVsU25hcHBlZFNjcm9sbEhlaWdodCgpCit7CisgICAgcmV0dXJuIHNjcm9sbEhlaWdodCgp
OworfQorCiBMYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCgpIGNvbnN0CiB7CiAg
ICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKQEAgLTIyNzQsOSArMjI4NCw5IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb24KICAgICBzZXRTY3JvbGxPcmln
aW4oSW50UG9pbnQoLW1fc2Nyb2xsT3ZlcmZsb3cud2lkdGgoKSwgLW1fc2Nyb2xsT3ZlcmZsb3cu
aGVpZ2h0KCkpKTsKIAogICAgIGlmIChuZWVkSEJhcikKLSAgICAgICAgKm5lZWRIQmFyID0gbV9z
Y3JvbGxTaXplLndpZHRoKCkgPiBib3gtPmNsaWVudFdpZHRoKCk7CisgICAgICAgICpuZWVkSEJh
ciA9IHBpeGVsU25hcHBlZFNjcm9sbFdpZHRoKCkgPiBib3gtPnBpeGVsU25hcHBlZENsaWVudFdp
ZHRoKCk7CiAgICAgaWYgKG5lZWRWQmFyKQotICAgICAgICAqbmVlZFZCYXIgPSBtX3Njcm9sbFNp
emUuaGVpZ2h0KCkgPiBib3gtPmNsaWVudEhlaWdodCgpOworICAgICAgICAqbmVlZFZCYXIgPSBw
aXhlbFNuYXBwZWRTY3JvbGxIZWlnaHQoKSA+IGJveC0+cGl4ZWxTbmFwcGVkQ2xpZW50SGVpZ2h0
KCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZU92ZXJmbG93U3RhdHVzKGJvb2wgaG9y
aXpvbnRhbE92ZXJmbG93LCBib29sIHZlcnRpY2FsT3ZlcmZsb3cpCkBAIC0yMzgxLDE0ICsyMzkx
LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckwKIAogICAgIC8v
IFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KICAgICBpZiAobV9o
QmFyKSB7Ci0gICAgICAgIExheW91dFVuaXQgY2xpZW50V2lkdGggPSBib3gtPmNsaWVudFdpZHRo
KCk7Ci0gICAgICAgIExheW91dFVuaXQgcGFnZVN0ZXAgPSBtYXg8TGF5b3V0VW5pdD4obWF4PExh
eW91dFVuaXQ+KGNsaWVudFdpZHRoICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5Q
YWdpbmcoKSwgY2xpZW50V2lkdGggLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMo
KSksIDEpOworICAgICAgICBpbnQgY2xpZW50V2lkdGggPSBib3gtPnBpeGVsU25hcHBlZENsaWVu
dFdpZHRoKCk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IG1heChtYXg8aW50PihjbGllbnRXaWR0
aCAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIGNsaWVudFdpZHRo
IC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsKICAgICAgICAgbV9o
QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsK
ICAgICAgICAgbV9oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFNpemUu
d2lkdGgoKSk7CiAgICAgfQogICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBj
bGllbnRIZWlnaHQgPSBib3gtPmNsaWVudEhlaWdodCgpOwotICAgICAgICBMYXlvdXRVbml0IHBh
Z2VTdGVwID0gbWF4PExheW91dFVuaXQ+KG1heDxMYXlvdXRVbml0PihjbGllbnRIZWlnaHQgKiBT
Y3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBjbGllbnRIZWlnaHQgLSBT
Y3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSksIDEpOworICAgICAgICBpbnQgY2xp
ZW50SGVpZ2h0ID0gYm94LT5waXhlbFNuYXBwZWRDbGllbnRIZWlnaHQoKTsKKyAgICAgICAgaW50
IHBhZ2VTdGVwID0gbWF4KG1heDxpbnQ+KGNsaWVudEhlaWdodCAqIFNjcm9sbGJhcjo6bWluRnJh
Y3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIGNsaWVudEhlaWdodCAtIFNjcm9sbGJhcjo6bWF4T3Zl
cmxhcEJldHdlZW5QYWdlcygpKSwgMSk7CiAgICAgICAgIG1fdkJhci0+c2V0U3RlcHMoU2Nyb2xs
YmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CiAgICAgICAgIG1fdkJhci0+c2V0
UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKSk7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9uIDEwNzAw
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yODIsNiArMjgyLDggQEAgcHVibGljOgogCiAgICAgTGF5b3V0VW5pdCBzY3JvbGxX
aWR0aCgpOwogICAgIExheW91dFVuaXQgc2Nyb2xsSGVpZ2h0KCk7CisgICAgaW50IHBpeGVsU25h
cHBlZFNjcm9sbFdpZHRoKCk7CisgICAgaW50IHBpeGVsU25hcHBlZFNjcm9sbEhlaWdodCgpOwog
CiAgICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24g
MTA3MDA0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NTEsNyArNjUxLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJMaXN0Qm94
OjpzY3JvbGxXaWR0aCgpIAogCiBpbnQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsSGVpZ2h0KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbWF4KGNsaWVudEhlaWdodCgpLCBsaXN0SGVpZ2h0KCkpOworICAg
IHJldHVybiBtYXgocGl4ZWxTbmFwcGVkQ2xpZW50SGVpZ2h0KCksIGxpc3RIZWlnaHQoKSk7CiB9
CiAKIGludCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxMZWZ0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gMTA3MDA0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTAzLDcgKzUwMyw3IEBAIFN0cmluZyBSZW5kZXJUaGVtZTo6Zm9ybWF0TWVkaWFDb250cm9sc1IK
IExheW91dFBvaW50IFJlbmRlclRoZW1lOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRv
bihSZW5kZXJCb3gqIG11dGVCdXR0b25Cb3gsIGNvbnN0IExheW91dFNpemUmIHNpemUpIGNvbnN0
CiB7CiAgICAgTGF5b3V0VW5pdCB5ID0gLXNpemUuaGVpZ2h0KCk7Ci0gICAgRmxvYXRQb2ludCBh
YnNQb2ludCA9IG11dGVCdXR0b25Cb3gtPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KG11dGVC
dXR0b25Cb3gtPm9mZnNldExlZnQoKSwgeSksIHRydWUsIHRydWUpOworICAgIEZsb2F0UG9pbnQg
YWJzUG9pbnQgPSBtdXRlQnV0dG9uQm94LT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludChtdXRl
QnV0dG9uQm94LT5waXhlbFNuYXBwZWRPZmZzZXRMZWZ0KCksIHkpLCB0cnVlLCB0cnVlKTsKICAg
ICBpZiAoYWJzUG9pbnQueSgpIDwgMCkKICAgICAgICAgeSA9IG11dGVCdXR0b25Cb3gtPmhlaWdo
dCgpOwogICAgIHJldHVybiBMYXlvdXRQb2ludCgwLCB5KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDEwNzAwNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjE3LDEwICs2MTcsMTAgQEAgc3RhdGljIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYg
dHMsIFJlbmRlcgogICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxYICIgPDwgbC5zY3JvbGxYT2Zm
c2V0KCk7CiAgICAgICAgIGlmIChsLnNjcm9sbFlPZmZzZXQoKSkKICAgICAgICAgICAgIHRzIDw8
ICIgc2Nyb2xsWSAiIDw8IGwuc2Nyb2xsWU9mZnNldCgpOwotICAgICAgICBpZiAobC5yZW5kZXJC
b3goKSAmJiBsLnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpICE9IGwuc2Nyb2xsV2lkdGgoKSkK
LSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBsLnNjcm9sbFdpZHRoKCk7Ci0g
ICAgICAgIGlmIChsLnJlbmRlckJveCgpICYmIGwucmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgp
ICE9IGwuc2Nyb2xsSGVpZ2h0KCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdodCAi
IDw8IGwuc2Nyb2xsSGVpZ2h0KCk7CisgICAgICAgIGlmIChsLnJlbmRlckJveCgpICYmIGwucmVu
ZGVyQm94KCktPnBpeGVsU25hcHBlZENsaWVudFdpZHRoKCkgIT0gbC5waXhlbFNuYXBwZWRTY3Jv
bGxXaWR0aCgpKQorICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxXaWR0aCAiIDw8IGwucGl4ZWxT
bmFwcGVkU2Nyb2xsV2lkdGgoKTsKKyAgICAgICAgaWYgKGwucmVuZGVyQm94KCkgJiYgbC5yZW5k
ZXJCb3goKS0+cGl4ZWxTbmFwcGVkQ2xpZW50SGVpZ2h0KCkgIT0gbC5waXhlbFNuYXBwZWRTY3Jv
bGxIZWlnaHQoKSkKKyAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsSGVpZ2h0ICIgPDwgbC5waXhl
bFNuYXBwZWRTY3JvbGxIZWlnaHQoKTsKICAgICB9CiAKICAgICBpZiAocGFpbnRQaGFzZSA9PSBM
YXllclBhaW50UGhhc2VCYWNrZ3JvdW5kKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>