<?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>44412</bug_id>
          
          <creation_ts>2010-08-23 03:22:30 -0700</creation_ts>
          <short_desc>Teach InlineBox about FloatPoint</short_desc>
          <delta_ts>2011-06-02 16:56:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>hyatt</cc>
    
    <cc>jamesr</cc>
    
    <cc>leviw</cc>
    
    <cc>leviw</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>267822</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-23 03:22:30 -0700</bug_when>
    <thetext>Teach InlineBox about IntPoint</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267826</commentid>
    <comment_count>1</comment_count>
      <attachid>65098</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-23 03:27:44 -0700</bug_when>
    <thetext>Created attachment 65098
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267827</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-23 03:29:22 -0700</bug_when>
    <thetext>My rules for deciding when to use left() vs. x() are kinda arbitrary.

I used left() when it read better/made more sense.

I used x() when I wasn&apos;t sure what to use.

I used left() when using x() was impossible due to a local variable named x.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271177</commentid>
    <comment_count>3</comment_count>
      <attachid>65098</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-29 11:55:10 -0700</bug_when>
    <thetext>Comment on attachment 65098
Patch

Great that you’re taking this on. Looks good!

I can&apos;t tell how you are choosing when to use x() and y() and when you are choosing to use left() and top(). I think it would be better not to add top() and left() or to remove x() and y() if you really want to add them. One of th first curious cases I ran into was EllipsisBox::paintSelection, which seems to mix the two in way that makes it non-obvious why one part has one and one part has the other.

&gt; +    // This is currently only used by ElipsesBox

You mean EllipisBox. Comment needs a period. This is a type of comment that can easily become incorrect, and I’m not sure of its value. We might want to just leave it out.

&gt; -        , m_x(x)
&gt; -        , m_y(y)
&gt; +        , m_topLeft(topLeft)

I think position might be a better name than topLeft.

&gt; +    IntRect rect() const
&gt; +    {
&gt; +        // FIXME: Will this want virtualHeight for the SVG case?
&gt; +        return IntRect(topLeft(), IntSize(width(), height()));
&gt; +    }

Is there some way you could resolve this and so avoid adding the FIXME? I don’t like adding confusion here.

I’m going to say review+, but I think this is not 100% improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324802</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-20 22:32:07 -0800</bug_when>
    <thetext>I still need to land this, sorry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399236</commentid>
    <comment_count>5</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-05 17:28:45 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I still need to land this, sorry.

Unless you object, Eric, I&apos;m going to update this patch and reupload it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399786</commentid>
    <comment_count>6</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-06 13:49:57 -0700</bug_when>
    <thetext>Renaming to reflect that InlineBox now uses floats.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399810</commentid>
    <comment_count>7</comment_count>
      <attachid>92637</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-06 14:22:26 -0700</bug_when>
    <thetext>Created attachment 92637
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399818</commentid>
    <comment_count>8</comment_count>
      <attachid>92637</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-06 14:25:54 -0700</bug_when>
    <thetext>Comment on attachment 92637
Patch

Are left/right/top/bottom logical left/right/top/bottom or physical left/right/top/bottom?  Could the function names make this clear?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399819</commentid>
    <comment_count>9</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-06 14:32:03 -0700</bug_when>
    <thetext>They are not the logical coordinates, accessors for which mirror these with &quot;logical&quot; prepended. I could likewise begin these with &quot;physical&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400564</commentid>
    <comment_count>10</comment_count>
      <attachid>92637</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-09 10:14:54 -0700</bug_when>
    <thetext>Comment on attachment 92637
Patch

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

&gt; Source/WebCore/rendering/EllipsisBox.cpp:69
&gt; +        tx += right() - m_markupBox-&gt;x();
&gt; +        ty += top() + style-&gt;fontMetrics().ascent() - (m_markupBox-&gt;y() + m_markupBox-&gt;renderer()-&gt;style(m_firstLine)-&gt;fontMetrics().ascent());

Are these going to be confusing for vertical text?  I feel like Darin (or someone) picked on me about this before.  I&apos;m not sure what the &quot;vertical text aware&quot; equivalent of &quot;right&quot; would be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400609</commentid>
    <comment_count>11</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-09 11:39:55 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Are these going to be confusing for vertical text?  I feel like Darin (or someone) picked on me about this before.  I&apos;m not sure what the &quot;vertical text aware&quot; equivalent of &quot;right&quot; would be.

That&apos;s a fair statement, but unfortunately I&apos;m not entirely sure what the right name would be either. Perhaps Darin or Hyatt could weigh in with some advice?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403698</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-13 11:34:29 -0700</bug_when>
    <thetext>Given Hyatt&apos;s silence, I think you shoudl either try to corner him on irc, or just move forward and we can always fix later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403739</commentid>
    <comment_count>13</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-13 12:23:48 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Given Hyatt&apos;s silence, I think you shoudl either try to corner him on irc, or just move forward and we can always fix later.

Thanks. I&apos;ve been trying to corner him on this and 60317, but missed him on IRC yesterday. D&apos;oh!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413795</commentid>
    <comment_count>14</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-01 17:55:01 -0700</bug_when>
    <thetext>Eric, can I get a review for this so we can move forward? This is also getting in the way...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413799</commentid>
    <comment_count>15</comment_count>
      <attachid>92637</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-01 18:02:32 -0700</bug_when>
    <thetext>Comment on attachment 92637
Patch

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

&gt;&gt; Source/WebCore/rendering/EllipsisBox.cpp:69
&gt;&gt; +        ty += top() + style-&gt;fontMetrics().ascent() - (m_markupBox-&gt;y() + m_markupBox-&gt;renderer()-&gt;style(m_firstLine)-&gt;fontMetrics().ascent());
&gt; 
&gt; Are these going to be confusing for vertical text?  I feel like Darin (or someone) picked on me about this before.  I&apos;m not sure what the &quot;vertical text aware&quot; equivalent of &quot;right&quot; would be.

This is my only problem with this patch.  If you can answer if right/left are OK vs. logicalMaxX or whatever the alternative naming is, than this is fine!

&gt; Source/WebCore/rendering/InlineBox.h:239
&gt; +    float right() const { return left() + logicalWidth(); }

I&apos;m confused how this relates to logicalRight.  Should this use width() instead of logicalWidth?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413806</commentid>
    <comment_count>16</comment_count>
      <attachid>92637</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-01 18:19:42 -0700</bug_when>
    <thetext>Comment on attachment 92637
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/EllipsisBox.cpp:69
&gt;&gt;&gt; +        ty += top() + style-&gt;fontMetrics().ascent() - (m_markupBox-&gt;y() + m_markupBox-&gt;renderer()-&gt;style(m_firstLine)-&gt;fontMetrics().ascent());
&gt;&gt; 
&gt;&gt; Are these going to be confusing for vertical text?  I feel like Darin (or someone) picked on me about this before.  I&apos;m not sure what the &quot;vertical text aware&quot; equivalent of &quot;right&quot; would be.
&gt; 
&gt; This is my only problem with this patch.  If you can answer if right/left are OK vs. logicalMaxX or whatever the alternative naming is, than this is fine!

In the cases we&apos;re concerned about vertical text we always explicitly use &quot;logicalRight&quot; or &quot;logicalTop.&quot; Either way, this isn&apos;t a change in behavior, but logically the original code seems incorrect. Since the logical width can be either a physical width or height, and the left or m_x is always physical, how does it make sense to add the logical width to it? Neither version seems correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414519</commentid>
    <comment_count>17</comment_count>
      <attachid>95828</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-02 16:03:56 -0700</bug_when>
    <thetext>Created attachment 95828
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414525</commentid>
    <comment_count>18</comment_count>
      <attachid>95828</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-02 16:20:34 -0700</bug_when>
    <thetext>Comment on attachment 95828
Patch

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414539</commentid>
    <comment_count>19</comment_count>
      <attachid>95828</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-02 16:49:11 -0700</bug_when>
    <thetext>Comment on attachment 95828
Patch

Clearing flags on attachment: 95828

Committed r87964: &lt;http://trac.webkit.org/changeset/87964&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414545</commentid>
    <comment_count>20</comment_count>
      <attachid>65098</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-02 16:56:32 -0700</bug_when>
    <thetext>Comment on attachment 65098
Patch

Clearing flags on the old patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65098</attachid>
            <date>2010-08-23 03:27:44 -0700</date>
            <delta_ts>2011-06-02 16:56:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44412-20100823032743.patch</filename>
            <type>text/plain</type>
            <size>45294</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjYxYmM4ZmRiYmE4NDFkYTcxZjJlYTMzYTEwMWNmMzg2YzIxYTk0Yi4uYmI5MTZhZmNiODhiYmM1
