<?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>139273</bug_id>
          
          <creation_ts>2014-12-04 15:27:20 -0800</creation_ts>
          <short_desc>Split out FunctionNode from FunctionBodyNode</short_desc>
          <delta_ts>2014-12-04 15:47:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1052588</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-12-04 15:27:20 -0800</bug_when>
    <thetext>Split out FunctionNode from FunctionBodyNode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052591</commentid>
    <comment_count>1</comment_count>
      <attachid>242591</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-12-04 15:37:03 -0800</bug_when>
    <thetext>Created attachment 242591
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052592</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-04 15:38:49 -0800</bug_when>
    <thetext>Attachment 242591 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:267:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052593</commentid>
    <comment_count>3</comment_count>
      <attachid>242591</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-12-04 15:46:17 -0800</bug_when>
    <thetext>Comment on attachment 242591
Patch

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

r=me

&gt; Source/JavaScriptCore/parser/Nodes.h:1541
&gt; +    class FunctionBodyNode : public StatementNode, public ParserArenaDeletable {

This class can be final.

&gt; Source/JavaScriptCore/parser/Nodes.h:1585
&gt; +    class FunctionNode : public ScopeNode {

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052595</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-12-04 15:47:17 -0800</bug_when>
    <thetext>Committed r176822: &lt;http://trac.webkit.org/changeset/176822&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242591</attachid>
            <date>2014-12-04 15:37:03 -0800</date>
            <delta_ts>2014-12-04 15:46:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139273-20141204153737.patch</filename>
            <type>text/plain</type>
            <size>36204</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc2ODIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBA
CisyMDE0LTEyLTA0ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgU3BsaXQgb3V0IEZ1bmN0aW9uTm9kZSBmcm9tIEZ1bmN0aW9uQm9keU5vZGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTI3MworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgc3RlcCB0b3dh
cmQgYSBwYXJzZXIgc3BlZWR1cC4KKworICAgICAgICBXZSB1c2VkIHRvIHVzZSBGdW5jdGlvbkJv
ZHlOb2RlIGZvciB0d28gZGlmZmVyZW50IHB1cnBvc2VzOgorCisgICAgICAgICgxKSAiSSBhbSB0
aGUgcm9vdCBmdW5jdGlvbiB5b3UgYXJlIGN1cnJlbnRseSBwYXJzaW5nIjsKKworICAgICAgICAo
MikgIkkgYW0gYSBsYXp5IHJlY29yZCBvZiBhIG5lc3RlZCBmdW5jdGlvbiwgd2hpY2ggeW91IHdp
bGwgcGFyc2UgbGF0ZXIiLgorCisgICAgICAgIFRoaXMgbWFkZSBmb3IgYXdrd2FyZCBsaWZldGlt
ZSBzZW1hbnRpY3MgYW5kIGludGVyZmFjZXMuCisKKyAgICAgICAgTm93LCBjYXNlICgxKSBpcyBo
YW5kbGVkIGJ5IEZ1bmN0aW9uQm9keU5vZGUsIGFuZCBjYXNlICgyKSBpcyBoYW5kbGVkIGJ5Cisg
ICAgICAgIGEgbmV3IG5vZGUgbmFtZWQgRnVuY3Rpb25Ob2RlLgorCisgICAgICAgIFNpbmNlIGNh
c2UgKDEpIG5vIGxvbmdlciBuZWVkcyB0byBoYW5kbGUgYmVpbmcgdGhlIHJvb3Qgb2YgdGhlIHBh
cnNlCisgICAgICAgIHRyZWUsIEZ1bmN0aW9uQm9keU5vZGUgY2FuIGJlIGEgbm9ybWFsIGFyZW5h
LWFsbG9jYXRlZCBub2RlLgorCisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2NrKTogVXNlIEZ1bmN0
aW9uTm9kZSBpbnN0ZWFkIG9mCisgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUsIHNpbmNlIHdlIGFy
ZSBwcm9kdWNpbmcgdGhlIHJvb3Qgb2YgdGhlIGZ1bmN0aW9uIHBhcnNlCisgICAgICAgIHRyZWUu
CisKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKTogUmVtb3ZlZAorICAgICAgICBzb21lIHVudXNlZCBkYXRhLCBhbmQg
ZGVmYXVsdC1pbml0aWFsaXplZCBvdGhlciBkYXRhLCB3aGljaCBpc24ndCBmaWxsZWQKKyAgICAg
ICAgaW4gbWVhbmluZ2Z1bGx5IHVudGlsIHJlY29yZFBhcnNlKCkgaXMgY2FsbGVkLiAoVGhlIHBy
ZXZpb3VzIHZhbHVlcyB3ZXJlCisgICAgICAgIGluY29ycmVjdCAvIG1lYW5pbmdsZXNzLCBzaW5j
ZSB0aGUgRnVuY3Rpb25Cb2R5Tm9kZSBkaWRuJ3QgaGF2ZQorICAgICAgICBtZWFuaW5nZnVsIHZh
bHVlcyBpbiB0aGlzIGNhc2UuKQorCisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaDogRGl0dG8uCisKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6
OmZvcmNlVXNlc0FyZ3VtZW50cyk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
Qnl0ZWNvZGVHZW5lcmF0b3IpOiBVc2UgRnVuY3Rpb25Ob2RlIGluc3RlYWQgb2YKKyAgICAgICAg
RnVuY3Rpb25Cb2R5Tm9kZSwgc2luY2Ugd2UgYXJlIGdlbmVyYXRpbmcgY29kZSBzdGFydGluZyBh
dCB0aGUgcm9vdCBvZgorICAgICAgICB0aGUgcGFyc2UgdHJlZS4KKworICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZUNhbGxlZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjphZGRDYWxsZWUpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oOiBEaXR0by4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbk5vZGU6OmVtaXRCeXRlY29kZSk6IE1vdmVkIHRoZSBlbWl0Qnl0
ZWNvZGUgaW1wbGVtZW50YXRpb24KKyAgICAgICAgdG8gRnVuY3Rpb25Ob2RlLCBzaW5jZSB3ZSBu
ZXZlciBnZW5lcmF0ZSBjb2RlIGZvciBGdW5jdGlvbkJvZHlOb2RlLAorICAgICAgICBzaW5jZSBp
dCdzIGp1c3QgYSBwbGFjZWhvbGRlciBpbiB0aGUgQVNULgorCisgICAgICAgICogcGFyc2VyL0FT
VEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVuY3Rpb25Cb2R5
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6c2V0VXNlc0FyZ3VtZW50cyk6IERlbGV0ZWQu
IFVwZGF0ZWQgZm9yIGludGVyZmFjZQorICAgICAgICBjaGFuZ2VzLgorCisgICAgICAgICogcGFy
c2VyL05vZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25C
b2R5Tm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OmZpbmlzaFBhcnNpbmcp
OgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjpzZXRFbmRQb3NpdGlvbik6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uTm9kZTo6RnVuY3Rpb25Ob2RlKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25Ob2RlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbk5vZGU6OmZpbmlzaFBh
cnNpbmcpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUpOiBEZWxldGVk
LgorCisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9k
eU5vZGU6OnBhcmFtZXRlcnMpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjpzb3Vy
Y2UpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjpzdGFydFN0YXJ0T2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6aXNJblN0cmljdENvbnRleHQpOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbk5vZGU6OnBhcmFtZXRlcnMpOgorICAgICAgICAoSlNDOjpGdW5j
dGlvbk5vZGU6OmlkZW50KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Ob2RlOjpmdW5jdGlvbk1v
ZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbk5vZGU6OnN0YXJ0Q29sdW1uKToKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25Ob2RlOjplbmRDb2x1bW4pOgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6
OnNldFNvdXJjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OnBh
cmFtZXRlckNvdW50KTogRGVsZXRlZC4gU3BsaXQgb3V0IHRoZSBkaWZmZXJlbmNlcworICAgICAg
ICBiZXR3ZWVuIEZ1bmN0aW9uTm9kZSBhbmQgRnVuY3Rpb25Cb2R5Tm9kZS4KKworICAgICAgICAq
IHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNy
ZWF0ZUNsYXVzZUxpc3QpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpzZXRVc2VzQXJn
dW1lbnRzKTogRGVsZXRlZC4gUmVtb3ZlZCBzZXRVc2VzQXJndW1lbnRzCisgICAgICAgIHNpbmNl
IGl0IHdhc24ndCB1c2VkLgorCisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNoZWNrU3ludGF4KTogUmVtb3ZlZCBhIGJy
YW5jaCB0aGF0IHdhcyBhbHdheXMKKyAgICAgICAgZmFsc2UuCisKIDIwMTQtMTItMDIgIEJyaWFu
IEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHRpbWVsaW5lIHByb2JlIHJlY29yZHMgaGF2ZSBpbmFjY3VyYXRlIHBlci1wcm9iZSBoaXQg
Y291bnRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE3NjgxMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDIyICs1MSwyMCBAQCBjb25zdCBDbGFzc0luZm8gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
CiAKIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmF0ZUZ1bmN0aW9uQ29k
ZUJsb2NrKFZNJiB2bSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBEZWJ1
Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBVbmxpbmtl
ZEZ1bmN0aW9uS2luZCBmdW5jdGlvbktpbmQsIGJvb2wgYm9keUluY2x1ZGVzQnJhY2VzLCBQYXJz
ZXJFcnJvciYgZXJyb3IpCiB7Ci0gICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGJvZHkgPSBw
YXJzZTxGdW5jdGlvbkJvZHlOb2RlPigmdm0sIHNvdXJjZSwgZXhlY3V0YWJsZS0+cGFyYW1ldGVy
cygpLCBleGVjdXRhYmxlLT5uYW1lKCksIGV4ZWN1dGFibGUtPnRvU3RyaWN0bmVzcygpLCBKU1Bh
cnNlRnVuY3Rpb25Db2RlLCBlcnJvciwgMCwgYm9keUluY2x1ZGVzQnJhY2VzKTsKKyAgICBSZWZQ
dHI8RnVuY3Rpb25Ob2RlPiBmdW5jdGlvbiA9IHBhcnNlPEZ1bmN0aW9uTm9kZT4oJnZtLCBzb3Vy
Y2UsIGV4ZWN1dGFibGUtPnBhcmFtZXRlcnMoKSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVjdXRh
YmxlLT50b1N0cmljdG5lc3MoKSwgSlNQYXJzZUZ1bmN0aW9uQ29kZSwgZXJyb3IsIDAsIGJvZHlJ
bmNsdWRlc0JyYWNlcyk7CiAKLSAgICBpZiAoIWJvZHkpIHsKKyAgICBpZiAoIWZ1bmN0aW9uKSB7
CiAgICAgICAgIEFTU0VSVChlcnJvci5tX3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSk7
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlmIChleGVjdXRhYmxlLT5mb3JjZVVz
ZXNBcmd1bWVudHMoKSkKLSAgICAgICAgYm9keS0+c2V0VXNlc0FyZ3VtZW50cygpOwotICAgIGJv
ZHktPmZpbmlzaFBhcnNpbmcoZXhlY3V0YWJsZS0+cGFyYW1ldGVycygpLCBleGVjdXRhYmxlLT5u
YW1lKCksIGV4ZWN1dGFibGUtPmZ1bmN0aW9uTW9kZSgpKTsKLSAgICBleGVjdXRhYmxlLT5yZWNv
cmRQYXJzZShib2R5LT5mZWF0dXJlcygpLCBib2R5LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpKTsK
KyAgICBmdW5jdGlvbi0+ZmluaXNoUGFyc2luZyhleGVjdXRhYmxlLT5wYXJhbWV0ZXJzKCksIGV4
ZWN1dGFibGUtPm5hbWUoKSwgZXhlY3V0YWJsZS0+ZnVuY3Rpb25Nb2RlKCkpOworICAgIGV4ZWN1
dGFibGUtPnJlY29yZFBhcnNlKGZ1bmN0aW9uLT5mZWF0dXJlcygpLCBmdW5jdGlvbi0+aGFzQ2Fw
dHVyZWRWYXJpYWJsZXMoKSk7CiAgICAgCi0gICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayog
cmVzdWx0ID0gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKCZ2bSwgRnVuY3Rpb25D
b2RlLCBFeGVjdXRhYmxlSW5mbyhib2R5LT5uZWVkc0FjdGl2YXRpb24oKSwgYm9keS0+dXNlc0V2
YWwoKSwgYm9keS0+aXNTdHJpY3RNb2RlKCksIGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCwgZnVu
Y3Rpb25LaW5kID09IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uKSk7Ci0gICAgT3duUHRyPEJ5dGVj
b2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKHZt
LCBib2R5LmdldCgpLCByZXN1bHQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlKSkpOworICAg
IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHJlc3VsdCA9IFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2s6OmNyZWF0ZSgmdm0sIEZ1bmN0aW9uQ29kZSwgRXhlY3V0YWJsZUluZm8oZnVuY3Rpb24t
Pm5lZWRzQWN0aXZhdGlvbigpLCBmdW5jdGlvbi0+dXNlc0V2YWwoKSwgZnVuY3Rpb24tPmlzU3Ry
aWN0TW9kZSgpLCBraW5kID09IENvZGVGb3JDb25zdHJ1Y3QsIGZ1bmN0aW9uS2luZCA9PSBVbmxp
bmtlZEJ1aWx0aW5GdW5jdGlvbikpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2Vu
ZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcih2bSwgZnVuY3Rpb24uZ2V0KCks
IHJlc3VsdCwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUpKSk7CiAgICAgZXJyb3IgPSBnZW5l
cmF0b3ItPmdlbmVyYXRlKCk7Ci0gICAgYm9keS0+ZGVzdHJveURhdGEoKTsKKyAgICBmdW5jdGlv
bi0+ZGVzdHJveURhdGEoKTsKICAgICBpZiAoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9yOjpF
cnJvck5vbmUpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC04NCwx
MCArODIsOCBAQCB1bnNpZ25lZCBVbmxpbmtlZENvZGVCbG9jazo6YWRkT3JGaW5kQ29uCiAKIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSog
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0
aW9uQm9keU5vZGUqIG5vZGUsIFVubGlua2VkRnVuY3Rpb25LaW5kIGtpbmQpCiAgICAgOiBCYXNl
KCp2bSwgc3RydWN0dXJlKQotICAgICwgbV9udW1DYXB0dXJlZFZhcmlhYmxlcyhub2RlLT5jYXB0
dXJlZFZhcmlhYmxlQ291bnQoKSkKLSAgICAsIG1fZm9yY2VVc2VzQXJndW1lbnRzKG5vZGUtPnVz
ZXNBcmd1bWVudHMoKSkKLSAgICAsIG1faXNJblN0cmljdENvbnRleHQobm9kZS0+aXNTdHJpY3RN
b2RlKCkpCi0gICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKG5vZGUtPmhhc0NhcHR1cmVkVmFy
aWFibGVzKCkpCisgICAgLCBtX2lzSW5TdHJpY3RDb250ZXh0KG5vZGUtPmlzSW5TdHJpY3RDb250
ZXh0KCkpCisgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKGZhbHNlKQogICAgICwgbV9pc0J1
aWx0aW5GdW5jdGlvbihraW5kID09IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uKQogICAgICwgbV9u
YW1lKG5vZGUtPmlkZW50KCkpCiAgICAgLCBtX2luZmVycmVkTmFtZShub2RlLT5pbmZlcnJlZE5h
bWUoKSkKQEAgLTEwMSw3ICs5Nyw3IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxp
bmtlZEZ1bmMKICAgICAsIG1fc291cmNlTGVuZ3RoKG5vZGUtPnNvdXJjZSgpLmxlbmd0aCgpKQog
ICAgICwgbV90eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQobm9kZS0+ZnVuY3Rpb25OYW1lU3RhcnQo
KSkKICAgICAsIG1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldChub2RlLT5zdGFydFN0YXJ0T2Zmc2V0
KCkgKyBub2RlLT5zb3VyY2UoKS5sZW5ndGgoKSAtIDEpCi0gICAgLCBtX2ZlYXR1cmVzKG5vZGUt
PmZlYXR1cmVzKCkpCisgICAgLCBtX2ZlYXR1cmVzKDApCiAgICAgLCBtX2Z1bmN0aW9uTW9kZShu
b2RlLT5mdW5jdGlvbk1vZGUoKSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAxNzY4MTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMTUyLDggKzE1Miw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9oYXNDYXB0
dXJlZFZhcmlhYmxlcyA9IGhhc0NhcHR1cmVkVmFyaWFibGVzOwogICAgIH0KIAotICAgIGJvb2wg
Zm9yY2VVc2VzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9mb3JjZVVzZXNBcmd1bWVudHM7
IH0KLQogICAgIENvZGVGZWF0dXJlcyBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVy
ZXM7IH0KICAgICBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNDYXB0dXJlZFZhcmlhYmxlczsgfQogCkBAIC0xNjgsOCArMTY2LDYgQEAgcHJpdmF0ZToKICAg
ICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JD
YWxsOwogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdDsKIAotICAgIHVuc2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMg
OiAyOTsKLSAgICBib29sIG1fZm9yY2VVc2VzQXJndW1lbnRzIDogMTsKICAgICBib29sIG1faXNJ
blN0cmljdENvbnRleHQgOiAxOwogICAgIGJvb2wgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7
CiAgICAgYm9vbCBtX2lzQnVpbHRpbkZ1bmN0aW9uIDogMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CShyZXZpc2lvbiAxNzY4MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDExICsyMDYsMTEg
QEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogCiB9CiAKLUJ5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIEZ1bmN0aW9uQm9keU5vZGUq
IGZ1bmN0aW9uQm9keSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBEZWJ1
Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlKQorQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgRnVuY3Rpb25Ob2RlKiBmdW5j
dGlvbk5vZGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywgRGVidWdnZXJN
b2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSkKICAgICA6IG1fc2hv
dWxkRW1pdERlYnVnSG9va3MoT3B0aW9uczo6Zm9yY2VEZWJ1Z2dlckJ5dGVjb2RlR2VuZXJhdGlv
bigpIHx8IGRlYnVnZ2VyTW9kZSA9PSBEZWJ1Z2dlck9uKQogICAgICwgbV9zaG91bGRFbWl0UHJv
ZmlsZUhvb2tzKE9wdGlvbnM6OmZvcmNlUHJvZmlsZXJCeXRlY29kZUdlbmVyYXRpb24oKSB8fCBw
cm9maWxlck1vZGUgPT0gUHJvZmlsZXJPbikKICAgICAsIG1fc3ltYm9sVGFibGUoY29kZUJsb2Nr
LT5zeW1ib2xUYWJsZSgpKQotICAgICwgbV9zY29wZU5vZGUoZnVuY3Rpb25Cb2R5KQorICAgICwg
bV9zY29wZU5vZGUoZnVuY3Rpb25Ob2RlKQogICAgICwgbV9jb2RlQmxvY2sodm0sIGNvZGVCbG9j
aykKICAgICAsIG1fc2NvcGVSZWdpc3RlcigwKQogICAgICwgbV9sZXhpY2FsRW52aXJvbm1lbnRS
ZWdpc3RlcigwKQpAQCAtMjM5LDcgKzIzOSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihWTSYKIAogICAgIG1fc3ltYm9sVGFibGUtPnNldFVzZXNOb25TdHJpY3RFdmFs
KGNvZGVCbG9jay0+dXNlc0V2YWwoKSAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSk7CiAg
ICAgVmVjdG9yPElkZW50aWZpZXI+IGJvdW5kUGFyYW1ldGVyUHJvcGVydGllczsKLSAgICBGdW5j
dGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMgPSAqZnVuY3Rpb25Cb2R5LT5wYXJhbWV0ZXJzKCk7
CisgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzID0gKmZ1bmN0aW9uTm9kZS0+cGFy
YW1ldGVycygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7
IGkrKykgewogICAgICAgICBhdXRvIHBhdHRlcm4gPSBwYXJhbWV0ZXJzLmF0KGkpOwogICAgICAg
ICBpZiAocGF0dGVybi0+aXNCaW5kaW5nTm9kZSgpKQpAQCAtMjQ3LDcgKzI0Nyw3IEBAIEJ5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgcGF0dGVybi0+Y29s
bGVjdEJvdW5kSWRlbnRpZmllcnMoYm91bmRQYXJhbWV0ZXJQcm9wZXJ0aWVzKTsKICAgICAgICAg
Y29udGludWU7CiAgICAgfQotICAgIG1fc3ltYm9sVGFibGUtPnNldFBhcmFtZXRlckNvdW50SW5j
bHVkaW5nVGhpcyhmdW5jdGlvbkJvZHktPnBhcmFtZXRlcnMoKS0+c2l6ZSgpICsgMSk7CisgICAg
bV9zeW1ib2xUYWJsZS0+c2V0UGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzKGZ1bmN0aW9uTm9k
ZS0+cGFyYW1ldGVycygpLT5zaXplKCkgKyAxKTsKIAogICAgIGVtaXRPcGNvZGUob3BfZW50ZXIp
OwogCkBAIC0yNjQsNyArMjY0LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJh
dG9yKFZNJgogICAgIFJlZ2lzdGVySUQqIHNjcmF0Y2ggPSBhZGRWYXIoKTsKICAgICBtX3N5bWJv
bFRhYmxlLT5zZXRDYXB0dXJlU3RhcnQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jb2RlQmxv
Y2stPm1fbnVtVmFycykub2Zmc2V0KCkpOwogCi0gICAgaWYgKGZ1bmN0aW9uQm9keS0+dXNlc0Fy
Z3VtZW50cygpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSkgeyAvLyBNYXkgcmVpZnkgYXJndW1l
bnRzIG9iamVjdC4KKyAgICBpZiAoZnVuY3Rpb25Ob2RlLT51c2VzQXJndW1lbnRzKCkgfHwgY29k
ZUJsb2NrLT51c2VzRXZhbCgpKSB7IC8vIE1heSByZWlmeSBhcmd1bWVudHMgb2JqZWN0LgogICAg
ICAgICBSZWdpc3RlcklEKiB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIoKTsg
Ly8gQW5vbnltb3VzLCBzbyBpdCBjYW4ndCBiZSBtb2RpZmllZCBieSB1c2VyIGNvZGUuCiAgICAg
ICAgIFJlZ2lzdGVySUQqIGFyZ3VtZW50c1JlZ2lzdGVyID0gYWRkVmFyKHByb3BlcnR5TmFtZXMo
KS5hcmd1bWVudHMsIElzVmFyaWFibGUsIE5vdFdhdGNoYWJsZSk7IC8vIENhbiBiZSBjaGFuZ2Vk
IGJ5IGFzc2lnbmluZyB0byAnYXJndW1lbnRzJy4KIApAQCAtMjg3LDcgKzI4Nyw3IEBAIEJ5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgICAgICAgICBpbml0
aWFsaXplQ2FwdHVyZWRWYXJpYWJsZShhcmd1bWVudHNSZWdpc3RlciwgcHJvcGVydHlOYW1lcygp
LmFyZ3VtZW50cywgYXJndW1lbnRzUmVnaXN0ZXIpOwogICAgICAgICAgICAgICAgIFJlZ2lzdGVy
SUQqIHVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyID0gJnJlZ2lzdGVyRm9yKEpTQzo6dW5tb2Rp
ZmllZEFyZ3VtZW50c1JlZ2lzdGVyKG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKS5v
ZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUNhcHR1cmVkVmFyaWFibGUodW5j
aGVja2VkQXJndW1lbnRzUmVnaXN0ZXIsIHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMsIHVuY2hl
Y2tlZEFyZ3VtZW50c1JlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25Cb2R5
LT5tb2RpZmllc0FyZ3VtZW50cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uTm9k
ZS0+bW9kaWZpZXNBcmd1bWVudHMoKSkgewogICAgICAgICAgICAgICAgICAgICBlbWl0T3Bjb2Rl
KG9wX21vdik7CiAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd1
bWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChhZGRDb25zdGFudFZhbHVlKGpzVW5kZWZpbmVkKCkpLT5pbmRleCgpKTsKQEAg
LTMwNCw4ICszMDQsOCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0m
CiAKICAgICBib29sIGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUgPSBmYWxzZTsKICAgICBWZWN0
b3I8UmVnaXN0ZXJJRCosIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBjYXB0dXJlZEFyZ3VtZW50
czsKLSAgICBpZiAoZnVuY3Rpb25Cb2R5LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpIHx8IHNob3Vs
ZENhcHR1cmVBbGxUaGVUaGluZ3MpIHsKLSAgICAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJh
bWV0ZXJzID0gKmZ1bmN0aW9uQm9keS0+cGFyYW1ldGVycygpOworICAgIGlmIChmdW5jdGlvbk5v
ZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCkgfHwgc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncykg
eworICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMgPSAqZnVuY3Rpb25Ob2Rl
LT5wYXJhbWV0ZXJzKCk7CiAgICAgICAgIGNhcHR1cmVkQXJndW1lbnRzLnJlc2l6ZShwYXJhbWV0
ZXJzLnNpemUoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5z
aXplKCk7ICsraSkgewogICAgICAgICAgICAgY2FwdHVyZWRBcmd1bWVudHNbaV0gPSAwOwpAQCAt
MzEzLDcgKzMxMyw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYK
ICAgICAgICAgICAgIGlmICghcGF0dGVybi0+aXNCaW5kaW5nTm9kZSgpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0
aWNfY2FzdDxjb25zdCBCaW5kaW5nTm9kZSo+KHBhdHRlcm4pLT5ib3VuZFByb3BlcnR5KCk7Ci0g
ICAgICAgICAgICBpZiAoIWZ1bmN0aW9uQm9keS0+Y2FwdHVyZXMoaWRlbnQpICYmICFzaG91bGRD
YXB0dXJlQWxsVGhlVGhpbmdzKQorICAgICAgICAgICAgaWYgKCFmdW5jdGlvbk5vZGUtPmNhcHR1
cmVzKGlkZW50KSAmJiAhc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncykKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUgPSB0cnVl
OwogICAgICAgICAgICAgY2FwdHVyZWRBcmd1bWVudHNbaV0gPSBhZGRWYXIoKTsKQEAgLTMzNSwy
NCArMzM1LDI0IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAg
ICAgICAgbV9zeW1ib2xUYWJsZS0+c2V0U2xvd0FyZ3VtZW50cyhXVEY6Om1vdmUoc2xvd0FyZ3Vt
ZW50cykpOwogICAgIH0KIAotICAgIFJlZ2lzdGVySUQqIGNhbGxlZVJlZ2lzdGVyID0gcmVzb2x2
ZUNhbGxlZShmdW5jdGlvbkJvZHkpOyAvLyBNYXkgcHVzaCB0byB0aGUgc2NvcGUgY2hhaW4gYW5k
L29yIGFkZCBhIGNhcHR1cmVkIHZhci4KKyAgICBSZWdpc3RlcklEKiBjYWxsZWVSZWdpc3RlciA9
IHJlc29sdmVDYWxsZWUoZnVuY3Rpb25Ob2RlKTsgLy8gTWF5IHB1c2ggdG8gdGhlIHNjb3BlIGNo
YWluIGFuZC9vciBhZGQgYSBjYXB0dXJlZCB2YXIuCiAKLSAgICBjb25zdCBEZWNsYXJhdGlvblN0
YWNrczo6RnVuY3Rpb25TdGFjayYgZnVuY3Rpb25TdGFjayA9IGZ1bmN0aW9uQm9keS0+ZnVuY3Rp
b25TdGFjaygpOwotICAgIGNvbnN0IERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjayYgdmFyU3Rh
Y2sgPSBmdW5jdGlvbkJvZHktPnZhclN0YWNrKCk7CisgICAgY29uc3QgRGVjbGFyYXRpb25TdGFj
a3M6OkZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9uU3RhY2sgPSBmdW5jdGlvbk5vZGUtPmZ1bmN0aW9u
U3RhY2soKTsKKyAgICBjb25zdCBEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2smIHZhclN0YWNr
ID0gZnVuY3Rpb25Ob2RlLT52YXJTdGFjaygpOwogICAgIElkZW50aWZpZXJTZXQgdGVzdDsKIAog
ICAgIC8vIENhcHR1cmVkIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIGdvIGZpcnN0IHNvIHRoYXQg
YWN0aXZhdGlvbnMgZG9uJ3QgaGF2ZQogICAgIC8vIHRvIHN0ZXAgb3ZlciB0aGUgbm9uLWNhcHR1
cmVkIGxvY2FscyB0byBtYXJrIHRoZW0uCi0gICAgaWYgKGZ1bmN0aW9uQm9keS0+aGFzQ2FwdHVy
ZWRWYXJpYWJsZXMoKSB8fCBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzKSB7CisgICAgaWYgKGZ1
bmN0aW9uTm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSB8fCBzaG91bGRDYXB0dXJlQWxsVGhl
VGhpbmdzKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYm91bmRQYXJhbWV0ZXJQ
cm9wZXJ0aWVzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCA9IGJvdW5kUGFyYW1ldGVyUHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgIGlmIChmdW5j
dGlvbkJvZHktPmNhcHR1cmVzKGlkZW50KSB8fCBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzKQor
ICAgICAgICAgICAgaWYgKGZ1bmN0aW9uTm9kZS0+Y2FwdHVyZXMoaWRlbnQpIHx8IHNob3VsZENh
cHR1cmVBbGxUaGVUaGluZ3MpCiAgICAgICAgICAgICAgICAgYWRkVmFyKGlkZW50LCBJc1Zhcmlh
YmxlLCBJc1dhdGNoYWJsZSk7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmdW5jdGlvblN0YWNrLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBGdW5jdGlvbkJv
ZHlOb2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3RhY2tbaV07CiAgICAgICAgICAgICBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCA9IGZ1bmN0aW9uLT5pZGVudCgpOwotICAgICAgICAgICAgaWYgKGZ1
bmN0aW9uQm9keS0+Y2FwdHVyZXMoaWRlbnQpIHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3Mp
IHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbk5vZGUtPmNhcHR1cmVzKGlkZW50KSB8fCBzaG91
bGRDYXB0dXJlQWxsVGhlVGhpbmdzKSB7CiAgICAgICAgICAgICAgICAgbV9mdW5jdGlvbnMuYWRk
KGlkZW50LmltcGwoKSk7CiAgICAgICAgICAgICAgICAgZW1pdE5ld0Z1bmN0aW9uKHNjcmF0Y2gs
IGZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICBpbml0aWFsaXplQ2FwdHVyZWRWYXJpYWJsZShh
ZGRWYXIoaWRlbnQsIElzVmFyaWFibGUsIElzV2F0Y2hhYmxlKSwgaWRlbnQsIHNjcmF0Y2gpOwpA
QCAtMzYwLDIwICszNjAsMjAgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9y
KFZNJgogICAgICAgICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFyU3RhY2su
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gdmFy
U3RhY2tbaV0uZmlyc3Q7Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb25Cb2R5LT5jYXB0dXJlcyhp
ZGVudCkgfHwgc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncykKKyAgICAgICAgICAgIGlmIChmdW5j
dGlvbk5vZGUtPmNhcHR1cmVzKGlkZW50KSB8fCBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzKQog
ICAgICAgICAgICAgICAgIGFkZFZhcihpZGVudCwgKHZhclN0YWNrW2ldLnNlY29uZCAmIERlY2xh
cmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KSA/IElzQ29uc3RhbnQgOiBJc1ZhcmlhYmxlLCBJc1dh
dGNoYWJsZSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBtX3N5bWJvbFRhYmxlLT5zZXRDYXB0
dXJlRW5kKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGNvZGVCbG9jay0+bV9udW1WYXJzKS5vZmZz
ZXQoKSk7CiAKLSAgICBib29sIGNhbkxhemlseUNyZWF0ZUZ1bmN0aW9ucyA9ICFmdW5jdGlvbkJv
ZHktPm5lZWRzQWN0aXZhdGlvbkZvck1vcmVUaGFuVmFyaWFibGVzKCkgJiYgIW1fc2hvdWxkRW1p
dERlYnVnSG9va3MgJiYgIW1fdm0tPnR5cGVQcm9maWxlcigpOworICAgIGJvb2wgY2FuTGF6aWx5
Q3JlYXRlRnVuY3Rpb25zID0gIWZ1bmN0aW9uTm9kZS0+bmVlZHNBY3RpdmF0aW9uRm9yTW9yZVRo
YW5WYXJpYWJsZXMoKSAmJiAhbV9zaG91bGRFbWl0RGVidWdIb29rcyAmJiAhbV92bS0+dHlwZVBy
b2ZpbGVyKCk7CiAgICAgbV9maXJzdExhenlGdW5jdGlvbiA9IGNvZGVCbG9jay0+bV9udW1WYXJz
OwogICAgIGlmICghc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncykgewogICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
IEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uID0gZnVuY3Rpb25TdGFja1tpXTsKICAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZnVuY3Rpb24tPmlkZW50KCk7Ci0gICAgICAg
ICAgICBpZiAoIWZ1bmN0aW9uQm9keS0+Y2FwdHVyZXMoaWRlbnQpKSB7CisgICAgICAgICAgICBp
ZiAoIWZ1bmN0aW9uTm9kZS0+Y2FwdHVyZXMoaWRlbnQpKSB7CiAgICAgICAgICAgICAgICAgbV9m
dW5jdGlvbnMuYWRkKGlkZW50LmltcGwoKSk7CiAgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHJlZyA9IGFkZFZhcihpZGVudCwgSXNWYXJpYWJsZSwgTm90V2F0Y2hhYmxlKTsKICAg
ICAgICAgICAgICAgICAvLyBEb24ndCBsYXppbHkgY3JlYXRlIGZ1bmN0aW9ucyB0aGF0IG92ZXJy
aWRlIHRoZSBuYW1lICdhcmd1bWVudHMnCkBAIC0zODksMTIgKzM4OSwxMiBAQCBCeXRlY29kZUdl
bmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgIG1fbGFzdExhenlGdW5jdGlv
biA9IGNhbkxhemlseUNyZWF0ZUZ1bmN0aW9ucyA/IGNvZGVCbG9jay0+bV9udW1WYXJzIDogbV9m
aXJzdExhenlGdW5jdGlvbjsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBib3VuZFBh
cmFtZXRlclByb3BlcnRpZXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50ID0gYm91bmRQYXJhbWV0ZXJQcm9wZXJ0aWVzW2ldOwotICAgICAgICAgICAg
aWYgKCFmdW5jdGlvbkJvZHktPmNhcHR1cmVzKGlkZW50KSkKKyAgICAgICAgICAgIGlmICghZnVu
Y3Rpb25Ob2RlLT5jYXB0dXJlcyhpZGVudCkpCiAgICAgICAgICAgICAgICAgYWRkVmFyKGlkZW50
LCBJc1ZhcmlhYmxlLCBJc1dhdGNoYWJsZSk7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQgPSB2YXJTdGFja1tpXS5maXJzdDsKLSAgICAgICAgICAgIGlmICgh
ZnVuY3Rpb25Cb2R5LT5jYXB0dXJlcyhpZGVudCkpCisgICAgICAgICAgICBpZiAoIWZ1bmN0aW9u
Tm9kZS0+Y2FwdHVyZXMoaWRlbnQpKQogICAgICAgICAgICAgICAgIGFkZFZhcihpZGVudCwgKHZh
clN0YWNrW2ldLnNlY29uZCAmIERlY2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KSA/IElzQ29u
c3RhbnQgOiBJc1ZhcmlhYmxlLCBOb3RXYXRjaGFibGUpOwogICAgICAgICB9CiAgICAgfQpAQCAt
NDIxLDcgKzQyMSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYK
ICAgICAgICAgfQogICAgICAgICBhdXRvIHNpbXBsZVBhcmFtZXRlciA9IHN0YXRpY19jYXN0PGNv
bnN0IEJpbmRpbmdOb2RlKj4ocGF0dGVybik7CiAgICAgICAgIGlmIChjYXB0dXJlZEFyZ3VtZW50
cy5zaXplKCkgJiYgY2FwdHVyZWRBcmd1bWVudHNbaV0pIHsKLSAgICAgICAgICAgIEFTU0VSVCgo
ZnVuY3Rpb25Cb2R5LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpICYmIGZ1bmN0aW9uQm9keS0+Y2Fw
dHVyZXMoc2ltcGxlUGFyYW1ldGVyLT5ib3VuZFByb3BlcnR5KCkpKSB8fCBzaG91bGRDYXB0dXJl
QWxsVGhlVGhpbmdzKTsKKyAgICAgICAgICAgIEFTU0VSVCgoZnVuY3Rpb25Ob2RlLT5oYXNDYXB0
dXJlZFZhcmlhYmxlcygpICYmIGZ1bmN0aW9uTm9kZS0+Y2FwdHVyZXMoc2ltcGxlUGFyYW1ldGVy
LT5ib3VuZFByb3BlcnR5KCkpKSB8fCBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzKTsKICAgICAg
ICAgICAgIGluZGV4ID0gY2FwdHVyZWRBcmd1bWVudHNbaV0tPmluZGV4KCk7CiAgICAgICAgICAg
ICBSZWdpc3RlcklEIG9yaWdpbmFsKG5leHRQYXJhbWV0ZXJJbmRleCk7CiAgICAgICAgICAgICBp
bml0aWFsaXplQ2FwdHVyZWRWYXJpYWJsZShjYXB0dXJlZEFyZ3VtZW50c1tpXSwgc2ltcGxlUGFy
YW1ldGVyLT5ib3VuZFByb3BlcnR5KCksICZvcmlnaW5hbCk7CkBAIC00MzEsMTEgKzQzMSwxMSBA
QCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgcHJlc2VydmVM
YXN0VmFyKCk7CiAKICAgICAvLyBXZSBkZWNsYXJlIHRoZSBjYWxsZWUncyBuYW1lIGxhc3QgYmVj
YXVzZSBpdCBzaG91bGQgbG9zZSB0byBhIHZhciwgZnVuY3Rpb24sIGFuZC9vciBwYXJhbWV0ZXIg
ZGVjbGFyYXRpb24uCi0gICAgYWRkQ2FsbGVlKGZ1bmN0aW9uQm9keSwgY2FsbGVlUmVnaXN0ZXIp
OworICAgIGFkZENhbGxlZShmdW5jdGlvbk5vZGUsIGNhbGxlZVJlZ2lzdGVyKTsKIAogICAgIGlm
IChpc0NvbnN0cnVjdG9yKCkpIHsKICAgICAgICAgZW1pdENyZWF0ZVRoaXMoJm1fdGhpc1JlZ2lz
dGVyKTsKLSAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uQm9keS0+dXNlc1RoaXMoKSB8fCBjb2RlQmxv
Y2stPnVzZXNFdmFsKCkpIHsKKyAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uTm9kZS0+dXNlc1RoaXMo
KSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkpIHsKICAgICAgICAgbV9jb2RlQmxvY2stPmFkZFBy
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKICAgICAgICAg
ZW1pdE9wY29kZShvcF90b190aGlzKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtp
bGwoJm1fdGhpc1JlZ2lzdGVyKSk7CkBAIC01MjMsMjcgKzUyMywyNyBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVDYWxsZWUoRnVuY3Rpb25Cb2R5Tm9kZSog
ZnVuY3Rpb25Cb2R5Tm9kZSkKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZl
Q2FsbGVlKEZ1bmN0aW9uTm9kZSogZnVuY3Rpb25Ob2RlKQogewotICAgIGlmICghZnVuY3Rpb25O
YW1lSXNJblNjb3BlKGZ1bmN0aW9uQm9keU5vZGUtPmlkZW50KCksIGZ1bmN0aW9uQm9keU5vZGUt
PmZ1bmN0aW9uTW9kZSgpKSkKKyAgICBpZiAoIWZ1bmN0aW9uTmFtZUlzSW5TY29wZShmdW5jdGlv
bk5vZGUtPmlkZW50KCksIGZ1bmN0aW9uTm9kZS0+ZnVuY3Rpb25Nb2RlKCkpKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIGlmIChmdW5jdGlvbk5hbWVTY29wZUlzRHluYW1pYyhtX2NvZGVCbG9j
ay0+dXNlc0V2YWwoKSwgbV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSkKICAgICAgICAgcmV0
dXJuIDA7CiAKICAgICBtX2NhbGxlZVJlZ2lzdGVyLnNldEluZGV4KEpTU3RhY2s6OkNhbGxlZSk7
Ci0gICAgaWYgKGZ1bmN0aW9uQm9keU5vZGUtPmNhcHR1cmVzKGZ1bmN0aW9uQm9keU5vZGUtPmlk
ZW50KCkpKQotICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZUNhcHR1cmVkVmFyaWFibGUoYWRkVmFy
KCksIGZ1bmN0aW9uQm9keU5vZGUtPmlkZW50KCksICZtX2NhbGxlZVJlZ2lzdGVyKTsKKyAgICBp
ZiAoZnVuY3Rpb25Ob2RlLT5jYXB0dXJlcyhmdW5jdGlvbk5vZGUtPmlkZW50KCkpKQorICAgICAg
ICByZXR1cm4gaW5pdGlhbGl6ZUNhcHR1cmVkVmFyaWFibGUoYWRkVmFyKCksIGZ1bmN0aW9uTm9k
ZS0+aWRlbnQoKSwgJm1fY2FsbGVlUmVnaXN0ZXIpOwogCiAgICAgcmV0dXJuICZtX2NhbGxlZVJl
Z2lzdGVyOwogfQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDYWxsZWUoRnVuY3Rpb25C
b2R5Tm9kZSogZnVuY3Rpb25Cb2R5Tm9kZSwgUmVnaXN0ZXJJRCogY2FsbGVlUmVnaXN0ZXIpCit2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDYWxsZWUoRnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5v
ZGUsIFJlZ2lzdGVySUQqIGNhbGxlZVJlZ2lzdGVyKQogewogICAgIGlmICghY2FsbGVlUmVnaXN0
ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN5bWJvbFRhYmxlKCkuYWRkKGZ1bmN0aW9uQm9k
eU5vZGUtPmlkZW50KCkuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KGNhbGxlZVJlZ2lzdGVyLT5p
bmRleCgpLCBSZWFkT25seSkpOworICAgIHN5bWJvbFRhYmxlKCkuYWRkKGZ1bmN0aW9uTm9kZS0+
aWRlbnQoKS5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoY2FsbGVlUmVnaXN0ZXItPmluZGV4KCks
IFJlYWRPbmx5KSk7CiB9CiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFBhcmFtZXRlcihj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgaW50IHBhcmFtZXRlckluZGV4KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAkocmV2aXNpb24gMTc2ODEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYwLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgRGVjbGFyYXRpb25TdGFja3M6OkZ1
bmN0aW9uU3RhY2sgRnVuY3Rpb25TdGFjazsKIAogICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihW
TSYsIFByb2dyYW1Ob2RlKiwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiwgRGVidWdnZXJNb2Rl
LCBQcm9maWxlck1vZGUpOwotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihWTSYsIEZ1bmN0aW9u
Qm9keU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiwgRGVidWdnZXJNb2RlLCBQcm9m
aWxlck1vZGUpOworICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihWTSYsIEZ1bmN0aW9uTm9kZSos
IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSk7
CiAgICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKFZNJiwgRXZhbE5vZGUqLCBVbmxpbmtlZEV2YWxD
b2RlQmxvY2sqLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSk7CiAKICAgICAgICAgfkJ5dGVj
b2RlR2VuZXJhdG9yKCk7CkBAIC02MzEsOCArNjMxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGFkZGVkIHZhci4KICAgICAgICAgdm9p
ZCBhZGRQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYsIGludCBwYXJhbWV0ZXJJbmRleCk7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIHJlc29sdmVDYWxsZWUoRnVuY3Rpb25Cb2R5Tm9kZSopOwotICAg
ICAgICB2b2lkIGFkZENhbGxlZShGdW5jdGlvbkJvZHlOb2RlKiwgUmVnaXN0ZXJJRCopOworICAg
ICAgICBSZWdpc3RlcklEKiByZXNvbHZlQ2FsbGVlKEZ1bmN0aW9uTm9kZSopOworICAgICAgICB2
b2lkIGFkZENhbGxlZShGdW5jdGlvbk5vZGUqLCBSZWdpc3RlcklEKik7CiAKICAgICAgICAgdm9p
ZCBwcmVzZXJ2ZUxhc3RWYXIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTc2ODEyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjM1LDcgKzI2MzUsMTEgQEAgdm9pZCBFdmFsTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVu
Y3Rpb25Cb2R5Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIEZ1bmN0
aW9uQm9keU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKikKK3ZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCopCit7Cit9CisKK3ZvaWQgRnVuY3Rpb25Ob2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7CiAg
ICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewogICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fcGFyYW1ldGVycy0+c2l6ZSgpOyBpKyspIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCShyZXZpc2lvbiAxNzY4MTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjg3LDcgKzI4Nyw3IEBAIHB1YmxpYzoKIAogICAgIEZ1bmN0aW9uQm9keU5vZGUqIGNy
ZWF0ZUZ1bmN0aW9uQm9keShjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1
bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaW5TdHJpY3RDb250ZXh0KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShtX3BhcnNlckFyZW5hLCBzdGFydExvY2F0
aW9uLCBlbmRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgaW5TdHJpY3RDb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY3Rpb25Cb2R5Tm9kZSht
X3BhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGVu
ZENvbHVtbiwgaW5TdHJpY3RDb250ZXh0KTsKICAgICB9CiAKICAgICB2b2lkIHNldEZ1bmN0aW9u
TmFtZVN0YXJ0KEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGludCBmdW5jdGlvbk5hbWVTdGFydCkK
QEAgLTMzOCw4ICszMzgsNiBAQCBwdWJsaWM6CiAgICAgQ2xhdXNlTGlzdE5vZGUqIGNyZWF0ZUNs
YXVzZUxpc3QoQ2FzZUNsYXVzZU5vZGUqIGNsYXVzZSkgeyByZXR1cm4gbmV3IChtX3BhcnNlckFy
ZW5hKSBDbGF1c2VMaXN0Tm9kZShjbGF1c2UpOyB9CiAgICAgQ2xhdXNlTGlzdE5vZGUqIGNyZWF0
ZUNsYXVzZUxpc3QoQ2xhdXNlTGlzdE5vZGUqIHRhaWwsIENhc2VDbGF1c2VOb2RlKiBjbGF1c2Up
IHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQ2xhdXNlTGlzdE5vZGUodGFpbCwgY2xhdXNl
KTsgfQogCi0gICAgdm9pZCBzZXRVc2VzQXJndW1lbnRzKEZ1bmN0aW9uQm9keU5vZGUqIG5vZGUp
IHsgbm9kZS0+c2V0VXNlc0FyZ3VtZW50cygpOyB9Ci0KICAgICBTdGF0ZW1lbnROb2RlKiBjcmVh
dGVGdW5jRGVjbFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25z
dCBJZGVudGlmaWVyKiBuYW1lLCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBQYXJhbWV0ZXJOb2Rl
KiBwYXJhbWV0ZXJzLCB1bnNpZ25lZCBvcGVuQnJhY2VPZmZzZXQsIHVuc2lnbmVkIGNsb3NlQnJh
Y2VPZmZzZXQsIGludCBib2R5U3RhcnRMaW5lLCBpbnQgYm9keUVuZExpbmUsIHVuc2lnbmVkIGJv
ZHlTdGFydENvbHVtbikKICAgICB7CiAgICAgICAgIEZ1bmNEZWNsTm9kZSogZGVjbCA9IG5ldyAo
bV9wYXJzZXJBcmVuYSkgRnVuY0RlY2xOb2RlKGxvY2F0aW9uLCAqbmFtZSwgYm9keSwgbV9zb3Vy
Y2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwg
Ym9keVN0YXJ0TGluZSwgYm9keVN0YXJ0Q29sdW1uKSwgcGFyYW1ldGVycyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkocmV2aXNpb24gMTc2ODEyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
Nyw0MiArMTg3LDQxIEBAIEZ1bmN0aW9uUGFyYW1ldGVyczo6fkZ1bmN0aW9uUGFyYW1ldGVycygK
ICAgICAgICAgcGF0dGVybnMoKVtpXS0+ZGVyZWYoKTsKIH0KIAotaW5saW5lIEZ1bmN0aW9uQm9k
eU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5k
TG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wg
aW5TdHJpY3RDb250ZXh0KQotICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0
aW9uLCBlbmRMb2NhdGlvbiwgaW5TdHJpY3RDb250ZXh0KQotICAgICwgbV9zdGFydENvbHVtbihz
dGFydENvbHVtbikKLSAgICAsIG1fZW5kQ29sdW1uKGVuZENvbHVtbikKLXsKLX0KLQotaW5saW5l
IEZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFy
ZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRD
b2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5j
dGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBu
dW1Db25zdGFudHMpCi0gICAgOiBTY29wZU5vZGUocGFyc2VyQXJlbmEsIHN0YXJ0TG9jYXRpb24s
IGVuZExvY2F0aW9uLCBzb3VyY2VDb2RlLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywg
Y2FwdHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpCitGdW5jdGlvbkJvZHlO
b2RlOjpGdW5jdGlvbkJvZHlOb2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNp
Z25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzSW5TdHJpY3RDb250
ZXh0KQorICAgIDogU3RhdGVtZW50Tm9kZShlbmRMb2NhdGlvbikKICAgICAsIG1fc3RhcnRDb2x1
bW4oc3RhcnRDb2x1bW4pCiAgICAgLCBtX2VuZENvbHVtbihlbmRDb2x1bW4pCisgICAgLCBtX3N0
YXJ0U3RhcnRPZmZzZXQoc3RhcnRMb2NhdGlvbi5zdGFydE9mZnNldCkKKyAgICAsIG1faXNJblN0
cmljdENvbnRleHQoaXNJblN0cmljdENvbnRleHQpCiB7CiB9CiAKIHZvaWQgRnVuY3Rpb25Cb2R5
Tm9kZTo6ZmluaXNoUGFyc2luZyhjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcmFtZXRlck5v
ZGUqIGZpcnN0UGFyYW1ldGVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgZW51bSBGdW5jdGlv
bk1vZGUgZnVuY3Rpb25Nb2RlKQogewotICAgIHNldFNvdXJjZShzb3VyY2UpOwotICAgIGZpbmlz
aFBhcnNpbmcoRnVuY3Rpb25QYXJhbWV0ZXJzOjpjcmVhdGUoZmlyc3RQYXJhbWV0ZXIpLCBpZGVu
dCwgZnVuY3Rpb25Nb2RlKTsKKyAgICBtX3NvdXJjZSA9IHNvdXJjZTsKKyAgICBtX3BhcmFtZXRl
cnMgPSBGdW5jdGlvblBhcmFtZXRlcnM6OmNyZWF0ZShmaXJzdFBhcmFtZXRlcik7CisgICAgbV9p
ZGVudCA9IGlkZW50OworICAgIG1fZnVuY3Rpb25Nb2RlID0gZnVuY3Rpb25Nb2RlOwogfQogCi12
b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmZpbmlzaFBhcnNpbmcoUGFzc1JlZlB0cjxGdW5jdGlvblBh
cmFtZXRlcnM+IHBhcmFtZXRlcnMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBlbnVtIEZ1bmN0
aW9uTW9kZSBmdW5jdGlvbk1vZGUpCit2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OnNldEVuZFBvc2l0
aW9uKEpTVGV4dFBvc2l0aW9uIHBvc2l0aW9uKQogewotICAgIEFTU0VSVCghc291cmNlKCkuaXNO
dWxsKCkpOwotICAgIG1fcGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7Ci0gICAgbV9pZGVudCA9IGlk
ZW50OwotICAgIG1fZnVuY3Rpb25Nb2RlID0gZnVuY3Rpb25Nb2RlOworICAgIG1fbGFzdExpbmUg
PSBwb3NpdGlvbi5saW5lOworICAgIG1fZW5kQ29sdW1uID0gcG9zaXRpb24ub2Zmc2V0IC0gcG9z
aXRpb24ubGluZVN0YXJ0T2Zmc2V0OwogfQogCi1GdW5jdGlvbkJvZHlOb2RlKiBGdW5jdGlvbkJv
ZHlOb2RlOjpjcmVhdGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24s
IHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaW5TdHJpY3RD
b250ZXh0KQorLy8gPT09PT09PT09PT09PT09PT09PT09CisKK2lubGluZSBGdW5jdGlvbk5vZGU6
OkZ1bmN0aW9uTm9kZShQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwg
dW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMq
IGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywg
SWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKKyAgICA6IFNj
b3BlTm9kZShwYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZUNv
ZGUsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVh
dHVyZXMsIG51bUNvbnN0YW50cykKKyAgICAsIG1fc3RhcnRDb2x1bW4oc3RhcnRDb2x1bW4pCisg
ICAgLCBtX2VuZENvbHVtbihlbmRDb2x1bW4pCiB7Ci0gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkJv
ZHlOb2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc3RhcnRDb2x1
bW4sIGVuZENvbHVtbiwgaW5TdHJpY3RDb250ZXh0KTsKIH0KIAotUGFzc1JlZlB0cjxGdW5jdGlv
bkJvZHlOb2RlPiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoUGFyc2VyQXJlbmEmIHBhcnNlckFy
ZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRD
b2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5j
dGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBu
dW1Db25zdGFudHMpCitQYXNzUmVmUHRyPEZ1bmN0aW9uTm9kZT4gRnVuY3Rpb25Ob2RlOjpjcmVh
dGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0
TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0
YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwg
VmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJT
ZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2Rl
RmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCiB7Ci0gICAgUmVmUHRyPEZ1bmN0
aW9uQm9keU5vZGU+IG5vZGUgPSBuZXcgRnVuY3Rpb25Cb2R5Tm9kZShwYXJzZXJBcmVuYSwgc3Rh
cnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4gLCBjaGlsZHJl
biwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZUNvZGUsIGZl
YXR1cmVzLCBudW1Db25zdGFudHMpOworICAgIFJlZlB0cjxGdW5jdGlvbk5vZGU+IG5vZGUgPSBu
ZXcgRnVuY3Rpb25Ob2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwg
c3RhcnRDb2x1bW4sIGVuZENvbHVtbiAsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBj
YXB0dXJlZFZhcmlhYmxlcywgc291cmNlQ29kZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CiAK
ICAgICBBU1NFUlQobm9kZS0+bV9hcmVuYS5sYXN0KCkgPT0gbm9kZSk7CiAgICAgbm9kZS0+bV9h
cmVuYS5yZW1vdmVMYXN0KCk7CkBAIC0yMzEsMTAgKzIzMCwxMiBAQCBQYXNzUmVmUHRyPEZ1bmN0
aW9uQm9keU5vZGU+IEZ1bmN0aW9uQm9kCiAgICAgcmV0dXJuIG5vZGUucmVsZWFzZSgpOwogfQog
Ci12b2lkIEZ1bmN0aW9uQm9keU5vZGU6OnNldEVuZFBvc2l0aW9uKEpTVGV4dFBvc2l0aW9uIHBv
c2l0aW9uKQordm9pZCBGdW5jdGlvbk5vZGU6OmZpbmlzaFBhcnNpbmcoUGFzc1JlZlB0cjxGdW5j
dGlvblBhcmFtZXRlcnM+IHBhcmFtZXRlcnMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBlbnVt
IEZ1bmN0aW9uTW9kZSBmdW5jdGlvbk1vZGUpCiB7Ci0gICAgbV9sYXN0TGluZSA9IHBvc2l0aW9u
LmxpbmU7Ci0gICAgbV9lbmRDb2x1bW4gPSBwb3NpdGlvbi5vZmZzZXQgLSBwb3NpdGlvbi5saW5l
U3RhcnRPZmZzZXQ7CisgICAgQVNTRVJUKCFzb3VyY2UoKS5pc051bGwoKSk7CisgICAgbV9wYXJh
bWV0ZXJzID0gcGFyYW1ldGVyczsKKyAgICBtX2lkZW50ID0gaWRlbnQ7CisgICAgbV9mdW5jdGlv
bk1vZGUgPSBmdW5jdGlvbk1vZGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMTc2ODEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDY2LDcg
KzE0NjYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRDbG9zZWRWYXJpYWJs
ZXMoVmVjdG9yPFJlZlB0cjxTdHJpbmdJbXBsPj4mJikgeyB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0g
ICAgICAgIHZvaWQgc2V0U291cmNlKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkgeyBtX3NvdXJj
ZSA9IHNvdXJjZTsgfQogICAgICAgICBQYXJzZXJBcmVuYSBtX2FyZW5hOwogCiAgICAgICAgIGlu
dCBtX3N0YXJ0TGluZU51bWJlcjsKQEAgLTE0ODUsNyArMTQ4NCw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgUHJvZ3JhbU5vZGUgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzRnVuY3Rpb25Ob2RlID0gZmFsc2U7CiAg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBjcmVhdGUoUGFyc2VyQXJlbmEm
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVu
ZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVu
dHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291
cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgdW5z
aWduZWQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0Q29sdW1uOyB9CkBAIC0x
NTA2LDcgKzE1MDQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEV2YWxOb2RlIDog
cHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc0Z1bmN0aW9uTm9kZSA9IGZhbHNlOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmFs
Tm9kZT4gY3JlYXRlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkLCB1bnNpZ25lZCBlbmRDb2x1bW4s
IFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNl
dCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOwog
CiAgICAgICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJl
dHVybiAwOyB9CkBAIC0xNTQxLDE5ICsxNTM4LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlKiBtX3N0b3JhZ2U7CiAgICAgfTsKIAotICAgIGNs
YXNzIEZ1bmN0aW9uQm9keU5vZGUgOiBwdWJsaWMgU2NvcGVOb2RlIHsKKyAgICBjbGFzcyBGdW5j
dGlvbkJvZHlOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUsIHB1YmxpYyBQYXJzZXJBcmVuYURl
bGV0YWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0Z1bmN0
aW9uTm9kZSA9IHRydWU7Ci0gICAgICAgIHN0YXRpYyBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGUo
UGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwg
Ym9vbCBpc1N0cmljdE1vZGUpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGdW5jdGlvbkJv
ZHlOb2RlPiBjcmVhdGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2ln
bmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sq
LCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51
bUNvbnN0YW50cyk7CisgICAgICAgIHVzaW5nIFBhcnNlckFyZW5hRGVsZXRhYmxlOjpvcGVyYXRv
ciBuZXc7CisKKyAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25l
ZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzSW5TdHJpY3RDb250ZXh0
KTsKIAogICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJl
dHVybiBtX3BhcmFtZXRlcnMuZ2V0KCk7IH0KLSAgICAgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5zaXplKCk7IH0KIAogICAgICAgICB2aXJ0
dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KSBvdmVycmlkZTsKIAogICAgICAgICB2b2lkIGZpbmlzaFBhcnNpbmcoY29uc3QgU291cmNlQ29k
ZSYsIFBhcmFtZXRlck5vZGUqLCBjb25zdCBJZGVudGlmaWVyJiwgRnVuY3Rpb25Nb2RlKTsKLSAg
ICAgICAgdm9pZCBmaW5pc2hQYXJzaW5nKFBhc3NSZWZQdHI8RnVuY3Rpb25QYXJhbWV0ZXJzPiwg
Y29uc3QgSWRlbnRpZmllciYsIEZ1bmN0aW9uTW9kZSk7CiAgICAgICAgIAogICAgICAgICB2b2lk
IG92ZXJyaWRlTmFtZShjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgeyBtX2lkZW50ID0gaWRlbnQ7
IH0KICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQoKSB7IHJldHVybiBtX2lkZW50OyB9
CkBAIC0xNTY5LDEyICsxNTY0LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQg
c2V0RW5kUG9zaXRpb24oSlNUZXh0UG9zaXRpb24pOwogCi0gICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHNjb3BlSXNGdW5jdGlvbiA9IHRydWU7CisgICAgICAgIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAKLSAgICBwcml2YXRlOgotICAgICAg
ICBGdW5jdGlvbkJvZHlOb2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBz
dGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1
bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaW5TdHJpY3RDb250ZXh0KTsKLSAgICAgICAgRnVuY3Rp
b25Cb2R5Tm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQg
ZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElk
ZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29u
c3RhbnRzKTsKKyAgICAgICAgaW50IHN0YXJ0U3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0U3RhcnRPZmZzZXQ7IH0KKyAgICAgICAgYm9vbCBpc0luU3RyaWN0Q29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNJblN0cmljdENvbnRleHQ7IH0KIAorICAgIHByb3RlY3RlZDoKICAg
ICAgICAgSWRlbnRpZmllciBtX2lkZW50OwogICAgICAgICBJZGVudGlmaWVyIG1faW5mZXJyZWRO
YW1lOwogICAgICAgICBGdW5jdGlvbk1vZGUgbV9mdW5jdGlvbk1vZGU7CkBAIC0xNTgyLDYgKzE1
NzcsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBtX2Z1bmN0aW9uTmFtZVN0YXJ0
OwogICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0Q29sdW1uOwogICAgICAgICB1bnNpZ25lZCBtX2Vu
ZENvbHVtbjsKKyAgICAgICAgU291cmNlQ29kZSBtX3NvdXJjZTsKKyAgICAgICAgaW50IG1fc3Rh
cnRTdGFydE9mZnNldDsKKyAgICAgICAgYm9vbCBtX2lzSW5TdHJpY3RDb250ZXh0OworICAgIH07
CisKKyAgICBjbGFzcyBGdW5jdGlvbk5vZGUgOiBwdWJsaWMgU2NvcGVOb2RlIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZ1bmN0aW9uTm9kZT4gY3JlYXRlKFBhcnNl
ckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJj
ZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNv
bnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworCisgICAg
ICAgIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcGFy
YW1ldGVycy5nZXQoKTsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOworCisgICAgICAgIHZv
aWQgZmluaXNoUGFyc2luZyhQYXNzUmVmUHRyPEZ1bmN0aW9uUGFyYW1ldGVycz4sIGNvbnN0IElk
ZW50aWZpZXImLCBGdW5jdGlvbk1vZGUpOworICAgICAgICAKKyAgICAgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQoKSB7IHJldHVybiBtX2lkZW50OyB9CisKKyAgICAgICAgRnVuY3Rpb25Nb2Rl
IGZ1bmN0aW9uTW9kZSgpIHsgcmV0dXJuIG1fZnVuY3Rpb25Nb2RlOyB9CisKKyAgICAgICAgdW5z
aWduZWQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0Q29sdW1uOyB9CisgICAg
ICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CisK
KyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2NvcGVJc0Z1bmN0aW9uID0gdHJ1ZTsKKworICAg
IHByaXZhdGU6CisgICAgICAgIEZ1bmN0aW9uTm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBz
dGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNr
KiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29k
ZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKworICAgICAgICBJZGVudGlmaWVyIG1faWRl
bnQ7CisgICAgICAgIEZ1bmN0aW9uTW9kZSBtX2Z1bmN0aW9uTW9kZTsKKyAgICAgICAgUmVmUHRy
PEZ1bmN0aW9uUGFyYW1ldGVycz4gbV9wYXJhbWV0ZXJzOworICAgICAgICB1bnNpZ25lZCBtX3N0
YXJ0Q29sdW1uOworICAgICAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKICAgICB9OwogCiAgICAg
Y2xhc3MgRnVuY0V4cHJOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCShyZXZpc2lvbiAxNzY4
MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTkzLDcgKzE5Myw2IEBAIHB1YmxpYzoKICAgICBpbnQgY3JlYXRlQ2xh
dXNlKGludCwgaW50KSB7IHJldHVybiBDbGF1c2VSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlQ2xh
dXNlTGlzdChpbnQpIHsgcmV0dXJuIENsYXVzZUxpc3RSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRl
Q2xhdXNlTGlzdChpbnQsIGludCkgeyByZXR1cm4gQ2xhdXNlTGlzdFJlc3VsdDsgfQotICAgIHZv
aWQgc2V0VXNlc0FyZ3VtZW50cyhpbnQpIHsgfQogICAgIGludCBjcmVhdGVGdW5jRGVjbFN0YXRl
bWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQs
IGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KICAg
ICBpbnQgY3JlYXRlQmxvY2tTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBp
bnQsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CiAgICAgaW50IGNyZWF0ZUV4cHJT
dGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCkgeyByZXR1cm4g
U3RhdGVtZW50UmVzdWx0OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTc2ODEyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2MSw3ICs0NjEs
NyBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNoZWNrU3ludGF4CiAgICAgUGFyc2Vy
RXJyb3IgZXJyb3I7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0g
ICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtTm9kZSA9IHBhcnNlPFByb2dyYW1Ob2RlPih2
bSwgbV9zb3VyY2UsIDAsIElkZW50aWZpZXIoKSwgSlNQYXJzZU5vcm1hbCwgUHJvZ3JhbU5vZGU6
OmlzRnVuY3Rpb25Ob2RlID8gSlNQYXJzZUZ1bmN0aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFtQ29k
ZSwgZXJyb3IpOworICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBwYXJzZTxQ
cm9ncmFtTm9kZT4odm0sIG1fc291cmNlLCAwLCBJZGVudGlmaWVyKCksIEpTUGFyc2VOb3JtYWws
IEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJyb3IpOwogICAgIGlmIChwcm9ncmFtTm9kZSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgQVNTRVJUKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJy
b3JOb25lKTsK
</data>
<flag name="review"
          id="267461"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>