<?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>149286</bug_id>
          
          <creation_ts>2015-09-17 14:18:13 -0700</creation_ts>
          <short_desc>De-template ContainerNodeAlgorithms</short_desc>
          <delta_ts>2015-09-21 03:33: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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>149400</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>calvaris</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>philipj</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1126834</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-17 14:18:13 -0700</bug_when>
    <thetext>This is pointlessly generic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126850</commentid>
    <comment_count>1</comment_count>
      <attachid>261425</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-17 14:32:10 -0700</bug_when>
    <thetext>Created attachment 261425
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126928</commentid>
    <comment_count>2</comment_count>
      <attachid>261425</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-09-17 16:29:33 -0700</bug_when>
    <thetext>Comment on attachment 261425
patch

Nice. Next make it iterative? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126943</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-17 16:54:33 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/189945</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127428</commentid>
    <comment_count>4</comment_count>
      <attachid>261425</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-09-19 15:15:36 -0700</bug_when>
    <thetext>Comment on attachment 261425
patch

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

&gt; Source/WebCore/html/track/WebVTTParser.cpp:544
&gt; +        auto child = Text::create(document, m_token.characters());
&gt; +        m_currentNode-&gt;parserAppendChild(WTF::move(child));

If we did it on one line without the local variable then we wouldn’t need to call WTF::move.

&gt; Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp:1031
&gt; +    auto newNode = CDATASection::create(m_currentNode-&gt;document(), toString(s, len));
&gt; +    m_currentNode-&gt;parserAppendChild(WTF::move(newNode));

If we did it on one line without the local variable then we wouldn’t need to call WTF::move.

&gt; Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp:1047
&gt; +    auto newNode = Comment::create(m_currentNode-&gt;document(), toString(s));
&gt; +    m_currentNode-&gt;parserAppendChild(WTF::move(newNode));

If we did it on one line without the local variable then we wouldn’t need to call WTF::move.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261425</attachid>
            <date>2015-09-17 14:32:10 -0700</date>
            <delta_ts>2015-09-17 16:29:33 -0700</delta_ts>
            <desc>patch</desc>
            <filename>containernodefunctions-template.patch</filename>
            <type>text/plain</type>
            <size>30343</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTkzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDE1LTA5LTE3ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBEZS10ZW1wbGF0ZSBDb250YWlu
