<?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>176290</bug_id>
          
          <creation_ts>2017-09-02 20:44:19 -0700</creation_ts>
          <short_desc>WSL should support structs</short_desc>
          <delta_ts>2018-10-13 17:05:36 -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>WebGPU</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>176199</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1344912</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-02 20:44:19 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344913</commentid>
    <comment_count>1</comment_count>
      <attachid>319756</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-02 20:48:24 -0700</bug_when>
    <thetext>Created attachment 319756
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344922</commentid>
    <comment_count>2</comment_count>
      <attachid>319756</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-02 21:18:05 -0700</bug_when>
    <thetext>Comment on attachment 319756
the patch

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

&gt; Tools/WebGPUShadingLanguageRI/FuncInstantiator.js:99
&gt; -        let resultingFunc = func.visit(new Instantiate());
&gt; +        
&gt; +        let resultingFunc = func.visit(new Instantiate(substitution));

I&apos;ll revert.

&gt; Tools/WebGPUShadingLanguageRI/InstantiateImmediates.js:44
&gt; +    
&gt; +    visitVariableDecl(node)
&gt; +    {
&gt; +        let result = super.visitVariableDecl(node);
&gt; +        return result;
&gt; +    }

I will remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344996</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-03 10:48:12 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/221550/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353734</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:55:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/34694277&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468956</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 17:05:36 -0700</bug_when>
    <thetext>Migrated to https://github.com/gpuweb/WHLSL/issues/157</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319756</attachid>
            <date>2017-09-02 20:48:24 -0700</date>
            <delta_ts>2017-09-03 10:21:56 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>42640</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMTU0MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEwMCBAQAorMjAxNy0wOS0wMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIFdTTCBzaG91bGQgc3VwcG9ydCBzdHJ1Y3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYyOTAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWRkcyBwYXJzaW5nIG9m
IHN0cnVjdCB0eXBlcyBhbmQgbWFrZXMgdGhlbSB3b3JrLgorICAgICAgICAKKyAgICAgICAgVGhp
cyByZXF1aXJlZCBhZGRpbmcgYSBzdHJ1Y3QgbGF5b3V0IHBoYXNlLCB3aGljaCBpbiB0dXJuIHJl
cXVpcmVkIGJlaW5nIGEgYml0IG1vcmUgY2FyZWZ1bAorICAgICAgICBhYm91dCBob3cgd2UgaW5z
dGFudGlhdGUgZnVuY3Rpb25zIGFuZCB0eXBlcy4gV2UgY2Fubm90IGhhdmUgYW55IGluc3RhbnRp
YXRpb24gVHlwZVJlZnMgbGVmdAorICAgICAgICBvbmNlIHdlJ3JlIGRvaW5nIHN0cnVjdCBsYXlv
dXQuCisKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanM6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEZ1bmN0aW9uLmpzOgorICAgICAgICAoY2Fs
bEZ1bmN0aW9uKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpz
OgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wuc2V0IHRocm93
KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpzOiBB
ZGRlZC4KKyAgICAgICAgKERvdEV4cHJlc3Npb24pOgorICAgICAgICAoRG90RXhwcmVzc2lvbi5w
cm90b3R5cGUuZ2V0IHN0cnVjdCk6CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5n
ZXQgZmllbGROYW1lKToKKyAgICAgICAgKERvdEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xW
YWx1ZSk6CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlckJ1aWxkZXIuanM6CisgICAgICAg
IChFQnVmZmVyQnVpbGRlci5wcm90b3R5cGUuX2NyZWF0ZUVQdHIpOgorICAgICAgICAqIFdlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0VQdHIuanM6CisgICAgICAgIChFUHRyLnByb3RvdHlwZS5jb3B5
RnJvbSk6IERlbGV0ZWQuCisgICAgICAgIChFUHRyLnByb3RvdHlwZS50b1N0cmluZyk6IERlbGV0
ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzOgorICAg
ICAgICAoRXZhbHVhdG9yLnByb3RvdHlwZS52aXNpdEFzc2lnbm1lbnQpOgorICAgICAgICAoRXZh
bHVhdG9yLnByb3RvdHlwZS52aXNpdERvdEV4cHJlc3Npb24pOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0ZpZWxkLmpzOgorICAgICAgICAoRmllbGQpOgorICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNEZWYuanM6CisgICAgICAgIChGdW5jRGVmLnByb3Rv
dHlwZS5yZXdyaXRlKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5z
dGFudGlhdG9yLmpzOgorICAgICAgICAoRnVuY0luc3RhbnRpYXRvci5wcm90b3R5cGUuZ2V0VW5p
cXVlKToKKyAgICAgICAgKEZ1bmNJbnN0YW50aWF0b3IpOgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0lubGluZS5qczoKKyAgICAgICAgKGlubGluZSk6CisgICAgICAgIChfaW5s
aW5lRnVuY3Rpb24pOgorICAgICAgICAocmVzb2x2ZUlubGluZWRGdW5jdGlvbik6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lci5qczoKKyAgICAgICAgKElubGluZXIu
cHJvdG90eXBlLnZpc2l0RG90RXhwcmVzc2lvbik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvSW5zdGFudGlhdGVJbW1lZGlhdGVzLmpzOgorICAgICAgICAoSW5zdGFudGlhdGVJ
bW1lZGlhdGVzLnByb3RvdHlwZS52aXNpdFR5cGVSZWYpOgorICAgICAgICAoSW5zdGFudGlhdGVJ
bW1lZGlhdGVzLnByb3RvdHlwZS52aXNpdFZhcmlhYmxlRGVjbCk6CisgICAgICAgIChJbnN0YW50
aWF0ZUltbWVkaWF0ZXMpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVS
ZXNvbHZlci5qczoKKyAgICAgICAgKE5hbWVSZXNvbHZlci5wcm90b3R5cGUuX3Jlc29sdmVUeXBl
QXJndW1lbnRzKToKKyAgICAgICAgKE5hbWVSZXNvbHZlci5wcm90b3R5cGUudmlzaXRUeXBlUmVm
KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzOgorICAgICAgICAo
Tm9kZS5wcm90b3R5cGUudmlzaXQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L092ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUuanM6IEFkZGVkLgorICAgICAgICAoT3ZlcmxvYWRS
ZXNvbHV0aW9uRmFpbHVyZSk6CisgICAgICAgIChPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlLnBy
b3RvdHlwZS5nZXQgZnVuYyk6CisgICAgICAgIChPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlLnBy
b3RvdHlwZS5nZXQgcmVhc29uKToKKyAgICAgICAgKE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUu
cHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Q
YXJzZS5qczoKKyAgICAgICAgKHBhcnNlUG9zc2libGVTdWZmaXgpOgorICAgICAgICAocGFyc2VG
aWVsZCk6CisgICAgICAgIChwYXJzZVN0cnVjdFR5cGUpOgorICAgICAgICAocGFyc2UpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwuanM6Cisg
ICAgICAgIChyZXNvbHZlT3ZlcmxvYWRJbXBsKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9SZXdyaXRlci5qczoKKyAgICAgICAgKFJld3JpdGVyLnByb3RvdHlwZS52aXNpdERv
dEV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0VmFyaWFibGVS
ZWYpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdExheW91dEJ1aWxk
ZXIuanM6IEFkZGVkLgorICAgICAgICAoU3RydWN0TGF5b3V0QnVpbGRlcik6CisgICAgICAgIChT
dHJ1Y3RMYXlvdXRCdWlsZGVyLnByb3RvdHlwZS52aXNpdFN0cnVjdFR5cGUpOgorICAgICAgICAo
U3RydWN0TGF5b3V0QnVpbGRlci5wcm90b3R5cGUuZ2V0IG9mZnNldCk6CisgICAgICAgIChTdHJ1
Y3RMYXlvdXRCdWlsZGVyLnByb3RvdHlwZS52aXNpdEZpZWxkKToKKyAgICAgICAgKFN0cnVjdExh
eW91dEJ1aWxkZXIucHJvdG90eXBlLnZpc2l0VmFyaWFibGVSZWYpOgorICAgICAgICAoU3RydWN0
TGF5b3V0QnVpbGRlci5wcm90b3R5cGUudmlzaXRWYXJpYWJsZURlY2wpOgorICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdFR5cGUuanM6CisgICAgICAgIChTdHJ1Y3RUeXBl
LnByb3RvdHlwZS5hZGQpOgorICAgICAgICAoU3RydWN0VHlwZS5wcm90b3R5cGUuaW5zdGFudGlh
dGUpOgorICAgICAgICAoU3RydWN0VHlwZS5wcm90b3R5cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUp
OgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qczoKKyAg
ICAgICAgKFN1YnN0aXR1dGlvbi5wcm90b3R5cGUudmlzaXRUeXBlUmVmKToKKyAgICAgICAgKFN1
YnN0aXR1dGlvbi5wcm90b3R5cGUudmlzaXRWYXJpYWJsZVJlZik6CisgICAgICAgIChTdWJzdGl0
dXRpb24pOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAg
ICAgIChURVNUX2dlbmVyaWNTdHJ1Y3RJbnN0YW5jZSk6CisgICAgICAgICogV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVHlwZS5qczoKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLmluaGVyaXRzKToK
KyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlUmVmLmpzOgorICAgICAgICAo
VHlwZVJlZi5pbnN0YW50aWF0ZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VmFyaWFibGVSZWYuanM6CisgICAgICAgIChWYXJpYWJsZVJlZi53cmFwKToKKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzOgorICAgICAgICAoVmlzaXRvci5wcm90
b3R5cGUudmlzaXRUeXBlUmVmKToKKyAgICAgICAgKFZpc2l0b3IucHJvdG90eXBlLnZpc2l0RG90
RXhwcmVzc2lvbik6CisgICAgICAgIChWaXNpdG9yLnByb3RvdHlwZS52aXNpdFZhcmlhYmxlUmVm
KToKKwogMjAxNy0wOS0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIFdTTCBzaG91bGQgY2hlY2sgdW5yZWFjaGFibGUgY29kZSBhbmQgbm8gcmV0dXJucwpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkocmV2aXNpb24gMjIxNTQxKQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw2ICs0Nyw3IEBAIGxvYWQoIkNoZWNrZXIuanMiKTsKIGxvYWQoIkNvbW1hRXhwcmVzc2lvbi5q
cyIpOwogbG9hZCgiQ29uc3RleHByVHlwZVBhcmFtZXRlci5qcyIpOwogbG9hZCgiRGVyZWZlcmVu
Y2VFeHByZXNzaW9uLmpzIik7Citsb2FkKCJEb3RFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJFQXJy
YXlSZWYuanMiKTsKIGxvYWQoIkVCdWZmZXIuanMiKTsKIGxvYWQoIkVCdWZmZXJCdWlsZGVyLmpz
Iik7CkBAIC03NCw2ICs3NSw3IEBAIGxvYWQoIk5hdGl2ZUZ1bmNJbnN0YW5jZS5qcyIpOwogbG9h
ZCgiTmF0aXZlVHlwZS5qcyIpOwogbG9hZCgiTmF0aXZlVHlwZUluc3RhbmNlLmpzIik7CiBsb2Fk
KCJOdWxsVHlwZS5qcyIpOworbG9hZCgiT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZS5qcyIpOwog
bG9hZCgiUGFyc2UuanMiKTsKIGxvYWQoIlByZXBhcmUuanMiKTsKIGxvYWQoIlByb2dyYW0uanMi
KTsKQEAgLTg5LDYgKzkxLDcgQEAgbG9hZCgiUmV0dXJuLmpzIik7CiBsb2FkKCJSZXR1cm5DaGVj
a2VyLmpzIik7CiBsb2FkKCJSZXR1cm5FeGNlcHRpb24uanMiKTsKIGxvYWQoIlN0YW5kYXJkTGli
cmFyeS5qcyIpOworbG9hZCgiU3RydWN0TGF5b3V0QnVpbGRlci5qcyIpOwogbG9hZCgiU3RydWN0
VHlwZS5qcyIpOwogbG9hZCgiU3Vic3RpdHV0aW9uLmpzIik7CiBsb2FkKCJTdWZmaXhDYWxsQXNz
aWdubWVudC5qcyIpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEZ1
bmN0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Nh
bGxGdW5jdGlvbi5qcwkocmV2aXNpb24gMjIxNTQxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvQ2FsbEZ1bmN0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTcg
QEAKIGZ1bmN0aW9uIGNhbGxGdW5jdGlvbihwcm9ncmFtLCBuYW1lLCB0eXBlQXJndW1lbnRzLCBh
cmd1bWVudExpc3QpCiB7CiAgICAgbGV0IGFyZ3VtZW50VHlwZXMgPSBhcmd1bWVudExpc3QubWFw
KGFyZ3VtZW50ID0+IGFyZ3VtZW50LnR5cGUpOwotICAgIGxldCBmdW5jID0gcmVzb2x2ZUlubGlu
ZWRGdW5jdGlvbihwcm9ncmFtLCBuYW1lLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzKTsK
LSAgICBpZiAoIWZ1bmMpCi0gICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKCI8Y2FsbEZ1bmN0
aW9uPiIsICJDYW5ub3QgcmVzb2x2ZSBmdW5jdGlvbiBjYWxsICIgKyBuYW1lICsgIjwiICsgdHlw
ZUFyZ3VtZW50cyArICI+KCIgKyBhcmd1bWVudExpc3QgKyAiKSIpOwotICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgZnVuYy5wYXJhbWV0ZXJzLmxlbmd0aDsgKytpKQotICAgICAgICBmdW5jLnBhcmFt
ZXRlcnNbaV0uZVB0ci5jb3B5RnJvbShhcmd1bWVudExpc3RbaV0uZVB0ciwgYXJndW1lbnRUeXBl
c1tpXS5zaXplKTsKKyAgICBsZXQgZnVuY09yRmFpbHVyZXMgPSByZXNvbHZlSW5saW5lZEZ1bmN0
aW9uKHByb2dyYW0sIG5hbWUsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMpOworICAgIGlm
ICghKGZ1bmNPckZhaWx1cmVzIGluc3RhbmNlb2YgRnVuYykpIHsKKyAgICAgICAgbGV0IGZhaWx1
cmVzID0gZnVuY09yRmFpbHVyZXM7CisgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKCI8Y2Fs
bEZ1bmN0aW9uPiIsICJDYW5ub3QgcmVzb2x2ZSBmdW5jdGlvbiBjYWxsICIgKyBuYW1lICsgIjwi
ICsgdHlwZUFyZ3VtZW50cyArICI+KCIgKyBhcmd1bWVudExpc3QgKyAiKSIgKyAoZmFpbHVyZXMu
bGVuZ3RoID8gIjsgdHJpZWQ6XG4iICsgZmFpbHVyZXMuam9pbigiXG4iKSA6ICIiKSk7CisgICAg
fQorICAgIGxldCBmdW5jID0gZnVuY09yRmFpbHVyZXM7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCBmdW5jLnBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgbGV0IHR5cGUgPSBhcmd1
bWVudFR5cGVzW2ldLmluc3RhbnRpYXRlZFR5cGU7CisgICAgICAgIHR5cGUudmlzaXQobmV3IFN0
cnVjdExheW91dEJ1aWxkZXIoKSk7CisgICAgICAgIGZ1bmMucGFyYW1ldGVyc1tpXS5lUHRyLmNv
cHlGcm9tKGFyZ3VtZW50TGlzdFtpXS5lUHRyLCB0eXBlLnNpemUpOworICAgIH0KICAgICBsZXQg
cmVzdWx0ID0gbmV3IEV2YWx1YXRvcihwcm9ncmFtKS5ydW5Cb2R5KGZ1bmMucmV0dXJuVHlwZSwg
ZnVuYy5ib2R5KTsKICAgICByZXR1cm4gbmV3IFR5cGVkVmFsdWUoZnVuYy5yZXR1cm5UeXBlLnVu
aWZ5Tm9kZSwgcmVzdWx0KTsKIH0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0NoZWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
Q2hlY2tlci5qcwkocmV2aXNpb24gMjIxNTQxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvQ2hlY2tlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNzUsOSArNzUsOSBAQCBjbGFzcyBD
aGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgewogICAgICAgICBmb3IgKGxldCBpID0gMDsg
aSA8IHR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBsZXQgYXJndW1l
bnRJc1R5cGUgPSB0eXBlQXJndW1lbnRzW2ldIGluc3RhbmNlb2YgVHlwZTsKLSAgICAgICAgICAg
IGxldCByZXN1bHQgPSBub2RlLnR5cGVBcmd1bWVudHNbaV0udmlzaXQodGhpcyk7CisgICAgICAg
ICAgICBsZXQgcmVzdWx0ID0gdHlwZUFyZ3VtZW50c1tpXS52aXNpdCh0aGlzKTsKICAgICAgICAg
ICAgIGlmIChhcmd1bWVudElzVHlwZSkgewotICAgICAgICAgICAgICAgIGlmICghdHlwZUFyZ3Vt
ZW50c1tpXS5pbmhlcml0cyh0eXBlQXJndW1lbnRzW2ldKSkKKyAgICAgICAgICAgICAgICBpZiAo
IXR5cGVBcmd1bWVudHNbaV0uaW5oZXJpdHModHlwZVBhcmFtZXRlcnNbaV0ucHJvdG9jb2wpKQog
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihvcmlnaW4ub3JpZ2luU3Ry
aW5nLCAiVHlwZSBhcmd1bWVudCBkb2VzIG5vdCBpbmhlcml0IHByb3RvY29sIik7CiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmVxdWFscyh0eXBlUGFy
YW1ldGVyc1tpXS50eXBlKSkKQEAgLTE1Myw2ICsxNTMsMjkgQEAgY2xhc3MgQ2hlY2tlciBleHRl
bmRzIFZpc2l0b3IgewogICAgICAgICByZXR1cm4gbmV3IFB0clR5cGUobm9kZS5vcmlnaW4sIG5v
ZGUubFZhbHVlLmFkZHJlc3NTcGFjZSwgZWxlbWVudFR5cGUpOwogICAgIH0KICAgICAKKyAgICB2
aXNpdERvdEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxldCBzdHJ1Y3RUeXBlID0g
bm9kZS5zdHJ1Y3QudmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAgICAKKyAgICAgICAgbm9k
ZS5zdHJ1Y3RUeXBlID0gc3RydWN0VHlwZTsKKyAgICAgICAgCisgICAgICAgIGxldCB1bmRlcmx5
aW5nU3RydWN0ID0gc3RydWN0VHlwZTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3RUeXBl
IGluc3RhbmNlb2YgVHlwZVJlZikKKyAgICAgICAgICAgIHVuZGVybHlpbmdTdHJ1Y3QgPSB1bmRl
cmx5aW5nU3RydWN0LnR5cGU7CisgICAgICAgIAorICAgICAgICBpZiAoISh1bmRlcmx5aW5nU3Ry
dWN0IGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVF
cnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJPcGVyYW5kIHRvIGRvdCBleHByZXNzaW9u
IGlzIG5vdCBhIHN0cnVjdCB0eXBlOiAiICsgc3RydWN0VHlwZSk7CisgICAgICAgIAorICAgICAg
ICBpZiAoc3RydWN0VHlwZSBpbnN0YW5jZW9mIFR5cGVSZWYpIAorICAgICAgICAgICAgdW5kZXJs
eWluZ1N0cnVjdCA9IHVuZGVybHlpbmdTdHJ1Y3QuaW5zdGFudGlhdGUoc3RydWN0VHlwZS50eXBl
QXJndW1lbnRzLCAic2hhbGxvdyIpOworICAgICAgICAKKyAgICAgICAgbGV0IGZpZWxkID0gdW5k
ZXJseWluZ1N0cnVjdC5maWVsZEJ5TmFtZShub2RlLmZpZWxkTmFtZSk7CisgICAgICAgIGlmICgh
ZmllbGQpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmln
aW5TdHJpbmcsICJGaWVsZCAiICsgbm9kZS5maWVsZE5hbWUgKyAiIG5vdCBmb3VuZCBpbiAiICsg
c3RydWN0VHlwZSk7CisgICAgICAgIHJldHVybiBmaWVsZC50eXBlOworICAgIH0KKyAgICAKICAg
ICB2aXNpdFZhcmlhYmxlUmVmKG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gbm9kZS52YXJp
YWJsZS50eXBlOwpAQCAtMjI5LDExICsyNTIsOCBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlz
aXRvciB7CiAgICAgICAgICAgICBpZiAoIW92ZXJsb2FkLmZ1bmMpIHsKICAgICAgICAgICAgICAg
ICBmYWlsdXJlcy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKICAgICAgICAgICAgICAgICBs
ZXQgbWVzc2FnZSA9ICJEaWQgbm90IGZpbmQgZnVuY3Rpb24gZm9yIGNhbGwiOwotICAgICAgICAg
ICAgICAgIGlmIChmYWlsdXJlcy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgbGV0IHN0
cmluZ2lmeUZhaWx1cmUgPQotICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZSA9PiBmYWls
dXJlLmZ1bmMgKyAiIGRpZCBub3QgbWF0Y2ggYmVjYXVzZTogIiArIGZhaWx1cmUucmVhc29uOwot
ICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICIsIGJ1dCBjb25zaWRlcmVkOlxuIiArIGZh
aWx1cmVzLm1hcChzdHJpbmdpZnlGYWlsdXJlKS5qb2luKCJcbiIpCi0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChmYWlsdXJlcy5sZW5ndGgpCisgICAgICAgICAgICAgICAg
ICAgIG1lc3NhZ2UgKz0gIiwgYnV0IGNvbnNpZGVyZWQ6XG4iICsgZmFpbHVyZXMuam9pbigiXG4i
KQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdp
blN0cmluZywgbWVzc2FnZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0RvdEV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRG90RXhwcmVzc2lvbi5qcwkobm9uZXhpc3Rl
bnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgRG90RXhwcmVzc2lvbiBl
eHRlbmRzIEV4cHJlc3Npb24geworICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgc3RydWN0LCBmaWVs
ZE5hbWUpCisgICAgeworICAgICAgICBzdXBlcihvcmlnaW4pOworICAgICAgICB0aGlzLl9zdHJ1
Y3QgPSBzdHJ1Y3Q7CisgICAgICAgIHRoaXMuX2ZpZWxkTmFtZSA9IGZpZWxkTmFtZTsKKyAgICB9
CisgICAgCisgICAgZ2V0IHN0cnVjdCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdDsgfQorICAgIGdl
dCBmaWVsZE5hbWUoKSB7IHJldHVybiB0aGlzLl9maWVsZE5hbWU7IH0KKyAgICBnZXQgaXNMVmFs
dWUoKSB7IHJldHVybiB0aGlzLnN0cnVjdC5pc0xWYWx1ZTsgfQorICAgIAorICAgIHRvU3RyaW5n
KCkKKyAgICB7CisgICAgICAgIHJldHVybiAiKCIgKyB0aGlzLnN0cnVjdCArICIuIiArIHRoaXMu
ZmllbGROYW1lICsgIikiOworICAgIH0KK30KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzCShyZXZpc2lvbiAyMjE1NDEpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qcwkod29ya2luZyBjb3B5
KQpAQCAtMzMsNyArMzMsNiBAQCBjbGFzcyBFQnVmZmVyQnVpbGRlciBleHRlbmRzIFZpc2l0b3Ig
ewogICAgIAogICAgIF9jcmVhdGVFUHRyKHR5cGUpCiAgICAgewotICAgICAgICB0eXBlID0gdHlw
ZS5pbnN0YW50aWF0ZWRUeXBlOwogICAgICAgICBsZXQgYnVmZmVyID0gbmV3IEVCdWZmZXIodHlw
ZS5zaXplKTsKICAgICAgICAgaWYgKCF0eXBlLnBvcHVsYXRlRGVmYXVsdFZhbHVlKQogICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcG9wdWxhdGVEZWZhdWx0VmFsdWUgd2l0aDog
IiArIHR5cGUpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRVB0ci5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FUHRyLmpzCShyZXZp
c2lvbiAyMjE1NDEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FUHRyLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC01NiwxMCArNTYsMjIgQEAgY2xhc3MgRVB0ciB7CiAgICAgICAgIHJl
dHVybiB0aGlzLmJ1ZmZlci5nZXQodGhpcy5vZmZzZXQpOwogICAgIH0KICAgICAKKyAgICBnZXQo
b2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyLmdldCh0aGlzLm9mZnNl
dCArIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIHNldChvZmZzZXQsIHZhbHVlKQorICAgIHsK
KyAgICAgICAgdGhpcy5idWZmZXIuc2V0KHRoaXMub2Zmc2V0ICsgb2Zmc2V0LCB2YWx1ZSk7Cisg
ICAgfQorICAgIAogICAgIGNvcHlGcm9tKG90aGVyLCBzaXplKQogICAgIHsKKyAgICAgICAgaWYg
KHNpemUgPT0gbnVsbCkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNvcHkg
bnVsbCBzaXplIik7CiAgICAgICAgIGZvciAobGV0IGkgPSBzaXplOyBpLS07KQotICAgICAgICAg
ICAgdGhpcy5idWZmZXIuc2V0KGksIG90aGVyLmJ1ZmZlci5nZXQoaSkpOworICAgICAgICAgICAg
dGhpcy5zZXQoaSwgb3RoZXIuZ2V0KGkpKTsKICAgICB9CiAgICAgCiAgICAgdG9TdHJpbmcoKQpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkocmV2aXNp
b24gMjIxNTQxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw5ICs4NywxMCBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0ZW5k
cyBWaXNpdG9yIHsKICAgICAKICAgICB2aXNpdEFzc2lnbm1lbnQobm9kZSkKICAgICB7Ci0gICAg
ICAgIGxldCByZXN1bHQgPSBub2RlLmxocy52aXNpdCh0aGlzKTsKLSAgICAgICAgcmVzdWx0LmNv
cHlGcm9tKG5vZGUucmhzLnZpc2l0KHRoaXMpLCBub2RlLnR5cGUuc2l6ZSk7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIGxldCB0YXJnZXQgPSBub2RlLmxocy52aXNpdCh0aGlzKTsK
KyAgICAgICAgbGV0IHNvdXJjZSA9IG5vZGUucmhzLnZpc2l0KHRoaXMpOworICAgICAgICB0YXJn
ZXQuY29weUZyb20oc291cmNlLCBub2RlLnR5cGUuc2l6ZSk7CisgICAgICAgIHJldHVybiB0YXJn
ZXQ7CiAgICAgfQogICAgIAogICAgIHZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUpCkBA
IC0xMDIsNiArMTAzLDEyIEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAg
ICAgICByZXR1cm4gRVB0ci5ib3gobm9kZS5sVmFsdWUudmlzaXQodGhpcykpOwogICAgIH0KICAg
ICAKKyAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxldCBzdHJ1
Y3RQdHIgPSBub2RlLnN0cnVjdC52aXNpdCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIHN0cnVjdFB0
ci5wbHVzKG5vZGUuZmllbGQub2Zmc2V0KTsKKyAgICB9CisgICAgCiAgICAgdmlzaXRDb21tYUV4
cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQ7CkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GaWVsZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9GaWVsZC5qcwkocmV2aXNpb24gMjIxNTQxKQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRmllbGQuanMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDkg
KzI0LDEwIEBACiAgKi8KICJ1c2Ugc3RyaWN0IjsKIAotY2xhc3MgRmllbGQgeworY2xhc3MgRmll
bGQgZXh0ZW5kcyBOb2RlIHsKICAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUsIHR5cGUpCiAg
ICAgeworICAgICAgICBzdXBlcigpOwogICAgICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47CiAg
ICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOwogICAgICAgICB0aGlzLl90eXBlID0gdHlwZTsKSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNEZWYuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuY0RlZi5qcwkocmV2aXNpb24gMjIx
NTQxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuY0RlZi5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNiArMzEsMTUgQEAgY2xhc3MgRnVuY0RlZiBleHRlbmRzIEZ1bmMgewog
ICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwogICAgIH0KICAgICAKKyAgICByZXdyaXRlKHJld3Jp
dGVyKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3R5cGVQYXJhbWV0ZXJzLmxlbmd0aCkKKyAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJld3JpdGUgYW4gdW5pbnN0YW50aWF0
ZWQgZnVuY3Rpb24iKTsKKyAgICAgICAgdGhpcy5fcmV0dXJuVHlwZSA9IHRoaXMuX3JldHVyblR5
cGUudmlzaXQocmV3cml0ZXIpOworICAgICAgICB0aGlzLl9wYXJhbWV0ZXJzID0gdGhpcy5fcGFy
YW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNpdChyZXdyaXRlcikpOworICAg
ICAgICB0aGlzLmJvZHkgPSB0aGlzLmJvZHkudmlzaXQocmV3cml0ZXIpOworICAgIH0KKyAgICAK
ICAgICB0b1N0cmluZygpCiAgICAgewogICAgICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKSAr
ICIgIiArIHRoaXMuYm9keTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1
bmNJbnN0YW50aWF0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvRnVuY0luc3RhbnRpYXRvci5qcwkocmV2aXNpb24gMjIxNTQxKQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuY0luc3RhbnRpYXRvci5qcwkod29ya2luZyBjb3B5KQpA
QCAtMzIsMTIgKzMyLDEyIEBAIGNsYXNzIEZ1bmNJbnN0YW50aWF0b3IgewogICAgIH0KICAgICAK
ICAgICAvLyBSZXR1cm5zIGEgRnVuYyBvYmplY3QgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIGEg
cGFydGljdWxhciBzeXN0ZW0gb2YgdHlwZSBhcmd1bWVudHMuIFlvdSBtdXN0Ci0gICAgLy8gaW50
YW50aWF0ZSB0aGluZ3Mgd2l0aCBjb25jcmV0ZSB0eXBlcywgYmVjYXVzZSB0aGlzIGNvZGUgY2Fz
dWFsbHkgYXNzdW1lcyB0aGlzLgorICAgIC8vIGludGFudGlhdGUgdGhpbmdzIHdpdGggY29uY3Jl
dGUgdHlwZXMsIGJlY2F1c2UgdGhpcyBjb2RlIGNhc3VhbGx5IGFzc3VtZXMgdGhpcy4gTm90ZSB0
aGF0IHRoaXMKKyAgICAvLyB3aWxsIHJldHVybiBhIGRpZmZlcmVudCBmdW5jIGZyb20gYGZ1bmNg
IG5vIG1hdHRlciB3aGF0LiBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBjYW4gdXNlIHRoZQorICAgIC8v
IHJldHVybmVkIGZ1bmMgZm9yIHJld3JpdGVzIHRoYXQgaW5zdGFudGlhdGUgdHlwZXMgd2l0aG91
dCBkZXN0cm95aW5nIG91ciBhYmlsaXR5IHRvIGRvIG92ZXJsb2FkCisgICAgLy8gcmVzb2x1dGlv
bnMgb24gdGhlIG9yaWdpbmFsIFByb2dyYW0uCiAgICAgZ2V0VW5pcXVlKGZ1bmMsIHR5cGVBcmd1
bWVudHMpCiAgICAgewotICAgICAgICBpZiAoIWZ1bmMudHlwZVBhcmFtZXRlcnMubGVuZ3RoKQot
ICAgICAgICAgICAgcmV0dXJuIGZ1bmM7Ci0gICAgICAgIAogICAgICAgICBsZXQgaW5zdGFuY2Vz
ID0gdGhpcy5faW5zdGFuY2VzLmdldChmdW5jKTsKICAgICAgICAgaWYgKCFpbnN0YW5jZXMpCiAg
ICAgICAgICAgICB0aGlzLl9pbnN0YW5jZXMuc2V0KGZ1bmMsIGluc3RhbmNlcyA9IFtdKTsKQEAg
LTk1LDcgKzk1LDggQEAgY2xhc3MgRnVuY0luc3RhbnRpYXRvciB7CiAgICAgICAgICAgICAgICAg
ICAgIGZ1bmMucGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNpdChzdWJz
dGl0dXRpb24pKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgbGV0IHJlc3Vs
dGluZ0Z1bmMgPSBmdW5jLnZpc2l0KG5ldyBJbnN0YW50aWF0ZSgpKTsKKyAgICAgICAgCisgICAg
ICAgIGxldCByZXN1bHRpbmdGdW5jID0gZnVuYy52aXNpdChuZXcgSW5zdGFudGlhdGUoc3Vic3Rp
dHV0aW9uKSk7CiAgICAgICAgIGxldCBpbnN0YW5jZSA9IHtmdW5jOiByZXN1bHRpbmdGdW5jLCB0
eXBlQXJndW1lbnRzfTsKICAgICAgICAgaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0aW5nRnVuYzsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0lubGluZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9JbmxpbmUuanMJKHJldmlzaW9uIDIyMTU0MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0lubGluZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTAgQEAgZnVuY3Rp
b24gaW5saW5lKHByb2dyYW0pCiB7CiAgICAgZm9yIChsZXQgZnVuY0xpc3Qgb2YgcHJvZ3JhbS5m
dW5jdGlvbnMudmFsdWVzKCkpIHsKICAgICAgICAgZm9yIChsZXQgZnVuYyBvZiBmdW5jTGlzdCkg
ewotICAgICAgICAgICAgaWYgKCFmdW5jLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkKKyAgICAgICAg
ICAgIGlmICghZnVuYy50eXBlUGFyYW1ldGVycy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBm
dW5jID0gcHJvZ3JhbS5mdW5jSW5zdGFudGlhdG9yLmdldFVuaXF1ZShmdW5jLCBbXSkKICAgICAg
ICAgICAgICAgICBfaW5saW5lRnVuY3Rpb24ocHJvZ3JhbSwgZnVuYywgbmV3IFZpc2l0aW5nU2V0
KGZ1bmMpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KQEAgLTQxLDE5ICs0
MywyMyBAQCBmdW5jdGlvbiBfaW5saW5lRnVuY3Rpb24ocHJvZ3JhbSwgZnVuYywgCiAgICAgaWYg
KGZ1bmMuaW5saW5lZCB8fCBmdW5jLmlzTmF0aXZlKQogICAgICAgICByZXR1cm47CiAgICAgCisg
ICAgZnVuYy5yZXdyaXRlKG5ldyBJbnN0YW50aWF0ZUltbWVkaWF0ZXMoKSk7CisgICAgCiAgICAg
Ly8gVGhpcyBpcyB0aGUgcHJlY2lzZSB0aW1lIHdoZW4gd2UgY2FuIGJ1aWxkIEVCdWZmZXJzIGlu
IG9yZGVyIHRvIGdldCB0aGVtIHRvIGJlIHVuaXF1ZWQgYnkKICAgICAvLyB0eXBlIGluc3RhbnRp
YXRpb24gYnV0IG5vdGhpbmcgZWxzZS4KKyAgICBmdW5jLnZpc2l0KG5ldyBTdHJ1Y3RMYXlvdXRC
dWlsZGVyKCkpOwogICAgIGZ1bmMudmlzaXQobmV3IEVCdWZmZXJCdWlsZGVyKHByb2dyYW0pKTsK
ICAgICAKLSAgICBmdW5jLmJvZHkgPSBmdW5jLmJvZHkudmlzaXQobmV3IElubGluZXIocHJvZ3Jh
bSwgZnVuYywgdmlzaXRpbmcpKTsKKyAgICBmdW5jLnJld3JpdGUobmV3IElubGluZXIocHJvZ3Jh
bSwgZnVuYywgdmlzaXRpbmcpKTsKKwogICAgIGZ1bmMuaW5saW5lZCA9IHRydWU7CiB9CiAKIGZ1
bmN0aW9uIHJlc29sdmVJbmxpbmVkRnVuY3Rpb24ocHJvZ3JhbSwgbmFtZSwgdHlwZUFyZ3VtZW50
cywgYXJndW1lbnRUeXBlcykKIHsKICAgICBsZXQgb3ZlcmxvYWQgPSBwcm9ncmFtLnJlc29sdmVG
dW5jT3ZlcmxvYWQobmFtZSwgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcyk7Ci0gICAgaWYg
KCFvdmVybG9hZCkKLSAgICAgICAgcmV0dXJuIG51bGw7CisgICAgaWYgKCFvdmVybG9hZC5mdW5j
KQorICAgICAgICByZXR1cm4gb3ZlcmxvYWQuZmFpbHVyZXM7CiAgICAgaWYgKCFvdmVybG9hZC5m
dW5jLnR5cGVQYXJhbWV0ZXJzKQogICAgICAgICByZXR1cm4gb3ZlcmxvYWQuZnVuYzsKICAgICBs
ZXQgZnVuYyA9IHByb2dyYW0uZnVuY0luc3RhbnRpYXRvci5nZXRVbmlxdWUob3ZlcmxvYWQuZnVu
Yywgb3ZlcmxvYWQudHlwZUFyZ3VtZW50cyk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbmxpbmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0lubGluZXIuanMJKHJldmlzaW9uIDIyMTU0MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0lubGluZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDE1IEBA
IGNsYXNzIElubGluZXIgZXh0ZW5kcyBSZXdyaXRlciB7CiAgICAgICAgIHRoaXMuX3Zpc2l0aW5n
ID0gdmlzaXRpbmc7CiAgICAgfQogICAgIAorICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQor
ICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IHN1cGVyLnZpc2l0RG90RXhwcmVzc2lvbihub2Rl
KTsKKyAgICAgICAgcmVzdWx0LmZpZWxkID0gcmVzdWx0LnN0cnVjdFR5cGUudW5pZnlOb2RlLmZp
ZWxkQnlOYW1lKHJlc3VsdC5maWVsZE5hbWUpOworICAgICAgICBpZiAocmVzdWx0LmZpZWxkLm9m
ZnNldCA9PSBudWxsKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbi1sYWlkLW91dCBm
aWVsZDogIiArIHJlc3VsdC5maWVsZCArICIgKGluICIgKyByZXN1bHQuc3RydWN0VHlwZSArICIp
Iik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAogICAgIHZpc2l0Q2FsbEV4
cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl92aXNpdGluZy5kb1Zp
c2l0KG5vZGUuZnVuYywgKCkgPT4gewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvSW5zdGFudGlhdGVJbW1lZGlhdGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0luc3RhbnRpYXRlSW1tZWRpYXRlcy5qcwkocmV2aXNpb24gMjIxNTQx
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5zdGFudGlhdGVJbW1lZGlhdGVz
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMiArMjgsMTkgQEAgY2xhc3MgSW5zdGFudGlhdGVJ
bW1lZGlhdGVzIGV4dGVuZHMgUmV3cgogICAgIHZpc2l0VHlwZVJlZihub2RlKQogICAgIHsKICAg
ICAgICAgbm9kZSA9IHN1cGVyLnZpc2l0VHlwZVJlZihub2RlKTsKLSAgICAgICAgcmV0dXJuIG5v
ZGUuaW5zdGFudGlhdGVkVHlwZTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IFR5cGVSZWYud3JhcChu
b2RlLmluc3RhbnRpYXRlZFR5cGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAg
ICAKICAgICB2aXNpdFJlZmVyZW5jZVR5cGUobm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiBu
b2RlOwogICAgIH0KKyAgICAKKyAgICB2aXNpdFZhcmlhYmxlRGVjbChub2RlKQorICAgIHsKKyAg
ICAgICAgbGV0IHJlc3VsdCA9IHN1cGVyLnZpc2l0VmFyaWFibGVEZWNsKG5vZGUpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL05hbWVSZXNvbHZlci5qcwkocmV2aXNpb24gMjIxNTQxKQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDAsOSArMTQwLDkgQEAgY2xhc3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7CiAg
ICAgICAgICAgICAgICAgaWYgKCF0aGluZykKICAgICAgICAgICAgICAgICAgICAgbmV3IFdUeXBl
RXJyb3IodHlwZUFyZ3VtZW50Lm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDb3VsZCBub3QgZmluZCB0
eXBlIG9yIHZhcmlhYmxlIG5hbWVkICIgKyB0eXBlQXJndW1lbnQubmFtZSk7CiAgICAgICAgICAg
ICAgICAgaWYgKHRoaW5nIGluc3RhbmNlb2YgVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAg
dHlwZUFyZ3VtZW50W2ldID0gbmV3IFZhcmlhYmxlUmVmKHR5cGVBcmd1bWVudC5vcmlnaW4sIHR5
cGVBcmd1bWVudC5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgdHlwZUFyZ3VtZW50c1tpXSA9
IG5ldyBWYXJpYWJsZVJlZih0eXBlQXJndW1lbnQub3JpZ2luLCB0eXBlQXJndW1lbnQubmFtZSk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHR5cGVBcmd1bWVu
dFtpXSA9IG5ldyBUeXBlUmVmKHR5cGVBcmd1bWVudC5vcmlnaW4sIHR5cGVBcmd1bWVudC5uYW1l
LCBbXSk7CisgICAgICAgICAgICAgICAgICAgIHR5cGVBcmd1bWVudHNbaV0gPSBuZXcgVHlwZVJl
Zih0eXBlQXJndW1lbnQub3JpZ2luLCB0eXBlQXJndW1lbnQubmFtZSwgW10pOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAodHlwZUFyZ3VtZW50W2ldIGluc3Rh
bmNlb2YgVmFsdWUKQEAgLTE2Myw3ICsxNjMsNyBAQCBjbGFzcyBOYW1lUmVzb2x2ZXIgZXh0ZW5k
cyBWaXNpdG9yIHsKICAgICAgICAgbm9kZS50eXBlID0gdHlwZTsKICAgICAgICAgCiAgICAgICAg
IGlmICh0eXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCAhPSBub2RlLnR5cGVBcmd1bWVudHMubGVu
Z3RoKQotICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2lu
U3RyaW5nLCAiV3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIik7CisgICAgICAgICAgICB0
aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJXcm9uZyBudW1i
ZXIgb2YgdHlwZSBhcmd1bWVudHMgKHBhc3NlZCAiICsgbm9kZS50eXBlQXJndW1lbnRzLmxlbmd0
aCArICIsIGV4cGVjdGVkICIgKyB0eXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCArICIpIik7CiAg
ICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlwZS50eXBlUGFyYW1ldGVycy5sZW5ndGg7ICsr
aSkgewogICAgICAgICAgICAgbGV0IHBhcmFtZXRlcklzVHlwZSA9IHR5cGUudHlwZVBhcmFtZXRl
cnNbaV0gaW5zdGFuY2VvZiBUeXBlVmFyaWFibGU7CiAgICAgICAgICAgICBsZXQgYXJndW1lbnRJ
c1R5cGUgPSBub2RlLnR5cGVBcmd1bWVudHNbaV0gaW5zdGFuY2VvZiBUeXBlOwpJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCShyZXZpc2lvbiAyMjE1NDEpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNywxMiBAQAogY2xhc3MgTm9kZSB7CiAgICAgdmlzaXQodmlzaXRvcikKICAgICB7CisgICAg
ICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBzdGFzaCBhIG1lbW8gdGFibGUgaW4gdGhlIHZpc2l0b3Iu
IFNvLCBiZWZvcmUgY2FsbGluZyB0aGUgdmlzaXRvciwgd2UgYXNrCisgICAgICAgIC8vIGl0IGlm
IHRoZXkgaGF2ZSBzZWVuIHRoaXMgbm9kZSBiZWZvcmUuIElmIHRoZXkgaGF2ZSwgdGhlbiB3ZSBy
ZXR1cm4gd2hhdCB0aGV5IHJldHVybmVkIHRoZQorICAgICAgICAvLyBsYXN0IHRpbWUuIFRoaXMg
YWxzbyB0cml2aWFsbHkgbWFrZXMgdGhlIHJld3JpdGVyIGRvIHJlbWFwcGluZyBjb3JyZWN0bHku
IFRoZSBkb3duc2lkZSBvZgorICAgICAgICAvLyBub3QgZG9pbmcgaXQgaXMgbW9zdGx5IHRoYXQg
dmFyaW91cyB2aXNpdG9ycyBtaWdodCBjaGVjayB0aGUgc2FtZSB0eXBlcyBtdWx0aXBsZSB0aW1l
cy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NjI4NgorICAgICAgICAKICAgICAgICAgbGV0IHZpc2l0RnVuYyA9IHZpc2l0b3JbInZpc2l0IiAr
IHRoaXMuY29uc3RydWN0b3IubmFtZV07CiAgICAgICAgIGlmICghdmlzaXRGdW5jKQogICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJObyB2aXNpdCBmdW5jdGlvbiBmb3IgIiArIHRoaXMuY29u
c3RydWN0b3IubmFtZSArICIgaW4gIiArIHZpc2l0b3IuY29uc3RydWN0b3IubmFtZSk7CkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9PdmVybG9hZFJlc29sdXRpb25GYWlsdXJl
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL092ZXJsb2Fk
UmVzb2x1dGlvbkZhaWx1cmUuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUgewor
ICAgIGNvbnN0cnVjdG9yKGZ1bmMsIHJlYXNvbikKKyAgICB7CisgICAgICAgIHRoaXMuX2Z1bmMg
PSBmdW5jOworICAgICAgICB0aGlzLl9yZWFzb24gPSByZWFzb247CisgICAgfQorICAgIAorICAg
IGdldCBmdW5jKCkgeyByZXR1cm4gdGhpcy5fZnVuYzsgfQorICAgIGdldCByZWFzb24oKSB7IHJl
dHVybiB0aGlzLl9yZWFzb247IH0KKyAgICAKKyAgICB0b1N0cmluZygpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5mdW5jICsgIiBkaWQgbm90IG1hdGNoIGJlY2F1c2U6ICIgKyB0aGlzLnJl
YXNvbjsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Bh
cnNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNl
LmpzCShyZXZpc2lvbiAyMjE1NDEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Q
YXJzZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzc1LDcgKzM3NSw3IEBAIGZ1bmN0aW9uIHBhcnNl
KHByb2dyYW0sIG9yaWdpbiwgbGluZU51bWIKICAgICAgICAgICAgIGNhc2UgIi0+IjoKICAgICAg
ICAgICAgICAgICBpZiAodG9rZW4udGV4dCA9PSAiLT4iKQogICAgICAgICAgICAgICAgICAgICBs
ZWZ0ID0gbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbih0b2tlbiwgbGVmdCk7Ci0gICAgICAgICAg
ICAgICAgbGVmdCA9IG5ldyBEb3RFeHByZXNzaW9uKHRva2VuLCBsZWZ0LCBjb25zdW1lS2luZCgi
aWRlbnRpZmllciIpKTsKKyAgICAgICAgICAgICAgICBsZWZ0ID0gbmV3IERvdEV4cHJlc3Npb24o
dG9rZW4sIGxlZnQsIGNvbnN1bWVLaW5kKCJpZGVudGlmaWVyIikudGV4dCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICJbIjogewogICAgICAgICAgICAgICAgIGxl
dCBpbmRleCA9IHBhcnNlRXhwcmVzc2lvbigpOwpAQCAtNjcxLDYgKzY3MSwyNiBAQCBmdW5jdGlv
biBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIGxpbmVOdW1iCiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogICAgIAorICAgIGZ1bmN0aW9uIHBhcnNlRmllbGQoKQorICAgIHsKKyAgICAgICAg
bGV0IHR5cGUgPSBwYXJzZVR5cGUoKTsKKyAgICAgICAgbGV0IG5hbWUgPSBjb25zdW1lS2luZCgi
aWRlbnRpZmllciIpOworICAgICAgICBjb25zdW1lKCI7Iik7CisgICAgICAgIHJldHVybiBuZXcg
RmllbGQobmFtZSwgbmFtZS50ZXh0LCB0eXBlKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24g
cGFyc2VTdHJ1Y3RUeXBlKCkKKyAgICB7CisgICAgICAgIGxldCBvcmlnaW4gPSBjb25zdW1lKCJz
dHJ1Y3QiKTsKKyAgICAgICAgbGV0IG5hbWUgPSBjb25zdW1lS2luZCgiaWRlbnRpZmllciIpLnRl
eHQ7CisgICAgICAgIGxldCB0eXBlUGFyYW1ldGVycyA9IHBhcnNlVHlwZVBhcmFtZXRlcnMoKTsK
KyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTdHJ1Y3RUeXBlKG9yaWdpbiwgbmFtZSwgdHlwZVBh
cmFtZXRlcnMpOworICAgICAgICBjb25zdW1lKCJ7Iik7CisgICAgICAgIHdoaWxlICghdHJ5Q29u
c3VtZSgifSIpKQorICAgICAgICAgICAgcmVzdWx0LmFkZChwYXJzZUZpZWxkKCkpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGxl
dCB0b2tlbiA9IGxleGVyLnBlZWsoKTsKICAgICAgICAgaWYgKCF0b2tlbikKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU92ZXJsb2FkSW1wbC5q
cwkocmV2aXNpb24gMjIxNTQxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVz
b2x2ZU92ZXJsb2FkSW1wbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDExIEBAIGZ1
bmN0aW9uIHJlc29sdmVPdmVybG9hZEltcGwoZnVuY3Rpb25zLCAKICAgICBsZXQgZmFpbHVyZXMg
PSBbXTsKICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmN0aW9ucykgewogICAgICAgICBpZiAodHlw
ZUFyZ3VtZW50cy5sZW5ndGggJiYgdHlwZUFyZ3VtZW50cy5sZW5ndGggIT0gZnVuYy50eXBlUGFy
YW1ldGVycy5sZW5ndGgpIHsKLSAgICAgICAgICAgIGZhaWx1cmVzLnB1c2goe2Z1bmMsIHJlYXNv
bjogIldyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyAocGFzc2VkICIgKyB0eXBlQXJndW1l
bnRzLmxlbmd0aCArICIsIHJlcXVpcmUgIiArIGZ1bmMudHlwZVBhcmFtZXRlcnMubGVuZ3RoICsg
IikifSk7CisgICAgICAgICAgICBmYWlsdXJlcy5wdXNoKG5ldyBPdmVybG9hZFJlc29sdXRpb25G
YWlsdXJlKGZ1bmMsICJXcm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgKHBhc3NlZCAiICsg
dHlwZUFyZ3VtZW50cy5sZW5ndGggKyAiLCByZXF1aXJlICIgKyBmdW5jLnR5cGVQYXJhbWV0ZXJz
Lmxlbmd0aCArICIpIikpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKGFyZ3VtZW50VHlwZXMubGVuZ3RoICE9IGZ1bmMucGFyYW1ldGVycy5sZW5ndGgpIHsK
LSAgICAgICAgICAgIGZhaWx1cmVzLnB1c2goe2Z1bmMsIHJlYXNvbjogIldyb25nIG51bWJlciBv
ZiBhcmd1bWVudHMgKHBhc3NlZCAiICsgYXJndW1lbnRUeXBlcy5sZW5ndGggKyAiLCByZXF1aXJl
ICIgKyBmdW5jLnBhcmFtZXRlcnMubGVuZ3RoICsgIikifSk7CisgICAgICAgICAgICBmYWlsdXJl
cy5wdXNoKG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJXcm9uZyBudW1iZXIg
b2YgYXJndW1lbnRzIChwYXNzZWQgIiArIGFyZ3VtZW50VHlwZXMubGVuZ3RoICsgIiwgcmVxdWly
ZSAiICsgZnVuYy5wYXJhbWV0ZXJzLmxlbmd0aCArICIpIikpOwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KICAgICAgICAgbGV0IHVuaWZpY2F0aW9uQ29udGV4dCA9IG5ldyBVbmlm
aWNhdGlvbkNvbnRleHQoZnVuYy50eXBlUGFyYW1ldGVycyk7CkBAIC00Miw3ICs0Miw3IEBAIGZ1
bmN0aW9uIHJlc29sdmVPdmVybG9hZEltcGwoZnVuY3Rpb25zLCAKICAgICAgICAgICAgIGxldCBh
cmd1bWVudCA9IHR5cGVBcmd1bWVudHNbaV07CiAgICAgICAgICAgICBsZXQgcGFyYW1ldGVyID0g
ZnVuYy50eXBlUGFyYW1ldGVyc1tpXTsKICAgICAgICAgICAgIGlmICghYXJndW1lbnQudW5pZnko
dW5pZmljYXRpb25Db250ZXh0LCBwYXJhbWV0ZXIpKSB7Ci0gICAgICAgICAgICAgICAgZmFpbHVy
ZXMucHVzaCh7ZnVuYywgcmVhc29uOiAiVHlwZSBhcmd1bWVudCAjIiArIChpICsgMSkgKyAiIGZv
ciBwYXJhbWV0ZXIgIiArIGZ1bmMudHlwZVBhcmFtZXRlcnMubmFtZSArICIgZG9lcyBub3QgbWF0
Y2ggKHBhc3NlZCAiICsgYXJndW1lbnQgKyAiLCByZXF1aXJlICIgKyBwYXJhbWV0ZXIgKyAiKSJ9
KTsKKyAgICAgICAgICAgICAgICBmYWlsdXJlcy5wdXNoKG5ldyBPdmVybG9hZFJlc29sdXRpb25G
YWlsdXJlKGZ1bmMsICJUeXBlIGFyZ3VtZW50ICMiICsgKGkgKyAxKSArICIgZm9yIHBhcmFtZXRl
ciAiICsgZnVuYy50eXBlUGFyYW1ldGVycy5uYW1lICsgIiBkb2VzIG5vdCBtYXRjaCAocGFzc2Vk
ICIgKyBhcmd1bWVudCArICIsIHJlcXVpcmUgIiArIHBhcmFtZXRlciArICIpIikpOwogICAgICAg
ICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CkBAIC01Myw3ICs1Myw3IEBAIGZ1bmN0aW9uIHJlc29sdmVPdmVybG9hZEltcGwoZnVuY3Rp
b25zLCAKICAgICAgICAgICAgIGlmICghYXJndW1lbnRUeXBlc1tpXSkKICAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgYXJndW1lbnQgdHlwZSBhdCBpID0gIiArIGkpOwogICAg
ICAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVzW2ldLnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwg
ZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMucHVz
aCh7ZnVuYywgcmVhc29uOiAiQXJndW1lbnQgIyIgKyAoaSArIDEpICsgIiAiICsgKGZ1bmMucGFy
YW1ldGVyc1tpXS5uYW1lID8gImZvciBwYXJhbWV0ZXIgIiArIGZ1bmMucGFyYW1ldGVyc1tpXS5u
YW1lIDogIiIpICsgIiBkb2VzIG5vdCBtYXRjaCAocGFzc2VkICIgKyBhcmd1bWVudFR5cGVzW2ld
ICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUgKyAiKSJ9KTsKKyAgICAg
ICAgICAgICAgICBmYWlsdXJlcy5wdXNoKG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1
bmMsICJBcmd1bWVudCAjIiArIChpICsgMSkgKyAiICIgKyAoZnVuYy5wYXJhbWV0ZXJzW2ldLm5h
bWUgPyAiZm9yIHBhcmFtZXRlciAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLm5hbWUgOiAiIikgKyAi
IGRvZXMgbm90IG1hdGNoIChwYXNzZWQgIiArIGFyZ3VtZW50VHlwZXNbaV0gKyAiLCByZXF1aXJl
ICIgKyBmdW5jLnBhcmFtZXRlcnNbaV0udHlwZSArICIpIikpOwogICAgICAgICAgICAgICAgIG9r
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC02MSw3
ICs2MSw3IEBAIGZ1bmN0aW9uIHJlc29sdmVPdmVybG9hZEltcGwoZnVuY3Rpb25zLCAKICAgICAg
ICAgaWYgKCFvaykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoIXVuaWZpY2F0
aW9uQ29udGV4dC52ZXJpZnkoKSkgewotICAgICAgICAgICAgZmFpbHVyZXMucHVzaCh7ZnVuYywg
cmVhc29uOiAiVmlvbGF0ZXMgdHlwZSB2YXJpYWJsZSBjb25zdHJhaW50cyJ9KTsKKyAgICAgICAg
ICAgIGZhaWx1cmVzLnB1c2gobmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIlZp
b2xhdGVzIHR5cGUgdmFyaWFibGUgY29uc3RyYWludHMiKSk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogICAgICAgICBsZXQgc2hvdWxkQnVpbGRUeXBlQXJndW1lbnRzID0gIXR5
cGVBcmd1bWVudHMubGVuZ3RoOwpAQCAtNzAsNyArNzAsNyBAQCBmdW5jdGlvbiByZXNvbHZlT3Zl
cmxvYWRJbXBsKGZ1bmN0aW9ucywgCiAgICAgICAgIGZvciAobGV0IHR5cGVQYXJhbWV0ZXIgb2Yg
ZnVuYy50eXBlUGFyYW1ldGVycykgewogICAgICAgICAgICAgbGV0IHR5cGVBcmd1bWVudCA9IHVu
aWZpY2F0aW9uQ29udGV4dC5maW5kKHR5cGVQYXJhbWV0ZXIpOwogICAgICAgICAgICAgaWYgKHR5
cGVBcmd1bWVudCA9PSB0eXBlUGFyYW1ldGVyKSB7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMu
cHVzaCh7ZnVuYywgcmVhc29uOiAiVHlwZSBwYXJhbWV0ZXIgIiArIHR5cGVQYXJhbWV0ZXIgKyAi
IGRpZCBub3QgZ2V0IGFzc2lnbmVkIGEgdHlwZSJ9KTsKKyAgICAgICAgICAgICAgICBmYWlsdXJl
cy5wdXNoKG5ldyBPdmVybG9hZFJlc29sdXRpb25mYWlsdXJlKGZ1bmMsICJUeXBlIHBhcmFtZXRl
ciAiICsgdHlwZVBhcmFtZXRlciArICIgZGlkIG5vdCBnZXQgYXNzaWduZWQgYSB0eXBlIikpOwog
ICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5q
cwkocmV2aXNpb24gMjIxNTQxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3
cml0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDggQEAgY2xhc3MgUmV3cml0ZXIg
ewogCiAgICAgLy8gVGhpcyBpcyBhbG1vc3Qgd3JvbmcuIFdlIGluc3RhbnRpYXRlIEZ1bmMgaW4g
U3Vic3RpdHV0aW9uIGluIFByb3RvY29sRGVjbC4gVGhlbiwgd2UgZW5kIHVwCiAgICAgLy8gbm90
IHJld3JpdGluZyB0eXBlIHZhcmlhYmxlcy4gSSB0aGluayB0aGF0IGp1c3Qgd29ya3MgYmVjYXVz
ZSBub3QgcmV3cml0aW5nIHRoZW0gdGhlcmUgaXMgT0suCisgICAgLy8gRXZlcnl3aGVyZSBlbHNl
LCBpdCdzIG1hbmRhdG9yeSB0aGF0IHdlIGRvbid0IHJld3JpdGUgdGhlc2UgYmVjYXVzZSB3ZSBh
bHdheXMgYXNzdW1lIHRoYXQKKyAgICAvLyB0eXBlIHZhcmlhYmxlcyBhcmUgb3V0c2lkZSB0aGUg
c2NvcGUgb2YgcmV3cml0aW5nLgogICAgIHZpc2l0VHlwZVZhcmlhYmxlKG5vZGUpIHsgcmV0dXJu
IG5vZGU7IH0KIAogICAgIHZpc2l0UHJvdG9jb2xGdW5jRGVjbChub2RlKQpAQCAtMTY5LDYgKzE3
MSwxNiBAQCBjbGFzcyBSZXdyaXRlciB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
ICAgIAorICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHJl
c3VsdCA9IG5ldyBEb3RFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLnN0cnVjdC52aXNpdCh0
aGlzKSwgbm9kZS5maWVsZE5hbWUpOworICAgICAgICByZXN1bHQuc3RydWN0VHlwZSA9IG5vZGUu
c3RydWN0VHlwZSA/IG5vZGUuc3RydWN0VHlwZS52aXNpdCh0aGlzKSA6IG51bGw7CisgICAgICAg
IC8vIFdlIGRvbid0IHdhbnQgdG8gcmV3cml0ZSBmaWVsZCwgc2luY2UgdGhpcyBpcyBhIGRlZXAg
cmVmZXJlbmNlIGdvaW5nIG91dCBvZiB0aGUgZnVuY3Rpb24uCisgICAgICAgIC8vIEFsc28sIHRo
aXMgaXMgc2V0IHVwIGR1cmluZyBpbmxpbmluZywgc28gd2UncmUgYWxyZWFkeSBmdWxseSBtb25v
bW9ycGhpc2VkLgorICAgICAgICByZXN1bHQuZmllbGQgPSBub2RlLmZpZWxkOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKICAgICB2aXNpdE1ha2VQdHJFeHByZXNzaW9uKG5v
ZGUpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IE1ha2VQdHJFeHByZXNzaW9uKG5vZGUub3Jp
Z2luLCBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKSk7CkBAIC0xNzYsOCArMTg4LDkgQEAgY2xhc3Mg
UmV3cml0ZXIgewogICAgIAogICAgIHZpc2l0VmFyaWFibGVSZWYobm9kZSkKICAgICB7Ci0gICAg
ICAgIG5vZGUudmFyaWFibGUgPSB0aGlzLl9nZXRNYXBwaW5nKG5vZGUudmFyaWFibGUpOwotICAg
ICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWYXJpYWJsZVJlZihu
b2RlLm9yaWdpbiwgbm9kZS5uYW1lKTsKKyAgICAgICAgcmVzdWx0LnZhcmlhYmxlID0gdGhpcy5f
Z2V0TWFwcGluZyhub2RlLnZhcmlhYmxlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAgICAgCiAgICAgdmlzaXRSZXR1cm4obm9kZSkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1N0cnVjdExheW91dEJ1aWxkZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0TGF5b3V0QnVpbGRlci5qcwkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RMYXlvdXRCdWlsZGVyLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgU3RydWN0TGF5b3V0
QnVpbGRlciBleHRlbmRzIFZpc2l0b3IgeworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAg
ICAgIHN1cGVyKCk7CisgICAgICAgIHRoaXMuX29mZnNldCA9IDA7CisgICAgfQorICAgIAorICAg
IHZpc2l0U3RydWN0VHlwZShub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUuc2l6ZSAhPSBu
dWxsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAobm9kZS50eXBlUGFyYW1ldGVy
cy5sZW5ndGgpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBkbyBsYXlvdXQg
Zm9yIGdlbmVyaWMgdHlwZTogIiArIG5vZGUpOworICAgICAgICBsZXQgb2xkT2Zmc2V0ID0gdGhp
cy5fb2Zmc2V0OworICAgICAgICB0aGlzLl9vZmZzZXQgPSAwOworICAgICAgICBzdXBlci52aXNp
dFN0cnVjdFR5cGUobm9kZSk7CisgICAgICAgIG5vZGUuc2l6ZSA9IHRoaXMuX29mZnNldDsKKyAg
ICAgICAgdGhpcy5fb2Zmc2V0ICs9IG9sZE9mZnNldDsKKyAgICB9CisgICAgCisgICAgZ2V0IG9m
ZnNldCgpIHsgcmV0dXJuIHRoaXMuX29mZnNldDsgfQorICAgIAorICAgIHZpc2l0RmllbGQobm9k
ZSkKKyAgICB7CisgICAgICAgIG5vZGUub2Zmc2V0ID0gdGhpcy5fb2Zmc2V0OworICAgICAgICBs
ZXQgc2l6ZSA9IG5vZGUudHlwZS5zaXplOworICAgICAgICBpZiAoc2l6ZSA9PSBudWxsKQorICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUeXBlIGRvZXMgbm90IGhhdmUgc2l6ZTogIiArIG5v
ZGUudHlwZSk7CisgICAgICAgIHRoaXMuX29mZnNldCArPSBzaXplOworICAgIH0KKyAgICAKKyAg
ICB2aXNpdFZhcmlhYmxlUmVmKG5vZGUpCisgICAgeworICAgICAgICBzdXBlci52aXNpdFZhcmlh
YmxlUmVmKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdFZhcmlhYmxlRGVjbChub2RlKQor
ICAgIHsKKyAgICAgICAgc3VwZXIudmlzaXRWYXJpYWJsZURlY2wobm9kZSk7CisgICAgfQorfQor
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdFR5cGUuanMJKHJl
dmlzaW9uIDIyMTU0MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdFR5
cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAgY2xhc3MgU3RydWN0VHlwZSBl
eHRlbmRzIFR5cGUgewogICAgIAogICAgIGFkZChmaWVsZCkKICAgICB7CisgICAgICAgIGZpZWxk
LnN0cnVjdCA9IHRoaXM7CiAgICAgICAgIGlmICh0aGlzLl9maWVsZHMuaGFzKGZpZWxkLm5hbWUp
KQogICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3IoZmllbGQub3JpZ2luLm9yaWdpblN0
cmluZywgIkR1cGxpY2F0ZSBmaWVsZCBuYW1lOiAiICsgZmllbGQubmFtZSk7CiAgICAgICAgIHRo
aXMuX2ZpZWxkcy5zZXQoZmllbGQubmFtZSwgZmllbGQpOwpAQCAtNTYsNyArNTcsNyBAQCBjbGFz
cyBTdHJ1Y3RUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogICAgIAotICAgIGluc3RhbnRpYXRlKHR5cGVBcmd1bWVudHMpCisgICAgaW5zdGFudGlhdGUo
dHlwZUFyZ3VtZW50cywgbW9kZSkKICAgICB7CiAgICAgICAgIGlmICh0eXBlQXJndW1lbnRzLmxl
bmd0aCAhPSB0aGlzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkKICAgICAgICAgICAgIHRocm93IG5l
dyBXVHlwZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJpbmcsICJXcm9uZyBudW1iZXIgb2YgdHlwZSBh
cmd1bWVudHMgdG8gaW5zdGFudGlhdGlvbiIpOwpAQCAtNjUsMTMgKzY2LDI1IEBAIGNsYXNzIFN0
cnVjdFR5cGUgZXh0ZW5kcyBUeXBlIHsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAg
ICAKICAgICAgICAgbGV0IHN1YnN0aXR1dGlvbiA9IG5ldyBTdWJzdGl0dXRpb24odGhpcy50eXBl
UGFyYW1ldGVycywgdHlwZUFyZ3VtZW50cyk7Ci0gICAgICAgIGxldCBpbnN0YW50aWF0ZUltbWVk
aWF0ZXMgPSBuZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVzKCk7CisgICAgICAgIGxldCBpbnN0YW50
aWF0ZUltbWVkaWF0ZXMgPSBtb2RlID09ICJzaGFsbG93IiA/IG51bGwgOiBuZXcgSW5zdGFudGlh
dGVJbW1lZGlhdGVzKCk7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgU3RydWN0VHlwZSh0aGlz
Lm9yaWdpbiwgdGhpcy5uYW1lLCBbXSk7Ci0gICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMu
ZmllbGRzKQotICAgICAgICAgICAgcmVzdWx0LmFkZChmaWVsZC52aXNpdChzdWJzdGl0dXRpb24p
LnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcykpOworICAgICAgICBmb3IgKGxldCBmaWVsZCBv
ZiB0aGlzLmZpZWxkcykgeworICAgICAgICAgICAgbGV0IG5ld0ZpZWxkID0gZmllbGQudmlzaXQo
c3Vic3RpdHV0aW9uKTsKKyAgICAgICAgICAgIGlmIChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpCisg
ICAgICAgICAgICAgICAgbmV3RmllbGQgPSBuZXdGaWVsZC52aXNpdChpbnN0YW50aWF0ZUltbWVk
aWF0ZXMpOworICAgICAgICAgICAgcmVzdWx0LmFkZChuZXdGaWVsZCk7CisgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgcG9wdWxhdGVEZWZhdWx0VmFs
dWUoYnVmZmVyLCBvZmZzZXQpCisgICAgeworICAgICAgICBpZiAodGhpcy5zaXplID09IG51bGwp
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlN0cnVjdCBkb2VzIG5vdCBoYXZlIGxheW91
dDogIiArIHRoaXMgKyAiICIgKyBkZXNjcmliZSh0aGlzKSk7CisgICAgICAgIGZvciAobGV0IGZp
ZWxkIG9mIHRoaXMuZmllbGRzKQorICAgICAgICAgICAgZmllbGQudHlwZS5wb3B1bGF0ZURlZmF1
bHRWYWx1ZShidWZmZXIsIG9mZnNldCArIGZpZWxkLm9mZnNldCk7CisgICAgfQorICAgIAogICAg
IHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiAic3RydWN0ICIgKyB0aGlzLm5hbWUg
KyAiPCIgKyB0aGlzLnR5cGVQYXJhbWV0ZXJzICsgIj4geyAiICsgQXJyYXkuZnJvbSh0aGlzLmZp
ZWxkcykuam9pbigiOyAiKSArICI7IH0iOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvU3Vic3RpdHV0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qcwkocmV2aXNpb24gMjIxNTQxKQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvU3Vic3RpdHV0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw3ICs0MSw3IEBAIGNsYXNzIFN1YnN0aXR1dGlvbiBleHRlbmRzIFJld3JpdGVyIHsKICAgICAg
ICAgaWYgKHJlcGxhY2VtZW50KSB7CiAgICAgICAgICAgICBpZiAobm9kZS50eXBlQXJndW1lbnRz
Lmxlbmd0aCkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdHlw
ZSBhcmd1bWVudHMgb24gdHlwZSB2YXJpYWJsZSIpOwotICAgICAgICAgICAgcmV0dXJuIHJlcGxh
Y2VtZW50OworICAgICAgICAgICAgcmV0dXJuIFR5cGVSZWYud3JhcChyZXBsYWNlbWVudCk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiBzdXBlci52aXNpdFR5cGVSZWYobm9k
ZSk7CkBAIC01MSw3ICs1MSw3IEBAIGNsYXNzIFN1YnN0aXR1dGlvbiBleHRlbmRzIFJld3JpdGVy
IHsKICAgICB7CiAgICAgICAgIGxldCByZXBsYWNlbWVudCA9IHRoaXMuX21hcC5nZXQobm9kZS52
YXJpYWJsZSk7CiAgICAgICAgIGlmIChyZXBsYWNlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBy
ZXBsYWNlbWVudDsKKyAgICAgICAgICAgIHJldHVybiBWYXJpYWJsZVJlZi53cmFwKHJlcGxhY2Vt
ZW50KTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBzdXBlci52aXNpdFZhcmlhYmxlUmVmKG5v
ZGUpOwogICAgIH0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwkocmV2
aXNpb24gMjIxNTQxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMzc2LDYgKzM3Niw2NiBAQCBmdW5jdGlvbiBURVNUX3NpbXBsZVVu
cmVhY2hhYmxlQ29kZSgpCiAgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvcik7
CiB9CiAKK2Z1bmN0aW9uIFRFU1Rfc2ltcGxlU3RydWN0KCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9
IGRvUHJlcChgCisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgaW50IHg7CisgICAg
ICAgICAgICBpbnQgeTsKKyAgICAgICAgfQorICAgICAgICBGb28gZm9vKEZvbyBmb28pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEZvbyByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQueCA9IGZv
by55OworICAgICAgICAgICAgcmVzdWx0LnkgPSBmb28ueDsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBsZXQgc3RydWN0VHlwZSA9IHByb2dyYW0u
dHlwZXMuZ2V0KCJGb28iKTsKKyAgICBpZiAoIXN0cnVjdFR5cGUpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiRGlkIG5vdCBmaW5kIEZvbyB0eXBlIik7CisgICAgbGV0IGJ1ZmZlciA9IG5ldyBF
QnVmZmVyKDIpOworICAgIGJ1ZmZlci5zZXQoMCwgNjIpOworICAgIGJ1ZmZlci5zZXQoMSwgMjQp
OworICAgIGxldCByZXN1bHQgPSBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbmV3
IFR5cGVkVmFsdWUoc3RydWN0VHlwZSwgbmV3IEVQdHIoYnVmZmVyLCAwKSldKTsKKyAgICBpZiAo
IXJlc3VsdC50eXBlLmVxdWFscyhzdHJ1Y3RUeXBlKSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJXcm9uZyByZXN1bHQgdHlwZTogIiArIHJlc3VsdC50eXBlKTsKKyAgICBsZXQgeCA9IHJlc3Vs
dC5lUHRyLmdldCgwKTsKKyAgICBsZXQgeSA9IHJlc3VsdC5lUHRyLmdldCgxKTsKKyAgICBpZiAo
eCAhPSAyNCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyByZXN1bHQgZm9yIHg6ICIg
KyB4ICsgIiAoeSA9ICIgKyB5ICsgIikiKTsKKyAgICBpZiAoeSAhPSA2MikKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJXcm9uZyByZXN1bHQgZm9yIHk6ICIgKyB5ICsgIiAoeCArICIgKyB4ICsg
IikiKTsKK30KKworZnVuY3Rpb24gVEVTVF9nZW5lcmljU3RydWN0SW5zdGFuY2UoKQoreworICAg
IGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgc3RydWN0IEZvbzxUPiB7CisgICAgICAg
ICAgICBUIHg7CisgICAgICAgICAgICBUIHk7CisgICAgICAgIH0KKyAgICAgICAgRm9vPGludD4g
Zm9vKEZvbzxpbnQ+IGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgRm9vPGludD4gcmVzdWx0
OworICAgICAgICAgICAgcmVzdWx0LnggPSBmb28ueTsKKyAgICAgICAgICAgIHJlc3VsdC55ID0g
Zm9vLng7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgYCk7Cisg
ICAgbGV0IHN0cnVjdFR5cGUgPSBUeXBlUmVmLmluc3RhbnRpYXRlKHByb2dyYW0udHlwZXMuZ2V0
KCJGb28iKSwgW3Byb2dyYW0uaW50cmluc2ljcy5pbnQzMl0pOworICAgIGxldCBidWZmZXIgPSBu
ZXcgRUJ1ZmZlcigyKTsKKyAgICBidWZmZXIuc2V0KDAsIDYyKTsKKyAgICBidWZmZXIuc2V0KDEs
IDI0KTsKKyAgICBsZXQgcmVzdWx0ID0gY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwg
W25ldyBUeXBlZFZhbHVlKHN0cnVjdFR5cGUsIG5ldyBFUHRyKGJ1ZmZlciwgMCkpXSk7CisgICAg
bGV0IHggPSByZXN1bHQuZVB0ci5nZXQoMCk7CisgICAgbGV0IHkgPSByZXN1bHQuZVB0ci5nZXQo
MSk7CisgICAgaWYgKHggIT0gMjQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgcmVz
dWx0IGZvciB4OiAiICsgeCArICIgKHkgPSAiICsgeSArICIpIik7CisgICAgaWYgKHkgIT0gNjIp
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgcmVzdWx0IGZvciB5OiAiICsgeSArICIg
KHggKyAiICsgeCArICIpIik7Cit9CisKIGxldCBiZWZvcmUgPSBwcmVjaXNlVGltZSgpOwogCiBs
ZXQgZmlsdGVyID0gLy4qLzsgLy8gcnVuIGV2ZXJ5dGhpbmcgYnkgZGVmYXVsdApJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCShyZXZpc2lvbiAyMjE1NDEpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw4IEBAIGNsYXNzIFR5cGUgZXh0ZW5kcyBOb2RlIHsKICAgICAKICAgICBpbmhlcml0cyhw
cm90b2NvbCkKICAgICB7CisgICAgICAgIGlmICghcHJvdG9jb2wpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHByb3RvY29sLmhhc0hlaXIodGhpcyk7CiAgICAgfQog
ICAgIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVJlZi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlUmVmLmpzCShyZXZp
c2lvbiAyMjE1NDEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlUmVmLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwxMyBAQCBjbGFzcyBUeXBlUmVmIGV4dGVuZHMg
VHlwZSB7CiAgICAgICAgIHJlc3VsdC50eXBlID0gdHlwZTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CisgICAgCisgICAgc3RhdGljIGluc3RhbnRpYXRlKHR5cGUsIHR5cGVBcmd1bWVu
dHMpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFR5cGVSZWYodHlwZS5vcmlnaW4s
IHR5cGUubmFtZSwgdHlwZUFyZ3VtZW50cyk7CisgICAgICAgIHJlc3VsdC50eXBlID0gdHlwZTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgCiAgICAgZ2V0IG9yaWdpbigpIHsgcmV0
dXJuIHRoaXMuX29yaWdpbjsgfQogICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsg
fQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFyaWFibGVSZWYuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFyaWFibGVSZWYuanMJ
KHJldmlzaW9uIDIyMTU0MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zhcmlh
YmxlUmVmLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiwxMyBAQCBjbGFzcyBWYXJpYWJs
ZVJlZiBleHRlbmRzIEV4cHJlc3Npb24gewogICAgICAgICB0aGlzLnZhcmlhYmxlID0gbnVsbDsK
ICAgICB9CiAgICAgCisgICAgc3RhdGljIHdyYXAodmFyaWFibGUpCisgICAgeworICAgICAgICBs
ZXQgcmVzdWx0ID0gbmV3IFZhcmlhYmxlUmVmKHZhcmlhYmxlLm9yaWdpbiwgdmFyaWFibGUubmFt
ZSk7CisgICAgICAgIHJlc3VsdC52YXJpYWJsZSA9IHZhcmlhYmxlOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKICAgICBnZXQgbmFtZSgpIHsgcmV0dXJuIHRoaXMuX25hbWU7
IH0KICAgICBnZXQgaXNDb25zdGV4cHIoKSB7IHJldHVybiB0aGlzLnZhcmlhYmxlLmlzQ29uc3Rl
eHByOyB9CiAgICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRoaXMudmFyaWFibGUudW5pZnlO
b2RlOyB9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMJKHJl
dmlzaW9uIDIyMTU0MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3Iu
anMJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDggQEAgY2xhc3MgVmlzaXRvciB7CiAgICAg
ewogICAgICAgICBmb3IgKGxldCB0eXBlQXJndW1lbnQgb2Ygbm9kZS50eXBlQXJndW1lbnRzKQog
ICAgICAgICAgICAgdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpOworICAgICAgICBpZiAobm9kZS50
eXBlKQorICAgICAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKICAg
ICB2aXNpdE5hdGl2ZVR5cGUobm9kZSkKQEAgLTE4Myw2ICsxODUsMTMgQEAgY2xhc3MgVmlzaXRv
ciB7CiAgICAgICAgIG5vZGUucHRyLnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKKyAgICB2aXNp
dERvdEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUuc3RydWN0LnZpc2l0KHRo
aXMpOworICAgICAgICBpZiAobm9kZS5zdHJ1Y3RUeXBlKQorICAgICAgICAgICAgbm9kZS5zdHJ1
Y3RUeXBlLnZpc2l0KHRoaXMpOworICAgIH0KKyAgICAKICAgICB2aXNpdE1ha2VQdHJFeHByZXNz
aW9uKG5vZGUpCiAgICAgewogICAgICAgICBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKTsKQEAgLTE5
MCw2ICsxOTksOCBAQCBjbGFzcyBWaXNpdG9yIHsKICAgICAKICAgICB2aXNpdFZhcmlhYmxlUmVm
KG5vZGUpCiAgICAgeworICAgICAgICBpZiAobm9kZS52YXJpYWJsZSkKKyAgICAgICAgICAgIG5v
ZGUudmFyaWFibGUudmlzaXQodGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0UmV0dXJuKG5v
ZGUpCg==
</data>
<flag name="review"
          id="339967"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
      

    </bug>

</bugzilla>