<?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>177607</bug_id>
          
          <creation_ts>2017-09-28 09:47:25 -0700</creation_ts>
          <short_desc>Extract logic to compute text to render into common function</short_desc>
          <delta_ts>2017-10-13 12:02:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>177620</dependson>
          <blocked>177748</blocked>
    
    <blocked>178278</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1354135</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-09-28 09:47:25 -0700</bug_when>
    <thetext>Extract logic to compute text to render into common function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354139</commentid>
    <comment_count>1</comment_count>
      <attachid>322091</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-09-28 09:48:13 -0700</bug_when>
    <thetext>Created attachment 322091
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354208</commentid>
    <comment_count>2</comment_count>
      <attachid>322091</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-09-28 11:29:45 -0700</bug_when>
    <thetext>Comment on attachment 322091
Patch

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

&gt; Source/WebCore/rendering/InlineTextBox.cpp:1100
&gt; +auto InlineTextBox::text(bool ignoreCombinedText, bool ignoreHyphen) const -&gt; StringAndLengthIgnoringTruncation

Maybe it would be preferred to use enum instead of booleans? Ideally, with the exception of the offset-to-position and position-to-offset functions all of the code would always respect combined text and hyphens (i.e. call text(), which is equal to calling text(false, false)).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354209</commentid>
    <comment_count>3</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-09-28 11:31:11 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #2)
&gt; Comment on attachment 322091 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=322091&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/InlineTextBox.cpp:1100
&gt; &gt; +auto InlineTextBox::text(bool ignoreCombinedText, bool ignoreHyphen) const -&gt; StringAndLengthIgnoringTruncation
&gt; 
&gt; Maybe it would be preferred to use enum...

*enums (though we could define one enum with two enumerators and have this function take an OptionSet if that is preferred).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354216</commentid>
    <comment_count>4</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-09-28 11:39:09 -0700</bug_when>
    <thetext>As far as I can tell if a text box is combined text or has a hyphen then it cannot be truncated. I make use of this assumption in the implementation of InlineTextBox::text() in attachment 322091 to always return the substring from the start offset associated wit the text box (InlineTextBox::m_start) to the end of the text box (InlineTextBox::m_len) when ignoring combined text or ignoring the hyphen. Let me know if this assumption is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354220</commentid>
    <comment_count>5</comment_count>
      <attachid>322091</attachid>
    <who name="alan">zalan</who>
    <bug_when>2017-09-28 11:41:33 -0700</bug_when>
    <thetext>Comment on attachment 322091
Patch

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

&gt; Source/WebCore/rendering/InlineTextBox.cpp:725
&gt; +    auto text = this-&gt;text(ignoreCombinedText, ignoreHyphen);
&gt; +    TextRun textRun = createTextRun(text);