ZXJOb2RlQWxnb3JpdGhtcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ5Mjg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhlc2UgYXJlIGFsd2F5cyB1c2VkIHdpdGggQ29udGFpbmVyTm9kZS9Ob2RlLgor
CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGFpbmVyTm9kZTo6cmVtb3ZlRGV0YWNoZWRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpk
ZXN0cm95UmVuZGVyVHJlZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5v
ZGU6OnRha2VBbGxDaGlsZHJlbkZyb20pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9k
ZTo6aW5zZXJ0QmVmb3JlQ29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6
OmFwcGVuZENoaWxkQ29tbW9uKToKKworICAgICAgICAgICAgTWFrZSBhcHBlbmQgYSBtZW1iZXIg
Zm9yIGNvbnNpc3RlbmN5IHdpdGggaW5zZXJ0LgorCisgICAgICAgIChXZWJDb3JlOjpDb250YWlu
ZXJOb2RlOjpub3RpZnlDaGlsZEluc2VydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5l
ck5vZGU6Om5vdGlmeUNoaWxkUmVtb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJO
b2RlOjpwYXJzZXJJbnNlcnRCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9k
ZTo6cmVwbGFjZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OmFwcGVu
ZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnBhcnNlckFwcGVuZENo
aWxkKToKKworICAgICAgICAgICAgQWxzbyBtYWtlIHJlc3Qgb2YgdGhlc2Ugb3duZXJzaGlwLXRh
a2luZyBmdW5jdGlvbnMgdGFrZSBSZWY8PiYmLgorCisgICAgICAgICogZG9tL0NvbnRhaW5lck5v
ZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6Tm9FdmVu
dERpc3BhdGNoQXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnNl
dEZpcnN0Q2hpbGQpOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlDaGlsZE5vZGVSZW1vdmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OmFkZENoaWxkTm9kZXNUb0RlbGV0aW9uUXVldWUpOgorICAgICAgICAoV2ViQ29yZTo6
cmVtb3ZlRGV0YWNoZWRDaGlsZHJlbkluQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bGxlY3RGcmFtZU93bmVycyk6CisgICAgICAgIChXZWJDb3JlOjphc3NlcnRDb25uZWN0ZWRTdWJy
YW1lQ291bnRJc0NvbnNpc3RlbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzY29ubmVjdFN1YmZy
YW1lcyk6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmg6CisgICAgICAg
IChXZWJDb3JlOjpyZW1vdmVEZXRhY2hlZENoaWxkcmVuSW5Db250YWluZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6YXBwZW5kQ2hpbGRUb0NvbnRhaW5lcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQcml2YXRlOjpOb2RlUmVtb3ZhbERpc3BhdGNoZXI6OmRpc3BhdGNoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlByaXZhdGU6OmFkZENoaWxkTm9kZXNUb0RlbGV0
aW9uUXVldWUpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rp
b25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omluc2VydCk6CisgICAgICAgIChXZWJDb3Jl
OjpleGVjdXRlSW5zZXJ0VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlUmVwYXJlbnRU
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVJbnNlcnRBbHJlYWR5UGFyc2VkQ2hpbGRU
YXNrKToKKyAgICAgICAgKiBodG1sL3RyYWNrL1dlYlZUVFBhcnNlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJWVFRUcmVlQnVpbGRlcjo6Y29uc3RydWN0VHJlZUZyb21Ub2tlbik6CisgICAg
ICAgICogeG1sL1hNTEVycm9ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxFcnJvcnM6OmFw
cGVuZEVycm9yTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVYSFRNTFBhcnNlckVy
cm9ySGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEVycm9yczo6aW5zZXJ0RXJyb3JNZXNz
YWdlQmxvY2spOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVudGVyVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjp0b1N0cmluZyk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBh
cnNlckxpYnhtbDIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnN0
YXJ0RWxlbWVudE5zKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OmNkYXRhQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbW1l
bnQpOgorCiAyMDE1LTA5LTE3ICBQZXIgQXJuZSBWb2xsYW4gIDxwZWF2b0BvdXRsb29rLmNvbT4K
IAogICAgICAgICBbV2luQ2Fpcm9dIENvbXBpbGUgZXJyb3IsIGluY2x1ZGUgZmlsZSBub3QgZm91
bmQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiAxODk4
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBDb250YWluZXJOb2RlOjpyZW1vdmVEZXRhY2hlZENo
aWxkcgogICAgICAgICAgICAgY2hpbGQtPnVwZGF0ZUFuY2VzdG9yQ29ubmVjdGVkU3ViZnJhbWVD
b3VudEZvclJlbW92YWwoKTsKICAgICB9CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxl
IHRvIEFTU0VSVCghYXR0YWNoZWQoKSkgaGVyZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwNzgwMQotICAgIHJlbW92ZURldGFjaGVkQ2hpbGRyZW5JbkNvbnRhaW5l
cjxOb2RlLCBDb250YWluZXJOb2RlPigqdGhpcyk7CisgICAgcmVtb3ZlRGV0YWNoZWRDaGlsZHJl
bkluQ29udGFpbmVyKCp0aGlzKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lSZW5k
ZXJUcmVlSWZOZWVkZWQoTm9kZSYgY2hpbGQpCkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBDb250
YWluZXJOb2RlOjp0YWtlQWxsQ2hpbGRyZW5Gcm9tKAogCiAgICAgICAgIC8vIEZJWE1FOiBXZSBu
ZWVkIGEgbm8gbXV0YXRpb24gZXZlbnQgdmVyc2lvbiBvZiBhZG9wdE5vZGUuCiAgICAgICAgIFJl
ZlB0cjxOb2RlPiBhZG9wdGVkQ2hpbGQgPSBkb2N1bWVudCgpLmFkb3B0Tm9kZSgmY2hpbGQuZ2V0
KCksIEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgICAgICBwYXJzZXJBcHBlbmRDaGlsZChhZG9w
dGVkQ2hpbGQuZ2V0KCkpOworICAgICAgICBwYXJzZXJBcHBlbmRDaGlsZCgqYWRvcHRlZENoaWxk
KTsKICAgICAgICAgLy8gRklYTUU6IFRvZ2V0aGVyIHdpdGggYWRvcHROb2RlIGFib3ZlLCB0aGUg
dHJlZSBzY29wZSBtaWdodCBnZXQgdXBkYXRlZCByZWN1cnNpdmVseSB0d2ljZQogICAgICAgICAv
LyAoaWYgdGhlIGRvY3VtZW50IGNoYW5nZWQgb3Igb2xkUGFyZW50IHdhcyBpbiBhIHNoYWRvdyB0
cmVlLCBBTkQgKnRoaXMgaXMgaW4gYSBzaGFkb3cgdHJlZSkuCiAgICAgICAgIC8vIENhbiB3ZSBk
byBiZXR0ZXI/CkBAIC0zMjMsNiArMzIzLDE5IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6aW5zZXJ0
QmVmb3JlQ29tbW9uKE4KICAgICBuZXdDaGlsZC5zZXROZXh0U2libGluZygmbmV4dENoaWxkKTsK
IH0KIAordm9pZCBDb250YWluZXJOb2RlOjphcHBlbmRDaGlsZENvbW1vbihOb2RlJiBjaGlsZCkK
K3sKKyAgICBjaGlsZC5zZXRQYXJlbnROb2RlKHRoaXMpOworCisgICAgaWYgKG1fbGFzdENoaWxk
KSB7CisgICAgICAgIGNoaWxkLnNldFByZXZpb3VzU2libGluZyhtX2xhc3RDaGlsZCk7CisgICAg
ICAgIG1fbGFzdENoaWxkLT5zZXROZXh0U2libGluZygmY2hpbGQpOworICAgIH0gZWxzZQorICAg
ICAgICBtX2ZpcnN0Q2hpbGQgPSAmY2hpbGQ7CisKKyAgICBtX2xhc3RDaGlsZCA9ICZjaGlsZDsK
K30KKwogdm9pZCBDb250YWluZXJOb2RlOjpub3RpZnlDaGlsZEluc2VydGVkKE5vZGUmIGNoaWxk
LCBDaGlsZENoYW5nZVNvdXJjZSBzb3VyY2UpCiB7CiAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZSgqdGhpcykuY2hpbGRBZGRlZChjaGlsZCk7CkBAIC0zNTUsMjcgKzM2OCwyNSBAQCB2b2lkIENv
bnRhaW5lck5vZGU6Om5vdGlmeUNoaWxkUmVtb3ZlZChOCiAgICAgY2hpbGRyZW5DaGFuZ2VkKGNo
YW5nZSk7CiB9CiAKLXZvaWQgQ29udGFpbmVyTm9kZTo6cGFyc2VySW5zZXJ0QmVmb3JlKFBhc3NS
ZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIG5leHRDaGlsZCkKK3ZvaWQgQ29udGFpbmVyTm9k
ZTo6cGFyc2VySW5zZXJ0QmVmb3JlKFJlZjxOb2RlPiYmIG5ld0NoaWxkLCBOb2RlJiBuZXh0Q2hp
bGQpCiB7Ci0gICAgQVNTRVJUKG5ld0NoaWxkKTsKLSAgICBBU1NFUlQobmV4dENoaWxkKTsKLSAg
ICBBU1NFUlQobmV4dENoaWxkLT5wYXJlbnROb2RlKCkgPT0gdGhpcyk7CisgICAgQVNTRVJUKG5l
eHRDaGlsZC5wYXJlbnROb2RlKCkgPT0gdGhpcyk7CiAgICAgQVNTRVJUKCFuZXdDaGlsZC0+aXNE
b2N1bWVudEZyYWdtZW50KCkpOwogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQogICAgIEFT
U0VSVCghaGFzVGFnTmFtZShIVE1MTmFtZXM6OnRlbXBsYXRlVGFnKSk7CiAjZW5kaWYKIAotICAg
IGlmIChuZXh0Q2hpbGQtPnByZXZpb3VzU2libGluZygpID09IG5ld0NoaWxkIHx8IG5leHRDaGls
ZCA9PSBuZXdDaGlsZCkgLy8gbm90aGluZyB0byBkbworICAgIGlmIChuZXh0Q2hpbGQucHJldmlv
dXNTaWJsaW5nKCkgPT0gbmV3Q2hpbGQucHRyKCkgfHwgJm5leHRDaGlsZCA9PSBuZXdDaGlsZC5w
dHIoKSkgLy8gbm90aGluZyB0byBkbwogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoJmRvY3Vt
ZW50KCkgIT0gJm5ld0NoaWxkLT5kb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudCgpLmFkb3B0
Tm9kZShuZXdDaGlsZC5nZXQoKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIGRvY3Vt
ZW50KCkuYWRvcHROb2RlKG5ld0NoaWxkLnB0cigpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKIAot
ICAgIGluc2VydEJlZm9yZUNvbW1vbigqbmV4dENoaWxkLCAqbmV3Q2hpbGQuZ2V0KCkpOworICAg
IGluc2VydEJlZm9yZUNvbW1vbihuZXh0Q2hpbGQsIG5ld0NoaWxkKTsKIAogICAgIG5ld0NoaWxk
LT51cGRhdGVBbmNlc3RvckNvbm5lY3RlZFN1YmZyYW1lQ291bnRGb3JJbnNlcnRpb24oKTsKIAot
ICAgIG5vdGlmeUNoaWxkSW5zZXJ0ZWQoKm5ld0NoaWxkLCBDaGlsZENoYW5nZVNvdXJjZVBhcnNl
cik7CisgICAgbm90aWZ5Q2hpbGRJbnNlcnRlZChuZXdDaGlsZCwgQ2hpbGRDaGFuZ2VTb3VyY2VQ
YXJzZXIpOwogCiAgICAgbmV3Q2hpbGQtPnNldE5lZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RS
ZW5kZXJUcmVlKTsKIH0KQEAgLTQ1MCw3ICs0NjEsNyBAQCBib29sIENvbnRhaW5lck5vZGU6OnJl
cGxhY2VDaGlsZChSZWY8Tm9kCiAgICAgICAgICAgICBpZiAobmV4dCkKICAgICAgICAgICAgICAg
ICBpbnNlcnRCZWZvcmVDb21tb24oKm5leHQsIGNoaWxkLmdldCgpKTsKICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKGNoaWxkLnB0cigpLCAq
dGhpcyk7CisgICAgICAgICAgICAgICAgYXBwZW5kQ2hpbGRDb21tb24oY2hpbGQpOwogICAgICAg
ICB9CiAKICAgICAgICAgdXBkYXRlVHJlZUFmdGVySW5zZXJ0aW9uKGNoaWxkLmdldCgpKTsKQEAg
LTcwMCw3ICs3MTEsNyBAQCBib29sIENvbnRhaW5lck5vZGU6OmFwcGVuZENoaWxkKFJlZjxOb2Rl
CiAgICAgICAgIC8vIEFwcGVuZCBjaGlsZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CiAgICAgICAg
IHsKICAgICAgICAgICAgIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbiBhc3NlcnROb0V2ZW50RGlz
cGF0Y2g7Ci0gICAgICAgICAgICBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKGNoaWxkLnB0cigpLCAq
dGhpcyk7CisgICAgICAgICAgICBhcHBlbmRDaGlsZENvbW1vbihjaGlsZCk7CiAgICAgICAgIH0K
IAogICAgICAgICB1cGRhdGVUcmVlQWZ0ZXJJbnNlcnRpb24oY2hpbGQuZ2V0KCkpOwpAQCAtNzEw
LDkgKzcyMSw4IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGQoUmVmPE5vZGUKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDb250YWluZXJOb2RlOjpwYXJzZXJBcHBlbmRDaGls
ZChQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkKQordm9pZCBDb250YWluZXJOb2RlOjpwYXJzZXJB
cHBlbmRDaGlsZChSZWY8Tm9kZT4mJiBuZXdDaGlsZCkKIHsKLSAgICBBU1NFUlQobmV3Q2hpbGQp
OwogICAgIEFTU0VSVCghbmV3Q2hpbGQtPnBhcmVudE5vZGUoKSk7IC8vIFVzZSBhcHBlbmRDaGls
ZCBpZiB5b3UgbmVlZCB0byBoYW5kbGUgcmVwYXJlbnRpbmcgKGFuZCB3YW50IERPTSBtdXRhdGlv
biBldmVudHMpLgogICAgIEFTU0VSVCghbmV3Q2hpbGQtPmlzRG9jdW1lbnRGcmFnbWVudCgpKTsK
ICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKQEAgLTcyMCwxOCArNzMwLDE4IEBAIHZvaWQg
Q29udGFpbmVyTm9kZTo6cGFyc2VyQXBwZW5kQ2hpbGQoUGEKICNlbmRpZgogCiAgICAgaWYgKCZk
b2N1bWVudCgpICE9ICZuZXdDaGlsZC0+ZG9jdW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS5h
ZG9wdE5vZGUobmV3Q2hpbGQuZ2V0KCksIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICBk
b2N1bWVudCgpLmFkb3B0Tm9kZShuZXdDaGlsZC5wdHIoKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7
CiAKICAgICB7CiAgICAgICAgIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbiBhc3NlcnROb0V2ZW50
RGlzcGF0Y2g7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgdGFrZSBhIFBh
c3NSZWZQdHIuCi0gICAgICAgIGFwcGVuZENoaWxkVG9Db250YWluZXIobmV3Q2hpbGQuZ2V0KCks
ICp0aGlzKTsKLSAgICAgICAgdHJlZVNjb3BlKCkuYWRvcHRJZk5lZWRlZChuZXdDaGlsZC5nZXQo
KSk7CisgICAgICAgIGFwcGVuZENoaWxkQ29tbW9uKG5ld0NoaWxkKTsKKyAgICAgICAgdHJlZVNj
b3BlKCkuYWRvcHRJZk5lZWRlZChuZXdDaGlsZC5wdHIoKSk7CiAgICAgfQogCiAgICAgbmV3Q2hp
bGQtPnVwZGF0ZUFuY2VzdG9yQ29ubmVjdGVkU3ViZnJhbWVDb3VudEZvckluc2VydGlvbigpOwog
Ci0gICAgbm90aWZ5Q2hpbGRJbnNlcnRlZCgqbmV3Q2hpbGQsIENoaWxkQ2hhbmdlU291cmNlUGFy
c2VyKTsKKyAgICBub3RpZnlDaGlsZEluc2VydGVkKG5ld0NoaWxkLCBDaGlsZENoYW5nZVNvdXJj
ZVBhcnNlcik7CiAKICAgICBuZXdDaGlsZC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVj
dFJlbmRlclRyZWUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCShyZXZp
c2lvbiAxODk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiwxMyArMzYsNiBAQCBjbGFzcyBOb2RlT3JTdHJpbmc7CiBjbGFzcyBR
dWFsaWZpZWROYW1lOwogY2xhc3MgUmVuZGVyRWxlbWVudDsKIAotdHlwZWRlZiB2b2lkICgqTm9k
ZUNhbGxiYWNrKShOb2RlJiwgdW5zaWduZWQpOwotCi1uYW1lc3BhY2UgUHJpdmF0ZSB7IAotICAg
IHRlbXBsYXRlPGNsYXNzIEdlbmVyaWNOb2RlLCBjbGFzcyBHZW5lcmljTm9kZUNvbnRhaW5lcj4K
LSAgICB2b2lkIGFkZENoaWxkTm9kZXNUb0RlbGV0aW9uUXVldWUoR2VuZXJpY05vZGUqJiBoZWFk
LCBHZW5lcmljTm9kZSomIHRhaWwsIEdlbmVyaWNOb2RlQ29udGFpbmVyJik7Ci19OwotCiBjbGFz
cyBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24gewogcHVibGljOgogICAgIE5vRXZlbnREaXNwYXRj
aEFzc2VydGlvbigpCkBAIC0xMTAsOSArMTAzLDkgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG1l
dGhvZHMgYXJlIG9ubHkgdXNlZCBkdXJpbmcgcGFyc2luZy4KICAgICAvLyBUaGV5IGRvbid0IHNl
bmQgRE9NIG11dGF0aW9uIGV2ZW50cyBvciBoYW5kbGUgcmVwYXJlbnRpbmcuCiAgICAgLy8gSG93
ZXZlciwgYXJiaXRyYXJ5IGNvZGUgbWF5IGJlIHJ1biBieSBiZWZvcmVsb2FkIGhhbmRsZXJzLgot
ICAgIHZvaWQgcGFyc2VyQXBwZW5kQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCBw
YXJzZXJBcHBlbmRDaGlsZChSZWY8Tm9kZT4mJik7CiAgICAgdm9pZCBwYXJzZXJSZW1vdmVDaGls
ZChOb2RlJik7Ci0gICAgdm9pZCBwYXJzZXJJbnNlcnRCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBu
ZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQpOworICAgIHZvaWQgcGFyc2VySW5zZXJ0QmVmb3JlKFJl
ZjxOb2RlPiYmIG5ld0NoaWxkLCBOb2RlJiByZWZDaGlsZCk7CiAKICAgICB2b2lkIHJlbW92ZUNo
aWxkcmVuKCk7CiAgICAgdm9pZCB0YWtlQWxsQ2hpbGRyZW5Gcm9tKENvbnRhaW5lck5vZGUqKTsK
QEAgLTE2MywxMSArMTU2LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENv
bnRhaW5lck5vZGUoRG9jdW1lbnQmLCBDb25zdHJ1Y3Rpb25UeXBlID0gQ3JlYXRlQ29udGFpbmVy
KTsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEdlbmVyaWNOb2RlLCBjbGFzcyBHZW5lcmljTm9kZUNv
bnRhaW5lcj4KLSAgICBmcmllbmQgdm9pZCBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKEdlbmVyaWNO
b2RlKiBjaGlsZCwgR2VuZXJpY05vZGVDb250YWluZXImKTsKLQotICAgIHRlbXBsYXRlPGNsYXNz
IEdlbmVyaWNOb2RlLCBjbGFzcyBHZW5lcmljTm9kZUNvbnRhaW5lcj4KLSAgICBmcmllbmQgdm9p
ZCBQcml2YXRlOjphZGRDaGlsZE5vZGVzVG9EZWxldGlvblF1ZXVlKEdlbmVyaWNOb2RlKiYgaGVh
ZCwgR2VuZXJpY05vZGUqJiB0YWlsLCBHZW5lcmljTm9kZUNvbnRhaW5lciYpOworICAgIGZyaWVu
ZCB2b2lkIGFkZENoaWxkTm9kZXNUb0RlbGV0aW9uUXVldWUoTm9kZSomIGhlYWQsIE5vZGUqJiB0
YWlsLCBDb250YWluZXJOb2RlJik7CiAKICAgICB2b2lkIHJlbW92ZURldGFjaGVkQ2hpbGRyZW4o
KTsKICAgICB2b2lkIHNldEZpcnN0Q2hpbGQoTm9kZSogY2hpbGQpIHsgbV9maXJzdENoaWxkID0g
Y2hpbGQ7IH0KQEAgLTE3OCw2ICsxNjcsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZv
aWQgcmVtb3ZlQmV0d2VlbihOb2RlKiBwcmV2aW91c0NoaWxkLCBOb2RlKiBuZXh0Q2hpbGQsIE5v
ZGUmIG9sZENoaWxkKTsKICAgICB2b2lkIGluc2VydEJlZm9yZUNvbW1vbihOb2RlJiBuZXh0Q2hp
bGQsIE5vZGUmIG9sZENoaWxkKTsKKyAgICB2b2lkIGFwcGVuZENoaWxkQ29tbW9uKE5vZGUmKTsK
IAogICAgIHZvaWQgbm90aWZ5Q2hpbGRJbnNlcnRlZChOb2RlJiBjaGlsZCwgQ2hpbGRDaGFuZ2VT
b3VyY2UpOwogICAgIHZvaWQgbm90aWZ5Q2hpbGRSZW1vdmVkKE5vZGUmIGNoaWxkLCBOb2RlKiBw
cmV2aW91c1NpYmxpbmcsIE5vZGUqIG5leHRTaWJsaW5nLCBDaGlsZENoYW5nZVNvdXJjZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAJ
KHJldmlzaW9uIDE4OTg5NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxn
b3JpdGhtcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2ICsxNTcsNzEgQEAgdm9pZCBub3Rp
ZnlDaGlsZE5vZGVSZW1vdmVkKENvbnRhaW5lck5vZAogICAgIGNoaWxkLmRvY3VtZW50KCkubm90
aWZ5UmVtb3ZlUGVuZGluZ1NoZWV0SWZOZWVkZWQoKTsKIH0KIAordm9pZCBhZGRDaGlsZE5vZGVz
VG9EZWxldGlvblF1ZXVlKE5vZGUqJiBoZWFkLCBOb2RlKiYgdGFpbCwgQ29udGFpbmVyTm9kZSYg
Y29udGFpbmVyKQoreworICAgIC8vIFdlIGhhdmUgdG8gdGVsbCBhbGwgY2hpbGRyZW4gdGhhdCB0
aGVpciBwYXJlbnQgaGFzIGRpZWQuCisgICAgTm9kZSogbmV4dCA9IG51bGxwdHI7CisgICAgZm9y
IChhdXRvKiBub2RlID0gY29udGFpbmVyLmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5leHQp
IHsKKyAgICAgICAgQVNTRVJUKCFub2RlLT5tX2RlbGV0aW9uSGFzQmVndW4pOworCisgICAgICAg
IG5leHQgPSBub2RlLT5uZXh0U2libGluZygpOworICAgICAgICBub2RlLT5zZXROZXh0U2libGlu
ZyhudWxscHRyKTsKKyAgICAgICAgbm9kZS0+c2V0UGFyZW50Tm9kZShudWxscHRyKTsKKyAgICAg
ICAgY29udGFpbmVyLnNldEZpcnN0Q2hpbGQobmV4dCk7CisgICAgICAgIGlmIChuZXh0KQorICAg
ICAgICAgICAgbmV4dC0+c2V0UHJldmlvdXNTaWJsaW5nKG51bGxwdHIpOworCisgICAgICAgIGlm
ICghbm9kZS0+cmVmQ291bnQoKSkgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgIG5vZGUt
Pm1fZGVsZXRpb25IYXNCZWd1biA9IHRydWU7CisjZW5kaWYKKyAgICAgICAgICAgIC8vIEFkZCB0
aGUgbm9kZSB0byB0aGUgbGlzdCBvZiBub2RlcyB0byBiZSBkZWxldGVkLgorICAgICAgICAgICAg
Ly8gUmV1c2UgdGhlIG5leHRTaWJsaW5nIHBvaW50ZXIgZm9yIHRoaXMgcHVycG9zZS4KKyAgICAg
ICAgICAgIGlmICh0YWlsKQorICAgICAgICAgICAgICAgIHRhaWwtPnNldE5leHRTaWJsaW5nKG5v
ZGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGhlYWQgPSBub2RlOworCisg
ICAgICAgICAgICB0YWlsID0gbm9kZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJl
ZjxOb2RlPiBwcm90ZWN0KCpub2RlKTsgLy8gcmVtb3ZlZEZyb21Eb2N1bWVudCBtYXkgcmVtb3Zl
IHJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIG5vZGUuCisgICAgICAgICAgICBpZiAoRG9j
dW1lbnQqIGNvbnRhaW5lckRvY3VtZW50ID0gY29udGFpbmVyLm93bmVyRG9jdW1lbnQoKSkKKyAg
ICAgICAgICAgICAgICBjb250YWluZXJEb2N1bWVudC0+YWRvcHRJZk5lZWRlZChub2RlKTsKKyAg
ICAgICAgICAgIGlmIChub2RlLT5pbkRvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgbm90aWZ5
Q2hpbGROb2RlUmVtb3ZlZChjb250YWluZXIsICpub2RlKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGNvbnRhaW5lci5zZXRMYXN0Q2hpbGQobnVsbHB0cik7Cit9CisKK3ZvaWQgcmVtb3ZlRGV0
YWNoZWRDaGlsZHJlbkluQ29udGFpbmVyKENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKK3sKKyAg
ICAvLyBMaXN0IG9mIG5vZGVzIHRvIGJlIGRlbGV0ZWQuCisgICAgTm9kZSogaGVhZCA9IG51bGxw
dHI7CisgICAgTm9kZSogdGFpbCA9IG51bGxwdHI7CisKKyAgICBhZGRDaGlsZE5vZGVzVG9EZWxl
dGlvblF1ZXVlKGhlYWQsIHRhaWwsIGNvbnRhaW5lcik7CisKKyAgICBOb2RlKiBub2RlOworICAg
IE5vZGUqIG5leHQ7CisgICAgd2hpbGUgKChub2RlID0gaGVhZCkpIHsKKyAgICAgICAgQVNTRVJU
KG5vZGUtPm1fZGVsZXRpb25IYXNCZWd1bik7CisKKyAgICAgICAgbmV4dCA9IG5vZGUtPm5leHRT
aWJsaW5nKCk7CisgICAgICAgIG5vZGUtPnNldE5leHRTaWJsaW5nKG51bGxwdHIpOworCisgICAg
ICAgIGhlYWQgPSBuZXh0OworICAgICAgICBpZiAoIW5leHQpCisgICAgICAgICAgICB0YWlsID0g
bnVsbHB0cjsKKworICAgICAgICBpZiAoaXM8Q29udGFpbmVyTm9kZT4obm9kZSkpCisgICAgICAg
ICAgICBhZGRDaGlsZE5vZGVzVG9EZWxldGlvblF1ZXVlKGhlYWQsIHRhaWwsIGRvd25jYXN0PENv
bnRhaW5lck5vZGU+KCpub2RlKSk7CisgICAgICAgIAorICAgICAgICBkZWxldGUgbm9kZTsKKyAg
ICB9Cit9CisKICNpZm5kZWYgTkRFQlVHCiBzdGF0aWMgdW5zaWduZWQgYXNzZXJ0Q29ubmVjdGVk
U3VicmFtZUNvdW50SXNDb25zaXN0ZW50KENvbnRhaW5lck5vZGUmIG5vZGUpCiB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAkocmV2aXNpb24g
MTg5ODk2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDEyNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHZvaWQgbm90aWZ5Q2hpbGROb2RlSW5zZXJ0ZWQoQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9p
bnQsIE5vZGUmLCBOb2RlVmVjdG9yJiBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7
CiB2b2lkIG5vdGlmeUNoaWxkTm9kZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9p
bnQsIE5vZGUmKTsKLQotbmFtZXNwYWNlIFByaXZhdGUgewotICAgIHRlbXBsYXRlPGNsYXNzIEdl
bmVyaWNOb2RlLCBjbGFzcyBHZW5lcmljTm9kZUNvbnRhaW5lcj4KLSAgICB2b2lkIGFkZENoaWxk
Tm9kZXNUb0RlbGV0aW9uUXVldWUoR2VuZXJpY05vZGUqJiBoZWFkLCBHZW5lcmljTm9kZSomIHRh
aWwsIEdlbmVyaWNOb2RlQ29udGFpbmVyJik7Ci0KLX0KLQotLy8gVGhpcyBubyBsb25nZXIgbmVl
ZHMgdG8gYmUgZ2VuZXJpYy4gSXQncyBvbmx5IHVzZWQgZm9yIE5vZGUgYW5kIENvbnRhaW5lck5v
ZGUgbm93LgotdGVtcGxhdGU8Y2xhc3MgR2VuZXJpY05vZGUsIGNsYXNzIEdlbmVyaWNOb2RlQ29u
dGFpbmVyPgotaW5saW5lIHZvaWQgcmVtb3ZlRGV0YWNoZWRDaGlsZHJlbkluQ29udGFpbmVyKEdl
bmVyaWNOb2RlQ29udGFpbmVyJiBjb250YWluZXIpCi17Ci0gICAgLy8gTGlzdCBvZiBub2RlcyB0
byBiZSBkZWxldGVkLgotICAgIEdlbmVyaWNOb2RlKiBoZWFkID0gMDsKLSAgICBHZW5lcmljTm9k
ZSogdGFpbCA9IDA7Ci0KLSAgICBQcml2YXRlOjphZGRDaGlsZE5vZGVzVG9EZWxldGlvblF1ZXVl
PEdlbmVyaWNOb2RlLCBHZW5lcmljTm9kZUNvbnRhaW5lcj4oaGVhZCwgdGFpbCwgY29udGFpbmVy
KTsKLQotICAgIEdlbmVyaWNOb2RlKiBuOwotICAgIEdlbmVyaWNOb2RlKiBuZXh0OwotICAgIHdo
aWxlICgobiA9IGhlYWQpICE9IDApIHsKLSAgICAgICAgQVNTRVJUKG4tPm1fZGVsZXRpb25IYXNC
ZWd1bik7Ci0KLSAgICAgICAgbmV4dCA9IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIG4tPnNl
dE5leHRTaWJsaW5nKDApOwotCi0gICAgICAgIGhlYWQgPSBuZXh0OwotICAgICAgICBpZiAobmV4
dCA9PSAwKQotICAgICAgICAgICAgdGFpbCA9IDA7Ci0KLSAgICAgICAgaWYgKG4tPmhhc0NoaWxk
Tm9kZXMoKSkKLSAgICAgICAgICAgIFByaXZhdGU6OmFkZENoaWxkTm9kZXNUb0RlbGV0aW9uUXVl
dWU8R2VuZXJpY05vZGUsIEdlbmVyaWNOb2RlQ29udGFpbmVyPihoZWFkLCB0YWlsLCAqc3RhdGlj
X2Nhc3Q8R2VuZXJpY05vZGVDb250YWluZXIqPihuKSk7Ci0KLSAgICAgICAgZGVsZXRlIG47Ci0g
ICAgfQotfQotCi10ZW1wbGF0ZTxjbGFzcyBHZW5lcmljTm9kZSwgY2xhc3MgR2VuZXJpY05vZGVD
b250YWluZXI+Ci1pbmxpbmUgdm9pZCBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKEdlbmVyaWNOb2Rl
KiBjaGlsZCwgR2VuZXJpY05vZGVDb250YWluZXImIGNvbnRhaW5lcikKLXsKLSAgICBjaGlsZC0+
c2V0UGFyZW50Tm9kZSgmY29udGFpbmVyKTsKLQotICAgIEdlbmVyaWNOb2RlKiBsYXN0Q2hpbGQg
PSBjb250YWluZXIubGFzdENoaWxkKCk7Ci0gICAgaWYgKGxhc3RDaGlsZCkgewotICAgICAgICBj
aGlsZC0+c2V0UHJldmlvdXNTaWJsaW5nKGxhc3RDaGlsZCk7Ci0gICAgICAgIGxhc3RDaGlsZC0+
c2V0TmV4dFNpYmxpbmcoY2hpbGQpOwotICAgIH0gZWxzZQotICAgICAgICBjb250YWluZXIuc2V0
Rmlyc3RDaGlsZChjaGlsZCk7Ci0KLSAgICBjb250YWluZXIuc2V0TGFzdENoaWxkKGNoaWxkKTsK
LX0KLQotLy8gSGVscGVyIG1ldGhvZHMgZm9yIHJlbW92ZURldGFjaGVkQ2hpbGRyZW5JbkNvbnRh
aW5lciwgaGlkZGVuIGZyb20gV2ViQ29yZSBuYW1lc3BhY2UKLW5hbWVzcGFjZSBQcml2YXRlIHsK
LQotICAgIHRlbXBsYXRlPGNsYXNzIEdlbmVyaWNOb2RlLCBjbGFzcyBHZW5lcmljTm9kZUNvbnRh
aW5lciwgYm9vbCBkaXNwYXRjaFJlbW92YWxOb3RpZmljYXRpb24+Ci0gICAgc3RydWN0IE5vZGVS
ZW1vdmFsRGlzcGF0Y2hlciB7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoKEdlbmVyaWNO
b2RlJiwgR2VuZXJpY05vZGVDb250YWluZXImKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBu
by1vcCwgYnkgZGVmYXVsdAotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPGNsYXNz
IEdlbmVyaWNOb2RlLCBjbGFzcyBHZW5lcmljTm9kZUNvbnRhaW5lcj4KLSAgICBzdHJ1Y3QgTm9k
ZVJlbW92YWxEaXNwYXRjaGVyPEdlbmVyaWNOb2RlLCBHZW5lcmljTm9kZUNvbnRhaW5lciwgdHJ1
ZT4gewotICAgICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaChHZW5lcmljTm9kZSYgbm9kZSwgR2Vu
ZXJpY05vZGVDb250YWluZXImIGNvbnRhaW5lcikKLSAgICAgICAgewotICAgICAgICAgICAgLy8g
Q2xlYW4gdXAgYW55IFRyZWVTY29wZSB0byBhIHJlbW92ZWQgdHJlZS4KLSAgICAgICAgICAgIGlm
IChEb2N1bWVudCogY29udGFpbmVyRG9jdW1lbnQgPSBjb250YWluZXIub3duZXJEb2N1bWVudCgp
KQotICAgICAgICAgICAgICAgIGNvbnRhaW5lckRvY3VtZW50LT5hZG9wdElmTmVlZGVkKCZub2Rl
KTsKLSAgICAgICAgICAgIGlmIChub2RlLmluRG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICBu
b3RpZnlDaGlsZE5vZGVSZW1vdmVkKGNvbnRhaW5lciwgbm9kZSk7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgR2VuZXJpY05vZGU+Ci0gICAgc3RydWN0IFNob3VsZERp
c3BhdGNoUmVtb3ZhbE5vdGlmaWNhdGlvbiB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIHZh
bHVlID0gZmFsc2U7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2hvdWxk
RGlzcGF0Y2hSZW1vdmFsTm90aWZpY2F0aW9uPE5vZGU+IHsKLSAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdmFsdWUgPSB0cnVlOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBHZW5lcmlj
Tm9kZSwgY2xhc3MgR2VuZXJpY05vZGVDb250YWluZXI+Ci0gICAgdm9pZCBhZGRDaGlsZE5vZGVz
VG9EZWxldGlvblF1ZXVlKEdlbmVyaWNOb2RlKiYgaGVhZCwgR2VuZXJpY05vZGUqJiB0YWlsLCBH
ZW5lcmljTm9kZUNvbnRhaW5lciYgY29udGFpbmVyKQotICAgIHsKLSAgICAgICAgLy8gV2UgaGF2
ZSB0byB0ZWxsIGFsbCBjaGlsZHJlbiB0aGF0IHRoZWlyIHBhcmVudCBoYXMgZGllZC4KLSAgICAg
ICAgR2VuZXJpY05vZGUqIG5leHQgPSAwOwotICAgICAgICBmb3IgKEdlbmVyaWNOb2RlKiBuID0g
Y29udGFpbmVyLmZpcnN0Q2hpbGQoKTsgbiAhPSAwOyBuID0gbmV4dCkgewotICAgICAgICAgICAg
QVNTRVJUKCFuLT5tX2RlbGV0aW9uSGFzQmVndW4pOwotCi0gICAgICAgICAgICBuZXh0ID0gbi0+
bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIG4tPnNldE5leHRTaWJsaW5nKDApOwotICAgICAg
ICAgICAgbi0+c2V0UGFyZW50Tm9kZSgwKTsKLSAgICAgICAgICAgIGNvbnRhaW5lci5zZXRGaXJz
dENoaWxkKG5leHQpOwotICAgICAgICAgICAgaWYgKG5leHQpCi0gICAgICAgICAgICAgICAgbmV4
dC0+c2V0UHJldmlvdXNTaWJsaW5nKDApOwotCi0gICAgICAgICAgICBpZiAoIW4tPnJlZkNvdW50
KCkpIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICAgICAgbi0+bV9kZWxldGlvbkhhc0Jl
Z3VuID0gdHJ1ZTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgbm9kZSB0byB0
aGUgbGlzdCBvZiBub2RlcyB0byBiZSBkZWxldGVkLgotICAgICAgICAgICAgICAgIC8vIFJldXNl
IHRoZSBuZXh0U2libGluZyBwb2ludGVyIGZvciB0aGlzIHB1cnBvc2UuCi0gICAgICAgICAgICAg
ICAgaWYgKHRhaWwpCi0gICAgICAgICAgICAgICAgICAgIHRhaWwtPnNldE5leHRTaWJsaW5nKG4p
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgaGVhZCA9IG47Ci0K
LSAgICAgICAgICAgICAgICB0YWlsID0gbjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgUmVmPEdlbmVyaWNOb2RlPiBwcm90ZWN0KCpuKTsgLy8gcmVtb3ZlZEZyb21Eb2N1
bWVudCBtYXkgcmVtb3ZlIHJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIG5vZGUuCi0gICAg
ICAgICAgICAgICAgTm9kZVJlbW92YWxEaXNwYXRjaGVyPEdlbmVyaWNOb2RlLCBHZW5lcmljTm9k
ZUNvbnRhaW5lciwgU2hvdWxkRGlzcGF0Y2hSZW1vdmFsTm90aWZpY2F0aW9uPEdlbmVyaWNOb2Rl
Pjo6dmFsdWU+OjpkaXNwYXRjaCgqbiwgY29udGFpbmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIGNvbnRhaW5lci5zZXRMYXN0Q2hpbGQoMCk7Ci0gICAgfQotCi19IC8v
IG5hbWVzcGFjZSBQcml2YXRlCit2b2lkIHJlbW92ZURldGFjaGVkQ2hpbGRyZW5JbkNvbnRhaW5l
cihDb250YWluZXJOb2RlJik7CiAKIGVudW0gU3ViZnJhbWVEaXNjb25uZWN0UG9saWN5IHsKICAg
ICBSb290QW5kRGVzY2VuZGFudHMsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCShyZXZpc2lvbiAxODk4NDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMiw5ICsxMDIsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5zZXJ0KEhU
TUxDb25zdHJ1Y3RpCiAgICAgICAgIHBhcmVudC0+cGFyc2VyUmVtb3ZlQ2hpbGQoKnRhc2suY2hp
bGQpOwogCiAgICAgaWYgKHRhc2submV4dENoaWxkKQotICAgICAgICB0YXNrLnBhcmVudC0+cGFy
c2VySW5zZXJ0QmVmb3JlKHRhc2suY2hpbGQuZ2V0KCksIHRhc2submV4dENoaWxkLmdldCgpKTsK
KyAgICAgICAgdGFzay5wYXJlbnQtPnBhcnNlckluc2VydEJlZm9yZSgqdGFzay5jaGlsZCwgKnRh
c2submV4dENoaWxkKTsKICAgICBlbHNlCi0gICAgICAgIHRhc2sucGFyZW50LT5wYXJzZXJBcHBl
bmRDaGlsZCh0YXNrLmNoaWxkLmdldCgpKTsKKyAgICAgICAgdGFzay5wYXJlbnQtPnBhcnNlckFw
cGVuZENoaWxkKCp0YXNrLmNoaWxkKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGV4ZWN1dGVJ
bnNlcnRUYXNrKEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayYgdGFzaykKQEAgLTEyNiw3ICsxMjYs
NyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXhlY3V0ZVJlcGFyZW50VGFzayhICiAgICAgaWYgKENv
bnRhaW5lck5vZGUqIHBhcmVudCA9IHRhc2suY2hpbGQtPnBhcmVudE5vZGUoKSkKICAgICAgICAg
cGFyZW50LT5wYXJzZXJSZW1vdmVDaGlsZCgqdGFzay5jaGlsZCk7CiAKLSAgICB0YXNrLnBhcmVu
dC0+cGFyc2VyQXBwZW5kQ2hpbGQodGFzay5jaGlsZCk7CisgICAgdGFzay5wYXJlbnQtPnBhcnNl
ckFwcGVuZENoaWxkKCp0YXNrLmNoaWxkKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGV4ZWN1
dGVJbnNlcnRBbHJlYWR5UGFyc2VkQ2hpbGRUYXNrKEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayYg
dGFzaykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAJ
KHJldmlzaW9uIDE4OTg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQwLDggKzU0MCw4IEBAIHZvaWQgV2ViVlRUVHJl
ZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWVGcm8KIAogICAgIHN3aXRjaCAobV90b2tlbi50eXBlKCkp
IHsKICAgICBjYXNlIFdlYlZUVFRva2VuVHlwZXM6OkNoYXJhY3RlcjogewotICAgICAgICBSZWZQ
dHI8VGV4dD4gY2hpbGQgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQsIG1fdG9rZW4uY2hhcmFjdGVy
cygpKTsKLSAgICAgICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQXBwZW5kQ2hpbGQoY2hpbGQpOwor
ICAgICAgICBhdXRvIGNoaWxkID0gVGV4dDo6Y3JlYXRlKGRvY3VtZW50LCBtX3Rva2VuLmNoYXJh
Y3RlcnMoKSk7CisgICAgICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFwcGVuZENoaWxkKFdURjo6
bW92ZShjaGlsZCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBXZWJWVFRUb2tl
blR5cGVzOjpTdGFydFRhZzogewpAQCAtNTU0LDcgKzU1NCw3IEBAIHZvaWQgV2ViVlRUVHJlZUJ1
aWxkZXI6OmNvbnN0cnVjdFRyZWVGcm8KICAgICAgICAgaWYgKG5vZGVUeXBlID09IFdlYlZUVE5v
ZGVUeXBlUnVieVRleHQgJiYgY3VycmVudFR5cGUgIT0gV2ViVlRUTm9kZVR5cGVSdWJ5KQogICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgUmVmUHRyPFdlYlZUVEVsZW1lbnQ+IGNoaWxkID0g
V2ViVlRURWxlbWVudDo6Y3JlYXRlKG5vZGVUeXBlLCBkb2N1bWVudCk7CisgICAgICAgIGF1dG8g
Y2hpbGQgPSBXZWJWVFRFbGVtZW50OjpjcmVhdGUobm9kZVR5cGUsIGRvY3VtZW50KTsKICAgICAg
ICAgaWYgKCFtX3Rva2VuLmNsYXNzZXMoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjaGlsZC0+
c2V0QXR0cmlidXRlKGNsYXNzQXR0ciwgbV90b2tlbi5jbGFzc2VzKCkpOwogCkBAIC01NjYsOCAr
NTY2LDggQEAgdm9pZCBXZWJWVFRUcmVlQnVpbGRlcjo6Y29uc3RydWN0VHJlZUZybwogICAgICAg
ICB9CiAgICAgICAgIGlmICghbV9sYW5ndWFnZVN0YWNrLmlzRW1wdHkoKSkKICAgICAgICAgICAg
IGNoaWxkLT5zZXRMYW5ndWFnZShtX2xhbmd1YWdlU3RhY2subGFzdCgpKTsKLSAgICAgICAgbV9j
dXJyZW50Tm9kZS0+cGFyc2VyQXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgICAgICBtX2N1cnJlbnRO
b2RlID0gY2hpbGQ7CisgICAgICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFwcGVuZENoaWxkKGNo
aWxkLmNvcHlSZWYoKSk7CisgICAgICAgIG1fY3VycmVudE5vZGUgPSBXVEY6Om1vdmUoY2hpbGQp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBXZWJWVFRUb2tlblR5cGVzOjpFbmRU
YWc6IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxFcnJvcnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxFcnJvcnMuY3BwCShyZXZpc2lvbiAxODk4NDEpCisr
KyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MRXJyb3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQs
MjMgKzg0LDIzIEBAIHZvaWQgWE1MRXJyb3JzOjphcHBlbmRFcnJvck1lc3NhZ2UoY29uc3QKICAg
ICBtX2Vycm9yTWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2UpOwogfQogCi1zdGF0aWMgaW5saW5lIFJl
ZlB0cjxFbGVtZW50PiBjcmVhdGVYSFRNTFBhcnNlckVycm9ySGVhZGVyKERvY3VtZW50KiBkb2Ms
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlcykKK3N0YXRpYyBpbmxpbmUgUmVmPEVsZW1lbnQ+
IGNyZWF0ZVhIVE1MUGFyc2VyRXJyb3JIZWFkZXIoRG9jdW1lbnQqIGRvYywgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2VzKQogewotICAgIFJlZlB0cjxFbGVtZW50PiByZXBvcnRFbGVtZW50ID0g
ZG9jLT5jcmVhdGVFbGVtZW50KFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJwYXJzZXJlcnJvciIs
IHhodG1sTmFtZXNwYWNlVVJJKSwgdHJ1ZSk7CisgICAgUmVmPEVsZW1lbnQ+IHJlcG9ydEVsZW1l
bnQgPSBkb2MtPmNyZWF0ZUVsZW1lbnQoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInBhcnNlcmVy
cm9yIiwgeGh0bWxOYW1lc3BhY2VVUkkpLCB0cnVlKTsKIAogICAgIFZlY3RvcjxBdHRyaWJ1dGU+
IHJlcG9ydEF0dHJpYnV0ZXM7CiAgICAgcmVwb3J0QXR0cmlidXRlcy5hcHBlbmQoQXR0cmlidXRl
KHN0eWxlQXR0ciwgImRpc3BsYXk6IGJsb2NrOyB3aGl0ZS1zcGFjZTogcHJlOyBib3JkZXI6IDJw
eCBzb2xpZCAjYzc3OyBwYWRkaW5nOiAwIDFlbSAwIDFlbTsgbWFyZ2luOiAxZW07IGJhY2tncm91
bmQtY29sb3I6ICNmZGQ7IGNvbG9yOiBibGFjayIpKTsKICAgICByZXBvcnRFbGVtZW50LT5wYXJz
ZXJTZXRBdHRyaWJ1dGVzKHJlcG9ydEF0dHJpYnV0ZXMpOwogCi0gICAgUmVmUHRyPEVsZW1lbnQ+
IGgzID0gZG9jLT5jcmVhdGVFbGVtZW50KGgzVGFnLCB0cnVlKTsKLSAgICByZXBvcnRFbGVtZW50
LT5wYXJzZXJBcHBlbmRDaGlsZChoMy5nZXQoKSk7CisgICAgYXV0byBoMyA9IGRvYy0+Y3JlYXRl
RWxlbWVudChoM1RhZywgdHJ1ZSk7CisgICAgcmVwb3J0RWxlbWVudC0+cGFyc2VyQXBwZW5kQ2hp
bGQoaDMuY29weVJlZigpKTsKICAgICBoMy0+cGFyc2VyQXBwZW5kQ2hpbGQoZG9jLT5jcmVhdGVU
ZXh0Tm9kZSgiVGhpcyBwYWdlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZXJyb3JzOiIpKTsKIAot
ICAgIFJlZlB0cjxFbGVtZW50PiBmaXhlZCA9IGRvYy0+Y3JlYXRlRWxlbWVudChkaXZUYWcsIHRy
dWUpOworICAgIGF1dG8gZml4ZWQgPSBkb2MtPmNyZWF0ZUVsZW1lbnQoZGl2VGFnLCB0cnVlKTsK
ICAgICBWZWN0b3I8QXR0cmlidXRlPiBmaXhlZEF0dHJpYnV0ZXM7CiAgICAgZml4ZWRBdHRyaWJ1
dGVzLmFwcGVuZChBdHRyaWJ1dGUoc3R5bGVBdHRyLCAiZm9udC1mYW1pbHk6bW9ub3NwYWNlO2Zv
bnQtc2l6ZToxMnB4IikpOwogICAgIGZpeGVkLT5wYXJzZXJTZXRBdHRyaWJ1dGVzKGZpeGVkQXR0
cmlidXRlcyk7Ci0gICAgcmVwb3J0RWxlbWVudC0+cGFyc2VyQXBwZW5kQ2hpbGQoZml4ZWQuZ2V0
KCkpOworICAgIHJlcG9ydEVsZW1lbnQtPnBhcnNlckFwcGVuZENoaWxkKGZpeGVkLmNvcHlSZWYo
KSk7CiAKICAgICBmaXhlZC0+cGFyc2VyQXBwZW5kQ2hpbGQoZG9jLT5jcmVhdGVUZXh0Tm9kZShl
cnJvck1lc3NhZ2VzKSk7CiAKQEAgLTEyMCw1MCArMTIwLDUwIEBAIHZvaWQgWE1MRXJyb3JzOjpp
bnNlcnRFcnJvck1lc3NhZ2VCbG9jaygKICAgICAvLyBDcmVhdGUgZWxlbWVudHMgZm9yIGRpc3Bs
YXkKICAgICBSZWZQdHI8RWxlbWVudD4gZG9jdW1lbnRFbGVtZW50ID0gbV9kb2N1bWVudC0+ZG9j
dW1lbnRFbGVtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudEVsZW1lbnQpIHsKLSAgICAgICAgUmVm
UHRyPEVsZW1lbnQ+IHJvb3RFbGVtZW50ID0gbV9kb2N1bWVudC0+Y3JlYXRlRWxlbWVudChodG1s
VGFnLCB0cnVlKTsKLSAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IGJvZHkgPSBtX2RvY3VtZW50LT5j
cmVhdGVFbGVtZW50KGJvZHlUYWcsIHRydWUpOwotICAgICAgICByb290RWxlbWVudC0+cGFyc2Vy
QXBwZW5kQ2hpbGQoYm9keSk7Ci0gICAgICAgIG1fZG9jdW1lbnQtPnBhcnNlckFwcGVuZENoaWxk
KHJvb3RFbGVtZW50KTsKLSAgICAgICAgZG9jdW1lbnRFbGVtZW50ID0gYm9keS5nZXQoKTsKKyAg
ICAgICAgYXV0byByb290RWxlbWVudCA9IG1fZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoaHRtbFRh
ZywgdHJ1ZSk7CisgICAgICAgIGF1dG8gYm9keSA9IG1fZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQo
Ym9keVRhZywgdHJ1ZSk7CisgICAgICAgIHJvb3RFbGVtZW50LT5wYXJzZXJBcHBlbmRDaGlsZChi
b2R5LmNvcHlSZWYoKSk7CisgICAgICAgIG1fZG9jdW1lbnQtPnBhcnNlckFwcGVuZENoaWxkKHJv
b3RFbGVtZW50LmNvcHlSZWYoKSk7CisgICAgICAgIGRvY3VtZW50RWxlbWVudCA9IFdURjo6bW92
ZShib2R5KTsKICAgICB9CiAgICAgZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50LT5uYW1lc3BhY2VV
UkkoKSA9PSBTVkdOYW1lczo6c3ZnTmFtZXNwYWNlVVJJKSB7Ci0gICAgICAgIFJlZlB0cjxFbGVt
ZW50PiByb290RWxlbWVudCA9IG1fZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoaHRtbFRhZywgdHJ1
ZSk7Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBoZWFkID0gbV9kb2N1bWVudC0+Y3JlYXRlRWxl
bWVudChoZWFkVGFnLCB0cnVlKTsKLSAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHN0eWxlID0gbV9k
b2N1bWVudC0+Y3JlYXRlRWxlbWVudChzdHlsZVRhZywgdHJ1ZSk7Ci0gICAgICAgIGhlYWQtPnBh
cnNlckFwcGVuZENoaWxkKHN0eWxlKTsKKyAgICAgICAgYXV0byByb290RWxlbWVudCA9IG1fZG9j
dW1lbnQtPmNyZWF0ZUVsZW1lbnQoaHRtbFRhZywgdHJ1ZSk7CisgICAgICAgIGF1dG8gaGVhZCA9
IG1fZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoaGVhZFRhZywgdHJ1ZSk7CisgICAgICAgIGF1dG8g
c3R5bGUgPSBtX2RvY3VtZW50LT5jcmVhdGVFbGVtZW50KHN0eWxlVGFnLCB0cnVlKTsKKyAgICAg
ICAgaGVhZC0+cGFyc2VyQXBwZW5kQ2hpbGQoc3R5bGUuY29weVJlZigpKTsKICAgICAgICAgc3R5
bGUtPnBhcnNlckFwcGVuZENoaWxkKG1fZG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKCJodG1sLCBi
b2R5IHsgaGVpZ2h0OiAxMDAlIH0gcGFyc2VyZXJyb3IgKyBzdmcgeyB3aWR0aDogMTAwJTsgaGVp
Z2h0OiAxMDAlIH0iKSk7CiAgICAgICAgIHN0eWxlLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsK
LSAgICAgICAgcm9vdEVsZW1lbnQtPnBhcnNlckFwcGVuZENoaWxkKGhlYWQpOwotICAgICAgICBS
ZWZQdHI8RWxlbWVudD4gYm9keSA9IG1fZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoYm9keVRhZywg
dHJ1ZSk7Ci0gICAgICAgIHJvb3RFbGVtZW50LT5wYXJzZXJBcHBlbmRDaGlsZChib2R5KTsKKyAg
ICAgICAgcm9vdEVsZW1lbnQtPnBhcnNlckFwcGVuZENoaWxkKGhlYWQuY29weVJlZigpKTsKKyAg
ICAgICAgYXV0byBib2R5ID0gbV9kb2N1bWVudC0+Y3JlYXRlRWxlbWVudChib2R5VGFnLCB0cnVl
KTsKKyAgICAgICAgcm9vdEVsZW1lbnQtPnBhcnNlckFwcGVuZENoaWxkKGJvZHkuY29weVJlZigp
KTsKIAogICAgICAgICBtX2RvY3VtZW50LT5wYXJzZXJSZW1vdmVDaGlsZCgqZG9jdW1lbnRFbGVt
ZW50KTsKIAotICAgICAgICBib2R5LT5wYXJzZXJBcHBlbmRDaGlsZChkb2N1bWVudEVsZW1lbnQp
OwotICAgICAgICBtX2RvY3VtZW50LT5wYXJzZXJBcHBlbmRDaGlsZChyb290RWxlbWVudCk7Cisg
ICAgICAgIGJvZHktPnBhcnNlckFwcGVuZENoaWxkKCpkb2N1bWVudEVsZW1lbnQpOworICAgICAg
ICBtX2RvY3VtZW50LT5wYXJzZXJBcHBlbmRDaGlsZChXVEY6Om1vdmUocm9vdEVsZW1lbnQpKTsK
IAotICAgICAgICBkb2N1bWVudEVsZW1lbnQgPSBib2R5LmdldCgpOworICAgICAgICBkb2N1bWVu
dEVsZW1lbnQgPSBXVEY6Om1vdmUoYm9keSk7CiAgICAgfQogCiAgICAgU3RyaW5nIGVycm9yTWVz
c2FnZXMgPSBtX2Vycm9yTWVzc2FnZXMudG9TdHJpbmcoKTsKLSAgICBSZWZQdHI8RWxlbWVudD4g
cmVwb3J0RWxlbWVudCA9IGNyZWF0ZVhIVE1MUGFyc2VyRXJyb3JIZWFkZXIobV9kb2N1bWVudCwg
ZXJyb3JNZXNzYWdlcyk7CisgICAgYXV0byByZXBvcnRFbGVtZW50ID0gY3JlYXRlWEhUTUxQYXJz
ZXJFcnJvckhlYWRlcihtX2RvY3VtZW50LCBlcnJvck1lc3NhZ2VzKTsKIAogI2lmIEVOQUJMRShY
U0xUKQogICAgIGlmIChtX2RvY3VtZW50LT50cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudCgpKSB7CiAg
ICAgICAgIFZlY3RvcjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZXM7CiAgICAgICAgIGF0dHJpYnV0ZXMu
YXBwZW5kKEF0dHJpYnV0ZShzdHlsZUF0dHIsICJ3aGl0ZS1zcGFjZTogbm9ybWFsIikpOwotICAg
ICAgICBSZWZQdHI8RWxlbWVudD4gcGFyYWdyYXBoID0gbV9kb2N1bWVudC0+Y3JlYXRlRWxlbWVu
dChwVGFnLCB0cnVlKTsKKyAgICAgICAgYXV0byBwYXJhZ3JhcGggPSBtX2RvY3VtZW50LT5jcmVh
dGVFbGVtZW50KHBUYWcsIHRydWUpOwogICAgICAgICBwYXJhZ3JhcGgtPnBhcnNlclNldEF0dHJp
YnV0ZXMoYXR0cmlidXRlcyk7CiAgICAgICAgIHBhcmFncmFwaC0+cGFyc2VyQXBwZW5kQ2hpbGQo
bV9kb2N1bWVudC0+Y3JlYXRlVGV4dE5vZGUoIlRoaXMgZG9jdW1lbnQgd2FzIGNyZWF0ZWQgYXMg
dGhlIHJlc3VsdCBvZiBhbiBYU0wgdHJhbnNmb3JtYXRpb24uIFRoZSBsaW5lIGFuZCBjb2x1bW4g
bnVtYmVycyBnaXZlbiBhcmUgZnJvbSB0aGUgdHJhbnNmb3JtZWQgcmVzdWx0LiIpKTsKLSAgICAg
ICAgcmVwb3J0RWxlbWVudC0+cGFyc2VyQXBwZW5kQ2hpbGQocGFyYWdyYXBoLnJlbGVhc2UoKSk7
CisgICAgICAgIHJlcG9ydEVsZW1lbnQtPnBhcnNlckFwcGVuZENoaWxkKFdURjo6bW92ZShwYXJh
Z3JhcGgpKTsKICAgICB9CiAjZW5kaWYKIAogICAgIE5vZGUqIGZpcnN0Q2hpbGQgPSBkb2N1bWVu
dEVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsKICAgICBpZiAoZmlyc3RDaGlsZCkKLSAgICAgICAgZG9j
dW1lbnRFbGVtZW50LT5wYXJzZXJJbnNlcnRCZWZvcmUocmVwb3J0RWxlbWVudCwgZG9jdW1lbnRF
bGVtZW50LT5maXJzdENoaWxkKCkpOworICAgICAgICBkb2N1bWVudEVsZW1lbnQtPnBhcnNlcklu
c2VydEJlZm9yZShXVEY6Om1vdmUocmVwb3J0RWxlbWVudCksICpmaXJzdENoaWxkKTsKICAgICBl
bHNlCi0gICAgICAgIGRvY3VtZW50RWxlbWVudC0+cGFyc2VyQXBwZW5kQ2hpbGQocmVwb3J0RWxl
bWVudCk7CisgICAgICAgIGRvY3VtZW50RWxlbWVudC0+cGFyc2VyQXBwZW5kQ2hpbGQoV1RGOjpt
b3ZlKHJlcG9ydEVsZW1lbnQpKTsKIAogICAgIG1fZG9jdW1lbnQtPnVwZGF0ZVN0eWxlSWZOZWVk
ZWQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1l
bnRQYXJzZXIuY3BwCShyZXZpc2lvbiAxODk4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFy
c2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3
IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVudGVyVGV4dCgpCiAgICAgQVNTRVJUKG1fYnVm
ZmVyZWRUZXh0LnNpemUoKSA9PSAwKTsKICAgICBBU1NFUlQoIW1fbGVhZlRleHROb2RlKTsKICAg
ICBtX2xlYWZUZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZShtX2N1cnJlbnROb2RlLT5kb2N1bWVudCgp
LCAiIik7Ci0gICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQXBwZW5kQ2hpbGQobV9sZWFmVGV4dE5v
ZGUuZ2V0KCkpOworICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFwcGVuZENoaWxkKCptX2xlYWZU
ZXh0Tm9kZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IHhtbENo
YXIqIHN0cmluZywgc2l6ZV90IHNpemUpIApJbmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAkocmV2aXNpb24gMTg5
ODQxKQorKysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnht
bDIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTksMjMgKzgxOSwxOSBAQCB2b2lkIFhNTERvY3Vt
ZW50UGFyc2VyOjpzdGFydEVsZW1lbnROcyhjCiAgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVl
OwogCiAgICAgUXVhbGlmaWVkTmFtZSBxTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgdXJpKTsKLSAg
ICBSZWZQdHI8RWxlbWVudD4gbmV3RWxlbWVudCA9IG1fY3VycmVudE5vZGUtPmRvY3VtZW50KCku
Y3JlYXRlRWxlbWVudChxTmFtZSwgdHJ1ZSk7Ci0gICAgaWYgKCFuZXdFbGVtZW50KSB7Ci0gICAg
ICAgIHN0b3BQYXJzaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYXV0byBuZXdF
bGVtZW50ID0gbV9jdXJyZW50Tm9kZS0+ZG9jdW1lbnQoKS5jcmVhdGVFbGVtZW50KHFOYW1lLCB0
cnVlKTsKIAogICAgIFZlY3RvcjxBdHRyaWJ1dGU+IHByZWZpeGVkQXR0cmlidXRlczsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBoYW5kbGVOYW1lc3BhY2VBdHRyaWJ1dGVzKHByZWZp
eGVkQXR0cmlidXRlcywgbGlieG1sTmFtZXNwYWNlcywgbmJfbmFtZXNwYWNlcywgZWMpOwogICAg
IGlmIChlYykgewotICAgICAgICBzZXRBdHRyaWJ1dGVzKG5ld0VsZW1lbnQuZ2V0KCksIHByZWZp
eGVkQXR0cmlidXRlcywgcGFyc2VyQ29udGVudFBvbGljeSgpKTsKKyAgICAgICAgc2V0QXR0cmli
dXRlcyhuZXdFbGVtZW50LnB0cigpLCBwcmVmaXhlZEF0dHJpYnV0ZXMsIHBhcnNlckNvbnRlbnRQ
b2xpY3koKSk7CiAgICAgICAgIHN0b3BQYXJzaW5nKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBoYW5kbGVFbGVtZW50QXR0cmlidXRlcyhwcmVmaXhlZEF0dHJpYnV0ZXMsIGxpYnht
bEF0dHJpYnV0ZXMsIG5iX2F0dHJpYnV0ZXMsIGVjKTsKLSAgICBzZXRBdHRyaWJ1dGVzKG5ld0Vs
ZW1lbnQuZ2V0KCksIHByZWZpeGVkQXR0cmlidXRlcywgcGFyc2VyQ29udGVudFBvbGljeSgpKTsK
KyAgICBzZXRBdHRyaWJ1dGVzKG5ld0VsZW1lbnQucHRyKCksIHByZWZpeGVkQXR0cmlidXRlcywg
cGFyc2VyQ29udGVudFBvbGljeSgpKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc3RvcFBhcnNp
bmcoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODQzLDI1ICs4MzksMjUgQEAgdm9pZCBYTUxEb2N1
bWVudFBhcnNlcjo6c3RhcnRFbGVtZW50TnMoYwogCiAgICAgbmV3RWxlbWVudC0+YmVnaW5QYXJz
aW5nQ2hpbGRyZW4oKTsKIAotICAgIFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0b1Nj
cmlwdEVsZW1lbnRJZlBvc3NpYmxlKG5ld0VsZW1lbnQuZ2V0KCkpOworICAgIFNjcmlwdEVsZW1l
bnQqIHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKG5ld0VsZW1lbnQu
cHRyKCkpOwogICAgIGlmIChzY3JpcHRFbGVtZW50KQogICAgICAgICBtX3NjcmlwdFN0YXJ0UG9z
aXRpb24gPSB0ZXh0UG9zaXRpb24oKTsKIAotICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFwcGVu
ZENoaWxkKG5ld0VsZW1lbnQuZ2V0KCkpOworICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFwcGVu
ZENoaWxkKG5ld0VsZW1lbnQuY29weVJlZigpKTsKICAgICBpZiAoIW1fY3VycmVudE5vZGUpIC8v
IFN5bmNocm9ub3VzIERPTSBldmVudHMgbWF5IGhhdmUgcmVtb3ZlZCB0aGUgY3VycmVudCBub2Rl
LgogICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICBp
ZiAoaXM8SFRNTFRlbXBsYXRlRWxlbWVudD4oKm5ld0VsZW1lbnQpKQotICAgICAgICBwdXNoQ3Vy
cmVudE5vZGUoZG93bmNhc3Q8SFRNTFRlbXBsYXRlRWxlbWVudD4oKm5ld0VsZW1lbnQpLmNvbnRl
bnQoKSk7CisgICAgaWYgKGlzPEhUTUxUZW1wbGF0ZUVsZW1lbnQ+KG5ld0VsZW1lbnQpKQorICAg
ICAgICBwdXNoQ3VycmVudE5vZGUoZG93bmNhc3Q8SFRNTFRlbXBsYXRlRWxlbWVudD4obmV3RWxl
bWVudC5nZXQoKSkuY29udGVudCgpKTsKICAgICBlbHNlCi0gICAgICAgIHB1c2hDdXJyZW50Tm9k
ZShuZXdFbGVtZW50LmdldCgpKTsKKyAgICAgICAgcHVzaEN1cnJlbnROb2RlKG5ld0VsZW1lbnQu
cHRyKCkpOwogI2Vsc2UKICAgICBwdXNoQ3VycmVudE5vZGUobmV3RWxlbWVudC5nZXQoKSk7CiAj
ZW5kaWYKIAotICAgIGlmIChpczxIVE1MSHRtbEVsZW1lbnQ+KCpuZXdFbGVtZW50KSkKLSAgICAg
ICAgZG93bmNhc3Q8SFRNTEh0bWxFbGVtZW50PigqbmV3RWxlbWVudCkuaW5zZXJ0ZWRCeVBhcnNl
cigpOworICAgIGlmIChpczxIVE1MSHRtbEVsZW1lbnQ+KG5ld0VsZW1lbnQpKQorICAgICAgICBk
b3duY2FzdDxIVE1MSHRtbEVsZW1lbnQ+KG5ld0VsZW1lbnQuZ2V0KCkpLmluc2VydGVkQnlQYXJz
ZXIoKTsKIAogICAgIGlmICghbV9wYXJzaW5nRnJhZ21lbnQgJiYgaXNGaXJzdEVsZW1lbnQgJiYg
ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+aW5qZWN0
VXNlclNjcmlwdHMoSW5qZWN0QXREb2N1bWVudFN0YXJ0KTsKQEAgLTk5OSwxNCArOTk1LDE0IEBA
IHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nlc3NpbmdJbnN0cnUKIAogICAgIC8vICMjIyBo
YW5kbGUgZXhjZXB0aW9ucwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24+IHBpID0gbV9jdXJyZW50Tm9kZS0+ZG9jdW1lbnQoKS5jcmVh
dGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oCisgICAgUmVmPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4g
cGkgPSAqbV9jdXJyZW50Tm9kZS0+ZG9jdW1lbnQoKS5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24oCiAgICAgICAgIHRvU3RyaW5nKHRhcmdldCksIHRvU3RyaW5nKGRhdGEpLCBlYyk7CiAgICAg
aWYgKGVjKQogICAgICAgICByZXR1cm47CiAKICAgICBwaS0+c2V0Q3JlYXRlZEJ5UGFyc2VyKHRy
dWUpOwogCi0gICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQXBwZW5kQ2hpbGQocGkuZ2V0KCkpOwor
ICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFwcGVuZENoaWxkKHBpLmNvcHlSZWYoKSk7CiAKICAg
ICBwaS0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CiAKQEAgLTEwMzEsOCArMTAyNyw4IEBAIHZv
aWQgWE1MRG9jdW1lbnRQYXJzZXI6OmNkYXRhQmxvY2soY29uc3QKIAogICAgIGV4aXRUZXh0KCk7
CiAKLSAgICBSZWZQdHI8Q0RBVEFTZWN0aW9uPiBuZXdOb2RlID0gQ0RBVEFTZWN0aW9uOjpjcmVh
dGUobV9jdXJyZW50Tm9kZS0+ZG9jdW1lbnQoKSwgdG9TdHJpbmcocywgbGVuKSk7Ci0gICAgbV9j
dXJyZW50Tm9kZS0+cGFyc2VyQXBwZW5kQ2hpbGQobmV3Tm9kZS5yZWxlYXNlKCkpOworICAgIGF1
dG8gbmV3Tm9kZSA9IENEQVRBU2VjdGlvbjo6Y3JlYXRlKG1fY3VycmVudE5vZGUtPmRvY3VtZW50
KCksIHRvU3RyaW5nKHMsIGxlbikpOworICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFwcGVuZENo
aWxkKFdURjo6bW92ZShuZXdOb2RlKSk7CiB9CiAKIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmNv
bW1lbnQoY29uc3QgeG1sQ2hhciogcykKQEAgLTEwNDcsOCArMTA0Myw4IEBAIHZvaWQgWE1MRG9j
dW1lbnRQYXJzZXI6OmNvbW1lbnQoY29uc3QgeG0KIAogICAgIGV4aXRUZXh0KCk7CiAKLSAgICBS
ZWZQdHI8Q29tbWVudD4gbmV3Tm9kZSA9IENvbW1lbnQ6OmNyZWF0ZShtX2N1cnJlbnROb2RlLT5k
b2N1bWVudCgpLCB0b1N0cmluZyhzKSk7Ci0gICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQXBwZW5k
Q2hpbGQobmV3Tm9kZS5yZWxlYXNlKCkpOworICAgIGF1dG8gbmV3Tm9kZSA9IENvbW1lbnQ6OmNy
ZWF0ZShtX2N1cnJlbnROb2RlLT5kb2N1bWVudCgpLCB0b1N0cmluZyhzKSk7CisgICAgbV9jdXJy
ZW50Tm9kZS0+cGFyc2VyQXBwZW5kQ2hpbGQoV1RGOjptb3ZlKG5ld05vZGUpKTsKIH0KIAogZW51
bSBTdGFuZGFsb25lSW5mbyB7Cg==
</data>
<flag name="review"
          id="286635"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>