ZWE5YjI3ZjNhNzhhY2IxNTU1YTUwNmJhYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NiBAQAorMjAxMC0wOC0yMyAgRXJp
YyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVhY2ggSW5saW5lQm94IGFib3V0IEludFBvaW50CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDQxMgorCisgICAg
ICAgIFRoaXMgaXMgYW5vdGhlciBzdGVwIHRvd2FyZHMgbW9yZSBJbnRQb2ludC9JbnRTaXplCisg
ICAgICAgIHVzYWdlIHRocm91Z2hvdXQgdGhlIHJlbmRlcmluZyB0cmVlLgorCisgICAgICAgIEkg
YWRkZWQgbGVmdCgpLCByaWdodCgpLCB0b3AoKSwgYW5kIGJvdHRvbSgpIG1ldGhvZHMKKyAgICAg
ICAgdG8gSW5saW5lQm94IGFuZCBkZXBsb3llZCB0aGVtIHRocm91Z2hvdXQgdGhlIGNvZGUuCisg
ICAgICAgIEkgcmVtb3ZlZCBtX3gsIGFuZCBtX3kgYW5kIHJlcGxhY2VkIHRoZW0gd2l0aCBhCisg
ICAgICAgIHNpbmdsZSBtX3RvcExlZnQgbWVtYmVyLgorCisgICAgICAgIERlZmluaXRlbHkgdXNl
IG9mIHJpZ2h0KCkgcmVzdWx0ZWQgaW4gY2xlYW5lciBjb2RlLAorICAgICAgICBob3BlZnVsbHkg
dGhlIG90aGVyIGNoYW5nZXMgYXMgd2VsbC4KKworICAgICAgICBObyBmdW5jdGlvbmFsIGNoYW5n
ZXMsIHRodXMgbm8gdGVzdHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkVsbGlwc2lzQm94OjpzZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsbGlw
c2lzQm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6
bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0JveC5oOgorICAgICAg
ICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6OkVsbGlwc2lzQm94KToKKyAgICAgICAgKiByZW5kZXJp
bmcvSW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6YWRqdXN0UG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpjYW5BY2NvbW1vZGF0ZUVsbGlw
c2lzKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVCb3g6OklubGluZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnNl
dFgpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94Ojp4KToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUJveDo6bGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnNldFkpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94Ojp5KToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUJveDo6dG9wKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6dG9wTGVmdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnNldFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZUJveDo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpyaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OmJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVCb3g6OnJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZUZsb3dCb3g6OnBhaW50VGV4dERlY29yYXRpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6dmlzaWJs
ZU92ZXJmbG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojp0b3BMYXlv
dXRPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpib3R0b21MYXlv
dXRPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpsZWZ0TGF5b3V0
T3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cmlnaHRMYXlvdXRP
dmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpsYXlvdXRPdmVyZmxv
d1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6dG9wVmlzdWFsT3ZlcmZs
b3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6Ym90dG9tVmlzdWFsT3ZlcmZs
b3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6bGVmdFZpc3VhbE92ZXJmbG93
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnJpZ2h0VmlzdWFsT3ZlcmZsb3cp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6dmlzdWFsT3ZlcmZsb3dSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnNldEhvcml6b250YWxPdmVyZmxvd1Bv
c2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpzZXRWZXJ0aWNhbE92
ZXJmbG93UG9zaXRpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBsYWNlRWxsaXBzaXNCb3gpOgorICAgICAgICAo
V2ViQ29yZTo6Y29ycmVjdGVkVGV4dENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRl
eHRCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3Jv
dW5kKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFNwZWxsaW5nT3JHcmFtbWFy
TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNo
TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9y
UmVwbGFjZW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFp
bnRDb21wb3NpdGlvblVuZGVybGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94
OjpvZmZzZXRGb3JQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpw
b3NpdGlvbkZvck9mZnNldCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnRXaXRoSW5saW5lQ2hpbGRyZW4pOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHQ6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Zmly
c3RSdW5YKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmZpcnN0UnVuWSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
d3JpdGVUZXh0UnVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpwbGFjZUVsbGlwc2lzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmNsb3Nlc3RMZWFmQ2hpbGRGb3JYUG9zKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uVG9wKToKKwogMjAxMC0wOC0yMyAgUGhpbGlwcGUgTm9y
bWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExv
cGV6LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCmluZGV4IDYxY2Q1MjQ5Y2Y5ZDVlZjQ2MTA0
MWUxNzg2N2ExNDNmMzkxMDNhMjMuLjMzOWIzMzQ1MGFiNTI3MTVlZjE5ZmUzZjkwM2ZmNzJjOGM1
ZTZiOTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAorKysg
Yi9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgdm9p
ZCBFbGxpcHNpc0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5
KQogICAgIH0KIAogICAgIGNvbnN0IFN0cmluZyYgc3RyID0gbV9zdHI7Ci0gICAgY29udGV4dC0+
ZHJhd1RleHQoc3R5bGUtPmZvbnQoKSwgVGV4dFJ1bihzdHIuY2hhcmFjdGVycygpLCBzdHIubGVu
Z3RoKCksIGZhbHNlLCAwLCAwLCBmYWxzZSwgc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpKSwgSW50
UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgc3R5bGUtPmZvbnQoKS5hc2NlbnQoKSkpOworICAg
IGNvbnRleHQtPmRyYXdUZXh0KHN0eWxlLT5mb250KCksIFRleHRSdW4oc3RyLmNoYXJhY3RlcnMo
KSwgc3RyLmxlbmd0aCgpLCBmYWxzZSwgMCwgMCwgZmFsc2UsIHN0eWxlLT52aXN1YWxseU9yZGVy
ZWQoKSksIEludFBvaW50KHgoKSArIHR4LCB5KCkgKyB0eSArIHN0eWxlLT5mb250KCkuYXNjZW50
KCkpKTsKIAogICAgIC8vIFJlc3RvcmUgdGhlIHJlZ3VsYXIgZmlsbCBjb2xvci4KICAgICBpZiAo
dGV4dENvbG9yICE9IGNvbnRleHQtPmZpbGxDb2xvcigpKQpAQCAtNjIsOCArNjIsOCBAQCB2b2lk
IEVsbGlwc2lzQm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkp
CiAKICAgICBpZiAobV9tYXJrdXBCb3gpIHsKICAgICAgICAgLy8gUGFpbnQgdGhlIG1hcmt1cCBi
b3gKLSAgICAgICAgdHggKz0gbV94ICsgbV93aWR0aCAtIG1fbWFya3VwQm94LT54KCk7Ci0gICAg
ICAgIHR5ICs9IG1feSArIHN0eWxlLT5mb250KCkuYXNjZW50KCkgLSAobV9tYXJrdXBCb3gtPnko
KSArIG1fbWFya3VwQm94LT5yZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnQoKS5h
c2NlbnQoKSk7CisgICAgICAgIHR4ICs9IHJpZ2h0KCkgLSBtX21hcmt1cEJveC0+eCgpOworICAg
ICAgICB0eSArPSB0b3AoKSArIHN0eWxlLT5mb250KCkuYXNjZW50KCkgLSAobV9tYXJrdXBCb3gt
PnkoKSArIG1fbWFya3VwQm94LT5yZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnQo
KS5hc2NlbnQoKSk7CiAgICAgICAgIG1fbWFya3VwQm94LT5wYWludChwYWludEluZm8sIHR4LCB0
eSk7CiAgICAgfQogfQpAQCAtNzMsNyArNzMsNyBAQCBJbnRSZWN0IEVsbGlwc2lzQm94OjpzZWxl
Y3Rpb25SZWN0KGludCB0eCwgaW50IHR5KQogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fcmVu
ZGVyZXItPnN0eWxlKG1fZmlyc3RMaW5lKTsKICAgICBjb25zdCBGb250JiBmID0gc3R5bGUtPmZv
bnQoKTsKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChmLnNlbGVjdGlvblJlY3RGb3JUZXh0
KFRleHRSdW4obV9zdHIuY2hhcmFjdGVycygpLCBtX3N0ci5sZW5ndGgoKSwgZmFsc2UsIDAsIDAs
IGZhbHNlLCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCkpLAotICAgICAgICAgICAgSW50UG9pbnQo
bV94ICsgdHgsIG1feSArIHR5ICsgcm9vdCgpLT5zZWxlY3Rpb25Ub3AoKSksIHJvb3QoKS0+c2Vs
ZWN0aW9uSGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIEludFBvaW50KHgoKSArIHR4LCB5KCkgKyB0
eSArIHJvb3QoKS0+c2VsZWN0aW9uVG9wKCkpLCByb290KCktPnNlbGVjdGlvbkhlaWdodCgpKSk7
CiB9CiAKIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgaW50IHR4LCBpbnQgdHksIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYg
Zm9udCkKQEAgLTkxLDE2ICs5MSwxNiBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlv
bihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBSZW5kZQogICAgIGNv
bnRleHQtPnNhdmUoKTsKICAgICBpbnQgeSA9IHJvb3QoKS0+c2VsZWN0aW9uVG9wKCk7CiAgICAg
aW50IGggPSByb290KCktPnNlbGVjdGlvbkhlaWdodCgpOwotICAgIGNvbnRleHQtPmNsaXAoSW50
UmVjdChtX3ggKyB0eCwgeSArIHR5LCBtX3dpZHRoLCBoKSk7CisgICAgY29udGV4dC0+Y2xpcChJ
bnRSZWN0KHgoKSArIHR4LCB5ICsgdHksIG1fd2lkdGgsIGgpKTsKICAgICBjb250ZXh0LT5kcmF3
SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBUZXh0UnVuKG1fc3RyLmNoYXJhY3RlcnMoKSwgbV9zdHIu
bGVuZ3RoKCksIGZhbHNlLCAwLCAwLCBmYWxzZSwgc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpKSwK
LSAgICAgICAgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgeSksIGgsIGMsIHN0eWxlLT5j
b2xvclNwYWNlKCkpOworICAgICAgICBJbnRQb2ludChsZWZ0KCkgKyB0eCwgdG9wKCkgKyB0eSAr
IHkpLCBoLCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7
CiB9CiAKIGJvb2wgRWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBp
bnQgdHkpCiB7Ci0gICAgdHggKz0gbV94OwotICAgIHR5ICs9IG1feTsKKyAgICB0eCArPSBsZWZ0
KCk7CisgICAgdHkgKz0gdG9wKCk7CiAKICAgICAvLyBIaXQgdGVzdCB0aGUgbWFya3VwIGJveC4K
ICAgICBpZiAobV9tYXJrdXBCb3gpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmggYi9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCmluZGV4IDQ3NjMz
MWNlNGY2OGVlMDA3Nzk2OGQ0YjQzOGJjZjlhNjhjZTA4MmMuLmUyYzQwOGU2YjE3OGYyODYxYjM5
NWMzZTEwNDAxZWNlMGU5NGQxZjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlw
c2lzQm94LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaApAQCAtMzEsNyAr
MzEsNyBAQCBjbGFzcyBFbGxpcHNpc0JveCA6IHB1YmxpYyBJbmxpbmVCb3ggewogcHVibGljOgog
ICAgIEVsbGlwc2lzQm94KFJlbmRlck9iamVjdCogb2JqLCBjb25zdCBBdG9taWNTdHJpbmcmIGVs
bGlwc2lzU3RyLCBJbmxpbmVGbG93Qm94KiBwYXJlbnQsCiAgICAgICAgICAgICAgICAgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBpbnQgeSwgYm9vbCBmaXJzdExpbmUsIElubGluZUJveCogbWFya3Vw
Qm94KQotICAgICAgICA6IElubGluZUJveChvYmosIDAsIHksIHdpZHRoLCBmaXJzdExpbmUsIHRy
dWUsIGZhbHNlLCBmYWxzZSwgMCwgMCwgcGFyZW50KQorICAgICAgICA6IElubGluZUJveChvYmos
IEludFBvaW50KDAsIHkpLCB3aWR0aCwgZmlyc3RMaW5lLCB0cnVlLCBmYWxzZSwgZmFsc2UsIDAs
IDAsIHBhcmVudCkKICAgICAgICAgLCBtX2hlaWdodChoZWlnaHQpCiAgICAgICAgICwgbV9zdHIo
ZWxsaXBzaXNTdHIpCiAgICAgICAgICwgbV9tYXJrdXBCb3gobWFya3VwQm94KQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUJveC5jcHAKaW5kZXggNTQ3NTE4NzU0NWYwOWY3OTlmNWIzZjU3NjJhMjY0ZWM0YTMwZDcz
ZC4uNjI0M2RlZjQ2ZDYzNmZhOTg5OTQ2ZjBhOWNjZDM1NzFlYjQ1ODFlYSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVCb3guY3BwCkBAIC0xNTEsOCArMTUxLDcgQEAgdm9pZCBJbmxpbmVCb3g6OmF0dGFjaExp
bmUoKQogCiB2b2lkIElubGluZUJveDo6YWRqdXN0UG9zaXRpb24oaW50IGR4LCBpbnQgZHkpCiB7
Ci0gICAgbV94ICs9IGR4OwotICAgIG1feSArPSBkeTsKKyAgICBtX3RvcExlZnQubW92ZShkeCwg
ZHkpOwogICAgIGlmIChtX3JlbmRlcmVyLT5pc1JlcGxhY2VkKCkpIHsKICAgICAgICAgUmVuZGVy
Qm94KiBib3ggPSB0b1JlbmRlckJveChtX3JlbmRlcmVyKTsKICAgICAgICAgYm94LT5tb3ZlKGR4
LCBkeSk7CkBAIC0yNjgsNyArMjY3LDcgQEAgYm9vbCBJbmxpbmVCb3g6OmNhbkFjY29tbW9kYXRl
RWxsaXBzaXMoYm9vbCBsdHIsIGludCBibG9ja0VkZ2UsIGludCBlbGxpcHNpc1dpZHQKICAgICBp
ZiAoIW1fcmVuZGVyZXIgfHwgIW1fcmVuZGVyZXItPmlzUmVwbGFjZWQoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgCi0gICAgSW50UmVjdCBib3hSZWN0KG1feCwgMCwgbV93aWR0aCwgMTAp
OworICAgIEludFJlY3QgYm94UmVjdChsZWZ0KCksIDAsIG1fd2lkdGgsIDEwKTsKICAgICBJbnRS
ZWN0IGVsbGlwc2lzUmVjdChsdHIgPyBibG9ja0VkZ2UgLSBlbGxpcHNpc1dpZHRoIDogYmxvY2tF
ZGdlLCAwLCBlbGxpcHNpc1dpZHRoLCAxMCk7CiAgICAgcmV0dXJuICEoYm94UmVjdC5pbnRlcnNl
Y3RzKGVsbGlwc2lzUmVjdCkpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lQm94LmggYi9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAppbmRleCBhYjAxNjdjNWRi
YzliYzQxMWQ3OTk1OGRjYTEzMzc2YWY5YjY5YjU2Li4yNDNlMGUxMjBlNWQ5MjhiYTlmNGMxMTZk
OWI1MmQzN2JjZDIyYjEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3gu
aAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaApAQCAtNDAsOCArNDAsNiBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9wcmV2KDApCiAgICAgICAgICwgbV9wYXJlbnQoMCkKICAgICAg
ICAgLCBtX3JlbmRlcmVyKG9iaikKLSAgICAgICAgLCBtX3goMCkKLSAgICAgICAgLCBtX3koMCkK
ICAgICAgICAgLCBtX3dpZHRoKDApCiAgICAgICAgICwgbV9maXJzdExpbmUoZmFsc2UpCiAgICAg
ICAgICwgbV9jb25zdHJ1Y3RlZChmYWxzZSkKQEAgLTY3LDE0ICs2NSwxNSBAQCBwdWJsaWM6CiAg
ICAgewogICAgIH0KIAotICAgIElubGluZUJveChSZW5kZXJPYmplY3QqIG9iaiwgaW50IHgsIGlu
dCB5LCBpbnQgd2lkdGgsIGJvb2wgZmlyc3RMaW5lLCBib29sIGNvbnN0cnVjdGVkLAorcHJvdGVj
dGVkOgorICAgIC8vIFRoaXMgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieSBFbGlwc2VzQm94Cisg
ICAgSW5saW5lQm94KFJlbmRlck9iamVjdCogb2JqLCBjb25zdCBJbnRQb2ludCYgdG9wTGVmdCwg
aW50IHdpZHRoLCBib29sIGZpcnN0TGluZSwgYm9vbCBjb25zdHJ1Y3RlZCwKICAgICAgICAgICAg
ICAgYm9vbCBkaXJ0eSwgYm9vbCBleHRyYWN0ZWQsIElubGluZUJveCogbmV4dCwgSW5saW5lQm94
KiBwcmV2LCBJbmxpbmVGbG93Qm94KiBwYXJlbnQpCiAgICAgICAgIDogbV9uZXh0KG5leHQpCiAg
ICAgICAgICwgbV9wcmV2KHByZXYpCiAgICAgICAgICwgbV9wYXJlbnQocGFyZW50KQogICAgICAg
ICAsIG1fcmVuZGVyZXIob2JqKQotICAgICAgICAsIG1feCh4KQotICAgICAgICAsIG1feSh5KQor
ICAgICAgICAsIG1fdG9wTGVmdCh0b3BMZWZ0KQogICAgICAgICAsIG1fd2lkdGgod2lkdGgpCiAg
ICAgICAgICwgbV9maXJzdExpbmUoZmlyc3RMaW5lKQogICAgICAgICAsIG1fY29uc3RydWN0ZWQo
Y29uc3RydWN0ZWQpCkBAIC0xMDAsNiArOTksNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAor
cHVibGljOgogICAgIHZpcnR1YWwgfklubGluZUJveCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRl
c3Ryb3koUmVuZGVyQXJlbmEqKTsKQEAgLTIwMiwxOCArMjAyLDMwIEBAIHB1YmxpYzoKICAgICBj
b25zdCBSb290SW5saW5lQm94KiByb290KCkgY29uc3Q7CiAgICAgUm9vdElubGluZUJveCogcm9v
dCgpOwogCi0gICAgdm9pZCBzZXRXaWR0aChpbnQgdykgeyBtX3dpZHRoID0gdzsgfQotICAgIGlu
dCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLQogICAgIC8vIHgoKSBpcyB0aGUg
bGVmdCBzaWRlIG9mIHRoZSBib3ggaW4gdGhlIHBhcmVudCdzIGNvb3JkaW5hdGUgc3lzdGVtLgot
ICAgIHZvaWQgc2V0WChpbnQgeCkgeyBtX3ggPSB4OyB9Ci0gICAgaW50IHgoKSBjb25zdCB7IHJl
dHVybiBtX3g7IH0KKyAgICB2b2lkIHNldFgoaW50IHgpIHsgbV90b3BMZWZ0LnNldFgoeCk7IH0K
KyAgICBpbnQgeCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wTGVmdC54KCk7IH0KKyAgICBpbnQgbGVm
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wTGVmdC54KCk7IH0KIAogICAgIC8vIHkoKSBpcyB0aGUg
dG9wIG9mIHRoZSBib3ggaW4gdGhlIHBhcmVudCdzIGNvb3JkaW5hdGUgc3lzdGVtLgotICAgIHZv
aWQgc2V0WShpbnQgeSkgeyBtX3kgPSB5OyB9Ci0gICAgaW50IHkoKSBjb25zdCB7IHJldHVybiBt
X3k7IH0KKyAgICB2b2lkIHNldFkoaW50IHkpIHsgbV90b3BMZWZ0LnNldFkoeSk7IH0KKyAgICBp
bnQgeSgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wTGVmdC55KCk7IH0KKyAgICBpbnQgdG9wKCkgY29u
c3QgeyByZXR1cm4gbV90b3BMZWZ0LnkoKTsgfQorCisgICAgY29uc3QgSW50UG9pbnQmIHRvcExl
ZnQoKSBjb25zdCB7IHJldHVybiBtX3RvcExlZnQ7IH0KKworICAgIHZvaWQgc2V0V2lkdGgoaW50
IHcpIHsgbV93aWR0aCA9IHc7IH0KKyAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dp
ZHRoOyB9CisgICAgaW50IHJpZ2h0KCkgY29uc3QgeyByZXR1cm4geCgpICsgd2lkdGgoKTsgfQog
CiAgICAgaW50IGhlaWdodCgpIGNvbnN0OworICAgIGludCBib3R0b20oKSBjb25zdCB7IHJldHVy
biB5KCkgKyBoZWlnaHQoKTsgfQorCisgICAgSW50UmVjdCByZWN0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIC8vIEZJWE1FOiBXaWxsIHRoaXMgd2FudCB2aXJ0dWFsSGVpZ2h0IGZvciB0aGUgU1ZH
IGNhc2U/CisgICAgICAgIHJldHVybiBJbnRSZWN0KHRvcExlZnQoKSwgSW50U2l6ZSh3aWR0aCgp
LCBoZWlnaHQoKSkpOworICAgIH0KIAogICAgIGlubGluZSBpbnQgYmFzZWxpbmVQb3NpdGlvbihi
b29sIGlzUm9vdExpbmVCb3gpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCktPmJhc2VsaW5lUG9z
aXRpb24obV9maXJzdExpbmUsIGlzUm9vdExpbmVCb3gpOyB9CiAgICAgaW5saW5lIGludCBsaW5l
SGVpZ2h0KGJvb2wgaXNSb290TGluZUJveCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS0+bGlu
ZUhlaWdodChtX2ZpcnN0TGluZSwgaXNSb290TGluZUJveCk7IH0KQEAgLTI2NCwxMCArMjc2LDkg
QEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICBSZW5kZXJPYmplY3QqIG1fcmVuZGVyZXI7CiAKLSAg
ICBpbnQgbV94OwotICAgIGludCBtX3k7CisgICAgSW50UG9pbnQgbV90b3BMZWZ0OwogICAgIGlu
dCBtX3dpZHRoOwotICAgIAorCiAgICAgLy8gU29tZSBvZiB0aGVzZSBiaXRzIGFyZSBhY3R1YWxs
eSBmb3Igc3ViY2xhc3NlcyBhbmQgbW92ZWQgaGVyZSB0byBjb21wYWN0IHRoZSBzdHJ1Y3R1cmVz
LgogCiAgICAgLy8gZm9yIHRoaXMgY2xhc3MKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAK
aW5kZXggZGZlNzU2MWU3YjkwNmYwYTE5Y2Q5MDBiZmFmMWZkM2YyMTYwZmUwNC4uNjAzOWU0Yzll
MDYyYmZmZWRkM2I0MTBiZTBlYzJjN2RhZWZjZjg2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAKQEAgLTYyMyw3ICs2MjMsNyBAQCBib29sIElubGluZUZsb3dCb3g6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZQogICAg
IH0KIAogICAgIC8vIE5vdyBjaGVjayBvdXJzZWx2ZXMuCi0gICAgSW50UmVjdCByZWN0KHR4ICsg
bV94LCB0eSArIG1feSwgbV93aWR0aCwgaGVpZ2h0KCkpOworICAgIEludFJlY3QgcmVjdCh0eCAr
IGxlZnQoKSwgdHkgKyB0b3AoKSwgbV93aWR0aCwgaGVpZ2h0KCkpOwogICAgIGlmICh2aXNpYmxl
VG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KHgs
IHkpKSkgewogICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwg
SW50UG9pbnQoeCAtIHR4LCB5IC0gdHkpKTsgLy8gRG9uJ3QgYWRkIGluIG1feCBvciBtX3kgaGVy
ZSwgd2Ugd2FudCBjb29yZHMgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBzcGFjZS4KICAgICAg
ICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLT5u
b2RlKCksIHgsIHksIHJlY3QpKQpAQCAtNzU1LDggKzc1NSw4IEBAIHZvaWQgSW5saW5lRmxvd0Jv
eDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQg
dHkpCiAgICAgaWYgKCFwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHJlbmRlcmVyKCkp
IHx8IHJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8IHBhaW50
SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaW50IHggPSBtX3g7Ci0gICAgaW50IHkgPSBtX3k7CisgICAgaW50IHggPSBsZWZ0KCk7Cisg
ICAgaW50IHkgPSB0b3AoKTsKICAgICBpbnQgdyA9IHdpZHRoKCk7CiAgICAgaW50IGggPSBoZWln
aHQoKTsKIApAQCAtODMxLDggKzgzMSw4IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnRNYXNr
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKICAgICBpZiAoIXBhaW50SW5m
by5zaG91bGRQYWludFdpdGhpblJvb3QocmVuZGVyZXIoKSkgfHwgcmVuZGVyZXIoKS0+c3R5bGUo
KS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhh
c2VNYXNrKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgeCA9IG1feDsKLSAgICBpbnQgeSA9
IG1feTsKKyAgICBpbnQgeCA9IGxlZnQoKTsKKyAgICBpbnQgeSA9IHRvcCgpOwogICAgIGludCB3
ID0gd2lkdGgoKTsKICAgICBpbnQgaCA9IGhlaWdodCgpOwogCkBAIC05MzEsMTggKzkzMSwxOCBA
QCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50VGV4dERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBpbnQgdHgsIGludCB0eSwgYgogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsKLSAgICB0eCArPSBtX3g7Ci0g
ICAgdHkgKz0gbV95OworICAgIHR4ICs9IGxlZnQoKTsKKyAgICB0eSArPSB0b3AoKTsKICAgICBS
ZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKTsK
ICAgICBpbnQgZGVjbyA9IHBhcmVudCgpID8gc3R5bGVUb1VzZS0+dGV4dERlY29yYXRpb24oKSA6
IHN0eWxlVG9Vc2UtPnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CiAgICAgaWYgKGRlY28gIT0g
VEROT05FICYmIAogICAgICAgICAoKCFwYWludGVkQ2hpbGRyZW4gJiYgKChkZWNvICYgVU5ERVJM
SU5FKSB8fCAoZGVjbyAmIE9WRVJMSU5FKSkpIHx8IChwYWludGVkQ2hpbGRyZW4gJiYgKGRlY28g
JiBMSU5FX1RIUk9VR0gpKSkgJiYKICAgICAgICAgc2hvdWxkRHJhd1RleHREZWNvcmF0aW9uKHJl
bmRlcmVyKCkpKSB7Ci0gICAgICAgIGludCB4ID0gbV94ICsgYm9yZGVyTGVmdCgpICsgcGFkZGlu
Z0xlZnQoKTsKKyAgICAgICAgaW50IHggPSBsZWZ0KCkgKyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5n
TGVmdCgpOwogICAgICAgICBpbnQgdyA9IG1fd2lkdGggLSAoYm9yZGVyTGVmdCgpICsgcGFkZGlu
Z0xlZnQoKSArIGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nUmlnaHQoKSk7CiAgICAgICAgIFJvb3RJ
bmxpbmVCb3gqIHJvb3RMaW5lID0gcm9vdCgpOwogICAgICAgICBpZiAocm9vdExpbmUtPmVsbGlw
c2lzQm94KCkpIHsKLSAgICAgICAgICAgIGludCBlbGxpcHNpc1ggPSBtX3ggKyByb290TGluZS0+
ZWxsaXBzaXNCb3goKS0+eCgpOworICAgICAgICAgICAgaW50IGVsbGlwc2lzWCA9IGxlZnQoKSAr
IHJvb3RMaW5lLT5lbGxpcHNpc0JveCgpLT54KCk7CiAgICAgICAgICAgICBpbnQgZWxsaXBzaXNX
aWR0aCA9IHJvb3RMaW5lLT5lbGxpcHNpc0JveCgpLT53aWR0aCgpOwogICAgICAgICAgICAgYm9v
bCBsdHIgPSByZW5kZXJlcigpLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFI7CiAgICAgICAg
ICAgICBpZiAocm9vdExpbmUgPT0gdGhpcykgewpAQCAtOTU0LDcgKzk1NCw3IEBAIHZvaWQgSW5s
aW5lRmxvd0JveDo6cGFpbnRUZXh0RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBwYWludEluZm8sIGlu
dCB0eCwgaW50IHR5LCBiCiAgICAgICAgICAgICAgICAgaWYgKGx0clRydW5jYXRpb24pCiAgICAg
ICAgICAgICAgICAgICAgIHcgLT0gKHggKyB3KSAtIChlbGxpcHNpc1ggKyBlbGxpcHNpc1dpZHRo
KTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChydGxUcnVuY2F0aW9uKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGludCBkeCA9IG1feCAtICgoZWxsaXBzaXNYIC0gbV94KSArIGVsbGlwc2lzV2lk
dGgpOworICAgICAgICAgICAgICAgICAgICBpbnQgZHggPSBsZWZ0KCkgLSAoKGVsbGlwc2lzWCAt
IGxlZnQoKSkgKyBlbGxpcHNpc1dpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgdHggLT0gZHg7
CiAgICAgICAgICAgICAgICAgICAgIHcgKz0gZHg7CiAgICAgICAgICAgICAgICAgfQpAQCAtOTY5
LDcgKzk2OSw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnRUZXh0RGVjb3JhdGlvbnMoUGFp
bnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5LCBiCiAgICAgICAgICAgICAgICAgaWYg
KGx0clRydW5jYXRpb24pCiAgICAgICAgICAgICAgICAgICAgIHcgLT0gKHggKyB3IC0gZWxsaXBz
aXNYKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChydGxUcnVuY2F0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGludCBkeCA9IG1feCAtICgoZWxsaXBzaXNYIC0gbV94KSArIGVsbGlwc2lz
V2lkdGgpOworICAgICAgICAgICAgICAgICAgICBpbnQgZHggPSBsZWZ0KCkgLSAoKGVsbGlwc2lz
WCAtIGxlZnQoKSkgKyBlbGxpcHNpc1dpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgdHggLT0g
ZHg7CiAgICAgICAgICAgICAgICAgICAgIHcgKz0gZHg7CiAgICAgICAgICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5oCmluZGV4IGI0YmE1OWZkYzk2YzIwMmE4MjEzOGNjNzQ5Y2Q1
Y2UwMmVmNTlhMWIuLjk1YzNkYmE2NmQxNGM2YzcwOTZlZjBlMDkzMmYwY2Y2Nzg0YTU1ODQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAorKysgYi9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKQEAgLTE1MSwxOSArMTUxLDE5IEBAIHB1YmxpYzoK
ICAgICBpbnQgYm90dG9tVmlzaWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gc3RkOjptYXgo
Ym90dG9tTGF5b3V0T3ZlcmZsb3coKSwgYm90dG9tVmlzdWFsT3ZlcmZsb3coKSk7IH0KICAgICBp
bnQgbGVmdFZpc2libGVPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWluKGxlZnRMYXlv
dXRPdmVyZmxvdygpLCBsZWZ0VmlzdWFsT3ZlcmZsb3coKSk7IH0KICAgICBpbnQgcmlnaHRWaXNp
YmxlT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBzdGQ6Om1heChyaWdodExheW91dE92ZXJmbG93
KCksIHJpZ2h0VmlzdWFsT3ZlcmZsb3coKSk7IH0KLSAgICBJbnRSZWN0IHZpc2libGVPdmVyZmxv
d1JlY3QoKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+dmlzaWJsZU92
ZXJmbG93UmVjdCgpIDogSW50UmVjdChtX3gsIG1feSwgbV93aWR0aCwgaGVpZ2h0KCkpOyAgfQor
ICAgIEludFJlY3QgdmlzaWJsZU92ZXJmbG93UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZs
b3cgPyBtX292ZXJmbG93LT52aXNpYmxlT3ZlcmZsb3dSZWN0KCkgOiByZWN0KCk7ICB9CiAKLSAg
ICBpbnQgdG9wTGF5b3V0T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9v
dmVyZmxvdy0+dG9wTGF5b3V0T3ZlcmZsb3coKSA6IG1feTsgfQotICAgIGludCBib3R0b21MYXlv
dXRPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT5ib3R0
b21MYXlvdXRPdmVyZmxvdygpIDogbV95ICsgaGVpZ2h0KCk7IH0KLSAgICBpbnQgbGVmdExheW91
dE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPmxlZnRM
YXlvdXRPdmVyZmxvdygpIDogbV94OyB9Ci0gICAgaW50IHJpZ2h0TGF5b3V0T3ZlcmZsb3coKSBj
b25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+cmlnaHRMYXlvdXRPdmVyZmxv
dygpIDogbV94ICsgbV93aWR0aDsgfQotICAgIEludFJlY3QgbGF5b3V0T3ZlcmZsb3dSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPmxheW91dE92ZXJmbG93UmVj
dCgpIDogSW50UmVjdChtX3gsIG1feSwgbV93aWR0aCwgaGVpZ2h0KCkpOyB9CisgICAgaW50IHRv
cExheW91dE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ct
PnRvcExheW91dE92ZXJmbG93KCkgOiB0b3AoKTsgfQorICAgIGludCBib3R0b21MYXlvdXRPdmVy
ZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT5ib3R0b21MYXlv
dXRPdmVyZmxvdygpIDogYm90dG9tKCk7IH0KKyAgICBpbnQgbGVmdExheW91dE92ZXJmbG93KCkg
Y29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPmxlZnRMYXlvdXRPdmVyZmxv
dygpIDogbGVmdCgpOyB9CisgICAgaW50IHJpZ2h0TGF5b3V0T3ZlcmZsb3coKSBjb25zdCB7IHJl
dHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+cmlnaHRMYXlvdXRPdmVyZmxvdygpIDogcmln
aHQoKTsgfQorICAgIEludFJlY3QgbGF5b3V0T3ZlcmZsb3dSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPmxheW91dE92ZXJmbG93UmVjdCgpIDogcmVjdCgpOyB9
CiAKLSAgICBpbnQgdG9wVmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93
ID8gbV9vdmVyZmxvdy0+dG9wVmlzdWFsT3ZlcmZsb3coKSA6IG1feTsgfQotICAgIGludCBib3R0
b21WaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93
LT5ib3R0b21WaXN1YWxPdmVyZmxvdygpIDogbV95ICsgaGVpZ2h0KCk7IH0KLSAgICBpbnQgbGVm
dFZpc3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ct
PmxlZnRWaXN1YWxPdmVyZmxvdygpIDogbV94OyB9Ci0gICAgaW50IHJpZ2h0VmlzdWFsT3ZlcmZs
b3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+cmlnaHRWaXN1YWxP
dmVyZmxvdygpIDogbV94ICsgbV93aWR0aDsgfQotICAgIEludFJlY3QgdmlzdWFsT3ZlcmZsb3dS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPnZpc3VhbE92ZXJm
bG93UmVjdCgpIDogSW50UmVjdChtX3gsIG1feSwgbV93aWR0aCwgaGVpZ2h0KCkpOyB9CisgICAg
aW50IHRvcFZpc3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3Zl
cmZsb3ctPnRvcFZpc3VhbE92ZXJmbG93KCkgOiB0b3AoKTsgfQorICAgIGludCBib3R0b21WaXN1
YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT5ib3R0
b21WaXN1YWxPdmVyZmxvdygpIDogYm90dG9tKCk7IH0KKyAgICBpbnQgbGVmdFZpc3VhbE92ZXJm
bG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPmxlZnRWaXN1YWxP
dmVyZmxvdygpIDogbGVmdCgpOyB9CisgICAgaW50IHJpZ2h0VmlzdWFsT3ZlcmZsb3coKSBjb25z
dCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+cmlnaHRWaXN1YWxPdmVyZmxvdygp
IDogcmlnaHQoKTsgfQorICAgIEludFJlY3QgdmlzdWFsT3ZlcmZsb3dSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPnZpc3VhbE92ZXJmbG93UmVjdCgpIDogcmVj
dCgpOyB9CiAKICAgICB2b2lkIHNldEhvcml6b250YWxPdmVyZmxvd1Bvc2l0aW9ucyhpbnQgbGVm
dExheW91dE92ZXJmbG93LCBpbnQgcmlnaHRMYXlvdXRPdmVyZmxvdywgaW50IGxlZnRWaXN1YWxP
dmVyZmxvdywgaW50IHJpZ2h0VmlzdWFsT3ZlcmZsb3cpOwogICAgIHZvaWQgc2V0VmVydGljYWxP
dmVyZmxvd1Bvc2l0aW9ucyhpbnQgdG9wTGF5b3V0T3ZlcmZsb3csIGludCBib3R0b21MYXlvdXRP
dmVyZmxvdywgaW50IHRvcFZpc3VhbE92ZXJmbG93LCBpbnQgYm90dG9tVmlzdWFsT3ZlcmZsb3cs
IGludCBib3hIZWlnaHQpOwpAQCAtMTkxLDkgKzE5MSwxMCBAQCBwcm90ZWN0ZWQ6CiBpbmxpbmUg
dm9pZCBJbmxpbmVGbG93Qm94OjpzZXRIb3Jpem9udGFsT3ZlcmZsb3dQb3NpdGlvbnMoaW50IGxl
ZnRMYXlvdXRPdmVyZmxvdywgaW50IHJpZ2h0TGF5b3V0T3ZlcmZsb3csIGludCBsZWZ0VmlzdWFs
T3ZlcmZsb3csIGludCByaWdodFZpc3VhbE92ZXJmbG93KSAKIHsgCiAgICAgaWYgKCFtX292ZXJm
bG93KSB7Ci0gICAgICAgIGlmIChsZWZ0TGF5b3V0T3ZlcmZsb3cgPT0gbV94ICYmIHJpZ2h0TGF5
b3V0T3ZlcmZsb3cgPT0gbV94ICsgbV93aWR0aCAmJiBsZWZ0VmlzdWFsT3ZlcmZsb3cgPT0gbV94
ICYmIHJpZ2h0VmlzdWFsT3ZlcmZsb3cgPT0gbV94ICsgbV93aWR0aCkKKyAgICAgICAgaWYgKGxl
ZnRMYXlvdXRPdmVyZmxvdyA9PSBsZWZ0KCkgJiYgcmlnaHRMYXlvdXRPdmVyZmxvdyA9PSByaWdo
dCgpICYmIGxlZnRWaXN1YWxPdmVyZmxvdyA9PSBsZWZ0KCkgJiYgcmlnaHRWaXN1YWxPdmVyZmxv
dyA9PSByaWdodCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX292ZXJmbG93ID0g
YWRvcHRQdHIobmV3IFJlbmRlck92ZXJmbG93KEludFJlY3QobV94LCBtX3ksIG1fd2lkdGgsIG1f
cmVuZGVyZXItPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udCgpLmhlaWdodCgpKSkpOyAgICAKKyAg
ICAgICAgaW50IGZpcnN0TGluZUhlaWdodCA9IG1fcmVuZGVyZXItPnN0eWxlKG1fZmlyc3RMaW5l
KS0+Zm9udCgpLmhlaWdodCgpOworICAgICAgICBtX292ZXJmbG93ID0gYWRvcHRQdHIobmV3IFJl
bmRlck92ZXJmbG93KEludFJlY3QodG9wTGVmdCgpLCBJbnRTaXplKG1fd2lkdGgsIGZpcnN0TGlu
ZUhlaWdodCkpKSk7CiAgICAgfQogCiAgICAgbV9vdmVyZmxvdy0+c2V0TGVmdExheW91dE92ZXJm
bG93KGxlZnRMYXlvdXRPdmVyZmxvdyk7CkBAIC0yMDUsOSArMjA2LDEwIEBAIGlubGluZSB2b2lk
IElubGluZUZsb3dCb3g6OnNldEhvcml6b250YWxPdmVyZmxvd1Bvc2l0aW9ucyhpbnQgbGVmdExh
eW91dE92ZXJmbG93CiBpbmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjpzZXRWZXJ0aWNhbE92ZXJm
bG93UG9zaXRpb25zKGludCB0b3BMYXlvdXRPdmVyZmxvdywgaW50IGJvdHRvbUxheW91dE92ZXJm
bG93LCBpbnQgdG9wVmlzdWFsT3ZlcmZsb3csIGludCBib3R0b21WaXN1YWxPdmVyZmxvdywgaW50
IGJveEhlaWdodCkKIHsKICAgICBpZiAoIW1fb3ZlcmZsb3cpIHsKLSAgICAgICAgaWYgKHRvcExh
eW91dE92ZXJmbG93ID09IG1feSAmJiBib3R0b21MYXlvdXRPdmVyZmxvdyA9PSBtX3kgKyBib3hI
ZWlnaHQgJiYgdG9wVmlzdWFsT3ZlcmZsb3cgPT0gbV95ICYmIGJvdHRvbVZpc3VhbE92ZXJmbG93
ID09IG1feSArIGJveEhlaWdodCkKKyAgICAgICAgaW50IGJveEJvdHRvbSA9IHRvcCgpICsgYm94
SGVpZ2h0OworICAgICAgICBpZiAodG9wTGF5b3V0T3ZlcmZsb3cgPT0gdG9wKCkgJiYgYm90dG9t
TGF5b3V0T3ZlcmZsb3cgPT0gYm94Qm90dG9tICYmIHRvcFZpc3VhbE92ZXJmbG93ID09IHRvcCgp
ICYmIGJvdHRvbVZpc3VhbE92ZXJmbG93ID09IGJveEJvdHRvbSkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgbV9vdmVyZmxvdyA9IGFkb3B0UHRyKG5ldyBSZW5kZXJPdmVyZmxvdyhJbnRS
ZWN0KG1feCwgbV95LCBtX3dpZHRoLCBib3hIZWlnaHQpKSk7CisgICAgICAgIG1fb3ZlcmZsb3cg
PSBhZG9wdFB0cihuZXcgUmVuZGVyT3ZlcmZsb3coSW50UmVjdCh0b3BMZWZ0KCksIEludFNpemUo
bV93aWR0aCwgYm94SGVpZ2h0KSkpKTsKICAgICB9CiAKICAgICBtX292ZXJmbG93LT5zZXRUb3BM
YXlvdXRPdmVyZmxvdyh0b3BMYXlvdXRPdmVyZmxvdyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCmluZGV4IGNiNGZkYjg4NWNkNWY4ODhiMDlkY2Y5YjU5YWRmNDVhZGVhODU4YWUuLjNh
ZjkwNzk5YzE3YjI3ODFkNzZlNTUxYWM2Mjc3Zjc3NTE5ZjhkOTAgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCkBAIC0xMzgsMTEgKzEzOCwxMSBAQCBJbnRSZWN0IElubGluZVRleHRC
b3g6OnNlbGVjdGlvblJlY3QoaW50IHR4LCBpbnQgdHksIGludCBzdGFydFBvcywgaW50IGVuZFBv
cykKICAgICB9CiAKICAgICBJbnRSZWN0IHIgPSBlbmNsb3NpbmdJbnRSZWN0KGYuc2VsZWN0aW9u
UmVjdEZvclRleHQoVGV4dFJ1bihjaGFyYWN0ZXJzLCBsZW4sIHRleHRPYmotPmFsbG93VGFicygp
LCB0ZXh0UG9zKCksIG1fdG9BZGQsIGRpcmVjdGlvbigpID09IFJUTCwgbV9kaXJPdmVycmlkZSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEludFBvaW50KHR4ICsgbV94LCB0eSArIHNlbFRvcCksIHNlbEhlaWdodCwgc1BvcywgZVBvcykp
OwotICAgIGlmIChyLngoKSA+IHR4ICsgbV94ICsgbV93aWR0aCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQodHggKyB4KCks
IHR5ICsgc2VsVG9wKSwgc2VsSGVpZ2h0LCBzUG9zLCBlUG9zKSk7CisgICAgaWYgKHIueCgpID4g
dHggKyByaWdodCgpKQogICAgICAgICByLnNldFdpZHRoKDApOwotICAgIGVsc2UgaWYgKHIucmln
aHQoKSAtIDEgPiB0eCArIG1feCArIG1fd2lkdGgpCi0gICAgICAgIHIuc2V0V2lkdGgodHggKyBt
X3ggKyBtX3dpZHRoIC0gci54KCkpOworICAgIGVsc2UgaWYgKHIucmlnaHQoKSAtIDEgPiB0eCAr
IHJpZ2h0KCkpCisgICAgICAgIHIuc2V0V2lkdGgodHggKyByaWdodCgpIC0gci54KCkpOwogICAg
IHJldHVybiByOwogfQogCkBAIC0xODEsOCArMTgxLDggQEAgaW50IElubGluZVRleHRCb3g6OnBs
YWNlRWxsaXBzaXNCb3goYm9vbCBmbG93SXNMVFIsIGludCB2aXNpYmxlTGVmdEVkZ2UsIGludCB2
aXMKICAgICAvLyBDcml0ZXJpYSBmb3IgZnVsbCB0cnVuY2F0aW9uOgogICAgIC8vIExUUjogdGhl
IGxlZnQgZWRnZSBvZiB0aGUgZWxsaXBzaXMgaXMgdG8gdGhlIGxlZnQgb2Ygb3VyIHRleHQgcnVu
LgogICAgIC8vIFJUTDogdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIGVsbGlwc2lzIGlzIHRvIHRoZSBy
aWdodCBvZiBvdXIgdGV4dCBydW4uCi0gICAgYm9vbCBsdHJGdWxsVHJ1bmNhdGlvbiA9IGZsb3dJ
c0xUUiAmJiBlbGxpcHNpc1ggPD0gbV94OwotICAgIGJvb2wgcnRsRnVsbFRydW5jYXRpb24gPSAh
Zmxvd0lzTFRSICYmIGVsbGlwc2lzWCA+PSAobV94ICsgbV93aWR0aCk7CisgICAgYm9vbCBsdHJG
dWxsVHJ1bmNhdGlvbiA9IGZsb3dJc0xUUiAmJiBlbGxpcHNpc1ggPD0gbGVmdCgpOworICAgIGJv
b2wgcnRsRnVsbFRydW5jYXRpb24gPSAhZmxvd0lzTFRSICYmIGVsbGlwc2lzWCA+PSByaWdodCgp
OwogICAgIGlmIChsdHJGdWxsVHJ1bmNhdGlvbiB8fCBydGxGdWxsVHJ1bmNhdGlvbikgewogICAg
ICAgICAvLyBUb28gZmFyLiAgSnVzdCBzZXQgZnVsbCB0cnVuY2F0aW9uLCBidXQgcmV0dXJuIC0x
IGFuZCBsZXQgdGhlIGVsbGlwc2lzIGp1c3QgYmUgcGxhY2VkIGF0IHRoZSBlZGdlIG9mIHRoZSBi
b3guCiAgICAgICAgIG1fdHJ1bmNhdGlvbiA9IGNGdWxsVHJ1bmNhdGlvbjsKQEAgLTE5MCw4ICsx
OTAsOCBAQCBpbnQgSW5saW5lVGV4dEJveDo6cGxhY2VFbGxpcHNpc0JveChib29sIGZsb3dJc0xU
UiwgaW50IHZpc2libGVMZWZ0RWRnZSwgaW50IHZpcwogICAgICAgICByZXR1cm4gLTE7CiAgICAg
fQogCi0gICAgYm9vbCBsdHJFbGxpcHNpc1dpdGhpbkJveCA9IGZsb3dJc0xUUiAmJiAoZWxsaXBz
aXNYIDwgbV94ICsgbV93aWR0aCk7Ci0gICAgYm9vbCBydGxFbGxpcHNpc1dpdGhpbkJveCA9ICFm
bG93SXNMVFIgJiYgKGVsbGlwc2lzWCA+IG1feCk7CisgICAgYm9vbCBsdHJFbGxpcHNpc1dpdGhp
bkJveCA9IGZsb3dJc0xUUiAmJiAoZWxsaXBzaXNYIDwgcmlnaHQoKSk7CisgICAgYm9vbCBydGxF
bGxpcHNpc1dpdGhpbkJveCA9ICFmbG93SXNMVFIgJiYgKGVsbGlwc2lzWCA+IGxlZnQoKSk7CiAg
ICAgaWYgKGx0ckVsbGlwc2lzV2l0aGluQm94IHx8IHJ0bEVsbGlwc2lzV2l0aGluQm94KSB7CiAg
ICAgICAgIGZvdW5kQm94ID0gdHJ1ZTsKIApAQCAtMjAwLDE3ICsyMDAsMTcgQEAgaW50IElubGlu
ZVRleHRCb3g6OnBsYWNlRWxsaXBzaXNCb3goYm9vbCBmbG93SXNMVFIsIGludCB2aXNpYmxlTGVm
dEVkZ2UsIGludCB2aXMKICAgICAgICAgLy8gbXVzdCBrZWVwIHRyYWNrIG9mIHRoZXNlIHNlcGFy
YXRlbHkuCiAgICAgICAgIGJvb2wgbHRyID0gZGlyZWN0aW9uKCkgPT0gTFRSOwogICAgICAgICBp
ZiAobHRyICE9IGZsb3dJc0xUUikgewotICAgICAgICAgIC8vIFdpZHRoIGluIHBpeGVscyBvZiB0
aGUgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBib3gsIGV4Y2x1ZGluZyB0aGUgZWxsaXBzaXMuCi0g
ICAgICAgICAgaW50IHZpc2libGVCb3hXaWR0aCA9IHZpc2libGVSaWdodEVkZ2UgLSB2aXNpYmxl
TGVmdEVkZ2UgIC0gZWxsaXBzaXNXaWR0aDsKLSAgICAgICAgICBlbGxpcHNpc1ggPSBsdHIgPyBt
X3ggKyB2aXNpYmxlQm94V2lkdGggOiBtX3ggKyBtX3dpZHRoIC0gdmlzaWJsZUJveFdpZHRoOwor
ICAgICAgICAgICAgLy8gV2lkdGggaW4gcGl4ZWxzIG9mIHRoZSB2aXNpYmxlIHBvcnRpb24gb2Yg
dGhlIGJveCwgZXhjbHVkaW5nIHRoZSBlbGxpcHNpcy4KKyAgICAgICAgICAgIGludCB2aXNpYmxl
Qm94V2lkdGggPSB2aXNpYmxlUmlnaHRFZGdlIC0gdmlzaWJsZUxlZnRFZGdlICAtIGVsbGlwc2lz
V2lkdGg7CisgICAgICAgICAgICBlbGxpcHNpc1ggPSBsdHIgPyBsZWZ0KCkgKyB2aXNpYmxlQm94
V2lkdGggOiByaWdodCgpIC0gdmlzaWJsZUJveFdpZHRoOwogICAgICAgICB9CiAKICAgICAgICAg
aW50IG9mZnNldCA9IG9mZnNldEZvclBvc2l0aW9uKGVsbGlwc2lzWCwgZmFsc2UpOwotICAgICAg
ICBpZiAob2Zmc2V0ID09IDApIHsKKyAgICAgICAgaWYgKCFvZmZzZXQpIHsKICAgICAgICAgICAg
IC8vIE5vIGNoYXJhY3RlcnMgc2hvdWxkIGJlIHJlbmRlcmVkLiAgU2V0IG91cnNlbHZlcyB0byBm
dWxsIHRydW5jYXRpb24gYW5kIHBsYWNlIHRoZSBlbGxpcHNpcyBhdCB0aGUgbWluIG9mIG91ciBz
dGFydAogICAgICAgICAgICAgLy8gYW5kIHRoZSBlbGxpcHNpcyBlZGdlLgogICAgICAgICAgICAg
bV90cnVuY2F0aW9uID0gY0Z1bGxUcnVuY2F0aW9uOwotICAgICAgICAgICAgcmV0dXJuIG1pbihl
bGxpcHNpc1gsIG1feCk7CisgICAgICAgICAgICByZXR1cm4gbWluKGVsbGlwc2lzWCwgbGVmdCgp
KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFNldCB0aGUgdHJ1bmNhdGlvbiBpbmRleCBvbiB0
aGUgdGV4dCBydW4uCkBAIC0yMjYsMzAgKzIyNiwyOCBAQCBpbnQgSW5saW5lVGV4dEJveDo6cGxh
Y2VFbGxpcHNpc0JveChib29sIGZsb3dJc0xUUiwgaW50IHZpc2libGVMZWZ0RWRnZSwgaW50IHZp
cwogICAgICAgICAvLyBlLmcuIEluIHRoZSBjYXNlIG9mIGFuIExUUiBpbmxpbmUgYm94IHRydW5j
YXRlZCBpbiBhbiBSVEwgZmxvdyB0aGVuIHdlIGNhbgogICAgICAgICAvLyBoYXZlIGEgc2l0dWF0
aW9uIHN1Y2ggYXMgfEhlbGxvfCAtPiB8Li4uSGV8CiAgICAgICAgIGlmIChmbG93SXNMVFIpCi0g
ICAgICAgICAgICByZXR1cm4gbV94ICsgd2lkdGhPZlZpc2libGVUZXh0OworICAgICAgICAgICAg
cmV0dXJuIGxlZnQoKSArIHdpZHRoT2ZWaXNpYmxlVGV4dDsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcmV0dXJuIChtX3ggKyBtX3dpZHRoKSAtIHdpZHRoT2ZWaXNpYmxlVGV4dCAtIGVsbGlw
c2lzV2lkdGg7CisgICAgICAgICAgICByZXR1cm4gcmlnaHQoKSAtIHdpZHRoT2ZWaXNpYmxlVGV4
dCAtIGVsbGlwc2lzV2lkdGg7CiAgICAgfQogICAgIHJldHVybiAtMTsKIH0KIAotQ29sb3IgY29y
cmVjdGVkVGV4dENvbG9yKENvbG9yIHRleHRDb2xvciwgQ29sb3IgYmFja2dyb3VuZENvbG9yKSAK
K0NvbG9yIGNvcnJlY3RlZFRleHRDb2xvcihjb25zdCBDb2xvciYgdGV4dENvbG9yLCBjb25zdCBD
b2xvciYgYmFja2dyb3VuZENvbG9yKSAKIHsKICAgICAvLyBBZGp1c3QgdGhlIHRleHQgY29sb3Ig
aWYgaXQgaXMgdG9vIGNsb3NlIHRvIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLAogICAgIC8vIGJ5IGRh
cmtlbmluZyBvciBsaWdodGVuaW5nIGl0IHRvIG1vdmUgaXQgZnVydGhlciBhd2F5LgotICAgIAor
CiAgICAgaW50IGQgPSBkaWZmZXJlbmNlU3F1YXJlZCh0ZXh0Q29sb3IsIGJhY2tncm91bmRDb2xv
cik7CiAgICAgLy8gc2VtaS1hcmJpdHJhcmlseSBjaG9zZSA2NTAyNSAoMjU1XjIpIHZhbHVlIGhl
cmUgYWZ0ZXIgYSBmZXcgdGVzdHM7IAotICAgIGlmIChkID4gNjUwMjUpIHsKKyAgICBpZiAoZCA+
IDY1MDI1KQogICAgICAgICByZXR1cm4gdGV4dENvbG9yOwotICAgIH0KLSAgICAKKwogICAgIGlu
dCBkaXN0YW5jZUZyb21XaGl0ZSA9IGRpZmZlcmVuY2VTcXVhcmVkKHRleHRDb2xvciwgQ29sb3I6
OndoaXRlKTsKICAgICBpbnQgZGlzdGFuY2VGcm9tQmxhY2sgPSBkaWZmZXJlbmNlU3F1YXJlZCh0
ZXh0Q29sb3IsIENvbG9yOjpibGFjayk7CiAKLSAgICBpZiAoZGlzdGFuY2VGcm9tV2hpdGUgPCBk
aXN0YW5jZUZyb21CbGFjaykgeworICAgIGlmIChkaXN0YW5jZUZyb21XaGl0ZSA8IGRpc3RhbmNl
RnJvbUJsYWNrKQogICAgICAgICByZXR1cm4gdGV4dENvbG9yLmRhcmsoKTsKLSAgICB9CiAgICAg
CiAgICAgcmV0dXJuIHRleHRDb2xvci5saWdodCgpOwogfQpAQCAtMjg2LDcgKzI4NCw3IEBAIGJv
b2wgSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGluCiAgICAgaWYgKGlzTGluZUJyZWFrKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIEludFJlY3QgcmVjdCh0eCArIG1feCwgdHkgKyBtX3ksIG1fd2lk
dGgsIGhlaWdodCgpKTsKKyAgICBJbnRSZWN0IHJlY3QodHggKyBsZWZ0KCksIHR5ICsgdG9wKCks
IG1fd2lkdGgsIGhlaWdodCgpKTsKICAgICBpZiAobV90cnVuY2F0aW9uICE9IGNGdWxsVHJ1bmNh
dGlvbiAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5y
ZWN0RnJvbVBvaW50KHgsIHkpKSkgewogICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAtIHR4LCB5IC0gdHkpKTsKICAgICAgICAgaWYgKCFy
ZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHgs
IHksIHJlY3QpKQpAQCAtMzY4LDcgKzM2Niw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogICAgIC8vIFdvdWxkIGl0IGJl
IHNpbXBsZXIgdG8ganVzdCBjaGVjayBvdXIgb3duIHNoYWRvdyBhbmQgc3Ryb2tlIG92ZXJmbG93
IGJ5IGhhbmQgaGVyZT8KICAgICBpbnQgbGVmdE92ZXJmbG93ID0gcGFyZW50KCktPngoKSAtIHBh
cmVudCgpLT5sZWZ0VmlzdWFsT3ZlcmZsb3coKTsKICAgICBpbnQgcmlnaHRPdmVyZmxvdyA9IHBh
cmVudCgpLT5yaWdodFZpc3VhbE92ZXJmbG93KCkgLSAocGFyZW50KCktPngoKSArIHBhcmVudCgp
LT53aWR0aCgpKTsKLSAgICBpbnQgeFBvcyA9IHR4ICsgbV94IC0gbGVmdE92ZXJmbG93OworICAg
IGludCB4UG9zID0gdHggKyB4KCkgLSBsZWZ0T3ZlcmZsb3c7CiAgICAgaW50IHcgPSB3aWR0aCgp
ICsgbGVmdE92ZXJmbG93ICsgcmlnaHRPdmVyZmxvdzsKICAgICBpZiAoeFBvcyA+PSBwYWludElu
Zm8ucmVjdC5yaWdodCgpIHx8IHhQb3MgKyB3IDw9IHBhaW50SW5mby5yZWN0LngoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNTAzLDcgKzUwMSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogICAgICAgICBhZGp1c3RDaGFy
YWN0ZXJzQW5kTGVuZ3RoRm9ySHlwaGVuKGNoYXJhY3RlcnNXaXRoSHlwaGVuLCBzdHlsZVRvVXNl
LCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogCiAgICAgaW50IGJhc2VsaW5lID0gcmVuZGVyZXIoKS0+
c3R5bGUobV9maXJzdExpbmUpLT5mb250KCkuYXNjZW50KCk7Ci0gICAgSW50UG9pbnQgdGV4dE9y
aWdpbihtX3ggKyB0eCwgbV95ICsgdHkgKyBiYXNlbGluZSk7CisgICAgSW50UG9pbnQgdGV4dE9y
aWdpbih4KCkgKyB0eCwgeSgpICsgdHkgKyBiYXNlbGluZSk7CiAgICAgVGV4dFJ1biB0ZXh0UnVu
KGNoYXJhY3RlcnMsIGxlbmd0aCwgdGV4dFJlbmRlcmVyKCktPmFsbG93VGFicygpLCB0ZXh0UG9z
KCksIG1fdG9BZGQsIGRpcmVjdGlvbigpID09IFJUTCwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZVRv
VXNlLT52aXN1YWxseU9yZGVyZWQoKSk7CiAKICAgICBpbnQgc1BvcyA9IDA7CkBAIC01MjYsOSAr
NTI0LDkgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywg
aW50IHR4LCBpbnQgdHkpCiAgICAgICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0LCB0
ZXh0RmlsbENvbG9yLCB0ZXh0U3Ryb2tlQ29sb3IsIHRleHRTdHJva2VXaWR0aCwgc3R5bGVUb1Vz
ZS0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgaWYgKCFwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRl
bHkgfHwgZVBvcyA8PSBzUG9zKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVHJ1bmNhdGUgcmln
aHQtdG8tbGVmdCB0ZXh0IGNvcnJlY3RseS4KLSAgICAgICAgICAgIHBhaW50VGV4dFdpdGhTaGFk
b3dzKGNvbnRleHQsIGZvbnQsIHRleHRSdW4sIDAsIGxlbmd0aCwgbGVuZ3RoLCB0ZXh0T3JpZ2lu
LCBtX3ggKyB0eCwgbV95ICsgdHksIHdpZHRoKCksIGhlaWdodCgpLCB0ZXh0U2hhZG93LCB0ZXh0
U3Ryb2tlV2lkdGggPiAwKTsKKyAgICAgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRl
eHQsIGZvbnQsIHRleHRSdW4sIDAsIGxlbmd0aCwgbGVuZ3RoLCB0ZXh0T3JpZ2luLCB4KCkgKyB0
eCwgeSgpICsgdHksIHdpZHRoKCksIGhlaWdodCgpLCB0ZXh0U2hhZG93LCB0ZXh0U3Ryb2tlV2lk
dGggPiAwKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwYWludFRleHRXaXRoU2hhZG93
cyhjb250ZXh0LCBmb250LCB0ZXh0UnVuLCBlUG9zLCBzUG9zLCBsZW5ndGgsIHRleHRPcmlnaW4s
IG1feCArIHR4LCBtX3kgKyB0eSwgd2lkdGgoKSwgaGVpZ2h0KCksIHRleHRTaGFkb3csIHRleHRT
dHJva2VXaWR0aCA+IDApOworICAgICAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MoY29udGV4
dCwgZm9udCwgdGV4dFJ1biwgZVBvcywgc1BvcywgbGVuZ3RoLCB0ZXh0T3JpZ2luLCB4KCkgKyB0
eCwgeSgpICsgdHksIHdpZHRoKCksIGhlaWdodCgpLCB0ZXh0U2hhZG93LCB0ZXh0U3Ryb2tlV2lk
dGggPiAwKTsKIAogICAgICAgICBpZiAodGV4dFN0cm9rZVdpZHRoID4gMCkKICAgICAgICAgICAg
IGNvbnRleHQtPnJlc3RvcmUoKTsKQEAgLTU0MCw3ICs1MzgsNyBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKICAgICAgICAg
ICAgIGNvbnRleHQtPnNhdmUoKTsKIAogICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoY29u
dGV4dCwgc2VsZWN0aW9uRmlsbENvbG9yLCBzZWxlY3Rpb25TdHJva2VDb2xvciwgc2VsZWN0aW9u
U3Ryb2tlV2lkdGgsIHN0eWxlVG9Vc2UtPmNvbG9yU3BhY2UoKSk7Ci0gICAgICAgIHBhaW50VGV4
dFdpdGhTaGFkb3dzKGNvbnRleHQsIGZvbnQsIHRleHRSdW4sIHNQb3MsIGVQb3MsIGxlbmd0aCwg
dGV4dE9yaWdpbiwgbV94ICsgdHgsIG1feSArIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSwgc2VsZWN0
aW9uU2hhZG93LCBzZWxlY3Rpb25TdHJva2VXaWR0aCA+IDApOworICAgICAgICBwYWludFRleHRX
aXRoU2hhZG93cyhjb250ZXh0LCBmb250LCB0ZXh0UnVuLCBzUG9zLCBlUG9zLCBsZW5ndGgsIHRl
eHRPcmlnaW4sIHgoKSArIHR4LCB5KCkgKyB0eSwgd2lkdGgoKSwgaGVpZ2h0KCksIHNlbGVjdGlv
blNoYWRvdywgc2VsZWN0aW9uU3Ryb2tlV2lkdGggPiAwKTsKIAogICAgICAgICBpZiAoc2VsZWN0
aW9uU3Ryb2tlV2lkdGggPiAwKQogICAgICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpAQCAt
NjMzLDEwICs2MzEsMTAgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBSZW4KICAgICAgICAgZVBvcyA9
IGxlbmd0aDsKICAgICB9CiAKLSAgICBjb250ZXh0LT5jbGlwKEludFJlY3QobV94ICsgdHgsIHkg
KyB0eSwgbV93aWR0aCwgaCkpOworICAgIGNvbnRleHQtPmNsaXAoSW50UmVjdCh4KCkgKyB0eCwg
eSArIHR5LCBtX3dpZHRoLCBoKSk7CiAgICAgY29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQo
Zm9udCwgVGV4dFJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgsIHRleHRSZW5kZXJlcigpLT5hbGxvd1Rh
YnMoKSwgdGV4dFBvcygpLCBtX3RvQWRkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkaXJlY3Rpb24oKSA9PSBSVEwsIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGUtPnZpc3VhbGx5
T3JkZXJlZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludCht
X3ggKyB0eCwgeSArIHR5KSwgaCwgYywgc3R5bGUtPmNvbG9yU3BhY2UoKSwgc1BvcywgZVBvcyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQoeCgpICsgdHgsIHkg
KyB0eSksIGgsIGMsIHN0eWxlLT5jb2xvclNwYWNlKCksIHNQb3MsIGVQb3MpOwogICAgIGNvbnRl
eHQtPnJlc3RvcmUoKTsKIH0KIApAQCAtNjU5LDcgKzY1Nyw3IEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBp
bnQgdHgsCiAgICAgaW50IGggPSBzZWxlY3Rpb25IZWlnaHQoKTsKICAgICBjb250ZXh0LT5kcmF3
SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBUZXh0UnVuKHRleHRSZW5kZXJlcigpLT50ZXh0KCktPmNo
YXJhY3RlcnMoKSArIG1fc3RhcnQsIG1fbGVuLCB0ZXh0UmVuZGVyZXIoKS0+YWxsb3dUYWJzKCks
IHRleHRQb3MoKSwgbV90b0FkZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aXJlY3Rpb24oKSA9PSBSVEwsIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGUtPnZpc3VhbGx5T3JkZXJl
ZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChtX3ggKyB0
eCwgeSArIHR5KSwgaCwgYywgc3R5bGUtPmNvbG9yU3BhY2UoKSwgc1BvcywgZVBvcyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQoeCgpICsgdHgsIHkgKyB0eSks
IGgsIGMsIHN0eWxlLT5jb2xvclNwYWNlKCksIHNQb3MsIGVQb3MpOwogICAgIGNvbnRleHQtPnJl
c3RvcmUoKTsKIH0KIApAQCAtNjg1LDggKzY4Myw4IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFp
bnRDdXN0b21IaWdobGlnaHQoaW50IHR4LCBpbnQgdHksIGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
CiAKIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgaW50IHR4LCBpbnQgdHksIGludCBkZWNvLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3cpCiB7Ci0gICAgdHggKz0gbV94OwotICAgIHR5ICs9IG1feTsKKyAgICB0eCArPSB4KCk7Cisg
ICAgdHkgKz0geSgpOwogCiAgICAgaWYgKG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24p
CiAgICAgICAgIHJldHVybjsKQEAgLTc5Nyw3ICs3OTUsNyBAQCB2b2lkIElubGluZVRleHRCb3g6
OnBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgaW50IHR4
LCBpbgogICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBtaW48aW50PihlbmRQb3NpdGlvbiwgbV90
cnVuY2F0aW9uKTsKIAogICAgICAgICAvLyBDYWxjdWxhdGUgc3RhcnQgJiB3aWR0aAotICAgICAg
ICBJbnRQb2ludCBzdGFydFBvaW50KHR4ICsgbV94LCB0eSArIHNlbGVjdGlvblRvcCgpKTsKKyAg
ICAgICAgSW50UG9pbnQgc3RhcnRQb2ludCh0eCArIGxlZnQoKSwgdHkgKyBzZWxlY3Rpb25Ub3Ao
KSk7CiAgICAgICAgIFRleHRSdW4gcnVuKHRleHRSZW5kZXJlcigpLT50ZXh0KCktPmNoYXJhY3Rl
cnMoKSArIG1fc3RhcnQsIG1fbGVuLCB0ZXh0UmVuZGVyZXIoKS0+YWxsb3dUYWJzKCksIHRleHRQ
b3MoKSwgbV90b0FkZCwgZGlyZWN0aW9uKCkgPT0gUlRMLCBtX2Rpck92ZXJyaWRlIHx8IHN0eWxl
LT52aXN1YWxseU9yZGVyZWQoKSk7CiAgICAgICAgIGludCBoID0gc2VsZWN0aW9uSGVpZ2h0KCk7
CiAgICAgICAgIApAQCAtODMxLDcgKzgyOSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRT
cGVsbGluZ09yR3JhbW1hck1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBpbnQgdHgsIGluCiAg
ICAgICAgIC8vIEluIGxhcmdlciBmb250cywgdGhvdWdoLCBwbGFjZSB0aGUgdW5kZXJsaW5lIHVw
IG5lYXIgdGhlIGJhc2VsaW5lIHRvIHByZXZlbnQgYSBiaWcgZ2FwLgogICAgICAgICB1bmRlcmxp
bmVPZmZzZXQgPSBiYXNlbGluZSArIDI7CiAgICAgfQotICAgIHB0LT5kcmF3TGluZUZvck1pc3Nw
ZWxsaW5nT3JCYWRHcmFtbWFyKEludFBvaW50KHR4ICsgbV94ICsgc3RhcnQsIHR5ICsgbV95ICsg
dW5kZXJsaW5lT2Zmc2V0KSwgd2lkdGgsIGdyYW1tYXIpOworICAgIHB0LT5kcmF3TGluZUZvck1p
c3NwZWxsaW5nT3JCYWRHcmFtbWFyKEludFBvaW50KHR4ICsgbGVmdCgpICsgc3RhcnQsIHR5ICsg
dG9wKCkgKyB1bmRlcmxpbmVPZmZzZXQpLCB3aWR0aCwgZ3JhbW1hcik7CiB9CiAKIHZvaWQgSW5s
aW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgaW50
IHR4LCBpbnQgdHksIGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIsIFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgRm9udCYgZm9udCkKQEAgLTg0Niw3ICs4NDQsNyBAQCB2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGludCB0eCwg
aW50IHR5LCBjbwogICAgIFRleHRSdW4gcnVuKHRleHRSZW5kZXJlcigpLT50ZXh0KCktPmNoYXJh
Y3RlcnMoKSArIG1fc3RhcnQsIG1fbGVuLCB0ZXh0UmVuZGVyZXIoKS0+YWxsb3dUYWJzKCksIHRl
eHRQb3MoKSwgbV90b0FkZCwgZGlyZWN0aW9uKCkgPT0gUlRMLCBtX2Rpck92ZXJyaWRlIHx8IHN0
eWxlLT52aXN1YWxseU9yZGVyZWQoKSk7CiAgICAgCiAgICAgLy8gQWx3YXlzIGNvbXB1dGUgYW5k
IHN0b3JlIHRoZSByZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hcmtlci4gVGhlIGNvbXB1dGVk
IHJlY3QgaXMgaW4gYWJzb2x1dGUgY29vcmRpbmF0ZXMuCi0gICAgSW50UmVjdCBtYXJrZXJSZWN0
ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1biwgSW50UG9p
bnQobV94LCB5KSwgaCwgc1BvcywgZVBvcykpOworICAgIEludFJlY3QgbWFya2VyUmVjdCA9IGVu
Y2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIEludFBvaW50KGxl
ZnQoKSwgeSksIGgsIHNQb3MsIGVQb3MpKTsKICAgICBtYXJrZXJSZWN0ID0gcmVuZGVyZXIoKS0+
bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobWFya2VyUmVjdCkpLmVuY2xvc2luZ0JvdW5k
aW5nQm94KCk7CiAgICAgcmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5zZXRSZW5k
ZXJlZFJlY3RGb3JNYXJrZXIocmVuZGVyZXIoKS0+bm9kZSgpLCBtYXJrZXIsIG1hcmtlclJlY3Qp
OwogICAgICAKQEAgLTg1Nyw4ICs4NTUsOCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4
dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGludCB0eCwgaW50IHR5LCBjbwogICAg
ICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+cGxhdGZvcm1JbmFjdGl2ZVRleHRTZWFyY2hI
aWdobGlnaHRDb2xvcigpOwogICAgICAgICBwdC0+c2F2ZSgpOwogICAgICAgICB1cGRhdGVHcmFw
aGljc0NvbnRleHQocHQsIGNvbG9yLCBjb2xvciwgMCwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7ICAv
LyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQotICAgICAgICBwdC0+Y2xpcChJbnRSZWN0KHR4ICsg
bV94LCB0eSArIHksIG1fd2lkdGgsIGgpKTsKLSAgICAgICAgcHQtPmRyYXdIaWdobGlnaHRGb3JU
ZXh0KGZvbnQsIHJ1biwgSW50UG9pbnQobV94ICsgdHgsIHkgKyB0eSksIGgsIGNvbG9yLCBzdHls
ZS0+Y29sb3JTcGFjZSgpLCBzUG9zLCBlUG9zKTsKKyAgICAgICAgcHQtPmNsaXAoSW50UmVjdCh0
eCArIGxlZnQoKSwgdHkgKyB5LCBtX3dpZHRoLCBoKSk7CisgICAgICAgIHB0LT5kcmF3SGlnaGxp
Z2h0Rm9yVGV4dChmb250LCBydW4sIEludFBvaW50KGxlZnQoKSArIHR4LCB5ICsgdHkpLCBoLCBj
b2xvciwgc3R5bGUtPmNvbG9yU3BhY2UoKSwgc1BvcywgZVBvcyk7CiAgICAgICAgIHB0LT5yZXN0
b3JlKCk7CiAgICAgfQogfQpAQCAtODcyLDcgKzg3MCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6
Y29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihpbnQgLyp0eCovLCBpbnQgLyp0eSovLCBj
b25zCiAgICAgaW50IHNQb3MgPSBtYXgobWFya2VyLnN0YXJ0T2Zmc2V0IC0gbV9zdGFydCwgKHVu
c2lnbmVkKTApOwogICAgIGludCBlUG9zID0gbWluKG1hcmtlci5lbmRPZmZzZXQgLSBtX3N0YXJ0
LCAodW5zaWduZWQpbV9sZW4pOyAgICAKICAgICBUZXh0UnVuIHJ1bih0ZXh0UmVuZGVyZXIoKS0+
dGV4dCgpLT5jaGFyYWN0ZXJzKCkgKyBtX3N0YXJ0LCBtX2xlbiwgdGV4dFJlbmRlcmVyKCktPmFs
bG93VGFicygpLCB0ZXh0UG9zKCksIG1fdG9BZGQsIGRpcmVjdGlvbigpID09IFJUTCwgbV9kaXJP
dmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCkpOwotICAgIEludFBvaW50IHN0YXJ0
UG9pbnQgPSBJbnRQb2ludChtX3gsIHkpOworICAgIEludFBvaW50IHN0YXJ0UG9pbnQgPSBJbnRQ
b2ludChsZWZ0KCksIHkpOwogICAgIAogICAgIC8vIENvbXB1dGUgYW5kIHN0b3JlIHRoZSByZWN0
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hcmtlci4KICAgICBJbnRSZWN0IG1hcmtlclJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBzdGFydFBvaW50
LCBoLCBzUG9zLCBlUG9zKSk7CkBAIC05NDQsOCArOTQyLDggQEAgdm9pZCBJbmxpbmVUZXh0Qm94
OjpwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQqIHB0LCBpbnQgdHgsIGludCB0
eSwgUmUKIAogdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKEdy
YXBoaWNzQ29udGV4dCogY3R4LCBpbnQgdHgsIGludCB0eSwgY29uc3QgQ29tcG9zaXRpb25VbmRl
cmxpbmUmIHVuZGVybGluZSkKIHsKLSAgICB0eCArPSBtX3g7Ci0gICAgdHkgKz0gbV95OworICAg
IHR4ICs9IGxlZnQoKTsKKyAgICB0eSArPSB0b3AoKTsKIAogICAgIGlmIChtX3RydW5jYXRpb24g
PT0gY0Z1bGxUcnVuY2F0aW9uKQogICAgICAgICByZXR1cm47CkBAIC0xMDI0LDcgKzEwMjIsNyBA
QCBpbnQgSW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24oaW50IF94LCBib29sIGluY2x1
ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0
eWxlKG1fZmlyc3RMaW5lKTsKICAgICBjb25zdCBGb250KiBmID0gJnN0eWxlLT5mb250KCk7CiAg
ICAgcmV0dXJuIGYtPm9mZnNldEZvclBvc2l0aW9uKFRleHRSdW4odGV4dFJlbmRlcmVyKCktPnRl
eHQoKS0+Y2hhcmFjdGVycygpICsgbV9zdGFydCwgbV9sZW4sIHRleHRSZW5kZXJlcigpLT5hbGxv
d1RhYnMoKSwgdGV4dFBvcygpLCBtX3RvQWRkLCBkaXJlY3Rpb24oKSA9PSBSVEwsIG1fZGlyT3Zl
cnJpZGUgfHwgc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX3ggLSBtX3gsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX3ggLSBsZWZ0KCksIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsK
IH0KIAogaW50IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KGludCBvZmZzZXQpIGNv
bnN0CkBAIC0xMDMzLDcgKzEwMzEsNyBAQCBpbnQgSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JP
ZmZzZXQoaW50IG9mZnNldCkgY29uc3QKICAgICBBU1NFUlQob2Zmc2V0IDw9IG1fc3RhcnQgKyBt
X2xlbik7CiAKICAgICBpZiAoaXNMaW5lQnJlYWsoKSkKLSAgICAgICAgcmV0dXJuIG1feDsKKyAg
ICAgICAgcmV0dXJuIGxlZnQoKTsKIAogICAgIFJlbmRlclRleHQqIHRleHQgPSB0b1JlbmRlclRl
eHQocmVuZGVyZXIoKSk7CiAgICAgY29uc3QgRm9udCYgZiA9IHRleHQtPnN0eWxlKG1fZmlyc3RM
aW5lKS0+Zm9udCgpOwpAQCAtMTA0MSw3ICsxMDM5LDcgQEAgaW50IElubGluZVRleHRCb3g6OnBv
c2l0aW9uRm9yT2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0CiAgICAgaW50IHRvID0gZGlyZWN0aW9u
KCkgPT0gUlRMID8gbV9sZW4gOiBvZmZzZXQgLSBtX3N0YXJ0OwogICAgIC8vIEZJWE1FOiBEbyB3
ZSBuZWVkIHRvIGFkZCByaWdodEJlYXJpbmcgaGVyZT8KICAgICByZXR1cm4gZW5jbG9zaW5nSW50
UmVjdChmLnNlbGVjdGlvblJlY3RGb3JUZXh0KFRleHRSdW4odGV4dC0+dGV4dCgpLT5jaGFyYWN0
ZXJzKCkgKyBtX3N0YXJ0LCBtX2xlbiwgdGV4dFJlbmRlcmVyKCktPmFsbG93VGFicygpLCB0ZXh0
UG9zKCksIG1fdG9BZGQsIGRpcmVjdGlvbigpID09IFJUTCwgbV9kaXJPdmVycmlkZSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludCht
X3gsIDApLCAwLCBmcm9tLCB0bykpLnJpZ2h0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChsZWZ0KCksIDApLCAwLCBmcm9tLCB0
bykpLnJpZ2h0KCk7CiB9CiAKIGJvb2wgSW5saW5lVGV4dEJveDo6Y29udGFpbnNDYXJldE9mZnNl
dChpbnQgb2Zmc2V0KSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCmluZGV4IDdkODI4
ZjMzZmZkMTZhMmQxMDhmYWMzOTExNzZkMDUxNzdhNDZlNWEuLjBiMzkyNzBkYWI5MWZmZTM0YTFh
Yjg5ODAzNjA5ODg2Y2ZjMDkyZGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKQEAgLTM1
LDcgKzM1LDcgQEAgY29uc3QgdW5zaWduZWQgc2hvcnQgY0Z1bGxUcnVuY2F0aW9uID0gVVNIUlRf
TUFYIC0gMTsKIAogLy8gSGVscGVyIGZ1bmN0aW9ucyBzaGFyZWQgYnkgSW5saW5lVGV4dEJveCAv
IFNWR1Jvb3RJbmxpbmVCb3gKIHZvaWQgdXBkYXRlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvciwg
ZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBDb2xvclNwYWNlKTsKLUNvbG9yIGNvcnJlY3RlZFRleHRD
b2xvcihDb2xvciB0ZXh0Q29sb3IsIENvbG9yIGJhY2tncm91bmRDb2xvcik7CitDb2xvciBjb3Jy
ZWN0ZWRUZXh0Q29sb3IoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3ImIGJhY2tn
cm91bmRDb2xvcik7CiAKIGNsYXNzIElubGluZVRleHRCb3ggOiBwdWJsaWMgSW5saW5lQm94IHsK
IHB1YmxpYzoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCAwZmMyNzllY2JmYzViZTI0
ZjdhZDYyMTZmYWMzYzI0MmQ1YzM2ZjdlLi45MjhkM2E5MjI4YzgzYThjZmM5OWMwMGIyMDI3MDkz
ZTA2YmJmMDE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
KysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0zOTkyLDcgKzM5OTIs
NyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnRXaXRoSW5s
aW5lQ2hpbGRyZW4oY29uc3QgSW50UG9pbnQmCiAgICAgICAgIH0KIAogICAgICAgICAvLyBwYXNz
IHRoZSBib3ggYSB5IHBvc2l0aW9uIHRoYXQgaXMgaW5zaWRlIGl0Ci0gICAgICAgIHJldHVybiBj
bG9zZXN0Qm94LT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KEludFBvaW50KHBvaW50SW5D
b250ZW50cy54KCksIGNsb3Nlc3RCb3gtPm1feSkpOworICAgICAgICByZXR1cm4gY2xvc2VzdEJv
eC0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChJbnRQb2ludChwb2ludEluQ29udGVudHMu
eCgpLCBjbG9zZXN0Qm94LT50b3AoKSkpOwogICAgIH0KIAogICAgIGlmIChsYXN0Um9vdEJveFdp
dGhDaGlsZHJlbikgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCBkYTE1MmIwNTM1ODQ4
YjVjYmM3YjRhNTEyZDY0ZGI0MDJmZTBjYzkzLi40N2NjOTQ1ZjBmZGI4NzUxNjI5ZmE2Njg5Mzhm
Mzg1ZjFlZjdkYWM3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNw
cAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcApAQCAtMzgzLDEzICszODMs
MTMgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3Qg
SW50UG9pbnQmIHBvaW50KQogICAgIGludCBvZmZzZXQ7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGJlIGFibGUgdG8gcm9sbCB0aGVzZSBzcGVjaWFsIGNhc2VzIGludG8gdGhlIGdlbmVyYWwg
Y2FzZXMgaW4gdGhlIGxvb3AgYmVsb3cuCi0gICAgaWYgKGZpcnN0VGV4dEJveCgpICYmIHBvaW50
LnkoKSA8ICBmaXJzdFRleHRCb3goKS0+cm9vdCgpLT5saW5lQm90dG9tKCkgJiYgcG9pbnQueCgp
IDwgZmlyc3RUZXh0Qm94KCktPm1feCkgeworICAgIGlmIChmaXJzdFRleHRCb3goKSAmJiBwb2lu
dC55KCkgPCAgZmlyc3RUZXh0Qm94KCktPnJvb3QoKS0+bGluZUJvdHRvbSgpICYmIHBvaW50Lngo
KSA8IGZpcnN0VGV4dEJveCgpLT5sZWZ0KCkpIHsKICAgICAgICAgLy8gYXQgdGhlIHkgY29vcmRp
bmF0ZSBvZiB0aGUgZmlyc3QgbGluZSBvciBhYm92ZQogICAgICAgICAvLyBhbmQgdGhlIHggY29v
cmRpbmF0ZSBpcyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3QgdGV4dCBib3ggbGVmdCBlZGdlCiAg
ICAgICAgIG9mZnNldCA9IGZpcnN0VGV4dEJveCgpLT5vZmZzZXRGb3JQb3NpdGlvbihwb2ludC54
KCkpOwogICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKG9mZnNldCArIGZpcnN0
VGV4dEJveCgpLT5zdGFydCgpLCBET1dOU1RSRUFNKTsKICAgICB9Ci0gICAgaWYgKGxhc3RUZXh0
Qm94KCkgJiYgcG9pbnQueSgpID49IGxhc3RUZXh0Qm94KCktPnJvb3QoKS0+bGluZVRvcCgpICYm
IHBvaW50LngoKSA+PSBsYXN0VGV4dEJveCgpLT5tX3ggKyBsYXN0VGV4dEJveCgpLT5tX3dpZHRo
KSB7CisgICAgaWYgKGxhc3RUZXh0Qm94KCkgJiYgcG9pbnQueSgpID49IGxhc3RUZXh0Qm94KCkt
PnJvb3QoKS0+bGluZVRvcCgpICYmIHBvaW50LngoKSA+PSBsYXN0VGV4dEJveCgpLT5yaWdodCgp
KSB7CiAgICAgICAgIC8vIGF0IHRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGxhc3QgbGluZSBvciBi
ZWxvdwogICAgICAgICAvLyBhbmQgdGhlIHggY29vcmRpbmF0ZSBpcyB0byB0aGUgcmlnaHQgb2Yg
dGhlIGxhc3QgdGV4dCBib3ggcmlnaHQgZWRnZQogICAgICAgICBvZmZzZXQgPSBsYXN0VGV4dEJv
eCgpLT5vZmZzZXRGb3JQb3NpdGlvbihwb2ludC54KCkpOwpAQCAtNDAzLDE3ICs0MDMsMTcgQEAg
VmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9p
bnQmIHBvaW50KQogICAgICAgICAgICAgaWYgKHBvaW50LnkoKSA8IGJvdHRvbSkgewogICAgICAg
ICAgICAgICAgIG9mZnNldCA9IGJveC0+b2Zmc2V0Rm9yUG9zaXRpb24ocG9pbnQueCgpKTsKIAot
ICAgICAgICAgICAgICAgIGlmIChwb2ludC54KCkgPT0gYm94LT5tX3gpCisgICAgICAgICAgICAg
ICAgaWYgKHBvaW50LngoKSA9PSBib3gtPmxlZnQoKSkKICAgICAgICAgICAgICAgICAgICAgLy8g
dGhlIHggY29vcmRpbmF0ZSBpcyBlcXVhbCB0byB0aGUgbGVmdCBlZGdlIG9mIHRoaXMgYm94CiAg
ICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhZmZpbml0eSBtdXN0IGJlIGRvd25zdHJlYW0gc28g
dGhlIHBvc2l0aW9uIGRvZXNuJ3QganVtcCBiYWNrIHRvIHRoZSBwcmV2aW91cyBsaW5lCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24ob2Zmc2V0ICsgYm94
LT5zdGFydCgpLCBET1dOU1RSRUFNKTsKIAotICAgICAgICAgICAgICAgIGlmIChwb2ludC54KCkg
PCBib3gtPm1feCArIGJveC0+bV93aWR0aCkKKyAgICAgICAgICAgICAgICBpZiAocG9pbnQueCgp
IDwgYm94LT5yaWdodCgpKQogICAgICAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIHggY29vcmRp
bmF0ZSBpcyB0byB0aGUgbGVmdCBvZiB0aGUgcmlnaHQgZWRnZSBvZiB0aGlzIGJveAogICAgICAg
ICAgICAgICAgICAgICAvLyBjaGVjayB0byBzZWUgaWYgcG9zaXRpb24gZ29lcyBpbiB0aGlzIGJv
eAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKG9mZnNl
dCArIGJveC0+c3RhcnQoKSwgb2Zmc2V0ID4gMCA/IFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFIDog
RE9XTlNUUkVBTSk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIWJveC0+cHJldk9uTGluZSgpICYm
IHBvaW50LngoKSA8IGJveC0+bV94KQorICAgICAgICAgICAgICAgIGlmICghYm94LT5wcmV2T25M
aW5lKCkgJiYgcG9pbnQueCgpIDwgYm94LT5sZWZ0KCkpCiAgICAgICAgICAgICAgICAgICAgIC8v
IGJveCBpcyBmaXJzdCBvbiBsaW5lCiAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgeCBj
b29yZGluYXRlIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCB0ZXh0IGJveCBsZWZ0IGVkZ2UK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihvZmZzZXQg
KyBib3gtPnN0YXJ0KCksIERPV05TVFJFQU0pOwpAQCAtODczLDE0ICs4NzMsMTQgQEAgSW50UG9p
bnQgUmVuZGVyVGV4dDo6Zmlyc3RSdW5PcmlnaW4oKSBjb25zdAogCiBpbnQgUmVuZGVyVGV4dDo6
Zmlyc3RSdW5YKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9maXJzdFRleHRCb3ggPyBtX2ZpcnN0
VGV4dEJveC0+bV94IDogMDsKKyAgICByZXR1cm4gbV9maXJzdFRleHRCb3ggPyBtX2ZpcnN0VGV4
dEJveC0+eCgpIDogMDsKIH0KIAogaW50IFJlbmRlclRleHQ6OmZpcnN0UnVuWSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fZmlyc3RUZXh0Qm94ID8gbV9maXJzdFRleHRCb3gtPm1feSA6IDA7Cisg
ICAgcmV0dXJuIG1fZmlyc3RUZXh0Qm94ID8gbV9maXJzdFRleHRCb3gtPnkoKSA6IDA7CiB9Ci0g
ICAgCisKIHZvaWQgUmVuZGVyVGV4dDo6c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUg
c3RhdGUpCiB7CiAgICAgSW5saW5lVGV4dEJveCogYm94OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcAppbmRleCBlMTBjMmYxY2RlNjcxNTM2ZDcxODQxN2YxY2U1MDZjOGY5ZTEw
ODMxLi5mMjA5MjVhNWIxZjIzOWE0MDc4MmY2N2MxMGFiMDRkYzc4ZmFlNzU3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtMzk2LDEwICszOTYsMTAgQEAgdm9pZCBS
ZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9iamVjdChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
UmVuZGVyT2JqZWN0JiBvLAogc3RhdGljIHZvaWQgd3JpdGVUZXh0UnVuKFRleHRTdHJlYW0mIHRz
LCBjb25zdCBSZW5kZXJUZXh0JiBvLCBjb25zdCBJbmxpbmVUZXh0Qm94JiBydW4pCiB7CiAgICAg
Ly8gRklYTUU6IFRhYmxlIGNlbGwgYWRqdXN0bWVudCBpcyB0ZW1wb3JhcnkgdW50aWwgcmVzdWx0
cyBjYW4gYmUgdXBkYXRlZC4KLSAgICBpbnQgeSA9IHJ1bi5tX3k7CisgICAgaW50IHkgPSBydW4u
eSgpOwogICAgIGlmIChvLmNvbnRhaW5pbmdCbG9jaygpLT5pc1RhYmxlQ2VsbCgpKQogICAgICAg
ICB5IC09IHRvUmVuZGVyVGFibGVDZWxsKG8uY29udGFpbmluZ0Jsb2NrKCkpLT5pbnRyaW5zaWNQ
YWRkaW5nVG9wKCk7Ci0gICAgdHMgPDwgInRleHQgcnVuIGF0ICgiIDw8IHJ1bi5tX3ggPDwgIiwi
IDw8IHkgPDwgIikgd2lkdGggIiA8PCBydW4ubV93aWR0aDsKKyAgICB0cyA8PCAidGV4dCBydW4g
YXQgKCIgPDwgcnVuLngoKSA8PCAiLCIgPDwgeSA8PCAiKSB3aWR0aCAiIDw8IHJ1bi5tX3dpZHRo
OwogICAgIGlmIChydW4uZGlyZWN0aW9uKCkgPT0gUlRMIHx8IHJ1bi5tX2Rpck92ZXJyaWRlKSB7
CiAgICAgICAgIHRzIDw8IChydW4uZGlyZWN0aW9uKCkgPT0gUlRMID8gIiBSVEwiIDogIiBMVFIi
KTsKICAgICAgICAgaWYgKHJ1bi5tX2Rpck92ZXJyaWRlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5l
Qm94LmNwcAppbmRleCBiZWMyODhjMzIzMTQ3MzYwZGY5NTRiN2NmNzZkMzUwNTM4MTAwM2NhLi42
NTI2NDFhODliNGIwZWM5ZmI3YzY3YjY2OWM2OTlkNjhiNWNkMTQzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
b290SW5saW5lQm94LmNwcApAQCAtOTUsOCArOTUsOCBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OnBs
YWNlRWxsaXBzaXMoY29uc3QgQXRvbWljU3RyaW5nJiBlbGxpcHNpc1N0ciwgIGJvb2wgbHRyLCBp
bgogICAgIHNldEhhc0VsbGlwc2lzQm94KHRydWUpOwogCiAgICAgLy8gRklYTUU6IERvIHdlIG5l
ZWQgYW4gUlRMIHZlcnNpb24gb2YgdGhpcz8KLSAgICBpZiAobHRyICYmICh4KCkgKyB3aWR0aCgp
ICsgZWxsaXBzaXNXaWR0aCkgPD0gYmxvY2tSaWdodEVkZ2UpIHsKLSAgICAgICAgZWxsaXBzaXNC
b3gtPm1feCA9IHgoKSArIHdpZHRoKCk7CisgICAgaWYgKGx0ciAmJiAocmlnaHQoKSArIGVsbGlw
c2lzV2lkdGgpIDw9IGJsb2NrUmlnaHRFZGdlKSB7CisgICAgICAgIGVsbGlwc2lzQm94LT5zZXRY
KHJpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDQsNyArMTA0LDcgQEAg
dm9pZCBSb290SW5saW5lQm94OjpwbGFjZUVsbGlwc2lzKGNvbnN0IEF0b21pY1N0cmluZyYgZWxs
aXBzaXNTdHIsICBib29sIGx0ciwgaW4KICAgICAvLyBvZiB0aGF0IGdseXBoLiAgTWFyayBhbGwg
b2YgdGhlIG9iamVjdHMgdGhhdCBpbnRlcnNlY3QgdGhlIGVsbGlwc2lzIGJveCBhcyBub3QgcGFp
bnRpbmcgKGFzIGJlaW5nCiAgICAgLy8gdHJ1bmNhdGVkKS4KICAgICBib29sIGZvdW5kQm94ID0g
ZmFsc2U7Ci0gICAgZWxsaXBzaXNCb3gtPm1feCA9IHBsYWNlRWxsaXBzaXNCb3gobHRyLCBibG9j
a0xlZnRFZGdlLCBibG9ja1JpZ2h0RWRnZSwgZWxsaXBzaXNXaWR0aCwgZm91bmRCb3gpOworICAg
IGVsbGlwc2lzQm94LT5zZXRYKHBsYWNlRWxsaXBzaXNCb3gobHRyLCBibG9ja0xlZnRFZGdlLCBi
bG9ja1JpZ2h0RWRnZSwgZWxsaXBzaXNXaWR0aCwgZm91bmRCb3gpKTsKIH0KIAogaW50IFJvb3RJ
bmxpbmVCb3g6OnBsYWNlRWxsaXBzaXNCb3goYm9vbCBsdHIsIGludCBibG9ja0xlZnRFZGdlLCBp
bnQgYmxvY2tSaWdodEVkZ2UsIGludCBlbGxpcHNpc1dpZHRoLCBib29sJiBmb3VuZEJveCkKQEAg
LTM3NSwxMiArMzc1LDEyIEBAIElubGluZUJveCogUm9vdElubGluZUJveDo6Y2xvc2VzdExlYWZD
aGlsZEZvclhQb3MoaW50IHgsIGJvb2wgb25seUVkaXRhYmxlTGVhdmVzCiAgICAgICAgIHJldHVy
biBmaXJzdExlYWY7CiAKICAgICAvLyBBdm9pZCByZXR1cm5pbmcgYSBsaXN0IG1hcmtlciB3aGVu
IHBvc3NpYmxlLgotICAgIGlmICh4IDw9IGZpcnN0TGVhZi0+bV94ICYmICFmaXJzdExlYWYtPnJl
bmRlcmVyKCktPmlzTGlzdE1hcmtlcigpICYmICghb25seUVkaXRhYmxlTGVhdmVzIHx8IGlzRWRp
dGFibGVMZWFmKGZpcnN0TGVhZikpKQorICAgIGlmICh4IDw9IGZpcnN0TGVhZi0+bGVmdCgpICYm
ICFmaXJzdExlYWYtPnJlbmRlcmVyKCktPmlzTGlzdE1hcmtlcigpICYmICghb25seUVkaXRhYmxl
TGVhdmVzIHx8IGlzRWRpdGFibGVMZWFmKGZpcnN0TGVhZikpKQogICAgICAgICAvLyBUaGUgeCBj
b29yZGluYXRlIGlzIGxlc3Mgb3IgZXF1YWwgdG8gbGVmdCBlZGdlIG9mIHRoZSBmaXJzdExlYWYu
CiAgICAgICAgIC8vIFJldHVybiBpdC4KICAgICAgICAgcmV0dXJuIGZpcnN0TGVhZjsKIAotICAg
IGlmICh4ID49IGxhc3RMZWFmLT5tX3ggKyBsYXN0TGVhZi0+bV93aWR0aCAmJiAhbGFzdExlYWYt
PnJlbmRlcmVyKCktPmlzTGlzdE1hcmtlcigpICYmICghb25seUVkaXRhYmxlTGVhdmVzIHx8IGlz
RWRpdGFibGVMZWFmKGxhc3RMZWFmKSkpCisgICAgaWYgKHggPj0gbGFzdExlYWYtPnJpZ2h0KCkg
JiYgIWxhc3RMZWFmLT5yZW5kZXJlcigpLT5pc0xpc3RNYXJrZXIoKSAmJiAoIW9ubHlFZGl0YWJs
ZUxlYXZlcyB8fCBpc0VkaXRhYmxlTGVhZihsYXN0TGVhZikpKQogICAgICAgICAvLyBUaGUgeCBj
b29yZGluYXRlIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gcmlnaHQgZWRnZSBvZiB0aGUgbGFzdExl
YWYuCiAgICAgICAgIC8vIFJldHVybiBpdC4KICAgICAgICAgcmV0dXJuIGxhc3RMZWFmOwpAQCAt
Mzg5LDcgKzM4OSw3IEBAIElubGluZUJveCogUm9vdElubGluZUJveDo6Y2xvc2VzdExlYWZDaGls
ZEZvclhQb3MoaW50IHgsIGJvb2wgb25seUVkaXRhYmxlTGVhdmVzCiAgICAgZm9yIChJbmxpbmVC
b3gqIGxlYWYgPSBmaXJzdExlYWY7IGxlYWY7IGxlYWYgPSBsZWFmLT5uZXh0TGVhZkNoaWxkKCkp
IHsKICAgICAgICAgaWYgKCFsZWFmLT5yZW5kZXJlcigpLT5pc0xpc3RNYXJrZXIoKSAmJiAoIW9u
bHlFZGl0YWJsZUxlYXZlcyB8fCBpc0VkaXRhYmxlTGVhZihsZWFmKSkpIHsKICAgICAgICAgICAg
IGNsb3Nlc3RMZWFmID0gbGVhZjsKLSAgICAgICAgICAgIGlmICh4IDwgbGVhZi0+bV94ICsgbGVh
Zi0+bV93aWR0aCkKKyAgICAgICAgICAgIGlmICh4IDwgbGVhZi0+cmlnaHQoKSkKICAgICAgICAg
ICAgICAgICAvLyBUaGUgeCBjb29yZGluYXRlIGlzIGxlc3MgdGhhbiB0aGUgcmlnaHQgZWRnZSBv
ZiB0aGUgYm94LgogICAgICAgICAgICAgICAgIC8vIFJldHVybiBpdC4KICAgICAgICAgICAgICAg
ICByZXR1cm4gbGVhZjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZVRl
eHRCb3guaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guaAppbmRleCA3NzEx
ZGI0MzFjYTc0ZDRiMTc4N2Q5NjcxNDMxNmQ5NjQ5ZDYxMDUzLi4yOTA2NDI5MjFmOGRmNDI2OGZj
NWY4ZTM5NmU5Yzk2NGY4ODUyNjhmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9TVkdJ
bmxpbmVUZXh0Qm94LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5o
CkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCB2aXJ0dWFsSGVpZ2h0
KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KICAgICB2b2lkIHNldEhlaWdodChpbnQgaGVp
Z2h0KSB7IG1faGVpZ2h0ID0gaGVpZ2h0OyB9CiAKLSAgICB2aXJ0dWFsIGludCBzZWxlY3Rpb25U
b3AoKSB7IHJldHVybiBtX3k7IH0KKyAgICB2aXJ0dWFsIGludCBzZWxlY3Rpb25Ub3AoKSB7IHJl
dHVybiB0b3AoKTsgfQogICAgIHZpcnR1YWwgaW50IHNlbGVjdGlvbkhlaWdodCgpIHsgcmV0dXJu
IG1faGVpZ2h0OyB9CiAgICAgdmlydHVhbCBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oaW50IHgsIGJv
b2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMgPSB0cnVlKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBw
b3NpdGlvbkZvck9mZnNldChpbnQgb2Zmc2V0KSBjb25zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92637</attachid>
            <date>2011-05-06 14:22:26 -0700</date>
            <delta_ts>2011-06-02 16:03:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44412-20110506142225.patch</filename>
            <type>text/plain</type>
            <size>22645</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1OTc1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAKKzIwMTEtMDUtMDYgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRlYWNoIElubGluZUJveCBhYm91dCBGbG9hdFBvaW50Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDQxMgorCisg
ICAgICAgIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWMgU2VpZGVsLiBVcGRhdGVkIGJ5IG1lLgorCisg
ICAgICAgIFRoaXMgaXMgYW5vdGhlciBzdGVwIHRvd2FyZHMgbW9yZSBJbnRQb2ludC9JbnRTaXpl
CisgICAgICAgIHVzYWdlIHRocm91Z2hvdXQgdGhlIHJlbmRlcmluZyB0cmVlLgorCisgICAgICAg
IEFkZGVkIGxlZnQoKSwgcmlnaHQoKSwgdG9wKCksIGFuZCBib3R0b20oKSBtZXRob2RzCisgICAg
ICAgIHRvIElubGluZUJveCBhbmQgZGVwbG95ZWQgdGhlbSB0aHJvdWdob3V0IHRoZSBjb2RlLgor
ICAgICAgICBSZW1vdmVkIG1feCwgYW5kIG1feSBhbmQgcmVwbGFjZWQgdGhlbSB3aXRoIGEKKyAg
ICAgICAgc2luZ2xlIG1fdG9wTGVmdCBtZW1iZXIuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNp
bmNlIHRoaXMgaXMganVzdCBhIHJlZmFjdG9yaW5nLgorCisgICAgICAgICogcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6c2VsZWN0aW9uUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNC
b3guaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpFbGxpcHNpc0JveCk6CisgICAg
ICAgICogcmVuZGVyaW5nL0lubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVC
b3g6OmFkanVzdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6Y2FuQWNj
b21tb2RhdGVFbGxpcHNpcyk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUJveC5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpJbmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lQm94OjpzZXRYKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6eCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OmxlZnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
Qm94OjpzZXRZKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6eSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVCb3g6OnRvcCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnRv
cExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpyaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVCb3g6OmJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6
OmxvZ2ljYWxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6c2V0TG9naWNhbExl
ZnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94Ojpsb2dpY2FsVG9wKToKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZUJveDo6c2V0TG9naWNhbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVCb3g6OmxvZ2ljYWxGcmFtZVJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVG
bG93Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpmcmFtZVJlY3RJbmNs
dWRpbmdMaW5lSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwbGFjZUVsbGlwc2lzQm94KToKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRN
YXJrZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHQ6OmZpcnN0UnVuWCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
ZXh0OjpmaXJzdFJ1blkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlVGV4dFJ1bik6CisgICAgICAgICogcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6cGxh
Y2VFbGxpcHNpcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uVG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9vdElubGlu
ZUJveDo6Y2xvc2VzdExlYWZDaGlsZEZvclBvc2l0aW9uKToKKwogMjAxMS0wNS0wNiAgQWRhbSBC
YXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2Vp
ZGVsLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCShyZXZp
c2lvbiA4NTg3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludAogCiAgICAgY29uc3QgU3RyaW5nJiBzdHIgPSBtX3N0cjsKICAgICAv
LyBGSVhNRTogV2h5IGlzIHRoaXMgYWx3YXN5IExUUj8KLSAgICBjb250ZXh0LT5kcmF3VGV4dChz
dHlsZS0+Zm9udCgpLCBUZXh0UnVuKHN0ci5jaGFyYWN0ZXJzKCksIHN0ci5sZW5ndGgoKSwgZmFs
c2UsIDAsIDAsIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24sIExUUiwgc3R5bGUtPnZp
c3VhbGx5T3JkZXJlZCgpKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgc3R5bGUtPmZv
bnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKKyAgICBjb250ZXh0LT5kcmF3VGV4dChzdHlsZS0+Zm9u
dCgpLCBUZXh0UnVuKHN0ci5jaGFyYWN0ZXJzKCksIHN0ci5sZW5ndGgoKSwgZmFsc2UsIDAsIDAs
IFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24sIExUUiwgc3R5bGUtPnZpc3VhbGx5T3Jk
ZXJlZCgpKSwgSW50UG9pbnQoeCgpICsgdHgsIHkoKSArIHR5ICsgc3R5bGUtPmZvbnRNZXRyaWNz
KCkuYXNjZW50KCkpKTsKIAogICAgIC8vIFJlc3RvcmUgdGhlIHJlZ3VsYXIgZmlsbCBjb2xvci4K
ICAgICBpZiAodGV4dENvbG9yICE9IGNvbnRleHQtPmZpbGxDb2xvcigpKQpAQCAtNjUsOCArNjUs
OCBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludChQYWludEluZm8mIHBhaW50CiAKICAgICBpZiAo
bV9tYXJrdXBCb3gpIHsKICAgICAgICAgLy8gUGFpbnQgdGhlIG1hcmt1cCBib3gKLSAgICAgICAg
dHggKz0gbV94ICsgbV9sb2dpY2FsV2lkdGggLSBtX21hcmt1cEJveC0+eCgpOwotICAgICAgICB0
eSArPSBtX3kgKyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIChtX21hcmt1cEJveC0+
eSgpICsgbV9tYXJrdXBCb3gtPnJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udE1l
dHJpY3MoKS5hc2NlbnQoKSk7CisgICAgICAgIHR4ICs9IHJpZ2h0KCkgLSBtX21hcmt1cEJveC0+
eCgpOworICAgICAgICB0eSArPSB0b3AoKSArIHN0eWxlLT5mb250TWV0cmljcygpLmFzY2VudCgp
IC0gKG1fbWFya3VwQm94LT55KCkgKyBtX21hcmt1cEJveC0+cmVuZGVyZXIoKS0+c3R5bGUobV9m
aXJzdExpbmUpLT5mb250TWV0cmljcygpLmFzY2VudCgpKTsKICAgICAgICAgbV9tYXJrdXBCb3gt
PnBhaW50KHBhaW50SW5mbywgdHgsIHR5LCBsaW5lVG9wLCBsaW5lQm90dG9tKTsKICAgICB9CiB9
CkBAIC03Nyw3ICs3Nyw3IEBAIEludFJlY3QgRWxsaXBzaXNCb3g6OnNlbGVjdGlvblJlY3QoaW50
IHQKICAgICBjb25zdCBGb250JiBmID0gc3R5bGUtPmZvbnQoKTsKICAgICAvLyBGSVhNRTogV2h5
IGlzIHRoaXMgYWx3YXlzIExUUj8KICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChmLnNlbGVj
dGlvblJlY3RGb3JUZXh0KFRleHRSdW4obV9zdHIuY2hhcmFjdGVycygpLCBtX3N0ci5sZW5ndGgo
KSwgZmFsc2UsIDAsIDAsIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24sIExUUiwgc3R5
bGUtPnZpc3VhbGx5T3JkZXJlZCgpKSwKLSAgICAgICAgICAgIEludFBvaW50KG1feCArIHR4LCBt
X3kgKyB0eSArIHJvb3QoKS0+c2VsZWN0aW9uVG9wKCkpLCByb290KCktPnNlbGVjdGlvbkhlaWdo
dCgpKSk7CisgICAgICAgICAgICBJbnRQb2ludCh4KCkgKyB0eCwgeSgpICsgdHkgKyByb290KCkt
PnNlbGVjdGlvblRvcCgpKSwgcm9vdCgpLT5zZWxlY3Rpb25IZWlnaHQoKSkpOwogfQogCiB2b2lk
IEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGlu
dCB0eCwgaW50IHR5LCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCkBAIC05
MywxOCArOTMsMTggQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpYwog
ICAgICAgICBjID0gQ29sb3IoMHhmZiAtIGMucmVkKCksIDB4ZmYgLSBjLmdyZWVuKCksIDB4ZmYg
LSBjLmJsdWUoKSk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
KmNvbnRleHQpOwotICAgIGludCB5ID0gcm9vdCgpLT5zZWxlY3Rpb25Ub3AoKTsKLSAgICBpbnQg
aCA9IHJvb3QoKS0+c2VsZWN0aW9uSGVpZ2h0KCk7Ci0gICAgY29udGV4dC0+Y2xpcChJbnRSZWN0
KG1feCArIHR4LCB5ICsgdHksIG1fbG9naWNhbFdpZHRoLCBoKSk7CisgICAgaW50IHRvcCA9IHJv
b3QoKS0+c2VsZWN0aW9uVG9wKCk7CisgICAgaW50IGhlaWdodCA9IHJvb3QoKS0+c2VsZWN0aW9u
SGVpZ2h0KCk7CisgICAgY29udGV4dC0+Y2xpcChJbnRSZWN0KHgoKSArIHR4LCB0b3AgKyB0eSwg
bV9sb2dpY2FsV2lkdGgsIGhlaWdodCkpOwogICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBhbHdh
eXMgTFRSPwogICAgIGNvbnRleHQtPmRyYXdIaWdobGlnaHRGb3JUZXh0KGZvbnQsIFRleHRSdW4o
bV9zdHIuY2hhcmFjdGVycygpLCBtX3N0ci5sZW5ndGgoKSwgZmFsc2UsIDAsIDAsIFRleHRSdW46
OkFsbG93VHJhaWxpbmdFeHBhbnNpb24sIExUUiwgc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpKSwK
LSAgICAgICAgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgeSksIGgsIGMsIHN0eWxlLT5j
b2xvclNwYWNlKCkpOworICAgICAgICBJbnRQb2ludCh4KCkgKyB0eCwgeSgpICsgdHkgKyB0b3Ap
LCBoZWlnaHQsIGMsIHN0eWxlLT5jb2xvclNwYWNlKCkpOwogfQogCiBib29sIEVsbGlwc2lzQm94
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50
IGxpbmVCb3R0b20pCiB7Ci0gICAgdHggKz0gbV94OwotICAgIHR5ICs9IG1feTsKKyAgICB0eCAr
PSBsZWZ0KCk7CisgICAgdHkgKz0gdG9wKCk7CiAKICAgICAvLyBIaXQgdGVzdCB0aGUgbWFya3Vw
IGJveC4KICAgICBpZiAobV9tYXJrdXBCb3gpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FbGxpcHNpc0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FbGxpcHNpc0JveC5oCShyZXZpc2lvbiA4NTg3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FbGxpcHNpc0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIGNsYXNz
IEVsbGlwc2lzQm94IDogcHVibGljIElubGluZUJveCB7CiBwdWJsaWM6CiAgICAgRWxsaXBzaXNC
b3goUmVuZGVyT2JqZWN0KiBvYmosIGNvbnN0IEF0b21pY1N0cmluZyYgZWxsaXBzaXNTdHIsIElu
bGluZUZsb3dCb3gqIHBhcmVudCwKICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWln
aHQsIGludCB5LCBib29sIGZpcnN0TGluZSwgYm9vbCBpc1ZlcnRpY2FsLCBJbmxpbmVCb3gqIG1h
cmt1cEJveCkKLSAgICAgICAgOiBJbmxpbmVCb3gob2JqLCAwLCB5LCB3aWR0aCwgZmlyc3RMaW5l
LCB0cnVlLCBmYWxzZSwgZmFsc2UsIGlzVmVydGljYWwsIDAsIDAsIHBhcmVudCkKKyAgICAgICAg
OiBJbmxpbmVCb3gob2JqLCBGbG9hdFBvaW50KDAsIHkpLCB3aWR0aCwgZmlyc3RMaW5lLCB0cnVl
LCBmYWxzZSwgZmFsc2UsIGlzVmVydGljYWwsIDAsIDAsIHBhcmVudCkKICAgICAgICAgLCBtX2hl
aWdodChoZWlnaHQpCiAgICAgICAgICwgbV9zdHIoZWxsaXBzaXNTdHIpCiAgICAgICAgICwgbV9t
YXJrdXBCb3gobWFya3VwQm94KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJv
eC5jcHAJKHJldmlzaW9uIDg1ODc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw4ICsxODYsNyBAQCB2b2lkIElubGluZUJv
eDo6YXR0YWNoTGluZSgpCiAKIHZvaWQgSW5saW5lQm94OjphZGp1c3RQb3NpdGlvbihmbG9hdCBk
eCwgZmxvYXQgZHkpCiB7Ci0gICAgbV94ICs9IGR4OwotICAgIG1feSArPSBkeTsKKyAgICBtX3Rv
cExlZnQubW92ZShkeCwgZHkpOwogCiAgICAgaWYgKG1fcmVuZGVyZXItPmlzUmVwbGFjZWQoKSkg
CiAgICAgICAgIHRvUmVuZGVyQm94KG1fcmVuZGVyZXIpLT5tb3ZlKGR4LCBkeSk7IApAQCAtMzA2
LDcgKzMwNSw3IEBAIGJvb2wgSW5saW5lQm94OjpjYW5BY2NvbW1vZGF0ZUVsbGlwc2lzKGIKICAg
ICBpZiAoIW1fcmVuZGVyZXIgfHwgIW1fcmVuZGVyZXItPmlzUmVwbGFjZWQoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgCi0gICAgSW50UmVjdCBib3hSZWN0KG1feCwgMCwgbV9sb2dpY2Fs
V2lkdGgsIDEwKTsKKyAgICBJbnRSZWN0IGJveFJlY3QobGVmdCgpLCAwLCBtX2xvZ2ljYWxXaWR0
aCwgMTApOwogICAgIEludFJlY3QgZWxsaXBzaXNSZWN0KGx0ciA/IGJsb2NrRWRnZSAtIGVsbGlw
c2lzV2lkdGggOiBibG9ja0VkZ2UsIDAsIGVsbGlwc2lzV2lkdGgsIDEwKTsKICAgICByZXR1cm4g
IShib3hSZWN0LmludGVyc2VjdHMoZWxsaXBzaXNSZWN0KSk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUJveC5oCShyZXZpc2lvbiA4NTg3NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksNiBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9wcmV2KDApCiAgICAgICAgICwgbV9wYXJlbnQoMCkKICAgICAg
ICAgLCBtX3JlbmRlcmVyKG9iaikKLSAgICAgICAgLCBtX3goMCkKLSAgICAgICAgLCBtX3koMCkK
ICAgICAgICAgLCBtX2xvZ2ljYWxXaWR0aCgwKQogICAgICAgICAsIG1fZmlyc3RMaW5lKGZhbHNl
KQogICAgICAgICAsIG1fY29uc3RydWN0ZWQoZmFsc2UpCkBAIC02OCwxNCArNjYsMTMgQEAgcHVi
bGljOgogICAgIHsKICAgICB9CiAKLSAgICBJbmxpbmVCb3goUmVuZGVyT2JqZWN0KiBvYmosIGZs
b2F0IHgsIGZsb2F0IHksIGZsb2F0IGxvZ2ljYWxXaWR0aCwgYm9vbCBmaXJzdExpbmUsIGJvb2wg
Y29uc3RydWN0ZWQsCisgICAgSW5saW5lQm94KFJlbmRlck9iamVjdCogb2JqLCBGbG9hdFBvaW50
IHRvcExlZnQsIGZsb2F0IGxvZ2ljYWxXaWR0aCwgYm9vbCBmaXJzdExpbmUsIGJvb2wgY29uc3Ry
dWN0ZWQsCiAgICAgICAgICAgICAgIGJvb2wgZGlydHksIGJvb2wgZXh0cmFjdGVkLCBib29sIGlz
SG9yaXpvbnRhbCwgSW5saW5lQm94KiBuZXh0LCBJbmxpbmVCb3gqIHByZXYsIElubGluZUZsb3dC
b3gqIHBhcmVudCkKICAgICAgICAgOiBtX25leHQobmV4dCkKICAgICAgICAgLCBtX3ByZXYocHJl
dikKICAgICAgICAgLCBtX3BhcmVudChwYXJlbnQpCiAgICAgICAgICwgbV9yZW5kZXJlcihvYmop
Ci0gICAgICAgICwgbV94KHgpCi0gICAgICAgICwgbV95KHkpCisgICAgICAgICwgbV90b3BMZWZ0
KHRvcExlZnQpCiAgICAgICAgICwgbV9sb2dpY2FsV2lkdGgobG9naWNhbFdpZHRoKQogICAgICAg
ICAsIG1fZmlyc3RMaW5lKGZpcnN0TGluZSkKICAgICAgICAgLCBtX2NvbnN0cnVjdGVkKGNvbnN0
cnVjdGVkKQpAQCAtMjI2LDM4ICsyMjMsNDQgQEAgcHVibGljOgogICAgIFJvb3RJbmxpbmVCb3gq
IHJvb3QoKTsKIAogICAgIC8vIHgoKSBpcyB0aGUgbGVmdCBzaWRlIG9mIHRoZSBib3ggaW4gdGhl
IGNvbnRhaW5pbmcgYmxvY2sncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICB2b2lkIHNldFgoZmxv
YXQgeCkgeyBtX3ggPSB4OyB9Ci0gICAgZmxvYXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQor
ICAgIHZvaWQgc2V0WChmbG9hdCB4KSB7IG1fdG9wTGVmdC5zZXRYKHgpOyB9CisgICAgZmxvYXQg
eCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wTGVmdC54KCk7IH0KKyAgICBmbG9hdCBsZWZ0KCkgY29u
c3QgeyByZXR1cm4gbV90b3BMZWZ0LngoKTsgfQogCiAgICAgLy8geSgpIGlzIHRoZSB0b3Agc2lk
ZSBvZiB0aGUgYm94IGluIHRoZSBjb250YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBzeXN0ZW0u
Ci0gICAgdm9pZCBzZXRZKGZsb2F0IHkpIHsgbV95ID0geTsgfQotICAgIGZsb2F0IHkoKSBjb25z
dCB7IHJldHVybiBtX3k7IH0KKyAgICB2b2lkIHNldFkoZmxvYXQgeSkgeyBtX3RvcExlZnQuc2V0
WSh5KTsgfQorICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3RvcExlZnQueSgpOyB9Cisg
ICAgZmxvYXQgdG9wKCkgY29uc3QgeyByZXR1cm4gbV90b3BMZWZ0LnkoKTsgfQorCisgICAgY29u
c3QgRmxvYXRQb2ludCYgdG9wTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wTGVmdDsgfQogCiAg
ICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWwoKSA/IGxvZ2ljYWxX
aWR0aCgpIDogbG9naWNhbEhlaWdodCgpOyB9CiAgICAgZmxvYXQgaGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gaXNIb3Jpem9udGFsKCkgPyBsb2dpY2FsSGVpZ2h0KCkgOiBsb2dpY2FsV2lkdGgoKTsg
fQorICAgIGZsb2F0IHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbGVmdCgpICsgbG9naWNhbFdpZHRo
KCk7IH0KKyAgICBmbG9hdCBib3R0b20oKSBjb25zdCB7IHJldHVybiB0b3AoKSArIGxvZ2ljYWxI
ZWlnaHQoKTsgfQogCiAgICAgLy8gVGhlIGxvZ2ljYWxMZWZ0IHBvc2l0aW9uIGlzIHRoZSBsZWZ0
IGVkZ2Ugb2YgdGhlIGxpbmUgYm94IGluIGEgaG9yaXpvbnRhbCBsaW5lIGFuZCB0aGUgdG9wIGVk
Z2UgaW4gYSB2ZXJ0aWNhbCBsaW5lLgotICAgIGZsb2F0IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyBy
ZXR1cm4gaXNIb3Jpem9udGFsKCkgPyBtX3ggOiBtX3k7IH0KKyAgICBmbG9hdCBsb2dpY2FsTGVm
dCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gbV90b3BMZWZ0LngoKSA6IG1fdG9w
TGVmdC55KCk7IH0KICAgICBmbG9hdCBsb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBsb2dp
Y2FsTGVmdCgpICsgbG9naWNhbFdpZHRoKCk7IH0KICAgICB2b2lkIHNldExvZ2ljYWxMZWZ0KGZs
b2F0IGxlZnQpCiAgICAgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAgICAg
ICBtX3ggPSBsZWZ0OworICAgICAgICAgICAgc2V0WChsZWZ0KTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV95ID0gbGVmdDsKKyAgICAgICAgICAgIHNldFkobGVmdCk7CiAgICAgfQogICAg
IGludCBwaXhlbFNuYXBwZWRMb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMZWZ0
KCk7IH0KICAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4g
Y2VpbGYobG9naWNhbFJpZ2h0KCkpOyB9CiAKICAgICAvLyBUaGUgbG9naWNhbFRvcFsgcG9zaXRp
b24gaXMgdGhlIHRvcCBlZGdlIG9mIHRoZSBsaW5lIGJveCBpbiBhIGhvcml6b250YWwgbGluZSBh
bmQgdGhlIGxlZnQgZWRnZSBpbiBhIHZlcnRpY2FsIGxpbmUuCi0gICAgaW50IGxvZ2ljYWxUb3Ao
KSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWwoKSA/IG1feSA6IG1feDsgfQorICAgIGludCBs
b2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyBtX3RvcExlZnQueSgp
IDogbV90b3BMZWZ0LngoKTsgfQogICAgIGludCBsb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1
cm4gbG9naWNhbFRvcCgpICsgbG9naWNhbEhlaWdodCgpOyB9CiAgICAgdm9pZCBzZXRMb2dpY2Fs
VG9wKGludCB0b3ApCiAgICAgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAg
ICAgICBtX3kgPSB0b3A7CisgICAgICAgICAgICBzZXRZKHRvcCk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1feCA9IHRvcDsKKyAgICAgICAgICAgIHNldFgodG9wKTsKICAgICB9CiAKICAg
ICAvLyBUaGUgbG9naWNhbCB3aWR0aCBpcyBvdXIgZXh0ZW50IGluIHRoZSBsaW5lJ3Mgb3ZlcmFs
bCBpbmxpbmUgZGlyZWN0aW9uLCBpLmUuLCB3aWR0aCBmb3IgaG9yaXpvbnRhbCB0ZXh0IGFuZCBo
ZWlnaHQgZm9yIHZlcnRpY2FsIHRleHQuCkBAIC0yNjcsNyArMjcwLDcgQEAgcHVibGljOgogICAg
IC8vIFRoZSBsb2dpY2FsIGhlaWdodCBpcyBvdXIgZXh0ZW50IGluIHRoZSBibG9jayBmbG93IGRp
cmVjdGlvbiwgaS5lLiwgaGVpZ2h0IGZvciBob3Jpem9udGFsIHRleHQgYW5kIHdpZHRoIGZvciB2
ZXJ0aWNhbCB0ZXh0LgogICAgIGludCBsb2dpY2FsSGVpZ2h0KCkgY29uc3Q7CiAKLSAgICBGbG9h
dFJlY3QgbG9naWNhbEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8g
SW50UmVjdChtX3gsIG1feSwgbV9sb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQoKSkgOiBJbnRS
ZWN0KG1feSwgbV94LCBtX2xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCgpKTsgfQorICAgIEZs
b2F0UmVjdCBsb2dpY2FsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsKCkg
PyBJbnRSZWN0KG1fdG9wTGVmdC54KCksIG1fdG9wTGVmdC55KCksIG1fbG9naWNhbFdpZHRoLCBs
b2dpY2FsSGVpZ2h0KCkpIDogSW50UmVjdChtX3RvcExlZnQueSgpLCBtX3RvcExlZnQueCgpLCBt
X2xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCgpKTsgfQogCiAgICAgdmlydHVhbCBpbnQgYmFz
ZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlKSBjb25zdCB7IHJldHVybiBi
b3hNb2RlbE9iamVjdCgpLT5iYXNlbGluZVBvc2l0aW9uKGJhc2VsaW5lVHlwZSwgbV9maXJzdExp
bmUsIGlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0
aW9uT25Db250YWluaW5nTGluZSk7IH0KICAgICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KCkgY29u
c3QgeyByZXR1cm4gYm94TW9kZWxPYmplY3QoKS0+bGluZUhlaWdodChtX2ZpcnN0TGluZSwgaXNI
b3Jpem9udGFsKCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PbkNv
bnRhaW5pbmdMaW5lKTsgfQpAQCAtMzMwLDggKzMzMyw3IEBAIHByaXZhdGU6CiBwdWJsaWM6CiAg
ICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVyOwogCi0gICAgZmxvYXQgbV94OwotICAgIGZsb2F0
IG1feTsKKyAgICBGbG9hdFBvaW50IG1fdG9wTGVmdDsKICAgICBmbG9hdCBtX2xvZ2ljYWxXaWR0
aDsKICAgICAKICAgICAvLyBTb21lIG9mIHRoZXNlIGJpdHMgYXJlIGFjdHVhbGx5IGZvciBzdWJj
bGFzc2VzIGFuZCBtb3ZlZCBoZXJlIHRvIGNvbXBhY3QgdGhlIHN0cnVjdHVyZXMuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDg1ODc0KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5
KQpAQCAtMjU1LDggKzI1NSw4IEBAIHB1YmxpYzoKICAgICBGbG9hdFJlY3QgZnJhbWVSZWN0SW5j
bHVkaW5nTGluZUhlaWdodChpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pIGNvbnN0CiAgICAg
ewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KG1feCwgbGluZVRvcCwgd2lkdGgoKSwgbGluZUJvdHRvbSAtIGxpbmVUb3ApOwotICAgICAg
ICByZXR1cm4gRmxvYXRSZWN0KGxpbmVUb3AsIG1feSwgbGluZUJvdHRvbSAtIGxpbmVUb3AsIGhl
aWdodCgpKTsKKyAgICAgICAgICAgIHJldHVybiBGbG9hdFJlY3QobV90b3BMZWZ0LngoKSwgbGlu
ZVRvcCwgd2lkdGgoKSwgbGluZUJvdHRvbSAtIGxpbmVUb3ApOworICAgICAgICByZXR1cm4gRmxv
YXRSZWN0KGxpbmVUb3AsIG1fdG9wTGVmdC55KCksIGxpbmVCb3R0b20gLSBsaW5lVG9wLCBoZWln
aHQoKSk7CiAgICAgfQogICAgIAogICAgIEZsb2F0UmVjdCBsb2dpY2FsRnJhbWVSZWN0SW5jbHVk
aW5nTGluZUhlaWdodChpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiA4NTg3
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQ0LDggKzI0NCw4IEBAIGZsb2F0IElubGluZVRleHRCb3g6OnBsYWNlRWxs
aXBzaXNCb3goYm8KICAgICAvLyBDcml0ZXJpYSBmb3IgZnVsbCB0cnVuY2F0aW9uOgogICAgIC8v
IExUUjogdGhlIGxlZnQgZWRnZSBvZiB0aGUgZWxsaXBzaXMgaXMgdG8gdGhlIGxlZnQgb2Ygb3Vy
IHRleHQgcnVuLgogICAgIC8vIFJUTDogdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIGVsbGlwc2lzIGlz
IHRvIHRoZSByaWdodCBvZiBvdXIgdGV4dCBydW4uCi0gICAgYm9vbCBsdHJGdWxsVHJ1bmNhdGlv
biA9IGZsb3dJc0xUUiAmJiBlbGxpcHNpc1ggPD0gbV94OwotICAgIGJvb2wgcnRsRnVsbFRydW5j
YXRpb24gPSAhZmxvd0lzTFRSICYmIGVsbGlwc2lzWCA+PSAobV94ICsgbV9sb2dpY2FsV2lkdGgp
OworICAgIGJvb2wgbHRyRnVsbFRydW5jYXRpb24gPSBmbG93SXNMVFIgJiYgZWxsaXBzaXNYIDw9
IGxlZnQoKTsKKyAgICBib29sIHJ0bEZ1bGxUcnVuY2F0aW9uID0gIWZsb3dJc0xUUiAmJiBlbGxp
cHNpc1ggPj0gcmlnaHQoKTsKICAgICBpZiAobHRyRnVsbFRydW5jYXRpb24gfHwgcnRsRnVsbFRy
dW5jYXRpb24pIHsKICAgICAgICAgLy8gVG9vIGZhci4gIEp1c3Qgc2V0IGZ1bGwgdHJ1bmNhdGlv
biwgYnV0IHJldHVybiAtMSBhbmQgbGV0IHRoZSBlbGxpcHNpcyBqdXN0IGJlIHBsYWNlZCBhdCB0
aGUgZWRnZSBvZiB0aGUgYm94LgogICAgICAgICBtX3RydW5jYXRpb24gPSBjRnVsbFRydW5jYXRp
b247CkBAIC0yNTMsOCArMjUzLDggQEAgZmxvYXQgSW5saW5lVGV4dEJveDo6cGxhY2VFbGxpcHNp
c0JveChibwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgYm9vbCBsdHJFbGxpcHNp
c1dpdGhpbkJveCA9IGZsb3dJc0xUUiAmJiAoZWxsaXBzaXNYIDwgbV94ICsgbV9sb2dpY2FsV2lk
dGgpOwotICAgIGJvb2wgcnRsRWxsaXBzaXNXaXRoaW5Cb3ggPSAhZmxvd0lzTFRSICYmIChlbGxp
cHNpc1ggPiBtX3gpOworICAgIGJvb2wgbHRyRWxsaXBzaXNXaXRoaW5Cb3ggPSBmbG93SXNMVFIg
JiYgKGVsbGlwc2lzWCA8IHJpZ2h0KCkpOworICAgIGJvb2wgcnRsRWxsaXBzaXNXaXRoaW5Cb3gg
PSAhZmxvd0lzTFRSICYmIChlbGxpcHNpc1ggPiBsZWZ0KCkpOwogICAgIGlmIChsdHJFbGxpcHNp
c1dpdGhpbkJveCB8fCBydGxFbGxpcHNpc1dpdGhpbkJveCkgewogICAgICAgICBmb3VuZEJveCA9
IHRydWU7CiAKQEAgLTI2NSw3ICsyNjUsNyBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94OjpwbGFjZUVs
bGlwc2lzQm94KGJvCiAgICAgICAgIGlmIChsdHIgIT0gZmxvd0lzTFRSKSB7CiAgICAgICAgICAg
Ly8gV2lkdGggaW4gcGl4ZWxzIG9mIHRoZSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIGJveCwgZXhj
bHVkaW5nIHRoZSBlbGxpcHNpcy4KICAgICAgICAgICBpbnQgdmlzaWJsZUJveFdpZHRoID0gdmlz
aWJsZVJpZ2h0RWRnZSAtIHZpc2libGVMZWZ0RWRnZSAgLSBlbGxpcHNpc1dpZHRoOwotICAgICAg
ICAgIGVsbGlwc2lzWCA9IGx0ciA/IG1feCArIHZpc2libGVCb3hXaWR0aCA6IG1feCArIG1fbG9n
aWNhbFdpZHRoIC0gdmlzaWJsZUJveFdpZHRoOworICAgICAgICAgIGVsbGlwc2lzWCA9IGx0ciA/
IGxlZnQoKSArIHZpc2libGVCb3hXaWR0aCA6IHJpZ2h0KCkgLSB2aXNpYmxlQm94V2lkdGg7CiAg
ICAgICAgIH0KIAogICAgICAgICBpbnQgb2Zmc2V0ID0gb2Zmc2V0Rm9yUG9zaXRpb24oZWxsaXBz
aXNYLCBmYWxzZSk7CkBAIC0yNzMsNyArMjczLDcgQEAgZmxvYXQgSW5saW5lVGV4dEJveDo6cGxh
Y2VFbGxpcHNpc0JveChibwogICAgICAgICAgICAgLy8gTm8gY2hhcmFjdGVycyBzaG91bGQgYmUg
cmVuZGVyZWQuICBTZXQgb3Vyc2VsdmVzIHRvIGZ1bGwgdHJ1bmNhdGlvbiBhbmQgcGxhY2UgdGhl
IGVsbGlwc2lzIGF0IHRoZSBtaW4gb2Ygb3VyIHN0YXJ0CiAgICAgICAgICAgICAvLyBhbmQgdGhl
IGVsbGlwc2lzIGVkZ2UuCiAgICAgICAgICAgICBtX3RydW5jYXRpb24gPSBjRnVsbFRydW5jYXRp
b247Ci0gICAgICAgICAgICByZXR1cm4gbWluKGVsbGlwc2lzWCwgbV94KTsKKyAgICAgICAgICAg
IHJldHVybiBtaW4oZWxsaXBzaXNYLCB4KCkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gU2V0
IHRoZSB0cnVuY2F0aW9uIGluZGV4IG9uIHRoZSB0ZXh0IHJ1bi4KQEAgLTI4OSw5ICsyODksOSBA
QCBmbG9hdCBJbmxpbmVUZXh0Qm94OjpwbGFjZUVsbGlwc2lzQm94KGJvCiAgICAgICAgIC8vIGUu
Zy4gSW4gdGhlIGNhc2Ugb2YgYW4gTFRSIGlubGluZSBib3ggdHJ1bmNhdGVkIGluIGFuIFJUTCBm
bG93IHRoZW4gd2UgY2FuCiAgICAgICAgIC8vIGhhdmUgYSBzaXR1YXRpb24gc3VjaCBhcyB8SGVs
bG98IC0+IHwuLi5IZXwKICAgICAgICAgaWYgKGZsb3dJc0xUUikKLSAgICAgICAgICAgIHJldHVy
biBtX3ggKyB3aWR0aE9mVmlzaWJsZVRleHQ7CisgICAgICAgICAgICByZXR1cm4gbGVmdCgpICsg
d2lkdGhPZlZpc2libGVUZXh0OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gKG1f
eCArIG1fbG9naWNhbFdpZHRoKSAtIHdpZHRoT2ZWaXNpYmxlVGV4dCAtIGVsbGlwc2lzV2lkdGg7
CisgICAgICAgICAgICByZXR1cm4gcmlnaHQoKSAtIHdpZHRoT2ZWaXNpYmxlVGV4dCAtIGVsbGlw
c2lzV2lkdGg7CiAgICAgfQogICAgIHJldHVybiAtMTsKIH0KQEAgLTEwNTgsNyArMTA1OCw3IEBA
IHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIKICAgICBUZXh0UnVuIHJ1
bih0ZXh0UmVuZGVyZXIoKS0+dGV4dCgpLT5jaGFyYWN0ZXJzKCkgKyBtX3N0YXJ0LCBtX2xlbiwg
dGV4dFJlbmRlcmVyKCktPmFsbG93VGFicygpLCB0ZXh0UG9zKCksIG1fZXhwYW5zaW9uLCBleHBh
bnNpb25CZWhhdmlvcigpLCBkaXJlY3Rpb24oKSwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlz
dWFsbHlPcmRlcmVkKCkpOwogICAgIAogICAgIC8vIEFsd2F5cyBjb21wdXRlIGFuZCBzdG9yZSB0
aGUgcmVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYXJrZXIuIFRoZSBjb21wdXRlZCByZWN0IGlz
IGluIGFic29sdXRlIGNvb3JkaW5hdGVzLgotICAgIEludFJlY3QgbWFya2VyUmVjdCA9IGVuY2xv
c2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIEludFBvaW50KG1feCwg
c2VsZWN0aW9uVG9wKCkpLCBzZWxIZWlnaHQsIHNQb3MsIGVQb3MpKTsKKyAgICBJbnRSZWN0IG1h
cmtlclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQocnVu
LCBJbnRQb2ludCh4KCksIHNlbGVjdGlvblRvcCgpKSwgc2VsSGVpZ2h0LCBzUG9zLCBlUG9zKSk7
CiAgICAgbWFya2VyUmVjdCA9IHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRS
ZWN0KG1hcmtlclJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAgIHJlbmRlcmVyKCkt
PmRvY3VtZW50KCktPm1hcmtlcnMoKS0+c2V0UmVuZGVyZWRSZWN0Rm9yTWFya2VyKHJlbmRlcmVy
KCktPm5vZGUoKSwgbWFya2VyLCBtYXJrZXJSZWN0KTsKICAgICAKQEAgLTEwODMsNyArMTA4Myw3
IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWMKICAgICBpbnQgc1Bv
cyA9IG1heChtYXJrZXIuc3RhcnRPZmZzZXQgLSBtX3N0YXJ0LCAodW5zaWduZWQpMCk7CiAgICAg
aW50IGVQb3MgPSBtaW4obWFya2VyLmVuZE9mZnNldCAtIG1fc3RhcnQsICh1bnNpZ25lZCltX2xl
bik7ICAgIAogICAgIFRleHRSdW4gcnVuKHRleHRSZW5kZXJlcigpLT50ZXh0KCktPmNoYXJhY3Rl
cnMoKSArIG1fc3RhcnQsIG1fbGVuLCB0ZXh0UmVuZGVyZXIoKS0+YWxsb3dUYWJzKCksIHRleHRQ
b3MoKSwgbV9leHBhbnNpb24sIGV4cGFuc2lvbkJlaGF2aW9yKCksIGRpcmVjdGlvbigpLCBtX2Rp
ck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxseU9yZGVyZWQoKSk7Ci0gICAgSW50UG9pbnQgc3Rh
cnRQb2ludCA9IEludFBvaW50KG1feCwgeSk7CisgICAgSW50UG9pbnQgc3RhcnRQb2ludCA9IElu
dFBvaW50KHgoKSwgeSk7CiAgICAgCiAgICAgLy8gQ29tcHV0ZSBhbmQgc3RvcmUgdGhlIHJlY3Qg
YXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFya2VyLgogICAgIEludFJlY3QgbWFya2VyUmVjdCA9IGVu
Y2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHN0YXJ0UG9pbnQs
IGgsIHNQb3MsIGVQb3MpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5jcHAJKHJldmlzaW9uIDg1ODc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzQsMTIgKzk3NCwxMiBAQCBGbG9hdFBvaW50
IFJlbmRlclRleHQ6OmZpcnN0UnVuT3JpZ2luKCkgCiAKIGZsb2F0IFJlbmRlclRleHQ6OmZpcnN0
UnVuWCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZmlyc3RUZXh0Qm94ID8gbV9maXJzdFRleHRC
b3gtPm1feCA6IDA7CisgICAgcmV0dXJuIG1fZmlyc3RUZXh0Qm94ID8gbV9maXJzdFRleHRCb3gt
PngoKSA6IDA7CiB9CiAKIGZsb2F0IFJlbmRlclRleHQ6OmZpcnN0UnVuWSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fZmlyc3RUZXh0Qm94ID8gbV9maXJzdFRleHRCb3gtPm1feSA6IDA7CisgICAg
cmV0dXJuIG1fZmlyc3RUZXh0Qm94ID8gbV9maXJzdFRleHRCb3gtPnkoKSA6IDA7CiB9CiAgICAg
CiB2b2lkIFJlbmRlclRleHQ6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHN0YXRl
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cAkocmV2aXNpb24gODU4NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NCw5ICs0OTQsOSBAQCBzdGF0aWMgdm9p
ZCB3cml0ZVRleHRSdW4oVGV4dFN0cmVhbSYgdHMsCiB7CiAgICAgLy8gRklYTUU6IEZvciBub3cg
dXNlIGFuICJlbmNsb3NpbmdJbnRSZWN0IiBtb2RlbCBmb3IgeCwgeSBhbmQgbG9naWNhbFdpZHRo
LCBhbHRob3VnaCB0aGlzIG1ha2VzIGl0IGhhcmRlcgogICAgIC8vIHRvIGRldGVjdCBhbnkgY2hh
bmdlcyBjYXVzZWQgYnkgdGhlIGNvbnZlcnNpb24gdG8gZmxvYXRpbmcgcG9pbnQuIDooCi0gICAg
aW50IHggPSBydW4ubV94OwotICAgIGludCB5ID0gcnVuLm1feTsKLSAgICBpbnQgbG9naWNhbFdp
ZHRoID0gY2VpbGYocnVuLm1feCArIHJ1bi5tX2xvZ2ljYWxXaWR0aCkgLSB4OworICAgIGludCB4
ID0gcnVuLngoKTsKKyAgICBpbnQgeSA9IHJ1bi55KCk7CisgICAgaW50IGxvZ2ljYWxXaWR0aCA9
IGNlaWxmKHJ1bi5yaWdodCgpKSAtIHg7CiAKICAgICAvLyBGSVhNRTogVGFibGUgY2VsbCBhZGp1
c3RtZW50IGlzIHRlbXBvcmFyeSB1bnRpbCByZXN1bHRzIGNhbiBiZSB1cGRhdGVkLgogICAgIGlm
IChvLmNvbnRhaW5pbmdCbG9jaygpLT5pc1RhYmxlQ2VsbCgpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gODU4NzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNCw3ICsxMTQsNyBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OnBsYWNlRWxsaXBzaXMoY29uc3Qg
CiAKICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCBhbiBSVEwgdmVyc2lvbiBvZiB0aGlzPwogICAg
IGlmIChsdHIgJiYgKHgoKSArIGxvZ2ljYWxXaWR0aCgpICsgZWxsaXBzaXNXaWR0aCkgPD0gYmxv
Y2tSaWdodEVkZ2UpIHsKLSAgICAgICAgZWxsaXBzaXNCb3gtPm1feCA9IHgoKSArIGxvZ2ljYWxX
aWR0aCgpOworICAgICAgICBlbGxpcHNpc0JveC0+c2V0WCh4KCkgKyBsb2dpY2FsV2lkdGgoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIFJvb3RJ
bmxpbmVCb3g6OnBsYWNlRWxsaXBzaXMoY29uc3QgCiAgICAgLy8gb2YgdGhhdCBnbHlwaC4gIE1h
cmsgYWxsIG9mIHRoZSBvYmplY3RzIHRoYXQgaW50ZXJzZWN0IHRoZSBlbGxpcHNpcyBib3ggYXMg
bm90IHBhaW50aW5nIChhcyBiZWluZwogICAgIC8vIHRydW5jYXRlZCkuCiAgICAgYm9vbCBmb3Vu
ZEJveCA9IGZhbHNlOwotICAgIGVsbGlwc2lzQm94LT5tX3ggPSBwbGFjZUVsbGlwc2lzQm94KGx0
ciwgYmxvY2tMZWZ0RWRnZSwgYmxvY2tSaWdodEVkZ2UsIGVsbGlwc2lzV2lkdGgsIGZvdW5kQm94
KTsKKyAgICBlbGxpcHNpc0JveC0+c2V0WChwbGFjZUVsbGlwc2lzQm94KGx0ciwgYmxvY2tMZWZ0
RWRnZSwgYmxvY2tSaWdodEVkZ2UsIGVsbGlwc2lzV2lkdGgsIGZvdW5kQm94KSk7CiB9CiAKIGZs
b2F0IFJvb3RJbmxpbmVCb3g6OnBsYWNlRWxsaXBzaXNCb3goYm9vbCBsdHIsIGZsb2F0IGJsb2Nr
TGVmdEVkZ2UsIGZsb2F0IGJsb2NrUmlnaHRFZGdlLCBmbG9hdCBlbGxpcHNpc1dpZHRoLCBib29s
JiBmb3VuZEJveCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
VGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUZXh0LmNwcAkocmV2aXNpb24gODU4NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNyArMjIxLDcg
QEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclNWR1RleHQ6OnBvc2l0aW9uRgogICAgIGlmICghY2xv
c2VzdEJveCkKICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbigwLCBET1dOU1RS
RUFNKTsKIAotICAgIHJldHVybiBjbG9zZXN0Qm94LT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBv
aW50KEludFBvaW50KHBvaW50SW5Db250ZW50cy54KCksIGNsb3Nlc3RCb3gtPm1feSkpOworICAg
IHJldHVybiBjbG9zZXN0Qm94LT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KEludFBvaW50
KHBvaW50SW5Db250ZW50cy54KCksIGNsb3Nlc3RCb3gtPnkoKSkpOwogfQogCiB2b2lkIFJlbmRl
clNWR1RleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgJKHJl
dmlzaW9uIDg1ODc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVU
ZXh0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgaW50IHZpcnR1YWxMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2Fs
SGVpZ2h0OyB9CiAgICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0KGludCBoZWlnaHQpIHsgbV9sb2dp
Y2FsSGVpZ2h0ID0gaGVpZ2h0OyB9CiAKLSAgICB2aXJ0dWFsIGludCBzZWxlY3Rpb25Ub3AoKSB7
IHJldHVybiBtX3k7IH0KKyAgICB2aXJ0dWFsIGludCBzZWxlY3Rpb25Ub3AoKSB7IHJldHVybiB0
b3AoKTsgfQogICAgIHZpcnR1YWwgaW50IHNlbGVjdGlvbkhlaWdodCgpIHsgcmV0dXJuIG1fbG9n
aWNhbEhlaWdodDsgfQogICAgIHZpcnR1YWwgaW50IG9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHgs
IGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMgPSB0cnVlKSBjb25zdDsKICAgICB2aXJ0dWFsIGZs
b2F0IHBvc2l0aW9uRm9yT2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lv
biA4NTg3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNSwxMyArMjE1LDEzIEBAIElubGluZUJveCogU1ZH
Um9vdElubGluZUJveDo6Y2xvc2VzdExlYWYKICAgICBmb3IgKElubGluZUJveCogbGVhZiA9IGZp
cnN0TGVhZjsgbGVhZjsgbGVhZiA9IGxlYWYtPm5leHRMZWFmQ2hpbGQoKSkgewogICAgICAgICBp
ZiAoIWxlYWYtPmlzU1ZHSW5saW5lVGV4dEJveCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGlmIChwb2ludC55KCkgPCBsZWFmLT5tX3kpCisgICAgICAgIGlmIChwb2ludC55KCkg
PCBsZWFmLT55KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHBvaW50Lnko
KSA+IGxlYWYtPm1feSArIGxlYWYtPnZpcnR1YWxMb2dpY2FsSGVpZ2h0KCkpCisgICAgICAgIGlm
IChwb2ludC55KCkgPiBsZWFmLT55KCkgKyBsZWFmLT52aXJ0dWFsTG9naWNhbEhlaWdodCgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgY2xvc2VzdExlYWYgPSBsZWFmOwotICAg
ICAgICBpZiAocG9pbnQueCgpIDwgbGVhZi0+bV94ICsgbGVhZi0+bV9sb2dpY2FsV2lkdGgpCisg
ICAgICAgIGlmIChwb2ludC54KCkgPCBsZWFmLT5yaWdodCgpKQogICAgICAgICAgICAgcmV0dXJu
IGxlYWY7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95828</attachid>
            <date>2011-06-02 16:03:56 -0700</date>
            <delta_ts>2011-06-02 16:49:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44412-20110602160355.patch</filename>
            <type>text/plain</type>
            <size>23052</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3OTUwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMDYtMDIgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRlYWNoIElubGluZUJveCBhYm91dCBGbG9hdFBvaW50Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDQxMgorCisg
ICAgICAgIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWMgU2VpZGVsLiBVcGRhdGVkIGJ5IG1lLgorCisg
ICAgICAgIFRoaXMgaXMgYW5vdGhlciBzdGVwIHRvd2FyZHMgbW9yZSBwb2ludC9zaXplCisgICAg
ICAgIHVzYWdlIHRocm91Z2hvdXQgdGhlIHJlbmRlcmluZyB0cmVlLgorCisgICAgICAgIEFkZGVk
IGxlZnQoKSwgcmlnaHQoKSwgdG9wKCksIGFuZCBib3R0b20oKSBtZXRob2RzCisgICAgICAgIHRv
IElubGluZUJveC4gUmVtb3ZlZCBtX3gsIGFuZCBtX3kgYW5kIHJlcGxhY2VkIHRoZW0KKyAgICAg
ICAgd2l0aCBhIHNpbmdsZSBtX3RvcExlZnQgbWVtYmVyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cyBzaW5jZSB0aGlzIGlzIGp1c3QgYSByZWZhY3RvcmluZy4KKworICAgICAgICAqIHJlbmRlcmlu
Zy9FbGxpcHNpc0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6cGFpbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6OnNlbGVjdGlvblJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsbGlwc2lzQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlw
c2lzQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6RWxsaXBzaXNCb3gpOgor
ICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lQm94OjphZGp1c3RQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OmNh
bkFjY29tbW9kYXRlRWxsaXBzaXMpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guaDoK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6SW5saW5lQm94KToKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZUJveDo6c2V0WCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OngpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpsZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZUJveDo6c2V0WSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnkpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lQm94Ojp0b3ApOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94
Ojp0b3BMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6cmlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lQm94Ojpib3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
Qm94Ojpsb2dpY2FsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnNldExvZ2lj
YWxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6bG9naWNhbFRvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnNldExvZ2ljYWxUb3ApOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lQm94Ojpsb2dpY2FsRnJhbWVSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5s
aW5lRmxvd0JveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6ZnJhbWVSZWN0
SW5jbHVkaW5nTGluZUhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGxhY2VFbGxpcHNpc0JveCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcik6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpjb21wdXRlUmVjdEZvclJlcGxhY2Vt
ZW50TWFya2VyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0OjpmaXJzdFJ1blgpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dDo6Zmlyc3RSdW5ZKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRleHRSdW4pOgorICAgICAgICAqIHJlbmRl
cmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6
OnBsYWNlRWxsaXBzaXMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojpwb3NpdGlvbkZvclBvaW50KToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblRvcCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJ
bmxpbmVCb3g6OmNsb3Nlc3RMZWFmQ2hpbGRGb3JQb3NpdGlvbik6CisKIDIwMTEtMDYtMDIgIEFs
b2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgSmFtZXMgUm9iaW5zb24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBz
aXNCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNp
c0JveC5jcHAJKHJldmlzaW9uIDg3OTUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCB2b2lkIEVsbGlw
c2lzQm94OjpwYWludChQYWludEluZm8mIHBhaW50CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFdo
eSBpcyB0aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJlY3QgdGV4dCBydW4gZmxh
Z3MgYmVsb3cuCi0gICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgUmVuZGVyQmxvY2s6OmNvbnN0
cnVjdFRleHRSdW4ocmVuZGVyZXIoKSwgZm9udCwgbV9zdHIsIHN0eWxlLCBUZXh0UnVuOjpBbGxv
d1RyYWlsaW5nRXhwYW5zaW9uKSwgSW50UG9pbnQobV94ICsgcGFpbnRPZmZzZXQueCgpLCBtX3kg
KyBwYWludE9mZnNldC55KCkgKyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSkpOworICAg
IGNvbnRleHQtPmRyYXdUZXh0KGZvbnQsIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJl
bmRlcmVyKCksIGZvbnQsIG1fc3RyLCBzdHlsZSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFu
c2lvbiksIEludFBvaW50KHgoKSArIHBhaW50T2Zmc2V0LngoKSwgeSgpICsgcGFpbnRPZmZzZXQu
eSgpICsgc3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKIAogICAgIC8vIFJlc3RvcmUg
dGhlIHJlZ3VsYXIgZmlsbCBjb2xvci4KICAgICBpZiAodGV4dENvbG9yICE9IGNvbnRleHQtPmZp
bGxDb2xvcigpKQpAQCAtNjcsOCArNjcsOCBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludChQYWlu
dEluZm8mIHBhaW50CiAgICAgaWYgKG1fbWFya3VwQm94KSB7CiAgICAgICAgIC8vIFBhaW50IHRo
ZSBtYXJrdXAgYm94CiAgICAgICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWlu
dE9mZnNldDsKLSAgICAgICAgYWRqdXN0ZWRQYWludE9mZnNldC5tb3ZlKG1feCArIG1fbG9naWNh
bFdpZHRoIC0gbV9tYXJrdXBCb3gtPngoKSwKLSAgICAgICAgICAgIG1feSArIHN0eWxlLT5mb250
TWV0cmljcygpLmFzY2VudCgpIC0gKG1fbWFya3VwQm94LT55KCkgKyBtX21hcmt1cEJveC0+cmVu
ZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpLT5mb250TWV0cmljcygpLmFzY2VudCgpKSk7Cisg
ICAgICAgIGFkanVzdGVkUGFpbnRPZmZzZXQubW92ZSh4KCkgKyBtX2xvZ2ljYWxXaWR0aCAtIG1f
bWFya3VwQm94LT54KCksCisgICAgICAgICAgICB5KCkgKyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5h
c2NlbnQoKSAtIChtX21hcmt1cEJveC0+eSgpICsgbV9tYXJrdXBCb3gtPnJlbmRlcmVyKCktPnN0
eWxlKG1fZmlyc3RMaW5lKS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSkpOwogICAgICAgICBtX21h
cmt1cEJveC0+cGFpbnQocGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBsaW5lVG9wLCBs
aW5lQm90dG9tKTsKICAgICB9CiB9CkBAIC03OCw3ICs3OCw3IEBAIEludFJlY3QgRWxsaXBzaXNC
b3g6OnNlbGVjdGlvblJlY3QoaW50IHQKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3JlbmRl
cmVyLT5zdHlsZShtX2ZpcnN0TGluZSk7CiAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLT5m
b250KCk7CiAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBwYXNz
aW5nIGNvcnJlY3QgdGV4dCBydW4gZmxhZ3MgYmVsb3cuCi0gICAgcmV0dXJuIGVuY2xvc2luZ0lu
dFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4
dFJ1bihyZW5kZXJlcigpLCBmb250LCBtX3N0ciwgc3R5bGUsIFRleHRSdW46OkFsbG93VHJhaWxp
bmdFeHBhbnNpb24pLCBJbnRQb2ludChtX3ggKyB0eCwgbV95ICsgdHkgKyByb290KCktPnNlbGVj
dGlvblRvcCgpKSwgcm9vdCgpLT5zZWxlY3Rpb25IZWlnaHQoKSkpOworICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQoUmVuZGVyQmxvY2s6OmNvbnN0
cnVjdFRleHRSdW4ocmVuZGVyZXIoKSwgZm9udCwgbV9zdHIsIHN0eWxlLCBUZXh0UnVuOjpBbGxv
d1RyYWlsaW5nRXhwYW5zaW9uKSwgSW50UG9pbnQoeCgpICsgdHgsIHkoKSArIHR5ICsgcm9vdCgp
LT5zZWxlY3Rpb25Ub3AoKSksIHJvb3QoKS0+c2VsZWN0aW9uSGVpZ2h0KCkpKTsKIH0KIAogdm9p
ZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBp
bnQgdHgsIGludCB0eSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250KQpAQCAt
OTQsMTcgKzk0LDE3IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWMK
ICAgICAgICAgYyA9IENvbG9yKDB4ZmYgLSBjLnJlZCgpLCAweGZmIC0gYy5ncmVlbigpLCAweGZm
IC0gYy5ibHVlKCkpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KCpjb250ZXh0KTsKLSAgICBpbnQgeSA9IHJvb3QoKS0+c2VsZWN0aW9uVG9wKCk7CisgICAgaW50
IHRvcCA9IHJvb3QoKS0+c2VsZWN0aW9uVG9wKCk7CiAgICAgaW50IGggPSByb290KCktPnNlbGVj
dGlvbkhlaWdodCgpOwotICAgIGNvbnRleHQtPmNsaXAoSW50UmVjdChtX3ggKyB0eCwgeSArIHR5
LCBtX2xvZ2ljYWxXaWR0aCwgaCkpOworICAgIGNvbnRleHQtPmNsaXAoSW50UmVjdCh4KCkgKyB0
eCwgdG9wICsgdHksIG1fbG9naWNhbFdpZHRoLCBoKSk7CiAgICAgLy8gRklYTUU6IFdoeSBpcyB0
aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJlY3QgdGV4dCBydW4gZmxhZ3MgYmVs
b3cuCi0gICAgY29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgUmVuZGVyQmxvY2s6
OmNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIoKSwgZm9udCwgbV9zdHIsIHN0eWxlLCBUZXh0UnVu
OjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsg
eSksIGgsIGMsIHN0eWxlLT5jb2xvclNwYWNlKCkpOworICAgIGNvbnRleHQtPmRyYXdIaWdobGln
aHRGb3JUZXh0KGZvbnQsIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVyKCks
IGZvbnQsIG1fc3RyLCBzdHlsZSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiksIElu
dFBvaW50KHgoKSArIHR4LCB5KCkgKyB0eSArIHRvcCksIGgsIGMsIHN0eWxlLT5jb2xvclNwYWNl
KCkpOwogfQogCiBib29sIEVsbGlwc2lzQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRv
bSkKIHsKLSAgICB0eCArPSBtX3g7Ci0gICAgdHkgKz0gbV95OworICAgIHR4ICs9IHgoKTsKKyAg
ICB0eSArPSB5KCk7CiAKICAgICAvLyBIaXQgdGVzdCB0aGUgbWFya3VwIGJveC4KICAgICBpZiAo
bV9tYXJrdXBCb3gpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0Jv
eC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5o
CShyZXZpc2lvbiA4Nzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0Jv
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIGNsYXNzIEVsbGlwc2lzQm94IDog
cHVibGljIElubGluZUJveCB7CiBwdWJsaWM6CiAgICAgRWxsaXBzaXNCb3goUmVuZGVyT2JqZWN0
KiBvYmosIGNvbnN0IEF0b21pY1N0cmluZyYgZWxsaXBzaXNTdHIsIElubGluZUZsb3dCb3gqIHBh
cmVudCwKICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCB5LCBib29s
IGZpcnN0TGluZSwgYm9vbCBpc1ZlcnRpY2FsLCBJbmxpbmVCb3gqIG1hcmt1cEJveCkKLSAgICAg
ICAgOiBJbmxpbmVCb3gob2JqLCAwLCB5LCB3aWR0aCwgZmlyc3RMaW5lLCB0cnVlLCBmYWxzZSwg
ZmFsc2UsIGlzVmVydGljYWwsIDAsIDAsIHBhcmVudCkKKyAgICAgICAgOiBJbmxpbmVCb3gob2Jq
LCBGbG9hdFBvaW50KDAsIHkpLCB3aWR0aCwgZmlyc3RMaW5lLCB0cnVlLCBmYWxzZSwgZmFsc2Us
IGlzVmVydGljYWwsIDAsIDAsIHBhcmVudCkKICAgICAgICAgLCBtX2hlaWdodChoZWlnaHQpCiAg
ICAgICAgICwgbV9zdHIoZWxsaXBzaXNTdHIpCiAgICAgICAgICwgbV9tYXJrdXBCb3gobWFya3Vw
Qm94KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAJKHJldmlzaW9u
IDg3OTUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4Niw4ICsxODYsNyBAQCB2b2lkIElubGluZUJveDo6YXR0YWNoTGluZSgp
CiAKIHZvaWQgSW5saW5lQm94OjphZGp1c3RQb3NpdGlvbihmbG9hdCBkeCwgZmxvYXQgZHkpCiB7
Ci0gICAgbV94ICs9IGR4OwotICAgIG1feSArPSBkeTsKKyAgICBtX3RvcExlZnQubW92ZShkeCwg
ZHkpOwogCiAgICAgaWYgKG1fcmVuZGVyZXItPmlzUmVwbGFjZWQoKSkgCiAgICAgICAgIHRvUmVu
ZGVyQm94KG1fcmVuZGVyZXIpLT5tb3ZlKGR4LCBkeSk7IApAQCAtMzA2LDcgKzMwNSw3IEBAIGJv
b2wgSW5saW5lQm94OjpjYW5BY2NvbW1vZGF0ZUVsbGlwc2lzKGIKICAgICBpZiAoIW1fcmVuZGVy
ZXIgfHwgIW1fcmVuZGVyZXItPmlzUmVwbGFjZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgCi0gICAgSW50UmVjdCBib3hSZWN0KG1feCwgMCwgbV9sb2dpY2FsV2lkdGgsIDEwKTsKKyAg
ICBJbnRSZWN0IGJveFJlY3QobGVmdCgpLCAwLCBtX2xvZ2ljYWxXaWR0aCwgMTApOwogICAgIElu
dFJlY3QgZWxsaXBzaXNSZWN0KGx0ciA/IGJsb2NrRWRnZSAtIGVsbGlwc2lzV2lkdGggOiBibG9j
a0VkZ2UsIDAsIGVsbGlwc2lzV2lkdGgsIDEwKTsKICAgICByZXR1cm4gIShib3hSZWN0LmludGVy
c2VjdHMoZWxsaXBzaXNSZWN0KSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUJveC5oCShyZXZpc2lvbiA4Nzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksNiBAQCBwdWJsaWM6CiAgICAgICAg
ICwgbV9wcmV2KDApCiAgICAgICAgICwgbV9wYXJlbnQoMCkKICAgICAgICAgLCBtX3JlbmRlcmVy
KG9iaikKLSAgICAgICAgLCBtX3goMCkKLSAgICAgICAgLCBtX3koMCkKICAgICAgICAgLCBtX2xv
Z2ljYWxXaWR0aCgwKQogICAgICAgICAsIG1fZmlyc3RMaW5lKGZhbHNlKQogICAgICAgICAsIG1f
Y29uc3RydWN0ZWQoZmFsc2UpCkBAIC02OCwxNCArNjYsMTMgQEAgcHVibGljOgogICAgIHsKICAg
ICB9CiAKLSAgICBJbmxpbmVCb3goUmVuZGVyT2JqZWN0KiBvYmosIGZsb2F0IHgsIGZsb2F0IHks
IGZsb2F0IGxvZ2ljYWxXaWR0aCwgYm9vbCBmaXJzdExpbmUsIGJvb2wgY29uc3RydWN0ZWQsCisg
ICAgSW5saW5lQm94KFJlbmRlck9iamVjdCogb2JqLCBGbG9hdFBvaW50IHRvcExlZnQsIGZsb2F0
IGxvZ2ljYWxXaWR0aCwgYm9vbCBmaXJzdExpbmUsIGJvb2wgY29uc3RydWN0ZWQsCiAgICAgICAg
ICAgICAgIGJvb2wgZGlydHksIGJvb2wgZXh0cmFjdGVkLCBib29sIGlzSG9yaXpvbnRhbCwgSW5s
aW5lQm94KiBuZXh0LCBJbmxpbmVCb3gqIHByZXYsIElubGluZUZsb3dCb3gqIHBhcmVudCkKICAg
ICAgICAgOiBtX25leHQobmV4dCkKICAgICAgICAgLCBtX3ByZXYocHJldikKICAgICAgICAgLCBt
X3BhcmVudChwYXJlbnQpCiAgICAgICAgICwgbV9yZW5kZXJlcihvYmopCi0gICAgICAgICwgbV94
KHgpCi0gICAgICAgICwgbV95KHkpCisgICAgICAgICwgbV90b3BMZWZ0KHRvcExlZnQpCiAgICAg
ICAgICwgbV9sb2dpY2FsV2lkdGgobG9naWNhbFdpZHRoKQogICAgICAgICAsIG1fZmlyc3RMaW5l
KGZpcnN0TGluZSkKICAgICAgICAgLCBtX2NvbnN0cnVjdGVkKGNvbnN0cnVjdGVkKQpAQCAtMjI2
LDM4ICsyMjMsNDQgQEAgcHVibGljOgogICAgIFJvb3RJbmxpbmVCb3gqIHJvb3QoKTsKIAogICAg
IC8vIHgoKSBpcyB0aGUgbGVmdCBzaWRlIG9mIHRoZSBib3ggaW4gdGhlIGNvbnRhaW5pbmcgYmxv
Y2sncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBtX3ggPSB4
OyB9Ci0gICAgZmxvYXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQorICAgIHZvaWQgc2V0WChm
bG9hdCB4KSB7IG1fdG9wTGVmdC5zZXRYKHgpOyB9CisgICAgZmxvYXQgeCgpIGNvbnN0IHsgcmV0
dXJuIG1fdG9wTGVmdC54KCk7IH0KKyAgICBmbG9hdCBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV90
b3BMZWZ0LngoKTsgfQogCiAgICAgLy8geSgpIGlzIHRoZSB0b3Agc2lkZSBvZiB0aGUgYm94IGlu
IHRoZSBjb250YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uCi0gICAgdm9pZCBzZXRZ
KGZsb2F0IHkpIHsgbV95ID0geTsgfQotICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7
IH0KKyAgICB2b2lkIHNldFkoZmxvYXQgeSkgeyBtX3RvcExlZnQuc2V0WSh5KTsgfQorICAgIGZs
b2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3RvcExlZnQueSgpOyB9CisgICAgZmxvYXQgdG9wKCkg
Y29uc3QgeyByZXR1cm4gbV90b3BMZWZ0LnkoKTsgfQorCisgICAgY29uc3QgRmxvYXRQb2ludCYg
dG9wTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wTGVmdDsgfQogCiAgICAgZmxvYXQgd2lkdGgo
KSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWwoKSA/IGxvZ2ljYWxXaWR0aCgpIDogbG9naWNh
bEhlaWdodCgpOyB9CiAgICAgZmxvYXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9u
dGFsKCkgPyBsb2dpY2FsSGVpZ2h0KCkgOiBsb2dpY2FsV2lkdGgoKTsgfQorICAgIGZsb2F0IHJp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbGVmdCgpICsgd2lkdGgoKTsgfQorICAgIGZsb2F0IGJvdHRv
bSgpIGNvbnN0IHsgcmV0dXJuIHRvcCgpICsgaGVpZ2h0KCk7IH0KIAogICAgIC8vIFRoZSBsb2dp
Y2FsTGVmdCBwb3NpdGlvbiBpcyB0aGUgbGVmdCBlZGdlIG9mIHRoZSBsaW5lIGJveCBpbiBhIGhv
cml6b250YWwgbGluZSBhbmQgdGhlIHRvcCBlZGdlIGluIGEgdmVydGljYWwgbGluZS4KLSAgICBm
bG9hdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gbV94IDog
bV95OyB9CisgICAgZmxvYXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250
YWwoKSA/IG1fdG9wTGVmdC54KCkgOiBtX3RvcExlZnQueSgpOyB9CiAgICAgZmxvYXQgbG9naWNh
bFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbExlZnQoKSArIGxvZ2ljYWxXaWR0aCgpOyB9
CiAgICAgdm9pZCBzZXRMb2dpY2FsTGVmdChmbG9hdCBsZWZ0KQogICAgIHsKICAgICAgICAgaWYg
KGlzSG9yaXpvbnRhbCgpKQotICAgICAgICAgICAgbV94ID0gbGVmdDsKKyAgICAgICAgICAgIHNl
dFgobGVmdCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1feSA9IGxlZnQ7CisgICAgICAg
ICAgICBzZXRZKGxlZnQpOwogICAgIH0KICAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbExlZnQo
KSBjb25zdCB7IHJldHVybiBsb2dpY2FsTGVmdCgpOyB9CiAgICAgaW50IHBpeGVsU25hcHBlZExv
Z2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIGNlaWxmKGxvZ2ljYWxSaWdodCgpKTsgfQogCiAg
ICAgLy8gVGhlIGxvZ2ljYWxUb3BbIHBvc2l0aW9uIGlzIHRoZSB0b3AgZWRnZSBvZiB0aGUgbGlu
ZSBib3ggaW4gYSBob3Jpem9udGFsIGxpbmUgYW5kIHRoZSBsZWZ0IGVkZ2UgaW4gYSB2ZXJ0aWNh
bCBsaW5lLgotICAgIGludCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFs
KCkgPyBtX3kgOiBtX3g7IH0KKyAgICBpbnQgbG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIGlz
SG9yaXpvbnRhbCgpID8gbV90b3BMZWZ0LnkoKSA6IG1fdG9wTGVmdC54KCk7IH0KICAgICBpbnQg
bG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxUb3AoKSArIGxvZ2ljYWxIZWln
aHQoKTsgfQogICAgIHZvaWQgc2V0TG9naWNhbFRvcChpbnQgdG9wKQogICAgIHsKICAgICAgICAg
aWYgKGlzSG9yaXpvbnRhbCgpKQotICAgICAgICAgICAgbV95ID0gdG9wOworICAgICAgICAgICAg
c2V0WSh0b3ApOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3ggPSB0b3A7CisgICAgICAg
ICAgICBzZXRYKHRvcCk7CiAgICAgfQogCiAgICAgLy8gVGhlIGxvZ2ljYWwgd2lkdGggaXMgb3Vy
IGV4dGVudCBpbiB0aGUgbGluZSdzIG92ZXJhbGwgaW5saW5lIGRpcmVjdGlvbiwgaS5lLiwgd2lk
dGggZm9yIGhvcml6b250YWwgdGV4dCBhbmQgaGVpZ2h0IGZvciB2ZXJ0aWNhbCB0ZXh0LgpAQCAt
MjY3LDcgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgbG9naWNhbCBoZWlnaHQgaXMgb3Vy
IGV4dGVudCBpbiB0aGUgYmxvY2sgZmxvdyBkaXJlY3Rpb24sIGkuZS4sIGhlaWdodCBmb3IgaG9y
aXpvbnRhbCB0ZXh0IGFuZCB3aWR0aCBmb3IgdmVydGljYWwgdGV4dC4KICAgICBpbnQgbG9naWNh
bEhlaWdodCgpIGNvbnN0OwogCi0gICAgRmxvYXRSZWN0IGxvZ2ljYWxGcmFtZVJlY3QoKSBjb25z
dCB7IHJldHVybiBpc0hvcml6b250YWwoKSA/IEludFJlY3QobV94LCBtX3ksIG1fbG9naWNhbFdp
ZHRoLCBsb2dpY2FsSGVpZ2h0KCkpIDogSW50UmVjdChtX3ksIG1feCwgbV9sb2dpY2FsV2lkdGgs
IGxvZ2ljYWxIZWlnaHQoKSk7IH0KKyAgICBGbG9hdFJlY3QgbG9naWNhbEZyYW1lUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gSW50UmVjdChtX3RvcExlZnQueCgpLCBtX3Rv
cExlZnQueSgpLCBtX2xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCgpKSA6IEludFJlY3QobV90
b3BMZWZ0LnkoKSwgbV90b3BMZWZ0LngoKSwgbV9sb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQo
KSk7IH0KIAogICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJh
c2VsaW5lVHlwZSkgY29uc3QgeyByZXR1cm4gYm94TW9kZWxPYmplY3QoKS0+YmFzZWxpbmVQb3Np
dGlvbihiYXNlbGluZVR5cGUsIG1fZmlyc3RMaW5lLCBpc0hvcml6b250YWwoKSA/IEhvcml6b250
YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpOyB9CiAgICAg
dmlydHVhbCBpbnQgbGluZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGJveE1vZGVsT2JqZWN0KCkt
PmxpbmVIZWlnaHQobV9maXJzdExpbmUsIGlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRhbExpbmUg
OiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT25Db250YWluaW5nTGluZSk7IH0KQEAgLTMzMCw4ICsz
MzMsNyBAQCBwcml2YXRlOgogcHVibGljOgogICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsK
IAotICAgIGZsb2F0IG1feDsKLSAgICBmbG9hdCBtX3k7CisgICAgRmxvYXRQb2ludCBtX3RvcExl
ZnQ7CiAgICAgZmxvYXQgbV9sb2dpY2FsV2lkdGg7CiAgICAgCiAgICAgLy8gU29tZSBvZiB0aGVz
ZSBiaXRzIGFyZSBhY3R1YWxseSBmb3Igc3ViY2xhc3NlcyBhbmQgbW92ZWQgaGVyZSB0byBjb21w
YWN0IHRoZSBzdHJ1Y3R1cmVzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUZsb3dCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Rmxvd0JveC5oCShyZXZpc2lvbiA4Nzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw4ICsyNTUsOCBAQCBwdWJsaWM6
CiAgICAgRmxvYXRSZWN0IGZyYW1lUmVjdEluY2x1ZGluZ0xpbmVIZWlnaHQoaW50IGxpbmVUb3As
IGludCBsaW5lQm90dG9tKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCgp
KQotICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChtX3gsIGxpbmVUb3AsIHdpZHRoKCksIGxp
bmVCb3R0b20gLSBsaW5lVG9wKTsKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChsaW5lVG9wLCBt
X3ksIGxpbmVCb3R0b20gLSBsaW5lVG9wLCBoZWlnaHQoKSk7CisgICAgICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KG1fdG9wTGVmdC54KCksIGxpbmVUb3AsIHdpZHRoKCksIGxpbmVCb3R0b20gLSBs
aW5lVG9wKTsKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChsaW5lVG9wLCBtX3RvcExlZnQueSgp
LCBsaW5lQm90dG9tIC0gbGluZVRvcCwgaGVpZ2h0KCkpOwogICAgIH0KICAgICAKICAgICBGbG9h
dFJlY3QgbG9naWNhbEZyYW1lUmVjdEluY2x1ZGluZ0xpbmVIZWlnaHQoaW50IGxpbmVUb3AsIGlu
dCBsaW5lQm90dG9tKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcAkocmV2aXNpb24gODc5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Miw4ICsyNDIsOCBAQCBm
bG9hdCBJbmxpbmVUZXh0Qm94OjpwbGFjZUVsbGlwc2lzQm94KGJvCiAgICAgLy8gQ3JpdGVyaWEg
Zm9yIGZ1bGwgdHJ1bmNhdGlvbjoKICAgICAvLyBMVFI6IHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGVs
bGlwc2lzIGlzIHRvIHRoZSBsZWZ0IG9mIG91ciB0ZXh0IHJ1bi4KICAgICAvLyBSVEw6IHRoZSBy
aWdodCBlZGdlIG9mIHRoZSBlbGxpcHNpcyBpcyB0byB0aGUgcmlnaHQgb2Ygb3VyIHRleHQgcnVu
LgotICAgIGJvb2wgbHRyRnVsbFRydW5jYXRpb24gPSBmbG93SXNMVFIgJiYgZWxsaXBzaXNYIDw9
IG1feDsKLSAgICBib29sIHJ0bEZ1bGxUcnVuY2F0aW9uID0gIWZsb3dJc0xUUiAmJiBlbGxpcHNp
c1ggPj0gKG1feCArIG1fbG9naWNhbFdpZHRoKTsKKyAgICBib29sIGx0ckZ1bGxUcnVuY2F0aW9u
ID0gZmxvd0lzTFRSICYmIGVsbGlwc2lzWCA8PSBsZWZ0KCk7CisgICAgYm9vbCBydGxGdWxsVHJ1
bmNhdGlvbiA9ICFmbG93SXNMVFIgJiYgZWxsaXBzaXNYID49IGxlZnQoKSArIGxvZ2ljYWxXaWR0
aCgpOwogICAgIGlmIChsdHJGdWxsVHJ1bmNhdGlvbiB8fCBydGxGdWxsVHJ1bmNhdGlvbikgewog
ICAgICAgICAvLyBUb28gZmFyLiAgSnVzdCBzZXQgZnVsbCB0cnVuY2F0aW9uLCBidXQgcmV0dXJu
IC0xIGFuZCBsZXQgdGhlIGVsbGlwc2lzIGp1c3QgYmUgcGxhY2VkIGF0IHRoZSBlZGdlIG9mIHRo
ZSBib3guCiAgICAgICAgIG1fdHJ1bmNhdGlvbiA9IGNGdWxsVHJ1bmNhdGlvbjsKQEAgLTI1MSw4
ICsyNTEsOCBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94OjpwbGFjZUVsbGlwc2lzQm94KGJvCiAgICAg
ICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBib29sIGx0ckVsbGlwc2lzV2l0aGluQm94ID0g
Zmxvd0lzTFRSICYmIChlbGxpcHNpc1ggPCBtX3ggKyBtX2xvZ2ljYWxXaWR0aCk7Ci0gICAgYm9v
bCBydGxFbGxpcHNpc1dpdGhpbkJveCA9ICFmbG93SXNMVFIgJiYgKGVsbGlwc2lzWCA+IG1feCk7
CisgICAgYm9vbCBsdHJFbGxpcHNpc1dpdGhpbkJveCA9IGZsb3dJc0xUUiAmJiAoZWxsaXBzaXNY
IDwgcmlnaHQoKSk7CisgICAgYm9vbCBydGxFbGxpcHNpc1dpdGhpbkJveCA9ICFmbG93SXNMVFIg
JiYgKGVsbGlwc2lzWCA+IGxlZnQoKSk7CiAgICAgaWYgKGx0ckVsbGlwc2lzV2l0aGluQm94IHx8
IHJ0bEVsbGlwc2lzV2l0aGluQm94KSB7CiAgICAgICAgIGZvdW5kQm94ID0gdHJ1ZTsKIApAQCAt
MjYzLDcgKzI2Myw3IEBAIGZsb2F0IElubGluZVRleHRCb3g6OnBsYWNlRWxsaXBzaXNCb3goYm8K
ICAgICAgICAgaWYgKGx0ciAhPSBmbG93SXNMVFIpIHsKICAgICAgICAgICAvLyBXaWR0aCBpbiBw
aXhlbHMgb2YgdGhlIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgYm94LCBleGNsdWRpbmcgdGhlIGVs
bGlwc2lzLgogICAgICAgICAgIGludCB2aXNpYmxlQm94V2lkdGggPSB2aXNpYmxlUmlnaHRFZGdl
IC0gdmlzaWJsZUxlZnRFZGdlICAtIGVsbGlwc2lzV2lkdGg7Ci0gICAgICAgICAgZWxsaXBzaXNY
ID0gbHRyID8gbV94ICsgdmlzaWJsZUJveFdpZHRoIDogbV94ICsgbV9sb2dpY2FsV2lkdGggLSB2
aXNpYmxlQm94V2lkdGg7CisgICAgICAgICAgZWxsaXBzaXNYID0gbHRyID8gbGVmdCgpICsgdmlz
aWJsZUJveFdpZHRoIDogcmlnaHQoKSAtIHZpc2libGVCb3hXaWR0aDsKICAgICAgICAgfQogCiAg
ICAgICAgIGludCBvZmZzZXQgPSBvZmZzZXRGb3JQb3NpdGlvbihlbGxpcHNpc1gsIGZhbHNlKTsK
QEAgLTI3MSw3ICsyNzEsNyBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94OjpwbGFjZUVsbGlwc2lzQm94
KGJvCiAgICAgICAgICAgICAvLyBObyBjaGFyYWN0ZXJzIHNob3VsZCBiZSByZW5kZXJlZC4gIFNl
dCBvdXJzZWx2ZXMgdG8gZnVsbCB0cnVuY2F0aW9uIGFuZCBwbGFjZSB0aGUgZWxsaXBzaXMgYXQg
dGhlIG1pbiBvZiBvdXIgc3RhcnQKICAgICAgICAgICAgIC8vIGFuZCB0aGUgZWxsaXBzaXMgZWRn
ZS4KICAgICAgICAgICAgIG1fdHJ1bmNhdGlvbiA9IGNGdWxsVHJ1bmNhdGlvbjsKLSAgICAgICAg
ICAgIHJldHVybiBtaW4oZWxsaXBzaXNYLCBtX3gpOworICAgICAgICAgICAgcmV0dXJuIG1pbihl
bGxpcHNpc1gsIHgoKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBTZXQgdGhlIHRydW5jYXRp
b24gaW5kZXggb24gdGhlIHRleHQgcnVuLgpAQCAtMjg3LDkgKzI4Nyw5IEBAIGZsb2F0IElubGlu
ZVRleHRCb3g6OnBsYWNlRWxsaXBzaXNCb3goYm8KICAgICAgICAgLy8gZS5nLiBJbiB0aGUgY2Fz
ZSBvZiBhbiBMVFIgaW5saW5lIGJveCB0cnVuY2F0ZWQgaW4gYW4gUlRMIGZsb3cgdGhlbiB3ZSBj
YW4KICAgICAgICAgLy8gaGF2ZSBhIHNpdHVhdGlvbiBzdWNoIGFzIHxIZWxsb3wgLT4gfC4uLkhl
fAogICAgICAgICBpZiAoZmxvd0lzTFRSKQotICAgICAgICAgICAgcmV0dXJuIG1feCArIHdpZHRo
T2ZWaXNpYmxlVGV4dDsKKyAgICAgICAgICAgIHJldHVybiBsZWZ0KCkgKyB3aWR0aE9mVmlzaWJs
ZVRleHQ7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiAobV94ICsgbV9sb2dpY2Fs
V2lkdGgpIC0gd2lkdGhPZlZpc2libGVUZXh0IC0gZWxsaXBzaXNXaWR0aDsKKyAgICAgICAgICAg
IHJldHVybiByaWdodCgpIC0gd2lkdGhPZlZpc2libGVUZXh0IC0gZWxsaXBzaXNXaWR0aDsKICAg
ICB9CiAgICAgcmV0dXJuIC0xOwogfQpAQCAtMTA1MSw3ICsxMDUxLDcgQEAgdm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcgogICAgIFRleHRSdW4gcnVuID0gY29uc3RydWN0
VGV4dFJ1bihzdHlsZSwgZm9udCk7CiAKICAgICAvLyBBbHdheXMgY29tcHV0ZSBhbmQgc3RvcmUg
dGhlIHJlY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFya2VyLiBUaGUgY29tcHV0ZWQgcmVjdCBp
cyBpbiBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAgICBJbnRSZWN0IG1hcmtlclJlY3QgPSBlbmNs
b3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBJbnRQb2ludChtX3gs
IHNlbGVjdGlvblRvcCgpKSwgc2VsSGVpZ2h0LCBzUG9zLCBlUG9zKSk7CisgICAgSW50UmVjdCBt
YXJrZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1
biwgSW50UG9pbnQoeCgpLCBzZWxlY3Rpb25Ub3AoKSksIHNlbEhlaWdodCwgc1BvcywgZVBvcykp
OwogICAgIG1hcmtlclJlY3QgPSByZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0
UmVjdChtYXJrZXJSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKICAgICB0b1JlbmRlcmVk
RG9jdW1lbnRNYXJrZXIobWFya2VyKS0+c2V0UmVuZGVyZWRSZWN0KG1hcmtlclJlY3QpOwogICAg
IApAQCAtMTA3MCwxMyArMTA3MCwxMyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1h
dGNoTWFya2VyCiB2b2lkIElubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRN
YXJrZXIoRG9jdW1lbnRNYXJrZXIqIG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBG
b250JiBmb250KQogewogICAgIC8vIFJlcGxhY2VtZW50IG1hcmtlcnMgYXJlIG5vdCBhY3R1YWxs
eSBkcmF3biwgYnV0IHRoZWlyIHJlY3RzIG5lZWQgdG8gYmUgY29tcHV0ZWQgZm9yIGhpdCB0ZXN0
aW5nLgotICAgIGludCB5ID0gc2VsZWN0aW9uVG9wKCk7CisgICAgaW50IHRvcCA9IHNlbGVjdGlv
blRvcCgpOwogICAgIGludCBoID0gc2VsZWN0aW9uSGVpZ2h0KCk7CiAgICAgCiAgICAgaW50IHNQ
b3MgPSBtYXgobWFya2VyLT5zdGFydE9mZnNldCgpIC0gbV9zdGFydCwgKHVuc2lnbmVkKTApOwog
ICAgIGludCBlUG9zID0gbWluKG1hcmtlci0+ZW5kT2Zmc2V0KCkgLSBtX3N0YXJ0LCAodW5zaWdu
ZWQpbV9sZW4pOwogICAgIFRleHRSdW4gcnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZm9u
dCk7Ci0gICAgSW50UG9pbnQgc3RhcnRQb2ludCA9IEludFBvaW50KG1feCwgeSk7CisgICAgSW50
UG9pbnQgc3RhcnRQb2ludCA9IEludFBvaW50KHgoKSwgdG9wKTsKICAgICAKICAgICAvLyBDb21w
dXRlIGFuZCBzdG9yZSB0aGUgcmVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYXJrZXIuCiAgICAg
SW50UmVjdCBtYXJrZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RG
b3JUZXh0KHJ1biwgc3RhcnRQb2ludCwgaCwgc1BvcywgZVBvcykpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gODc5NTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4MCwx
MiArOTgwLDEyIEBAIEZsb2F0UG9pbnQgUmVuZGVyVGV4dDo6Zmlyc3RSdW5PcmlnaW4oKSAKIAog
ZmxvYXQgUmVuZGVyVGV4dDo6Zmlyc3RSdW5YKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9maXJz
dFRleHRCb3ggPyBtX2ZpcnN0VGV4dEJveC0+bV94IDogMDsKKyAgICByZXR1cm4gbV9maXJzdFRl
eHRCb3ggPyBtX2ZpcnN0VGV4dEJveC0+eCgpIDogMDsKIH0KIAogZmxvYXQgUmVuZGVyVGV4dDo6
Zmlyc3RSdW5ZKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9maXJzdFRleHRCb3ggPyBtX2ZpcnN0
VGV4dEJveC0+bV95IDogMDsKKyAgICByZXR1cm4gbV9maXJzdFRleHRCb3ggPyBtX2ZpcnN0VGV4
dEJveC0+eSgpIDogMDsKIH0KICAgICAKIHZvaWQgUmVuZGVyVGV4dDo6c2V0U2VsZWN0aW9uU3Rh
dGUoU2VsZWN0aW9uU3RhdGUgc3RhdGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiA4Nzk1MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk0
LDkgKzQ5NCw5IEBAIHN0YXRpYyB2b2lkIHdyaXRlVGV4dFJ1bihUZXh0U3RyZWFtJiB0cywKIHsK
ICAgICAvLyBGSVhNRTogRm9yIG5vdyB1c2UgYW4gImVuY2xvc2luZ0ludFJlY3QiIG1vZGVsIGZv
ciB4LCB5IGFuZCBsb2dpY2FsV2lkdGgsIGFsdGhvdWdoIHRoaXMgbWFrZXMgaXQgaGFyZGVyCiAg
ICAgLy8gdG8gZGV0ZWN0IGFueSBjaGFuZ2VzIGNhdXNlZCBieSB0aGUgY29udmVyc2lvbiB0byBm
bG9hdGluZyBwb2ludC4gOigKLSAgICBpbnQgeCA9IHJ1bi5tX3g7Ci0gICAgaW50IHkgPSBydW4u
bV95OwotICAgIGludCBsb2dpY2FsV2lkdGggPSBjZWlsZihydW4ubV94ICsgcnVuLm1fbG9naWNh
bFdpZHRoKSAtIHg7CisgICAgaW50IHggPSBydW4ueCgpOworICAgIGludCB5ID0gcnVuLnkoKTsK
KyAgICBpbnQgbG9naWNhbFdpZHRoID0gY2VpbGYocnVuLmxlZnQoKSArIHJ1bi5sb2dpY2FsV2lk
dGgoKSkgLSB4OwogCiAgICAgLy8gRklYTUU6IFRhYmxlIGNlbGwgYWRqdXN0bWVudCBpcyB0ZW1w
b3JhcnkgdW50aWwgcmVzdWx0cyBjYW4gYmUgdXBkYXRlZC4KICAgICBpZiAoby5jb250YWluaW5n
QmxvY2soKS0+aXNUYWJsZUNlbGwoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
b290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Um9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDg3OTUwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcg
QEAgdm9pZCBSb290SW5saW5lQm94OjpwbGFjZUVsbGlwc2lzKGNvbnN0IAogCiAgICAgLy8gRklY
TUU6IERvIHdlIG5lZWQgYW4gUlRMIHZlcnNpb24gb2YgdGhpcz8KICAgICBpZiAobHRyICYmICh4
KCkgKyBsb2dpY2FsV2lkdGgoKSArIGVsbGlwc2lzV2lkdGgpIDw9IGJsb2NrUmlnaHRFZGdlKSB7
Ci0gICAgICAgIGVsbGlwc2lzQm94LT5tX3ggPSB4KCkgKyBsb2dpY2FsV2lkdGgoKTsKKyAgICAg
ICAgZWxsaXBzaXNCb3gtPnNldFgoeCgpICsgbG9naWNhbFdpZHRoKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBSb290SW5saW5lQm94OjpwbGFj
ZUVsbGlwc2lzKGNvbnN0IAogICAgIC8vIG9mIHRoYXQgZ2x5cGguICBNYXJrIGFsbCBvZiB0aGUg
b2JqZWN0cyB0aGF0IGludGVyc2VjdCB0aGUgZWxsaXBzaXMgYm94IGFzIG5vdCBwYWludGluZyAo
YXMgYmVpbmcKICAgICAvLyB0cnVuY2F0ZWQpLgogICAgIGJvb2wgZm91bmRCb3ggPSBmYWxzZTsK
LSAgICBlbGxpcHNpc0JveC0+bV94ID0gcGxhY2VFbGxpcHNpc0JveChsdHIsIGJsb2NrTGVmdEVk
Z2UsIGJsb2NrUmlnaHRFZGdlLCBlbGxpcHNpc1dpZHRoLCBmb3VuZEJveCk7CisgICAgZWxsaXBz
aXNCb3gtPnNldFgocGxhY2VFbGxpcHNpc0JveChsdHIsIGJsb2NrTGVmdEVkZ2UsIGJsb2NrUmln
aHRFZGdlLCBlbGxpcHNpc1dpZHRoLCBmb3VuZEJveCkpOwogfQogCiBmbG9hdCBSb290SW5saW5l
Qm94OjpwbGFjZUVsbGlwc2lzQm94KGJvb2wgbHRyLCBmbG9hdCBibG9ja0xlZnRFZGdlLCBmbG9h
dCBibG9ja1JpZ2h0RWRnZSwgZmxvYXQgZWxsaXBzaXNXaWR0aCwgYm9vbCYgZm91bmRCb3gpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJ
KHJldmlzaW9uIDg3OTUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDcgKzIyMSw3IEBAIFZpc2libGVQb3Np
dGlvbiBSZW5kZXJTVkdUZXh0Ojpwb3NpdGlvbkYKICAgICBpZiAoIWNsb3Nlc3RCb3gpCiAgICAg
ICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oMCwgRE9XTlNUUkVBTSk7CiAKLSAgICBy
ZXR1cm4gY2xvc2VzdEJveC0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChJbnRQb2ludChw
b2ludEluQ29udGVudHMueCgpLCBjbG9zZXN0Qm94LT5tX3kpKTsKKyAgICByZXR1cm4gY2xvc2Vz
dEJveC0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChJbnRQb2ludChwb2ludEluQ29udGVu
dHMueCgpLCBjbG9zZXN0Qm94LT55KCkpKTsKIH0KIAogdm9pZCBSZW5kZXJTVkdUZXh0OjphYnNv
bHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiA4Nzk1MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCB2aXJ0
dWFsTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbEhlaWdodDsgfQogICAg
IHZvaWQgc2V0TG9naWNhbEhlaWdodChpbnQgaGVpZ2h0KSB7IG1fbG9naWNhbEhlaWdodCA9IGhl
aWdodDsgfQogCi0gICAgdmlydHVhbCBpbnQgc2VsZWN0aW9uVG9wKCkgeyByZXR1cm4gbV95OyB9
CisgICAgdmlydHVhbCBpbnQgc2VsZWN0aW9uVG9wKCkgeyByZXR1cm4gdG9wKCk7IH0KICAgICB2
aXJ0dWFsIGludCBzZWxlY3Rpb25IZWlnaHQoKSB7IHJldHVybiBtX2xvZ2ljYWxIZWlnaHQ7IH0K
ICAgICB2aXJ0dWFsIGludCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4LCBib29sIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzID0gdHJ1ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBmbG9hdCBwb3NpdGlvbkZv
ck9mZnNldChpbnQgb2Zmc2V0KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gODc5NTApCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDksMTMgKzIwOSwxMyBAQCBJbmxpbmVCb3gqIFNWR1Jvb3RJbmxpbmVCb3g6
OmNsb3Nlc3RMZWFmCiAgICAgZm9yIChJbmxpbmVCb3gqIGxlYWYgPSBmaXJzdExlYWY7IGxlYWY7
IGxlYWYgPSBsZWFmLT5uZXh0TGVhZkNoaWxkKCkpIHsKICAgICAgICAgaWYgKCFsZWFmLT5pc1NW
R0lubGluZVRleHRCb3goKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAocG9p
bnQueSgpIDwgbGVhZi0+bV95KQorICAgICAgICBpZiAocG9pbnQueSgpIDwgbGVhZi0+eSgpKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChwb2ludC55KCkgPiBsZWFmLT5tX3kg
KyBsZWFmLT52aXJ0dWFsTG9naWNhbEhlaWdodCgpKQorICAgICAgICBpZiAocG9pbnQueSgpID4g
bGVhZi0+eSgpICsgbGVhZi0+dmlydHVhbExvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIGNsb3Nlc3RMZWFmID0gbGVhZjsKLSAgICAgICAgaWYgKHBvaW50
LngoKSA8IGxlYWYtPm1feCArIGxlYWYtPm1fbG9naWNhbFdpZHRoKQorICAgICAgICBpZiAocG9p
bnQueCgpIDwgbGVhZi0+bGVmdCgpICsgbGVhZi0+bG9naWNhbFdpZHRoKCkpCiAgICAgICAgICAg
ICByZXR1cm4gbGVhZjsKICAgICB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>