<?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>122202</bug_id>
          
          <creation_ts>2013-10-01 19:08:04 -0700</creation_ts>
          <short_desc>REGRESSION(156464): 50% regression on SunSpider/string-fasta</short_desc>
          <delta_ts>2013-10-01 19:18:29 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>121930</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>935317</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-01 19:08:04 -0700</bug_when>
    <thetext>Rollout forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935319</commentid>
    <comment_count>1</comment_count>
      <attachid>213143</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-01 19:12:38 -0700</bug_when>
    <thetext>Created attachment 213143
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935320</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-01 19:18:29 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/156757</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213143</attachid>
            <date>2013-10-01 19:12:38 -0700</date>
            <delta_ts>2013-10-01 19:12:38 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>85415</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2NzU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBA
CisyMDEzLTEwLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UkVHUkVTU0lPTigxNTY0NjQpOiA1MCUgcmVncmVzc2lvbiBvbiBTdW5TcGlkZXIvc3RyaW5nLWZh
c3RhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIy
MDIKKworICAgICAgICBVbnJldmlld2VkLCByb2xsIG91dCByMTU2NDY0LgorCisgICAgICAgICog
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1TdHJpbmcpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmg6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXhwcmVzc2lvbklu
Zm8pOgorICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAo
SlNDOjpGb3JJbk5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmNFeHByTm9k
ZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAg
ICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVGb3JtYWxQYXJhbWV0ZXJMaXN0KToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRm9ySW5Mb29wKToKKyAgICAgICAgKEpTQzo6QVNUQnVp
bGRlcjo6YWRkVmFyKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgorICAg
ICAgICAoSlNDOjpDb21tYU5vZGU6OkNvbW1hTm9kZSk6CisgICAgICAgIChKU0M6OlBhcmFtZXRl
ck5vZGU6OlBhcmFtZXRlck5vZGUpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OkZvckluTm9k
ZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Q
YXJhbWV0ZXJzOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblBhcmFtZXRlcnM6OkZ1
bmN0aW9uUGFyYW1ldGVycyk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUGFyYW1ldGVyczo6fkZ1
bmN0aW9uUGFyYW1ldGVycyk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChK
U0M6OkV4cHJlc3Npb25Ob2RlOjppc0RvdEFjY2Vzc29yTm9kZSk6CisgICAgICAgIChKU0M6OkNv
bW1hTm9kZTo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6UGFyYW1ldGVyTm9kZTo6aWRlbnQpOgor
ICAgICAgICAoSlNDOjpGdW5jdGlvblBhcmFtZXRlcnM6OmF0KToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25QYXJhbWV0ZXJzOjppZGVudGlmaWVycyk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5j
cHA6CisgICAgICAgIChKU0M6Ojo6UGFyc2VyKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVZhckRl
Y2xhcmF0aW9uKToKKyAgICAgICAgKEpTQzo6OjpwYXJzZVZhckRlY2xhcmF0aW9uTGlzdCk6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VGb3JTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjo6OnBhcnNl
Rm9ybWFsUGFyYW1ldGVycyk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VBc3NpZ25tZW50RXhwcmVz
c2lvbik6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5oOgorICAgICAgICAoSlNDOjpTY29wZTo6
ZGVjbGFyZVBhcmFtZXRlcik6CisgICAgICAgIChKU0M6OlBhcnNlcjo6ZGVjbGFyZVBhcmFtZXRl
cik6CisgICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpTQzo6U3lu
dGF4Q2hlY2tlcjo6Y3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdCk6CisgICAgICAgIChKU0M6OlN5
bnRheENoZWNrZXI6OmNyZWF0ZUZvckluTG9vcCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNr
ZXI6Om9wZXJhdG9yU3RhY2tQb3ApOgorICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6
CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0Lmg6CisKIDIwMTMtMTAtMDEgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBWYXJpYWJsZSBldmVudCBzdHJlYW0g
KGZvciBERkcgT1NSIGV4aXQpIHNob3VsZCBiZSBleHBsaWNpdCBhYm91dCB3aGVyZSBvbiB0aGUg
c3RhY2sgYSBTZXRMb2NhbCBwdXQgYSB2YWx1ZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTY3
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNyArMTgzLDcgQEAgU3RyaW5nIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlOjpwYXJhbQogICAgIGZvciAoc2l6ZV90IHBvcyA9IDA7IHBvcyA8IHBh
cmFtZXRlcnMuc2l6ZSgpOyArK3BvcykgewogICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgp
KQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwotICAgICAgICBwYXJh
bWV0ZXJzLmF0KHBvcyktPnRvU3RyaW5nKGJ1aWxkZXIpOworICAgICAgICBidWlsZGVyLmFwcGVu
ZChwYXJhbWV0ZXJzLmF0KHBvcykuc3RyaW5nKCkpOwogICAgIH0KICAgICByZXR1cm4gYnVpbGRl
ci50b1N0cmluZygpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE1Njc1NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6
OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdmFyU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIGNvZGVCbG9jay0+YWRkVmFyaWFibGVE
ZWNsYXJhdGlvbih2YXJTdGFja1tpXS5maXJzdCwgISEodmFyU3RhY2tbaV0uc2Vjb25kICYgRGVj
bGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpKTsKKyAgICAgICAgY29kZUJsb2NrLT5hZGRWYXJp
YWJsZURlY2xhcmF0aW9uKCp2YXJTdGFja1tpXS5maXJzdCwgISEodmFyU3RhY2tbaV0uc2Vjb25k
ICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpKTsKIAogfQogCkBAIC0yMTUsMTUgKzIx
NSw2IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAg
bV9jb2RlQmxvY2stPnNldE5lZWRzRnVsbFNjb3BlQ2hhaW4odHJ1ZSk7CiAKICAgICBtX3N5bWJv
bFRhYmxlLT5zZXRVc2VzTm9uU3RyaWN0RXZhbChjb2RlQmxvY2stPnVzZXNFdmFsKCkgJiYgIWNv
ZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOwotICAgIFZlY3RvcjxJZGVudGlmaWVyPiBib3VuZFBh
cmFtZXRlclByb3BlcnRpZXM7Ci0gICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzID0g
KmZ1bmN0aW9uQm9keS0+cGFyYW1ldGVycygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cGFyYW1ldGVycy5zaXplKCk7IGkrKykgewotICAgICAgICBhdXRvIHBhdHRlcm4gPSBwYXJhbWV0
ZXJzLmF0KGkpOwotICAgICAgICBpZiAocGF0dGVybi0+aXNCaW5kaW5nTm9kZSgpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIHBhdHRlcm4tPmNvbGxlY3RCb3VuZElkZW50aWZpZXJz
KGJvdW5kUGFyYW1ldGVyUHJvcGVydGllcyk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgIH0KICAg
ICBtX3N5bWJvbFRhYmxlLT5zZXRQYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoZnVuY3Rpb25C
b2R5LT5wYXJhbWV0ZXJzKCktPnNpemUoKSArIDEpOwogCiAgICAgZW1pdE9wY29kZShvcF9lbnRl
cik7CkBAIC0yNjMsMTEgKzI1NCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcihWTSYKICAgICAgICAgY2FwdHVyZWRBcmd1bWVudHMucmVzaXplKHBhcmFtZXRlcnMuc2l6
ZSgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsg
KytpKSB7CiAgICAgICAgICAgICBjYXB0dXJlZEFyZ3VtZW50c1tpXSA9IDA7Ci0gICAgICAgICAg
ICBhdXRvIHBhdHRlcm4gPSBwYXJhbWV0ZXJzLmF0KGkpOwotICAgICAgICAgICAgaWYgKCFwYXR0
ZXJuLT5pc0JpbmRpbmdOb2RlKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpbmRpbmdO
b2RlKj4ocGF0dGVybiktPmJvdW5kUHJvcGVydHkoKTsKLSAgICAgICAgICAgIGlmICghZnVuY3Rp
b25Cb2R5LT5jYXB0dXJlcyhpZGVudCkgJiYgIXNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpCisg
ICAgICAgICAgICBpZiAoIWZ1bmN0aW9uQm9keS0+Y2FwdHVyZXMocGFyYW1ldGVycy5hdChpKSkg
JiYgIXNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBjYXB0dXJlc0FueUFyZ3VtZW50QnlOYW1lID0gdHJ1ZTsKICAgICAgICAg
ICAgIGNhcHR1cmVkQXJndW1lbnRzW2ldID0gYWRkVmFyKCk7CkBAIC0zMTIsNyArMjk5LDcgQEAg
Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFyU3RhY2suc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gdmFyU3RhY2tb
aV0uZmlyc3Q7CisgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9ICp2YXJTdGFj
a1tpXS5maXJzdDsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbkJvZHktPmNhcHR1cmVzKGlkZW50
KSkKICAgICAgICAgICAgICAgICBhZGRWYXIoaWRlbnQsIHZhclN0YWNrW2ldLnNlY29uZCAmIERl
Y2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KTsKICAgICAgICAgfQpAQCAtMzQ1LDcgKzMzMiw3
IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICB9CiAgICAg
bV9sYXN0TGF6eUZ1bmN0aW9uID0gY2FuTGF6aWx5Q3JlYXRlRnVuY3Rpb25zID8gY29kZUJsb2Nr
LT5tX251bVZhcnMgOiBtX2ZpcnN0TGF6eUZ1bmN0aW9uOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdmFyU3RhY2suc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQgPSB2YXJTdGFja1tpXS5maXJzdDsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSAqdmFyU3RhY2tbaV0uZmlyc3Q7CiAgICAgICAgIGlmICghZnVuY3Rpb25Cb2R5LT5jYXB0
dXJlcyhpZGVudCkpCiAgICAgICAgICAgICBhZGRWYXIoaWRlbnQsIHZhclN0YWNrW2ldLnNlY29u
ZCAmIERlY2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KTsKICAgICB9CkBAIC0zNTMsMzEgKzM0
MCwyMyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgaWYg
KHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpCiAgICAgICAgIG1fc3ltYm9sVGFibGUtPnNldENh
cHR1cmVFbmQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoY29kZUJsb2NrLT5tX251bVZhcnMpLm9m
ZnNldCgpKTsKIAorICAgIEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICpmdW5jdGlv
bkJvZHktPnBhcmFtZXRlcnMoKTsKICAgICBtX3BhcmFtZXRlcnMuZ3JvdyhwYXJhbWV0ZXJzLnNp
emUoKSArIDEpOyAvLyByZXNlcnZlIHNwYWNlIGZvciAidGhpcyIKIAogICAgIC8vIEFkZCAidGhp
cyIgYXMgYSBwYXJhbWV0ZXIKICAgICBpbnQgbmV4dFBhcmFtZXRlckluZGV4ID0gQ2FsbEZyYW1l
Ojp0aGlzQXJndW1lbnRPZmZzZXQoKTsKICAgICBtX3RoaXNSZWdpc3Rlci5zZXRJbmRleChuZXh0
UGFyYW1ldGVySW5kZXgrKyk7CiAgICAgbV9jb2RlQmxvY2stPmFkZFBhcmFtZXRlcigpOwotICAg
IFZlY3RvcjxzdGQ6OnBhaXI8UmVnaXN0ZXJJRCosIGNvbnN0IERlY29uc3RydWN0aW9uUGF0dGVy
bk5vZGUqPj4gZGVjb25zdHJ1Y3RlZFBhcmFtZXRlcnM7CisgICAgCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpLCArK25leHRQYXJhbWV0ZXJJbmRleCkg
ewogICAgICAgICBpbnQgaW5kZXggPSBuZXh0UGFyYW1ldGVySW5kZXg7Ci0gICAgICAgIGF1dG8g
cGF0dGVybiA9IHBhcmFtZXRlcnMuYXQoaSk7Ci0gICAgICAgIGlmICghcGF0dGVybi0+aXNCaW5k
aW5nTm9kZSgpKSB7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkUGFyYW1ldGVyKCk7Ci0g
ICAgICAgICAgICBSZWdpc3RlcklEJiBwYXJhbWV0ZXIgPSByZWdpc3RlckZvcihpbmRleCk7Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXIuc2V0SW5kZXgoaW5kZXgpOwotICAgICAgICAgICAgZGVjb25z
dHJ1Y3RlZFBhcmFtZXRlcnMuYXBwZW5kKG1ha2VfcGFpcigmcGFyYW1ldGVyLCBwYXR0ZXJuKSk7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBhdXRvIHNpbXBsZVBh
cmFtZXRlciA9IHN0YXRpY19jYXN0PGNvbnN0IEJpbmRpbmdOb2RlKj4ocGF0dGVybik7CiAgICAg
ICAgIGlmIChjYXB0dXJlZEFyZ3VtZW50cy5zaXplKCkgJiYgY2FwdHVyZWRBcmd1bWVudHNbaV0p
IHsKLSAgICAgICAgICAgIEFTU0VSVCgoZnVuY3Rpb25Cb2R5LT5oYXNDYXB0dXJlZFZhcmlhYmxl
cygpICYmIGZ1bmN0aW9uQm9keS0+Y2FwdHVyZXMoc2ltcGxlUGFyYW1ldGVyLT5ib3VuZFByb3Bl
cnR5KCkpKSB8fCBzaG91bGRDYXB0dXJlQWxsVGhlVGhpbmdzKTsKKyAgICAgICAgICAgIEFTU0VS
VCgoZnVuY3Rpb25Cb2R5LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpICYmIGZ1bmN0aW9uQm9keS0+
Y2FwdHVyZXMocGFyYW1ldGVycy5hdChpKSkpIHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3Mp
OwogICAgICAgICAgICAgaW5kZXggPSBjYXB0dXJlZEFyZ3VtZW50c1tpXS0+aW5kZXgoKTsKICAg
ICAgICAgICAgIFJlZ2lzdGVySUQgb3JpZ2luYWwobmV4dFBhcmFtZXRlckluZGV4KTsKICAgICAg
ICAgICAgIGVtaXRNb3ZlKGNhcHR1cmVkQXJndW1lbnRzW2ldLCAmb3JpZ2luYWwpOwogICAgICAg
ICB9Ci0gICAgICAgIGFkZFBhcmFtZXRlcihzaW1wbGVQYXJhbWV0ZXItPmJvdW5kUHJvcGVydHko
KSwgaW5kZXgpOworICAgICAgICBhZGRQYXJhbWV0ZXIocGFyYW1ldGVycy5hdChpKSwgaW5kZXgp
OwogICAgIH0KICAgICBwcmVzZXJ2ZUxhc3RWYXIoKTsKIApAQCAtMzkxLDEwICszNzAsNiBAQCBC
eXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChraWxsKCZtX3RoaXNSZWdpc3RlcikpOwogICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoMCk7CiAgICAgfQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVjb25z
dHJ1Y3RlZFBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgYXV0byYgZW50cnkgPSBk
ZWNvbnN0cnVjdGVkUGFyYW1ldGVyc1tpXTsKLSAgICAgICAgZW50cnkuc2Vjb25kLT5lbWl0Qnl0
ZWNvZGUoKnRoaXMsIGVudHJ5LmZpcnN0KTsKLSAgICB9CiB9CiAKIEJ5dGVjb2RlR2VuZXJhdG9y
OjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIEV2YWxOb2RlKiBldmFsTm9kZSwgVW5saW5rZWRF
dmFsQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2Zp
bGVyTW9kZSBwcm9maWxlck1vZGUpCkBAIC00MzksMTAgKzQxNCw4IEBAIEJ5dGVjb2RlR2VuZXJh
dG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXMgPSB2
YXJTdGFjay5zaXplKCk7CiAgICAgVmVjdG9yPElkZW50aWZpZXIsIDAsIFVuc2FmZVZlY3Rvck92
ZXJmbG93PiB2YXJpYWJsZXM7CiAgICAgdmFyaWFibGVzLnJlc2VydmVDYXBhY2l0eShudW1WYXJp
YWJsZXMpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtVmFyaWFibGVzOyArK2kpIHsK
LSAgICAgICAgQVNTRVJUKHZhclN0YWNrW2ldLmZpcnN0LmltcGwoKS0+aXNJZGVudGlmaWVyKCkp
OwotICAgICAgICB2YXJpYWJsZXMuYXBwZW5kKHZhclN0YWNrW2ldLmZpcnN0KTsKLSAgICB9Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1WYXJpYWJsZXM7ICsraSkKKyAgICAgICAgdmFy
aWFibGVzLmFwcGVuZCgqdmFyU3RhY2tbaV0uZmlyc3QpOwogICAgIGNvZGVCbG9jay0+YWRvcHRW
YXJpYWJsZXModmFyaWFibGVzKTsKICAgICBwcmVzZXJ2ZUxhc3RWYXIoKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgJKHJldmlzaW9uIDE1Njc1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjg2LDEwICsy
ODYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICBsaW5lU3RhcnQgLT0gc291
cmNlT2Zmc2V0OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9
IDA7Ci0KLSAgICAgICAgICAgIGlmIChkaXZvdE9mZnNldCA8IGxpbmVTdGFydCkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0KKyAgICAgICAgICAgIEFTU0VSVChkaXZvdE9mZnNldCA+PSBsaW5l
U3RhcnQpOwogICAgICAgICAgICAgdW5zaWduZWQgY29sdW1uID0gZGl2b3RPZmZzZXQgLSBsaW5l
U3RhcnQ7CiAKICAgICAgICAgICAgIHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0ID0gaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTU2NzU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUg
IkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNOYW1lU2NvcGUuaCIKLSNpbmNsdWRlICJK
U09OT2JqZWN0LmgiCiAjaW5jbHVkZSAiTGFiZWxTY29wZS5oIgogI2luY2x1ZGUgIkxleGVyLmgi
CiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpAQCAtMTcxNCw3ICsxNzEzLDggQEAgdm9pZCBGb3JJ
bk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbgogCiAgICAgICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8oYXNzaWduTm9kZS0+ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RTdGFy
dCgpLCBhc3NpZ25Ob2RlLT5kaXZvdEVuZCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRC
eUlkKGJhc2UsIGlkZW50LCBwcm9wZXJ0eU5hbWUpOwotICAgIH0gZWxzZSBpZiAobV9sZXhwci0+
aXNCcmFja2V0QWNjZXNzb3JOb2RlKCkpIHsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQo
bV9sZXhwci0+aXNCcmFja2V0QWNjZXNzb3JOb2RlKCkpOwogICAgICAgICBCcmFja2V0QWNjZXNz
b3JOb2RlKiBhc3NpZ25Ob2RlID0gc3RhdGljX2Nhc3Q8QnJhY2tldEFjY2Vzc29yTm9kZSo+KG1f
bGV4cHIpOwogICAgICAgICBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7
CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90ZWN0ID0gcHJvcGVydHlOYW1lOwpAQCAt
MTcyMywxMyArMTcyMyw3IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW4KICAgICAgICAgCiAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oYXNzaWdu
Tm9kZS0+ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RTdGFydCgpLCBhc3NpZ25Ob2RlLT5kaXZv
dEVuZCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBzdWJz
Y3JpcHQsIHByb3BlcnR5TmFtZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fbGV4
cHItPmlzRGVjb25zdHJ1Y3Rpb25Ob2RlKCkpOwotICAgICAgICBEZWNvbnN0cnVjdGluZ0Fzc2ln
bm1lbnROb2RlKiBhc3NpZ25Ob2RlID0gc3RhdGljX2Nhc3Q8RGVjb25zdHJ1Y3RpbmdBc3NpZ25t
ZW50Tm9kZSo+KG1fbGV4cHIpOwotICAgICAgICBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90ZWN0KHByb3BlcnR5
TmFtZSk7Ci0gICAgICAgIGFzc2lnbk5vZGUtPmJpbmRpbmdzKCktPmVtaXRCeXRlY29kZShnZW5l
cmF0b3IsIHByb3BlcnR5TmFtZSk7Ci0gICAgfQorICAgIH0gICAKIAogICAgIGdlbmVyYXRvci5l
bWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsKIApAQCAtMjE4NSwxNTcgKzIxNzksNSBAQCBSZWdp
c3RlcklEKiBGdW5jRXhwck5vZGU6OmVtaXRCeXRlY29kZShCCiB7CiAgICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCksIHRoaXMpOwogfQotICAgIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0KLVJlZ2lzdGVy
SUQqIERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgaWYgKFJlZ2lzdGVy
SUQqIHJlc3VsdCA9IG1fYmluZGluZ3MtPmVtaXREaXJlY3RCaW5kaW5nKGdlbmVyYXRvciwgZHN0
LCBtX2luaXRpYWxpemVyKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gaW5pdGlhbGl6ZXIgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7Ci0g
ICAgZ2VuZXJhdG9yLmVtaXROb2RlKGluaXRpYWxpemVyLmdldCgpLCBtX2luaXRpYWxpemVyKTsK
LSAgICBtX2JpbmRpbmdzLT5lbWl0Qnl0ZWNvZGUoZ2VuZXJhdG9yLCBpbml0aWFsaXplci5nZXQo
KSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwg
aW5pdGlhbGl6ZXIuZ2V0KCkpOwotfQotCi1EZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlOjp+RGVj
b25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSgpCi17Ci19Ci0gICAgCi12b2lkIEFycmF5UGF0dGVybk5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiByaHMpIGNvbnN0Ci17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RhcmdldFBhdHRl
cm5zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGF1dG8gdGFyZ2V0ID0gbV90YXJnZXRQYXR0ZXJu
c1tpXTsKLSAgICAgICAgaWYgKCF0YXJnZXQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXAgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0g
ICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZCh0ZW1wLmdldCgpLCBqc051bWJlcihpKSk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0R2V0QnlWYWwodGVtcC5nZXQoKSwgcmhzLCB0ZW1wLmdldCgpKTsK
LSAgICAgICAgdGFyZ2V0LT5lbWl0Qnl0ZWNvZGUoZ2VuZXJhdG9yLCB0ZW1wLmdldCgpKTsKLSAg
ICB9Ci19Ci0KLVJlZ2lzdGVySUQqIEFycmF5UGF0dGVybk5vZGU6OmVtaXREaXJlY3RCaW5kaW5n
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCwgRXhwcmVzc2lv
bk5vZGUqIHJocykKLXsKLSAgICBpZiAocmhzLT5pc1Jlc29sdmVOb2RlKCkKLSAgICAgICAgJiYg
Z2VuZXJhdG9yLndpbGxSZXNvbHZlVG9Bcmd1bWVudHMoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUq
PihyaHMpLT5pZGVudGlmaWVyKCkpCi0gICAgICAgICYmICFnZW5lcmF0b3Iuc3ltYm9sVGFibGUo
KS5zbG93QXJndW1lbnRzKCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Rh
cmdldFBhdHRlcm5zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBhdXRvIHRhcmdldCA9IG1f
dGFyZ2V0UGF0dGVybnNbaV07Ci0gICAgICAgICAgICBpZiAoIXRhcmdldCkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHRlbXAgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgICAgICBnZW5lcmF0
b3IuZW1pdExvYWQodGVtcC5nZXQoKSwganNOdW1iZXIoaSkpOwotICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRHZXRBcmd1bWVudEJ5VmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCks
IGdlbmVyYXRvci51bmNoZWNrZWRSZWdpc3RlckZvckFyZ3VtZW50cygpLCB0ZW1wLmdldCgpKTsK
LSAgICAgICAgICAgIHRhcmdldC0+ZW1pdEJ5dGVjb2RlKGdlbmVyYXRvciwgdGVtcC5nZXQoKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFyaHMtPmlzU2ltcGxlQXJyYXkoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgRWxlbWVudE5vZGUqIGVsZW1lbnROb2RlcyA9IHN0YXRpY19jYXN0
PEFycmF5Tm9kZSo+KHJocyktPmVsZW1lbnRzKCk7Ci0gICAgVmVjdG9yPEV4cHJlc3Npb25Ob2Rl
Kj4gZWxlbWVudHM7Ci0gICAgZm9yICg7IGVsZW1lbnROb2RlczsgZWxlbWVudE5vZGVzID0gZWxl
bWVudE5vZGVzLT5uZXh0KCkpCi0gICAgICAgIGVsZW1lbnRzLmFwcGVuZChlbGVtZW50Tm9kZXMt
PnZhbHVlKCkpOwotICAgIGlmIChtX3RhcmdldFBhdHRlcm5zLnNpemUoKSAhPSBlbGVtZW50cy5z
aXplKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIFZlY3RvcjxSZWZQdHI8UmVnaXN0ZXJJRD4+
IHJlZ2lzdGVyczsKLSAgICByZWdpc3RlcnMucmVzZXJ2ZUNhcGFjaXR5KG1fdGFyZ2V0UGF0dGVy
bnMuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGFyZ2V0UGF0dGVybnMu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgcmVnaXN0ZXJzLnVuY2hlY2tlZEFwcGVuZChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUocmVnaXN0ZXJz
Lmxhc3QoKS5nZXQoKSwgZWxlbWVudHNbaV0pOwotICAgIH0KLSAgICAKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fdGFyZ2V0UGF0dGVybnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYg
KG1fdGFyZ2V0UGF0dGVybnNbaV0pCi0gICAgICAgICAgICBtX3RhcmdldFBhdHRlcm5zW2ldLT5l
bWl0Qnl0ZWNvZGUoZ2VuZXJhdG9yLCByZWdpc3RlcnNbaV0uZ2V0KCkpOwotICAgIH0KLSAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0
KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKHJlc3VsdC5nZXQoKSwganNVbmRlZmlu
ZWQoKSk7Ci19Ci0KLXZvaWQgQXJyYXlQYXR0ZXJuTm9kZTo6dG9TdHJpbmcoU3RyaW5nQnVpbGRl
ciYgYnVpbGRlcikgY29uc3QKLXsKLSAgICBidWlsZGVyLmFwcGVuZCgnWycpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV90YXJnZXRQYXR0ZXJucy5zaXplKCk7IGkrKykgewotICAgICAg
ICBpZiAoIW1fdGFyZ2V0UGF0dGVybnNbaV0pIHsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCcsJyk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBtX3Rhcmdl
dFBhdHRlcm5zW2ldLT50b1N0cmluZyhidWlsZGVyKTsKLSAgICAgICAgaWYgKGkgPCBtX3Rhcmdl
dFBhdHRlcm5zLnNpemUoKSAtIDEpCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnLCcpOwot
ICAgIH0KLSAgICBidWlsZGVyLmFwcGVuZCgnXScpOwotfQotCi12b2lkIEFycmF5UGF0dGVybk5v
ZGU6OmNvbGxlY3RCb3VuZElkZW50aWZpZXJzKFZlY3RvcjxJZGVudGlmaWVyPiYgaWRlbnRpZmll
cnMpIGNvbnN0Ci17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RhcmdldFBhdHRlcm5z
LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlKiBu
b2RlID0gbV90YXJnZXRQYXR0ZXJuc1tpXS5nZXQoKSkKLSAgICAgICAgICAgIG5vZGUtPmNvbGxl
Y3RCb3VuZElkZW50aWZpZXJzKGlkZW50aWZpZXJzKTsKLSAgICB9Ci19Ci0KLXZvaWQgT2JqZWN0
UGF0dGVybk5vZGU6OnRvU3RyaW5nKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpIGNvbnN0Ci17Ci0g
ICAgYnVpbGRlci5hcHBlbmQoJ3snKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGFy
Z2V0UGF0dGVybnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKG1fdGFyZ2V0UGF0dGVybnNb
aV0ud2FzU3RyaW5nKSB7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnIicpOwotICAgICAg
ICAgICAgZXNjYXBlU3RyaW5nVG9CdWlsZGVyKGJ1aWxkZXIsIG1fdGFyZ2V0UGF0dGVybnNbaV0u
cHJvcGVydHlOYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCciJyk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobV90YXJnZXRQYXR0
ZXJuc1tpXS5wcm9wZXJ0eU5hbWUuc3RyaW5nKCkpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgi
OiIpOwotICAgICAgICBtX3RhcmdldFBhdHRlcm5zW2ldLnBhdHRlcm4tPnRvU3RyaW5nKGJ1aWxk
ZXIpOwotICAgICAgICBpZiAoaSA8IG1fdGFyZ2V0UGF0dGVybnMuc2l6ZSgpIC0gMSkKLSAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcsJyk7Ci0gICAgfQotICAgIGJ1aWxkZXIuYXBwZW5kKCd9
Jyk7Ci19Ci0gICAgCi12b2lkIE9iamVjdFBhdHRlcm5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogcmhzKSBjb25zdAotewotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90YXJnZXRQYXR0ZXJucy5zaXplKCk7IGkrKykgewotICAg
ICAgICBhdXRvJiB0YXJnZXQgPSBtX3RhcmdldFBhdHRlcm5zW2ldOwotICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gdGVtcCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRHZXRCeUlkKHRlbXAuZ2V0KCksIHJocywgdGFyZ2V0LnByb3BlcnR5TmFtZSk7
Ci0gICAgICAgIHRhcmdldC5wYXR0ZXJuLT5lbWl0Qnl0ZWNvZGUoZ2VuZXJhdG9yLCB0ZW1wLmdl
dCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgT2JqZWN0UGF0dGVybk5vZGU6OmNvbGxlY3RCb3VuZElk
ZW50aWZpZXJzKFZlY3RvcjxJZGVudGlmaWVyPiYgaWRlbnRpZmllcnMpIGNvbnN0Ci17Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RhcmdldFBhdHRlcm5zLnNpemUoKTsgaSsrKQotICAg
ICAgICBtX3RhcmdldFBhdHRlcm5zW2ldLnBhdHRlcm4tPmNvbGxlY3RCb3VuZElkZW50aWZpZXJz
KGlkZW50aWZpZXJzKTsKLX0KLQotdm9pZCBCaW5kaW5nTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIHZhbHVlKSBjb25zdAotewotICAg
IGlmIChMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChtX2JvdW5kUHJvcGVydHkpKSB7Ci0g
ICAgICAgIGlmIChsb2NhbC5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgICAgIGdlbmVyYXRvci5l
bWl0UmVhZE9ubHlFeGNlcHRpb25JZk5lZWRlZCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgdmFsdWUpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkp
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKLSAgICBSZWdpc3RlcklEKiBzY29wZSA9IGdlbmVyYXRvci5lbWl0
UmVzb2x2ZVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgbV9ib3VuZFByb3BlcnR5KTsK
LSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwg
ZGl2b3RFbmQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLCBtX2JvdW5k
UHJvcGVydHksIHZhbHVlLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91
bmQgOiBEb05vdFRocm93SWZOb3RGb3VuZCk7Ci0gICAgcmV0dXJuOwotfQotCi12b2lkIEJpbmRp
bmdOb2RlOjp0b1N0cmluZyhTdHJpbmdCdWlsZGVyJiBidWlsZGVyKSBjb25zdAotewotICAgIGJ1
aWxkZXIuYXBwZW5kKG1fYm91bmRQcm9wZXJ0eS5zdHJpbmcoKSk7Ci19Ci0KLXZvaWQgQmluZGlu
Z05vZGU6OmNvbGxlY3RCb3VuZElkZW50aWZpZXJzKFZlY3RvcjxJZGVudGlmaWVyPiYgaWRlbnRp
ZmllcnMpIGNvbnN0Ci17Ci0gICAgaWRlbnRpZmllcnMuYXBwZW5kKG1fYm91bmRQcm9wZXJ0eSk7
Ci19CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDE1Njc1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw2IEBA
IHB1YmxpYzoKICAgICAgICAgVW5hcnlFeHByQ29udGV4dChBU1RCdWlsZGVyJikge30KICAgICB9
OwogCi0KICAgICB0eXBlZGVmIFN5bnRheENoZWNrZXIgRnVuY3Rpb25Cb2R5QnVpbGRlcjsKIAog
ICAgIHR5cGVkZWYgRXhwcmVzc2lvbk5vZGUqIEV4cHJlc3Npb247CkBAIC0xMDgsMTAgKzEwNyw3
IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIENhc2VDbGF1c2VOb2RlKiBDbGF1c2U7CiAgICAgdHlw
ZWRlZiBDb25zdERlY2xOb2RlKiBDb25zdERlY2xMaXN0OwogICAgIHR5cGVkZWYgc3RkOjpwYWly
PEV4cHJlc3Npb25Ob2RlKiwgQmluYXJ5T3BJbmZvPiBCaW5hcnlPcGVyYW5kOwotICAgIHR5cGVk
ZWYgUmVmUHRyPERlY29uc3RydWN0aW9uUGF0dGVybk5vZGU+IERlY29uc3RydWN0aW9uUGF0dGVy
bjsKLSAgICB0eXBlZGVmIFJlZlB0cjxBcnJheVBhdHRlcm5Ob2RlPiBBcnJheVBhdHRlcm47Ci0g
ICAgdHlwZWRlZiBSZWZQdHI8T2JqZWN0UGF0dGVybk5vZGU+IE9iamVjdFBhdHRlcm47Ci0gICAg
dHlwZWRlZiBSZWZQdHI8QmluZGluZ05vZGU+IEJpbmRpbmdQYXR0ZXJuOworICAgIAogICAgIHN0
YXRpYyBjb25zdCBib29sIENyZWF0ZXNBU1QgPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdCBib29s
IE5lZWRzRnJlZVZhcmlhYmxlSW5mbyA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgQ2Fu
VXNlRnVuY3Rpb25DYWNoZSA9IHRydWU7CkBAIC0zMTgsOCArMzE0LDggQEAgcHVibGljOgogICAg
IEVsZW1lbnROb2RlKiBjcmVhdGVFbGVtZW50TGlzdChpbnQgZWxpc2lvbnMsIEV4cHJlc3Npb25O
b2RlKiBleHByKSB7IHJldHVybiBuZXcgKG1fdm0pIEVsZW1lbnROb2RlKGVsaXNpb25zLCBleHBy
KTsgfQogICAgIEVsZW1lbnROb2RlKiBjcmVhdGVFbGVtZW50TGlzdChFbGVtZW50Tm9kZSogZWxl
bXMsIGludCBlbGlzaW9ucywgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgcmV0dXJuIG5ldyAobV92
bSkgRWxlbWVudE5vZGUoZWxlbXMsIGVsaXNpb25zLCBleHByKTsgfQogCi0gICAgUGFyYW1ldGVy
Tm9kZSogY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdChEZWNvbnN0cnVjdGlvblBhdHRlcm4gcGF0
dGVybikgeyByZXR1cm4gbmV3IChtX3ZtKSBQYXJhbWV0ZXJOb2RlKHBhdHRlcm4pOyB9Ci0gICAg
UGFyYW1ldGVyTm9kZSogY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdChQYXJhbWV0ZXJOb2RlKiBs
aXN0LCBEZWNvbnN0cnVjdGlvblBhdHRlcm4gcGF0dGVybikgeyByZXR1cm4gbmV3IChtX3ZtKSBQ
YXJhbWV0ZXJOb2RlKGxpc3QsIHBhdHRlcm4pOyB9CisgICAgUGFyYW1ldGVyTm9kZSogY3JlYXRl
Rm9ybWFsUGFyYW1ldGVyTGlzdChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgeyByZXR1cm4gbmV3
IChtX3ZtKSBQYXJhbWV0ZXJOb2RlKGlkZW50KTsgfQorICAgIFBhcmFtZXRlck5vZGUqIGNyZWF0
ZUZvcm1hbFBhcmFtZXRlckxpc3QoUGFyYW1ldGVyTm9kZSogbGlzdCwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQpIHsgcmV0dXJuIG5ldyAobV92bSkgUGFyYW1ldGVyTm9kZShsaXN0LCBpZGVudCk7
IH0KIAogICAgIENhc2VDbGF1c2VOb2RlKiBjcmVhdGVDbGF1c2UoRXhwcmVzc2lvbk5vZGUqIGV4
cHIsIEpTQzo6U291cmNlRWxlbWVudHMqIHN0YXRlbWVudHMpIHsgcmV0dXJuIG5ldyAobV92bSkg
Q2FzZUNsYXVzZU5vZGUoZXhwciwgc3RhdGVtZW50cyk7IH0KICAgICBDbGF1c2VMaXN0Tm9kZSog
Y3JlYXRlQ2xhdXNlTGlzdChDYXNlQ2xhdXNlTm9kZSogY2xhdXNlKSB7IHJldHVybiBuZXcgKG1f
dm0pIENsYXVzZUxpc3ROb2RlKGNsYXVzZSk7IH0KQEAgLTM2NSwxNyArMzYxLDE3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBj
cmVhdGVGb3JJbkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lv
bk5vZGUqIGxocywgRXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVu
dHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlU3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBl
RGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlRW5kLCBpbnQgc3RhcnQsIGludCBlbmQpCisg
ICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaXRlciwg
U3RhdGVtZW50Tm9kZSogc3RhdGVtZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQsIGlu
dCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsKLSAgICAgICAgRm9ySW5Ob2RlKiByZXN1
bHQgPSBuZXcgKG1fdm0pIEZvckluTm9kZShsb2NhdGlvbiwgbGhzLCBpdGVyLCBzdGF0ZW1lbnRz
KTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uc3RhcnRPZmZz
ZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7Ci0gICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0
aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRGl2b3QsIGVFbmQpOworICAgICAgICBGb3JJbk5vZGUqIHJl
c3VsdCA9IG5ldyAobV92bSkgRm9ySW5Ob2RlKG1fdm0sIGxvY2F0aW9uLCAqaWRlbnQsIGl0ZXIs
IHN0YXRlbWVudHMsIHN0YXJ0KTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBl
bmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsK
KyAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFydCwgZGl2b3QgKyAxLCBl
bmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICAKLSAgICBTdGF0ZW1lbnRO
b2RlKiBjcmVhdGVGb3JJbkxvb3AoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgUGFz
c1JlZlB0cjxEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlPiBwYXR0ZXJuLCBFeHByZXNzaW9uTm9k
ZSogaXRlciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGVTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVEaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGVFbmQsIGludCBzdGFydCwgaW50IGVuZCkKKworICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0
ZUZvckluTG9vcChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9k
ZSogbGhzLCBFeHByZXNzaW9uTm9kZSogaXRlciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50cywg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGVTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVEaXZv
dCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVFbmQsIGludCBzdGFydCwgaW50IGVuZCkKICAgICB7
Ci0gICAgICAgIEZvckluTm9kZSogcmVzdWx0ID0gbmV3IChtX3ZtKSBGb3JJbk5vZGUobV92bSwg
bG9jYXRpb24sIHBhdHRlcm4uZ2V0KCksIGl0ZXIsIHN0YXRlbWVudHMpOworICAgICAgICBGb3JJ
bk5vZGUqIHJlc3VsdCA9IG5ldyAobV92bSkgRm9ySW5Ob2RlKGxvY2F0aW9uLCBsaHMsIGl0ZXIs
IHN0YXRlbWVudHMpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydCwgZW5kLCBsb2NhdGlv
bi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgc2V0RXhj
ZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBlU3RhcnQsIGVEaXZvdCwgZUVuZCk7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CkBAIC01MTksOCArNTE1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
aWYgKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqaWRlbnQpCiAgICAgICAgICAg
ICB1c2VzQXJndW1lbnRzKCk7Ci0gICAgICAgIEFTU0VSVChpZGVudC0+aW1wbCgpLT5pc0lkZW50
aWZpZXIoKSk7Ci0gICAgICAgIG1fc2NvcGUubV92YXJEZWNsYXJhdGlvbnMtPmRhdGEuYXBwZW5k
KHN0ZDo6bWFrZV9wYWlyKCppZGVudCwgYXR0cnMpKTsKKyAgICAgICAgbV9zY29wZS5tX3ZhckRl
Y2xhcmF0aW9ucy0+ZGF0YS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaWRlbnQsIGF0dHJzKSk7CiAg
ICAgfQogCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNvbWJpbmVDb21tYU5vZGVzKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsaXN0LCBFeHByZXNzaW9uTm9k
ZSogaW5pdCkKQEAgLTYyMCw0MSArNjE1LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1Jlc29s
dmUoRXhwcmVzc2lvbk5vZGUqIGV4cHIpIGNvbnN0IHsgcmV0dXJuIGV4cHItPmlzUmVzb2x2ZU5v
ZGUoKTsgfQogCi0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZURlY29uc3RydWN0aW5nQXNzaWdu
bWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQYXNzUmVmUHRyPERlY29uc3Ry
dWN0aW9uUGF0dGVybk5vZGU+IHBhdHRlcm4sIEV4cHJlc3Npb25Ob2RlKiBpbml0aWFsaXplcikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fdm0pIERlY29uc3RydWN0aW5nQXNzaWdubWVu
dE5vZGUobG9jYXRpb24sIHBhdHRlcm4uZ2V0KCksIGluaXRpYWxpemVyKTsKLSAgICB9Ci0gICAg
Ci0gICAgQXJyYXlQYXR0ZXJuIGNyZWF0ZUFycmF5UGF0dGVybihjb25zdCBKU1Rva2VuTG9jYXRp
b24mKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEFycmF5UGF0dGVybk5vZGU6OmNyZWF0ZShtX3Zt
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhcHBlbmRBcnJheVBhdHRlcm5Ta2lwRW50cnkoQXJy
YXlQYXR0ZXJuIG5vZGUsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCi0gICAgewot
ICAgICAgICBub2RlLT5hcHBlbmRJbmRleChsb2NhdGlvbiwgMCk7Ci0gICAgfQotCi0gICAgdm9p
ZCBhcHBlbmRBcnJheVBhdHRlcm5FbnRyeShBcnJheVBhdHRlcm4gbm9kZSwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuIHBhdHRlcm4pCi0gICAg
ewotICAgICAgICBub2RlLT5hcHBlbmRJbmRleChsb2NhdGlvbiwgcGF0dGVybi5nZXQoKSk7Ci0g
ICAgfQotICAgIAotICAgIE9iamVjdFBhdHRlcm4gY3JlYXRlT2JqZWN0UGF0dGVybihjb25zdCBK
U1Rva2VuTG9jYXRpb24mKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE9iamVjdFBhdHRlcm5Ob2Rl
OjpjcmVhdGUobV92bSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYXBwZW5kT2JqZWN0UGF0dGVy
bkVudHJ5KE9iamVjdFBhdHRlcm4gbm9kZSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgYm9vbCB3YXNTdHJpbmcsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIERlY29uc3Ry
dWN0aW9uUGF0dGVybiBwYXR0ZXJuKQotICAgIHsKLSAgICAgICAgbm9kZS0+YXBwZW5kRW50cnko
bG9jYXRpb24sIGlkZW50aWZpZXIsIHdhc1N0cmluZywgcGF0dGVybi5nZXQoKSk7Ci0gICAgfQot
ICAgIAotICAgIEJpbmRpbmdQYXR0ZXJuIGNyZWF0ZUJpbmRpbmdMb2NhdGlvbihjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiBib3VuZFByb3BlcnR5LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGVuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCaW5kaW5nTm9kZTo6Y3Jl
YXRlKG1fdm0sIGJvdW5kUHJvcGVydHksIGRpdm90LCBzdGFydCwgZW5kKTsKLSAgICB9Ci0gICAg
CiBwcml2YXRlOgogICAgIHN0cnVjdCBTY29wZSB7CiAgICAgICAgIFNjb3BlKFZNKiB2bSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5o
CShyZXZpc2lvbiAxNTY3NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVD
b25zdHJ1Y3RvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjAzLDggKzYwMyw2IEBAIGlubGluZSBS
ZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlMKICAgICBpbmxpbmUgQ29tbWFOb2RlOjpD
b21tYU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUo
bG9jYXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQoZXhwcjEpOwotICAgICAgICBBU1NFUlQo
ZXhwcjIpOwogICAgICAgICBtX2V4cHJlc3Npb25zLmFwcGVuZChleHByMSk7CiAgICAgICAgIG1f
ZXhwcmVzc2lvbnMuYXBwZW5kKGV4cHIyKTsKICAgICB9CkBAIC03MzQsMjAgKzczMiwxNyBAQCBp
bmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTCiAgICAgewogICAgIH0KIAot
ICAgIGlubGluZSBQYXJhbWV0ZXJOb2RlOjpQYXJhbWV0ZXJOb2RlKFBhc3NSZWZQdHI8RGVjb25z
dHJ1Y3Rpb25QYXR0ZXJuTm9kZT4gcGF0dGVybikKLSAgICAgICAgOiBtX3BhdHRlcm4ocGF0dGVy
bikKKyAgICBpbmxpbmUgUGFyYW1ldGVyTm9kZTo6UGFyYW1ldGVyTm9kZShjb25zdCBJZGVudGlm
aWVyJiBpZGVudCkKKyAgICAgICAgOiBtX2lkZW50KGlkZW50KQogICAgICAgICAsIG1fbmV4dCgw
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcGF0dGVybik7CiAgICAgfQogCi0gICAgaW5saW5l
IFBhcmFtZXRlck5vZGU6OlBhcmFtZXRlck5vZGUoUGFyYW1ldGVyTm9kZSogbCwgUGFzc1JlZlB0
cjxEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlPiBwYXR0ZXJuKQotICAgICAgICA6IG1fcGF0dGVy
bihwYXR0ZXJuKQorICAgIGlubGluZSBQYXJhbWV0ZXJOb2RlOjpQYXJhbWV0ZXJOb2RlKFBhcmFt
ZXRlck5vZGUqIGwsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQorICAgICAgICA6IG1faWRlbnQo
aWRlbnQpCiAgICAgICAgICwgbV9uZXh0KDApCiAgICAgewogICAgICAgICBsLT5tX25leHQgPSB0
aGlzOwotICAgICAgICBBU1NFUlQobV9wYXR0ZXJuKTsKLSAgICAgICAgQVNTRVJUKGwtPm1fcGF0
dGVybik7CiAgICAgfQogCiAgICAgaW5saW5lIEZ1bmNFeHByTm9kZTo6RnVuY0V4cHJOb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBG
dW5jdGlvbkJvZHlOb2RlKiBib2R5LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcmFtZXRl
ck5vZGUqIHBhcmFtZXRlcikKQEAgLTgxNyw2MSArODEyLDE2IEBAIGlubGluZSBSZXNvbHZlTm9k
ZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlMKICAgICAgICAgLCBtX2V4cHIoZXhwcikKICAgICAgICAg
LCBtX3N0YXRlbWVudChzdGF0ZW1lbnQpCiAgICAgewotICAgICAgICBBU1NFUlQobCk7CiAgICAg
fQotICAgIAotICAgIGlubGluZSBGb3JJbk5vZGU6OkZvckluTm9kZShWTSogdm0sIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUqIHBhdHRl
cm4sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQpCisKKyAg
ICBpbmxpbmUgRm9ySW5Ob2RlOjpGb3JJbk5vZGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90
U3RhcnQpCiAgICAgICAgIDogU3RhdGVtZW50Tm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBtX2xl
eHByKG5ldyAodm0pIERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGUobG9jYXRpb24sIHBhdHRl
cm4sIDApKQorICAgICAgICAsIG1fbGV4cHIobmV3ICh2bSkgUmVzb2x2ZU5vZGUobG9jYXRpb24s
IGlkZW50LCBkaXZvdFN0YXJ0KSkKICAgICAgICAgLCBtX2V4cHIoZXhwcikKICAgICAgICAgLCBt
X3N0YXRlbWVudChzdGF0ZW1lbnQpCiAgICAgewotICAgICAgICBBU1NFUlQocGF0dGVybik7Ci0g
ICAgfQotICAgIAotICAgIGlubGluZSBEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlOjpEZWNvbnN0
cnVjdGlvblBhdHRlcm5Ob2RlKFZNKikKLSAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIEFycmF5
UGF0dGVybk5vZGU6OkFycmF5UGF0dGVybk5vZGUoVk0qIHZtKQotICAgICAgICA6IERlY29uc3Ry
dWN0aW9uUGF0dGVybk5vZGUodm0pCi0gICAgewotICAgIH0KLSAgICAKLSAgICBpbmxpbmUgUGFz
c1JlZlB0cjxBcnJheVBhdHRlcm5Ob2RlPiBBcnJheVBhdHRlcm5Ob2RlOjpjcmVhdGUoVk0qIHZt
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheVBhdHRlcm5Ob2RlKHZt
KSk7Ci0gICAgfQotICAgIAotICAgIGlubGluZSBPYmplY3RQYXR0ZXJuTm9kZTo6T2JqZWN0UGF0
dGVybk5vZGUoVk0qIHZtKQotICAgICAgICA6IERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUodm0p
Ci0gICAgewotICAgIH0KLSAgICAKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxPYmplY3RQYXR0ZXJu
Tm9kZT4gT2JqZWN0UGF0dGVybk5vZGU6OmNyZWF0ZShWTSogdm0pCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IE9iamVjdFBhdHRlcm5Ob2RlKHZtKSk7Ci0gICAgfQotCi0gICAg
aW5saW5lIFBhc3NSZWZQdHI8QmluZGluZ05vZGU+IEJpbmRpbmdOb2RlOjpjcmVhdGUoVk0qIHZt
LCBjb25zdCBJZGVudGlmaWVyJiBib3VuZFByb3BlcnR5LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGVuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmluZGluZ05vZGUodm0s
IGJvdW5kUHJvcGVydHksIGRpdm90LCBzdGFydCwgZW5kKSk7Ci0gICAgfQotICAgIAotICAgIGlu
bGluZSBCaW5kaW5nTm9kZTo6QmluZGluZ05vZGUoVk0qIHZtLCBjb25zdCBJZGVudGlmaWVyJiBi
b3VuZFByb3BlcnR5LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKLSAgICAgICAgOiBEZWNv
bnN0cnVjdGlvblBhdHRlcm5Ob2RlKHZtKQotICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25E
YXRhKGRpdm90LCBzdGFydCwgZW5kKQotICAgICAgICAsIG1fYm91bmRQcm9wZXJ0eShib3VuZFBy
b3BlcnR5KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgaW5saW5lIERlY29uc3RydWN0aW5nQXNz
aWdubWVudE5vZGU6OkRlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgUGFzc1JlZlB0cjxEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlPiBi
aW5kaW5ncywgRXhwcmVzc2lvbk5vZGUqIGluaXRpYWxpemVyKQotICAgICAgICA6IEV4cHJlc3Np
b25Ob2RlKGxvY2F0aW9uKQotICAgICAgICAsIG1fYmluZGluZ3MoYmluZGluZ3MpCi0gICAgICAg
ICwgbV9pbml0aWFsaXplcihpbml0aWFsaXplcikKLSAgICB7Ci0gICAgfQotICAgIAogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBOb2RlQ29uc3RydWN0b3JzX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShyZXZpc2lvbiAxNTY3NTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3
LDcgKzE1Nyw3IEBAIFBhc3NSZWZQdHI8RnVuY3Rpb25QYXJhbWV0ZXJzPiBGdW5jdGlvblAKICAg
ICBmb3IgKFBhcmFtZXRlck5vZGUqIHBhcmFtZXRlciA9IGZpcnN0UGFyYW1ldGVyOyBwYXJhbWV0
ZXI7IHBhcmFtZXRlciA9IHBhcmFtZXRlci0+bmV4dFBhcmFtKCkpCiAgICAgICAgICsrcGFyYW1l
dGVyQ291bnQ7CiAKLSAgICBzaXplX3Qgb2JqZWN0U2l6ZSA9IHNpemVvZihGdW5jdGlvblBhcmFt
ZXRlcnMpIC0gc2l6ZW9mKHZvaWQqKSArIHNpemVvZihEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2Rl
KikgKiBwYXJhbWV0ZXJDb3VudDsKKyAgICBzaXplX3Qgb2JqZWN0U2l6ZSA9IHNpemVvZihGdW5j
dGlvblBhcmFtZXRlcnMpIC0gc2l6ZW9mKHZvaWQqKSArIHNpemVvZihTdHJpbmdJbXBsKikgKiBw
YXJhbWV0ZXJDb3VudDsKICAgICB2b2lkKiBzbG90ID0gZmFzdE1hbGxvYyhvYmplY3RTaXplKTsK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IChzbG90KSBGdW5jdGlvblBhcmFtZXRlcnMoZmlyc3RQ
YXJhbWV0ZXIsIHBhcmFtZXRlckNvdW50KSk7CiB9CkBAIC0xNjYsMTcgKzE2NiwxNCBAQCBGdW5j
dGlvblBhcmFtZXRlcnM6OkZ1bmN0aW9uUGFyYW1ldGVycyhQCiAgICAgOiBtX3NpemUoc2l6ZSkK
IHsKICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICBmb3IgKFBhcmFtZXRlck5vZGUqIHBhcmFtZXRl
ciA9IGZpcnN0UGFyYW1ldGVyOyBwYXJhbWV0ZXI7IHBhcmFtZXRlciA9IHBhcmFtZXRlci0+bmV4
dFBhcmFtKCkpIHsKLSAgICAgICAgYXV0byBwYXR0ZXJuID0gcGFyYW1ldGVyLT5wYXR0ZXJuKCk7
Ci0gICAgICAgIHBhdHRlcm4tPnJlZigpOwotICAgICAgICBwYXR0ZXJucygpW2krK10gPSBwYXR0
ZXJuOwotICAgIH0KKyAgICBmb3IgKFBhcmFtZXRlck5vZGUqIHBhcmFtZXRlciA9IGZpcnN0UGFy
YW1ldGVyOyBwYXJhbWV0ZXI7IHBhcmFtZXRlciA9IHBhcmFtZXRlci0+bmV4dFBhcmFtKCkpCisg
ICAgICAgIG5ldyAoJmlkZW50aWZpZXJzKClbaSsrXSkgSWRlbnRpZmllcihwYXJhbWV0ZXItPmlk
ZW50KCkpOwogfQogCiBGdW5jdGlvblBhcmFtZXRlcnM6On5GdW5jdGlvblBhcmFtZXRlcnMoKQog
ewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKLSAgICAgICAgcGF0
dGVybnMoKVtpXS0+ZGVyZWYoKTsKKyAgICAgICAgaWRlbnRpZmllcnMoKVtpXS5+SWRlbnRpZmll
cigpOwogfQogCiBpbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShWTSog
dm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIGJvb2wgaW5TdHJpY3RD
b250ZXh0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkocmV2aXNpb24g
MTU2NzU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgbmFtZXNwYWNl
IERlY2xhcmF0aW9uU3RhY2tzIHsKICAgICAgICAgZW51bSBWYXJBdHRycyB7IElzQ29uc3RhbnQg
PSAxLCBIYXNJbml0aWFsaXplciA9IDIgfTsKLSAgICAgICAgdHlwZWRlZiBWZWN0b3I8c3RkOjpw
YWlyPElkZW50aWZpZXIsIHVuc2lnbmVkPiA+IFZhclN0YWNrOworICAgICAgICB0eXBlZGVmIFZl
Y3RvcjxzdGQ6OnBhaXI8Y29uc3QgSWRlbnRpZmllciosIHVuc2lnbmVkPiA+IFZhclN0YWNrOwog
ICAgICAgICB0eXBlZGVmIFZlY3RvcjxGdW5jdGlvbkJvZHlOb2RlKj4gRnVuY3Rpb25TdGFjazsK
ICAgICB9CiAKQEAgLTE1NCw3ICsxNTQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmly
dHVhbCBib29sIGlzUmVzb2x2ZU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNCcmFja2V0QWNjZXNzb3JOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzRG90QWNjZXNzb3JOb2RlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGlzRGVjb25zdHJ1Y3Rpb25Ob2Rl
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzRnVuY0V4
cHJOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlz
Q29tbWFOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29s
IGlzU2ltcGxlQXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtNDYyLDcgKzQ2MSw2
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEFyZ3VtZW50TGlzdE5vZGUqIHRvQXJndW1l
bnRMaXN0KFZNKiwgaW50LCBpbnQpIGNvbnN0OwogCi0gICAgICAgIEVsZW1lbnROb2RlKiBlbGVt
ZW50cygpIGNvbnN0IHsgQVNTRVJUKGlzU2ltcGxlQXJyYXkoKSk7IHJldHVybiBtX2VsZW1lbnQ7
IH0KICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CiAKQEAgLTEwODIsNyArMTA4
MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHVzaW5nIFBhcnNlckFyZW5hRGVsZXRh
YmxlOjpvcGVyYXRvciBuZXc7CiAKLSAgICAgICAgdm9pZCBhcHBlbmQoRXhwcmVzc2lvbk5vZGUq
IGV4cHIpIHsgQVNTRVJUKGV4cHIpOyBtX2V4cHJlc3Npb25zLmFwcGVuZChleHByKTsgfQorICAg
ICAgICB2b2lkIGFwcGVuZChFeHByZXNzaW9uTm9kZSogZXhwcikgeyBtX2V4cHJlc3Npb25zLmFw
cGVuZChleHByKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBib29sIGlzQ29t
bWFOb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTI0MCwxMyArMTIzOCwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcjM7CiAgICAgICAg
IFN0YXRlbWVudE5vZGUqIG1fc3RhdGVtZW50OwogICAgIH07Ci0gICAgCi0gICAgY2xhc3MgRGVj
b25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZTsKIAogICAgIGNsYXNzIEZvckluTm9kZSA6IHB1YmxpYyBT
dGF0ZW1lbnROb2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1Ymxp
YzoKICAgICAgICAgRm9ySW5Ob2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25O
b2RlKiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKik7Ci0gICAgICAgIEZvckluTm9k
ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUq
LCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqKTsKKyAgICAgICAgRm9ySW5Ob2RlKFZN
KiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25O
b2RlKiwgU3RhdGVtZW50Tm9kZSosIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0KTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtMTM0NSwxNCArMTM0MSwxNCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFBhcmFtZXRlck5vZGUgOiBwdWJsaWMgUGFyc2Vy
QXJlbmFEZWxldGFibGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgUGFyYW1ldGVyTm9kZShQYXNz
UmVmUHRyPERlY29uc3RydWN0aW9uUGF0dGVybk5vZGU+KTsKLSAgICAgICAgUGFyYW1ldGVyTm9k
ZShQYXJhbWV0ZXJOb2RlKiwgUGFzc1JlZlB0cjxEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlPik7
CisgICAgICAgIFBhcmFtZXRlck5vZGUoY29uc3QgSWRlbnRpZmllciYpOworICAgICAgICBQYXJh
bWV0ZXJOb2RlKFBhcmFtZXRlck5vZGUqLCBjb25zdCBJZGVudGlmaWVyJik7CiAKLSAgICAgICAg
RGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSogcGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fcGF0
dGVybi5nZXQoKTsgfQorICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCgpIGNvbnN0IHsg
cmV0dXJuIG1faWRlbnQ7IH0KICAgICAgICAgUGFyYW1ldGVyTm9kZSogbmV4dFBhcmFtKCkgY29u
c3QgeyByZXR1cm4gbV9uZXh0OyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8RGVj
b25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZT4gbV9wYXR0ZXJuOworICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiBtX2lkZW50OwogICAgICAgICBQYXJhbWV0ZXJOb2RlKiBtX25leHQ7CiAgICAgfTsKIApA
QCAtMTQ2NCwyMSArMTQ2MCwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEZ1bmN0
aW9uUGFyYW1ldGVycyA6IHB1YmxpYyBSZWZDb3VudGVkPEZ1bmN0aW9uUGFyYW1ldGVycz4gewog
ICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoRnVuY3Rpb25QYXJhbWV0ZXJzKTsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEZ1bmN0aW9uUGFyYW1ldGVycz4gY3JlYXRlKFBhcmFtZXRlck5vZGUqKTsKICAg
ICAgICAgfkZ1bmN0aW9uUGFyYW1ldGVycygpOwogCiAgICAgICAgIHVuc2lnbmVkIHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICAgICAgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9k
ZSogYXQodW5zaWduZWQgaW5kZXgpIHsgQVNTRVJUKGluZGV4IDwgbV9zaXplKTsgcmV0dXJuIHBh
dHRlcm5zKClbaW5kZXhdOyB9CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGF0KHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IEFTU0VSVChpbmRleCA8IG1fc2l6ZSk7IHJldHVybiBpZGVudGlmaWVy
cygpW2luZGV4XTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgRnVuY3Rpb25QYXJhbWV0ZXJz
KFBhcmFtZXRlck5vZGUqLCB1bnNpZ25lZCBzaXplKTsKIAotICAgICAgICBEZWNvbnN0cnVjdGlv
blBhdHRlcm5Ob2RlKiogcGF0dGVybnMoKSB7IHJldHVybiAmbV9zdG9yYWdlOyB9CisgICAgICAg
IElkZW50aWZpZXIqIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJZGVu
dGlmaWVyKj4oJm1fc3RvcmFnZSk7IH0KKyAgICAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnRp
ZmllcnMoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IElkZW50aWZpZXIq
PigmbV9zdG9yYWdlKTsgfQogCiAgICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKLSAgICAgICAgRGVj
b25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSogbV9zdG9yYWdlOworICAgICAgICB2b2lkKiBtX3N0b3Jh
Z2U7CiAgICAgfTsKIAogICAgIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGUgOiBwdWJsaWMgU2NvcGVO
b2RlIHsKQEAgLTE1MzQsMTAyICsxNTMwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEZ1
bmN0aW9uQm9keU5vZGUqIG1fYm9keTsKICAgICB9OwogCi0gICAgY2xhc3MgRGVjb25zdHJ1Y3Rp
b25QYXR0ZXJuTm9kZSA6IHB1YmxpYyBSZWZDb3VudGVkPERlY29uc3RydWN0aW9uUGF0dGVybk5v
ZGU+IHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVjb25zdHJ1Y3Rpb25QYXR0ZXJu
Tm9kZSk7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotCi0gICAgcHVibGljOgot
ICAgICAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdEJvdW5kSWRlbnRpZmllcnMoVmVjdG9yPElkZW50
aWZpZXI+JikgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5
dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogc291cmNlKSBjb25zdCA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCB0b1N0cmluZyhTdHJpbmdCdWlsZGVyJikgY29uc3QgPSAwOwotCi0gICAg
ICAgIHZpcnR1YWwgYm9vbCBpc0JpbmRpbmdOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0RGlyZWN0QmluZGluZyhCeXRlY29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqLCBFeHByZXNzaW9uTm9kZSopIHsgcmV0dXJuIDA7IH0KLSAg
ICAgICAgCi0gICAgICAgIHZpcnR1YWwgfkRlY29uc3RydWN0aW9uUGF0dGVybk5vZGUoKSA9IDA7
Ci0gICAgICAgIAotICAgIHByb3RlY3RlZDoKLSAgICAgICAgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJu
Tm9kZShWTSopOwotICAgIH07Ci0KLSAgICBjbGFzcyBBcnJheVBhdHRlcm5Ob2RlIDogcHVibGlj
IERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8QXJyYXlQYXR0ZXJuTm9kZT4gY3JlYXRlKFZNKik7Ci0gICAgICAgIHZvaWQg
YXBwZW5kSW5kZXgoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJu
Tm9kZSogbm9kZSkKLSAgICAgICAgewotICAgICAgICAgICAgbV90YXJnZXRQYXR0ZXJucy5hcHBl
bmQobm9kZSk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEFycmF5UGF0dGVy
bk5vZGUoVk0qKTsKLSAgICAgICAgdm9pZCBjb2xsZWN0Qm91bmRJZGVudGlmaWVycyhWZWN0b3I8
SWRlbnRpZmllcj4mKSBjb25zdDsKLSAgICAgICAgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKikgY29uc3Q7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRE
aXJlY3RCaW5kaW5nKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogZHN0LCBFeHByZXNz
aW9uTm9kZSopOwotICAgICAgICB2b2lkIHRvU3RyaW5nKFN0cmluZ0J1aWxkZXImKSBjb25zdDsK
LQotICAgICAgICBWZWN0b3I8UmVmUHRyPERlY29uc3RydWN0aW9uUGF0dGVybk5vZGU+PiBtX3Rh
cmdldFBhdHRlcm5zOwotICAgIH07Ci0gICAgCi0gICAgY2xhc3MgT2JqZWN0UGF0dGVybk5vZGUg
OiBwdWJsaWMgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSB7Ci0gICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxPYmplY3RQYXR0ZXJuTm9kZT4gY3JlYXRlKFZNKik7Ci0gICAg
ICAgIHZvaWQgYXBwZW5kRW50cnkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnRpZmllciwgYm9vbCB3YXNTdHJpbmcsIERlY29uc3RydWN0aW9uUGF0dGVybk5v
ZGUqIHBhdHRlcm4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fdGFyZ2V0UGF0dGVybnMuYXBw
ZW5kKEVudHJ5KGlkZW50aWZpZXIsIHdhc1N0cmluZywgcGF0dGVybikpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIE9iamVjdFBhdHRlcm5Ob2RlKFZNKik7Ci0g
ICAgICAgIHZvaWQgY29sbGVjdEJvdW5kSWRlbnRpZmllcnMoVmVjdG9yPElkZW50aWZpZXI+Jikg
Y29uc3Q7Ci0gICAgICAgIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVn
aXN0ZXJJRCopIGNvbnN0OwotICAgICAgICB2b2lkIHRvU3RyaW5nKFN0cmluZ0J1aWxkZXImKSBj
b25zdDsKLSAgICAgICAgc3RydWN0IEVudHJ5IHsKLSAgICAgICAgICAgIEVudHJ5KGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgYm9vbCB3YXNTdHJpbmcsIERlY29uc3RydWN0aW9uUGF0
dGVybk5vZGUqIHBhdHRlcm4pCi0gICAgICAgICAgICAgICAgOiBwcm9wZXJ0eU5hbWUocHJvcGVy
dHlOYW1lKQotICAgICAgICAgICAgICAgICwgd2FzU3RyaW5nKHdhc1N0cmluZykKLSAgICAgICAg
ICAgICAgICAsIHBhdHRlcm4ocGF0dGVybikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lOwotICAgICAgICAgICAgYm9vbCB3
YXNTdHJpbmc7Ci0gICAgICAgICAgICBSZWZQdHI8RGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZT4g
cGF0dGVybjsKLSAgICAgICAgfTsKLSAgICAgICAgVmVjdG9yPEVudHJ5PiBtX3RhcmdldFBhdHRl
cm5zOwotICAgIH07Ci0KLSAgICBjbGFzcyBCaW5kaW5nTm9kZSA6IHB1YmxpYyBEZWNvbnN0cnVj
dGlvblBhdHRlcm5Ob2RlLCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7Ci0gICAgcHVibGljOgot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxCaW5kaW5nTm9kZT4gY3JlYXRlKFZNKiwgY29uc3Qg
SWRlbnRpZmllciYgYm91bmRQcm9wZXJ0eSwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpOwot
ICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBib3VuZFByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4g
bV9ib3VuZFByb3BlcnR5OyB9Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIEJpbmRp
bmdOb2RlKFZNKiwgY29uc3QgSWRlbnRpZmllciYgYm91bmRQcm9wZXJ0eSwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBlbmQpOwotCi0gICAgICAgIHZvaWQgY29sbGVjdEJvdW5kSWRlbnRpZmllcnMo
VmVjdG9yPElkZW50aWZpZXI+JikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5
dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCopIGNvbnN0OwotICAgICAgICB2b2lkIHRvU3Ry
aW5nKFN0cmluZ0J1aWxkZXImKSBjb25zdDsKLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9v
bCBpc0JpbmRpbmdOb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgICAgICAKLSAgICAg
ICAgSWRlbnRpZmllciBtX2JvdW5kUHJvcGVydHk7Ci0gICAgfTsKLQotICAgIGNsYXNzIERlY29u
c3RydWN0aW5nQXNzaWdubWVudE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBQ
YXJzZXJBcmVuYURlbGV0YWJsZSB7Ci0gICAgcHVibGljOgotICAgICAgICBEZWNvbnN0cnVjdGlu
Z0Fzc2lnbm1lbnROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFBhc3NSZWZQdHI8RGVjb25z
dHJ1Y3Rpb25QYXR0ZXJuTm9kZT4sIEV4cHJlc3Npb25Ob2RlKik7Ci0gICAgICAgIERlY29uc3Ry
dWN0aW9uUGF0dGVybk5vZGUqIGJpbmRpbmdzKCkgeyByZXR1cm4gbV9iaW5kaW5ncy5nZXQoKTsg
fQotICAgICAgICAKLSAgICAgICAgdXNpbmcgUGFyc2VyQXJlbmFEZWxldGFibGU6Om9wZXJhdG9y
IG5ldzsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0xvY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNEZWNvbnN0cnVj
dGlvbk5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsK
LQotICAgICAgICBSZWZQdHI8RGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZT4gbV9iaW5kaW5nczsK
LSAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1faW5pdGlhbGl6ZXI7Ci0gICAgfTsKLQogICAgIGNs
YXNzIEZ1bmNEZWNsTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIEZ1bmNEZWNsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlm
aWVyJiwgRnVuY3Rpb25Cb2R5Tm9kZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJhbWV0ZXJOb2Rl
KiA9IDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2
aXNpb24gMTU2NzU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIFBhcnNlcjxMZXhlclR5cGU+OjpQYXJz
ZXIoVk0qIHZtLCBjb25zdCAKICAgICBtX3Rva2VuLm1fbG9jYXRpb24uc3RhcnRPZmZzZXQgPSBz
b3VyY2Uuc3RhcnRPZmZzZXQoKTsKICAgICBtX3Rva2VuLm1fbG9jYXRpb24uZW5kT2Zmc2V0ID0g
c291cmNlLnN0YXJ0T2Zmc2V0KCk7CiAgICAgbV90b2tlbi5tX2xvY2F0aW9uLmxpbmVTdGFydE9m
ZnNldCA9IHNvdXJjZS5zdGFydE9mZnNldCgpOworCiAgICAgbV9mdW5jdGlvbkNhY2hlID0gdm0t
PmFkZFNvdXJjZVByb3ZpZGVyQ2FjaGUoc291cmNlLnByb3ZpZGVyKCkpOwogICAgIFNjb3BlUmVm
IHNjb3BlID0gcHVzaFNjb3BlKCk7CiAgICAgaWYgKHBhcnNlck1vZGUgPT0gSlNQYXJzZUZ1bmN0
aW9uQ29kZSkKQEAgLTkxLDEyICs5Miw4IEBAIFBhcnNlcjxMZXhlclR5cGU+OjpQYXJzZXIoVk0q
IHZtLCBjb25zdCAKICAgICBpZiAoc3RyaWN0bmVzcyA9PSBKU1BhcnNlU3RyaWN0KQogICAgICAg
ICBzY29wZS0+c2V0U3RyaWN0TW9kZSgpOwogICAgIGlmIChwYXJhbWV0ZXJzKSB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLT5zaXplKCk7IGkrKykgewotICAg
ICAgICAgICAgYXV0byBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzLT5hdChpKTsKLSAgICAgICAgICAg
IGlmICghcGFyYW1ldGVyLT5pc0JpbmRpbmdOb2RlKCkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBzY29wZS0+ZGVjbGFyZVBhcmFtZXRlcigmc3RhdGljX2Nhc3Q8Qmlu
ZGluZ05vZGUqPihwYXJhbWV0ZXIpLT5ib3VuZFByb3BlcnR5KCkpOwotICAgICAgICB9CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLT5zaXplKCk7IGkrKykKKyAg
ICAgICAgICAgIHNjb3BlLT5kZWNsYXJlUGFyYW1ldGVyKCZwYXJhbWV0ZXJzLT5hdChpKSk7CiAg
ICAgfQogICAgIGlmICghbmFtZS5pc051bGwoKSkKICAgICAgICAgc2NvcGUtPmRlY2xhcmVDYWxs
ZWUoJm5hbWUpOwpAQCAtMjA2LDcgKzIwMyw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVN0YXRlbWUKICAgICBpbnQgc3RhcnQgPSB0b2tlbkxpbmUoKTsKICAgICBpbnQgZW5k
ID0gMDsKICAgICBpbnQgc2NyYXRjaDsKLSAgICBUcmVlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuIHNj
cmF0Y2gxID0gMDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBzY3JhdGNoMSA9IDA7CiAgICAgVHJl
ZUV4cHJlc3Npb24gc2NyYXRjaDIgPSAwOwogICAgIEpTVGV4dFBvc2l0aW9uIHNjcmF0Y2gzOwog
ICAgIFRyZWVFeHByZXNzaW9uIHZhckRlY2xzID0gcGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QoY29u
dGV4dCwgc2NyYXRjaCwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBzY3JhdGNoMywgc2NyYXRjaDMsIHNj
cmF0Y2gzKTsKQEAgLTI3NCwxNzAgKzI3MSw0MyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVTdGF0ZW1lCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Ci10ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYgY29udGV4dCwgaW50JiBkZWNs
YXJhdGlvbnMsIFRyZWVEZWNvbnN0cnVjdGlvblBhdHRlcm4mIGxhc3RQYXR0ZXJuLCBUcmVlRXhw
cmVzc2lvbiYgbGFzdEluaXRpYWxpemVyLCBKU1RleHRQb3NpdGlvbiYgaWRlbnRTdGFydCwgSlNU
ZXh0UG9zaXRpb24mIGluaXRTdGFydCwgSlNUZXh0UG9zaXRpb24mIGluaXRFbmQpCit0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYgY29udGV4dCwgaW50JiBkZWNsYXJh
dGlvbnMsIGNvbnN0IElkZW50aWZpZXIqJiBsYXN0SWRlbnQsIFRyZWVFeHByZXNzaW9uJiBsYXN0
SW5pdGlhbGl6ZXIsIEpTVGV4dFBvc2l0aW9uJiBpZGVudFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYg
aW5pdFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYgaW5pdEVuZCkKIHsKICAgICBUcmVlRXhwcmVzc2lv
biB2YXJEZWNscyA9IDA7Ci0gICAgY29uc3QgSWRlbnRpZmllciogbGFzdElkZW50OwogICAgIGRv
IHsKLSAgICAgICAgbGFzdElkZW50ID0gMDsKLSAgICAgICAgbGFzdFBhdHRlcm4gPSAwOworICAg
ICAgICBkZWNsYXJhdGlvbnMrKzsKICAgICAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRv
a2VuTG9jYXRpb24oKSk7CiAgICAgICAgIG5leHQoKTsKLSAgICAgICAgVHJlZUV4cHJlc3Npb24g
bm9kZSA9IDA7Ci0gICAgICAgIGRlY2xhcmF0aW9ucysrOwotICAgICAgICBib29sIGhhc0luaXRp
YWxpemVyID0gZmFsc2U7Ci0gICAgICAgIGlmIChtYXRjaChJREVOVCkpIHsKLSAgICAgICAgICAg
IEpTVGV4dFBvc2l0aW9uIHZhclN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7Ci0gICAgICAg
ICAgICBpZGVudFN0YXJ0ID0gdmFyU3RhcnQ7Ci0gICAgICAgICAgICBjb25zdCBJZGVudGlmaWVy
KiBuYW1lID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAgICAgICAgICBsYXN0SWRlbnQgPSBu
YW1lOwotICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAgICAgaGFzSW5pdGlhbGl6ZXIgPSBt
YXRjaChFUVVBTCk7Ci0gICAgICAgICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0V2l0aE5hbWVBbmRN
ZXNzYWdlKGRlY2xhcmVWYXJpYWJsZShuYW1lKSwgIkNhbm5vdCBkZWNsYXJlIGEgdmFyaWFibGUg
bmFtZWQiLCBuYW1lLT5pbXBsKCksICJpbiBzdHJpY3QgbW9kZS4iKTsKLSAgICAgICAgICAgIGNv
bnRleHQuYWRkVmFyKG5hbWUsIChoYXNJbml0aWFsaXplciB8fCAoIW1fYWxsb3dzSW4gJiYgbWF0
Y2goSU5UT0tFTikpKSA/IERlY2xhcmF0aW9uU3RhY2tzOjpIYXNJbml0aWFsaXplciA6IDApOwot
ICAgICAgICAgICAgaWYgKGhhc0luaXRpYWxpemVyKSB7Ci0gICAgICAgICAgICAgICAgSlNUZXh0
UG9zaXRpb24gdmFyRGl2b3QgPSB0b2tlblN0YXJ0UG9zaXRpb24oKSArIDE7Ci0gICAgICAgICAg
ICAgICAgaW5pdFN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICAgICAg
bmV4dChUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7IC8vIGNvbnN1bWUgJz0nCi0gICAg
ICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gaW5pdGlhbGl6ZXIgPSBwYXJzZUFzc2lnbm1lbnRF
eHByZXNzaW9uKGNvbnRleHQpOwotICAgICAgICAgICAgICAgIGluaXRFbmQgPSBsYXN0VG9rZW5F
bmRQb3NpdGlvbigpOwotICAgICAgICAgICAgICAgIGxhc3RJbml0aWFsaXplciA9IGluaXRpYWxp
emVyOwotICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGluaXRpYWxpemVyKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBub2RlID0gY29udGV4dC5jcmVhdGVBc3NpZ25SZXNv
bHZlKGxvY2F0aW9uLCAqbmFtZSwgaW5pdGlhbGl6ZXIsIHZhclN0YXJ0LCB2YXJEaXZvdCwgbGFz
dFRva2VuRW5kUG9zaXRpb24oKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBsYXN0SWRlbnQgPSAwOwotICAgICAgICAgICAgYXV0byBwYXR0ZXJuID0gcGFy
c2VEZWNvbnN0cnVjdGlvblBhdHRlcm48RGVjb25zdHJ1Y3RUb1ZhcmlhYmxlcz4oY29udGV4dCk7
Ci0gICAgICAgICAgICBmYWlsSWZGYWxzZShwYXR0ZXJuKTsKLSAgICAgICAgICAgIGhhc0luaXRp
YWxpemVyID0gbWF0Y2goRVFVQUwpOwotICAgICAgICAgICAgbGFzdFBhdHRlcm4gPSBwYXR0ZXJu
OwotICAgICAgICAgICAgaWYgKGhhc0luaXRpYWxpemVyKSB7Ci0gICAgICAgICAgICAgICAgbmV4
dChUcmVlQnVpbGRlcjo6RG9udEJ1aWxkU3RyaW5ncyk7IC8vIGNvbnN1bWUgJz0nCi0gICAgICAg
ICAgICAgICAgVHJlZUV4cHJlc3Npb24gcmhzID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwot
ICAgICAgICAgICAgICAgIG5vZGUgPSBjb250ZXh0LmNyZWF0ZURlY29uc3RydWN0aW5nQXNzaWdu
bWVudChsb2NhdGlvbiwgcGF0dGVybiwgcmhzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IEFTU0VSVChub2RlKTsKLSAgICAgICAgfQorICAgICAgICBtYXRjaE9yRmFpbChJREVOVCk7CiAg
ICAgICAgIAorICAgICAgICBKU1RleHRQb3NpdGlvbiB2YXJTdGFydCA9IHRva2VuU3RhcnRQb3Np
dGlvbigpOworICAgICAgICBpZGVudFN0YXJ0ID0gdmFyU3RhcnQ7CisgICAgICAgIGNvbnN0IElk
ZW50aWZpZXIqIG5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKKyAgICAgICAgbGFzdElkZW50
ID0gbmFtZTsKKyAgICAgICAgbmV4dCgpOworICAgICAgICBib29sIGhhc0luaXRpYWxpemVyID0g
bWF0Y2goRVFVQUwpOworICAgICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0V2l0aE5hbWVBbmRNZXNz
YWdlKGRlY2xhcmVWYXJpYWJsZShuYW1lKSwgIkNhbm5vdCBkZWNsYXJlIGEgdmFyaWFibGUgbmFt
ZWQiLCBuYW1lLT5pbXBsKCksICJpbiBzdHJpY3QgbW9kZS4iKTsKKyAgICAgICAgY29udGV4dC5h
ZGRWYXIobmFtZSwgKGhhc0luaXRpYWxpemVyIHx8ICghbV9hbGxvd3NJbiAmJiBtYXRjaChJTlRP
S0VOKSkpID8gRGVjbGFyYXRpb25TdGFja3M6Okhhc0luaXRpYWxpemVyIDogMCk7CiAgICAgICAg
IGlmIChoYXNJbml0aWFsaXplcikgeworICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gdmFyRGl2
b3QgPSB0b2tlblN0YXJ0UG9zaXRpb24oKSArIDE7CisgICAgICAgICAgICBpbml0U3RhcnQgPSB0
b2tlblN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgICAgIG5leHQoVHJlZUJ1aWxkZXI6OkRvbnRC
dWlsZFN0cmluZ3MpOyAvLyBjb25zdW1lICc9JworICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24g
aW5pdGlhbGl6ZXIgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOworICAgICAg
ICAgICAgaW5pdEVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CisgICAgICAgICAgICBsYXN0
SW5pdGlhbGl6ZXIgPSBpbml0aWFsaXplcjsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNlKGluaXRp
YWxpemVyKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gbm9kZSA9
IGNvbnRleHQuY3JlYXRlQXNzaWduUmVzb2x2ZShsb2NhdGlvbiwgKm5hbWUsIGluaXRpYWxpemVy
LCB2YXJTdGFydCwgdmFyRGl2b3QsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwogICAgICAgICAg
ICAgaWYgKCF2YXJEZWNscykKICAgICAgICAgICAgICAgICB2YXJEZWNscyA9IG5vZGU7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgdmFyRGVjbHMgPSBjb250ZXh0LmNvbWJpbmVD
b21tYU5vZGVzKGxvY2F0aW9uLCB2YXJEZWNscywgbm9kZSk7CiAgICAgICAgIH0KICAgICB9IHdo
aWxlIChtYXRjaChDT01NQSkpOwotICAgIGlmIChsYXN0SWRlbnQpCi0gICAgICAgIGxhc3RQYXR0
ZXJuID0gY3JlYXRlQmluZGluZ1BhdHRlcm48RGVjb25zdHJ1Y3RUb1ZhcmlhYmxlcz4oY29udGV4
dCwgKmxhc3RJZGVudCwgMCk7CiAgICAgcmV0dXJuIHZhckRlY2xzOwogfQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgTGV4ZXJUeXBlPgotdGVtcGxhdGUgPERlY29uc3RydWN0aW9uS2luZCBraW5kLCBj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZURlY29uc3RydWN0aW9uUGF0dGVybiBQYXJzZXI8TGV4ZXJU
eXBlPjo6Y3JlYXRlQmluZGluZ1BhdHRlcm4oVHJlZUJ1aWxkZXImIGNvbnRleHQsIGNvbnN0IElk
ZW50aWZpZXImIG5hbWUsIGludCBkZXB0aCkKLXsKLSAgICBBU1NFUlQoIW5hbWUuaXNFbXB0eSgp
KTsKLSAgICBBU1NFUlQoIW5hbWUuaXNOdWxsKCkpOwotICAgIAotICAgIEFTU0VSVChuYW1lLmlt
cGwoKS0+aXNJZGVudGlmaWVyKCkpOwotICAgIGlmIChkZXB0aCkgewotICAgICAgICBpZiAoa2lu
ZCA9PSBEZWNvbnN0cnVjdFRvVmFyaWFibGVzKQotICAgICAgICAgICAgZmFpbElmRmFsc2VJZlN0
cmljdFdpdGhOYW1lQW5kTWVzc2FnZShkZWNsYXJlVmFyaWFibGUoJm5hbWUpLCAiQ2Fubm90IGRl
Y29uc3RydWN0IHRvIGEgdmFyaWFibGUgbmFtZWQiLCBuYW1lLmltcGwoKSwgIi4iKTsKLSAgICAg
ICAgaWYgKGtpbmQgPT0gRGVjb25zdHJ1Y3RUb1BhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIGF1
dG8gYmluZGluZ1Jlc3VsdCA9IGRlY2xhcmVCb3VuZFBhcmFtZXRlcigmbmFtZSk7Ci0gICAgICAg
ICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0V2l0aE5hbWVBbmRNZXNzYWdlKGJpbmRpbmdSZXN1bHQg
IT0gU2NvcGU6OlN0cmljdEJpbmRpbmdGYWlsZWQsICJDYW5ub3QgZGVjb25zdHJ1Y3QgdG8gYSBw
YXJhbWV0ZXIgbmFtZWQiLCBuYW1lLmltcGwoKSwgImluIHN0cmljdCBtb2RlLiIpOwotICAgICAg
ICAgICAgZmFpbElmRmFsc2VXaXRoTmFtZUFuZE1lc3NhZ2UoYmluZGluZ1Jlc3VsdCAhPSBTY29w
ZTo6QmluZGluZ0ZhaWxlZCwgIkNhbm5vdCBkZWNvbnN0cnVjdCB0byBhIHBhcmFtZXRlciBuYW1l
ZCIsIG5hbWUuaW1wbCgpLCAiLiIpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRleHQuYWRkVmFy
KCZuYW1lLCBraW5kID09IERlY29uc3RydWN0VG9QYXJhbWV0ZXJzID8gMCA6IERlY2xhcmF0aW9u
U3RhY2tzOjpIYXNJbml0aWFsaXplcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGtpbmQg
PT0gRGVjb25zdHJ1Y3RUb1ZhcmlhYmxlcykgewotICAgICAgICAgICAgZmFpbElmRmFsc2VJZlN0
cmljdFdpdGhOYW1lQW5kTWVzc2FnZShkZWNsYXJlVmFyaWFibGUoJm5hbWUpLCAiQ2Fubm90IGRl
Y2xhcmUgYSB2YXJpYWJsZSBuYW1lZCIsIG5hbWUuaW1wbCgpLCAiaW4gc3RyaWN0IG1vZGUuIik7
Ci0gICAgICAgICAgICBjb250ZXh0LmFkZFZhcigmbmFtZSwgRGVjbGFyYXRpb25TdGFja3M6Okhh
c0luaXRpYWxpemVyKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGtpbmQgPT0g
RGVjb25zdHJ1Y3RUb1BhcmFtZXRlcnMpCi0gICAgICAgICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0
V2l0aE5hbWVBbmRNZXNzYWdlKGRlY2xhcmVQYXJhbWV0ZXIoJm5hbWUpLCAiQ2Fubm90IGRlY2xh
cmUgYSBwYXJhbWV0ZXIgbmFtZWQiLCBuYW1lLmltcGwoKSwgImluIHN0cmljdCBtb2RlLiIpOwot
ICAgIH0KLSAgICByZXR1cm4gY29udGV4dC5jcmVhdGVCaW5kaW5nTG9jYXRpb24obV90b2tlbi5t
X2xvY2F0aW9uLCBuYW1lLCBtX3Rva2VuLm1fZW5kUG9zaXRpb24sIG1fdG9rZW4ubV9zdGFydFBv
c2l0aW9uLCBtX3Rva2VuLm1fZW5kUG9zaXRpb24pOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
TGV4ZXJUeXBlPgotdGVtcGxhdGUgPERlY29uc3RydWN0aW9uS2luZCBraW5kLCBjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZURlY29uc3RydWN0aW9uUGF0dGVybiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VEZWNvbnN0cnVjdGlvblBhdHRlcm4oVHJlZUJ1aWxkZXImIGNvbnRleHQsIGludCBkZXB0aCkK
LXsKLSAgICBmYWlsSWZTdGFja092ZXJmbG93KCk7Ci0gICAgaW50IG5vbkxIU0NvdW50ID0gbV9u
b25MSFNDb3VudDsKLSAgICBUcmVlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuIHBhdHRlcm47Ci0gICAg
c3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgewotICAgIGNhc2UgT1BFTkJSQUNLRVQ6IHsKLSAgICAg
ICAgYXV0byBhcnJheVBhdHRlcm4gPSBjb250ZXh0LmNyZWF0ZUFycmF5UGF0dGVybihtX3Rva2Vu
Lm1fbG9jYXRpb24pOwotICAgICAgICBuZXh0KCk7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAg
IHdoaWxlIChtYXRjaChDT01NQSkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmFwcGVuZEFy
cmF5UGF0dGVyblNraXBFbnRyeShhcnJheVBhdHRlcm4sIG1fdG9rZW4ubV9sb2NhdGlvbik7Ci0g
ICAgICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmFpbElm
VHJ1ZShoYXNFcnJvcigpKTsKLSAgICAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbiA9
IG1fdG9rZW4ubV9sb2NhdGlvbjsKLSAgICAgICAgICAgIGF1dG8gaW5uZXJQYXR0ZXJuID0gcGFy
c2VEZWNvbnN0cnVjdGlvblBhdHRlcm48a2luZD4oY29udGV4dCwgZGVwdGggKyAxKTsKLSAgICAg
ICAgICAgIGZhaWxJZkZhbHNlKGlubmVyUGF0dGVybik7Ci0gICAgICAgICAgICBjb250ZXh0LmFw
cGVuZEFycmF5UGF0dGVybkVudHJ5KGFycmF5UGF0dGVybiwgbG9jYXRpb24sIGlubmVyUGF0dGVy
bik7Ci0gICAgICAgIH0gd2hpbGUgKGNvbnN1bWUoQ09NTUEpKTsKLSAgICAgICAgY29uc3VtZU9y
RmFpbChDTE9TRUJSQUNLRVQpOwotICAgICAgICBwYXR0ZXJuID0gYXJyYXlQYXR0ZXJuOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBPUEVOQlJBQ0U6IHsKLSAgICAgICAgbmV4dCgp
OwotICAgICAgICBhdXRvIG9iamVjdFBhdHRlcm4gPSBjb250ZXh0LmNyZWF0ZU9iamVjdFBhdHRl
cm4obV90b2tlbi5tX2xvY2F0aW9uKTsKLSAgICAgICAgYm9vbCB3YXNTdHJpbmcgPSBmYWxzZTsK
LSAgICAgICAgZG8gewotICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWU7Ci0gICAg
ICAgICAgICBUcmVlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuIGlubmVyUGF0dGVybiA9IDA7Ci0gICAg
ICAgICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24gPSBtX3Rva2VuLm1fbG9jYXRpb247Ci0g
ICAgICAgICAgICBpZiAobWF0Y2goSURFTlQpKSB7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lID0gKm1fdG9rZW4ubV9kYXRhLmlkZW50OwotICAgICAgICAgICAgICAgIG5leHQoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoY29uc3VtZShDT0xPTikpCi0gICAgICAgICAgICAgICAgICAgIGlu
bmVyUGF0dGVybiA9IHBhcnNlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuPGtpbmQ+KGNvbnRleHQsIGRl
cHRoICsgMSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBpbm5l
clBhdHRlcm4gPSBjcmVhdGVCaW5kaW5nUGF0dGVybjxraW5kPihjb250ZXh0LCBwcm9wZXJ0eU5h
bWUsIGRlcHRoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNo
IChtX3Rva2VuLm1fdHlwZSkgewotICAgICAgICAgICAgICAgIGNhc2UgTlVNQkVSOgotICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKG1fdm0sIG1fdG9r
ZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgY2FzZSBTVFJJTkc6Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZSA9ICptX3Rva2VuLm1fZGF0YS5pZGVudDsKLSAgICAgICAgICAgICAgICAgICAgd2FzU3RyaW5n
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgZmFpbElmVHJ1ZSghKG1fdG9rZW4ubV90eXBlICYg
S2V5d29yZFRva2VuRmxhZykpOwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSAq
bV90b2tlbi5tX2RhdGEuaWRlbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuZXh0KCk7Ci0gICAgICAgICAgICAgICAgY29u
c3VtZU9yRmFpbChDT0xPTik7Ci0gICAgICAgICAgICAgICAgaW5uZXJQYXR0ZXJuID0gcGFyc2VE
ZWNvbnN0cnVjdGlvblBhdHRlcm48a2luZD4oY29udGV4dCwgZGVwdGggKyAxKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKGlubmVyUGF0dGVybik7Ci0gICAgICAgICAg
ICBjb250ZXh0LmFwcGVuZE9iamVjdFBhdHRlcm5FbnRyeShvYmplY3RQYXR0ZXJuLCBsb2NhdGlv
biwgd2FzU3RyaW5nLCBwcm9wZXJ0eU5hbWUsIGlubmVyUGF0dGVybik7Ci0gICAgICAgIH0gd2hp
bGUgKGNvbnN1bWUoQ09NTUEpKTsKLSAgICAgICAgY29uc3VtZU9yRmFpbChDTE9TRUJSQUNFKTsK
LSAgICAgICAgcGF0dGVybiA9IG9iamVjdFBhdHRlcm47Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQpOwotICAgICAgICBw
YXR0ZXJuID0gY3JlYXRlQmluZGluZ1BhdHRlcm48a2luZD4oY29udGV4dCwgKm1fdG9rZW4ubV9k
YXRhLmlkZW50LCBkZXB0aCk7Ci0gICAgICAgIG5leHQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIH0KLSAgICBtX25vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7Ci0gICAgcmV0dXJuIHBh
dHRlcm47Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVDb25zdERlY2xMaXN0IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUNvbnN0RGVjbGFyYXRpb25MaXN0KFRyZWVCdWlsZGVyJiBjb250ZXh0KQogewogICAgIGZhaWxJ
ZlRydWUoc3RyaWN0TW9kZSgpKTsKQEAgLTQ4MSw5ICszNTEsMTAgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgIGlmIChtYXRjaChWQVIpKSB7CiAgICAgICAg
IC8qCiAgICAgICAgICBmb3IgKHZhciBJREVOVCBpbiBleHByZXNzaW9uKSBzdGF0ZW1lbnQKKyAg
ICAgICAgIGZvciAodmFyIElERU5UID0gZXhwcmVzc2lvbiBpbiBleHByZXNzaW9uKSBzdGF0ZW1l
bnQKICAgICAgICAgIGZvciAodmFyIHZhckRlY2xhcmF0aW9uTGlzdDsgZXhwcmVzc2lvbk9wdDsg
ZXhwcmVzc2lvbk9wdCkKICAgICAgICAgICovCi0gICAgICAgIFRyZWVEZWNvbnN0cnVjdGlvblBh
dHRlcm4gZm9ySW5UYXJnZXQgPSAwOworICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBmb3JJblRh
cmdldCA9IDA7CiAgICAgICAgIFRyZWVFeHByZXNzaW9uIGZvckluSW5pdGlhbGl6ZXIgPSAwOwog
ICAgICAgICBtX2FsbG93c0luID0gZmFsc2U7CiAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGluaXRT
dGFydDsKQEAgLTQ5OCw3ICszNjksNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVTdGF0ZW1lCiAgICAgICAgIAogICAgICAgICBmYWlsSWZGYWxzZShkZWNsYXJhdGlvbnMgPT0g
MSk7CiAgICAgICAgIGZhaWxJZlRydWVXaXRoTWVzc2FnZShmb3JJbkluaXRpYWxpemVyLCAiQ2Fu
bm90IHVzZSBpbml0aWFsaXNlciBzeW50YXggaW4gYSBmb3ItaW4gbG9vcCIpOwotICAgICAgICAK
KwogICAgICAgICAvLyBIYW5kbGUgZm9yLWluIHdpdGggdmFyIGRlY2xhcmF0aW9uCiAgICAgICAg
IEpTVGV4dFBvc2l0aW9uIGluTG9jYXRpb24gPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICAg
ICAgY29uc3VtZU9yRmFpbChJTlRPS0VOKTsKQEAgLTUxNSw2ICszODYsNyBAQCB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgIFRyZWVTdGF0ZW1lbnQgc3Rh
dGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoY29udGV4dCwgdW51c2VkKTsKICAgICAgICAgZW5kTG9v
cCgpOwogICAgICAgICBmYWlsSWZGYWxzZShzdGF0ZW1lbnQpOworICAgICAgICAKICAgICAgICAg
cmV0dXJuIGNvbnRleHQuY3JlYXRlRm9ySW5Mb29wKGxvY2F0aW9uLCBmb3JJblRhcmdldCwgZXhw
ciwgc3RhdGVtZW50LCBkZWNsc1N0YXJ0LCBpbkxvY2F0aW9uLCBleHByRW5kLCBzdGFydExpbmUs
IGVuZExpbmUpOwogICAgIH0KICAgICAKQEAgLTkwMCwxNCArNzcyLDE4IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5
cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZvcm1hbFBhcmFtZXRlcnMoVHJlZUJ1aWxkZXImIGNv
bnRleHQpCiB7Ci0gICAgYXV0byBwYXJhbWV0ZXIgPSBwYXJzZURlY29uc3RydWN0aW9uUGF0dGVy
bjxEZWNvbnN0cnVjdFRvUGFyYW1ldGVycz4oY29udGV4dCk7Ci0gICAgZmFpbElmRmFsc2UocGFy
YW1ldGVyKTsKLSAgICBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBsaXN0ID0gY29udGV4dC5jcmVh
dGVGb3JtYWxQYXJhbWV0ZXJMaXN0KHBhcmFtZXRlcik7CisgICAgbWF0Y2hPckZhaWwoSURFTlQp
OworICAgIGZhaWxJZkZhbHNlSWZTdHJpY3RXaXRoTmFtZUFuZE1lc3NhZ2UoZGVjbGFyZVBhcmFt
ZXRlcihtX3Rva2VuLm1fZGF0YS5pZGVudCksICJDYW5ub3QgZGVjbGFyZSBhIHBhcmFtZXRlciBu
YW1lZCIsIG1fdG9rZW4ubV9kYXRhLmlkZW50LT5pbXBsKCksICIgaW4gc3RyaWN0IG1vZGUiKTsK
KyAgICBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBsaXN0ID0gY29udGV4dC5jcmVhdGVGb3JtYWxQ
YXJhbWV0ZXJMaXN0KCptX3Rva2VuLm1fZGF0YS5pZGVudCk7CiAgICAgVHJlZUZvcm1hbFBhcmFt
ZXRlckxpc3QgdGFpbCA9IGxpc3Q7Ci0gICAgd2hpbGUgKGNvbnN1bWUoQ09NTUEpKSB7Ci0gICAg
ICAgIHBhcmFtZXRlciA9IHBhcnNlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuPERlY29uc3RydWN0VG9Q
YXJhbWV0ZXJzPihjb250ZXh0KTsKLSAgICAgICAgZmFpbElmRmFsc2UocGFyYW1ldGVyKTsKLSAg
ICAgICAgdGFpbCA9IGNvbnRleHQuY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdCh0YWlsLCBwYXJh
bWV0ZXIpOworICAgIG5leHQoKTsKKyAgICB3aGlsZSAobWF0Y2goQ09NTUEpKSB7CisgICAgICAg
IG5leHQoKTsKKyAgICAgICAgbWF0Y2hPckZhaWwoSURFTlQpOworICAgICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OworICAgICAgICBmYWlsSWZGYWxz
ZUlmU3RyaWN0V2l0aE5hbWVBbmRNZXNzYWdlKGRlY2xhcmVQYXJhbWV0ZXIoaWRlbnQpLCAiQ2Fu
bm90IGRlY2xhcmUgYSBwYXJhbWV0ZXIgbmFtZWQiLCBpZGVudC0+aW1wbCgpLCAiaW4gc3RyaWN0
IG1vZGUiKTsKKyAgICAgICAgbmV4dCgpOworICAgICAgICB0YWlsID0gY29udGV4dC5jcmVhdGVG
b3JtYWxQYXJhbWV0ZXJMaXN0KHRhaWwsICppZGVudCk7CiAgICAgfQogICAgIHJldHVybiBsaXN0
OwogfQpAQCAtMTI3OSw3ICsxMTU1LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyZWVCdWlsZGVy
PiBUcmVlRXhwcgogICAgICAgICAgICAgZGVjbGFyZVdyaXRlKG1fbGFzdElkZW50aWZpZXIpOwog
ICAgICAgICAgICAgbV9sYXN0SWRlbnRpZmllciA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgbGhz
ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICAgICAgbGhzID0gcGFy
c2VDb25kaXRpb25hbEV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgICAgIGZhaWxJZkZhbHNlKGxo
cyk7CiAgICAgICAgIGlmIChpbml0aWFsTm9uTEhTQ291bnQgIT0gbV9ub25MSFNDb3VudCkKICAg
ICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5o
CShyZXZpc2lvbiAxNTY3NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw2IEBAIGNsYXNzIFNvdXJjZUNvZGU7CiAj
ZGVmaW5lIFRyZWVGdW5jdGlvbkJvZHkgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkZ1bmN0aW9uQm9k
eQogI2RlZmluZSBUcmVlUHJvcGVydHkgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OlByb3BlcnR5CiAj
ZGVmaW5lIFRyZWVQcm9wZXJ0eUxpc3QgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OlByb3BlcnR5TGlz
dAotI2RlZmluZSBUcmVlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuIHR5cGVuYW1lIFRyZWVCdWlsZGVy
OjpEZWNvbnN0cnVjdGlvblBhdHRlcm4KIAogQ09NUElMRV9BU1NFUlQoTGFzdFVudGFnZ2VkVG9r
ZW4gPCA2NCwgTGVzc1RoYW42NFVudGFnZ2VkVG9rZW5zKTsKIApAQCAtMjI5LDI2ICsyMjgsNiBA
QCBzdHJ1Y3QgU2NvcGUgewogICAgICAgICAgICAgbV9zaGFkb3dzQXJndW1lbnRzID0gdHJ1ZTsK
ICAgICAgICAgcmV0dXJuIGlzVmFsaWRTdHJpY3RNb2RlOwogICAgIH0KLSAgICAKLSAgICBlbnVt
IEJpbmRpbmdSZXN1bHQgewotICAgICAgICBCaW5kaW5nRmFpbGVkLAotICAgICAgICBTdHJpY3RC
aW5kaW5nRmFpbGVkLAotICAgICAgICBCaW5kaW5nU3VjY2VlZGVkCi0gICAgfTsKLSAgICBCaW5k
aW5nUmVzdWx0IGRlY2xhcmVCb3VuZFBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVyKiBpZGVudCkK
LSAgICB7Ci0gICAgICAgIGJvb2wgaXNBcmd1bWVudHMgPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5h
cmd1bWVudHMgPT0gKmlkZW50OwotICAgICAgICBib29sIG5ld0VudHJ5ID0gbV9kZWNsYXJlZFZh
cmlhYmxlcy5hZGQoaWRlbnQtPnN0cmluZygpLmltcGwoKSkuaXNOZXdFbnRyeTsKLSAgICAgICAg
Ym9vbCBpc1ZhbGlkU3RyaWN0TW9kZSA9IG5ld0VudHJ5ICYmIG1fdm0tPnByb3BlcnR5TmFtZXMt
PmV2YWwgIT0gKmlkZW50ICYmICFpc0FyZ3VtZW50czsKLSAgICAgICAgbV9pc1ZhbGlkU3RyaWN0
TW9kZSA9IG1faXNWYWxpZFN0cmljdE1vZGUgJiYgaXNWYWxpZFN0cmljdE1vZGU7Ci0gICAgCi0g
ICAgICAgIGlmIChpc0FyZ3VtZW50cykKLSAgICAgICAgICAgIG1fc2hhZG93c0FyZ3VtZW50cyA9
IHRydWU7Ci0gICAgICAgIGlmICghbmV3RW50cnkpCi0gICAgICAgICAgICByZXR1cm4gQmluZGlu
Z0ZhaWxlZDsKLSAgICAgICAgcmV0dXJuIGlzVmFsaWRTdHJpY3RNb2RlID8gQmluZGluZ1N1Y2Nl
ZWRlZCA6IFN0cmljdEJpbmRpbmdGYWlsZWQ7Ci0gICAgfQotCiAKICAgICB2b2lkIHVzZVZhcmlh
YmxlKGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBib29sIGlzRXZhbCkKICAgICB7CkBAIC04ODIs
NyArODYxLDYgQEAgcHJpdmF0ZToKICAgICBib29sIHN0cmljdE1vZGUoKSB7IHJldHVybiBjdXJy
ZW50U2NvcGUoKS0+c3RyaWN0TW9kZSgpOyB9CiAgICAgYm9vbCBpc1ZhbGlkU3RyaWN0TW9kZSgp
IHsgcmV0dXJuIGN1cnJlbnRTY29wZSgpLT5pc1ZhbGlkU3RyaWN0TW9kZSgpOyB9CiAgICAgYm9v
bCBkZWNsYXJlUGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXIqIGlkZW50KSB7IHJldHVybiBjdXJy
ZW50U2NvcGUoKS0+ZGVjbGFyZVBhcmFtZXRlcihpZGVudCk7IH0KLSAgICBTY29wZTo6QmluZGlu
Z1Jlc3VsdCBkZWNsYXJlQm91bmRQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciogaWRlbnQpIHsg
cmV0dXJuIGN1cnJlbnRTY29wZSgpLT5kZWNsYXJlQm91bmRQYXJhbWV0ZXIoaWRlbnQpOyB9CiAg
ICAgYm9vbCBicmVha0lzVmFsaWQoKQogICAgIHsKICAgICAgICAgU2NvcGVSZWYgY3VycmVudCA9
IGN1cnJlbnRTY29wZSgpOwpAQCAtOTUzLDExICs5MzEsOCBAQCBwcml2YXRlOgogICAgIHRlbXBs
YXRlIDxib29sIHN0cmljdCwgY2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZVBy
b3BlcnR5IHBhcnNlUHJvcGVydHkoVHJlZUJ1aWxkZXImKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUZ1bmN0aW9uQm9keSBwYXJzZUZ1bmN0aW9u
Qm9keShUcmVlQnVpbGRlciYpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxX
QVlTX0lOTElORSBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBwYXJzZUZvcm1hbFBhcmFtZXRlcnMo
VHJlZUJ1aWxkZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19J
TkxJTkUgVHJlZUV4cHJlc3Npb24gcGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXIm
LCBpbnQmIGRlY2xhcmF0aW9ucywgVHJlZURlY29uc3RydWN0aW9uUGF0dGVybiYgbGFzdFBhdHRl
cm4sIFRyZWVFeHByZXNzaW9uJiBsYXN0SW5pdGlhbGl6ZXIsIEpTVGV4dFBvc2l0aW9uJiBpZGVu
dFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYgaW5pdFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYgaW5pdEVu
ZCk7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVD
b25zdERlY2xMaXN0IHBhcnNlQ29uc3REZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImKTsKLQot
ICAgIHRlbXBsYXRlIDxEZWNvbnN0cnVjdGlvbktpbmQsIGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdB
WVNfSU5MSU5FIFRyZWVEZWNvbnN0cnVjdGlvblBhdHRlcm4gY3JlYXRlQmluZGluZ1BhdHRlcm4o
VHJlZUJ1aWxkZXImLCBjb25zdCBJZGVudGlmaWVyJiwgaW50IGRlcHRoKTsKLSAgICB0ZW1wbGF0
ZSA8RGVjb25zdHJ1Y3Rpb25LaW5kLCBjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZURlY29uc3RydWN0
aW9uUGF0dGVybiBwYXJzZURlY29uc3RydWN0aW9uUGF0dGVybihUcmVlQnVpbGRlciYsIGludCBk
ZXB0aCA9IDApOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElO
RSBUcmVlRXhwcmVzc2lvbiBwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYsIGlu
dCYgZGVjbGFyYXRpb25zLCBjb25zdCBJZGVudGlmaWVyKiYgbGFzdElkZW50LCBUcmVlRXhwcmVz
c2lvbiYgbGFzdEluaXRpYWxpemVyLCBKU1RleHRQb3NpdGlvbiYgaWRlbnRTdGFydCwgSlNUZXh0
UG9zaXRpb24mIGluaXRTdGFydCwgSlNUZXh0UG9zaXRpb24mIGluaXRFbmQpOworICAgIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlQ29uc3REZWNsTGlzdCBw
YXJzZUNvbnN0RGVjbGFyYXRpb25MaXN0KFRyZWVCdWlsZGVyJiBjb250ZXh0KTsKICAgICB0ZW1w
bGF0ZSA8RnVuY3Rpb25SZXF1aXJlbWVudHMsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUs
IGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIHBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiwg
Y29uc3QgSWRlbnRpZmllciomLCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCYsIFRyZWVGdW5jdGlv
bkJvZHkmLCB1bnNpZ25lZCYgb3BlbkJyYWNlT2Zmc2V0LCB1bnNpZ25lZCYgY2xvc2VCcmFjZU9m
ZnNldCwgaW50JiBib2R5U3RhcnRMaW5lLCB1bnNpZ25lZCYgYm9keVN0YXJ0Q29sdW1uKTsKICAg
ICBBTFdBWVNfSU5MSU5FIGludCBpc0JpbmFyeU9wZXJhdG9yKEpTVG9rZW5UeXBlKTsKICAgICBi
b29sIGFsbG93QXV0b21hdGljU2VtaWNvbG9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkocmV2aXNpb24gMTU2NzU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExMSwxMCArMTExLDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgaW50IENsYXVzZTsKICAgICB0
eXBlZGVmIGludCBDb25zdERlY2xMaXN0OwogICAgIHR5cGVkZWYgaW50IEJpbmFyeU9wZXJhbmQ7
Ci0gICAgdHlwZWRlZiBpbnQgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuOwotICAgIHR5cGVkZWYgaW50
IEFycmF5UGF0dGVybjsKLSAgICB0eXBlZGVmIGludCBPYmplY3RQYXR0ZXJuOwotCisgICAgCiAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgQ3JlYXRlc0FTVCA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25z
dCBib29sIE5lZWRzRnJlZVZhcmlhYmxlSW5mbyA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdCBi
b29sIENhblVzZUZ1bmN0aW9uQ2FjaGUgPSB0cnVlOwpAQCAtMTc2LDggKzE3Myw4IEBAIHB1Ymxp
YzoKICAgICBpbnQgY3JlYXRlUHJvcGVydHlMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFBy
b3BlcnR5LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlRWxlbWVudExpc3QoaW50
LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlRWxlbWVudExpc3QoaW50LCBpbnQs
IGludCkgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVGb3JtYWxQYXJhbWV0ZXJMaXN0KERl
Y29uc3RydWN0aW9uUGF0dGVybikgeyByZXR1cm4gMTsgfQotICAgIGludCBjcmVhdGVGb3JtYWxQ
YXJhbWV0ZXJMaXN0KGludCwgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuKSB7IHJldHVybiAxOyB9Cisg
ICAgaW50IGNyZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3QoY29uc3QgSWRlbnRpZmllciYpIHsgcmV0
dXJuIDE7IH0KKyAgICBpbnQgY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdChpbnQsIGNvbnN0IElk
ZW50aWZpZXImKSB7IHJldHVybiAxOyB9CiAgICAgaW50IGNyZWF0ZUNsYXVzZShpbnQsIGludCkg
eyByZXR1cm4gMTsgfQogICAgIGludCBjcmVhdGVDbGF1c2VMaXN0KGludCkgeyByZXR1cm4gMTsg
fQogICAgIGludCBjcmVhdGVDbGF1c2VMaXN0KGludCwgaW50KSB7IHJldHVybiAxOyB9CkBAIC0x
ODgsNiArMTg1LDcgQEAgcHVibGljOgogICAgIGludCBjcmVhdGVJZlN0YXRlbWVudChjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBp
bnQgY3JlYXRlSWZTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGlu
dCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlRm9yTG9vcChjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAx
OyB9CisgICAgaW50IGNyZWF0ZUZvckluTG9vcChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25z
dCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVy
biAxOyB9CiAgICAgaW50IGNyZWF0ZUZvckluTG9vcChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBp
bnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gMTsgfQogICAg
IGludCBjcmVhdGVFbXB0eVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7IHJldHVy
biAxOyB9CiAgICAgaW50IGNyZWF0ZVZhclN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiAxOyB9CkBAIC0yNTIsMzIgKzI1MCw3IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBJZGVudGlmaWVyJiBnZXROYW1lKGNvbnN0IFByb3BlcnR5JiBwcm9wZXJ0
eSkgY29uc3QgeyBBU1NFUlQocHJvcGVydHkubmFtZSk7IHJldHVybiAqcHJvcGVydHkubmFtZTsg
fQogICAgIFByb3BlcnR5Tm9kZTo6VHlwZSBnZXRUeXBlKGNvbnN0IFByb3BlcnR5JiBwcm9wZXJ0
eSkgY29uc3QgeyByZXR1cm4gcHJvcGVydHkudHlwZTsgfQogICAgIGJvb2wgaXNSZXNvbHZlKEV4
cHJlc3Npb25UeXBlIGV4cHIpIGNvbnN0IHsgcmV0dXJuIGV4cHIgPT0gUmVzb2x2ZUV4cHIgfHwg
ZXhwciA9PSBSZXNvbHZlRXZhbEV4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVEZWNv
bnN0cnVjdGluZ0Fzc2lnbm1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBFeHByZXNz
aW9uVHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KICAgICAKLSAgICBBcnJh
eVBhdHRlcm4gY3JlYXRlQXJyYXlQYXR0ZXJuKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpCi0gICAg
ewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgdm9pZCBhcHBlbmRBcnJheVBhdHRlcm5T
a2lwRW50cnkoQXJyYXlQYXR0ZXJuLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mKQotICAgIHsKLSAg
ICB9Ci0gICAgdm9pZCBhcHBlbmRBcnJheVBhdHRlcm5FbnRyeShBcnJheVBhdHRlcm4sIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIERlY29uc3RydWN0aW9uUGF0dGVybikKLSAgICB7Ci0gICAgfQot
ICAgIE9iamVjdFBhdHRlcm4gY3JlYXRlT2JqZWN0UGF0dGVybihjb25zdCBKU1Rva2VuTG9jYXRp
b24mKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIHZvaWQgYXBwZW5kT2Jq
ZWN0UGF0dGVybkVudHJ5KEFycmF5UGF0dGVybiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgYm9v
bCwgY29uc3QgSWRlbnRpZmllciYsIERlY29uc3RydWN0aW9uUGF0dGVybikKLSAgICB7Ci0gICAg
fQotICAgIERlY29uc3RydWN0aW9uUGF0dGVybiBjcmVhdGVCaW5kaW5nTG9jYXRpb24oY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiwgY29uc3QgSlNUZXh0UG9zaXRpb24mLCBjb25zdCBKU1RleHRQb3NpdGlvbiYpCi0gICAgewot
ICAgICAgICByZXR1cm4gMTsKLSAgICB9CiBwcml2YXRlOgogICAgIGludCBtX3RvcEJpbmFyeUV4
cHI7CiAgICAgaW50IG1fdG9wVW5hcnlUb2tlbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZpc2lvbiAxNTY3NTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAyLDE1ICszMDIsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1N0cmluZ0J1aWxkZXIo
CiAgICAgICAgIH0KICAgICB9CiB9Ci0KLXZvaWQgZXNjYXBlU3RyaW5nVG9CdWlsZGVyKFN0cmlu
Z0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAobWVz
c2FnZS5pczhCaXQoKSkKLSAgICAgICAgYXBwZW5kU3RyaW5nVG9TdHJpbmdCdWlsZGVyKGJ1aWxk
ZXIsIG1lc3NhZ2UuY2hhcmFjdGVyczgoKSwgbWVzc2FnZS5sZW5ndGgoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhcHBlbmRTdHJpbmdUb1N0cmluZ0J1aWxkZXIoYnVpbGRlciwgbWVzc2FnZS5jaGFy
YWN0ZXJzMTYoKSwgbWVzc2FnZS5sZW5ndGgoKSk7Ci19Ci0KKyAgICAKIHZvaWQgU3RyaW5naWZp
ZXI6OmFwcGVuZFF1b3RlZFN0cmluZyhTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQogewogICAgIGludCBsZW5ndGggPSB2YWx1ZS5sZW5ndGgoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgJKHJldmlzaW9uIDE1Njc1
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsOCArNjMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBKU1ZhbHVlIEpTT05QYXJzZShFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKICAg
ICBTdHJpbmcgSlNPTlN0cmluZ2lmeShFeGVjU3RhdGUqLCBKU1ZhbHVlLCB1bnNpZ25lZCBpbmRl
bnQpOwogCi0gICAgdm9pZCBlc2NhcGVTdHJpbmdUb0J1aWxkZXIoU3RyaW5nQnVpbGRlciYsIGNv
bnN0IFN0cmluZyYpOwotICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU09O
T2JqZWN0X2gKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Njc1NikKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDEzLTEwLTAxICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTigxNTY0NjQpOiA1
MCUgcmVncmVzc2lvbiBvbiBTdW5TcGlkZXIvc3RyaW5nLWZhc3RhCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIyMDIKKworICAgICAgICBVbnJldmll
d2VkLCByb2xsIG91dCByMTU2NDY0LgorCisgICAgICAgICoganMvZGVzdHJ1Y3R1cmluZy1hc3Np
Z25tZW50LWV4cGVjdGVkLnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiBqcy9kZXN0cnVjdHVyaW5n
LWFzc2lnbm1lbnQuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBqcy9tb3ppbGxhL3N0cmljdC8x
My4xLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBqcy9tb3ppbGxhL3N0cmljdC9yZWdyZXNzLTUz
MjI1NC1leHBlY3RlZC50eHQ6CisgICAgICAgICoganMvbW96aWxsYS9zdHJpY3Qvc2NyaXB0LXRl
c3RzLzEzLjEuanM6CisgICAgICAgICoganMvcmVncmVzcy9kZXN0cnVjdHVyaW5nLWFyZ3VtZW50
cy1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICoganMvcmVncmVzcy9kZXN0cnVjdHVy
aW5nLWFyZ3VtZW50cy1sZW5ndGgtZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIGpz
L3JlZ3Jlc3MvZGVzdHJ1Y3R1cmluZy1hcmd1bWVudHMtbGVuZ3RoLmh0bWw6IFJlbW92ZWQuCisg
ICAgICAgICoganMvcmVncmVzcy9kZXN0cnVjdHVyaW5nLWFyZ3VtZW50cy5odG1sOiBSZW1vdmVk
LgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZGVzdHJ1Y3R1cmluZy1zd2FwLWV4cGVjdGVkLnR4dDog
UmVtb3ZlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2Rlc3RydWN0dXJpbmctc3dhcC5odG1sOiBS
ZW1vdmVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2Rlc3RydWN0dXJpbmct
YXJndW1lbnRzLWxlbmd0aC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9kZXN0cnVjdHVyaW5nLWFyZ3VtZW50cy5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBq
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9kZXN0cnVjdHVyaW5nLXN3YXAuanM6IFJlbW92ZWQuCisg
ICAgICAgICoganMvc2NyaXB0LXRlc3RzL2Rlc3RydWN0dXJpbmctYXNzaWdubWVudC5qczogUmVt
b3ZlZC4KKyAgICAgICAgKiBzcHV0bmlrL0NvbmZvcm1hbmNlLzEzX0Z1bmN0aW9uX0RlZmluaXRp
b24vUzEzX0E1Lmh0bWw6CisKIDIwMTMtMTAtMDEgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgVGlsZWQgZHJhd2luZyBHcmFwaGljc0xheWVyIHRyZWUg
ZHVtcHMgc2hvdWxkIG1hdGNoIG5vbi10aWxlZCBtb3JlIGNsb3NlbHkKSW5kZXg6IExheW91dFRl
c3RzL2pzL2Rlc3RydWN0dXJpbmctYXNzaWdubWVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvZGVzdHJ1Y3R1cmluZy1hc3NpZ25tZW50LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMTU2NzU2KQorKysgTGF5b3V0VGVzdHMvanMvZGVzdHJ1Y3R1cmluZy1hc3NpZ25t
ZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw2OSArMCwwIEBACi1iYXNpYyB0
ZXN0cyBmb3IgZGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50Ci0KLU9uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KLQotCi1QQVNTIHZhciBbYSxiXT1bJzEnLCcyJ107IHZhciByPWErYjsgciBpcyAnMTIn
Ci1GdW5jdGlvbiBhcyBTdHJpbmc6IChmdW5jdGlvbihbYSxiXSkgeyByZXR1cm4gYStiO30pCi1Q
QVNTIChmdW5jdGlvbihbYSxiXSkgeyByZXR1cm4gYStiO30pKFsnMScsJzInXSkgaXMgJzEyJwot
UEFTUyAoZnVuY3Rpb24gKFthLGJdKSB7IHJldHVybiBhK2I7fSkoWycxJywnMiddKSBpcyAnMTIn
Ci1QQVNTIHZhciB7YSxifT17YTonMScsYjonMid9OyB2YXIgcj1hK2I7IHIgaXMgJzEyJwotRnVu
Y3Rpb24gYXMgU3RyaW5nOiAoZnVuY3Rpb24oe2EsYn0pIHsgcmV0dXJuIGErYjt9KQotUEFTUyAo
ZnVuY3Rpb24oe2EsYn0pIHsgcmV0dXJuIGErYjt9KSh7YTonMScsYjonMid9KSBpcyAnMTInCi1Q
QVNTIChmdW5jdGlvbiAoe2E6YSxiOmJ9KSB7IHJldHVybiBhK2I7fSkoe2E6JzEnLGI6JzInfSkg
aXMgJzEyJwotUEFTUyB2YXIge2M6YSxkOmJ9PXtjOicxJyxkOicyJ307IHZhciByPWErYjsgciBp
cyAnMTInCi1GdW5jdGlvbiBhcyBTdHJpbmc6IChmdW5jdGlvbih7YzphLGQ6Yn0pIHsgcmV0dXJu
IGErYjt9KQotUEFTUyAoZnVuY3Rpb24oe2M6YSxkOmJ9KSB7IHJldHVybiBhK2I7fSkoe2M6JzEn
LGQ6JzInfSkgaXMgJzEyJwotUEFTUyAoZnVuY3Rpb24gKHtjOmEsZDpifSkgeyByZXR1cm4gYSti
O30pKHtjOicxJyxkOicyJ30pIGlzICcxMicKLVBBU1MgdmFyIHtjOmIsZDphfT17YzonMScsZDon
Mid9OyB2YXIgcj1hK2I7IHIgaXMgJzIxJwotRnVuY3Rpb24gYXMgU3RyaW5nOiAoZnVuY3Rpb24o
e2M6YixkOmF9KSB7IHJldHVybiBhK2I7fSkKLVBBU1MgKGZ1bmN0aW9uKHtjOmIsZDphfSkgeyBy
ZXR1cm4gYStiO30pKHtjOicxJyxkOicyJ30pIGlzICcyMScKLVBBU1MgKGZ1bmN0aW9uICh7Yzpi
LGQ6YX0pIHsgcmV0dXJuIGErYjt9KSh7YzonMScsZDonMid9KSBpcyAnMjEnCi1QQVNTIHZhciB7
dHJ1ZTphLGZhbHNlOmIsdW5kZWZpbmVkOmMsbnVsbDpkLGluOmUsZm9yOmYsMS41OmcsJ2ZvbyBi
YXInOmh9PXt0cnVlOidhJyxmYWxzZTonYicsdW5kZWZpbmVkOidjJyxudWxsOidkJyxpbjonZScs
Zm9yOidmJywxLjU6J2cnLCdmb28gYmFyJzonaCd9OyB2YXIgcj1hK2IrYytkK2UrZitnK2g7IHIg
aXMgJ2FiY2RlZmdoJwotRnVuY3Rpb24gYXMgU3RyaW5nOiAoZnVuY3Rpb24oe3RydWU6YSxmYWxz
ZTpiLHVuZGVmaW5lZDpjLG51bGw6ZCxpbjplLGZvcjpmLDEuNTpnLCdmb28gYmFyJzpofSkgeyBy
ZXR1cm4gYStiK2MrZCtlK2YrZytoO30pCi1QQVNTIChmdW5jdGlvbih7dHJ1ZTphLGZhbHNlOmIs
dW5kZWZpbmVkOmMsbnVsbDpkLGluOmUsZm9yOmYsMS41OmcsJ2ZvbyBiYXInOmh9KSB7IHJldHVy
biBhK2IrYytkK2UrZitnK2g7fSkoe3RydWU6J2EnLGZhbHNlOidiJyx1bmRlZmluZWQ6J2MnLG51
bGw6J2QnLGluOidlJyxmb3I6J2YnLDEuNTonZycsJ2ZvbyBiYXInOidoJ30pIGlzICdhYmNkZWZn
aCcKLVBBU1MgKGZ1bmN0aW9uICh7dHJ1ZTphLGZhbHNlOmIsdW5kZWZpbmVkOmMsbnVsbDpkLGlu
OmUsZm9yOmYsMS41OmcsImZvbyBiYXIiOmh9KSB7IHJldHVybiBhK2IrYytkK2UrZitnK2g7fSko
e3RydWU6J2EnLGZhbHNlOidiJyx1bmRlZmluZWQ6J2MnLG51bGw6J2QnLGluOidlJyxmb3I6J2Yn
LDEuNTonZycsJ2ZvbyBiYXInOidoJ30pIGlzICdhYmNkZWZnaCcKLVBBU1MgdmFyIFt7YzphLGQ6
Yn1dPVt7YzonMScsZDonMid9XTsgdmFyIHI9YStiOyByIGlzICcxMicKLUZ1bmN0aW9uIGFzIFN0
cmluZzogKGZ1bmN0aW9uKFt7YzphLGQ6Yn1dKSB7IHJldHVybiBhK2I7fSkKLVBBU1MgKGZ1bmN0
aW9uKFt7YzphLGQ6Yn1dKSB7IHJldHVybiBhK2I7fSkoW3tjOicxJyxkOicyJ31dKSBpcyAnMTIn
Ci1QQVNTIChmdW5jdGlvbiAoW3tjOmEsZDpifV0pIHsgcmV0dXJuIGErYjt9KShbe2M6JzEnLGQ6
JzInfV0pIGlzICcxMicKLVBBU1MgdmFyIHt4Olt7YzphLGQ6Yn1dfT17eDpbe2M6JzEnLGQ6JzIn
fV19OyB2YXIgcj1hK2I7IHIgaXMgJzEyJwotRnVuY3Rpb24gYXMgU3RyaW5nOiAoZnVuY3Rpb24o
e3g6W3tjOmEsZDpifV19KSB7IHJldHVybiBhK2I7fSkKLVBBU1MgKGZ1bmN0aW9uKHt4Olt7Yzph
LGQ6Yn1dfSkgeyByZXR1cm4gYStiO30pKHt4Olt7YzonMScsZDonMid9XX0pIGlzICcxMicKLVBB
U1MgKGZ1bmN0aW9uICh7eDpbe2M6YSxkOmJ9XX0pIHsgcmV0dXJuIGErYjt9KSh7eDpbe2M6JzEn
LGQ6JzInfV19KSBpcyAnMTInCi1QQVNTIHZhciBbYSxiXT1hbkFycmF5OyB2YXIgcj1hK2I7IHIg
aXMgJzEyJwotRnVuY3Rpb24gYXMgU3RyaW5nOiAoZnVuY3Rpb24oW2EsYl0pIHsgcmV0dXJuIGEr
Yjt9KQotUEFTUyAoZnVuY3Rpb24oW2EsYl0pIHsgcmV0dXJuIGErYjt9KShhbkFycmF5KSBpcyAn
MTInCi1QQVNTIChmdW5jdGlvbiAoW2EsYl0pIHsgcmV0dXJuIGErYjt9KShhbkFycmF5KSBpcyAn
MTInCi1QQVNTIHZhciB7YSxifT1hbkFycmF5OyB2YXIgcj1hK2I7IHIgaXMgJzM0JwotRnVuY3Rp
b24gYXMgU3RyaW5nOiAoZnVuY3Rpb24oe2EsYn0pIHsgcmV0dXJuIGErYjt9KQotUEFTUyAoZnVu
Y3Rpb24oe2EsYn0pIHsgcmV0dXJuIGErYjt9KShhbkFycmF5KSBpcyAnMzQnCi1QQVNTIChmdW5j
dGlvbiAoe2E6YSxiOmJ9KSB7IHJldHVybiBhK2I7fSkoYW5BcnJheSkgaXMgJzM0JwotUEFTUyB2
YXIge2E6YSxiOmJ9PWFuQXJyYXk7IHZhciByPWErYjsgciBpcyAnMzQnCi1GdW5jdGlvbiBhcyBT
dHJpbmc6IChmdW5jdGlvbih7YTphLGI6Yn0pIHsgcmV0dXJuIGErYjt9KQotUEFTUyAoZnVuY3Rp
b24oe2E6YSxiOmJ9KSB7IHJldHVybiBhK2I7fSkoYW5BcnJheSkgaXMgJzM0JwotUEFTUyAoZnVu
Y3Rpb24gKHthOmEsYjpifSkgeyByZXR1cm4gYStiO30pKGFuQXJyYXkpIGlzICczNCcKLVBBU1Mg
dmFyIHthLGJ9PWFuT2JqZWN0OyB2YXIgcj1hK2I7IHIgaXMgJzEyJwotRnVuY3Rpb24gYXMgU3Ry
aW5nOiAoZnVuY3Rpb24oe2EsYn0pIHsgcmV0dXJuIGErYjt9KQotUEFTUyAoZnVuY3Rpb24oe2Es
Yn0pIHsgcmV0dXJuIGErYjt9KShhbk9iamVjdCkgaXMgJzEyJwotUEFTUyAoZnVuY3Rpb24gKHth
OmEsYjpifSkgeyByZXR1cm4gYStiO30pKGFuT2JqZWN0KSBpcyAnMTInCi1QQVNTIHZhciB7YTph
LGI6Yn09YW5PYmplY3Q7IHZhciByPWErYjsgciBpcyAnMTInCi1GdW5jdGlvbiBhcyBTdHJpbmc6
IChmdW5jdGlvbih7YTphLGI6Yn0pIHsgcmV0dXJuIGErYjt9KQotUEFTUyAoZnVuY3Rpb24oe2E6
YSxiOmJ9KSB7IHJldHVybiBhK2I7fSkoYW5PYmplY3QpIGlzICcxMicKLVBBU1MgKGZ1bmN0aW9u
ICh7YTphLGI6Yn0pIHsgcmV0dXJuIGErYjt9KShhbk9iamVjdCkgaXMgJzEyJwotUEFTUyB2YXIg
ezA6YSwxOmJ9PWFuT2JqZWN0OyB2YXIgcj1hK2I7IHIgaXMgJzM0JwotRnVuY3Rpb24gYXMgU3Ry
aW5nOiAoZnVuY3Rpb24oezA6YSwxOmJ9KSB7IHJldHVybiBhK2I7fSkKLVBBU1MgKGZ1bmN0aW9u
KHswOmEsMTpifSkgeyByZXR1cm4gYStiO30pKGFuT2JqZWN0KSBpcyAnMzQnCi1QQVNTIChmdW5j
dGlvbiAoezA6YSwxOmJ9KSB7IHJldHVybiBhK2I7fSkoYW5PYmplY3QpIGlzICczNCcKLVBBU1Mg
dmFyIHsnYSc6YSwnYic6Yn09YW5PYmplY3Q7IHZhciByPWErYjsgciBpcyAnMTInCi1GdW5jdGlv
biBhcyBTdHJpbmc6IChmdW5jdGlvbih7J2EnOmEsJ2InOmJ9KSB7IHJldHVybiBhK2I7fSkKLVBB
U1MgKGZ1bmN0aW9uKHsnYSc6YSwnYic6Yn0pIHsgcmV0dXJuIGErYjt9KShhbk9iamVjdCkgaXMg
JzEyJwotUEFTUyAoZnVuY3Rpb24gKHsiYSI6YSwiYiI6Yn0pIHsgcmV0dXJuIGErYjt9KShhbk9i
amVjdCkgaXMgJzEyJwotUEFTUyBhK2IgaXMgJzExMjInCi1QQVNTIGErYiBpcyAnMjIxMScKLVBB
U1MgdGVzdERlY29uc3RydWN0QXJncygnMScsICcyJykgaXMgJzEyJwotUEFTUyB0ZXN0RGVjb25z
dHJ1Y3RBcmdMZW5ndGgoJzEnLCAnMicpIGlzIDIKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKLQotVEVTVCBDT01QTEVURQotCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9kZXN0cnVjdHVy
aW5nLWFzc2lnbm1lbnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9kZXN0cnVj
dHVyaW5nLWFzc2lnbm1lbnQuaHRtbAkocmV2aXNpb24gMTU2NzU2KQorKysgTGF5b3V0VGVzdHMv
anMvZGVzdHJ1Y3R1cmluZy1hc3NpZ25tZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAg
KzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgot
PGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2Rl
c3RydWN0dXJpbmctYXNzaWdubWVudC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9qcy9tb3ppbGxhL3N0cmljdC8xMy4xLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9tb3ppbGxhL3N0cmljdC8xMy4xLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMTU2NzU2KQorKysgTGF5b3V0VGVzdHMvanMvbW96aWxsYS9zdHJpY3QvMTMuMS1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwLDggKzEwLDggQEAgUEFTUyB0cnVlID09
PSB0cnVlCiBQQVNTIEZ1bmN0aW9uKCIndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGYoYSxiLGMsZCxl
LGYsZyxoLGQpIHt9IikgdGhyZXcgZXhjZXB0aW9uIG9mIHR5cGUgU3ludGF4RXJyb3IuCiBQQVNT
ICEhRnVuY3Rpb24oImZ1bmN0aW9uIGYoYSxiLGMsZCxlLGYsZyxoLGQpIHt9IikgaXMgdHJ1ZQog
UEFTUyB0cnVlID09PSB0cnVlCi1QQVNTICEhRnVuY3Rpb24oIid1c2Ugc3RyaWN0JzsgZnVuY3Rp
b24gZihbeCx5XSkge30iKSBpcyB0cnVlCi1QQVNTICEhRnVuY3Rpb24oImZ1bmN0aW9uIGYoW3gs
eV0pIHt9IikgaXMgdHJ1ZQorUEFTUyBGdW5jdGlvbigiJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBm
KFt4LHldKSB7fSIpIHRocmV3IGV4Y2VwdGlvbiBvZiB0eXBlIFN5bnRheEVycm9yLgorUEFTUyBG
dW5jdGlvbigiZnVuY3Rpb24gZihbeCx5XSkge30iKSB0aHJldyBleGNlcHRpb24gb2YgdHlwZSBT
eW50YXhFcnJvci4KIFBBU1MgdHJ1ZSA9PT0gdHJ1ZQogUEFTUyBGdW5jdGlvbigiJ3VzZSBzdHJp
Y3QnOyBmdW5jdGlvbiBmKFt4LHhdKXt9IikgdGhyZXcgZXhjZXB0aW9uIG9mIHR5cGUgU3ludGF4
RXJyb3IuCiBQQVNTIEZ1bmN0aW9uKCJmdW5jdGlvbiBmKFt4LHhdKXt9IikgdGhyZXcgZXhjZXB0
aW9uIG9mIHR5cGUgU3ludGF4RXJyb3IuCkBAIC0zOCwxMCArMzgsMTAgQEAgUEFTUyBGdW5jdGlv
bigiJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBmKAogUEFTUyAhIUZ1bmN0aW9uKCJmdW5jdGlvbiBm
KGV2YWwpe30iKSBpcyB0cnVlCiBQQVNTIHRydWUgPT09IHRydWUKIFBBU1MgRnVuY3Rpb24oIid1
c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZihbZXZhbF0pe30iKSB0aHJldyBleGNlcHRpb24gb2YgdHlw
ZSBTeW50YXhFcnJvci4KLVBBU1MgISFGdW5jdGlvbigiZnVuY3Rpb24gZihbZXZhbF0pe30iKSBp
cyB0cnVlCitQQVNTIEZ1bmN0aW9uKCJmdW5jdGlvbiBmKFtldmFsXSl7fSIpIHRocmV3IGV4Y2Vw
dGlvbiBvZiB0eXBlIFN5bnRheEVycm9yLgogUEFTUyB0cnVlID09PSB0cnVlCiBQQVNTIEZ1bmN0
aW9uKCIndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGYoe3g6ZXZhbH0pe30iKSB0aHJldyBleGNlcHRp
b24gb2YgdHlwZSBTeW50YXhFcnJvci4KLVBBU1MgISFGdW5jdGlvbigiZnVuY3Rpb24gZih7eDpl
dmFsfSl7fSIpIGlzIHRydWUKK1BBU1MgRnVuY3Rpb24oImZ1bmN0aW9uIGYoe3g6ZXZhbH0pe30i
KSB0aHJldyBleGNlcHRpb24gb2YgdHlwZSBTeW50YXhFcnJvci4KIFBBU1MgdHJ1ZSA9PT0gdHJ1
ZQogUEFTUyBGdW5jdGlvbigiJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBldmFsKCl7fSIpIHRocmV3
IGV4Y2VwdGlvbiBvZiB0eXBlIFN5bnRheEVycm9yLgogUEFTUyAhIUZ1bmN0aW9uKCJmdW5jdGlv
biBldmFsKCl7fSIpIGlzIHRydWUKQEAgLTYyLDEwICs2MiwxMCBAQCBQQVNTIEZ1bmN0aW9uKCIn
dXNlIHN0cmljdCc7IChmdW5jdGlvbiBmCiBQQVNTICEhRnVuY3Rpb24oIihmdW5jdGlvbiBmKGV2
YWwpe30pIikgaXMgdHJ1ZQogUEFTUyB0cnVlID09PSB0cnVlCiBQQVNTIEZ1bmN0aW9uKCIndXNl
IHN0cmljdCc7IChmdW5jdGlvbiBmKFtldmFsXSl7fSkiKSB0aHJldyBleGNlcHRpb24gb2YgdHlw
ZSBTeW50YXhFcnJvci4KLVBBU1MgISFGdW5jdGlvbigiKGZ1bmN0aW9uIGYoW2V2YWxdKXt9KSIp
IGlzIHRydWUKK1BBU1MgRnVuY3Rpb24oIihmdW5jdGlvbiBmKFtldmFsXSl7fSkiKSB0aHJldyBl
eGNlcHRpb24gb2YgdHlwZSBTeW50YXhFcnJvci4KIFBBU1MgdHJ1ZSA9PT0gdHJ1ZQogUEFTUyBG
dW5jdGlvbigiJ3VzZSBzdHJpY3QnOyAoZnVuY3Rpb24gZih7eDpldmFsfSl7fSkiKSB0aHJldyBl
eGNlcHRpb24gb2YgdHlwZSBTeW50YXhFcnJvci4KLVBBU1MgISFGdW5jdGlvbigiKGZ1bmN0aW9u
IGYoe3g6ZXZhbH0pe30pIikgaXMgdHJ1ZQorUEFTUyBGdW5jdGlvbigiKGZ1bmN0aW9uIGYoe3g6
ZXZhbH0pe30pIikgdGhyZXcgZXhjZXB0aW9uIG9mIHR5cGUgU3ludGF4RXJyb3IuCiBQQVNTIHRy
dWUgPT09IHRydWUKIFBBU1MgRnVuY3Rpb24oIid1c2Ugc3RyaWN0JzsgKGZ1bmN0aW9uIGV2YWwo
KXt9KSIpIHRocmV3IGV4Y2VwdGlvbiBvZiB0eXBlIFN5bnRheEVycm9yLgogUEFTUyAhIUZ1bmN0
aW9uKCIoZnVuY3Rpb24gZXZhbCgpe30pIikgaXMgdHJ1ZQpAQCAtOTgsMTAgKzk4LDEwIEBAIFBB
U1MgRnVuY3Rpb24oIid1c2Ugc3RyaWN0JzsgKHtzZXQgeChldmEKIFBBU1MgISFGdW5jdGlvbigi
KHtzZXQgeChldmFsKXt9fSkiKSBpcyB0cnVlCiBQQVNTIHRydWUgPT09IHRydWUKIFBBU1MgRnVu
Y3Rpb24oIid1c2Ugc3RyaWN0JzsgKHtzZXQgeChbZXZhbF0pe319KSIpIHRocmV3IGV4Y2VwdGlv
biBvZiB0eXBlIFN5bnRheEVycm9yLgotUEFTUyAhIUZ1bmN0aW9uKCIoe3NldCB4KFtldmFsXSl7
fX0pIikgaXMgdHJ1ZQorUEFTUyBGdW5jdGlvbigiKHtzZXQgeChbZXZhbF0pe319KSIpIHRocmV3
IGV4Y2VwdGlvbiBvZiB0eXBlIFN5bnRheEVycm9yLgogUEFTUyB0cnVlID09PSB0cnVlCiBQQVNT
IEZ1bmN0aW9uKCIndXNlIHN0cmljdCc7ICh7c2V0IHgoe3g6ZXZhbH0pe319KSIpIHRocmV3IGV4
Y2VwdGlvbiBvZiB0eXBlIFN5bnRheEVycm9yLgotUEFTUyAhIUZ1bmN0aW9uKCIoe3NldCB4KHt4
OmV2YWx9KXt9fSkiKSBpcyB0cnVlCitQQVNTIEZ1bmN0aW9uKCIoe3NldCB4KHt4OmV2YWx9KXt9
fSkiKSB0aHJldyBleGNlcHRpb24gb2YgdHlwZSBTeW50YXhFcnJvci4KIFBBU1MgdHJ1ZSA9PT0g
dHJ1ZQogUEFTUyBGdW5jdGlvbigiJ3VzZSBzdHJpY3QnOyAoe3NldCB4KGV2YWwpe1widXNlIHN0
cmljdFwiO319KSIpIHRocmV3IGV4Y2VwdGlvbiBvZiB0eXBlIFN5bnRheEVycm9yLgogUEFTUyBG
dW5jdGlvbigiKHtzZXQgeChldmFsKXtcInVzZSBzdHJpY3RcIjt9fSkiKSB0aHJldyBleGNlcHRp
b24gb2YgdHlwZSBTeW50YXhFcnJvci4KQEAgLTExNiwxMCArMTE2LDEwIEBAIFBBU1MgRnVuY3Rp
b24oIid1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZigKIFBBU1MgISFGdW5jdGlvbigiZnVuY3Rpb24g
Zihhcmd1bWVudHMpe30iKSBpcyB0cnVlCiBQQVNTIHRydWUgPT09IHRydWUKIFBBU1MgRnVuY3Rp
b24oIid1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZihbYXJndW1lbnRzXSl7fSIpIHRocmV3IGV4Y2Vw
dGlvbiBvZiB0eXBlIFN5bnRheEVycm9yLgotUEFTUyAhIUZ1bmN0aW9uKCJmdW5jdGlvbiBmKFth
cmd1bWVudHNdKXt9IikgaXMgdHJ1ZQorUEFTUyBGdW5jdGlvbigiZnVuY3Rpb24gZihbYXJndW1l
bnRzXSl7fSIpIHRocmV3IGV4Y2VwdGlvbiBvZiB0eXBlIFN5bnRheEVycm9yLgogUEFTUyB0cnVl
ID09PSB0cnVlCiBQQVNTIEZ1bmN0aW9uKCIndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGYoe3g6YXJn
dW1lbnRzfSl7fSIpIHRocmV3IGV4Y2VwdGlvbiBvZiB0eXBlIFN5bnRheEVycm9yLgotUEFTUyAh
IUZ1bmN0aW9uKCJmdW5jdGlvbiBmKHt4OmFyZ3VtZW50c30pe30iKSBpcyB0cnVlCitQQVNTIEZ1
bmN0aW9uKCJmdW5jdGlvbiBmKHt4OmFyZ3VtZW50c30pe30iKSB0aHJldyBleGNlcHRpb24gb2Yg
dHlwZSBTeW50YXhFcnJvci4KIFBBU1MgdHJ1ZSA9PT0gdHJ1ZQogUEFTUyBGdW5jdGlvbigiJ3Vz
ZSBzdHJpY3QnOyBmdW5jdGlvbiBhcmd1bWVudHMoKXt9IikgdGhyZXcgZXhjZXB0aW9uIG9mIHR5
cGUgU3ludGF4RXJyb3IuCiBQQVNTICEhRnVuY3Rpb24oImZ1bmN0aW9uIGFyZ3VtZW50cygpe30i
KSBpcyB0cnVlCkBAIC0xNDAsMTAgKzE0MCwxMCBAQCBQQVNTIEZ1bmN0aW9uKCIndXNlIHN0cmlj
dCc7IChmdW5jdGlvbiBmCiBQQVNTICEhRnVuY3Rpb24oIihmdW5jdGlvbiBmKGFyZ3VtZW50cyl7
fSkiKSBpcyB0cnVlCiBQQVNTIHRydWUgPT09IHRydWUKIFBBU1MgRnVuY3Rpb24oIid1c2Ugc3Ry
aWN0JzsgKGZ1bmN0aW9uIGYoW2FyZ3VtZW50c10pe30pIikgdGhyZXcgZXhjZXB0aW9uIG9mIHR5
cGUgU3ludGF4RXJyb3IuCi1QQVNTICEhRnVuY3Rpb24oIihmdW5jdGlvbiBmKFthcmd1bWVudHNd
KXt9KSIpIGlzIHRydWUKK1BBU1MgRnVuY3Rpb24oIihmdW5jdGlvbiBmKFthcmd1bWVudHNdKXt9
KSIpIHRocmV3IGV4Y2VwdGlvbiBvZiB0eXBlIFN5bnRheEVycm9yLgogUEFTUyB0cnVlID09PSB0
cnVlCiBQQVNTIEZ1bmN0aW9uKCIndXNlIHN0cmljdCc7IChmdW5jdGlvbiBmKHt4OmFyZ3VtZW50
c30pe30pIikgdGhyZXcgZXhjZXB0aW9uIG9mIHR5cGUgU3ludGF4RXJyb3IuCi1QQVNTICEhRnVu
Y3Rpb24oIihmdW5jdGlvbiBmKHt4OmFyZ3VtZW50c30pe30pIikgaXMgdHJ1ZQorUEFTUyBGdW5j
dGlvbigiKGZ1bmN0aW9uIGYoe3g6YXJndW1lbnRzfSl7fSkiKSB0aHJldyBleGNlcHRpb24gb2Yg
dHlwZSBTeW50YXhFcnJvci4KIFBBU1MgdHJ1ZSA9PT0gdHJ1ZQogUEFTUyBGdW5jdGlvbigiJ3Vz
ZSBzdHJpY3QnOyAoZnVuY3Rpb24gYXJndW1lbnRzKCl7fSkiKSB0aHJldyBleGNlcHRpb24gb2Yg
dHlwZSBTeW50YXhFcnJvci4KIFBBU1MgISFGdW5jdGlvbigiKGZ1bmN0aW9uIGFyZ3VtZW50cygp
e30pIikgaXMgdHJ1ZQpAQCAtMTc2LDEwICsxNzYsMTAgQEAgUEFTUyBGdW5jdGlvbigiJ3VzZSBz
dHJpY3QnOyAoe3NldCB4KGFyZwogUEFTUyAhIUZ1bmN0aW9uKCIoe3NldCB4KGFyZ3VtZW50cyl7
fX0pIikgaXMgdHJ1ZQogUEFTUyB0cnVlID09PSB0cnVlCiBQQVNTIEZ1bmN0aW9uKCIndXNlIHN0
cmljdCc7ICh7c2V0IHgoW2FyZ3VtZW50c10pe319KSIpIHRocmV3IGV4Y2VwdGlvbiBvZiB0eXBl
IFN5bnRheEVycm9yLgotUEFTUyAhIUZ1bmN0aW9uKCIoe3NldCB4KFthcmd1bWVudHNdKXt9fSki
KSBpcyB0cnVlCitQQVNTIEZ1bmN0aW9uKCIoe3NldCB4KFthcmd1bWVudHNdKXt9fSkiKSB0aHJl
dyBleGNlcHRpb24gb2YgdHlwZSBTeW50YXhFcnJvci4KIFBBU1MgdHJ1ZSA9PT0gdHJ1ZQogUEFT
UyBGdW5jdGlvbigiJ3VzZSBzdHJpY3QnOyAoe3NldCB4KHt4OmFyZ3VtZW50c30pe319KSIpIHRo
cmV3IGV4Y2VwdGlvbiBvZiB0eXBlIFN5bnRheEVycm9yLgotUEFTUyAhIUZ1bmN0aW9uKCIoe3Nl
dCB4KHt4OmFyZ3VtZW50c30pe319KSIpIGlzIHRydWUKK1BBU1MgRnVuY3Rpb24oIih7c2V0IHgo
e3g6YXJndW1lbnRzfSl7fX0pIikgdGhyZXcgZXhjZXB0aW9uIG9mIHR5cGUgU3ludGF4RXJyb3Iu
CiBQQVNTIHRydWUgPT09IHRydWUKIFBBU1MgRnVuY3Rpb24oIid1c2Ugc3RyaWN0JzsgKHtzZXQg
eChhcmd1bWVudHMpe1widXNlIHN0cmljdFwiO319KSIpIHRocmV3IGV4Y2VwdGlvbiBvZiB0eXBl
IFN5bnRheEVycm9yLgogUEFTUyBGdW5jdGlvbigiKHtzZXQgeChhcmd1bWVudHMpe1widXNlIHN0
cmljdFwiO319KSIpIHRocmV3IGV4Y2VwdGlvbiBvZiB0eXBlIFN5bnRheEVycm9yLgpJbmRleDog
TGF5b3V0VGVzdHMvanMvbW96aWxsYS9zdHJpY3QvcmVncmVzcy01MzIyNTQtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL21vemlsbGEvc3RyaWN0L3JlZ3Jlc3MtNTMy
MjU0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTU2NzU2KQorKysgTGF5b3V0VGVzdHMvanMvbW96
aWxsYS9zdHJpY3QvcmVncmVzcy01MzIyNTQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogUEFTUyBGdW5jdGlvbigiJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBmKGV2
YWwsW3hdKXt9IikgdGhyZXcgZXhjZXB0aW9uIG9mIHR5cGUgU3ludGF4RXJyb3IuCi1QQVNTICEh
RnVuY3Rpb24oImZ1bmN0aW9uIGYoZXZhbCxbeF0pe30iKSBpcyB0cnVlCitGQUlMICEhRnVuY3Rp
b24oImZ1bmN0aW9uIGYoZXZhbCxbeF0pe30iKSBzaG91bGQgYmUgdHJ1ZS4gVGhyZXcgZXhjZXB0
aW9uIFN5bnRheEVycm9yOiBFeHBlY3RlZCBhbiBpZGVudGlmaWVyIGJ1dCBmb3VuZCAnWycgaW5z
dGVhZAogUEFTUyB0cnVlID09PSB0cnVlCiAgUEFTU0VEISAKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKSW5kZXg6IExheW91dFRlc3RzL2pzL21vemlsbGEvc3RyaWN0L3NjcmlwdC10
ZXN0cy8xMy4xLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL21vemlsbGEvc3RyaWN0
L3NjcmlwdC10ZXN0cy8xMy4xLmpzCShyZXZpc2lvbiAxNTY3NTYpCisrKyBMYXlvdXRUZXN0cy9q
cy9tb3ppbGxhL3N0cmljdC9zY3JpcHQtdGVzdHMvMTMuMS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MzksOCArMzksOCBAQCBhc3NlcnRFcSh0ZXN0TGVuaWVudEFuZFN0cmljdCgnZnVuY3Rpb24gCiAg
Ki8KIC8vIERlc3RydWN0dXJpbmcgaXMgbm90IHZhbGlkIEVTNSBzeW50YXguCiBhc3NlcnRFcSh0
ZXN0TGVuaWVudEFuZFN0cmljdCgnZnVuY3Rpb24gZihbeCx5XSkge30nLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyc2VzU3VjY2Vzc2Z1bGx5LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyc2VzU3VjY2Vzc2Z1bGx5KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcnNlUmFpc2VzRXhjZXB0aW9uKFN5bnRheEVycm9yKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcnNlUmFpc2VzRXhjZXB0aW9uKFN5bnRheEVycm9yKSksCiAgICAg
ICAgICB0cnVlKTsKIGFzc2VydEVxKHRlc3RMZW5pZW50QW5kU3RyaWN0KCdmdW5jdGlvbiBmKFt4
LHhdKXt9JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlUmFpc2VzRXhjZXB0
aW9uKFN5bnRheEVycm9yKSwKQEAgLTExOCwxMiArMTE4LDEyIEBAIGFzc2VydEVxKHRlc3RMZW5p
ZW50QW5kU3RyaWN0KCdmdW5jdGlvbiAKICAgICAgICAgIHRydWUpOwogLy8gRGVzdHJ1Y3R1cmlu
ZyBpcyBub3QgdmFsaWQgRVM1IHN5bnRheC4KIGFzc2VydEVxKHRlc3RMZW5pZW50QW5kU3RyaWN0
KCdmdW5jdGlvbiBmKFtldmFsXSl7fScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZXNTdWNjZXNzZnVsbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVJh
aXNlc0V4Y2VwdGlvbihTeW50YXhFcnJvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJzZVJhaXNlc0V4Y2VwdGlvbihTeW50YXhFcnJvcikpLAogICAgICAgICAgdHJ1ZSk7CiAv
LyBEZXN0cnVjdHVyaW5nIGlzIG5vdCB2YWxpZCBFUzUgc3ludGF4LgogYXNzZXJ0RXEodGVzdExl
bmllbnRBbmRTdHJpY3QoJ2Z1bmN0aW9uIGYoe3g6ZXZhbH0pe30nLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyc2VzU3VjY2Vzc2Z1bGx5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyc2VSYWlzZXNFeGNlcHRpb24oU3ludGF4RXJyb3IpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyc2VSYWlzZXNFeGNlcHRpb24oU3ludGF4RXJyb3IpKSwKICAg
ICAgICAgIHRydWUpOwogYXNzZXJ0RXEodGVzdExlbmllbnRBbmRTdHJpY3QoJ2Z1bmN0aW9uIGV2
YWwoKXt9JywKQEAgLTE1NCwxMiArMTU0LDEyIEBAIGFzc2VydEVxKHRlc3RMZW5pZW50QW5kU3Ry
aWN0KCcoZnVuY3Rpb24KICAgICAgICAgIHRydWUpOwogLy8gRGVzdHJ1Y3R1cmluZyBpcyBub3Qg
dmFsaWQgRVM1IHN5bnRheC4KIGFzc2VydEVxKHRlc3RMZW5pZW50QW5kU3RyaWN0KCcoZnVuY3Rp
b24gZihbZXZhbF0pe30pJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlc1N1
Y2Nlc3NmdWxseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlUmFpc2VzRXhj
ZXB0aW9uKFN5bnRheEVycm9yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNl
UmFpc2VzRXhjZXB0aW9uKFN5bnRheEVycm9yKSksCiAgICAgICAgICB0cnVlKTsKIC8vIERlc3Ry
dWN0dXJpbmcgaXMgbm90IHZhbGlkIEVTNSBzeW50YXguCiBhc3NlcnRFcSh0ZXN0TGVuaWVudEFu
ZFN0cmljdCgnKGZ1bmN0aW9uIGYoe3g6ZXZhbH0pe30pJywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcnNlc1N1Y2Nlc3NmdWxseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlUmFpc2VzRXhjZXB0aW9uKFN5bnRheEVycm9yKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcnNlUmFpc2VzRXhjZXB0aW9uKFN5bnRheEVycm9yKSksCiAgICAgICAg
ICB0cnVlKTsKIGFzc2VydEVxKHRlc3RMZW5pZW50QW5kU3RyaWN0KCcoZnVuY3Rpb24gZXZhbCgp
e30pJywKQEAgLTIwOCwxMiArMjA4LDEyIEBAIGFzc2VydEVxKHRlc3RMZW5pZW50QW5kU3RyaWN0
KCcoe3NldCB4KGUKICAgICAgICAgIHRydWUpOwogLy8gRGVzdHJ1Y3R1cmluZyBpcyBub3QgdmFs
aWQgRVM1IHN5bnRheC4KIGFzc2VydEVxKHRlc3RMZW5pZW50QW5kU3RyaWN0KCcoe3NldCB4KFtl
dmFsXSl7fX0pJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlc1N1Y2Nlc3Nm
dWxseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlUmFpc2VzRXhjZXB0aW9u
KFN5bnRheEVycm9yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlUmFpc2Vz
RXhjZXB0aW9uKFN5bnRheEVycm9yKSksCiAgICAgICAgICB0cnVlKTsKIC8vIERlc3RydWN0dXJp
bmcgaXMgbm90IHZhbGlkIEVTNSBzeW50YXguCiBhc3NlcnRFcSh0ZXN0TGVuaWVudEFuZFN0cmlj
dCgnKHtzZXQgeCh7eDpldmFsfSl7fX0pJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcnNlc1N1Y2Nlc3NmdWxseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNl
UmFpc2VzRXhjZXB0aW9uKFN5bnRheEVycm9yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlUmFpc2VzRXhjZXB0aW9uKFN5bnRheEVycm9yKSksCiAgICAgICAgICB0cnVlKTsK
IGFzc2VydEVxKHRlc3RMZW5pZW50QW5kU3RyaWN0KCcoe3NldCB4KGV2YWwpeyJ1c2Ugc3RyaWN0
Ijt9fSknLApAQCAtMjM0LDEyICsyMzQsMTIgQEAgYXNzZXJ0RXEodGVzdExlbmllbnRBbmRTdHJp
Y3QoJ2Z1bmN0aW9uIAogICAgICAgICAgdHJ1ZSk7CiAvLyBEZXN0cnVjdHVyaW5nIGlzIG5vdCB2
YWxpZCBFUzUgc3ludGF4LgogYXNzZXJ0RXEodGVzdExlbmllbnRBbmRTdHJpY3QoJ2Z1bmN0aW9u
IGYoW2FyZ3VtZW50c10pe30nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vz
U3VjY2Vzc2Z1bGx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VSYWlzZXNF
eGNlcHRpb24oU3ludGF4RXJyb3IpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
c2VSYWlzZXNFeGNlcHRpb24oU3ludGF4RXJyb3IpKSwKICAgICAgICAgIHRydWUpOwogLy8gRGVz
dHJ1Y3R1cmluZyBpcyBub3QgdmFsaWQgRVM1IHN5bnRheC4KIGFzc2VydEVxKHRlc3RMZW5pZW50
QW5kU3RyaWN0KCdmdW5jdGlvbiBmKHt4OmFyZ3VtZW50c30pe30nLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyc2VzU3VjY2Vzc2Z1bGx5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyc2VSYWlzZXNFeGNlcHRpb24oU3ludGF4RXJyb3IpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyc2VSYWlzZXNFeGNlcHRpb24oU3ludGF4RXJyb3IpKSwKICAg
ICAgICAgIHRydWUpOwogYXNzZXJ0RXEodGVzdExlbmllbnRBbmRTdHJpY3QoJ2Z1bmN0aW9uIGFy
Z3VtZW50cygpe30nLApAQCAtMjY5LDEyICsyNjksMTIgQEAgYXNzZXJ0RXEodGVzdExlbmllbnRB
bmRTdHJpY3QoJyhmdW5jdGlvbgogICAgICAgICAgdHJ1ZSk7CiAvLyBEZXN0cnVjdHVyaW5nIGlz
IG5vdCB2YWxpZCBFUzUgc3ludGF4LgogYXNzZXJ0RXEodGVzdExlbmllbnRBbmRTdHJpY3QoJyhm
dW5jdGlvbiBmKFthcmd1bWVudHNdKXt9KScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJzZXNTdWNjZXNzZnVsbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJz
ZVJhaXNlc0V4Y2VwdGlvbihTeW50YXhFcnJvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJzZVJhaXNlc0V4Y2VwdGlvbihTeW50YXhFcnJvcikpLAogICAgICAgICAgdHJ1ZSk7
CiAvLyBEZXN0cnVjdHVyaW5nIGlzIG5vdCB2YWxpZCBFUzUgc3ludGF4LgogYXNzZXJ0RXEodGVz
dExlbmllbnRBbmRTdHJpY3QoJyhmdW5jdGlvbiBmKHt4OmFyZ3VtZW50c30pe30pJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlc1N1Y2Nlc3NmdWxseSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnNlUmFpc2VzRXhjZXB0aW9uKFN5bnRheEVycm9yKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlUmFpc2VzRXhjZXB0aW9uKFN5bnRheEVy
cm9yKSksCiAgICAgICAgICB0cnVlKTsKIGFzc2VydEVxKHRlc3RMZW5pZW50QW5kU3RyaWN0KCco
ZnVuY3Rpb24gYXJndW1lbnRzKCl7fSknLApAQCAtMzIzLDEyICszMjMsMTIgQEAgYXNzZXJ0RXEo
dGVzdExlbmllbnRBbmRTdHJpY3QoJyh7c2V0IHgoYQogICAgICAgICAgdHJ1ZSk7CiAvLyBEZXN0
cnVjdHVyaW5nIGlzIG5vdCB2YWxpZCBFUzUgc3ludGF4LgogYXNzZXJ0RXEodGVzdExlbmllbnRB
bmRTdHJpY3QoJyh7c2V0IHgoW2FyZ3VtZW50c10pe319KScsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJzZXNTdWNjZXNzZnVsbHksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJzZVJhaXNlc0V4Y2VwdGlvbihTeW50YXhFcnJvciksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJzZVJhaXNlc0V4Y2VwdGlvbihTeW50YXhFcnJvcikpLAogICAgICAg
ICAgdHJ1ZSk7CiAvLyBEZXN0cnVjdHVyaW5nIGlzIG5vdCB2YWxpZCBFUzUgc3ludGF4LgogYXNz
ZXJ0RXEodGVzdExlbmllbnRBbmRTdHJpY3QoJyh7c2V0IHgoe3g6YXJndW1lbnRzfSl7fX0pJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlc1N1Y2Nlc3NmdWxseSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlUmFpc2VzRXhjZXB0aW9uKFN5bnRheEVycm9y
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlUmFpc2VzRXhjZXB0aW9uKFN5
bnRheEVycm9yKSksCiAgICAgICAgICB0cnVlKTsKIGFzc2VydEVxKHRlc3RMZW5pZW50QW5kU3Ry
aWN0KCcoe3NldCB4KGFyZ3VtZW50cyl7InVzZSBzdHJpY3QiO319KScsCkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2Rlc3RydWN0dXJpbmctYXJndW1lbnRzLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2Rlc3RydWN0dXJpbmctYXJndW1lbnRz
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTU2NzU2KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9kZXN0cnVjdHVyaW5nLWFyZ3VtZW50cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTAgKzAsMCBAQAotSlNSZWdyZXNzL2Rlc3RydWN0dXJpbmctYXJndW1lbnRzCi0KLU9uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KLQotCi1QQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KLVBBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCkluZGV4OiBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2Rlc3RydWN0dXJpbmctYXJndW1lbnRzLWxlbmd0aC1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9kZXN0cnVjdHVyaW5n
LWFyZ3VtZW50cy1sZW5ndGgtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNTY3NTYpCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2Rlc3RydWN0dXJpbmctYXJndW1lbnRzLWxlbmd0aC1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzAsMCBAQAotSlNSZWdyZXNzL2Rlc3RydWN0
dXJpbmctYXJndW1lbnRzLWxlbmd0aAotCi1PbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCi0KLQot
UEFTUyBubyBleGNlcHRpb24gdGhyb3duCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
Ci0KLVRFU1QgQ09NUExFVEUKLQpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9kZXN0cnVj
dHVyaW5nLWFyZ3VtZW50cy1sZW5ndGguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL2Rlc3RydWN0dXJpbmctYXJndW1lbnRzLWxlbmd0aC5odG1sCShyZXZpc2lvbiAx
NTY3NTYpCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2Rlc3RydWN0dXJpbmctYXJndW1lbnRz
LWxlbmd0aC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyICswLDAgQEAKLTwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KLTwvaGVh
ZD4KLTxib2R5PgotPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3Jp
cHQ+Ci08c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2Rlc3RydWN0dXJpbmctYXJndW1lbnRzLWxl
bmd0aC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5q
cyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2Rlc3RydWN0dXJpbmctYXJndW1lbnRzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9kZXN0cnVjdHVyaW5nLWFyZ3VtZW50cy5odG1sCShyZXZpc2lvbiAxNTY3
NTYpCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2Rlc3RydWN0dXJpbmctYXJndW1lbnRzLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+
Ci08c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KLTxzY3Jp
cHQgc3JjPSJzY3JpcHQtdGVzdHMvZGVzdHJ1Y3R1cmluZy1hcmd1bWVudHMuanMiPjwvc2NyaXB0
PgotPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgotPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgotPC9i
b2R5PgotPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9kZXN0cnVjdHVyaW5n
LXN3YXAtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
ZGVzdHJ1Y3R1cmluZy1zd2FwLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTU2NzU2KQorKysgTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9kZXN0cnVjdHVyaW5nLXN3YXAtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDEwICswLDAgQEAKLUpTUmVncmVzcy9kZXN0cnVjdHVyaW5nLXN3YXAK
LQotT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgotCi0KLVBBU1Mgbm8gZXhjZXB0aW9uIHRocm93
bgotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0KSW5k
ZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZGVzdHJ1Y3R1cmluZy1zd2FwLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9kZXN0cnVjdHVyaW5nLXN3YXAuaHRtbAko
cmV2aXNpb24gMTU2NzU2KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9kZXN0cnVjdHVyaW5n
LXN3YXAuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwxMiArMCwwIEBACi08IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+
Ci08Ym9keT4KLTxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0
PgotPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9kZXN0cnVjdHVyaW5nLXN3YXAuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgot
PC9ib2R5PgotPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvZGVzdHJ1Y3R1cmluZy1hcmd1bWVudHMtbGVuZ3RoLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2Rlc3RydWN0dXJpbmctYXJndW1lbnRzLWxl
bmd0aC5qcwkocmV2aXNpb24gMTU2NzU2KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvZGVzdHJ1Y3R1cmluZy1hcmd1bWVudHMtbGVuZ3RoLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDEzICswLDAgQEAKLS8vQCBydW5EZWZhdWx0Ci0KLWZ1bmN0aW9uIGZvbygpIHsKLSAg
ICB2YXIgezA6IGksIDE6IGosIGxlbmd0aH0gPSBhcmd1bWVudHM7Ci0gICAgcmV0dXJuIGkgKyBq
ICsgbGVuZ3RoOwotfQotCi12YXIgcmVzdWx0ID0gMDsKLWZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDAwMDsgKytpKQotICAgIHJlc3VsdCArPSBmb28oaSwgMSk7Ci0KLWlmIChyZXN1bHQgIT0gNTAw
MDAyNTAwMDAwKQotICAgIHRocm93ICJCYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZGVzdHJ1Y3R1cmluZy1hcmd1bWVudHMu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZGVz
dHJ1Y3R1cmluZy1hcmd1bWVudHMuanMJKHJldmlzaW9uIDE1Njc1NikKKysrIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2Rlc3RydWN0dXJpbmctYXJndW1lbnRzLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDEzICswLDAgQEAKLS8vQCBydW5EZWZhdWx0Ci0KLWZ1bmN0aW9uIGZv
bygpIHsKLSAgICB2YXIgW2EsIGJdID0gYXJndW1lbnRzOwotICAgIHJldHVybiBhIC0gYjsKLX0K
LQotdmFyIHJlc3VsdCA9IDA7Ci1mb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkKLSAg
ICByZXN1bHQgKz0gZm9vKDQyLCBpKTsKLQotaWYgKHJlc3VsdCAhPSAtNDk5OTU3NTAwMDAwKQot
ICAgIHRocm93ICJCYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvZGVzdHJ1Y3R1cmluZy1zd2FwLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2Rlc3RydWN0dXJpbmctc3dhcC5q
cwkocmV2aXNpb24gMTU2NzU2KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvZGVzdHJ1Y3R1cmluZy1zd2FwLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzICswLDAgQEAK
LS8vQCBydW5EZWZhdWx0Ci0KLWZ1bmN0aW9uIGZvbyhhLCBiKSB7Ci0gICAgdmFyIFthLCBiXSA9
IFtiLCBhXTsKLSAgICByZXR1cm4gYSAtIGI7Ci19Ci0KLXZhciByZXN1bHQgPSAwOwotZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpCi0gICAgcmVzdWx0ICs9IGZvbyg0MiwgaSk7Ci0K
LWlmIChyZXN1bHQgIT0gNDk5OTU3NTAwMDAwKQotICAgIHRocm93ICJCYWQgcmVzdWx0OiAiICsg
cmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2Rlc3RydWN0dXJpbmct
YXNzaWdubWVudC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMv
ZGVzdHJ1Y3R1cmluZy1hc3NpZ25tZW50LmpzCShyZXZpc2lvbiAxNTY3NTYpCisrKyBMYXlvdXRU
ZXN0cy9qcy9zY3JpcHQtdGVzdHMvZGVzdHJ1Y3R1cmluZy1hc3NpZ25tZW50LmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLWRlc2NyaXB0aW9uKCJiYXNpYyB0ZXN0cyBmb3IgZGVz
dHJ1Y3R1cmluZyBhc3NpZ25tZW50Iik7Ci0KLWZ1bmN0aW9uIHRlc3REZXN0cnVjdHVyaW5nKHBh
dHRlcm4sIGV4cHJlc3Npb24sIHJlc3VsdCwgZXhwcikgewotICAgIGlmICghZXhwcikgZXhwciA9
ICJhK2IiCi0gICAgc2hvdWxkQmUoInZhciAiICsgcGF0dGVybiArICI9IiArIGV4cHJlc3Npb24g
KyAiOyB2YXIgcj0iK2V4cHIrIjsgciIsIHJlc3VsdCk7Ci0gICAgdmFyIGZ1bmN0aW9uU3RyaW5n
ID0gIihmdW5jdGlvbigiICsgcGF0dGVybiArICIpIHsgcmV0dXJuICIrZXhwcisiO30pIjsKLSAg
ICBkZWJ1ZygiRnVuY3Rpb24gYXMgU3RyaW5nOiAiICsgZnVuY3Rpb25TdHJpbmcpOwotICAgIHNo
b3VsZEJlKGZ1bmN0aW9uU3RyaW5nICsgIigiICsgZXhwcmVzc2lvbiArICIpIiwgcmVzdWx0KTsK
LSAgICBzaG91bGRCZSgiKCIgKyBldmFsKGZ1bmN0aW9uU3RyaW5nKSArICIpKCIgKyBleHByZXNz
aW9uICsgIikiLCByZXN1bHQpOwotfQotCi10ZXN0RGVzdHJ1Y3R1cmluZygiW2EsYl0iLCAiWycx
JywnMiddIiwgIicxMiciKTsKLXRlc3REZXN0cnVjdHVyaW5nKCJ7YSxifSIsICJ7YTonMScsYjon
Mid9IiwgIicxMiciKTsKLXRlc3REZXN0cnVjdHVyaW5nKCJ7YzphLGQ6Yn0iLCAie2M6JzEnLGQ6
JzInfSIsICInMTInIik7Ci10ZXN0RGVzdHJ1Y3R1cmluZygie2M6YixkOmF9IiwgIntjOicxJyxk
OicyJ30iLCAiJzIxJyIpOwotdGVzdERlc3RydWN0dXJpbmcoInt0cnVlOmEsZmFsc2U6Yix1bmRl
ZmluZWQ6YyxudWxsOmQsaW46ZSxmb3I6ZiwxLjU6ZywnZm9vIGJhcic6aH0iLCAie3RydWU6J2En
LGZhbHNlOidiJyx1bmRlZmluZWQ6J2MnLG51bGw6J2QnLGluOidlJyxmb3I6J2YnLDEuNTonZycs
J2ZvbyBiYXInOidoJ30iLCAiJ2FiY2RlZmdoJyIsICJhK2IrYytkK2UrZitnK2giKTsKLXRlc3RE
ZXN0cnVjdHVyaW5nKCJbe2M6YSxkOmJ9XSIsICJbe2M6JzEnLGQ6JzInfV0iLCAiJzEyJyIpOwot
dGVzdERlc3RydWN0dXJpbmcoInt4Olt7YzphLGQ6Yn1dfSIsICJ7eDpbe2M6JzEnLGQ6JzInfV19
IiwgIicxMiciKTsKLQotdmFyIGFuQXJyYXkgPSBbJzEnLCAnMiddOwotYW5BcnJheS5hID0gJzMn
Ci1hbkFycmF5LmIgPSAnNCcKLXZhciBhbk9iamVjdCA9IHthOicxJywgYjonMicsIDA6JzMnLDE6
JzQnfQotdGVzdERlc3RydWN0dXJpbmcoIlthLGJdIiwgImFuQXJyYXkiLCAiJzEyJyIpOwotdGVz
dERlc3RydWN0dXJpbmcoInthLGJ9IiwgImFuQXJyYXkiLCAiJzM0JyIpOwotdGVzdERlc3RydWN0
dXJpbmcoInthOmEsYjpifSIsICJhbkFycmF5IiwgIiczNCciKTsKLXRlc3REZXN0cnVjdHVyaW5n
KCJ7YSxifSIsICJhbk9iamVjdCIsICInMTInIik7Ci10ZXN0RGVzdHJ1Y3R1cmluZygie2E6YSxi
OmJ9IiwgImFuT2JqZWN0IiwgIicxMiciKTsKLXRlc3REZXN0cnVjdHVyaW5nKCJ7MDphLDE6Yn0i
LCAiYW5PYmplY3QiLCAiJzM0JyIpOwotdGVzdERlc3RydWN0dXJpbmcoInsnYSc6YSwnYic6Yn0i
LCAiYW5PYmplY3QiLCAiJzEyJyIpOwotdmFyIFthLGJdID0gWycxMScsJzIyJ10KLXNob3VsZEJl
KCJhK2IiLCAiJzExMjInIikKLXZhciBbYixhXSA9IFthLGJdOwotc2hvdWxkQmUoImErYiIsICIn
MjIxMSciKQotZnVuY3Rpb24gdGVzdERlY29uc3RydWN0QXJncygpIHsKLSAgICB2YXIgW2EsYl0g
PSBhcmd1bWVudHM7Ci0gICAgcmV0dXJuIGErYjsKLX0KLQotZnVuY3Rpb24gdGVzdERlY29uc3Ry
dWN0QXJnTGVuZ3RoKCkgewotICAgIHZhciB7bGVuZ3RofSA9IGFyZ3VtZW50czsKLSAgICByZXR1
cm4gbGVuZ3RoOwotfQotc2hvdWxkQmUoInRlc3REZWNvbnN0cnVjdEFyZ3MoJzEnLCAnMicpIiwg
IicxMiciKTsKLXNob3VsZEJlKCJ0ZXN0RGVjb25zdHJ1Y3RBcmdMZW5ndGgoJzEnLCAnMicpIiwg
IjIiKTsKLQotCi0KSW5kZXg6IExheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTNfRnVu
Y3Rpb25fRGVmaW5pdGlvbi9TMTNfQTUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9z
cHV0bmlrL0NvbmZvcm1hbmNlLzEzX0Z1bmN0aW9uX0RlZmluaXRpb24vUzEzX0E1Lmh0bWwJKHJl
dmlzaW9uIDE1Njc1NikKKysrIExheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTNfRnVu
Y3Rpb25fRGVmaW5pdGlvbi9TMTNfQTUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYs
NyBAQCB0cnkgewogLy9DSEVDSyMxCiB0cnl7CiAJZXZhbCgiZnVuY3Rpb24gX19mdW5jKFthcmcx
LCBhcmcyLCBhcmczXSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7fSIpOworCXRlc3RGYWlsZWQo
JyMxOiBldmFsKCJmdW5jdGlvbiBfX2Z1bmMoW2FyZzEsIGFyZzIsIGFyZzNdKXtyZXR1cm4gYXJn
dW1lbnRzLmxlbmd0aDt9IikgbGVhZCB0byB0aHJvd2luZyBleGNlcHRpb24nKTsKIH0gY2F0Y2go
ZSl7CiAJaWYoIShlIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpKXsKIAkJdGVzdEZhaWxlZCgnIzEu
MTogZXZhbCgiZnVuY3Rpb24gX19mdW5jKFthcmcxLCBhcmcyLCBhcmczXSl7cmV0dXJuIGFyZ3Vt
ZW50cy5sZW5ndGg7fSIpIGxlYWQgdG8gdGhyb3dpbmcgZXhjZXB0aW9uIG9mIFN5bnRheEVycm9y
LiBBY3R1YWw6IGV4Y2VwdGlvbiBpcyAnK2UpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>