At this point StringAndLengthIgnoringTruncation is only used for creating a run. Is this just an intermediate step/change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354352</commentid>
    <comment_count>6</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-09-28 16:07:46 -0700</bug_when>
    <thetext>(In reply to zalan from comment #5)
&gt; Comment on attachment 322091 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=322091&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/InlineTextBox.cpp:725
&gt; &gt; +    auto text = this-&gt;text(ignoreCombinedText, ignoreHyphen);
&gt; &gt; +    TextRun textRun = createTextRun(text);
&gt; 
&gt; At this point StringAndLengthIgnoringTruncation is only used for creating a
&gt; run. Is this just an intermediate step/change?

Actually, we do not need StringAndLengthIgnoringTruncation because we do not need to track the length of the text ignoring truncation. See bug #177620.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354356</commentid>
    <comment_count>7</comment_count>
      <attachid>322135</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-09-28 16:09:22 -0700</bug_when>
    <thetext>Created attachment 322135
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354768</commentid>
    <comment_count>8</comment_count>
      <attachid>322135</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-09-29 16:42:07 -0700</bug_when>
    <thetext>Comment on attachment 322135
Patch

Clearing flags on attachment: 322135

Committed r222670: &lt;http://trac.webkit.org/changeset/222670&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354769</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-09-29 16:42:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354770</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-29 16:42:40 -0700</bug_when>
    <thetext>&lt;rdar://problem/34750483&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322091</attachid>
            <date>2017-09-28 09:48:13 -0700</date>
            <delta_ts>2017-09-28 16:09:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177607-20170928094812.patch</filename>
            <type>text/plain</type>
            <size>17030</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzZhN2JiNzFkYTRlYTY4
ZWIxMDY2MTBjMWJmNzdkNTBkNDFhNmVkNy4uN2M2NjNhM2ExMGNkOWRhZGZlNzVlYTk4NTQ5Y2E2
ZjAzZmU3OGZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE3LTA5LTI4ICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRyYWN0IGxvZ2ljIHRv
IGNvbXB1dGUgdGV4dCB0byByZW5kZXIgaW50byBjb21tb24gZnVuY3Rpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzYwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSB3ZSBkdXBsaWNh
dGUgdGhlIGxvZ2ljIHRvIGNvbXB1dGUgdGhlIHRleHQgdG8gcmVuZGVyCisgICAgICAgIHRocm91
Z2hvdXQgSW5saW5lVGV4dEJveC4gSW5zdGVhZCB3ZSBzaG91bGQgbW92ZSB0aGlzIGNvbW1vbgor
ICAgICAgICBjb2RlIGludG8gYSBtZW1iZXIgZnVuY3Rpb24uIFRoaXMgd2lsbCBhbGxvdyB1cyB0
byBhdWRpdCB0aGUKKyAgICAgICAgdGhlIGNvZGUgcGF0aHMgdGhhdCByZW5kZXIgdGV4dCBhbmQg
ZW5zdXJlIHN1Y2ggY29kZSBwYXRocworICAgICAgICBhY2NvdW50IGZvciBoeXBoZW5hdGlvbiBh
bmQgY29tYmluZWQgdGV4dCwgaWYgYXBwbGljYWJsZS4KKworICAgICAgICBOb3RlIHRoYXQgYSBU
ZXh0UnVuIGRvZXMgbm90IG93biB0aGUgdGV4dC4gVGhlIGNhbGxlciBvd25zIGl0LgorCisgICAg
ICAgIE5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdlZC4gU28sIG5vIG5ldyB0ZXN0cy4KKworICAgICAg
ICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdCBjb25zdCk6IE1vZGlmaWVkIHRvCisgICAgICAg
IHVzZSB0ZXh0KCkgYW5kIGNyZWF0ZVRleHRSdW4oKSB0byBjb21wdXRlIHRoZSB0ZXh0IHRvIHJl
bmRlcgorICAgICAgICBhbmQgdGhlIHRleHQgcnVuIGZvciBpdC4KKyAgICAgICAgKFdlYkNvcmU6
OklubGluZVRleHRCb3g6OnBhaW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVU
ZXh0Qm94OjpwYWludFNlbGVjdGlvbik6IERpdHRvLiBBZGRpdGlvbmFsbHkgcXVlcnkKKyAgICAg
ICAgbGluZVN0eWxlKCkgZm9yIHRoZSBzdHlsZSBvZiB0aGUgbGluZSBpbnN0ZWFkIG9mIHJlcXVp
cmluZyBpdCB0byBiZQorICAgICAgICBwYXNzZWQgYXMgYW4gYXJndW1lbnQuCisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFRleHRTdWJyYW5nZUJhY2tncm91bmQpOiBNb2Rp
ZmllZAorICAgICAgICB0byB1c2UgdGV4dCgpIGFuZCBjcmVhdGVUZXh0UnVuKCkgdG8gY29tcHV0
ZSB0aGUgdGV4dCB0byByZW5kZXIKKyAgICAgICAgYW5kIHRoZSB0ZXh0IHJ1biBmb3IgaXQuCisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VyKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbiBj
b25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cG9zaXRpb25G
b3JPZmZzZXQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6
OmNyZWF0ZVRleHRSdW4gY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRl
eHRCb3g6OnRleHQgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRC
b3g6OnN1YnN0cmluZ1RvUmVuZGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklubGluZVRleHRCb3g6Omh5cGhlbmF0ZWRTdHJpbmdGb3JUZXh0UnVuIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpzdWJzdHJpbmdUb1JlbmRlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpoeXBoZW5hdGVkU3RyaW5nRm9yVGV4
dFJ1bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1
Y3RUZXh0UnVuKTogRGVsZXRlZC4KKwogMjAxNy0wOS0yNiAgRGFuaWVsIEJhdGVzICA8ZGFiYXRl
c0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGV4dHJhbmVvdXMgaW5jbHVkZXMgb2YgVGV4
dFJ1bi5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXgg
NWMyYjYzYTI5MWVjZjhjNTYzMDYxNjMyNTMzYjc4MjI1NDA0NjBlMC4uMDIxZGNhYjFkOWZkNTQw
OGU2NDMzZGQzNjUyYzEwNDg2MjM0ZmY5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcApAQCAtMTkwLDYgKzE5MCw3IEBAIGlubGluZSBjb25zdCBGb250Q2Fz
Y2FkZSYgSW5saW5lVGV4dEJveDo6bGluZUZvbnQoKSBjb25zdAogICAgIHJldHVybiBjb21iaW5l
ZFRleHQoKSA/IGNvbWJpbmVkVGV4dCgpLT50ZXh0Q29tYmluZUZvbnQoKSA6IGxpbmVTdHlsZSgp
LmZvbnRDYXNjYWRlKCk7CiB9CiAKKy8vIEZJWE1FOiBTaGFyZSBtb3JlIGNvZGUgd2l0aCBwYWlu
dFNlbGVjdGlvbigpLgogTGF5b3V0UmVjdCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJl
Y3QodW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBvcykgY29uc3QKIHsKICAgICB1bnNp
Z25lZCBzUG9zID0gY2xhbXBlZE9mZnNldChzdGFydFBvcyk7CkBAIC0yMDQsMTkgKzIwNSwyMCBA
QCBMYXlvdXRSZWN0IElubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBz
dGFydFBvcywgdW5zaWduZWQgZW5kUG9zKQogCiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3Ag
PSB0aGlzLT5zZWxlY3Rpb25Ub3AoKTsKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodCA9
IHRoaXMtPnNlbGVjdGlvbkhlaWdodCgpOwotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5
bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKLSAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGxp
bmVGb250KCk7CiAKLSAgICBTdHJpbmcgaHlwaGVuYXRlZFN0cmluZzsKLSAgICBib29sIHJlc3Bl
Y3RIeXBoZW4gPSBlUG9zID09IG1fbGVuICYmIGhhc0h5cGhlbigpOwotICAgIGlmIChyZXNwZWN0
SHlwaGVuKQotICAgICAgICBoeXBoZW5hdGVkU3RyaW5nID0gaHlwaGVuYXRlZFN0cmluZ0ZvclRl
eHRSdW4obGluZVN0eWxlKTsKLSAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVu
KGxpbmVTdHlsZSwgaHlwaGVuYXRlZFN0cmluZyk7CisgICAgLy8gRklYTUU6IEFkanVzdCBzZWxl
Y3Rpb24gcmVjdCB3aXRoIHJlc3BlY3QgdG8gY29tYmluZWQgdGV4dC4KKyAgICBib29sIGlnbm9y
ZUNvbWJpbmVkVGV4dCA9IHRydWU7CisgICAgYXV0byB0ZXh0ID0gdGhpcy0+dGV4dChpZ25vcmVD
b21iaW5lZFRleHQpOworICAgIFRleHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRSdW4odGV4dCk7
CisgICAgLy8gRklYTUU6IFNob3VsZG4ndCB3ZSBhZGp1c3QgZVBvcyB0byB0ZXh0UnVuLmxlbmd0
aCgpIGlmIGVQb3MgPT0gKG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uID8gbV90cnVuY2F0
aW9uIDogbV9sZW4pCisgICAgLy8gc28gdGhhdCB0aGUgc2VsZWN0aW9uIHNwYW5zIHRoZSBoeXBl
bi9jb21iaW5lZCB0ZXh0PwogCiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0
UmVjdChMYXlvdXRQb2ludChsb2dpY2FsTGVmdCgpLCBzZWxlY3Rpb25Ub3ApLCBMYXlvdXRTaXpl
KG1fbG9naWNhbFdpZHRoLCBzZWxlY3Rpb25IZWlnaHQpKTsKICAgICAvLyBBdm9pZCBjb21wdXRp
bmcgdGhlIGZvbnQgd2lkdGggd2hlbiB0aGUgZW50aXJlIGxpbmUgYm94IGlzIHNlbGVjdGVkIGFz
IGFuIG9wdGltaXphdGlvbi4KICAgICBpZiAoc1BvcyB8fCBlUG9zICE9IG1fbGVuKQotICAgICAg
ICBmb250LmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3Qs
IHNQb3MsIGVQb3MpOworICAgICAgICBsaW5lRm9udCgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JU
ZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3QsIHNQb3MsIGVQb3MpOworICAgIC8vIEZJWE1FOiBU
aGUgY29tcHV0YXRpb24gb2YgdGhlIHNuYXBwZWQgc2VsZWN0aW9uIHJlY3QgZGlmZmVycyBmcm9t
IHRoZSBjb21wdXRhdGlvbiBvZiB0aGlzIHJlY3QKKyAgICAvLyBpbiBwYWludFNlbGVjdGlvbigp
LiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg5MTM+Lgog
ICAgIEludFJlY3Qgc25hcHBlZFNlbGVjdGlvblJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNlbGVj
dGlvblJlY3QpOwogICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoID0gc25hcHBlZFNlbGVjdGlv
blJlY3Qud2lkdGgoKTsKICAgICBpZiAoc25hcHBlZFNlbGVjdGlvblJlY3QueCgpID4gbG9naWNh
bFJpZ2h0KCkpCkBAIC00ODgsNyArNDkwLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LAogICAg
ICAgICBwYWludERvY3VtZW50TWFya2Vycyhjb250ZXh0LCBib3hPcmlnaW4sIGZvbnQsIHRydWUp
OwogCiAgICAgICAgIGlmIChoYXZlU2VsZWN0aW9uICYmICF1c2VDdXN0b21VbmRlcmxpbmVzKQot
ICAgICAgICAgICAgcGFpbnRTZWxlY3Rpb24oY29udGV4dCwgYm94T3JpZ2luLCBsaW5lU3R5bGUs
IGZvbnQsIHNlbGVjdGlvblBhaW50U3R5bGUuZmlsbENvbG9yKTsKKyAgICAgICAgICAgIHBhaW50
U2VsZWN0aW9uKGNvbnRleHQsIGJveE9yaWdpbiwgZm9udCwgc2VsZWN0aW9uUGFpbnRTdHlsZS5m
aWxsQ29sb3IpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBSaWdodCBub3csIElubGluZVRleHRC
b3hlcyBuZXZlciBjYWxsIGFkZFJlbGV2YW50VW5wYWludGVkT2JqZWN0KCkgZXZlbiB0aG91Z2gg
dGhleSBtaWdodApAQCAtNDk5LDEzICs1MDEsOCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsCiAg
ICAgICAgIHJlbmRlcmVyKCkucGFnZSgpLmFkZFJlbGV2YW50UmVwYWludGVkT2JqZWN0KCZyZW5k
ZXJlcigpLCBJbnRSZWN0KGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCksIGxvZ2ljYWxXaWR0
aCgpLCBsb2dpY2FsSGVpZ2h0KCkpKTsKIAogICAgIC8vIDIuIE5vdyBwYWludCB0aGUgZm9yZWdy
b3VuZCwgaW5jbHVkaW5nIHRleHQgYW5kIGRlY29yYXRpb25zIGxpa2UgdW5kZXJsaW5lL292ZXJs
aW5lIChpbiBxdWlya3MgbW9kZSBvbmx5KS4KLSAgICBTdHJpbmcgYWx0ZXJuYXRlU3RyaW5nVG9S
ZW5kZXI7Ci0gICAgaWYgKGNvbWJpbmVkVGV4dCkKLSAgICAgICAgYWx0ZXJuYXRlU3RyaW5nVG9S
ZW5kZXIgPSBjb21iaW5lZFRleHQtPmNvbWJpbmVkU3RyaW5nRm9yUmVuZGVyaW5nKCk7Ci0gICAg
ZWxzZSBpZiAoaGFzSHlwaGVuKCkpCi0gICAgICAgIGFsdGVybmF0ZVN0cmluZ1RvUmVuZGVyID0g
aHlwaGVuYXRlZFN0cmluZ0ZvclRleHRSdW4obGluZVN0eWxlKTsKLQotICAgIFRleHRSdW4gdGV4
dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxlLCBhbHRlcm5hdGVTdHJpbmdUb1JlbmRl
cik7CisgICAgYXV0byB0ZXh0ID0gdGhpcy0+dGV4dCgpOworICAgIFRleHRSdW4gdGV4dFJ1biA9
IGNyZWF0ZVRleHRSdW4odGV4dCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dFJ1bi5sZW5n
dGgoKTsKIAogICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0ID0gMDsKQEAgLTY1Miw3ICs2NDks
NyBAQCBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rp
b25TdGFydEVuZCgpIGNvbnN0CiAgICAgcmV0dXJuIHsgY2xhbXBlZE9mZnNldChzdGFydCksIGNs
YW1wZWRPZmZzZXQoZW5kKSB9OwogfQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0
aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2lu
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25z
dCBDb2xvciYgdGV4dENvbG9yKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IpCiB7CiAjaWYgRU5B
QkxFKFRFWFRfU0VMRUNUSU9OKQogICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkK
QEAgLTY3NywxOSArNjc0LDE2IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24o
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBiCiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAgIHVwZGF0ZUdyYXBo
aWNzQ29udGV4dChjb250ZXh0LCBUZXh0UGFpbnRTdHlsZShjKSk7IC8vIERvbid0IGRyYXcgdGV4
dCBhdCBhbGwhCiAKLSAgICAvLyBJZiB0aGUgdGV4dCBpcyB0cnVuY2F0ZWQsIGxldCB0aGUgdGhp
bmcgYmVpbmcgcGFpbnRlZCBpbiB0aGUgdHJ1bmNhdGlvbgorICAgIC8vIE5vdGUgdGhhdCBpZiB0
aGUgdGV4dCBpcyB0cnVuY2F0ZWQsIHdlIGxldCB0aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBpbiB0
aGUgdHJ1bmNhdGlvbgogICAgIC8vIGRyYXcgaXRzIG93biBoaWdobGlnaHQuCiAKLSAgICB1bnNp
Z25lZCBsZW5ndGggPSBtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbiA/IG1fdHJ1bmNhdGlv
biA6IGxlbigpOwotCiAgICAgLy8gRklYTUU6IEFkanVzdCB0ZXh0IHJ1biBmb3IgY29tYmluZWQg
dGV4dC4KLSAgICBTdHJpbmcgaHlwaGVuYXRlZFN0cmluZzsKLSAgICBib29sIHJlc3BlY3RIeXBo
ZW4gPSBzZWxlY3Rpb25FbmQgPT0gbGVuZ3RoICYmIGhhc0h5cGhlbigpOwotICAgIGlmIChyZXNw
ZWN0SHlwaGVuKQotICAgICAgICBoeXBoZW5hdGVkU3RyaW5nID0gaHlwaGVuYXRlZFN0cmluZ0Zv
clRleHRSdW4oc3R5bGUsIGxlbmd0aCk7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0
VGV4dFJ1bihzdHlsZSwgaHlwaGVuYXRlZFN0cmluZywgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4o
bGVuZ3RoKSk7Ci0gICAgaWYgKHJlc3BlY3RIeXBoZW4pCi0gICAgICAgIHNlbGVjdGlvbkVuZCA9
IHRleHRSdW4ubGVuZ3RoKCk7CisgICAgYm9vbCBpZ25vcmVDb21iaW5lZFRleHQgPSB0cnVlOwor
ICAgIGF1dG8gdGV4dCA9IHRoaXMtPnRleHQoaWdub3JlQ29tYmluZWRUZXh0KTsKKyAgICBUZXh0
UnVuIHRleHRSdW4gPSBjcmVhdGVUZXh0UnVuKHRleHQpOworICAgIHVuc2lnbmVkIGVuZE9mTGlu
ZUlnbm9yaW5nSHlwaGVuQW5kQ29tYmluZWRUZXh0ID0gbV90cnVuY2F0aW9uICE9IGNOb1RydW5j
YXRpb24gPyBtX3RydW5jYXRpb24gOiBtX2xlbjsKKyAgICBpZiAoc2VsZWN0aW9uRW5kID09IGVu
ZE9mTGluZUlnbm9yaW5nSHlwaGVuQW5kQ29tYmluZWRUZXh0KQorICAgICAgICBzZWxlY3Rpb25F
bmQgPSB0ZXh0UnVuLmxlbmd0aCgpOyAvLyBFeHRlbmQgc2VsZWN0aW9uIHRvIGluY2x1ZGUgaHlw
aGVuL2NvbWJpbmVkIHRleHQuCiAKICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0g
cm9vdCgpOwogICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9tID0gcm9vdEJveC5zZWxlY3Rp
b25Cb3R0b20oKTsKQEAgLTcwNCw3ICs2OTgsNiBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50
U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYgog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAgICAgVU5VU0VEX1BBUkFNKGJveE9y
aWdpbik7Ci0gICAgVU5VU0VEX1BBUkFNKHN0eWxlKTsKICAgICBVTlVTRURfUEFSQU0oZm9udCk7
CiAgICAgVU5VU0VEX1BBUkFNKHRleHRDb2xvcik7CiAjZW5kaWYKQEAgLTcyNiw3ICs3MTksMTAg
QEAgaW5saW5lIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0U3VicmFuZ2VCYWNrZ3JvdW5k
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwKICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3Qg
PSBMYXlvdXRSZWN0KGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCkgLSBkZWx0YVksIDAsIHNl
bGVjdGlvbkhlaWdodCgpKTsKIAogICAgIC8vIEZJWE1FOiBBZGp1c3QgdGV4dCBydW4gZm9yIGNv
bWJpbmVkIHRleHQgYW5kIGh5cGhlbmF0aW9uLgotICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0
cnVjdFRleHRSdW4obGluZVN0eWxlKCkpOworICAgIGJvb2wgaWdub3JlQ29tYmluZWRUZXh0ID0g
dHJ1ZTsKKyAgICBib29sIGlnbm9yZUh5cGhlbiA9IHRydWU7CisgICAgYXV0byB0ZXh0ID0gdGhp
cy0+dGV4dChpZ25vcmVDb21iaW5lZFRleHQsIGlnbm9yZUh5cGhlbik7CisgICAgVGV4dFJ1biB0
ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bih0ZXh0KTsKICAgICBmb250LmFkanVzdFNlbGVjdGlvblJl
Y3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQp
OwogICAgIGNvbnRleHQuZmlsbFJlY3Qoc25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhXcml0aW5n
RGlyZWN0aW9uKHNlbGVjdGlvblJlY3QsIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2Fs
ZUZhY3RvcigpLCB0ZXh0UnVuLmx0cigpKSwgY29sb3IpOwogfQpAQCAtODI0LDEwICs4MjAsMTMg
QEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2kKIAogICAgICAgICAvLyBDYWxjdWxhdGUgc3RhcnQg
JiB3aWR0aAogICAgICAgICAvLyBGSVhNRTogQWRqdXN0IHRleHQgcnVuIGZvciBjb21iaW5lZCB0
ZXh0IGFuZCBoeXBoZW5hdGlvbi4KKyAgICAgICAgYm9vbCBpZ25vcmVDb21iaW5lZFRleHQgPSB0
cnVlOworICAgICAgICBib29sIGlnbm9yZUh5cGhlbiA9IHRydWU7CiAgICAgICAgIGludCBkZWx0
YVkgPSByZW5kZXJlcigpLnN0eWxlKCkuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2Vs
ZWN0aW9uQm90dG9tKCkgLSBsb2dpY2FsQm90dG9tKCkgOiBsb2dpY2FsVG9wKCkgLSBzZWxlY3Rp
b25Ub3AoKTsKICAgICAgICAgaW50IHNlbEhlaWdodCA9IHNlbGVjdGlvbkhlaWdodCgpOwogICAg
ICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQoYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAt
IGRlbHRhWSk7Ci0gICAgICAgIFRleHRSdW4gcnVuID0gY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5
bGUoKSk7CisgICAgICAgIGF1dG8gdGV4dCA9IHRoaXMtPnRleHQoaWdub3JlQ29tYmluZWRUZXh0
LCBpZ25vcmVIeXBoZW4pOworICAgICAgICBUZXh0UnVuIHJ1biA9IGNyZWF0ZVRleHRSdW4odGV4
dCk7CiAKICAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdChzdGFy
dFBvaW50LCBGbG9hdFNpemUoMCwgc2VsSGVpZ2h0KSk7CiAgICAgICAgIGZvbnQuYWRqdXN0U2Vs
ZWN0aW9uUmVjdEZvclRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBzdGFydFBvc2l0aW9uLCBlbmRQ
b3NpdGlvbik7CkBAIC0xMDUwLDcgKzEwNDksMTAgQEAgaW50IElubGluZVRleHRCb3g6Om9mZnNl
dEZvclBvc2l0aW9uKGZsb2F0IGxpbmVPZmZzZXQsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMK
ICAgICAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxlbigpIDogMDsKICAg
ICBpZiAobGluZU9mZnNldCAtIGxvZ2ljYWxMZWZ0KCkgPCAwKQogICAgICAgICByZXR1cm4gaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gMCA6IGxlbigpOwotICAgIHJldHVybiBsaW5lRm9udCgp
Lm9mZnNldEZvclBvc2l0aW9uKGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxlKCkpLCBsaW5lT2Zm
c2V0IC0gbG9naWNhbExlZnQoKSwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOworICAgIGJvb2wgaWdu
b3JlQ29tYmluZWRUZXh0ID0gdHJ1ZTsKKyAgICBib29sIGlnbm9yZUh5cGhlbiA9IHRydWU7Cisg
ICAgYXV0byB0ZXh0ID0gdGhpcy0+dGV4dChpZ25vcmVDb21iaW5lZFRleHQsIGlnbm9yZUh5cGhl
bik7CisgICAgcmV0dXJuIGxpbmVGb250KCkub2Zmc2V0Rm9yUG9zaXRpb24oY3JlYXRlVGV4dFJ1
bih0ZXh0KSwgbGluZU9mZnNldCAtIGxvZ2ljYWxMZWZ0KCksIGluY2x1ZGVQYXJ0aWFsR2x5cGhz
KTsKIH0KIAogZmxvYXQgSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQg
b2Zmc2V0KSBjb25zdApAQCAtMTA3Myw0MCArMTA3NSw0NyBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94
Ojpwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiAKICAgICAvLyBGSVhN
RTogRG8gd2UgbmVlZCB0byBhZGQgcmlnaHRCZWFyaW5nIGhlcmU/CiAgICAgTGF5b3V0UmVjdCBz
ZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdChsb2dpY2FsTGVmdCgpLCAwLCAwLCAwKTsKLSAgICBU
ZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKGxpbmVTdHlsZSgpKTsKKyAgICBib29s
IGlnbm9yZUNvbWJpbmVkVGV4dCA9IHRydWU7CisgICAgYm9vbCBpZ25vcmVIeXBoZW4gPSB0cnVl
OworICAgIGF1dG8gdGV4dCA9IHRoaXMtPnRleHQoaWdub3JlQ29tYmluZWRUZXh0LCBpZ25vcmVI
eXBoZW4pOworICAgIFRleHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRSdW4odGV4dCk7CiAgICAg
bGluZUZvbnQoKS5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25S
ZWN0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKICAgICByZXR1cm4gc25hcFJlY3RUb0Rldmlj
ZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0aW9uKHNlbGVjdGlvblJlY3QsIHJlbmRlcmVyKCkuZG9j
dW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCB0ZXh0UnVuLmx0cigpKS5tYXhYKCk7CiB9CiAK
LVN0cmluZ1ZpZXcgSW5saW5lVGV4dEJveDo6c3Vic3RyaW5nVG9SZW5kZXIoc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4gb3ZlcnJpZGluZ0xlbmd0aCkgY29uc3QKK1RleHRSdW4gSW5saW5lVGV4dEJv
eDo6Y3JlYXRlVGV4dFJ1bihTdHJpbmdBbmRMZW5ndGhJZ25vcmluZ1RydW5jYXRpb24mIHN0cmlu
ZykgY29uc3QKIHsKLSAgICByZXR1cm4gU3RyaW5nVmlldyhyZW5kZXJlcigpLnRleHQoKSkuc3Vi
c3RyaW5nKHN0YXJ0KCksIG92ZXJyaWRpbmdMZW5ndGgudmFsdWVfb3IobGVuKCkpKTsKLX0KKyAg
ICBBU1NFUlQoc3RyaW5nLmxlbmd0aElnbm9yaW5nVHJ1bmNhdGlvbiA+PSBzdHJpbmcuc3RyaW5n
Lmxlbmd0aCgpKTsKIAotU3RyaW5nIElubGluZVRleHRCb3g6Omh5cGhlbmF0ZWRTdHJpbmdGb3JU
ZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
YWx0ZXJuYXRlTGVuZ3RoKSBjb25zdAotewotICAgIEFTU0VSVChoYXNIeXBoZW4oKSk7Ci0gICAg
cmV0dXJuIG1ha2VTdHJpbmcoc3Vic3RyaW5nVG9SZW5kZXIoYWx0ZXJuYXRlTGVuZ3RoKSwgc3R5
bGUuaHlwaGVuU3RyaW5nKCkpOwotfQorICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gbGluZVN0eWxl
KCk7CisgICAgVGV4dFJ1biB0ZXh0UnVuIHsgc3RyaW5nLnN0cmluZywgdGV4dFBvcygpLCBleHBh
bnNpb24oKSwgZXhwYW5zaW9uQmVoYXZpb3IoKSwgZGlyZWN0aW9uKCksIGRpck92ZXJyaWRlKCkg
fHwgc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlciwgIXJlbmRlcmVyKCkuY2FuVXNl
U2ltcGxlRm9udENvZGVQYXRoKCkgfTsKKyAgICB0ZXh0UnVuLnNldFRhYlNpemUoIXN0eWxlLmNv
bGxhcHNlV2hpdGVTcGFjZSgpLCBzdHlsZS50YWJTaXplKCkpOwogCi1UZXh0UnVuIElubGluZVRl
eHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTdHJpbmdW
aWV3IGFsdGVybmF0ZVN0cmluZ1RvUmVuZGVyLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBhbHRl
cm5hdGVMZW5ndGgpIGNvbnN0Ci17Ci0gICAgaWYgKGFsdGVybmF0ZVN0cmluZ1RvUmVuZGVyLmlz
TnVsbCgpKQotICAgICAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgc3Vic3RyaW5n
VG9SZW5kZXIoYWx0ZXJuYXRlTGVuZ3RoKSwgcmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCkgLSBzdGFy
dCgpKTsKLSAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgYWx0ZXJuYXRlU3RyaW5n
VG9SZW5kZXIsIGFsdGVybmF0ZVN0cmluZ1RvUmVuZGVyLmxlbmd0aCgpKTsKKyAgICAvLyBQcm9w
YWdhdGUgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBjaGFyYWN0ZXJzIGJ1ZmZlciB0byB0aGUg
VGV4dFJ1biwgZXZlbiB3aGVuIHdlJ3JlIG9ubHkgcHJvY2Vzc2luZyBhIHN1YnN0cmluZy4KKyAg
ICB0ZXh0UnVuLnNldENoYXJhY3RlcnNMZW5ndGgoc3RyaW5nLmxlbmd0aElnbm9yaW5nVHJ1bmNh
dGlvbik7CisgICAgQVNTRVJUKHRleHRSdW4uY2hhcmFjdGVyc0xlbmd0aCgpID49IHRleHRSdW4u
bGVuZ3RoKCkpOworICAgIHJldHVybiB0ZXh0UnVuOwogfQogCi1UZXh0UnVuIElubGluZVRleHRC
b3g6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTdHJpbmdWaWV3
IHN0cmluZywgdW5zaWduZWQgbWF4aW11bUxlbmd0aCkgY29uc3QKK2F1dG8gSW5saW5lVGV4dEJv
eDo6dGV4dChib29sIGlnbm9yZUNvbWJpbmVkVGV4dCwgYm9vbCBpZ25vcmVIeXBoZW4pIGNvbnN0
IC0+IFN0cmluZ0FuZExlbmd0aElnbm9yaW5nVHJ1bmNhdGlvbgogewotICAgIEFTU0VSVChtYXhp
bXVtTGVuZ3RoID49IHN0cmluZy5sZW5ndGgoKSk7Ci0KLSAgICBUZXh0UnVuIHJ1bihzdHJpbmcs
IHRleHRQb3MoKSwgZXhwYW5zaW9uKCksIGV4cGFuc2lvbkJlaGF2aW9yKCksIGRpcmVjdGlvbigp
LCBkaXJPdmVycmlkZSgpIHx8IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXIsICFy
ZW5kZXJlcigpLmNhblVzZVNpbXBsZUZvbnRDb2RlUGF0aCgpKTsKLSAgICBydW4uc2V0VGFiU2l6
ZSghc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCksIHN0eWxlLnRhYlNpemUoKSk7Ci0KLSAgICAv
LyBQcm9wYWdhdGUgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBjaGFyYWN0ZXJzIGJ1ZmZlciB0
byB0aGUgVGV4dFJ1biwgZXZlbiB3aGVuIHdlJ3JlIG9ubHkgcHJvY2Vzc2luZyBhIHN1YnN0cmlu
Zy4KLSAgICBydW4uc2V0Q2hhcmFjdGVyc0xlbmd0aChtYXhpbXVtTGVuZ3RoKTsKLSAgICBBU1NF
UlQocnVuLmNoYXJhY3RlcnNMZW5ndGgoKSA+PSBydW4ubGVuZ3RoKCkpOwotICAgIHJldHVybiBy
dW47CisgICAgaWYgKFVOTElLRUxZKG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24pKQor
ICAgICAgICByZXR1cm4geyBlbXB0eVN0cmluZygpLCAwIH07CisgICAgaWYgKGF1dG8qIGNvbWJp
bmVkVGV4dCA9IHRoaXMtPmNvbWJpbmVkVGV4dCgpKSB7CisgICAgICAgIGlmIChpZ25vcmVDb21i
aW5lZFRleHQpCisgICAgICAgICAgICByZXR1cm4geyByZW5kZXJlcigpLnRleHQoKS0+c3Vic3Ry
aW5nKG1fc3RhcnQsIG1fbGVuKSwgcmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCkgLSBtX3N0YXJ0IH07
CisgICAgICAgIGF1dG8gdGV4dCA9IGNvbWJpbmVkVGV4dC0+Y29tYmluZWRTdHJpbmdGb3JSZW5k
ZXJpbmcoKTsKKyAgICAgICAgYXV0byBsZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOworICAgICAgICBy
ZXR1cm4geyBXVEZNb3ZlKHRleHQpLCBsZW5ndGggfTsKKyAgICB9CisgICAgaWYgKGhhc0h5cGhl
bigpKSB7CisgICAgICAgIGlmIChpZ25vcmVIeXBoZW4pCisgICAgICAgICAgICByZXR1cm4geyBy
ZW5kZXJlcigpLnRleHQoKS0+c3Vic3RyaW5nKG1fc3RhcnQsIG1fbGVuKSwgcmVuZGVyZXIoKS50
ZXh0TGVuZ3RoKCkgLSBtX3N0YXJ0IH07CisgICAgICAgIGF1dG8gdGV4dCA9IG1ha2VTdHJpbmco
U3RyaW5nVmlldyhyZW5kZXJlcigpLnRleHQoKSkuc3Vic3RyaW5nKG1fc3RhcnQsIG1fbGVuKSwg
bGluZVN0eWxlKCkuaHlwaGVuU3RyaW5nKCkpOworICAgICAgICBhdXRvIGxlbmd0aCA9IHRleHQu
bGVuZ3RoKCk7CisgICAgICAgIHJldHVybiB7IFdURk1vdmUodGV4dCksIGxlbmd0aCB9OworICAg
IH0KKyAgICByZXR1cm4geyByZW5kZXJlcigpLnRleHQoKS0+c3Vic3RyaW5nKG1fc3RhcnQsIG1f
dHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uID8gbV90cnVuY2F0aW9uIDogbV9sZW4pLCByZW5k
ZXJlcigpLnRleHRMZW5ndGgoKSAtIG1fc3RhcnQgfTsKIH0KIAogaW5saW5lIGNvbnN0IFJlbmRl
ckNvbWJpbmVUZXh0KiBJbmxpbmVUZXh0Qm94Ojpjb21iaW5lZFRleHQoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKaW5kZXggYTZiNTE3NmFjZGYyZjhlYTBh
ZDljNzFhYjA1ODQ5MmNhMzFlN2UyNi4uZGQwOTllNjY1OTA3MjVlYzllZDcwMjk5N2NjYWJmNGRi
ZjFhNGU5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCkBAIC0x
MDcsMTEgKzEwNyw2IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20o
KSBjb25zdDsKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodCgpIGNvbnN0OwogCi0gICAg
U3RyaW5nVmlldyBzdWJzdHJpbmdUb1JlbmRlcihzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBvdmVy
cmlkaW5nTGVuZ3RoID0geyB9KSBjb25zdDsKLSAgICBTdHJpbmcgaHlwaGVuYXRlZFN0cmluZ0Zv
clRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBhbHRl
cm5hdGVMZW5ndGggPSB7IH0pIGNvbnN0OwotICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihj
b25zdCBSZW5kZXJTdHlsZSYsIFN0cmluZ1ZpZXcgYWx0ZXJuYXRlU3RyaW5nVG9SZW5kZXIgPSB7
IH0sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGFsdGVybmF0ZUxlbmd0aCA9IHsgfSkgY29uc3Q7
Ci0gICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwgU3RyaW5n
VmlldywgdW5zaWduZWQgbWF4aW11bUxlbmd0aCkgY29uc3Q7Ci0KIHB1YmxpYzoKICAgICBGbG9h
dFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0
UmVjdCh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOyB9CiAKQEAgLTE1Nyw3ICsxNTIsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9p
bnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwKICAgICAgICAgVGV4dERl
Y29yYXRpb24sIFRleHRQYWludFN0eWxlLCBjb25zdCBTaGFkb3dEYXRhKiwgY29uc3QgRmxvYXRS
ZWN0JiBjbGlwT3V0UmVjdCk7Ci0gICAgdm9pZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiwgY29u
c3QgRm9udENhc2NhZGUmLCBjb25zdCBDb2xvciYpOworICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24o
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IENvbG9yJik7CiAKICAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXIo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IE1hcmtlclN1YnJhbmdlJik7CiAgICAgdm9pZCBwYWludERvY3VtZW50
TWFya2VycyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNv
bnN0IEZvbnRDYXNjYWRlJiwgYm9vbCBiYWNrZ3JvdW5kKTsKQEAgLTE3MSw2ICsxNjYsMTMgQEAg
cHJpdmF0ZToKICAgICBjb25zdCBSZW5kZXJDb21iaW5lVGV4dCogY29tYmluZWRUZXh0KCkgY29u
c3Q7CiAgICAgY29uc3QgRm9udENhc2NhZGUmIGxpbmVGb250KCkgY29uc3Q7CiAKKyAgICBzdHJ1
Y3QgU3RyaW5nQW5kTGVuZ3RoSWdub3JpbmdUcnVuY2F0aW9uIHsKKyAgICAgICAgU3RyaW5nIHN0
cmluZzsgLy8gQWZmZWN0ZWQgYnkgdHJ1bmNhdGlvbgorICAgICAgICB1bnNpZ25lZCBsZW5ndGhJ
Z25vcmluZ1RydW5jYXRpb247CisgICAgfTsKKyAgICBTdHJpbmdBbmRMZW5ndGhJZ25vcmluZ1Ry
dW5jYXRpb24gdGV4dChib29sIGlnbm9yZUNvbWJpbmVkVGV4dCA9IGZhbHNlLCBib29sIGlnbm9y
ZUh5cGhlbiA9IGZhbHNlKSBjb25zdDsgLy8gVGhlIHRleHQgdG8gcmVuZGVyLgorICAgIFRleHRS
dW4gY3JlYXRlVGV4dFJ1bihTdHJpbmdBbmRMZW5ndGhJZ25vcmluZ1RydW5jYXRpb24mKSBjb25z
dDsKKwogICAgIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3Q7CiAK
ICAgICB2b2lkIGJlaGF2ZXNMaWtlVGV4dCgpIGNvbnN0ID0gZGVsZXRlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322135</attachid>
            <date>2017-09-28 16:09:22 -0700</date>
            <delta_ts>2017-09-29 16:42:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177607-20170928160922.patch</filename>
            <type>text/plain</type>
            <size>15811</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNjEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE1YWI0MThkODVjM2Q5
NDFkMTM2ODg4YjUwYTc5N2I0ODUyZGE3NC4uZjVkYjIxMzIxMzk3NjkxMGFjZTY1MzcxZTVlYmZm
ZTdiNjk3Zjg0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ2IEBACiAyMDE3LTA5LTI4ICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAorICAgICAgICBFeHRyYWN0IGxvZ2ljIHRv
IGNvbXB1dGUgdGV4dCB0byByZW5kZXIgaW50byBjb21tb24gZnVuY3Rpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzYwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSB3ZSBkdXBsaWNh
dGUgdGhlIGxvZ2ljIHRvIGNvbXB1dGUgdGhlIHRleHQgdG8gcmVuZGVyCisgICAgICAgIHRocm91
Z2hvdXQgSW5saW5lVGV4dEJveC4gSW5zdGVhZCB3ZSBzaG91bGQgbW92ZSB0aGlzIGNvbW1vbgor
ICAgICAgICBjb2RlIGludG8gYSBtZW1iZXIgZnVuY3Rpb24uIFRoaXMgd2lsbCBhbGxvdyB1cyB0
byBhdWRpdCB0aGUKKyAgICAgICAgdGhlIGNvZGUgcGF0aHMgdGhhdCByZW5kZXIgdGV4dCBhbmQg
ZW5zdXJlIHN1Y2ggY29kZSBwYXRocworICAgICAgICBhY2NvdW50IGZvciBoeXBoZW5hdGlvbiBh
bmQgY29tYmluZWQgdGV4dCwgaWYgYXBwbGljYWJsZS4KKworICAgICAgICBOb3RlIHRoYXQgYSBU
ZXh0UnVuIGRvZXMgbm90IG93biB0aGUgdGV4dC4gVGhlIGNhbGxlciBvd25zIGl0LgorCisgICAg
ICAgIE5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdlZC4gU28sIG5vIG5ldyB0ZXN0cy4KKworICAgICAg
ICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdCBjb25zdCk6IE1vZGlmaWVkIHRvCisgICAgICAg
IHVzZSB0ZXh0KCkgYW5kIGNyZWF0ZVRleHRSdW4oKSB0byBjb21wdXRlIHRoZSB0ZXh0IHRvIHJl
bmRlcgorICAgICAgICBhbmQgdGhlIHRleHQgcnVuIGZvciBpdC4KKyAgICAgICAgKFdlYkNvcmU6
OklubGluZVRleHRCb3g6OnBhaW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVU
ZXh0Qm94OjpwYWludFNlbGVjdGlvbik6IERpdHRvLiBBZGRpdGlvbmFsbHkgcXVlcnkKKyAgICAg
ICAgbGluZVN0eWxlKCkgZm9yIHRoZSBzdHlsZSBvZiB0aGUgbGluZSBpbnN0ZWFkIG9mIHJlcXVp
cmluZyBpdCB0byBiZQorICAgICAgICBwYXNzZWQgYXMgYW4gYXJndW1lbnQuCisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFRleHRTdWJyYW5nZUJhY2tncm91bmQpOiBNb2Rp
ZmllZAorICAgICAgICB0byB1c2UgdGV4dCgpIGFuZCBjcmVhdGVUZXh0UnVuKCkgdG8gY29tcHV0
ZSB0aGUgdGV4dCB0byByZW5kZXIKKyAgICAgICAgYW5kIHRoZSB0ZXh0IHJ1biBmb3IgaXQuCisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VyKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbiBj
b25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cG9zaXRpb25G
b3JPZmZzZXQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6
OmNyZWF0ZVRleHRSdW4gY29uc3QpOiBBZGRlZDsgZm9ybWVybHkgbmFtZWQgY29uc3RydWN0VGV4
dFJ1bi4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnRleHQgY29uc3QpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnN1YnN0cmluZ1RvUmVuZGVyIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6Omh5cGhlbmF0
ZWRTdHJpbmdGb3JUZXh0UnVuIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0
Qm94OjpzdWJzdHJpbmdUb1JlbmRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVUZXh0Qm94OjpoeXBoZW5hdGVkU3RyaW5nRm9yVGV4dFJ1bik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKTogRGVsZXRlZDsgcmVu
YW1lZCB0byBjcmVhdGVUZXh0UnVuLgorCisyMDE3LTA5LTI4ICBEYW5pZWwgQmF0ZXMgIDxkYWJh
dGVzQGFwcGxlLmNvbT4KKwogICAgICAgICBSZW1vdmUgVGV4dFJ1bjo6c2V0Q2hhcmFjdGVyc0xl
bmd0aCgpIGFuZCBUZXh0UnVuOjpjaGFyYWN0ZXJzTGVuZ3RoKCkKICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzYyMAogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXggZWY2ZDNhOGYxMWIxMWM1NzZiZDg2Yjdj
MjAzNDM0NzcxYjE1NmY2NS4uMzYxY2M0MzU3M2UwNWIwNTk1ZDFjMjNmMGNlYWM3MmE5MmM5MGMx
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApAQCAtMTkw
LDYgKzE5MCw3IEBAIGlubGluZSBjb25zdCBGb250Q2FzY2FkZSYgSW5saW5lVGV4dEJveDo6bGlu
ZUZvbnQoKSBjb25zdAogICAgIHJldHVybiBjb21iaW5lZFRleHQoKSA/IGNvbWJpbmVkVGV4dCgp
LT50ZXh0Q29tYmluZUZvbnQoKSA6IGxpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiB9CiAKKy8v
IEZJWE1FOiBTaGFyZSBtb3JlIGNvZGUgd2l0aCBwYWludFNlbGVjdGlvbigpLgogTGF5b3V0UmVj
dCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QodW5zaWduZWQgc3RhcnRQb3MsIHVu
c2lnbmVkIGVuZFBvcykgY29uc3QKIHsKICAgICB1bnNpZ25lZCBzUG9zID0gY2xhbXBlZE9mZnNl
dChzdGFydFBvcyk7CkBAIC0yMDQsMTkgKzIwNSwyMCBAQCBMYXlvdXRSZWN0IElubGluZVRleHRC
b3g6OmxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9z
KQogCiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3AgPSB0aGlzLT5zZWxlY3Rpb25Ub3AoKTsK
ICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodCA9IHRoaXMtPnNlbGVjdGlvbkhlaWdodCgp
OwotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsK
LSAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGxpbmVGb250KCk7CiAKLSAgICBTdHJpbmcg
aHlwaGVuYXRlZFN0cmluZzsKLSAgICBib29sIHJlc3BlY3RIeXBoZW4gPSBlUG9zID09IG1fbGVu
ICYmIGhhc0h5cGhlbigpOwotICAgIGlmIChyZXNwZWN0SHlwaGVuKQotICAgICAgICBoeXBoZW5h
dGVkU3RyaW5nID0gaHlwaGVuYXRlZFN0cmluZ0ZvclRleHRSdW4obGluZVN0eWxlKTsKLSAgICBU
ZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKGxpbmVTdHlsZSwgaHlwaGVuYXRlZFN0
cmluZyk7CisgICAgLy8gRklYTUU6IEFkanVzdCBzZWxlY3Rpb24gcmVjdCB3aXRoIHJlc3BlY3Qg
dG8gY29tYmluZWQgdGV4dC4KKyAgICBib29sIGlnbm9yZUNvbWJpbmVkVGV4dCA9IHRydWU7Cisg
ICAgYXV0byB0ZXh0ID0gdGhpcy0+dGV4dChpZ25vcmVDb21iaW5lZFRleHQpOworICAgIFRleHRS
dW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRSdW4odGV4dCk7CisgICAgLy8gRklYTUU6IFNob3VsZG4n
dCB3ZSBhZGp1c3QgZVBvcyB0byB0ZXh0UnVuLmxlbmd0aCgpIGlmIGVQb3MgPT0gKG1fdHJ1bmNh
dGlvbiAhPSBjTm9UcnVuY2F0aW9uID8gbV90cnVuY2F0aW9uIDogbV9sZW4pCisgICAgLy8gc28g
dGhhdCB0aGUgc2VsZWN0aW9uIHNwYW5zIHRoZSBoeXBlbi9jb21iaW5lZCB0ZXh0PwogCiAgICAg
TGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdChMYXlvdXRQb2ludChsb2dpY2Fs
TGVmdCgpLCBzZWxlY3Rpb25Ub3ApLCBMYXlvdXRTaXplKG1fbG9naWNhbFdpZHRoLCBzZWxlY3Rp
b25IZWlnaHQpKTsKICAgICAvLyBBdm9pZCBjb21wdXRpbmcgdGhlIGZvbnQgd2lkdGggd2hlbiB0
aGUgZW50aXJlIGxpbmUgYm94IGlzIHNlbGVjdGVkIGFzIGFuIG9wdGltaXphdGlvbi4KICAgICBp
ZiAoc1BvcyB8fCBlUG9zICE9IG1fbGVuKQotICAgICAgICBmb250LmFkanVzdFNlbGVjdGlvblJl
Y3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3QsIHNQb3MsIGVQb3MpOworICAgICAgICBs
aW5lRm9udCgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJl
Y3QsIHNQb3MsIGVQb3MpOworICAgIC8vIEZJWE1FOiBUaGUgY29tcHV0YXRpb24gb2YgdGhlIHNu
YXBwZWQgc2VsZWN0aW9uIHJlY3QgZGlmZmVycyBmcm9tIHRoZSBjb21wdXRhdGlvbiBvZiB0aGlz
IHJlY3QKKyAgICAvLyBpbiBwYWludFNlbGVjdGlvbigpLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg5MTM+LgogICAgIEludFJlY3Qgc25hcHBlZFNlbGVj
dGlvblJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvblJlY3QpOwogICAgIExheW91dFVu
aXQgbG9naWNhbFdpZHRoID0gc25hcHBlZFNlbGVjdGlvblJlY3Qud2lkdGgoKTsKICAgICBpZiAo
c25hcHBlZFNlbGVjdGlvblJlY3QueCgpID4gbG9naWNhbFJpZ2h0KCkpCkBAIC00ODgsNyArNDkw
LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LAogICAgICAgICBwYWludERvY3VtZW50TWFya2Vy
cyhjb250ZXh0LCBib3hPcmlnaW4sIGZvbnQsIHRydWUpOwogCiAgICAgICAgIGlmIChoYXZlU2Vs
ZWN0aW9uICYmICF1c2VDdXN0b21VbmRlcmxpbmVzKQotICAgICAgICAgICAgcGFpbnRTZWxlY3Rp
b24oY29udGV4dCwgYm94T3JpZ2luLCBsaW5lU3R5bGUsIGZvbnQsIHNlbGVjdGlvblBhaW50U3R5
bGUuZmlsbENvbG9yKTsKKyAgICAgICAgICAgIHBhaW50U2VsZWN0aW9uKGNvbnRleHQsIGJveE9y
aWdpbiwgZm9udCwgc2VsZWN0aW9uUGFpbnRTdHlsZS5maWxsQ29sb3IpOwogICAgIH0KIAogICAg
IC8vIEZJWE1FOiBSaWdodCBub3csIElubGluZVRleHRCb3hlcyBuZXZlciBjYWxsIGFkZFJlbGV2
YW50VW5wYWludGVkT2JqZWN0KCkgZXZlbiB0aG91Z2ggdGhleSBtaWdodApAQCAtNDk5LDEzICs1
MDEsOCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsCiAgICAgICAgIHJlbmRlcmVyKCkucGFnZSgp
LmFkZFJlbGV2YW50UmVwYWludGVkT2JqZWN0KCZyZW5kZXJlcigpLCBJbnRSZWN0KGJveE9yaWdp
bi54KCksIGJveE9yaWdpbi55KCksIGxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KCkpKTsK
IAogICAgIC8vIDIuIE5vdyBwYWludCB0aGUgZm9yZWdyb3VuZCwgaW5jbHVkaW5nIHRleHQgYW5k
IGRlY29yYXRpb25zIGxpa2UgdW5kZXJsaW5lL292ZXJsaW5lIChpbiBxdWlya3MgbW9kZSBvbmx5
KS4KLSAgICBTdHJpbmcgYWx0ZXJuYXRlU3RyaW5nVG9SZW5kZXI7Ci0gICAgaWYgKGNvbWJpbmVk
VGV4dCkKLSAgICAgICAgYWx0ZXJuYXRlU3RyaW5nVG9SZW5kZXIgPSBjb21iaW5lZFRleHQtPmNv
bWJpbmVkU3RyaW5nRm9yUmVuZGVyaW5nKCk7Ci0gICAgZWxzZSBpZiAoaGFzSHlwaGVuKCkpCi0g
ICAgICAgIGFsdGVybmF0ZVN0cmluZ1RvUmVuZGVyID0gaHlwaGVuYXRlZFN0cmluZ0ZvclRleHRS
dW4obGluZVN0eWxlKTsKLQotICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4o
bGluZVN0eWxlLCBhbHRlcm5hdGVTdHJpbmdUb1JlbmRlcik7CisgICAgYXV0byB0ZXh0ID0gdGhp
cy0+dGV4dCgpOworICAgIFRleHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRSdW4odGV4dCk7CiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dFJ1bi5sZW5ndGgoKTsKIAogICAgIHVuc2lnbmVkIHNl
bGVjdGlvblN0YXJ0ID0gMDsKQEAgLTY1Miw3ICs2NDksNyBAQCBzdGQ6OnBhaXI8dW5zaWduZWQs
IHVuc2lnbmVkPiBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZCgpIGNvbnN0CiAgICAg
cmV0dXJuIHsgY2xhbXBlZE9mZnNldChzdGFydCksIGNsYW1wZWRPZmZzZXQoZW5kKSB9OwogfQog
Ci12b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBDb2xvciYgdGV4dENvbG9yKQordm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNv
bnN0IENvbG9yJiB0ZXh0Q29sb3IpCiB7CiAjaWYgRU5BQkxFKFRFWFRfU0VMRUNUSU9OKQogICAg
IGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTY3NywxOSArNjc0LDE2IEBAIHZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFBvaW50JiBiCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKGNvbnRleHQpOwogICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0LCBUZXh0
UGFpbnRTdHlsZShjKSk7IC8vIERvbid0IGRyYXcgdGV4dCBhdCBhbGwhCiAKLSAgICAvLyBJZiB0
aGUgdGV4dCBpcyB0cnVuY2F0ZWQsIGxldCB0aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBpbiB0aGUg
dHJ1bmNhdGlvbgorICAgIC8vIE5vdGUgdGhhdCBpZiB0aGUgdGV4dCBpcyB0cnVuY2F0ZWQsIHdl
IGxldCB0aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBpbiB0aGUgdHJ1bmNhdGlvbgogICAgIC8vIGRy
YXcgaXRzIG93biBoaWdobGlnaHQuCiAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBtX3RydW5jYXRp
b24gIT0gY05vVHJ1bmNhdGlvbiA/IG1fdHJ1bmNhdGlvbiA6IGxlbigpOwotCiAgICAgLy8gRklY
TUU6IEFkanVzdCB0ZXh0IHJ1biBmb3IgY29tYmluZWQgdGV4dC4KLSAgICBTdHJpbmcgaHlwaGVu
YXRlZFN0cmluZzsKLSAgICBib29sIHJlc3BlY3RIeXBoZW4gPSBzZWxlY3Rpb25FbmQgPT0gbGVu
Z3RoICYmIGhhc0h5cGhlbigpOwotICAgIGlmIChyZXNwZWN0SHlwaGVuKQotICAgICAgICBoeXBo
ZW5hdGVkU3RyaW5nID0gaHlwaGVuYXRlZFN0cmluZ0ZvclRleHRSdW4oc3R5bGUsIGxlbmd0aCk7
Ci0gICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgaHlwaGVuYXRl
ZFN0cmluZywgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4obGVuZ3RoKSk7Ci0gICAgaWYgKHJlc3Bl
Y3RIeXBoZW4pCi0gICAgICAgIHNlbGVjdGlvbkVuZCA9IHRleHRSdW4ubGVuZ3RoKCk7CisgICAg
Ym9vbCBpZ25vcmVDb21iaW5lZFRleHQgPSB0cnVlOworICAgIGF1dG8gdGV4dCA9IHRoaXMtPnRl
eHQoaWdub3JlQ29tYmluZWRUZXh0KTsKKyAgICBUZXh0UnVuIHRleHRSdW4gPSBjcmVhdGVUZXh0
UnVuKHRleHQpOworICAgIHVuc2lnbmVkIGVuZE9mTGluZUlnbm9yaW5nSHlwaGVuQW5kQ29tYmlu
ZWRUZXh0ID0gbV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24gPyBtX3RydW5jYXRpb24gOiBt
X2xlbjsKKyAgICBpZiAoc2VsZWN0aW9uRW5kID09IGVuZE9mTGluZUlnbm9yaW5nSHlwaGVuQW5k
Q29tYmluZWRUZXh0KQorICAgICAgICBzZWxlY3Rpb25FbmQgPSB0ZXh0UnVuLmxlbmd0aCgpOyAv
LyBFeHRlbmQgc2VsZWN0aW9uIHRvIGluY2x1ZGUgaHlwaGVuL2NvbWJpbmVkIHRleHQuCiAKICAg
ICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gcm9vdCgpOwogICAgIExheW91dFVuaXQg
c2VsZWN0aW9uQm90dG9tID0gcm9vdEJveC5zZWxlY3Rpb25Cb3R0b20oKTsKQEAgLTcwNCw3ICs2
OTgsNiBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYgogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
Y29udGV4dCk7CiAgICAgVU5VU0VEX1BBUkFNKGJveE9yaWdpbik7Ci0gICAgVU5VU0VEX1BBUkFN
KHN0eWxlKTsKICAgICBVTlVTRURfUEFSQU0oZm9udCk7CiAgICAgVU5VU0VEX1BBUkFNKHRleHRD
b2xvcik7CiAjZW5kaWYKQEAgLTcyNiw3ICs3MTksMTAgQEAgaW5saW5lIHZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnRUZXh0U3VicmFuZ2VCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwKICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KGJveE9yaWdpbi54
KCksIGJveE9yaWdpbi55KCkgLSBkZWx0YVksIDAsIHNlbGVjdGlvbkhlaWdodCgpKTsKIAogICAg
IC8vIEZJWE1FOiBBZGp1c3QgdGV4dCBydW4gZm9yIGNvbWJpbmVkIHRleHQgYW5kIGh5cGhlbmF0
aW9uLgotICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxlKCkp
OworICAgIGJvb2wgaWdub3JlQ29tYmluZWRUZXh0ID0gdHJ1ZTsKKyAgICBib29sIGlnbm9yZUh5
cGhlbiA9IHRydWU7CisgICAgYXV0byB0ZXh0ID0gdGhpcy0+dGV4dChpZ25vcmVDb21iaW5lZFRl
eHQsIGlnbm9yZUh5cGhlbik7CisgICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bih0
ZXh0KTsKICAgICBmb250LmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVj
dGlvblJlY3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogICAgIGNvbnRleHQuZmlsbFJlY3Qo
c25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0aW9uKHNlbGVjdGlvblJlY3Qs
IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCB0ZXh0UnVuLmx0cigp
KSwgY29sb3IpOwogfQpAQCAtODI0LDEwICs4MjAsMTMgQEAgdm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQ
b2kKIAogICAgICAgICAvLyBDYWxjdWxhdGUgc3RhcnQgJiB3aWR0aAogICAgICAgICAvLyBGSVhN
RTogQWRqdXN0IHRleHQgcnVuIGZvciBjb21iaW5lZCB0ZXh0IGFuZCBoeXBoZW5hdGlvbi4KKyAg
ICAgICAgYm9vbCBpZ25vcmVDb21iaW5lZFRleHQgPSB0cnVlOworICAgICAgICBib29sIGlnbm9y
ZUh5cGhlbiA9IHRydWU7CiAgICAgICAgIGludCBkZWx0YVkgPSByZW5kZXJlcigpLnN0eWxlKCku
aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2VsZWN0aW9uQm90dG9tKCkgLSBsb2dpY2Fs
Qm90dG9tKCkgOiBsb2dpY2FsVG9wKCkgLSBzZWxlY3Rpb25Ub3AoKTsKICAgICAgICAgaW50IHNl
bEhlaWdodCA9IHNlbGVjdGlvbkhlaWdodCgpOwogICAgICAgICBGbG9hdFBvaW50IHN0YXJ0UG9p
bnQoYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSk7Ci0gICAgICAgIFRleHRS
dW4gcnVuID0gY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUoKSk7CisgICAgICAgIGF1dG8gdGV4
dCA9IHRoaXMtPnRleHQoaWdub3JlQ29tYmluZWRUZXh0LCBpZ25vcmVIeXBoZW4pOworICAgICAg
ICBUZXh0UnVuIHJ1biA9IGNyZWF0ZVRleHRSdW4odGV4dCk7CiAKICAgICAgICAgTGF5b3V0UmVj
dCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdChzdGFydFBvaW50LCBGbG9hdFNpemUoMCwgc2Vs
SGVpZ2h0KSk7CiAgICAgICAgIGZvbnQuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBz
ZWxlY3Rpb25SZWN0LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CkBAIC0xMDUwLDcgKzEw
NDksMTAgQEAgaW50IElubGluZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uKGZsb2F0IGxpbmVP
ZmZzZXQsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMKICAgICAgICAgcmV0dXJuIGlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IGxlbigpIDogMDsKICAgICBpZiAobGluZU9mZnNldCAtIGxvZ2lj
YWxMZWZ0KCkgPCAwKQogICAgICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
MCA6IGxlbigpOwotICAgIHJldHVybiBsaW5lRm9udCgpLm9mZnNldEZvclBvc2l0aW9uKGNvbnN0
cnVjdFRleHRSdW4obGluZVN0eWxlKCkpLCBsaW5lT2Zmc2V0IC0gbG9naWNhbExlZnQoKSwgaW5j
bHVkZVBhcnRpYWxHbHlwaHMpOworICAgIGJvb2wgaWdub3JlQ29tYmluZWRUZXh0ID0gdHJ1ZTsK
KyAgICBib29sIGlnbm9yZUh5cGhlbiA9IHRydWU7CisgICAgYXV0byB0ZXh0ID0gdGhpcy0+dGV4
dChpZ25vcmVDb21iaW5lZFRleHQsIGlnbm9yZUh5cGhlbik7CisgICAgcmV0dXJuIGxpbmVGb250
KCkub2Zmc2V0Rm9yUG9zaXRpb24oY3JlYXRlVGV4dFJ1bih0ZXh0KSwgbGluZU9mZnNldCAtIGxv
Z2ljYWxMZWZ0KCksIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAogZmxvYXQgSW5saW5lVGV4
dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSBjb25zdApAQCAtMTA3Mywz
MiArMTA3NSwzNyBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldCh1bnNp
Z25lZCBvZmZzZXQpIGNvbnN0CiAKICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBhZGQgcmln
aHRCZWFyaW5nIGhlcmU/CiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVj
dChsb2dpY2FsTGVmdCgpLCAwLCAwLCAwKTsKLSAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1
Y3RUZXh0UnVuKGxpbmVTdHlsZSgpKTsKKyAgICBib29sIGlnbm9yZUNvbWJpbmVkVGV4dCA9IHRy
dWU7CisgICAgYm9vbCBpZ25vcmVIeXBoZW4gPSB0cnVlOworICAgIGF1dG8gdGV4dCA9IHRoaXMt
PnRleHQoaWdub3JlQ29tYmluZWRUZXh0LCBpZ25vcmVIeXBoZW4pOworICAgIFRleHRSdW4gdGV4
dFJ1biA9IGNyZWF0ZVRleHRSdW4odGV4dCk7CiAgICAgbGluZUZvbnQoKS5hZGp1c3RTZWxlY3Rp
b25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0KTsKICAgICByZXR1cm4gc25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0
aW9uKHNlbGVjdGlvblJlY3QsIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rv
cigpLCB0ZXh0UnVuLmx0cigpKS5tYXhYKCk7CiB9CiAKLVN0cmluZ1ZpZXcgSW5saW5lVGV4dEJv
eDo6c3Vic3RyaW5nVG9SZW5kZXIoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gb3ZlcnJpZGluZ0xl
bmd0aCkgY29uc3QKLXsKLSAgICByZXR1cm4gU3RyaW5nVmlldyhyZW5kZXJlcigpLnRleHQoKSku
c3Vic3RyaW5nKHN0YXJ0KCksIG92ZXJyaWRpbmdMZW5ndGgudmFsdWVfb3IobGVuKCkpKTsKLX0K
LQotU3RyaW5nIElubGluZVRleHRCb3g6Omh5cGhlbmF0ZWRTdHJpbmdGb3JUZXh0UnVuKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gYWx0ZXJuYXRlTGVu
Z3RoKSBjb25zdAorVGV4dFJ1biBJbmxpbmVUZXh0Qm94OjpjcmVhdGVUZXh0UnVuKFN0cmluZyYg
c3RyaW5nKSBjb25zdAogewotICAgIEFTU0VSVChoYXNIeXBoZW4oKSk7Ci0gICAgcmV0dXJuIG1h
a2VTdHJpbmcoc3Vic3RyaW5nVG9SZW5kZXIoYWx0ZXJuYXRlTGVuZ3RoKSwgc3R5bGUuaHlwaGVu
U3RyaW5nKCkpOworICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gbGluZVN0eWxlKCk7CisgICAgVGV4
dFJ1biB0ZXh0UnVuIHsgc3RyaW5nLCB0ZXh0UG9zKCksIGV4cGFuc2lvbigpLCBleHBhbnNpb25C
ZWhhdmlvcigpLCBkaXJlY3Rpb24oKSwgZGlyT3ZlcnJpZGUoKSB8fCBzdHlsZS5ydGxPcmRlcmlu
ZygpID09IFZpc3VhbE9yZGVyLCAhcmVuZGVyZXIoKS5jYW5Vc2VTaW1wbGVGb250Q29kZVBhdGgo
KSB9OworICAgIHRleHRSdW4uc2V0VGFiU2l6ZSghc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCks
IHN0eWxlLnRhYlNpemUoKSk7CisgICAgcmV0dXJuIHRleHRSdW47CiB9CiAKLVRleHRSdW4gSW5s
aW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFN0
cmluZ1ZpZXcgYWx0ZXJuYXRlU3RyaW5nVG9SZW5kZXIsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IGFsdGVybmF0ZUxlbmd0aCkgY29uc3QKK1N0cmluZyBJbmxpbmVUZXh0Qm94Ojp0ZXh0KGJvb2wg
aWdub3JlQ29tYmluZWRUZXh0LCBib29sIGlnbm9yZUh5cGhlbikgY29uc3QKIHsKLSAgICBhdXRv
IGFjdHVhbGx5Q29uc3RydWN0VGV4dFJ1biA9IFsmXSAoU3RyaW5nVmlldyBzdHJpbmcpIHsKLSAg
ICAgICAgVGV4dFJ1biBydW4oc3RyaW5nLCB0ZXh0UG9zKCksIGV4cGFuc2lvbigpLCBleHBhbnNp
b25CZWhhdmlvcigpLCBkaXJlY3Rpb24oKSwgZGlyT3ZlcnJpZGUoKSB8fCBzdHlsZS5ydGxPcmRl
cmluZygpID09IFZpc3VhbE9yZGVyLCAhcmVuZGVyZXIoKS5jYW5Vc2VTaW1wbGVGb250Q29kZVBh
dGgoKSk7Ci0gICAgICAgIHJ1bi5zZXRUYWJTaXplKCFzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2Uo
KSwgc3R5bGUudGFiU2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuIHJ1bjsKLSAgICB9OwotICAgIGlm
IChhbHRlcm5hdGVTdHJpbmdUb1JlbmRlci5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGFjdHVh
bGx5Q29uc3RydWN0VGV4dFJ1bihzdWJzdHJpbmdUb1JlbmRlcihhbHRlcm5hdGVMZW5ndGgpKTsK
LSAgICByZXR1cm4gYWN0dWFsbHlDb25zdHJ1Y3RUZXh0UnVuKGFsdGVybmF0ZVN0cmluZ1RvUmVu
ZGVyKTsKKyAgICBpZiAoVU5MSUtFTFkobV90cnVuY2F0aW9uID09IGNGdWxsVHJ1bmNhdGlvbikp
CisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgIGlmIChhdXRvKiBjb21iaW5lZFRl
eHQgPSB0aGlzLT5jb21iaW5lZFRleHQoKSkgeworICAgICAgICBpZiAoaWdub3JlQ29tYmluZWRU
ZXh0KQorICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyKCkudGV4dCgpLT5zdWJzdHJpbmcobV9z
dGFydCwgbV9sZW4pOworICAgICAgICByZXR1cm4gY29tYmluZWRUZXh0LT5jb21iaW5lZFN0cmlu
Z0ZvclJlbmRlcmluZygpOworICAgIH0KKyAgICBpZiAoaGFzSHlwaGVuKCkpIHsKKyAgICAgICAg
aWYgKGlnbm9yZUh5cGhlbikKKyAgICAgICAgICAgIHJldHVybiByZW5kZXJlcigpLnRleHQoKS0+
c3Vic3RyaW5nKG1fc3RhcnQsIG1fbGVuKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoU3Ry
aW5nVmlldyhyZW5kZXJlcigpLnRleHQoKSkuc3Vic3RyaW5nKG1fc3RhcnQsIG1fbGVuKSwgbGlu
ZVN0eWxlKCkuaHlwaGVuU3RyaW5nKCkpOworICAgIH0KKyAgICByZXR1cm4gcmVuZGVyZXIoKS50
ZXh0KCktPnN1YnN0cmluZyhtX3N0YXJ0LCBtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbiA/
IG1fdHJ1bmNhdGlvbiA6IG1fbGVuKTsKIH0KIAogaW5saW5lIGNvbnN0IFJlbmRlckNvbWJpbmVU
ZXh0KiBJbmxpbmVUZXh0Qm94Ojpjb21iaW5lZFRleHQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKaW5kZXggNDhmZDM4NTFjOGQwMTE1MmZhZTk5MDgxNTc3
MGRlMTYyNTUwMDNhMi4uNGNjZWQwZGUyNDkzNGMwZTIwZmNmZWU0NTFkYjUwOGZlZDQyODdkZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCkBAIC0xMDcsMTAgKzEw
Nyw2IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20oKSBjb25zdDsK
ICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodCgpIGNvbnN0OwogCi0gICAgU3RyaW5nVmll
dyBzdWJzdHJpbmdUb1JlbmRlcihzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBvdmVycmlkaW5nTGVu
Z3RoID0geyB9KSBjb25zdDsKLSAgICBTdHJpbmcgaHlwaGVuYXRlZFN0cmluZ0ZvclRleHRSdW4o
Y29uc3QgUmVuZGVyU3R5bGUmLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBhbHRlcm5hdGVMZW5n
dGggPSB7IH0pIGNvbnN0OwotICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5k
ZXJTdHlsZSYsIFN0cmluZ1ZpZXcgYWx0ZXJuYXRlU3RyaW5nVG9SZW5kZXIgPSB7IH0sIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IGFsdGVybmF0ZUxlbmd0aCA9IHsgfSkgY29uc3Q7Ci0KIHB1Ymxp
YzoKICAgICBGbG9hdFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIEZsb2F0UmVjdCh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOyB9CiAKQEAgLTE1
Niw3ICsxNTIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9u
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwKICAg
ICAgICAgVGV4dERlY29yYXRpb24sIFRleHRQYWludFN0eWxlLCBjb25zdCBTaGFkb3dEYXRhKiwg
Y29uc3QgRmxvYXRSZWN0JiBjbGlwT3V0UmVjdCk7Ci0gICAgdm9pZCBwYWludFNlbGVjdGlvbihH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRl
clN0eWxlJiwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBDb2xvciYpOworICAgIHZvaWQgcGFp
bnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2lu
LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IENvbG9yJik7CiAKICAgICB2b2lkIHBhaW50RG9j
dW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2lu
LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IE1hcmtlclN1YnJhbmdlJik7CiAgICAgdm9pZCBw
YWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBi
b3hPcmlnaW4sIGNvbnN0IEZvbnRDYXNjYWRlJiwgYm9vbCBiYWNrZ3JvdW5kKTsKQEAgLTE3MCw2
ICsxNjYsOSBAQCBwcml2YXRlOgogICAgIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0KiBjb21iaW5l
ZFRleHQoKSBjb25zdDsKICAgICBjb25zdCBGb250Q2FzY2FkZSYgbGluZUZvbnQoKSBjb25zdDsK
IAorICAgIFN0cmluZyB0ZXh0KGJvb2wgaWdub3JlQ29tYmluZWRUZXh0ID0gZmFsc2UsIGJvb2wg
aWdub3JlSHlwaGVuID0gZmFsc2UpIGNvbnN0OyAvLyBUaGUgdGV4dCB0byByZW5kZXIuCisgICAg
VGV4dFJ1biBjcmVhdGVUZXh0UnVuKFN0cmluZyYpIGNvbnN0OworCiAgICAgRXhwYW5zaW9uQmVo
YXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdDsKIAogICAgIHZvaWQgYmVoYXZlc0xpa2VU
ZXh0KCkgY29uc3QgPSBkZWxldGU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>