<?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>64051</bug_id>
          
          <creation_ts>2011-07-06 19:42:22 -0700</creation_ts>
          <short_desc>Move view-related code out of layout_package and into views</short_desc>
          <delta_ts>2011-07-06 19:46:02 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>dpranke</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>433176</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-06 19:42:22 -0700</bug_when>
    <thetext>Move view-related code out of layout_package and into views</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433177</commentid>
    <comment_count>1</comment_count>
      <attachid>99916</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-06 19:42:47 -0700</bug_when>
    <thetext>Created attachment 99916
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433178</commentid>
    <comment_count>2</comment_count>
      <attachid>99916</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-06 19:44:04 -0700</bug_when>
    <thetext>Comment on attachment 99916
Patch

We may find the MVC bandwagon doesn&apos;t quite fit our needs in the end, but I think this is better than layout_package for sure!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433179</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-06 19:46:02 -0700</bug_when>
    <thetext>Committed r90526: &lt;http://trac.webkit.org/changeset/90526&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99916</attachid>
            <date>2011-07-06 19:42:47 -0700</date>
            <delta_ts>2011-07-06 19:44:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64051-20110706194246.patch</filename>
            <type>text/plain</type>
            <size>113329</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDkwNTI1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjYgQEAKKzIwMTEtMDctMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBNb3ZlIHZpZXctcmVsYXRlZCBjb2RlIG91dCBvZiBsYXlvdXRfcGFja2FnZSBhbmQg
aW50byB2aWV3cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjQwNTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFu
YWdlcl91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJva2Vy
X3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtX3Vu
aXR0ZXN0LnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nX3VuaXR0ZXN0
LnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvdmlld3M6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3ZpZXdzL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy92aWV3cy9tZXRlcmVkX3N0cmVhbS5weTogQ29waWVkIGZyb20gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWV0ZXJlZF9zdHJlYW0u
cHkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdmlld3MvbWV0ZXJl
ZF9zdHJlYW1fdW5pdHRlc3QucHk6IENvcGllZCBmcm9tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtX3VuaXR0ZXN0LnB5Lgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3ZpZXdzL3ByaW50aW5nLnB5
OiBDb3BpZWQgZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9wcmludGluZy5weS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy92aWV3cy9wcmludGluZ191bml0dGVzdC5weTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmdfdW5pdHRlc3Qu
cHkuCisKIDIwMTEtMDctMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBBZGQgZ29vZnkgY29tbWVudHMgdG8gZXhwbGFpbiB3aHkgd2UgaGF2ZSB0aGVzZSBmaWxl
cy4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcnVuX3dlYmtpdF90ZXN0cy5weQkocmV2aXNpb24gOTA1MjMpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC00Miw3ICs0Miw3IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldCBpbXBvcnQgcmVzdWx0
c2oKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBsYXlvdXRfcGFja2FnZQogZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMubWFuYWdlciBpbXBvcnQgTWFuYWdl
ciwgV29ya2VyRXhjZXB0aW9uCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFj
a2FnZSBpbXBvcnQganNvbl9yZXN1bHRzX2dlbmVyYXRvcgotZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHByaW50aW5nCitmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy52aWV3cyBpbXBvcnQgcHJpbnRpbmcKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtIGltcG9ydCB1c2VyCiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkgaW1wb3J0IHNpbXBsZWpz
b24KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJz
L21hbmFnZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQkocmV2aXNpb24gOTA1MjMpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC01MywxNCArNTMsMTMgQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
Y29udHJvbGxlcnMgaQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMgaW1w
b3J0IHdvcmtlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1w
b3J0IGpzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yCiBmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQganNvbl9yZXN1bHRzX2dlbmVyYXRvcgotZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHByaW50aW5nCiBmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3Rh
dGlvbnMKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0
ZXN0X2ZhaWx1cmVzCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBp
bXBvcnQgdGVzdF9yZXN1bHRzCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFj
a2FnZSBpbXBvcnQgdGVzdF9yZXN1bHRzX3VwbG9hZGVyCi0KIGZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLmxheW91dF9wYWNrYWdlLnJlc3VsdF9zdW1tYXJ5IGltcG9ydCBSZXN1bHRTdW1tYXJ5
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZS50ZXN0X2lucHV0IGlt
cG9ydCBUZXN0SW5wdXQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnZpZXdzIGltcG9ydCBw
cmludGluZwogCiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkgaW1wb3J0IHNpbXBsZWpzb24KIGZy
b20gd2Via2l0cHkudG9vbCBpbXBvcnQgZ3JhbW1hcgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9t
YW5hZ2VyX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA5MDUyMykKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHkJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1w
b3J0IHBvcnQKIGZyb20gd2Via2l0cHkgaW1wb3J0IGxheW91dF90ZXN0cwogZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMgaW1wb3J0IHJ1bl93ZWJraXRfdGVzdHMKIGZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLmNvbnRyb2xsZXJzLm1hbmFnZXIgaW1wb3J0IE1hbmFnZXIsIG5hdHVyYWxfc29y
dF9rZXksIHRlc3Rfa2V5LCBUZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24sIFRlc3RTaGFyZAot
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHByaW50aW5n
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZS5yZXN1bHRfc3VtbWFy
eSBpbXBvcnQgUmVzdWx0U3VtbWFyeQorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudmlld3Mg
aW1wb3J0IHByaW50aW5nCiBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tP
cHRpb25zCiAKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29u
dHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jy
b2tlci5weQkocmV2aXNpb24gOTA1MjMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDcgKzU4LDcgQEAgZXhjZXB0IEltcG9ydEVycm9yOgogZnJvbSB3ZWJraXRweS5j
b21tb24uc3lzdGVtIGltcG9ydCBzdGFja191dGlscwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMgaW1wb3J0IHBvcnQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzIGlt
cG9ydCBtZXNzYWdlX2Jyb2tlcgotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IHByaW50aW5nCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy52aWV3cyBp
bXBvcnQgcHJpbnRpbmcKIAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5h
Z2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJva2Vy
X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA5MDUyMykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5w
eQkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0gaW1wb3J0IG91dHB1CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9y
dAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMgaW1wb3J0IG1hbmFnZXJf
d29ya2VyX2Jyb2tlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMgaW1w
b3J0IG1lc3NhZ2VfYnJva2VyCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFj
a2FnZSBpbXBvcnQgcHJpbnRpbmcKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnZpZXdzIGlt
cG9ydCBwcmludGluZwogCiAjIEluIG9yZGVyIHRvIHJlbGlhYmx5IGNvbnRyb2wgd2hlbiBjaGls
ZCB3b3JrZXJzIGFyZSBzdGFydGluZyBhbmQgc3RvcHBpbmcsCiAjIHdlIHVzZSBhIHBhaXIgb2Yg
Z2xvYmFsIHZhcmlhYmxlcyB0byBob2xkIHF1ZXVlcyB1c2VkIGZvciBtZXNzYWdpbmcuIElkZWFs
bHkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL21ldGVyZWRfc3RyZWFtLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5CShyZXZpc2lv
biA5MDUyMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDg3ICswLDAgQEAK
LSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMg
bWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIgotUGFja2FnZSB0
aGF0IGltcGxlbWVudHMgYSBzdHJlYW0gd3JhcHBlciB0aGF0IGhhcyAnbWV0ZXJzJyBhcyB3ZWxs
IGFzCi1yZWd1bGFyIG91dHB1dC4gQSAnbWV0ZXInIGlzIGEgc2luZ2xlIGxpbmUgb2YgdGV4dCB0
aGF0IGNhbiBiZSBlcmFzZWQKLWFuZCByZXdyaXR0ZW4gcmVwZWF0ZWRseSwgd2l0aG91dCBwcm9k
dWNpbmcgbXVsdGlwbGUgbGluZXMgb2Ygb3V0cHV0LiBJdAotY2FuIGJlIHVzZWQgdG8gcHJvZHVj
ZSBlZmZlY3RzIGxpa2UgcHJvZ3Jlc3MgYmFycy4KLQotVGhpcyBwYWNrYWdlIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCBieSB0aGUgcHJpbnRpbmcgbW9kdWxlIGluIHRoZSBsYXlvdXRfdGVzdHMKLXBh
Y2thZ2UuCi0iIiIKLQotY2xhc3MgTWV0ZXJlZFN0cmVhbToKLSAgICAiIiJUaGlzIGNsYXNzIGlz
IGEgd3JhcHBlciBhcm91bmQgYSBzdHJlYW0gdGhhdCBhbGxvd3MgeW91IHRvIGltcGxlbWVudAot
ICAgIG1ldGVycyAocHJvZ3Jlc3MgYmFycywgZXRjLikuCi0KLSAgICBJdCBjYW4gYmUgdXNlZCBk
aXJlY3RseSBhcyBhIHN0cmVhbSwgYnkgY2FsbGluZyB3cml0ZSgpLCBidXQgYWxzbyBwcm92aWRl
cwotICAgIGEgbWV0aG9kIGNhbGxlZCB1cGRhdGUoKSB0aGF0IHdpbGwgb3ZlcndpdGUgcHJpb3Ig
dXBkYXRlcygpLgotICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtKToKLSAg
ICAgICAgIiIiCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgc3RyZWFtOiBvdXRwdXQgc3RyZWFt
IHRvIHdyaXRlIHRvCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl9zdHJlYW0gPSBzdHJlYW0K
LSAgICAgICAgc2VsZi5fZGlydHkgPSBGYWxzZQotICAgICAgICBzZWxmLl9sYXN0X3VwZGF0ZSA9
ICIiCi0KLSAgICBkZWYgd3JpdGUoc2VsZiwgdHh0KToKLSAgICAgICAgIiIiV3JpdGUgdG8gdGhl
IHN0cmVhbSwgb3ZlcndyaXRpbmcgYW5kIHJlc2V0dGluZyB0aGUgbWV0ZXIuIiIiCi0KLSAgICAg
ICAgIyBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBsb2dnaW5nIGluZnJhc3RydWN0dXJl
LCBhbmQKLSAgICAgICAgIyBtdXN0IG5vdCBjYWxsIGJhY2sgaW50byBsb2dnaW5nLiBJdCBpcyBu
b3QgYSBwdWJsaWMgZnVuY3Rpb24uCi0gICAgICAgIHNlbGYuX292ZXJ3cml0ZSh0eHQpCi0gICAg
ICAgIHNlbGYuX3Jlc2V0KCkKLQotICAgIGRlZiB1cGRhdGUoc2VsZiwgdHh0KToKLSAgICAgICAg
IiIiV3JpdGUgYSBtZXNzYWdlIHRoYXQgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSBzdWJzZXF1ZW50
IHVwZGF0ZSgpIG9yIHdyaXRlKCkgY2FsbHMuIiIiCi0gICAgICAgIHNlbGYuX292ZXJ3cml0ZSh0
eHQpCi0KLSAgICBkZWYgZmx1c2goc2VsZik6Ci0gICAgICAgICMgVGhpcyBzZWVtcyB0byBiZSBu
ZWVkZWQgb24gUHl0aG9uIDIuNSBmb3Igc29tZSByZWFzb24uCi0gICAgICAgIHNlbGYuX3N0cmVh
bS5mbHVzaCgpCi0KLSAgICBkZWYgX292ZXJ3cml0ZShzZWxmLCB0eHQpOgotICAgICAgICAjIFBy
aW50IHRoZSBuZWNlc3NhcnkgbnVtYmVyIG9mIGJhY2tzcGFjZXMgdG8gZXJhc2UgdGhlIHByZXZp
b3VzCi0gICAgICAgICMgbWVzc2FnZS4KLSAgICAgICAgaWYgbGVuKHNlbGYuX2xhc3RfdXBkYXRl
KToKLSAgICAgICAgICAgIHNlbGYuX3N0cmVhbS53cml0ZSgiXGIiICogbGVuKHNlbGYuX2xhc3Rf
dXBkYXRlKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICogbGVuKHNlbGYu
X2xhc3RfdXBkYXRlKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxiIiAqIGxl
bihzZWxmLl9sYXN0X3VwZGF0ZSkpCi0gICAgICAgIHNlbGYuX3N0cmVhbS53cml0ZSh0eHQpCi0g
ICAgICAgIGxhc3RfbmV3bGluZSA9IHR4dC5yZmluZCgiXG4iKQotICAgICAgICBzZWxmLl9sYXN0
X3VwZGF0ZSA9IHR4dFsobGFzdF9uZXdsaW5lICsgMSk6XQotICAgICAgICBzZWxmLl9kaXJ0eSA9
IFRydWUKLQotICAgIGRlZiBfcmVzZXQoc2VsZik6Ci0gICAgICAgIHNlbGYuX2RpcnR5ID0gRmFs
c2UKLSAgICAgICAgc2VsZi5fbGFzdF91cGRhdGUgPSAnJwpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWV0ZXJlZF9zdHJlYW1fdW5pdHRl
c3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvbWV0ZXJlZF9zdHJlYW1fdW5pdHRlc3QucHkJKHJldmlzaW9uIDkwNTIw
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
bWV0ZXJlZF9zdHJlYW1fdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsODMgKzAsMCBA
QAotIyEvdXNyL2Jpbi9weXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1l
dDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJVbml0IHRlc3RzIGZv
ciBtZXRlcmVkX3N0cmVhbS5weS4iIiIKLQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gd2Via2l0
cHkuY29tbW9uLmFycmF5X3N0cmVhbSBpbXBvcnQgQXJyYXlTdHJlYW0KLWZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBtZXRlcmVkX3N0cmVhbQotCi0KLWNs
YXNzIFRlc3RNZXRlcmVkU3RyZWFtKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9y
ZWd1bGFyKHNlbGYpOgotICAgICAgICBhID0gQXJyYXlTdHJlYW0oKQotICAgICAgICBtID0gbWV0
ZXJlZF9zdHJlYW0uTWV0ZXJlZFN0cmVhbShzdHJlYW09YSkKLSAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKGEuZW1wdHkoKSkKLQotICAgICAgICAjIGJhc2ljIHRlc3QKLSAgICAgICAgbS53cml0ZSgi
Zm9vIikKLSAgICAgICAgZXhwID0gWydmb28nXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhh
LmdldCgpLCBleHApCi0KLSAgICAgICAgIyBub3cgY2hlY2sgdGhhdCBhIHNlY29uZCB3cml0ZSgp
IGRvZXMgbm90IG92ZXJ3cml0ZSB0aGUgZmlyc3QuCi0gICAgICAgIG0ud3JpdGUoImJhciIpCi0g
ICAgICAgIGV4cC5hcHBlbmQoJ2JhcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGEuZ2V0
KCksIGV4cCkKLQotICAgICAgICBtLnVwZGF0ZSgiYmF0dGVyIikKLSAgICAgICAgZXhwLmFwcGVu
ZCgnYmF0dGVyJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYS5nZXQoKSwgZXhwKQotCi0g
ICAgICAgICMgVGhlIG5leHQgdXBkYXRlKCkgc2hvdWxkIG92ZXJ3cml0ZSB0aGUgbGFzdGUgdXBk
YXRlKCkgYnV0IG5vdCB0aGUKLSAgICAgICAgIyBvdGhlciB0ZXh0LiBOb3RlIHRoYXQgdGhlIGN1
cnNvciBpcyBlZmZlY3RpdmVseSBwb3NpdGlvbmVkIGF0IHRoZQotICAgICAgICAjIGVuZCBvZiAn
Zm9vJywgZXZlbiB0aG91Z2ggd2UgaGFkIHRvIGVyYXNlIHRocmVlIG1vcmUgY2hhcmFjdGVycy4K
LSAgICAgICAgbS51cGRhdGUoImZvbyIpCi0gICAgICAgIGV4cC5hcHBlbmQoJ1xiXGJcYlxiXGJc
YiAgICAgIFxiXGJcYlxiXGJcYicpCi0gICAgICAgIGV4cC5hcHBlbmQoJ2ZvbycpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKGEuZ2V0KCksIGV4cCkKLQotICAgICAgICAjIG5vdyBjaGVjayB0
aGF0IGEgd3JpdGUoKSBkb2VzIG92ZXJ3cml0ZSB0aGUgdXBkYXRlCi0gICAgICAgIG0ud3JpdGUo
ImZvbyIpCi0gICAgICAgIGV4cC5hcHBlbmQoJ1xiXGJcYiAgIFxiXGJcYicpCi0gICAgICAgIGV4
cC5hcHBlbmQoJ2ZvbycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGEuZ2V0KCksIGV4cCkK
LQotICAgICAgICAjIE5vdyB0ZXN0IHRoYXQgd2Ugb25seSBiYWNrIHVwIHRvIHRoZSBtb3N0IHJl
Y2VudCBuZXdsaW5lLgotCi0gICAgICAgICMgTm90ZSBhbHNvIHRoYXQgd2UgZG8gbm90IGJhY2sg
dXAgdG8gZXJhc2UgdGhlIG1vc3QgcmVjZW50IHdyaXRlKCksCi0gICAgICAgICMgaS5lLiwgd3Jp
dGUoKXMgZG8gbm90IGdldCBlcmFzZWQuCi0gICAgICAgIGEucmVzZXQoKQotICAgICAgICBtLnVw
ZGF0ZSgiZm9vXG5iYXIiKQotICAgICAgICBtLnVwZGF0ZSgiYmF6IikKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoYS5nZXQoKSwgWydmb29cbmJhcicsICdcYlxiXGIgICBcYlxiXGInLCAnYmF6
J10pCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1bml0dGVzdC5tYWluKCkK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3ByaW50aW5nLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nLnB5CShyZXZpc2lvbiA5MDUyMCkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5n
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ3NSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRo
b24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRp
b24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJQYWNrYWdlIHRoYXQgaGFuZGxlcyBub24tZGVidWcs
IG5vbi1maWxlIG91dHB1dCBmb3IgcnVuLXdlYmtpdC10ZXN0cy4iIiIKLQotaW1wb3J0IGxvZ2dp
bmcKLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IHRpbWUKLQotZnJvbSB3ZWJraXRweS5jb21tb24u
bmV0IGltcG9ydCByZXN1bHRzanNvbnBhcnNlcgotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
bGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1ldGVyZWRfc3RyZWFtCi1mcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKLQotIyBGSVhN
RTogQ2hhbmdlIHRoaXMgdG8gX19maWxlX18gd2hlbiB3ZSBjYW4gZml4IHRlc3Qtd2Via2l0cHkn
cyBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uCi1fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtp
dHB5LmxheW91dF90ZXN0cy5wcmludGVyIikKLQotVGVzdEV4cGVjdGF0aW9ucyA9IHRlc3RfZXhw
ZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnMKLQotTlVNX1NMT1dfVEVTVFNfVE9fTE9HID0gMTAK
LUZBU1RfVVBEQVRFU19TRUNPTkRTID0gMC4wMwotU0xPV19VUERBVEVTX1NFQ09ORFMgPSAxMC4w
Ci0KLVBSSU5UX0RFRkFVTFQgPSAoIm1pc2Msb25lLWxpbmUtcHJvZ3Jlc3Msb25lLWxpbmUtc3Vt
bWFyeSx1bmV4cGVjdGVkLCIKLSAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQtcmVzdWx0cyx1
cGRhdGVzIikKLVBSSU5UX0VWRVJZVEhJTkcgPSAoImFjdHVhbCxjb25maWcsZXhwZWN0ZWQsbWlz
YyxvbmUtbGluZS1wcm9ncmVzcywiCi0gICAgICAgICAgICAgICAgICAgICJvbmUtbGluZS1zdW1t
YXJ5LHNsb3dlc3QsdGltaW5nLHVuZXhwZWN0ZWQsIgotICAgICAgICAgICAgICAgICAgICAidW5l
eHBlY3RlZC1yZXN1bHRzLHVwZGF0ZXMiKQotCi1IRUxQX1BSSU5USU5HID0gIiIiCi1PdXRwdXQg
Zm9yIHJ1bi13ZWJraXQtdGVzdHMgaXMgY29udHJvbGxlZCBieSBhIGNvbW1hLXNlcGFyYXRlZCBs
aXN0IG9mCi12YWx1ZXMgcGFzc2VkIHRvIC0tcHJpbnQuICBWYWx1ZXMgZWl0aGVyIGluZmx1ZW5j
ZSB0aGUgb3ZlcmFsbCBvdXRwdXQsIG9yCi10aGUgb3V0cHV0IGF0IHRoZSBiZWdpbm5pbmcgb2Yg
dGhlIHJ1biwgZHVyaW5nIHRoZSBydW4sIG9yIGF0IHRoZSBlbmQ6Ci0KLU92ZXJhbGwgb3B0aW9u
czoKLSAgICBub3RoaW5nICAgICAgICAgICAgIGRvbid0IHByaW50IGFueXRoaW5nLiBUaGlzIG92
ZXJyaWRlcyBldmVyeSBvdGhlciBvcHRpb24KLSAgICBkZWZhdWx0ICAgICAgICAgICAgIGluY2x1
ZGUgdGhlIGRlZmF1bHQgb3B0aW9ucy4gVGhpcyBpcyB1c2VmdWwgZm9yIGxvZ2dpbmcKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IG9wdGlvbnMgcGx1cyBhZGRpdGlvbmFsIHNl
dHRpbmdzLgotICAgIGV2ZXJ5dGhpbmcgICAgICAgICAgcHJpbnQgKGFsbW9zdCkgZXZlcnl0aGlu
ZyAoZXhjZXB0IHRoZSB0cmFjZS0qIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICBz
ZWUgYmVsb3cgZm9yIHRoZSBmdWxsIGxpc3QgKQotICAgIG1pc2MgICAgICAgICAgICAgICAgcHJp
bnQgbWlzY2VsbGFuZW91cyB0aGluZ3MgbGlrZSBibGFuayBsaW5lcwotCi1BdCB0aGUgYmVnaW5u
aW5nIG9mIHRoZSBydW46Ci0gICAgY29uZmlnICAgICAgICAgICAgICBwcmludCB0aGUgdGVzdCBy
dW4gY29uZmlndXJhdGlvbgotICAgIGV4cGVjdGVkICAgICAgICAgICAgcHJpbnQgYSBzdW1tYXJ5
IG9mIHdoYXQgaXMgZXhwZWN0ZWQgdG8gaGFwcGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAo
IyBwYXNzZXMsICMgZmFpbHVyZXMsIGV0Yy4pCi0KLUR1cmluZyB0aGUgcnVuOgotICAgIG9uZS1s
aW5lLXByb2dyZXNzICAgcHJpbnQgYSBvbmUtbGluZSBwcm9ncmVzcyBtZXNzYWdlIG9yIGJhcgot
ICAgIHVuZXhwZWN0ZWQgICAgICAgICAgcHJpbnQgYW55IHVuZXhwZWN0ZWQgcmVzdWx0cyBhcyB0
aGV5IG9jY3VyCi0gICAgdXBkYXRlcyAgICAgICAgICAgICBwcmludCB1cGRhdGVzIG9uIHdoaWNo
IHN0YWdlIGlzIGV4ZWN1dGluZwotICAgIHRyYWNlLWV2ZXJ5dGhpbmcgICAgcHJpbnQgZGV0YWls
ZWQgaW5mbyBvbiBldmVyeSB0ZXN0J3MgcmVzdWx0cwotICAgICAgICAgICAgICAgICAgICAgICAg
KGJhc2VsaW5lcywgZXhwZWN0YXRpb24sIHRpbWUgaXQgdG9vayB0byBydW4pLiBJZgotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcyBpcyBzcGVjaWZpZWQgaXQgd2lsbCBvdmVycmlkZSB0aGUg
JyotcHJvZ3Jlc3MnCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLCB0aGUgJ3RyYWNl
LXVuZXhwZWN0ZWQnIG9wdGlvbiwgYW5kIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgJ3Vu
ZXhwZWN0ZWQnIG9wdGlvbi4KLSAgICB0cmFjZS11bmV4cGVjdGVkICAgIGxpa2UgJ3RyYWNlLWV2
ZXJ5dGhpbmcnLCBidXQgb25seSBmb3IgdGVzdHMgd2l0aAotICAgICAgICAgICAgICAgICAgICAg
ICAgdW5leHBlY3RlZCByZXN1bHRzLiBJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIG92ZXJyaWRlIHRoZSAndW5leHBlY3RlZCcgb3B0
aW9uLgotCi1BdCB0aGUgZW5kIG9mIHRoZSBydW46Ci0gICAgYWN0dWFsICAgICAgICAgICAgICBw
cmludCBhIHN1bW1hcnkgb2YgdGhlIGFjdHVhbCByZXN1bHRzCi0gICAgc2xvd2VzdCAgICAgICAg
ICAgICBwcmludCAlKHNsb3dlc3QpZCBzbG93ZXN0IHRlc3RzIGFuZCB0aGUgdGltZSB0aGV5IHRv
b2sKLSAgICB0aW1pbmcgICAgICAgICAgICAgIHByaW50IHRpbWluZyBzdGF0aXN0aWNzCi0gICAg
dW5leHBlY3RlZC1yZXN1bHRzICBwcmludCBhIGxpc3Qgb2YgdGhlIHRlc3RzIHdpdGggdW5leHBl
Y3RlZCByZXN1bHRzCi0gICAgb25lLWxpbmUtc3VtbWFyeSAgICBwcmludCBhIG9uZS1saW5lIHN1
bW1hcnkgb2YgdGhlIHJ1bgotCi1Ob3RlczoKLSAgICAtIElmICdub3RoaW5nJyBpcyBzcGVjaWZp
ZWQsIGl0IG92ZXJyaWRlcyBhbGwgb2YgdGhlIG90aGVyIG9wdGlvbnMuCi0gICAgLSBTcGVjaWZ5
aW5nIC0tdmVyYm9zZSBpcyBlcXVpdmFsZW50IHRvIC0tcHJpbnQgZXZlcnl0aGluZyBwbHVzIGl0
Ci0gICAgICBjaGFuZ2VzIHRoZSBmb3JtYXQgb2YgdGhlIGxvZyBtZXNzYWdlcyB0byBhZGQgdGlt
ZXN0YW1wcyBhbmQgb3RoZXIKLSAgICAgIGluZm9ybWF0aW9uLiBJZiB5b3Ugc3BlY2lmeSAtLXZl
cmJvc2UgYW5kIC0tcHJpbnQgWCwgdGhlbiBYIG92ZXJyaWRlcwotICAgICAgdGhlIC0tcHJpbnQg
ZXZlcnl0aGluZyBpbXBsaWVkIGJ5IC0tdmVyYm9zZS4KLQotLS1wcmludCAnZXZlcnl0aGluZycg
aXMgZXF1aXZhbGVudCB0byAtLXByaW50ICclKGV2ZXJ5dGhpbmcpcycuCi0KLVRoZSBkZWZhdWx0
ICgtLXByaW50IGRlZmF1bHQpIGlzIGVxdWl2YWxlbnQgdG8gLS1wcmludCAnJShkZWZhdWx0KXMn
LgotIiIiICUgeydzbG93ZXN0JzogTlVNX1NMT1dfVEVTVFNfVE9fTE9HLCAnZXZlcnl0aGluZyc6
IFBSSU5UX0VWRVJZVEhJTkcsCi0gICAgICAgJ2RlZmF1bHQnOiBQUklOVF9ERUZBVUxUfQotCi0K
LWRlZiBwcmludF9vcHRpb25zKCk6Ci0gICAgcmV0dXJuIFsKLSAgICAgICAgIyBOb3RlOiBXZSB1
c2UgcHJpbnRfb3B0aW9ucyByYXRoZXIgdGhhbiBqdXN0ICdwcmludCcgYmVjYXVzZSBwcmludAot
ICAgICAgICAjIGlzIGEgcmVzZXJ2ZWQgd29yZC4KLSAgICAgICAgIyBOb3RlOiBBbHNvLCB3ZSBk
b24ndCBzcGVjaWZ5IGEgZGVmYXVsdCB2YWx1ZSBzbyB3ZSBjYW4gZGV0ZWN0IHdoZW4KLSAgICAg
ICAgIyBubyBmbGFnIGlzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIGFuZCB1c2UgZGlm
ZmVyZW50IGRlZmF1bHRzCi0gICAgICAgICMgYmFzZWQgb24gd2hldGhlciBvciBub3QgLS12ZXJi
b3NlIGlzIHNwZWNpZmllZCAoc2luY2UgLS1wcmludAotICAgICAgICAjIG92ZXJyaWRlcyAtLXZl
cmJvc2UpLgotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1wcmludCIsIGRlc3Q9InBy
aW50X29wdGlvbnMiLAotICAgICAgICAgICAgaGVscD0oImNvbnRyb2xzIHByaW50IG91dHB1dCBv
ZiB0ZXN0IHJ1bi4gIgotICAgICAgICAgICAgICAgICAgIlVzZSAtLWhlbHAtcHJpbnRpbmcgZm9y
IG1vcmUuIikpLAotICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1oZWxwLXByaW50aW5n
IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKLSAgICAgICAgICAgIGhlbHA9InNob3cgZGV0YWlsZWQg
aGVscCBvbiBjb250cm9sbGluZyBwcmludCBvdXRwdXQiKSwKLSAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oIi12IiwgIi0tdmVyYm9zZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCi0gICAgICAg
ICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSJpbmNsdWRlIGRlYnVnLWxldmVsIGxvZ2dpbmciKSwK
LSAgIF0KLQotCi1kZWYgcGFyc2VfcHJpbnRfb3B0aW9ucyhwcmludF9vcHRpb25zLCB2ZXJib3Nl
KToKLSAgICAiIiJQYXJzZSB0aGUgb3B0aW9ucyBwcm92aWRlZCB0byAtLXByaW50IGFuZCBkZWR1
cCBhbmQgcmFuayB0aGVtLgotCi0gICAgUmV0dXJucwotICAgICAgICBhIHNldCgpIG9mIHN3aXRj
aGVzIHRoYXQgZ292ZXJuIGhvdyBsb2dnaW5nIGlzIGRvbmUKLQotICAgICIiIgotICAgIGlmIHBy
aW50X29wdGlvbnM6Ci0gICAgICAgIHN3aXRjaGVzID0gc2V0KHByaW50X29wdGlvbnMuc3BsaXQo
JywnKSkKLSAgICBlbGlmIHZlcmJvc2U6Ci0gICAgICAgIHN3aXRjaGVzID0gc2V0KFBSSU5UX0VW
RVJZVEhJTkcuc3BsaXQoJywnKSkKLSAgICBlbHNlOgotICAgICAgICBzd2l0Y2hlcyA9IHNldChQ
UklOVF9ERUZBVUxULnNwbGl0KCcsJykpCi0KLSAgICBpZiAnbm90aGluZycgaW4gc3dpdGNoZXM6
Ci0gICAgICAgIHJldHVybiBzZXQoKQotCi0gICAgaWYgJ2V2ZXJ5dGhpbmcnIGluIHN3aXRjaGVz
OgotICAgICAgICBzd2l0Y2hlcy5kaXNjYXJkKCdldmVyeXRoaW5nJykKLSAgICAgICAgc3dpdGNo
ZXMudXBkYXRlKHNldChQUklOVF9FVkVSWVRISU5HLnNwbGl0KCcsJykpKQotCi0gICAgaWYgJ2Rl
ZmF1bHQnIGluIHN3aXRjaGVzOgotICAgICAgICBzd2l0Y2hlcy5kaXNjYXJkKCdkZWZhdWx0JykK
LSAgICAgICAgc3dpdGNoZXMudXBkYXRlKHNldChQUklOVF9ERUZBVUxULnNwbGl0KCcsJykpKQot
Ci0gICAgaWYgJ3RyYWNlLWV2ZXJ5dGhpbmcnIGluIHN3aXRjaGVzOgotICAgICAgICBzd2l0Y2hl
cy5kaXNjYXJkKCdvbmUtbGluZS1wcm9ncmVzcycpCi0gICAgICAgIHN3aXRjaGVzLmRpc2NhcmQo
J3RyYWNlLXVuZXhwZWN0ZWQnKQotICAgICAgICBzd2l0Y2hlcy5kaXNjYXJkKCd1bmV4cGVjdGVk
JykKLQotICAgIGlmICd0cmFjZS11bmV4cGVjdGVkJyBpbiBzd2l0Y2hlczoKLSAgICAgICAgc3dp
dGNoZXMuZGlzY2FyZCgndW5leHBlY3RlZCcpCi0KLSAgICByZXR1cm4gc3dpdGNoZXMKLQotCi1k
ZWYgX2NvbmZpZ3VyZV9sb2dnaW5nKHN0cmVhbSwgdmVyYm9zZSk6Ci0gICAgbG9nX2ZtdCA9ICcl
KG1lc3NhZ2UpcycKLSAgICBsb2dfZGF0ZWZtdCA9ICcleSVtJWQgJUg6JU06JVMnCi0gICAgbG9n
X2xldmVsID0gbG9nZ2luZy5JTkZPCi0gICAgaWYgdmVyYm9zZToKLSAgICAgICAgbG9nX2ZtdCA9
ICgnJShhc2N0aW1lKXMgJShwcm9jZXNzKWQgJShmaWxlbmFtZSlzOiUobGluZW5vKWQgJwotICAg
ICAgICAgICAgICAgICAgICclKGxldmVsbmFtZSlzICUobWVzc2FnZSlzJykKLSAgICAgICAgbG9n
X2xldmVsID0gbG9nZ2luZy5ERUJVRwotCi0gICAgcm9vdCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkK
LSAgICBoYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN0cmVhbSkKLSAgICBoYW5kbGVy
LnNldEZvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcihsb2dfZm10LCBOb25lKSkKLSAgICByb290
LmFkZEhhbmRsZXIoaGFuZGxlcikKLSAgICByb290LnNldExldmVsKGxvZ19sZXZlbCkKLSAgICBy
ZXR1cm4gaGFuZGxlcgotCi0KLWRlZiBfcmVzdG9yZV9sb2dnaW5nKGhhbmRsZXJfdG9fcmVtb3Zl
KToKLSAgICByb290ID0gbG9nZ2luZy5nZXRMb2dnZXIoKQotICAgIHJvb3QuaGFuZGxlcnMucmVt
b3ZlKGhhbmRsZXJfdG9fcmVtb3ZlKQotCi0KLWNsYXNzIFByaW50ZXIob2JqZWN0KToKLSAgICAi
IiJDbGFzcyBoYW5kbGluZyBhbGwgbm9uLWRlYnVnLWxvZ2dpbmcgcHJpbnRpbmcgZG9uZSBieSBy
dW4td2Via2l0LXRlc3RzLgotCi0gICAgUHJpbnRpbmcgZnJvbSBydW4td2Via2l0LXRlc3RzIGZh
bGxzIGludG8gdHdvIGJ1Y2tldHM6IGdlbmVyYWwgb3IKLSAgICByZWd1bGFyIG91dHB1dCB0aGF0
IGlzIHJlYWQgb25seSBieSBodW1hbnMgYW5kIGNhbiBiZSBjaGFuZ2VkIGF0IGFueQotICAgIHRp
bWUsIGFuZCBvdXRwdXQgdGhhdCBpcyBwYXJzZWQgYnkgYnVpbGRib3RzIChhbmQgaHVtYW5zKSBh
bmQgaGVuY2UKLSAgICBtdXN0IGJlIGNoYW5nZWQgbW9yZSBjYXJlZnVsbHkgYW5kIGluIGNvb3Jk
aW5hdGlvbiB3aXRoIHRoZSBidWlsZGJvdAotICAgIHBhcnNpbmcgY29kZSAoaW4gY2hyb21pdW0u
b3JnJ3MgYnVpbGRib3QvbWFzdGVyLmNocm9taXVtL3NjcmlwdHMvbWFzdGVyLwotICAgIGxvZ19w
YXJzZXIvd2Via2l0X3Rlc3RfY29tbWFuZC5weSBzY3JpcHQpLgotCi0gICAgQnkgZGVmYXVsdCB0
aGUgYnVpbGRib3QtcGFyc2VkIGNvZGUgZ2V0cyBsb2dnZWQgdG8gc3Rkb3V0LCBhbmQgcmVndWxh
cgotICAgIG91dHB1dCBnZXRzIGxvZ2dlZCB0byBzdGRlcnIuIiIiCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnQsIG9wdGlvbnMsIHJlZ3VsYXJfb3V0cHV0LCBidWlsZGJvdF9vdXRwdXQsCi0g
ICAgICAgICAgICAgICAgIGNvbmZpZ3VyZV9sb2dnaW5nKToKLSAgICAgICAgIiIiCi0gICAgICAg
IEFyZ3MKLSAgICAgICAgICBwb3J0ICAgICAgICAgICAgICAgaW50ZXJmYWNlIHRvIHBvcnQtc3Bl
Y2lmaWMgcm91dGluZXMKLSAgICAgICAgICBvcHRpb25zICAgICAgICAgICAgT3B0aW9uUGFyc2Vy
IG9iamVjdCB3aXRoIGNvbW1hbmQgbGluZSBzZXR0aW5ncwotICAgICAgICAgIHJlZ3VsYXJfb3V0
cHV0ICAgICBzdHJlYW0gdG8gd2hpY2ggb3V0cHV0IGludGVuZGVkIG9ubHkgZm9yIGh1bWFucwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgd3JpdHRlbgotICAgICAgICAg
IGJ1aWxkYm90X291dHB1dCAgICBzdHJlYW0gdG8gd2hpY2ggb3V0cHV0IGludGVuZGVkIHRvIGJl
IHJlYWQgYnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkYm90cyAoYW5k
IGh1bWFucykgc2hvdWxkIGJlIHdyaXR0ZW4KLSAgICAgICAgICBjb25maWd1cmVfbG9nZ2lnbiAg
V2hldGhlciBhIGxvZ2dpbmcgaGFuZGxlciBzaG91bGQgYmUgcmVnaXN0ZXJlZAotCi0gICAgICAg
ICIiIgotICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0gPSBidWlsZGJvdF9vdXRwdXQKLSAg
ICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKLSAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQK
LSAgICAgICAgc2VsZi5fbWV0ZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX3N0cmVhbSA9IHJlZ3Vs
YXJfb3V0cHV0Ci0KLSAgICAgICAgIyBUaGVzZSBhcmUgdXNlZCBmb3IgLS1wcmludCBvbmUtbGlu
ZS1wcm9ncmVzcwotICAgICAgICBzZWxmLl9sYXN0X3JlbWFpbmluZyA9IE5vbmUKLSAgICAgICAg
c2VsZi5fbGFzdF91cGRhdGVfdGltZSA9IE5vbmUKLQotICAgICAgICBzZWxmLnN3aXRjaGVzID0g
cGFyc2VfcHJpbnRfb3B0aW9ucyhvcHRpb25zLnByaW50X29wdGlvbnMsIG9wdGlvbnMudmVyYm9z
ZSkKLQotICAgICAgICBzZWxmLl9sb2dnaW5nX2hhbmRsZXIgPSBOb25lCi0gICAgICAgIGlmIHNl
bGYuX3N0cmVhbS5pc2F0dHkoKSBhbmQgbm90IG9wdGlvbnMudmVyYm9zZToKLSAgICAgICAgICAg
IHNlbGYuX3VwZGF0ZV9pbnRlcnZhbF9zZWNvbmRzID0gRkFTVF9VUERBVEVTX1NFQ09ORFMKLSAg
ICAgICAgICAgIHNlbGYuX21ldGVyID0gbWV0ZXJlZF9zdHJlYW0uTWV0ZXJlZFN0cmVhbShzZWxm
Ll9zdHJlYW0pCi0gICAgICAgICAgICBpZiBjb25maWd1cmVfbG9nZ2luZzoKLSAgICAgICAgICAg
ICAgICBzZWxmLl9sb2dnaW5nX2hhbmRsZXIgPSBfY29uZmlndXJlX2xvZ2dpbmcoc2VsZi5fbWV0
ZXIsIG9wdGlvbnMudmVyYm9zZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3Vw
ZGF0ZV9pbnRlcnZhbF9zZWNvbmRzID0gU0xPV19VUERBVEVTX1NFQ09ORFMKLSAgICAgICAgICAg
IGlmIGNvbmZpZ3VyZV9sb2dnaW5nOgotICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2dpbmdfaGFu
ZGxlciA9IF9jb25maWd1cmVfbG9nZ2luZyhzZWxmLl9zdHJlYW0sIG9wdGlvbnMudmVyYm9zZSkK
LQotICAgIGRlZiBjbGVhbnVwKHNlbGYpOgotICAgICAgICAiIiJSZXN0b3JlIGxvZ2dpbmcgY29u
ZmlndXJhdGlvbiB0byBpdHMgaW5pdGlhbCBzZXR0aW5ncy4iIiIKLSAgICAgICAgaWYgc2VsZi5f
bG9nZ2luZ19oYW5kbGVyOgotICAgICAgICAgICAgX3Jlc3RvcmVfbG9nZ2luZyhzZWxmLl9sb2dn
aW5nX2hhbmRsZXIpCi0gICAgICAgICAgICBzZWxmLl9sb2dnaW5nX2hhbmRsZXIgPSBOb25lCi0K
LSAgICBkZWYgX19kZWxfXyhzZWxmKToKLSAgICAgICAgc2VsZi5jbGVhbnVwKCkKLQotICAgICMg
VGhlc2UgdHdvIHJvdXRpbmVzIGp1c3QgaGlkZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHN3
aXRjaGVzLgotICAgIGRlZiBkaXNhYmxlZChzZWxmLCBvcHRpb24pOgotICAgICAgICByZXR1cm4g
bm90IG9wdGlvbiBpbiBzZWxmLnN3aXRjaGVzCi0KLSAgICBkZWYgZW5hYmxlZChzZWxmLCBvcHRp
b24pOgotICAgICAgICByZXR1cm4gb3B0aW9uIGluIHNlbGYuc3dpdGNoZXMKLQotICAgIGRlZiBo
ZWxwX3ByaW50aW5nKHNlbGYpOgotICAgICAgICBzZWxmLl93cml0ZShIRUxQX1BSSU5USU5HKQot
Ci0gICAgZGVmIHByaW50X2FjdHVhbChzZWxmLCBtc2cpOgotICAgICAgICBpZiBzZWxmLmRpc2Fi
bGVkKCdhY3R1YWwnKToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLl9idWlsZGJv
dF9zdHJlYW0ud3JpdGUoIiVzXG4iICUgbXNnKQotCi0gICAgZGVmIHByaW50X2NvbmZpZyhzZWxm
LCBtc2cpOgotICAgICAgICBzZWxmLndyaXRlKG1zZywgJ2NvbmZpZycpCi0KLSAgICBkZWYgcHJp
bnRfZXhwZWN0ZWQoc2VsZiwgbXNnKToKLSAgICAgICAgc2VsZi53cml0ZShtc2csICdleHBlY3Rl
ZCcpCi0KLSAgICBkZWYgcHJpbnRfdGltaW5nKHNlbGYsIG1zZyk6Ci0gICAgICAgIHNlbGYud3Jp
dGUobXNnLCAndGltaW5nJykKLQotICAgIGRlZiBwcmludF9vbmVfbGluZV9zdW1tYXJ5KHNlbGYs
IHRvdGFsLCBleHBlY3RlZCwgdW5leHBlY3RlZCk6Ci0gICAgICAgICIiIlByaW50IGEgb25lLWxp
bmUgc3VtbWFyeSBvZiB0aGUgdGVzdCBydW4gdG8gc3Rkb3V0LgotCi0gICAgICAgIEFyZ3M6Ci0g
ICAgICAgICAgdG90YWw6IHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4KLSAgICAgICAgICBleHBl
Y3RlZDogbnVtYmVyIG9mIGV4cGVjdGVkIHJlc3VsdHMKLSAgICAgICAgICB1bmV4cGVjdGVkOiBu
dW1iZXIgb2YgdW5leHBlY3RlZCByZXN1bHRzCi0gICAgICAgICIiIgotICAgICAgICBpZiBzZWxm
LmRpc2FibGVkKCdvbmUtbGluZS1zdW1tYXJ5Jyk6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAg
ICAgICBpbmNvbXBsZXRlID0gdG90YWwgLSBleHBlY3RlZCAtIHVuZXhwZWN0ZWQKLSAgICAgICAg
aWYgaW5jb21wbGV0ZToKLSAgICAgICAgICAgIHNlbGYuX3dyaXRlKCIiKQotICAgICAgICAgICAg
aW5jb21wbGV0ZV9zdHIgPSAiICglZCBkaWRuJ3QgcnVuKSIgJSBpbmNvbXBsZXRlCi0gICAgICAg
ICAgICBleHBlY3RlZF9zdHIgPSBzdHIoZXhwZWN0ZWQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICBpbmNvbXBsZXRlX3N0ciA9ICIiCi0gICAgICAgICAgICBleHBlY3RlZF9zdHIgPSAiQWxs
ICVkIiAlIGV4cGVjdGVkCi0KLSAgICAgICAgaWYgdW5leHBlY3RlZCA9PSAwOgotICAgICAgICAg
ICAgc2VsZi5fd3JpdGUoIiVzIHRlc3RzIHJhbiBhcyBleHBlY3RlZCVzLiIgJQotICAgICAgICAg
ICAgICAgICAgICAgICAgKGV4cGVjdGVkX3N0ciwgaW5jb21wbGV0ZV9zdHIpKQotICAgICAgICBl
bGlmIGV4cGVjdGVkID09IDE6Ci0gICAgICAgICAgICBzZWxmLl93cml0ZSgiMSB0ZXN0IHJhbiBh
cyBleHBlY3RlZCwgJWQgZGlkbid0JXM6IiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAodW5l
eHBlY3RlZCwgaW5jb21wbGV0ZV9zdHIpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2Vs
Zi5fd3JpdGUoIiVkIHRlc3RzIHJhbiBhcyBleHBlY3RlZCwgJWQgZGlkbid0JXM6IiAlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWQsIHVuZXhwZWN0ZWQsIGluY29tcGxldGVfc3Ry
KSkKLSAgICAgICAgc2VsZi5fd3JpdGUoIiIpCi0KLSAgICBkZWYgcHJpbnRfdGVzdF9yZXN1bHQo
c2VsZiwgcmVzdWx0LCBleHBlY3RlZCwgZXhwX3N0ciwgZ290X3N0cik6Ci0gICAgICAgICIiIlBy
aW50IHRoZSByZXN1bHQgb2YgdGhlIHRlc3QgYXMgZGV0ZXJtaW5lZCBieSAtLXByaW50LgotCi0g
ICAgICAgIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIHByaW50IHRoZSBkZXRhaWxzIG9mIGVhY2gg
dGVzdCBhcyBpdCBjb21wbGV0ZXMuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICAgIHJlc3Vs
dCAgIC0gVGhlIGFjdHVhbCBUZXN0UmVzdWx0IG9iamVjdAotICAgICAgICAgICAgZXhwZWN0ZWQg
LSBXaGV0aGVyIHRoZSByZXN1bHQgd2UgZ290IHdhcyBhbiBleHBlY3RlZCByZXN1bHQKLSAgICAg
ICAgICAgIGV4cF9zdHIgIC0gV2hhdCB3ZSBleHBlY3RlZCB0byBnZXQgKHVzZWQgZm9yIHRyYWNp
bmcpCi0gICAgICAgICAgICBnb3Rfc3RyICAtIFdoYXQgd2UgYWN0dWFsbHkgZ290ICh1c2VkIGZv
ciB0cmFjaW5nKQotCi0gICAgICAgIE5vdGUgdGhhdCB3ZSBuZWVkIGFsbCBvZiB0aGVzZSBhcmd1
bWVudHMgZXZlbiB0aG91Z2ggdGhleSBzZWVtCi0gICAgICAgIHNvbWV3aGF0IHJlZHVuZGFudCwg
aW4gb3JkZXIgdG8ga2VlcCB0aGlzIHJvdXRpbmUgZnJvbSBoYXZpbmcgdG8KLSAgICAgICAga25v
d24gYW55dGhpbmcgYWJvdXQgdGhlIHNldCBvZiBleHBlY3RhdGlvbnMuCi0gICAgICAgICIiIgot
ICAgICAgICBpZiAoc2VsZi5lbmFibGVkKCd0cmFjZS1ldmVyeXRoaW5nJykgb3IKLSAgICAgICAg
ICAgIHNlbGYuZW5hYmxlZCgndHJhY2UtdW5leHBlY3RlZCcpIGFuZCBub3QgZXhwZWN0ZWQpOgot
ICAgICAgICAgICAgc2VsZi5fcHJpbnRfdGVzdF90cmFjZShyZXN1bHQsIGV4cF9zdHIsIGdvdF9z
dHIpCi0gICAgICAgIGVsaWYgbm90IGV4cGVjdGVkIGFuZCBzZWxmLmVuYWJsZWQoJ3VuZXhwZWN0
ZWQnKToKLSAgICAgICAgICAgIHNlbGYuX3ByaW50X3VuZXhwZWN0ZWRfdGVzdF9yZXN1bHQocmVz
dWx0KQotCi0gICAgZGVmIF9wcmludF90ZXN0X3RyYWNlKHNlbGYsIHJlc3VsdCwgZXhwX3N0ciwg
Z290X3N0cik6Ci0gICAgICAgICIiIlByaW50IGRldGFpbGVkIHJlc3VsdHMgb2YgYSB0ZXN0ICh0
cmlnZ2VyZWQgYnkgLS1wcmludCB0cmFjZS0qKS4KLSAgICAgICAgRm9yIGVhY2ggdGVzdCwgcHJp
bnQ6Ci0gICAgICAgICAgIC0gbG9jYXRpb24gb2YgdGhlIGV4cGVjdGVkIGJhc2VsaW5lcwotICAg
ICAgICAgICAtIGV4cGVjdGVkIHJlc3VsdHMKLSAgICAgICAgICAgLSBhY3R1YWwgcmVzdWx0Ci0g
ICAgICAgICAgIC0gdGltaW5nIGluZm8KLSAgICAgICAgIiIiCi0gICAgICAgIGZpbGVuYW1lID0g
c2VsZi5fcG9ydC5hYnNwYXRoX2Zvcl90ZXN0KHJlc3VsdC50ZXN0X25hbWUpCi0gICAgICAgIHRl
c3RfbmFtZSA9IHJlc3VsdC50ZXN0X25hbWUKLSAgICAgICAgc2VsZi5fd3JpdGUoJ3RyYWNlOiAl
cycgJSB0ZXN0X25hbWUpCi0gICAgICAgIGZvciBleHRlbnNpb24gaW4gKCcudHh0JywgJy5wbmcn
LCAnLndhdicsICcud2ViYXJjaGl2ZScpOgotICAgICAgICAgICAgc2VsZi5fcHJpbnRfYmFzZWxp
bmUoZmlsZW5hbWUsIGV4dGVuc2lvbikKLSAgICAgICAgc2VsZi5fd3JpdGUoJyAgZXhwOiAlcycg
JSBleHBfc3RyKQotICAgICAgICBzZWxmLl93cml0ZSgnICBnb3Q6ICVzJyAlIGdvdF9zdHIpCi0g
ICAgICAgIHNlbGYuX3dyaXRlKCcgdG9vazogJS0uM2YnICUgcmVzdWx0LnRlc3RfcnVuX3RpbWUp
Ci0gICAgICAgIHNlbGYuX3dyaXRlKCcnKQotCi0gICAgZGVmIF9wcmludF9iYXNlbGluZShzZWxm
LCBmaWxlbmFtZSwgZXh0ZW5zaW9uKToKLSAgICAgICAgYmFzZWxpbmUgPSBzZWxmLl9wb3J0LmV4
cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCBleHRlbnNpb24pCi0gICAgICAgIGlmIHNlbGYuX3Bv
cnQuX2ZpbGVzeXN0ZW0uZXhpc3RzKGJhc2VsaW5lKToKLSAgICAgICAgICAgIHJlbHBhdGggPSBz
ZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoYmFzZWxpbmUpCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICByZWxwYXRoID0gJzxub25lPicKLSAgICAgICAgc2VsZi5fd3JpdGUoJyAg
JXM6ICVzJyAlIChleHRlbnNpb25bMTpdLCByZWxwYXRoKSkKLQotICAgIGRlZiBfcHJpbnRfdW5l
eHBlY3RlZF90ZXN0X3Jlc3VsdChzZWxmLCByZXN1bHQpOgotICAgICAgICAiIiJQcmludHMgb25l
IHVuZXhwZWN0ZWQgdGVzdCByZXN1bHQgbGluZS4iIiIKLSAgICAgICAgZGVzYyA9IFRlc3RFeHBl
Y3RhdGlvbnMuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TW3Jlc3VsdC50eXBlXVswXQotICAgICAg
ICBzZWxmLndyaXRlKCIgICVzIC0+IHVuZXhwZWN0ZWQgJXMiICUKLSAgICAgICAgICAgICAgICAg
ICAocmVzdWx0LnRlc3RfbmFtZSwgZGVzYyksICJ1bmV4cGVjdGVkIikKLQotICAgIGRlZiBwcmlu
dF9wcm9ncmVzcyhzZWxmLCByZXN1bHRfc3VtbWFyeSwgcmV0cnlpbmcsIHRlc3RfbGlzdCk6Ci0g
ICAgICAgICIiIlByaW50IHByb2dyZXNzIHRocm91Z2ggdGhlIHRlc3RzIGFzIGRldGVybWluZWQg
YnkgLS1wcmludC4iIiIKLSAgICAgICAgaWYgc2VsZi5kaXNhYmxlZCgnb25lLWxpbmUtcHJvZ3Jl
c3MnKToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIG5vdyA9IHRpbWUudGltZSgpCi0g
ICAgICAgIGlmIHNlbGYuX2xhc3RfdXBkYXRlX3RpbWUgaXMgTm9uZToKLSAgICAgICAgICAgIHNl
bGYuX2xhc3RfdXBkYXRlX3RpbWUgPSBub3cKLQotICAgICAgICB0aW1lX3NpbmNlX2xhc3RfdXBk
YXRlID0gbm93IC0gc2VsZi5fbGFzdF91cGRhdGVfdGltZQotICAgICAgICBpZiB0aW1lX3NpbmNl
X2xhc3RfdXBkYXRlIDw9IHNlbGYuX3VwZGF0ZV9pbnRlcnZhbF9zZWNvbmRzOgotICAgICAgICAg
ICAgcmV0dXJuCi0KLSAgICAgICAgc2VsZi5fbGFzdF91cGRhdGVfdGltZSA9IG5vdwotCi0gICAg
ICAgIHBlcmNlbnRfY29tcGxldGUgPSAxMDAgKiAocmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWQgKwot
ICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZCkgLyByZXN1bHRfc3VtbWFyeS50
b3RhbAotICAgICAgICBhY3Rpb24gPSAiVGVzdGluZyIKLSAgICAgICAgaWYgcmV0cnlpbmc6Ci0g
ICAgICAgICAgICBhY3Rpb24gPSAiUmV0cnlpbmciCi0gICAgICAgIHNlbGYuX3VwZGF0ZSgiJXMg
KCVkJSUpOiAlZCByYW4gYXMgZXhwZWN0ZWQsICVkIGRpZG4ndCwgJWQgbGVmdCIgJQotICAgICAg
ICAgICAgICAgICAgICAgKGFjdGlvbiwgcGVyY2VudF9jb21wbGV0ZSwgcmVzdWx0X3N1bW1hcnku
ZXhwZWN0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkudW5leHBlY3Rl
ZCwgcmVzdWx0X3N1bW1hcnkucmVtYWluaW5nKSkKLQotICAgICAgICBpZiByZXN1bHRfc3VtbWFy
eS5yZW1haW5pbmcgPT0gMDoKLSAgICAgICAgICAgIHNlbGYuX3VwZGF0ZSgnJykKLQotICAgIGRl
ZiBwcmludF91bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZiwgdW5leHBlY3RlZF9yZXN1bHRzKToKLSAg
ICAgICAgIiIiUHJpbnRzIGEgbGlzdCBvZiB0aGUgdW5leHBlY3RlZCByZXN1bHRzIHRvIHRoZSBi
dWlsZGJvdCBzdHJlYW0uIiIiCi0gICAgICAgIGlmIHNlbGYuZGlzYWJsZWQoJ3VuZXhwZWN0ZWQt
cmVzdWx0cycpOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgcGFzc2VzID0ge30KLSAg
ICAgICAgZmxha3kgPSB7fQotICAgICAgICByZWdyZXNzaW9ucyA9IHt9Ci0KLSAgICAgICAgZGVm
IGFkZF90b19kaWN0X29mX2xpc3RzKGRpY3QsIGtleSwgdmFsdWUpOgotICAgICAgICAgICAgZGlj
dC5zZXRkZWZhdWx0KGtleSwgW10pLmFwcGVuZCh2YWx1ZSkKLQotICAgICAgICBkZWYgYWRkX3Jl
c3VsdCh0ZXN0LCByZXN1bHRzLCBwYXNzZXM9cGFzc2VzLCBmbGFreT1mbGFreSwgcmVncmVzc2lv
bnM9cmVncmVzc2lvbnMpOgotICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0c1snYWN0dWFsJ10u
c3BsaXQoIiAiKQotICAgICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRzWydleHBlY3RlZCddLnNw
bGl0KCIgIikKLSAgICAgICAgICAgIGlmIGFjdHVhbCA9PSBbJ1BBU1MnXToKLSAgICAgICAgICAg
ICAgICBpZiAnQ1JBU0gnIGluIGV4cGVjdGVkOgotICAgICAgICAgICAgICAgICAgICBhZGRfdG9f
ZGljdF9vZl9saXN0cyhwYXNzZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdFeHBlY3RlZCB0byBjcmFzaCwgYnV0IHBhc3NlZCcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QpCi0gICAgICAgICAgICAgICAgZWxpZiAnVElN
RU9VVCcgaW4gZXhwZWN0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgIGFkZF90b19kaWN0X29mX2xp
c3RzKHBhc3NlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4
cGVjdGVkIHRvIHRpbWVvdXQsIGJ1dCBwYXNzZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVzdCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgICAgICAgICBhZGRfdG9fZGljdF9vZl9saXN0cyhwYXNzZXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdFeHBlY3RlZCB0byBmYWlsLCBidXQgcGFzc2VkJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCkKLSAgICAgICAg
ICAgIGVsaWYgbGVuKGFjdHVhbCkgPiAxOgotICAgICAgICAgICAgICAgICMgV2UgZ3JvdXAgZmxh
a3kgdGVzdHMgYnkgdGhlIGZpcnN0IGFjdHVhbCByZXN1bHQgd2UgZ290LgotICAgICAgICAgICAg
ICAgIGFkZF90b19kaWN0X29mX2xpc3RzKGZsYWt5LCBhY3R1YWxbMF0sIHRlc3QpCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGFkZF90b19kaWN0X29mX2xpc3RzKHJlZ3Jlc3Np
b25zLCByZXN1bHRzWydhY3R1YWwnXSwgdGVzdCkKLQotICAgICAgICByZXN1bHRzanNvbnBhcnNl
ci5mb3JfZWFjaF90ZXN0KHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMnXSwgYWRkX3Jlc3VsdCkK
LQotICAgICAgICBpZiBsZW4ocGFzc2VzKSBvciBsZW4oZmxha3kpIG9yIGxlbihyZWdyZXNzaW9u
cyk6Ci0gICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxuIikKLQotICAg
ICAgICBpZiBsZW4ocGFzc2VzKToKLSAgICAgICAgICAgIGZvciBrZXksIHRlc3RzIGluIHBhc3Nl
cy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3Jp
dGUoIiVzOiAoJWQpXG4iICUgKGtleSwgbGVuKHRlc3RzKSkpCi0gICAgICAgICAgICAgICAgdGVz
dHMuc29ydCgpCi0gICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6Ci0gICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiICAlc1xuIiAlIHRlc3QpCi0g
ICAgICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCJcbiIpCi0gICAgICAg
ICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxuIikKLQotICAgICAgICBpZiBsZW4o
Zmxha3kpOgotICAgICAgICAgICAgZGVzY3JpcHRpb25zID0gVGVzdEV4cGVjdGF0aW9ucy5FWFBF
Q1RBVElPTl9ERVNDUklQVElPTlMKLSAgICAgICAgICAgIGZvciBrZXksIHRlc3RzIGluIGZsYWt5
Lml0ZXJpdGVtcygpOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnMu
RVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQotICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90
X3N0cmVhbS53cml0ZSgiVW5leHBlY3RlZCBmbGFraW5lc3M6ICVzICglZClcbiIKLSAgICAgICAg
ICAgICAgICAgICAgJSAoZGVzY3JpcHRpb25zW3Jlc3VsdF1bMV0sIGxlbih0ZXN0cykpKQotICAg
ICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQotCi0gICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4g
dGVzdHM6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdHNqc29ucGFyc2VyLnJl
c3VsdF9mb3JfdGVzdCh1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10sIHRlc3QpCi0gICAgICAg
ICAgICAgICAgICAgIGFjdHVhbCA9IHJlc3VsdFsnYWN0dWFsJ10uc3BsaXQoIiAiKQotICAgICAg
ICAgICAgICAgICAgICBleHBlY3RlZCA9IHJlc3VsdFsnZXhwZWN0ZWQnXS5zcGxpdCgiICIpCi0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnMuRVhQRUNUQVRJT05T
W2tleS5sb3dlcigpXQotICAgICAgICAgICAgICAgICAgICBuZXdfZXhwZWN0YXRpb25zX2xpc3Qg
PSBsaXN0KHNldChhY3R1YWwpIHwgc2V0KGV4cGVjdGVkKSkKLSAgICAgICAgICAgICAgICAgICAg
c2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCIgICVzID0gJXNcbiIgJQotICAgICAgICAgICAg
ICAgICAgICAgICAgKHRlc3QsICIgIi5qb2luKG5ld19leHBlY3RhdGlvbnNfbGlzdCkpKQotICAg
ICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQotICAgICAgICAg
ICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCJcbiIpCi0KLSAgICAgICAgaWYgbGVuKHJl
Z3Jlc3Npb25zKToKLSAgICAgICAgICAgIGRlc2NyaXB0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnMu
RVhQRUNUQVRJT05fREVTQ1JJUFRJT05TCi0gICAgICAgICAgICBmb3Iga2V5LCB0ZXN0cyBpbiBy
ZWdyZXNzaW9ucy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBUZXN0RXhw
ZWN0YXRpb25zLkVYUEVDVEFUSU9OU1trZXkubG93ZXIoKV0KLSAgICAgICAgICAgICAgICBzZWxm
Ll9idWlsZGJvdF9zdHJlYW0ud3JpdGUoCi0gICAgICAgICAgICAgICAgICAgICJSZWdyZXNzaW9u
czogVW5leHBlY3RlZCAlcyA6ICglZClcbiIgJSAoCi0gICAgICAgICAgICAgICAgICAgIGRlc2Ny
aXB0aW9uc1tyZXN1bHRdWzFdLCBsZW4odGVzdHMpKSkKLSAgICAgICAgICAgICAgICB0ZXN0cy5z
b3J0KCkKLSAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKLSAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCIgICVzID0gJXNcbiIgJSAodGVzdCwg
a2V5KSkKLSAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxuIikK
LSAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQotCi0gICAgICAg
IGlmIGxlbih1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10pIGFuZCBzZWxmLl9vcHRpb25zLnZl
cmJvc2U6Ci0gICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIiVzXG4iICUg
KCItIiAqIDc4KSkKLQotICAgIGRlZiBwcmludF91cGRhdGUoc2VsZiwgbXNnKToKLSAgICAgICAg
aWYgc2VsZi5kaXNhYmxlZCgndXBkYXRlcycpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAg
IHNlbGYuX3VwZGF0ZShtc2cpCi0KLSAgICBkZWYgd3JpdGUoc2VsZiwgbXNnLCBvcHRpb249Im1p
c2MiKToKLSAgICAgICAgaWYgc2VsZi5kaXNhYmxlZChvcHRpb24pOgotICAgICAgICAgICAgcmV0
dXJuCi0gICAgICAgIHNlbGYuX3dyaXRlKG1zZykKLQotICAgIGRlZiBfd3JpdGUoc2VsZiwgbXNn
KToKLSAgICAgICAgX2xvZy5pbmZvKG1zZykKLQotICAgIGRlZiBfdXBkYXRlKHNlbGYsIG1zZyk6
Ci0gICAgICAgIGlmIHNlbGYuX21ldGVyOgotICAgICAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRl
KG1zZykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3dyaXRlKG1zZykKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50
aW5nX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA5
MDUyMykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3ByaW50aW5nX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUzOSArMCwwIEBA
Ci0jIS91c3IvYmluL3B5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0
OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIlVuaXQgdGVzdHMgZm9y
IHByaW50aW5nLnB5LiIiIgotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9wdHBhcnNlCi1pbXBv
cnQgdGltZQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBh
cnJheV9zdHJlYW0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgbG9ndGVzdGlu
ZwotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKLWZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzIGltcG9ydCBtYW5hZ2VyCi1mcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgcHJpbnRpbmcKLWZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCByZXN1bHRfc3VtbWFyeQotZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRp
b25zCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVz
dF9mYWlsdXJlcwotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1w
b3J0IHRlc3RfcmVzdWx0cwotCi0KLWRlZiBnZXRfb3B0aW9ucyhhcmdzKToKLSAgICBwcmludF9v
cHRpb25zID0gcHJpbnRpbmcucHJpbnRfb3B0aW9ucygpCi0gICAgb3B0aW9uX3BhcnNlciA9IG9w
dHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1wcmludF9vcHRpb25zKQotICAgIHJldHVy
biBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKLQotCi1jbGFzcyBUZXN0VXRpbGl0eUZ1
bmN0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfY29uZmlndXJlX2xvZ2dp
bmcoc2VsZik6Ci0gICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBnZXRfb3B0aW9ucyhbXSkKLSAgICAg
ICAgc3RyZWFtID0gYXJyYXlfc3RyZWFtLkFycmF5U3RyZWFtKCkKLSAgICAgICAgaGFuZGxlciA9
IHByaW50aW5nLl9jb25maWd1cmVfbG9nZ2luZyhzdHJlYW0sIG9wdGlvbnMudmVyYm9zZSkKLSAg
ICAgICAgbG9nZ2luZy5pbmZvKCJ0aGlzIHNob3VsZCBiZSBsb2dnZWQiKQotICAgICAgICBzZWxm
LmFzc2VydEZhbHNlKHN0cmVhbS5lbXB0eSgpKQotCi0gICAgICAgIHN0cmVhbS5yZXNldCgpCi0g
ICAgICAgIGxvZ2dpbmcuZGVidWcoInRoaXMgc2hvdWxkIG5vdCBiZSBsb2dnZWQiKQotICAgICAg
ICBzZWxmLmFzc2VydFRydWUoc3RyZWFtLmVtcHR5KCkpCi0KLSAgICAgICAgcHJpbnRpbmcuX3Jl
c3RvcmVfbG9nZ2luZyhoYW5kbGVyKQotCi0gICAgICAgIHN0cmVhbS5yZXNldCgpCi0gICAgICAg
IG9wdGlvbnMsIGFyZ3MgPSBnZXRfb3B0aW9ucyhbJy0tdmVyYm9zZSddKQotICAgICAgICBoYW5k
bGVyID0gcHJpbnRpbmcuX2NvbmZpZ3VyZV9sb2dnaW5nKHN0cmVhbSwgb3B0aW9ucy52ZXJib3Nl
KQotICAgICAgICBsb2dnaW5nLmRlYnVnKCJ0aGlzIHNob3VsZCBiZSBsb2dnZWQiKQotICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5lbXB0eSgpKQotICAgICAgICBwcmludGluZy5fcmVz
dG9yZV9sb2dnaW5nKGhhbmRsZXIpCi0KLSAgICBkZWYgdGVzdF9wcmludF9vcHRpb25zKHNlbGYp
OgotICAgICAgICBvcHRpb25zLCBhcmdzID0gZ2V0X29wdGlvbnMoW10pCi0gICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShvcHRpb25zIGlzIG5vdCBOb25lKQotCi0gICAgZGVmIHRlc3RfcGFyc2VfcHJp
bnRfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgZGVmIHRlc3Rfc3dpdGNoZXMoYXJncywgZXhwZWN0
ZWRfc3dpdGNoZXNfc3RyLCB2ZXJib3NlPUZhbHNlKToKLSAgICAgICAgICAgIG9wdGlvbnMsIGFy
Z3MgPSBnZXRfb3B0aW9ucyhhcmdzKQotICAgICAgICAgICAgaWYgZXhwZWN0ZWRfc3dpdGNoZXNf
c3RyOgotICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N3aXRjaGVzID0gc2V0KGV4cGVjdGVkX3N3
aXRjaGVzX3N0ci5zcGxpdCgnLCcpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg
ICBleHBlY3RlZF9zd2l0Y2hlcyA9IHNldCgpCi0gICAgICAgICAgICBzd2l0Y2hlcyA9IHByaW50
aW5nLnBhcnNlX3ByaW50X29wdGlvbnMob3B0aW9ucy5wcmludF9vcHRpb25zLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2UpCi0gICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3N3aXRjaGVzLCBzd2l0Y2hlcykKLQot
ICAgICAgICAjIHRlc3QgdGhhdCB3ZSBkZWZhdWx0IHRvIHRoZSBkZWZhdWx0IHNldCBvZiBzd2l0
Y2hlcwotICAgICAgICB0ZXN0X3N3aXRjaGVzKFtdLCBwcmludGluZy5QUklOVF9ERUZBVUxUKQot
Ci0gICAgICAgICMgdGVzdCB0aGF0IHZlcmJvc2UgZGVmYXVsdHMgdG8gZXZlcnl0aGluZwotICAg
ICAgICB0ZXN0X3N3aXRjaGVzKFtdLCBwcmludGluZy5QUklOVF9FVkVSWVRISU5HLCB2ZXJib3Nl
PVRydWUpCi0KLSAgICAgICAgIyB0ZXN0IHRoYXQgLS1wcmludCBkZWZhdWx0IGRvZXMgd2hhdCBp
dCdzIHN1cHBvc2VkIHRvCi0gICAgICAgIHRlc3Rfc3dpdGNoZXMoWyctLXByaW50JywgJ2RlZmF1
bHQnXSwgcHJpbnRpbmcuUFJJTlRfREVGQVVMVCkKLQotICAgICAgICAjIHRlc3QgdGhhdCAtLXBy
aW50IG5vdGhpbmcgZG9lcyB3aGF0IGl0J3Mgc3VwcG9zZWQgdG8KLSAgICAgICAgdGVzdF9zd2l0
Y2hlcyhbJy0tcHJpbnQnLCAnbm90aGluZyddLCBOb25lKQotCi0gICAgICAgICMgdGVzdCB0aGF0
IC0tcHJpbnQgZXZlcnl0aGluZyBkb2VzIHdoYXQgaXQncyBzdXBwb3NlZCB0bwotICAgICAgICB0
ZXN0X3N3aXRjaGVzKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10sIHByaW50aW5nLlBSSU5UX0VW
RVJZVEhJTkcpCi0KLSAgICAgICAgIyB0aGlzIHRlc3RzIHRoYXQgJy0tcHJpbnQgWCcgb3ZlcnJp
ZGVzICctLXZlcmJvc2UnCi0gICAgICAgIHRlc3Rfc3dpdGNoZXMoWyctLXByaW50JywgJ2FjdHVh
bCddLCAnYWN0dWFsJywgdmVyYm9zZT1UcnVlKQotCi0KLQotY2xhc3MgIFRlc3RwcmludGVyKHVu
aXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgZ2V0X3ByaW50ZXIoc2VsZiwgYXJncz1Ob25lLCB0
dHk9RmFsc2UpOgotICAgICAgICBhcmdzID0gYXJncyBvciBbXQotICAgICAgICBwcmludGluZ19v
cHRpb25zID0gcHJpbnRpbmcucHJpbnRfb3B0aW9ucygpCi0gICAgICAgIG9wdGlvbl9wYXJzZXIg
PSBvcHRwYXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9cHJpbnRpbmdfb3B0aW9ucykKLSAg
ICAgICAgb3B0aW9ucywgYXJncyA9IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQotICAg
ICAgICBzZWxmLl9wb3J0ID0gcG9ydC5nZXQoJ3Rlc3QnLCBvcHRpb25zKQotICAgICAgICBucHJv
YyA9IDIKLQotICAgICAgICByZWd1bGFyX291dHB1dCA9IGFycmF5X3N0cmVhbS5BcnJheVN0cmVh
bSh0dHk9dHR5KQotICAgICAgICBidWlsZGJvdF9vdXRwdXQgPSBhcnJheV9zdHJlYW0uQXJyYXlT
dHJlYW0oKQotICAgICAgICBwcmludGVyID0gcHJpbnRpbmcuUHJpbnRlcihzZWxmLl9wb3J0LCBv
cHRpb25zLCByZWd1bGFyX291dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnVpbGRib3Rfb3V0cHV0LCBjb25maWd1cmVfbG9nZ2luZz1UcnVlKQotICAgICAgICByZXR1
cm4gcHJpbnRlciwgcmVndWxhcl9vdXRwdXQsIGJ1aWxkYm90X291dHB1dAotCi0gICAgZGVmIGdl
dF9yZXN1bHQoc2VsZiwgdGVzdF9uYW1lLCByZXN1bHRfdHlwZT10ZXN0X2V4cGVjdGF0aW9ucy5Q
QVNTLCBydW5fdGltZT0wKToKLSAgICAgICAgZmFpbHVyZXMgPSBbXQotICAgICAgICBpZiByZXN1
bHRfdHlwZSA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUOgotICAgICAgICAgICAgZmFpbHVy
ZXMgPSBbdGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCgpXQotICAgICAgICBlbGlmIHJlc3Vs
dF90eXBlID09IHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIOgotICAgICAgICAgICAgZmFpbHVyZXMg
PSBbdGVzdF9mYWlsdXJlcy5GYWlsdXJlQ3Jhc2goKV0KLSAgICAgICAgcmV0dXJuIHRlc3RfcmVz
dWx0cy5UZXN0UmVzdWx0KHRlc3RfbmFtZSwgZmFpbHVyZXM9ZmFpbHVyZXMsIHRlc3RfcnVuX3Rp
bWU9cnVuX3RpbWUpCi0KLSAgICBkZWYgZ2V0X3Jlc3VsdF9zdW1tYXJ5KHNlbGYsIHRlc3RfbmFt
ZXMsIGV4cGVjdGF0aW9uc19zdHIpOgotICAgICAgICBleHBlY3RhdGlvbnMgPSB0ZXN0X2V4cGVj
dGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zKAotICAgICAgICAgICAgc2VsZi5fcG9ydCwgdGVzdF9u
YW1lcywgZXhwZWN0YXRpb25zX3N0ciwKLSAgICAgICAgICAgIHNlbGYuX3BvcnQudGVzdF9jb25m
aWd1cmF0aW9uKCksCi0gICAgICAgICAgICBpc19saW50X21vZGU9RmFsc2UpCi0KLSAgICAgICAg
cnMgPSByZXN1bHRfc3VtbWFyeS5SZXN1bHRTdW1tYXJ5KGV4cGVjdGF0aW9ucywgdGVzdF9uYW1l
cykKLSAgICAgICAgcmV0dXJuIHRlc3RfbmFtZXMsIHJzLCBleHBlY3RhdGlvbnMKLQotICAgIGRl
ZiB0ZXN0X2hlbHBfcHJpbnRlcihzZWxmKToKLSAgICAgICAgIyBIZXJlIGFuZCBiZWxvdyB3ZSds
bCBjYWxsIHRoZSAicmVndWxhciIgcHJpbnRlciBlcnIgYW5kIHRoZQotICAgICAgICAjIGJ1aWxk
Ym90IHByaW50ZXIgb3V0OyB0aGlzIGNvcnJlc3BvbmRzIHRvIGhvdyB0aGluZ3MgcnVuIG9uIHRo
ZQotICAgICAgICAjIGJvdHMgd2l0aCBzdGRlcnIgYW5kIHN0ZG91dC4KLSAgICAgICAgcHJpbnRl
ciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKCkKLQotICAgICAgICAjIFRoaXMgcm91dGlu
ZSBzaG91bGQgcHJpbnQgc29tZXRoaW5nIHRvIHN0ZG91dC4gdGVzdGluZyB3aGF0IGl0IGlzCi0g
ICAgICAgICMgaXMga2luZCBvZiBwb2ludGxlc3MuCi0gICAgICAgIHByaW50ZXIuaGVscF9wcmlu
dGluZygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCi0gICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKLQotICAgIGRlZiBkb19zd2l0Y2hfdGVzdHMoc2Vs
ZiwgbWV0aG9kX25hbWUsIHN3aXRjaCwgdG9fYnVpbGRib3QsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtZXNzYWdlPSdoZWxsbycsIGV4cF9lcnI9Tm9uZSwgZXhwX2JvdD1Ob25lKToKLSAgICAg
ICAgZGVmIGRvX2hlbHBlcihtZXRob2RfbmFtZSwgc3dpdGNoLCBtZXNzYWdlLCBleHBfZXJyLCBl
eHBfYm90KToKLSAgICAgICAgICAgIHByaW50ZXIsIGVyciwgYm90ID0gc2VsZi5nZXRfcHJpbnRl
cihbJy0tcHJpbnQnLCBzd2l0Y2hdLCB0dHk9VHJ1ZSkKLSAgICAgICAgICAgIGdldGF0dHIocHJp
bnRlciwgbWV0aG9kX25hbWUpKG1lc3NhZ2UpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGVyci5nZXQoKSwgZXhwX2VycikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm90Lmdl
dCgpLCBleHBfYm90KQotCi0gICAgICAgIGlmIHRvX2J1aWxkYm90OgotICAgICAgICAgICAgaWYg
ZXhwX2VyciBpcyBOb25lOgotICAgICAgICAgICAgICAgIGV4cF9lcnIgPSBbXQotICAgICAgICAg
ICAgaWYgZXhwX2JvdCBpcyBOb25lOgotICAgICAgICAgICAgICAgIGV4cF9ib3QgPSBbbWVzc2Fn
ZSArICJcbiJdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBleHBfZXJyIGlzIE5vbmU6
Ci0gICAgICAgICAgICAgICAgZXhwX2VyciA9IFttZXNzYWdlICsgIlxuIl0KLSAgICAgICAgICAg
IGlmIGV4cF9ib3QgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBleHBfYm90ID0gW10KLSAgICAg
ICAgZG9faGVscGVyKG1ldGhvZF9uYW1lLCAnbm90aGluZycsICdoZWxsbycsIFtdLCBbXSkKLSAg
ICAgICAgZG9faGVscGVyKG1ldGhvZF9uYW1lLCBzd2l0Y2gsICdoZWxsbycsIGV4cF9lcnIsIGV4
cF9ib3QpCi0gICAgICAgIGRvX2hlbHBlcihtZXRob2RfbmFtZSwgJ2V2ZXJ5dGhpbmcnLCAnaGVs
bG8nLCBleHBfZXJyLCBleHBfYm90KQotCi0gICAgZGVmIHRlc3RfY29uZmlndXJlX2FuZF9jbGVh
bnVwKHNlbGYpOgotICAgICAgICAjIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IGNhbGxpbmcgY2xl
YW51cCByZXBlYXRlZGx5IGFuZCBkZWxldGluZwotICAgICAgICAjIHRoZSBvYmplY3QgaXMgc2Fm
ZS4KLSAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmlu
dCcsICdldmVyeXRoaW5nJ10pCi0gICAgICAgIHByaW50ZXIuY2xlYW51cCgpCi0gICAgICAgIHBy
aW50ZXIuY2xlYW51cCgpCi0gICAgICAgIHByaW50ZXIgPSBOb25lCi0KLSAgICBkZWYgdGVzdF9w
cmludF9hY3R1YWwoc2VsZik6Ci0gICAgICAgICMgQWN0dWFsIHJlc3VsdHMgbmVlZCB0byBiZSBs
b2dnZWQgdG8gdGhlIGJ1aWxkYm90J3Mgc3RyZWFtLgotICAgICAgICBzZWxmLmRvX3N3aXRjaF90
ZXN0cygncHJpbnRfYWN0dWFsJywgJ2FjdHVhbCcsIHRvX2J1aWxkYm90PVRydWUpCi0KLSAgICBk
ZWYgdGVzdF9wcmludF9hY3R1YWxfYnVpbGRib3Qoc2VsZik6Ci0gICAgICAgICMgRklYTUU6IFRl
c3QgdGhhdCB0aGUgZm9ybWF0IG9mIHRoZSBhY3R1YWwgcmVzdWx0cyBtYXRjaGVzIHdoYXQgdGhl
Ci0gICAgICAgICMgYnVpbGRib3QgaXMgZXhwZWN0aW5nLgotICAgICAgICBwYXNzCi0KLSAgICBk
ZWYgdGVzdF9wcmludF9jb25maWcoc2VsZik6Ci0gICAgICAgIHNlbGYuZG9fc3dpdGNoX3Rlc3Rz
KCdwcmludF9jb25maWcnLCAnY29uZmlnJywgdG9fYnVpbGRib3Q9RmFsc2UpCi0KLSAgICBkZWYg
dGVzdF9wcmludF9leHBlY3RlZChzZWxmKToKLSAgICAgICAgc2VsZi5kb19zd2l0Y2hfdGVzdHMo
J3ByaW50X2V4cGVjdGVkJywgJ2V4cGVjdGVkJywgdG9fYnVpbGRib3Q9RmFsc2UpCi0KLSAgICBk
ZWYgdGVzdF9wcmludF90aW1pbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuZG9fc3dpdGNoX3Rlc3Rz
KCdwcmludF90aW1pbmcnLCAndGltaW5nJywgdG9fYnVpbGRib3Q9RmFsc2UpCi0KLSAgICBkZWYg
dGVzdF9wcmludF91cGRhdGUoc2VsZik6Ci0gICAgICAgICMgTm90ZSB0aGF0IHRoZXJlIHNob3Vs
ZG4ndCBiZSBhIGNhcnJpYWdlIHJldHVybiBoZXJlOyB1cGRhdGVzKCkKLSAgICAgICAgIyBhcmUg
bWVhbnQgdG8gYmUgb3ZlcndyaXR0ZW4uCi0gICAgICAgIHNlbGYuZG9fc3dpdGNoX3Rlc3RzKCdw
cmludF91cGRhdGUnLCAndXBkYXRlcycsIHRvX2J1aWxkYm90PUZhbHNlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtZXNzYWdlPSdoZWxsbycsIGV4cF9lcnI9WydoZWxsbyddKQotCi0g
ICAgZGVmIHRlc3RfcHJpbnRfb25lX2xpbmVfc3VtbWFyeShzZWxmKToKLSAgICAgICAgcHJpbnRl
ciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdub3RoaW5nJ10pCi0g
ICAgICAgIHByaW50ZXIucHJpbnRfb25lX2xpbmVfc3VtbWFyeSgxLCAxLCAwKQotICAgICAgICBz
ZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCi0KLSAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQg
PSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdvbmUtbGluZS1zdW1tYXJ5J10pCi0gICAg
ICAgIHByaW50ZXIucHJpbnRfb25lX2xpbmVfc3VtbWFyeSgxLCAxLCAwKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhlcnIuZ2V0KCksIFsiQWxsIDEgdGVzdHMgcmFuIGFzIGV4cGVjdGVkLlxu
IiwgIlxuIl0pCi0KLSAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVy
KFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCi0gICAgICAgIHByaW50ZXIucHJpbnRfb25lX2xp
bmVfc3VtbWFyeSgxLCAxLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuZ2V0KCks
IFsiQWxsIDEgdGVzdHMgcmFuIGFzIGV4cGVjdGVkLlxuIiwgIlxuIl0pCi0KLSAgICAgICAgZXJy
LnJlc2V0KCkKLSAgICAgICAgcHJpbnRlci5wcmludF9vbmVfbGluZV9zdW1tYXJ5KDIsIDEsIDEp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5nZXQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgWyIxIHRlc3QgcmFuIGFzIGV4cGVjdGVkLCAxIGRpZG4ndDpcbiIsICJcbiJdKQot
Ci0gICAgICAgIGVyci5yZXNldCgpCi0gICAgICAgIHByaW50ZXIucHJpbnRfb25lX2xpbmVfc3Vt
bWFyeSgzLCAyLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuZ2V0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIFsiMiB0ZXN0cyByYW4gYXMgZXhwZWN0ZWQsIDEgZGlkbid0
OlxuIiwgIlxuIl0pCi0KLSAgICAgICAgZXJyLnJlc2V0KCkKLSAgICAgICAgcHJpbnRlci5wcmlu
dF9vbmVfbGluZV9zdW1tYXJ5KDMsIDIsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVy
ci5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWydcbicsICIyIHRlc3RzIHJhbiBh
cyBleHBlY3RlZCAoMSBkaWRuJ3QgcnVuKS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAnXG4nXSkKLQotCi0gICAgZGVmIHRlc3RfcHJpbnRfdGVzdF9yZXN1bHQoc2VsZik6Ci0gICAg
ICAgICMgTm90ZSBoZXJlIHRoYXQgd2UgZG9uJ3QgdXNlIG1lYW5pbmdmdWwgZXhwX3N0ciBhbmQg
Z290X3N0ciB2YWx1ZXM7Ci0gICAgICAgICMgdGhlIGFjdHVhbCBjb250ZW50cyBvZiB0aGUgc3Ry
aW5nIGFyZSB0cmVhdGVkIG9wYXF1ZWx5IGJ5Ci0gICAgICAgICMgcHJpbnRfdGVzdF9yZXN1bHQo
KSB3aGVuIHRyYWNpbmcsIGFuZCB1c3VhbGx5IHdlIGRvbid0IHdhbnQKLSAgICAgICAgIyB0byB0
ZXN0IHdoYXQgZXhhY3RseSBpcyBwcmludGVkLCBqdXN0IHRoYXQgc29tZXRoaW5nCi0gICAgICAg
ICMgd2FzIHByaW50ZWQgKG9yIHRoYXQgbm90aGluZyB3YXMgcHJpbnRlZCkuCi0gICAgICAgICMK
LSAgICAgICAgIyBGSVhNRTogdGhpcyBpcyBhY3R1YWxseSBzb21lIGdvb2Z5IGxheWVyaW5nOyBp
dCB3b3VsZCBiZSBuaWNlCi0gICAgICAgICMgd2UgY291bGQgcmVmYWN0b3IgaXQgc28gdGhhdCB0
aGUgYXJncyB3ZXJlbid0IHJlZHVuZGFudC4gTWF5YmUKLSAgICAgICAgIyB0aGUgVGVzdFJlc3Vs
dCBzaG91bGQgY29udGFpbiB3aGF0IHdhcyBleHBlY3RlZCwgYW5kIHRoZQotICAgICAgICAjIHN0
cmluZ3MgY291bGQgYmUgZGVyaXZlZCBmcm9tIHRoZSBUZXN0UmVzdWx0PwotICAgICAgICBwcmlu
dGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkK
LSAgICAgICAgcmVzdWx0ID0gc2VsZi5nZXRfcmVzdWx0KCdwYXNzZXMvaW1hZ2UuaHRtbCcpCi0g
ICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1GYWxzZSwg
ZXhwX3N0cj0nJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScn
KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCi0KLSAgICAgICAgcHJpbnRl
ciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICd1bmV4cGVjdGVkJ10p
Ci0gICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1UcnVl
LCBleHBfc3RyPScnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9
JycpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKLSAgICAgICAgcHJpbnRl
ci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNlLCBleHBfc3RyPScnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKGVyci5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWycg
IHBhc3Nlcy9pbWFnZS5odG1sIC0+IHVuZXhwZWN0ZWQgcGFzc1xuJ10pCi0KLSAgICAgICAgcHJp
bnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5n
J10pCi0gICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1U
cnVlLCBleHBfc3RyPScnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9z
dHI9JycpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKLQotICAgICAgICBw
cmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2UsIGV4cF9zdHI9
JycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMoZXJyLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBbJyAgcGFzc2VzL2ltYWdlLmh0bWwgLT4gdW5leHBlY3RlZCBwYXNzXG4nXSkKLQotICAgICAg
ICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ25vdGhp
bmcnXSkKLSAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVk
PUZhbHNlLCBleHBfc3RyPScnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv
dF9zdHI9JycpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKLQotICAgICAg
ICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhY2UtdW5leHBlY3Rl
ZCddKQotICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9
VHJ1ZSwgZXhwX3N0cj0nJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rf
c3RyPScnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCi0KLSAgICAgICAg
cHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlLXVuZXhwZWN0ZWQn
XSkKLSAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZh
bHNlLCBleHBfc3RyPScnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9z
dHI9JycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCi0KLSAgICAgICAg
cHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlLXVuZXhwZWN0ZWQn
XSkKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5nZXRfcmVzdWx0KCJwYXNzZXMvdGV4dC5odG1sIikK
LSAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNl
LCBleHBfc3RyPScnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9
JycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCi0KLSAgICAgICAgZXJy
LnJlc2V0KCkKLSAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVj
dGVkPUZhbHNlLCBleHBfc3RyPScnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdvdF9zdHI9JycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCi0KLSAg
ICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICd0
cmFjZS1ldmVyeXRoaW5nJ10pCi0gICAgICAgIHJlc3VsdCA9IHNlbGYuZ2V0X3Jlc3VsdCgncGFz
c2VzL2ltYWdlLmh0bWwnKQotICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3Vs
dCwgZXhwZWN0ZWQ9VHJ1ZSwgZXhwX3N0cj0nJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnb3Rfc3RyPScnKQotICAgICAgICByZXN1bHQgPSBzZWxmLmdldF9yZXN1bHQoJ2Zh
aWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfdGV4dC5odG1sJykKLSAgICAgICAgcHJpbnRlci5wcmlu
dF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPVRydWUsIGV4cF9zdHI9JycsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKLSAgICAgICAgcmVzdWx0ID0g
c2VsZi5nZXRfcmVzdWx0KCdmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX2NoZWNrLmh0bWwnKQot
ICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9VHJ1ZSwg
ZXhwX3N0cj0nJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScn
KQotICAgICAgICByZXN1bHQgPSBzZWxmLmdldF9yZXN1bHQoJ2ZhaWx1cmVzL2V4cGVjdGVkL21p
c3NpbmdfaW1hZ2UuaHRtbCcpCi0gICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVz
dWx0LCBleHBlY3RlZD1UcnVlLCBleHBfc3RyPScnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdvdF9zdHI9JycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5
KCkpCi0KLSAgICAgICAgZXJyLnJlc2V0KCkKLSAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jl
c3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNlLCBleHBfc3RyPScnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCi0KLSAgICBkZWYgdGVzdF9wcmludF9wcm9n
cmVzcyhzZWxmKToKLSAgICAgICAgZXhwZWN0YXRpb25zID0gJycKLQotICAgICAgICBwcmludGVy
LCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkKLSAg
ICAgICAgdGVzdHMgPSBbJ3Bhc3Nlcy90ZXh0Lmh0bWwnLCAnZmFpbHVyZXMvZXhwZWN0ZWQvdGlt
ZW91dC5odG1sJywKLSAgICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkL2NyYXNoLmh0
bWwnXQotICAgICAgICBwYXRocywgcnMsIGV4cCA9IHNlbGYuZ2V0X3Jlc3VsdF9zdW1tYXJ5KHRl
c3RzLCBleHBlY3RhdGlvbnMpCi0KLSAgICAgICAgIyBGaXJzdCwgdGVzdCB0aGF0IHdlIHByaW50
IG5vdGhpbmcuCi0gICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIEZhbHNlLCBwYXRo
cykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQotICAgICAgICBzZWxmLmFz
c2VydFRydWUoZXJyLmVtcHR5KCkpCi0KLSAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhy
cywgVHJ1ZSwgcGF0aHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQotCi0gICAgICAgIHNlbGYudGltZXMg
PSBbMSwgMiwgMTIsIDEzLCAxNCwgMjMsIDMzXQotCi0gICAgICAgIGRlZiBtb2NrX3RpbWUoKToK
LSAgICAgICAgICAgIHJldHVybiBzZWxmLnRpbWVzLnBvcCgwKQotCi0gICAgICAgIG9yaWdfdGlt
ZSA9IHRpbWUudGltZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0aW1lLnRpbWUgPSBtb2Nr
X3RpbWUKLQotICAgICAgICAgICAgIyBUZXN0IHByaW50aW5nIHByb2dyZXNzIHVwZGF0ZXMgdG8g
YSBmaWxlLgotICAgICAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVy
KFsnLS1wcmludCcsICdvbmUtbGluZS1wcm9ncmVzcyddKQotICAgICAgICAgICAgcHJpbnRlci5w
cmludF9wcm9ncmVzcyhycywgRmFsc2UsIHBhdGhzKQotICAgICAgICAgICAgcHJpbnRlci5wcmlu
dF9wcm9ncmVzcyhycywgRmFsc2UsIHBhdGhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KG91dC5lbXB0eSgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQot
Ci0gICAgICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBGYWxzZSwgcGF0aHMpCi0g
ICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCi0gICAgICAgICAgICBzZWxm
LmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQotCi0gICAgICAgICAgICBlcnIucmVzZXQoKQotICAg
ICAgICAgICAgb3V0LnJlc2V0KCkKLSAgICAgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3Mo
cnMsIFRydWUsIHBhdGhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgp
KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQotCi0gICAgICAgICAg
ICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBUcnVlLCBwYXRocykKLSAgICAgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
ZXJyLmVtcHR5KCkpCi0KLSAgICAgICAgICAgICMgTm93IHJlY29uZmlndXJlIHRoZSBwcmludGVy
IHRvIHRlc3QgcHJpbnRpbmcgdG8gYSBUVFkgaW5zdGVhZCBvZiBhIGZpbGUuCi0gICAgICAgICAg
ICBzZWxmLnRpbWVzID0gWzEsIDEuMDEsIDIsIDNdCi0gICAgICAgICAgICBwcmludGVyLCBlcnIs
IG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ29uZS1saW5lLXByb2dyZXNzJ10s
IHR0eT1UcnVlKQotICAgICAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgRmFsc2Us
IHBhdGhzKQotICAgICAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgRmFsc2UsIHBh
dGhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQotICAgICAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQotCi0gICAgICAgICAgICBwcmludGVyLnBy
aW50X3Byb2dyZXNzKHJzLCBGYWxzZSwgcGF0aHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRy
dWUob3V0LmVtcHR5KCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgp
KQotCi0gICAgICAgICAgICBlcnIucmVzZXQoKQotICAgICAgICAgICAgb3V0LnJlc2V0KCkKLSAg
ICAgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIFRydWUsIHBhdGhzKQotICAgICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQotICAgICAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZShlcnIuZW1wdHkoKSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHRpbWUu
dGltZSA9IG9yaWdfdGltZQotCi0gICAgZGVmIHRlc3Rfd3JpdGVfbm90aGluZyhzZWxmKToKLSAg
ICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdu
b3RoaW5nJ10pCi0gICAgICAgIHByaW50ZXIud3JpdGUoImZvbyIpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKLQotICAgIGRlZiB0ZXN0X3dyaXRlX21pc2Moc2VsZik6Ci0g
ICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAn
bWlzYyddKQotICAgICAgICBwcmludGVyLndyaXRlKCJmb28iKQotICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKGVyci5lbXB0eSgpKQotICAgICAgICBlcnIucmVzZXQoKQotICAgICAgICBwcmludGVy
LndyaXRlKCJmb28iLCAiY29uZmlnIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0
eSgpKQotCi0gICAgZGVmIHRlc3Rfd3JpdGVfZXZlcnl0aGluZyhzZWxmKToKLSAgICAgICAgcHJp
bnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5n
J10pCi0gICAgICAgIHByaW50ZXIud3JpdGUoImZvbyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFs
c2UoZXJyLmVtcHR5KCkpCi0gICAgICAgIGVyci5yZXNldCgpCi0gICAgICAgIHByaW50ZXIud3Jp
dGUoImZvbyIsICJjb25maWciKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgp
KQotCi0gICAgZGVmIHRlc3Rfd3JpdGVfdmVyYm9zZShzZWxmKToKLSAgICAgICAgcHJpbnRlciwg
ZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS12ZXJib3NlJ10pCi0gICAgICAgIHByaW50
ZXIud3JpdGUoImZvbyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZXJyLmVtcHR5KCkg
YW5kICJmb28iIGluIGVyci5nZXQoKVswXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5l
bXB0eSgpKQotCi0gICAgZGVmIHRlc3RfcHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHNlbGYpOgot
ICAgICAgICAjIFRoaXMgcm91dGluZSBpcyB0aGUgb25seSBvbmUgdGhhdCBwcmludHMgc3R1ZmYg
dGhhdCB0aGUgYm90cwotICAgICAgICAjIGNhcmUgYWJvdXQuCi0gICAgICAgICMKLSAgICAgICAg
IyBGSVhNRTogdGhlcmUncyBzb21lIHdlaXJkIGxheWVyaW5nIGdvaW5nIG9uIGhlcmUuIEl0IHNl
ZW1zCi0gICAgICAgICMgbGlrZSB3ZSBzaG91bGRuJ3QgYmUgYm90aCB1c2luZyBhbiBleHBlY3Rh
dGlvbnMgc3RyaW5nIGFuZAotICAgICAgICAjIGhhdmluZyB0byBzcGVjaWZ5IHdoZXRoZXIgb3Ig
bm90IHRoZSByZXN1bHQgd2FzIGV4cGVjdGVkLgotICAgICAgICAjIFRoaXMgd2hvbGUgc2V0IG9m
IHRlc3RzIHNob3VsZCBwcm9iYWJseSBiZSByZXdyaXR0ZW4uCi0gICAgICAgICMKLSAgICAgICAg
IyBGSVhNRTogUGx1cywgdGhlIGZhY3QgdGhhdCB3ZSdyZSBoYXZpbmcgdG8gY2FsbCBpbnRvCi0g
ICAgICAgICMgcnVuX3dlYmtpdF90ZXN0cyBpcyBjbGVhcmx5IGEgbGF5ZXJpbmcgaW52ZXJzaW9u
LgotICAgICAgICBkZWYgZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZCwgcGFzc2luZywg
Zmxha3kpOgotICAgICAgICAgICAgIiIiUmV0dXJuIGFuIHVuZXhwZWN0ZWQgcmVzdWx0cyBzdW1t
YXJ5IG1hdGNoaW5nIHRoZSBpbnB1dCBkZXNjcmlwdGlvbi4KLQotICAgICAgICAgICAgVGhlcmUg
YXJlIGEgbG90IG9mIGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2YgdGVzdCByZXN1bHRzIHRoYXQK
LSAgICAgICAgICAgIGNhbiBiZSB0ZXN0ZWQ7IHRoaXMgcm91dGluZSBwcm9kdWNlcyB2YXJpb3Vz
IGNvbWJpbmF0aW9ucyBiYXNlZAotICAgICAgICAgICAgb24gdGhlIHZhbHVlcyBvZiB0aGUgaW5w
dXQgZmxhZ3MuCi0KLSAgICAgICAgICAgIEFyZ3MKLSAgICAgICAgICAgICAgICBleHBlY3RlZDog
d2hldGhlciB0aGUgdGVzdHMgcmFuIGFzIGV4cGVjdGVkCi0gICAgICAgICAgICAgICAgcGFzc2lu
Zzogd2hldGhlciB0aGUgdGVzdHMgc2hvdWxkIGFsbCBwYXNzCi0gICAgICAgICAgICAgICAgZmxh
a3k6IHdoZXRoZXIgdGhlIHRlc3RzIHNob3VsZCBiZSBmbGFreSAoaWYgRmFsc2UsIHRoZXkKLSAg
ICAgICAgICAgICAgICAgICAgcHJvZHVjZSB0aGUgc2FtZSByZXN1bHRzIG9uIGJvdGggcnVuczsg
aWYgVHJ1ZSwgdGhleQotICAgICAgICAgICAgICAgICAgICBhbGwgcGFzcyBvbiB0aGUgc2Vjb25k
IHJ1bikuCi0KLSAgICAgICAgICAgICIiIgotICAgICAgICAgICAgcGF0aHMsIHJzLCBleHAgPSBz
ZWxmLmdldF9yZXN1bHRfc3VtbWFyeSh0ZXN0cywgZXhwZWN0YXRpb25zKQotICAgICAgICAgICAg
aWYgZXhwZWN0ZWQ6Ci0gICAgICAgICAgICAgICAgcnMuYWRkKHNlbGYuZ2V0X3Jlc3VsdCgncGFz
c2VzL3RleHQuaHRtbCcsIHRlc3RfZXhwZWN0YXRpb25zLlBBU1MpLCBleHBlY3RlZCkKLSAgICAg
ICAgICAgICAgICBycy5hZGQoc2VsZi5nZXRfcmVzdWx0KCdmYWlsdXJlcy9leHBlY3RlZC90aW1l
b3V0Lmh0bWwnLCB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUKSwgZXhwZWN0ZWQpCi0gICAgICAg
ICAgICAgICAgcnMuYWRkKHNlbGYuZ2V0X3Jlc3VsdCgnZmFpbHVyZXMvZXhwZWN0ZWQvY3Jhc2gu
aHRtbCcsIHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIKSwgZXhwZWN0ZWQpCi0gICAgICAgICAgICBl
bGlmIHBhc3Npbmc6Ci0gICAgICAgICAgICAgICAgcnMuYWRkKHNlbGYuZ2V0X3Jlc3VsdCgncGFz
c2VzL3RleHQuaHRtbCcpLCBleHBlY3RlZCkKLSAgICAgICAgICAgICAgICBycy5hZGQoc2VsZi5n
ZXRfcmVzdWx0KCdmYWlsdXJlcy9leHBlY3RlZC90aW1lb3V0Lmh0bWwnKSwgZXhwZWN0ZWQpCi0g
ICAgICAgICAgICAgICAgcnMuYWRkKHNlbGYuZ2V0X3Jlc3VsdCgnZmFpbHVyZXMvZXhwZWN0ZWQv
Y3Jhc2guaHRtbCcpLCBleHBlY3RlZCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAg
ICAgcnMuYWRkKHNlbGYuZ2V0X3Jlc3VsdCgncGFzc2VzL3RleHQuaHRtbCcsIHRlc3RfZXhwZWN0
YXRpb25zLlRJTUVPVVQpLCBleHBlY3RlZCkKLSAgICAgICAgICAgICAgICBycy5hZGQoc2VsZi5n
ZXRfcmVzdWx0KCdmYWlsdXJlcy9leHBlY3RlZC90aW1lb3V0Lmh0bWwnLCB0ZXN0X2V4cGVjdGF0
aW9ucy5DUkFTSCksIGV4cGVjdGVkKQotICAgICAgICAgICAgICAgIHJzLmFkZChzZWxmLmdldF9y
ZXN1bHQoJ2ZhaWx1cmVzL2V4cGVjdGVkL2NyYXNoLmh0bWwnLCB0ZXN0X2V4cGVjdGF0aW9ucy5U
SU1FT1VUKSwgZXhwZWN0ZWQpCi0gICAgICAgICAgICByZXRyeSA9IHJzCi0gICAgICAgICAgICBp
ZiBmbGFreToKLSAgICAgICAgICAgICAgICBwYXRocywgcmV0cnksIGV4cCA9IHNlbGYuZ2V0X3Jl
c3VsdF9zdW1tYXJ5KHRlc3RzLCBleHBlY3RhdGlvbnMpCi0gICAgICAgICAgICAgICAgcmV0cnku
YWRkKHNlbGYuZ2V0X3Jlc3VsdCgncGFzc2VzL3RleHQuaHRtbCcpLCBUcnVlKQotICAgICAgICAg
ICAgICAgIHJldHJ5LmFkZChzZWxmLmdldF9yZXN1bHQoJ2ZhaWx1cmVzL2V4cGVjdGVkL3RpbWVv
dXQuaHRtbCcpLCBUcnVlKQotICAgICAgICAgICAgICAgIHJldHJ5LmFkZChzZWxmLmdldF9yZXN1
bHQoJ2ZhaWx1cmVzL2V4cGVjdGVkL2NyYXNoLmh0bWwnKSwgVHJ1ZSkKLSAgICAgICAgICAgIHVu
ZXhwZWN0ZWRfcmVzdWx0cyA9IG1hbmFnZXIuc3VtbWFyaXplX3Jlc3VsdHMoc2VsZi5fcG9ydCwg
ZXhwLCBycywgcmV0cnksIHRlc3RfdGltaW5ncz17fSwgb25seV91bmV4cGVjdGVkPVRydWUsIGlu
dGVycnVwdGVkPUZhbHNlKQotICAgICAgICAgICAgcmV0dXJuIHVuZXhwZWN0ZWRfcmVzdWx0cwot
Ci0gICAgICAgIHRlc3RzID0gWydwYXNzZXMvdGV4dC5odG1sJywgJ2ZhaWx1cmVzL2V4cGVjdGVk
L3RpbWVvdXQuaHRtbCcsICdmYWlsdXJlcy9leHBlY3RlZC9jcmFzaC5odG1sJ10KLSAgICAgICAg
ZXhwZWN0YXRpb25zID0gJycKLQotICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0
X3ByaW50ZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkKLSAgICAgICAgdXIgPSBnZXRfdW5leHBl
Y3RlZF9yZXN1bHRzKGV4cGVjdGVkPUZhbHNlLCBwYXNzaW5nPUZhbHNlLCBmbGFreT1GYWxzZSkK
LSAgICAgICAgcHJpbnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModXIpCi0gICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5l
bXB0eSgpKQotCi0gICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihb
Jy0tcHJpbnQnLCAndW5leHBlY3RlZC1yZXN1bHRzJ10pCi0KLSAgICAgICAgIyB0ZXN0IGV2ZXJ5
dGhpbmcgcnVubmluZyBhcyBleHBlY3RlZAotICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jl
c3VsdHMoZXhwZWN0ZWQ9VHJ1ZSwgcGFzc2luZz1GYWxzZSwgZmxha3k9RmFsc2UpCi0gICAgICAg
IHByaW50ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVyKQotICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoZXJyLmVtcHR5KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkK
LQotICAgICAgICAjIHRlc3QgZmFpbHVyZXMKLSAgICAgICAgZXJyLnJlc2V0KCkKLSAgICAgICAg
b3V0LnJlc2V0KCkKLSAgICAgICAgdXIgPSBnZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVk
PUZhbHNlLCBwYXNzaW5nPUZhbHNlLCBmbGFreT1GYWxzZSkKLSAgICAgICAgcHJpbnRlci5wcmlu
dF91bmV4cGVjdGVkX3Jlc3VsdHModXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1w
dHkoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXQuZW1wdHkoKSkKLQotICAgICAgICAj
IHRlc3QgdW5leHBlY3RlZCBmbGFreQotICAgICAgICBlcnIucmVzZXQoKQotICAgICAgICBvdXQu
cmVzZXQoKQotICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQ9RmFs
c2UsIHBhc3Npbmc9RmFsc2UsIGZsYWt5PVRydWUpCi0gICAgICAgIHByaW50ZXIucHJpbnRfdW5l
eHBlY3RlZF9yZXN1bHRzKHVyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3V0LmVtcHR5KCkpCi0KLSAgICAgICAgZXJyLnJl
c2V0KCkKLSAgICAgICAgb3V0LnJlc2V0KCkKLSAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBz
ZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCi0gICAgICAgIHVyID0g
Z2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZD1GYWxzZSwgcGFzc2luZz1GYWxzZSwgZmxh
a3k9RmFsc2UpCi0gICAgICAgIHByaW50ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVyKQot
ICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2Uob3V0LmVtcHR5KCkpCi0KLSAgICAgICAgZXhwZWN0YXRpb25zID0gIiIiCi1CVUdYIDog
ZmFpbHVyZXMvZXhwZWN0ZWQvY3Jhc2guaHRtbCA9IENSQVNICi1CVUdYIDogZmFpbHVyZXMvZXhw
ZWN0ZWQvdGltZW91dC5odG1sID0gVElNRU9VVAotIiIiCi0gICAgICAgIGVyci5yZXNldCgpCi0g
ICAgICAgIG91dC5yZXNldCgpCi0gICAgICAgIHVyID0gZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhl
eHBlY3RlZD1GYWxzZSwgcGFzc2luZz1GYWxzZSwgZmxha3k9RmFsc2UpCi0gICAgICAgIHByaW50
ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUo
ZXJyLmVtcHR5KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3V0LmVtcHR5KCkpCi0KLSAg
ICAgICAgZXJyLnJlc2V0KCkKLSAgICAgICAgb3V0LnJlc2V0KCkKLSAgICAgICAgdXIgPSBnZXRf
dW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVkPUZhbHNlLCBwYXNzaW5nPVRydWUsIGZsYWt5PUZh
bHNlKQotICAgICAgICBwcmludGVyLnByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1cikKLSAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KG91dC5lbXB0eSgpKQotCi0gICAgICAgICMgVGVzdCBoYW5kbGluZyBvZiAtLXZlcmJvc2UgYXMg
d2VsbC4KLSAgICAgICAgZXJyLnJlc2V0KCkKLSAgICAgICAgb3V0LnJlc2V0KCkKLSAgICAgICAg
cHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS12ZXJib3NlJ10pCi0gICAg
ICAgIHVyID0gZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZD1GYWxzZSwgcGFzc2luZz1G
YWxzZSwgZmxha3k9RmFsc2UpCi0gICAgICAgIHByaW50ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1
bHRzKHVyKQotICAgICAgICAjIEZJWE1FOiBkZWJ1ZyBvdXRwdXQgZnJvbSB0aGUgcG9ydCBhbmQg
c2NtIG9iamVjdHMgbWF5IG9yIG1heSBub3QgZ28KLSAgICAgICAgIyB0byBzdGRlcnIsIHNvIHRo
ZXJlJ3Mgbm8gcG9pbnQgaW4gdGVzdGluZyBpdHMgY29udGVudHMgaGVyZS4KLSAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShvdXQuZW1wdHkoKSkKLQotICAgIGRlZiB0ZXN0X3ByaW50X3VuZXhwZWN0
ZWRfcmVzdWx0c19idWlsZGJvdChzZWxmKToKLSAgICAgICAgIyBGSVhNRTogVGVzdCB0aGF0IHBy
aW50X3VuZXhwZWN0ZWRfcmVzdWx0cygpIHByb2R1Y2VzIHRoZSBwcmludGVyIHRoZQotICAgICAg
ICAjIGJ1aWxkYm90IGlzIGV4cGVjdGluZy4KLSAgICAgICAgcGFzcwotCi1pZiBfX25hbWVfXyA9
PSAnX19tYWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4oKQpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvdmlld3MvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdmlld3MvX19pbml0X18ucHkJKHJldmlz
aW9uIDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy92aWV3cy9fX2lu
aXRfXy5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9u
IHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy92aWV3cy9tZXRlcmVkX3N0cmVhbS5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy92aWV3cy9tZXRl
cmVkX3N0cmVhbS5weQkocmV2aXNpb24gOTA1MjApCShmcm9tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5OjkwNTIwKQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdmlld3MvbWV0ZXJlZF9zdHJl
YW0ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0
aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiCitQYWNrYWdlIHRoYXQgaW1wbGVtZW50cyBhIHN0
cmVhbSB3cmFwcGVyIHRoYXQgaGFzICdtZXRlcnMnIGFzIHdlbGwgYXMKK3JlZ3VsYXIgb3V0cHV0
LiBBICdtZXRlcicgaXMgYSBzaW5nbGUgbGluZSBvZiB0ZXh0IHRoYXQgY2FuIGJlIGVyYXNlZAor
YW5kIHJld3JpdHRlbiByZXBlYXRlZGx5LCB3aXRob3V0IHByb2R1Y2luZyBtdWx0aXBsZSBsaW5l
cyBvZiBvdXRwdXQuIEl0CitjYW4gYmUgdXNlZCB0byBwcm9kdWNlIGVmZmVjdHMgbGlrZSBwcm9n
cmVzcyBiYXJzLgorCitUaGlzIHBhY2thZ2Ugc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBw
cmludGluZyBtb2R1bGUgaW4gdGhlIGxheW91dF90ZXN0cworcGFja2FnZS4KKyIiIgorCitjbGFz
cyBNZXRlcmVkU3RyZWFtOgorICAgICIiIlRoaXMgY2xhc3MgaXMgYSB3cmFwcGVyIGFyb3VuZCBh
IHN0cmVhbSB0aGF0IGFsbG93cyB5b3UgdG8gaW1wbGVtZW50CisgICAgbWV0ZXJzIChwcm9ncmVz
cyBiYXJzLCBldGMuKS4KKworICAgIEl0IGNhbiBiZSB1c2VkIGRpcmVjdGx5IGFzIGEgc3RyZWFt
LCBieSBjYWxsaW5nIHdyaXRlKCksIGJ1dCBhbHNvIHByb3ZpZGVzCisgICAgYSBtZXRob2QgY2Fs
bGVkIHVwZGF0ZSgpIHRoYXQgd2lsbCBvdmVyd2l0ZSBwcmlvciB1cGRhdGVzKCkuCisgICAiIiIK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0pOgorICAgICAgICAiIiIKKyAgICAgICAg
QXJnczoKKyAgICAgICAgICBzdHJlYW06IG91dHB1dCBzdHJlYW0gdG8gd3JpdGUgdG8KKyAgICAg
ICAgIiIiCisgICAgICAgIHNlbGYuX3N0cmVhbSA9IHN0cmVhbQorICAgICAgICBzZWxmLl9kaXJ0
eSA9IEZhbHNlCisgICAgICAgIHNlbGYuX2xhc3RfdXBkYXRlID0gIiIKKworICAgIGRlZiB3cml0
ZShzZWxmLCB0eHQpOgorICAgICAgICAiIiJXcml0ZSB0byB0aGUgc3RyZWFtLCBvdmVyd3JpdGlu
ZyBhbmQgcmVzZXR0aW5nIHRoZSBtZXRlci4iIiIKKworICAgICAgICAjIFRoaXMgcm91dGluZSBp
cyBjYWxsZWQgYnkgdGhlIGxvZ2dpbmcgaW5mcmFzdHJ1Y3R1cmUsIGFuZAorICAgICAgICAjIG11
c3Qgbm90IGNhbGwgYmFjayBpbnRvIGxvZ2dpbmcuIEl0IGlzIG5vdCBhIHB1YmxpYyBmdW5jdGlv
bi4KKyAgICAgICAgc2VsZi5fb3ZlcndyaXRlKHR4dCkKKyAgICAgICAgc2VsZi5fcmVzZXQoKQor
CisgICAgZGVmIHVwZGF0ZShzZWxmLCB0eHQpOgorICAgICAgICAiIiJXcml0ZSBhIG1lc3NhZ2Ug
dGhhdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHN1YnNlcXVlbnQgdXBkYXRlKCkgb3Igd3JpdGUo
KSBjYWxscy4iIiIKKyAgICAgICAgc2VsZi5fb3ZlcndyaXRlKHR4dCkKKworICAgIGRlZiBmbHVz
aChzZWxmKToKKyAgICAgICAgIyBUaGlzIHNlZW1zIHRvIGJlIG5lZWRlZCBvbiBQeXRob24gMi41
IGZvciBzb21lIHJlYXNvbi4KKyAgICAgICAgc2VsZi5fc3RyZWFtLmZsdXNoKCkKKworICAgIGRl
ZiBfb3ZlcndyaXRlKHNlbGYsIHR4dCk6CisgICAgICAgICMgUHJpbnQgdGhlIG5lY2Vzc2FyeSBu
dW1iZXIgb2YgYmFja3NwYWNlcyB0byBlcmFzZSB0aGUgcHJldmlvdXMKKyAgICAgICAgIyBtZXNz
YWdlLgorICAgICAgICBpZiBsZW4oc2VsZi5fbGFzdF91cGRhdGUpOgorICAgICAgICAgICAgc2Vs
Zi5fc3RyZWFtLndyaXRlKCJcYiIgKiBsZW4oc2VsZi5fbGFzdF91cGRhdGUpICsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiICIgKiBsZW4oc2VsZi5fbGFzdF91cGRhdGUpICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXGIiICogbGVuKHNlbGYuX2xhc3RfdXBkYXRl
KSkKKyAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKHR4dCkKKyAgICAgICAgbGFzdF9uZXdsaW5l
ID0gdHh0LnJmaW5kKCJcbiIpCisgICAgICAgIHNlbGYuX2xhc3RfdXBkYXRlID0gdHh0WyhsYXN0
X25ld2xpbmUgKyAxKTpdCisgICAgICAgIHNlbGYuX2RpcnR5ID0gVHJ1ZQorCisgICAgZGVmIF9y
ZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5fZGlydHkgPSBGYWxzZQorICAgICAgICBzZWxmLl9s
YXN0X3VwZGF0ZSA9ICcnCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy92aWV3cy9tZXRlcmVkX3N0cmVhbS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy92aWV3cy9tZXRlcmVkX3N0cmVhbS5weQkocmV2aXNpb24gMCkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3ZpZXdzL21ldGVyZWRfc3Ry
ZWFtLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIFRoaXMgcGFja2FnZSBzaG91
bGQgb25seSBiZSBjYWxsZWQgYnkgdGgKIHBhY2thZ2UuCiAiIiIKIAorCiBjbGFzcyBNZXRlcmVk
U3RyZWFtOgogICAgICIiIlRoaXMgY2xhc3MgaXMgYSB3cmFwcGVyIGFyb3VuZCBhIHN0cmVhbSB0
aGF0IGFsbG93cyB5b3UgdG8gaW1wbGVtZW50CiAgICAgbWV0ZXJzIChwcm9ncmVzcyBiYXJzLCBl
dGMuKS4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3ZpZXdzL21l
dGVyZWRfc3RyZWFtX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3ZpZXdzL21ldGVyZWRfc3RyZWFtX3VuaXR0ZXN0LnB5CShyZXZp
c2lvbiA5MDUyMCkJKGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvbWV0ZXJlZF9zdHJlYW1fdW5pdHRlc3QucHk6OTA1MjApCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy92aWV3cy9tZXRlcmVkX3N0cmVhbV91bml0dGVz
dC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgzIEBACisjIS91c3IvYmluL3B5dGhvbgor
IyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKyIiIlVuaXQgdGVzdHMgZm9yIG1ldGVyZWRfc3RyZWFtLnB5LiIi
IgorCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5jb21tb24uYXJyYXlfc3RyZWFt
IGltcG9ydCBBcnJheVN0cmVhbQorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IG1ldGVyZWRfc3RyZWFtCisKKworY2xhc3MgVGVzdE1ldGVyZWRTdHJlYW0o
dW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3JlZ3VsYXIoc2VsZik6CisgICAgICAg
IGEgPSBBcnJheVN0cmVhbSgpCisgICAgICAgIG0gPSBtZXRlcmVkX3N0cmVhbS5NZXRlcmVkU3Ry
ZWFtKHN0cmVhbT1hKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYS5lbXB0eSgpKQorCisgICAg
ICAgICMgYmFzaWMgdGVzdAorICAgICAgICBtLndyaXRlKCJmb28iKQorICAgICAgICBleHAgPSBb
J2ZvbyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGEuZ2V0KCksIGV4cCkKKworICAgICAg
ICAjIG5vdyBjaGVjayB0aGF0IGEgc2Vjb25kIHdyaXRlKCkgZG9lcyBub3Qgb3ZlcndyaXRlIHRo
ZSBmaXJzdC4KKyAgICAgICAgbS53cml0ZSgiYmFyIikKKyAgICAgICAgZXhwLmFwcGVuZCgnYmFy
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYS5nZXQoKSwgZXhwKQorCisgICAgICAgIG0u
dXBkYXRlKCJiYXR0ZXIiKQorICAgICAgICBleHAuYXBwZW5kKCdiYXR0ZXInKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhhLmdldCgpLCBleHApCisKKyAgICAgICAgIyBUaGUgbmV4dCB1cGRh
dGUoKSBzaG91bGQgb3ZlcndyaXRlIHRoZSBsYXN0ZSB1cGRhdGUoKSBidXQgbm90IHRoZQorICAg
ICAgICAjIG90aGVyIHRleHQuIE5vdGUgdGhhdCB0aGUgY3Vyc29yIGlzIGVmZmVjdGl2ZWx5IHBv
c2l0aW9uZWQgYXQgdGhlCisgICAgICAgICMgZW5kIG9mICdmb28nLCBldmVuIHRob3VnaCB3ZSBo
YWQgdG8gZXJhc2UgdGhyZWUgbW9yZSBjaGFyYWN0ZXJzLgorICAgICAgICBtLnVwZGF0ZSgiZm9v
IikKKyAgICAgICAgZXhwLmFwcGVuZCgnXGJcYlxiXGJcYlxiICAgICAgXGJcYlxiXGJcYlxiJykK
KyAgICAgICAgZXhwLmFwcGVuZCgnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYS5n
ZXQoKSwgZXhwKQorCisgICAgICAgICMgbm93IGNoZWNrIHRoYXQgYSB3cml0ZSgpIGRvZXMgb3Zl
cndyaXRlIHRoZSB1cGRhdGUKKyAgICAgICAgbS53cml0ZSgiZm9vIikKKyAgICAgICAgZXhwLmFw
cGVuZCgnXGJcYlxiICAgXGJcYlxiJykKKyAgICAgICAgZXhwLmFwcGVuZCgnZm9vJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMoYS5nZXQoKSwgZXhwKQorCisgICAgICAgICMgTm93IHRlc3Qg
dGhhdCB3ZSBvbmx5IGJhY2sgdXAgdG8gdGhlIG1vc3QgcmVjZW50IG5ld2xpbmUuCisKKyAgICAg
ICAgIyBOb3RlIGFsc28gdGhhdCB3ZSBkbyBub3QgYmFjayB1cCB0byBlcmFzZSB0aGUgbW9zdCBy
ZWNlbnQgd3JpdGUoKSwKKyAgICAgICAgIyBpLmUuLCB3cml0ZSgpcyBkbyBub3QgZ2V0IGVyYXNl
ZC4KKyAgICAgICAgYS5yZXNldCgpCisgICAgICAgIG0udXBkYXRlKCJmb29cbmJhciIpCisgICAg
ICAgIG0udXBkYXRlKCJiYXoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhLmdldCgpLCBb
J2Zvb1xuYmFyJywgJ1xiXGJcYiAgIFxiXGJcYicsICdiYXonXSkKKworCitpZiBfX25hbWVfXyA9
PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvdmlld3MvbWV0ZXJlZF9zdHJlYW1fdW5pdHRlc3QucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdmlld3MvbWV0
ZXJlZF9zdHJlYW1fdW5pdHRlc3QucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy92aWV3cy9tZXRlcmVkX3N0cmVhbV91bml0dGVzdC5weQkod29y
a2luZyBjb3B5KQpAQCAtMjcsMTggKzI3LDE2IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogCi0iIiJVbml0IHRlc3RzIGZvciBtZXRlcmVkX3N0cmVhbS5weS4iIiIKLQogaW1wb3J0
IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLmFycmF5X3N0cmVhbSBpbXBvcnQgQXJy
YXlTdHJlYW0KLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9y
dCBtZXRlcmVkX3N0cmVhbQorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudmlld3MubWV0ZXJl
ZF9zdHJlYW0gaW1wb3J0IE1ldGVyZWRTdHJlYW0KIAogCiBjbGFzcyBUZXN0TWV0ZXJlZFN0cmVh
bSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmVndWxhcihzZWxmKToKICAgICAg
ICAgYSA9IEFycmF5U3RyZWFtKCkKLSAgICAgICAgbSA9IG1ldGVyZWRfc3RyZWFtLk1ldGVyZWRT
dHJlYW0oc3RyZWFtPWEpCisgICAgICAgIG0gPSBNZXRlcmVkU3RyZWFtKHN0cmVhbT1hKQogICAg
ICAgICBzZWxmLmFzc2VydFRydWUoYS5lbXB0eSgpKQogCiAgICAgICAgICMgYmFzaWMgdGVzdApJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdmlld3MvcHJpbnRpbmcu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdmll
d3MvcHJpbnRpbmcucHkJKHJldmlzaW9uIDkwNTIwKQkoZnJvbSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZy5weTo5MDUyMCkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3ZpZXdzL3ByaW50aW5nLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDc1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisiIiJQYWNrYWdlIHRoYXQgaGFuZGxlcyBub24tZGVidWcsIG5vbi1maWxl
IG91dHB1dCBmb3IgcnVuLXdlYmtpdC10ZXN0cy4iIiIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9y
dCBvcHRwYXJzZQoraW1wb3J0IHRpbWUKKworZnJvbSB3ZWJraXRweS5jb21tb24ubmV0IGltcG9y
dCByZXN1bHRzanNvbnBhcnNlcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IG1ldGVyZWRfc3RyZWFtCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5s
YXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKKworIyBGSVhNRTogQ2hhbmdl
IHRoaXMgdG8gX19maWxlX18gd2hlbiB3ZSBjYW4gZml4IHRlc3Qtd2Via2l0cHkncyBsb2dnaW5n
IGNvbmZpZ3VyYXRpb24uCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91
dF90ZXN0cy5wcmludGVyIikKKworVGVzdEV4cGVjdGF0aW9ucyA9IHRlc3RfZXhwZWN0YXRpb25z
LlRlc3RFeHBlY3RhdGlvbnMKKworTlVNX1NMT1dfVEVTVFNfVE9fTE9HID0gMTAKK0ZBU1RfVVBE
QVRFU19TRUNPTkRTID0gMC4wMworU0xPV19VUERBVEVTX1NFQ09ORFMgPSAxMC4wCisKK1BSSU5U
X0RFRkFVTFQgPSAoIm1pc2Msb25lLWxpbmUtcHJvZ3Jlc3Msb25lLWxpbmUtc3VtbWFyeSx1bmV4
cGVjdGVkLCIKKyAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQtcmVzdWx0cyx1cGRhdGVzIikK
K1BSSU5UX0VWRVJZVEhJTkcgPSAoImFjdHVhbCxjb25maWcsZXhwZWN0ZWQsbWlzYyxvbmUtbGlu
ZS1wcm9ncmVzcywiCisgICAgICAgICAgICAgICAgICAgICJvbmUtbGluZS1zdW1tYXJ5LHNsb3dl
c3QsdGltaW5nLHVuZXhwZWN0ZWQsIgorICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZC1y
ZXN1bHRzLHVwZGF0ZXMiKQorCitIRUxQX1BSSU5USU5HID0gIiIiCitPdXRwdXQgZm9yIHJ1bi13
ZWJraXQtdGVzdHMgaXMgY29udHJvbGxlZCBieSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mCit2
YWx1ZXMgcGFzc2VkIHRvIC0tcHJpbnQuICBWYWx1ZXMgZWl0aGVyIGluZmx1ZW5jZSB0aGUgb3Zl
cmFsbCBvdXRwdXQsIG9yCit0aGUgb3V0cHV0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJ1biwg
ZHVyaW5nIHRoZSBydW4sIG9yIGF0IHRoZSBlbmQ6CisKK092ZXJhbGwgb3B0aW9uczoKKyAgICBu
b3RoaW5nICAgICAgICAgICAgIGRvbid0IHByaW50IGFueXRoaW5nLiBUaGlzIG92ZXJyaWRlcyBl
dmVyeSBvdGhlciBvcHRpb24KKyAgICBkZWZhdWx0ICAgICAgICAgICAgIGluY2x1ZGUgdGhlIGRl
ZmF1bHQgb3B0aW9ucy4gVGhpcyBpcyB1c2VmdWwgZm9yIGxvZ2dpbmcKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRoZSBkZWZhdWx0IG9wdGlvbnMgcGx1cyBhZGRpdGlvbmFsIHNldHRpbmdzLgor
ICAgIGV2ZXJ5dGhpbmcgICAgICAgICAgcHJpbnQgKGFsbW9zdCkgZXZlcnl0aGluZyAoZXhjZXB0
IHRoZSB0cmFjZS0qIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgYmVsb3cg
Zm9yIHRoZSBmdWxsIGxpc3QgKQorICAgIG1pc2MgICAgICAgICAgICAgICAgcHJpbnQgbWlzY2Vs
bGFuZW91cyB0aGluZ3MgbGlrZSBibGFuayBsaW5lcworCitBdCB0aGUgYmVnaW5uaW5nIG9mIHRo
ZSBydW46CisgICAgY29uZmlnICAgICAgICAgICAgICBwcmludCB0aGUgdGVzdCBydW4gY29uZmln
dXJhdGlvbgorICAgIGV4cGVjdGVkICAgICAgICAgICAgcHJpbnQgYSBzdW1tYXJ5IG9mIHdoYXQg
aXMgZXhwZWN0ZWQgdG8gaGFwcGVuCisgICAgICAgICAgICAgICAgICAgICAgICAoIyBwYXNzZXMs
ICMgZmFpbHVyZXMsIGV0Yy4pCisKK0R1cmluZyB0aGUgcnVuOgorICAgIG9uZS1saW5lLXByb2dy
ZXNzICAgcHJpbnQgYSBvbmUtbGluZSBwcm9ncmVzcyBtZXNzYWdlIG9yIGJhcgorICAgIHVuZXhw
ZWN0ZWQgICAgICAgICAgcHJpbnQgYW55IHVuZXhwZWN0ZWQgcmVzdWx0cyBhcyB0aGV5IG9jY3Vy
CisgICAgdXBkYXRlcyAgICAgICAgICAgICBwcmludCB1cGRhdGVzIG9uIHdoaWNoIHN0YWdlIGlz
IGV4ZWN1dGluZworICAgIHRyYWNlLWV2ZXJ5dGhpbmcgICAgcHJpbnQgZGV0YWlsZWQgaW5mbyBv
biBldmVyeSB0ZXN0J3MgcmVzdWx0cworICAgICAgICAgICAgICAgICAgICAgICAgKGJhc2VsaW5l
cywgZXhwZWN0YXRpb24sIHRpbWUgaXQgdG9vayB0byBydW4pLiBJZgorICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcyBpcyBzcGVjaWZpZWQgaXQgd2lsbCBvdmVycmlkZSB0aGUgJyotcHJvZ3Jl
c3MnCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLCB0aGUgJ3RyYWNlLXVuZXhwZWN0
ZWQnIG9wdGlvbiwgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZXhwZWN0ZWQn
IG9wdGlvbi4KKyAgICB0cmFjZS11bmV4cGVjdGVkICAgIGxpa2UgJ3RyYWNlLWV2ZXJ5dGhpbmcn
LCBidXQgb25seSBmb3IgdGVzdHMgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgdW5leHBl
Y3RlZCByZXN1bHRzLiBJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICBpdCB3aWxsIG92ZXJyaWRlIHRoZSAndW5leHBlY3RlZCcgb3B0aW9uLgorCitB
dCB0aGUgZW5kIG9mIHRoZSBydW46CisgICAgYWN0dWFsICAgICAgICAgICAgICBwcmludCBhIHN1
bW1hcnkgb2YgdGhlIGFjdHVhbCByZXN1bHRzCisgICAgc2xvd2VzdCAgICAgICAgICAgICBwcmlu
dCAlKHNsb3dlc3QpZCBzbG93ZXN0IHRlc3RzIGFuZCB0aGUgdGltZSB0aGV5IHRvb2sKKyAgICB0
aW1pbmcgICAgICAgICAgICAgIHByaW50IHRpbWluZyBzdGF0aXN0aWNzCisgICAgdW5leHBlY3Rl
ZC1yZXN1bHRzICBwcmludCBhIGxpc3Qgb2YgdGhlIHRlc3RzIHdpdGggdW5leHBlY3RlZCByZXN1
bHRzCisgICAgb25lLWxpbmUtc3VtbWFyeSAgICBwcmludCBhIG9uZS1saW5lIHN1bW1hcnkgb2Yg
dGhlIHJ1bgorCitOb3RlczoKKyAgICAtIElmICdub3RoaW5nJyBpcyBzcGVjaWZpZWQsIGl0IG92
ZXJyaWRlcyBhbGwgb2YgdGhlIG90aGVyIG9wdGlvbnMuCisgICAgLSBTcGVjaWZ5aW5nIC0tdmVy
Ym9zZSBpcyBlcXVpdmFsZW50IHRvIC0tcHJpbnQgZXZlcnl0aGluZyBwbHVzIGl0CisgICAgICBj
aGFuZ2VzIHRoZSBmb3JtYXQgb2YgdGhlIGxvZyBtZXNzYWdlcyB0byBhZGQgdGltZXN0YW1wcyBh
bmQgb3RoZXIKKyAgICAgIGluZm9ybWF0aW9uLiBJZiB5b3Ugc3BlY2lmeSAtLXZlcmJvc2UgYW5k
IC0tcHJpbnQgWCwgdGhlbiBYIG92ZXJyaWRlcworICAgICAgdGhlIC0tcHJpbnQgZXZlcnl0aGlu
ZyBpbXBsaWVkIGJ5IC0tdmVyYm9zZS4KKworLS1wcmludCAnZXZlcnl0aGluZycgaXMgZXF1aXZh
bGVudCB0byAtLXByaW50ICclKGV2ZXJ5dGhpbmcpcycuCisKK1RoZSBkZWZhdWx0ICgtLXByaW50
IGRlZmF1bHQpIGlzIGVxdWl2YWxlbnQgdG8gLS1wcmludCAnJShkZWZhdWx0KXMnLgorIiIiICUg
eydzbG93ZXN0JzogTlVNX1NMT1dfVEVTVFNfVE9fTE9HLCAnZXZlcnl0aGluZyc6IFBSSU5UX0VW
RVJZVEhJTkcsCisgICAgICAgJ2RlZmF1bHQnOiBQUklOVF9ERUZBVUxUfQorCisKK2RlZiBwcmlu
dF9vcHRpb25zKCk6CisgICAgcmV0dXJuIFsKKyAgICAgICAgIyBOb3RlOiBXZSB1c2UgcHJpbnRf
b3B0aW9ucyByYXRoZXIgdGhhbiBqdXN0ICdwcmludCcgYmVjYXVzZSBwcmludAorICAgICAgICAj
IGlzIGEgcmVzZXJ2ZWQgd29yZC4KKyAgICAgICAgIyBOb3RlOiBBbHNvLCB3ZSBkb24ndCBzcGVj
aWZ5IGEgZGVmYXVsdCB2YWx1ZSBzbyB3ZSBjYW4gZGV0ZWN0IHdoZW4KKyAgICAgICAgIyBubyBm
bGFnIGlzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIGFuZCB1c2UgZGlmZmVyZW50IGRl
ZmF1bHRzCisgICAgICAgICMgYmFzZWQgb24gd2hldGhlciBvciBub3QgLS12ZXJib3NlIGlzIHNw
ZWNpZmllZCAoc2luY2UgLS1wcmludAorICAgICAgICAjIG92ZXJyaWRlcyAtLXZlcmJvc2UpLgor
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1wcmludCIsIGRlc3Q9InByaW50X29wdGlv
bnMiLAorICAgICAgICAgICAgaGVscD0oImNvbnRyb2xzIHByaW50IG91dHB1dCBvZiB0ZXN0IHJ1
bi4gIgorICAgICAgICAgICAgICAgICAgIlVzZSAtLWhlbHAtcHJpbnRpbmcgZm9yIG1vcmUuIikp
LAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1oZWxwLXByaW50aW5nIiwgYWN0aW9u
PSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgIGhlbHA9InNob3cgZGV0YWlsZWQgaGVscCBvbiBj
b250cm9sbGluZyBwcmludCBvdXRwdXQiKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24o
Ii12IiwgIi0tdmVyYm9zZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICBkZWZh
dWx0PUZhbHNlLCBoZWxwPSJpbmNsdWRlIGRlYnVnLWxldmVsIGxvZ2dpbmciKSwKKyAgIF0KKwor
CitkZWYgcGFyc2VfcHJpbnRfb3B0aW9ucyhwcmludF9vcHRpb25zLCB2ZXJib3NlKToKKyAgICAi
IiJQYXJzZSB0aGUgb3B0aW9ucyBwcm92aWRlZCB0byAtLXByaW50IGFuZCBkZWR1cCBhbmQgcmFu
ayB0aGVtLgorCisgICAgUmV0dXJucworICAgICAgICBhIHNldCgpIG9mIHN3aXRjaGVzIHRoYXQg
Z292ZXJuIGhvdyBsb2dnaW5nIGlzIGRvbmUKKworICAgICIiIgorICAgIGlmIHByaW50X29wdGlv
bnM6CisgICAgICAgIHN3aXRjaGVzID0gc2V0KHByaW50X29wdGlvbnMuc3BsaXQoJywnKSkKKyAg
ICBlbGlmIHZlcmJvc2U6CisgICAgICAgIHN3aXRjaGVzID0gc2V0KFBSSU5UX0VWRVJZVEhJTkcu
c3BsaXQoJywnKSkKKyAgICBlbHNlOgorICAgICAgICBzd2l0Y2hlcyA9IHNldChQUklOVF9ERUZB
VUxULnNwbGl0KCcsJykpCisKKyAgICBpZiAnbm90aGluZycgaW4gc3dpdGNoZXM6CisgICAgICAg
IHJldHVybiBzZXQoKQorCisgICAgaWYgJ2V2ZXJ5dGhpbmcnIGluIHN3aXRjaGVzOgorICAgICAg
ICBzd2l0Y2hlcy5kaXNjYXJkKCdldmVyeXRoaW5nJykKKyAgICAgICAgc3dpdGNoZXMudXBkYXRl
KHNldChQUklOVF9FVkVSWVRISU5HLnNwbGl0KCcsJykpKQorCisgICAgaWYgJ2RlZmF1bHQnIGlu
IHN3aXRjaGVzOgorICAgICAgICBzd2l0Y2hlcy5kaXNjYXJkKCdkZWZhdWx0JykKKyAgICAgICAg
c3dpdGNoZXMudXBkYXRlKHNldChQUklOVF9ERUZBVUxULnNwbGl0KCcsJykpKQorCisgICAgaWYg
J3RyYWNlLWV2ZXJ5dGhpbmcnIGluIHN3aXRjaGVzOgorICAgICAgICBzd2l0Y2hlcy5kaXNjYXJk
KCdvbmUtbGluZS1wcm9ncmVzcycpCisgICAgICAgIHN3aXRjaGVzLmRpc2NhcmQoJ3RyYWNlLXVu
ZXhwZWN0ZWQnKQorICAgICAgICBzd2l0Y2hlcy5kaXNjYXJkKCd1bmV4cGVjdGVkJykKKworICAg
IGlmICd0cmFjZS11bmV4cGVjdGVkJyBpbiBzd2l0Y2hlczoKKyAgICAgICAgc3dpdGNoZXMuZGlz
Y2FyZCgndW5leHBlY3RlZCcpCisKKyAgICByZXR1cm4gc3dpdGNoZXMKKworCitkZWYgX2NvbmZp
Z3VyZV9sb2dnaW5nKHN0cmVhbSwgdmVyYm9zZSk6CisgICAgbG9nX2ZtdCA9ICclKG1lc3NhZ2Up
cycKKyAgICBsb2dfZGF0ZWZtdCA9ICcleSVtJWQgJUg6JU06JVMnCisgICAgbG9nX2xldmVsID0g
bG9nZ2luZy5JTkZPCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgbG9nX2ZtdCA9ICgnJShhc2N0
aW1lKXMgJShwcm9jZXNzKWQgJShmaWxlbmFtZSlzOiUobGluZW5vKWQgJworICAgICAgICAgICAg
ICAgICAgICclKGxldmVsbmFtZSlzICUobWVzc2FnZSlzJykKKyAgICAgICAgbG9nX2xldmVsID0g
bG9nZ2luZy5ERUJVRworCisgICAgcm9vdCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICBoYW5k
bGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN0cmVhbSkKKyAgICBoYW5kbGVyLnNldEZvcm1h
dHRlcihsb2dnaW5nLkZvcm1hdHRlcihsb2dfZm10LCBOb25lKSkKKyAgICByb290LmFkZEhhbmRs
ZXIoaGFuZGxlcikKKyAgICByb290LnNldExldmVsKGxvZ19sZXZlbCkKKyAgICByZXR1cm4gaGFu
ZGxlcgorCisKK2RlZiBfcmVzdG9yZV9sb2dnaW5nKGhhbmRsZXJfdG9fcmVtb3ZlKToKKyAgICBy
b290ID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgIHJvb3QuaGFuZGxlcnMucmVtb3ZlKGhhbmRs
ZXJfdG9fcmVtb3ZlKQorCisKK2NsYXNzIFByaW50ZXIob2JqZWN0KToKKyAgICAiIiJDbGFzcyBo
YW5kbGluZyBhbGwgbm9uLWRlYnVnLWxvZ2dpbmcgcHJpbnRpbmcgZG9uZSBieSBydW4td2Via2l0
LXRlc3RzLgorCisgICAgUHJpbnRpbmcgZnJvbSBydW4td2Via2l0LXRlc3RzIGZhbGxzIGludG8g
dHdvIGJ1Y2tldHM6IGdlbmVyYWwgb3IKKyAgICByZWd1bGFyIG91dHB1dCB0aGF0IGlzIHJlYWQg
b25seSBieSBodW1hbnMgYW5kIGNhbiBiZSBjaGFuZ2VkIGF0IGFueQorICAgIHRpbWUsIGFuZCBv
dXRwdXQgdGhhdCBpcyBwYXJzZWQgYnkgYnVpbGRib3RzIChhbmQgaHVtYW5zKSBhbmQgaGVuY2UK
KyAgICBtdXN0IGJlIGNoYW5nZWQgbW9yZSBjYXJlZnVsbHkgYW5kIGluIGNvb3JkaW5hdGlvbiB3
aXRoIHRoZSBidWlsZGJvdAorICAgIHBhcnNpbmcgY29kZSAoaW4gY2hyb21pdW0ub3JnJ3MgYnVp
bGRib3QvbWFzdGVyLmNocm9taXVtL3NjcmlwdHMvbWFzdGVyLworICAgIGxvZ19wYXJzZXIvd2Vi
a2l0X3Rlc3RfY29tbWFuZC5weSBzY3JpcHQpLgorCisgICAgQnkgZGVmYXVsdCB0aGUgYnVpbGRi
b3QtcGFyc2VkIGNvZGUgZ2V0cyBsb2dnZWQgdG8gc3Rkb3V0LCBhbmQgcmVndWxhcgorICAgIG91
dHB1dCBnZXRzIGxvZ2dlZCB0byBzdGRlcnIuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBv
cnQsIG9wdGlvbnMsIHJlZ3VsYXJfb3V0cHV0LCBidWlsZGJvdF9vdXRwdXQsCisgICAgICAgICAg
ICAgICAgIGNvbmZpZ3VyZV9sb2dnaW5nKToKKyAgICAgICAgIiIiCisgICAgICAgIEFyZ3MKKyAg
ICAgICAgICBwb3J0ICAgICAgICAgICAgICAgaW50ZXJmYWNlIHRvIHBvcnQtc3BlY2lmaWMgcm91
dGluZXMKKyAgICAgICAgICBvcHRpb25zICAgICAgICAgICAgT3B0aW9uUGFyc2VyIG9iamVjdCB3
aXRoIGNvbW1hbmQgbGluZSBzZXR0aW5ncworICAgICAgICAgIHJlZ3VsYXJfb3V0cHV0ICAgICBz
dHJlYW0gdG8gd2hpY2ggb3V0cHV0IGludGVuZGVkIG9ubHkgZm9yIGh1bWFucworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgd3JpdHRlbgorICAgICAgICAgIGJ1aWxkYm90
X291dHB1dCAgICBzdHJlYW0gdG8gd2hpY2ggb3V0cHV0IGludGVuZGVkIHRvIGJlIHJlYWQgYnkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkYm90cyAoYW5kIGh1bWFucykg
c2hvdWxkIGJlIHdyaXR0ZW4KKyAgICAgICAgICBjb25maWd1cmVfbG9nZ2lnbiAgV2hldGhlciBh
IGxvZ2dpbmcgaGFuZGxlciBzaG91bGQgYmUgcmVnaXN0ZXJlZAorCisgICAgICAgICIiIgorICAg
ICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0gPSBidWlsZGJvdF9vdXRwdXQKKyAgICAgICAgc2Vs
Zi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAg
c2VsZi5fbWV0ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3N0cmVhbSA9IHJlZ3VsYXJfb3V0cHV0
CisKKyAgICAgICAgIyBUaGVzZSBhcmUgdXNlZCBmb3IgLS1wcmludCBvbmUtbGluZS1wcm9ncmVz
cworICAgICAgICBzZWxmLl9sYXN0X3JlbWFpbmluZyA9IE5vbmUKKyAgICAgICAgc2VsZi5fbGFz
dF91cGRhdGVfdGltZSA9IE5vbmUKKworICAgICAgICBzZWxmLnN3aXRjaGVzID0gcGFyc2VfcHJp
bnRfb3B0aW9ucyhvcHRpb25zLnByaW50X29wdGlvbnMsIG9wdGlvbnMudmVyYm9zZSkKKworICAg
ICAgICBzZWxmLl9sb2dnaW5nX2hhbmRsZXIgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX3N0cmVh
bS5pc2F0dHkoKSBhbmQgbm90IG9wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgIHNlbGYuX3Vw
ZGF0ZV9pbnRlcnZhbF9zZWNvbmRzID0gRkFTVF9VUERBVEVTX1NFQ09ORFMKKyAgICAgICAgICAg
IHNlbGYuX21ldGVyID0gbWV0ZXJlZF9zdHJlYW0uTWV0ZXJlZFN0cmVhbShzZWxmLl9zdHJlYW0p
CisgICAgICAgICAgICBpZiBjb25maWd1cmVfbG9nZ2luZzoKKyAgICAgICAgICAgICAgICBzZWxm
Ll9sb2dnaW5nX2hhbmRsZXIgPSBfY29uZmlndXJlX2xvZ2dpbmcoc2VsZi5fbWV0ZXIsIG9wdGlv
bnMudmVyYm9zZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3VwZGF0ZV9pbnRl
cnZhbF9zZWNvbmRzID0gU0xPV19VUERBVEVTX1NFQ09ORFMKKyAgICAgICAgICAgIGlmIGNvbmZp
Z3VyZV9sb2dnaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2dpbmdfaGFuZGxlciA9IF9j
b25maWd1cmVfbG9nZ2luZyhzZWxmLl9zdHJlYW0sIG9wdGlvbnMudmVyYm9zZSkKKworICAgIGRl
ZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICAiIiJSZXN0b3JlIGxvZ2dpbmcgY29uZmlndXJhdGlv
biB0byBpdHMgaW5pdGlhbCBzZXR0aW5ncy4iIiIKKyAgICAgICAgaWYgc2VsZi5fbG9nZ2luZ19o
YW5kbGVyOgorICAgICAgICAgICAgX3Jlc3RvcmVfbG9nZ2luZyhzZWxmLl9sb2dnaW5nX2hhbmRs
ZXIpCisgICAgICAgICAgICBzZWxmLl9sb2dnaW5nX2hhbmRsZXIgPSBOb25lCisKKyAgICBkZWYg
X19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jbGVhbnVwKCkKKworICAgICMgVGhlc2UgdHdv
IHJvdXRpbmVzIGp1c3QgaGlkZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHN3aXRjaGVzLgor
ICAgIGRlZiBkaXNhYmxlZChzZWxmLCBvcHRpb24pOgorICAgICAgICByZXR1cm4gbm90IG9wdGlv
biBpbiBzZWxmLnN3aXRjaGVzCisKKyAgICBkZWYgZW5hYmxlZChzZWxmLCBvcHRpb24pOgorICAg
ICAgICByZXR1cm4gb3B0aW9uIGluIHNlbGYuc3dpdGNoZXMKKworICAgIGRlZiBoZWxwX3ByaW50
aW5nKHNlbGYpOgorICAgICAgICBzZWxmLl93cml0ZShIRUxQX1BSSU5USU5HKQorCisgICAgZGVm
IHByaW50X2FjdHVhbChzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxmLmRpc2FibGVkKCdhY3R1
YWwnKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0u
d3JpdGUoIiVzXG4iICUgbXNnKQorCisgICAgZGVmIHByaW50X2NvbmZpZyhzZWxmLCBtc2cpOgor
ICAgICAgICBzZWxmLndyaXRlKG1zZywgJ2NvbmZpZycpCisKKyAgICBkZWYgcHJpbnRfZXhwZWN0
ZWQoc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi53cml0ZShtc2csICdleHBlY3RlZCcpCisKKyAg
ICBkZWYgcHJpbnRfdGltaW5nKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYud3JpdGUobXNnLCAn
dGltaW5nJykKKworICAgIGRlZiBwcmludF9vbmVfbGluZV9zdW1tYXJ5KHNlbGYsIHRvdGFsLCBl
eHBlY3RlZCwgdW5leHBlY3RlZCk6CisgICAgICAgICIiIlByaW50IGEgb25lLWxpbmUgc3VtbWFy
eSBvZiB0aGUgdGVzdCBydW4gdG8gc3Rkb3V0LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
dG90YWw6IHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4KKyAgICAgICAgICBleHBlY3RlZDogbnVt
YmVyIG9mIGV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgICB1bmV4cGVjdGVkOiBudW1iZXIgb2Yg
dW5leHBlY3RlZCByZXN1bHRzCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmRpc2FibGVk
KCdvbmUtbGluZS1zdW1tYXJ5Jyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpbmNv
bXBsZXRlID0gdG90YWwgLSBleHBlY3RlZCAtIHVuZXhwZWN0ZWQKKyAgICAgICAgaWYgaW5jb21w
bGV0ZToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlKCIiKQorICAgICAgICAgICAgaW5jb21wbGV0
ZV9zdHIgPSAiICglZCBkaWRuJ3QgcnVuKSIgJSBpbmNvbXBsZXRlCisgICAgICAgICAgICBleHBl
Y3RlZF9zdHIgPSBzdHIoZXhwZWN0ZWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbmNv
bXBsZXRlX3N0ciA9ICIiCisgICAgICAgICAgICBleHBlY3RlZF9zdHIgPSAiQWxsICVkIiAlIGV4
cGVjdGVkCisKKyAgICAgICAgaWYgdW5leHBlY3RlZCA9PSAwOgorICAgICAgICAgICAgc2VsZi5f
d3JpdGUoIiVzIHRlc3RzIHJhbiBhcyBleHBlY3RlZCVzLiIgJQorICAgICAgICAgICAgICAgICAg
ICAgICAgKGV4cGVjdGVkX3N0ciwgaW5jb21wbGV0ZV9zdHIpKQorICAgICAgICBlbGlmIGV4cGVj
dGVkID09IDE6CisgICAgICAgICAgICBzZWxmLl93cml0ZSgiMSB0ZXN0IHJhbiBhcyBleHBlY3Rl
ZCwgJWQgZGlkbid0JXM6IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAodW5leHBlY3RlZCwg
aW5jb21wbGV0ZV9zdHIpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fd3JpdGUo
IiVkIHRlc3RzIHJhbiBhcyBleHBlY3RlZCwgJWQgZGlkbid0JXM6IiAlCisgICAgICAgICAgICAg
ICAgICAgICAgICAoZXhwZWN0ZWQsIHVuZXhwZWN0ZWQsIGluY29tcGxldGVfc3RyKSkKKyAgICAg
ICAgc2VsZi5fd3JpdGUoIiIpCisKKyAgICBkZWYgcHJpbnRfdGVzdF9yZXN1bHQoc2VsZiwgcmVz
dWx0LCBleHBlY3RlZCwgZXhwX3N0ciwgZ290X3N0cik6CisgICAgICAgICIiIlByaW50IHRoZSBy
ZXN1bHQgb2YgdGhlIHRlc3QgYXMgZGV0ZXJtaW5lZCBieSAtLXByaW50LgorCisgICAgICAgIFRo
aXMgcm91dGluZSBpcyB1c2VkIHRvIHByaW50IHRoZSBkZXRhaWxzIG9mIGVhY2ggdGVzdCBhcyBp
dCBjb21wbGV0ZXMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHJlc3VsdCAgIC0gVGhl
IGFjdHVhbCBUZXN0UmVzdWx0IG9iamVjdAorICAgICAgICAgICAgZXhwZWN0ZWQgLSBXaGV0aGVy
IHRoZSByZXN1bHQgd2UgZ290IHdhcyBhbiBleHBlY3RlZCByZXN1bHQKKyAgICAgICAgICAgIGV4
cF9zdHIgIC0gV2hhdCB3ZSBleHBlY3RlZCB0byBnZXQgKHVzZWQgZm9yIHRyYWNpbmcpCisgICAg
ICAgICAgICBnb3Rfc3RyICAtIFdoYXQgd2UgYWN0dWFsbHkgZ290ICh1c2VkIGZvciB0cmFjaW5n
KQorCisgICAgICAgIE5vdGUgdGhhdCB3ZSBuZWVkIGFsbCBvZiB0aGVzZSBhcmd1bWVudHMgZXZl
biB0aG91Z2ggdGhleSBzZWVtCisgICAgICAgIHNvbWV3aGF0IHJlZHVuZGFudCwgaW4gb3JkZXIg
dG8ga2VlcCB0aGlzIHJvdXRpbmUgZnJvbSBoYXZpbmcgdG8KKyAgICAgICAga25vd24gYW55dGhp
bmcgYWJvdXQgdGhlIHNldCBvZiBleHBlY3RhdGlvbnMuCisgICAgICAgICIiIgorICAgICAgICBp
ZiAoc2VsZi5lbmFibGVkKCd0cmFjZS1ldmVyeXRoaW5nJykgb3IKKyAgICAgICAgICAgIHNlbGYu
ZW5hYmxlZCgndHJhY2UtdW5leHBlY3RlZCcpIGFuZCBub3QgZXhwZWN0ZWQpOgorICAgICAgICAg
ICAgc2VsZi5fcHJpbnRfdGVzdF90cmFjZShyZXN1bHQsIGV4cF9zdHIsIGdvdF9zdHIpCisgICAg
ICAgIGVsaWYgbm90IGV4cGVjdGVkIGFuZCBzZWxmLmVuYWJsZWQoJ3VuZXhwZWN0ZWQnKToKKyAg
ICAgICAgICAgIHNlbGYuX3ByaW50X3VuZXhwZWN0ZWRfdGVzdF9yZXN1bHQocmVzdWx0KQorCisg
ICAgZGVmIF9wcmludF90ZXN0X3RyYWNlKHNlbGYsIHJlc3VsdCwgZXhwX3N0ciwgZ290X3N0cik6
CisgICAgICAgICIiIlByaW50IGRldGFpbGVkIHJlc3VsdHMgb2YgYSB0ZXN0ICh0cmlnZ2VyZWQg
YnkgLS1wcmludCB0cmFjZS0qKS4KKyAgICAgICAgRm9yIGVhY2ggdGVzdCwgcHJpbnQ6CisgICAg
ICAgICAgIC0gbG9jYXRpb24gb2YgdGhlIGV4cGVjdGVkIGJhc2VsaW5lcworICAgICAgICAgICAt
IGV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgICAgLSBhY3R1YWwgcmVzdWx0CisgICAgICAgICAg
IC0gdGltaW5nIGluZm8KKyAgICAgICAgIiIiCisgICAgICAgIGZpbGVuYW1lID0gc2VsZi5fcG9y
dC5hYnNwYXRoX2Zvcl90ZXN0KHJlc3VsdC50ZXN0X25hbWUpCisgICAgICAgIHRlc3RfbmFtZSA9
IHJlc3VsdC50ZXN0X25hbWUKKyAgICAgICAgc2VsZi5fd3JpdGUoJ3RyYWNlOiAlcycgJSB0ZXN0
X25hbWUpCisgICAgICAgIGZvciBleHRlbnNpb24gaW4gKCcudHh0JywgJy5wbmcnLCAnLndhdics
ICcud2ViYXJjaGl2ZScpOgorICAgICAgICAgICAgc2VsZi5fcHJpbnRfYmFzZWxpbmUoZmlsZW5h
bWUsIGV4dGVuc2lvbikKKyAgICAgICAgc2VsZi5fd3JpdGUoJyAgZXhwOiAlcycgJSBleHBfc3Ry
KQorICAgICAgICBzZWxmLl93cml0ZSgnICBnb3Q6ICVzJyAlIGdvdF9zdHIpCisgICAgICAgIHNl
bGYuX3dyaXRlKCcgdG9vazogJS0uM2YnICUgcmVzdWx0LnRlc3RfcnVuX3RpbWUpCisgICAgICAg
IHNlbGYuX3dyaXRlKCcnKQorCisgICAgZGVmIF9wcmludF9iYXNlbGluZShzZWxmLCBmaWxlbmFt
ZSwgZXh0ZW5zaW9uKToKKyAgICAgICAgYmFzZWxpbmUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2Zp
bGVuYW1lKGZpbGVuYW1lLCBleHRlbnNpb24pCisgICAgICAgIGlmIHNlbGYuX3BvcnQuX2ZpbGVz
eXN0ZW0uZXhpc3RzKGJhc2VsaW5lKToKKyAgICAgICAgICAgIHJlbHBhdGggPSBzZWxmLl9wb3J0
LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoYmFzZWxpbmUpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICByZWxwYXRoID0gJzxub25lPicKKyAgICAgICAgc2VsZi5fd3JpdGUoJyAgJXM6ICVzJyAl
IChleHRlbnNpb25bMTpdLCByZWxwYXRoKSkKKworICAgIGRlZiBfcHJpbnRfdW5leHBlY3RlZF90
ZXN0X3Jlc3VsdChzZWxmLCByZXN1bHQpOgorICAgICAgICAiIiJQcmludHMgb25lIHVuZXhwZWN0
ZWQgdGVzdCByZXN1bHQgbGluZS4iIiIKKyAgICAgICAgZGVzYyA9IFRlc3RFeHBlY3RhdGlvbnMu
RVhQRUNUQVRJT05fREVTQ1JJUFRJT05TW3Jlc3VsdC50eXBlXVswXQorICAgICAgICBzZWxmLndy
aXRlKCIgICVzIC0+IHVuZXhwZWN0ZWQgJXMiICUKKyAgICAgICAgICAgICAgICAgICAocmVzdWx0
LnRlc3RfbmFtZSwgZGVzYyksICJ1bmV4cGVjdGVkIikKKworICAgIGRlZiBwcmludF9wcm9ncmVz
cyhzZWxmLCByZXN1bHRfc3VtbWFyeSwgcmV0cnlpbmcsIHRlc3RfbGlzdCk6CisgICAgICAgICIi
IlByaW50IHByb2dyZXNzIHRocm91Z2ggdGhlIHRlc3RzIGFzIGRldGVybWluZWQgYnkgLS1wcmlu
dC4iIiIKKyAgICAgICAgaWYgc2VsZi5kaXNhYmxlZCgnb25lLWxpbmUtcHJvZ3Jlc3MnKToKKyAg
ICAgICAgICAgIHJldHVybgorCisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIGlm
IHNlbGYuX2xhc3RfdXBkYXRlX3RpbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xhc3Rf
dXBkYXRlX3RpbWUgPSBub3cKKworICAgICAgICB0aW1lX3NpbmNlX2xhc3RfdXBkYXRlID0gbm93
IC0gc2VsZi5fbGFzdF91cGRhdGVfdGltZQorICAgICAgICBpZiB0aW1lX3NpbmNlX2xhc3RfdXBk
YXRlIDw9IHNlbGYuX3VwZGF0ZV9pbnRlcnZhbF9zZWNvbmRzOgorICAgICAgICAgICAgcmV0dXJu
CisKKyAgICAgICAgc2VsZi5fbGFzdF91cGRhdGVfdGltZSA9IG5vdworCisgICAgICAgIHBlcmNl
bnRfY29tcGxldGUgPSAxMDAgKiAocmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWQgKworICAgICAgICAg
ICAgcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZCkgLyByZXN1bHRfc3VtbWFyeS50b3RhbAorICAg
ICAgICBhY3Rpb24gPSAiVGVzdGluZyIKKyAgICAgICAgaWYgcmV0cnlpbmc6CisgICAgICAgICAg
ICBhY3Rpb24gPSAiUmV0cnlpbmciCisgICAgICAgIHNlbGYuX3VwZGF0ZSgiJXMgKCVkJSUpOiAl
ZCByYW4gYXMgZXhwZWN0ZWQsICVkIGRpZG4ndCwgJWQgbGVmdCIgJQorICAgICAgICAgICAgICAg
ICAgICAgKGFjdGlvbiwgcGVyY2VudF9jb21wbGV0ZSwgcmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWQs
CisgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZCwgcmVzdWx0
X3N1bW1hcnkucmVtYWluaW5nKSkKKworICAgICAgICBpZiByZXN1bHRfc3VtbWFyeS5yZW1haW5p
bmcgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuX3VwZGF0ZSgnJykKKworICAgIGRlZiBwcmludF91
bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZiwgdW5leHBlY3RlZF9yZXN1bHRzKToKKyAgICAgICAgIiIi
UHJpbnRzIGEgbGlzdCBvZiB0aGUgdW5leHBlY3RlZCByZXN1bHRzIHRvIHRoZSBidWlsZGJvdCBz
dHJlYW0uIiIiCisgICAgICAgIGlmIHNlbGYuZGlzYWJsZWQoJ3VuZXhwZWN0ZWQtcmVzdWx0cycp
OgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcGFzc2VzID0ge30KKyAgICAgICAgZmxh
a3kgPSB7fQorICAgICAgICByZWdyZXNzaW9ucyA9IHt9CisKKyAgICAgICAgZGVmIGFkZF90b19k
aWN0X29mX2xpc3RzKGRpY3QsIGtleSwgdmFsdWUpOgorICAgICAgICAgICAgZGljdC5zZXRkZWZh
dWx0KGtleSwgW10pLmFwcGVuZCh2YWx1ZSkKKworICAgICAgICBkZWYgYWRkX3Jlc3VsdCh0ZXN0
LCByZXN1bHRzLCBwYXNzZXM9cGFzc2VzLCBmbGFreT1mbGFreSwgcmVncmVzc2lvbnM9cmVncmVz
c2lvbnMpOgorICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0c1snYWN0dWFsJ10uc3BsaXQoIiAi
KQorICAgICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRzWydleHBlY3RlZCddLnNwbGl0KCIgIikK
KyAgICAgICAgICAgIGlmIGFjdHVhbCA9PSBbJ1BBU1MnXToKKyAgICAgICAgICAgICAgICBpZiAn
Q1JBU0gnIGluIGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICBhZGRfdG9fZGljdF9vZl9s
aXN0cyhwYXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdF
eHBlY3RlZCB0byBjcmFzaCwgYnV0IHBhc3NlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRlc3QpCisgICAgICAgICAgICAgICAgZWxpZiAnVElNRU9VVCcgaW4g
ZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGFkZF90b19kaWN0X29mX2xpc3RzKHBhc3Nl
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRv
IHRpbWVvdXQsIGJ1dCBwYXNzZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVzdCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAg
ICBhZGRfdG9fZGljdF9vZl9saXN0cyhwYXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdFeHBlY3RlZCB0byBmYWlsLCBidXQgcGFzc2VkJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCkKKyAgICAgICAgICAgIGVsaWYg
bGVuKGFjdHVhbCkgPiAxOgorICAgICAgICAgICAgICAgICMgV2UgZ3JvdXAgZmxha3kgdGVzdHMg
YnkgdGhlIGZpcnN0IGFjdHVhbCByZXN1bHQgd2UgZ290LgorICAgICAgICAgICAgICAgIGFkZF90
b19kaWN0X29mX2xpc3RzKGZsYWt5LCBhY3R1YWxbMF0sIHRlc3QpCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIGFkZF90b19kaWN0X29mX2xpc3RzKHJlZ3Jlc3Npb25zLCByZXN1
bHRzWydhY3R1YWwnXSwgdGVzdCkKKworICAgICAgICByZXN1bHRzanNvbnBhcnNlci5mb3JfZWFj
aF90ZXN0KHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMnXSwgYWRkX3Jlc3VsdCkKKworICAgICAg
ICBpZiBsZW4ocGFzc2VzKSBvciBsZW4oZmxha3kpIG9yIGxlbihyZWdyZXNzaW9ucyk6CisgICAg
ICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxuIikKKworICAgICAgICBpZiBs
ZW4ocGFzc2VzKToKKyAgICAgICAgICAgIGZvciBrZXksIHRlc3RzIGluIHBhc3Nlcy5pdGVyaXRl
bXMoKToKKyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIiVzOiAo
JWQpXG4iICUgKGtleSwgbGVuKHRlc3RzKSkpCisgICAgICAgICAgICAgICAgdGVzdHMuc29ydCgp
CisgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgICAg
IHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiICAlc1xuIiAlIHRlc3QpCisgICAgICAgICAg
ICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCJcbiIpCisgICAgICAgICAgICBzZWxm
Ll9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxuIikKKworICAgICAgICBpZiBsZW4oZmxha3kpOgor
ICAgICAgICAgICAgZGVzY3JpcHRpb25zID0gVGVzdEV4cGVjdGF0aW9ucy5FWFBFQ1RBVElPTl9E
RVNDUklQVElPTlMKKyAgICAgICAgICAgIGZvciBrZXksIHRlc3RzIGluIGZsYWt5Lml0ZXJpdGVt
cygpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnMuRVhQRUNUQVRJ
T05TW2tleS5sb3dlcigpXQorICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53
cml0ZSgiVW5leHBlY3RlZCBmbGFraW5lc3M6ICVzICglZClcbiIKKyAgICAgICAgICAgICAgICAg
ICAgJSAoZGVzY3JpcHRpb25zW3Jlc3VsdF1bMV0sIGxlbih0ZXN0cykpKQorICAgICAgICAgICAg
ICAgIHRlc3RzLnNvcnQoKQorCisgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6Cisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdHNqc29ucGFyc2VyLnJlc3VsdF9mb3Jf
dGVzdCh1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10sIHRlc3QpCisgICAgICAgICAgICAgICAg
ICAgIGFjdHVhbCA9IHJlc3VsdFsnYWN0dWFsJ10uc3BsaXQoIiAiKQorICAgICAgICAgICAgICAg
ICAgICBleHBlY3RlZCA9IHJlc3VsdFsnZXhwZWN0ZWQnXS5zcGxpdCgiICIpCisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnMuRVhQRUNUQVRJT05TW2tleS5sb3dl
cigpXQorICAgICAgICAgICAgICAgICAgICBuZXdfZXhwZWN0YXRpb25zX2xpc3QgPSBsaXN0KHNl
dChhY3R1YWwpIHwgc2V0KGV4cGVjdGVkKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVp
bGRib3Rfc3RyZWFtLndyaXRlKCIgICVzID0gJXNcbiIgJQorICAgICAgICAgICAgICAgICAgICAg
ICAgKHRlc3QsICIgIi5qb2luKG5ld19leHBlY3RhdGlvbnNfbGlzdCkpKQorICAgICAgICAgICAg
ICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQorICAgICAgICAgICAgc2VsZi5f
YnVpbGRib3Rfc3RyZWFtLndyaXRlKCJcbiIpCisKKyAgICAgICAgaWYgbGVuKHJlZ3Jlc3Npb25z
KToKKyAgICAgICAgICAgIGRlc2NyaXB0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnMuRVhQRUNUQVRJ
T05fREVTQ1JJUFRJT05TCisgICAgICAgICAgICBmb3Iga2V5LCB0ZXN0cyBpbiByZWdyZXNzaW9u
cy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25z
LkVYUEVDVEFUSU9OU1trZXkubG93ZXIoKV0KKyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZGJv
dF9zdHJlYW0ud3JpdGUoCisgICAgICAgICAgICAgICAgICAgICJSZWdyZXNzaW9uczogVW5leHBl
Y3RlZCAlcyA6ICglZClcbiIgJSAoCisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uc1ty
ZXN1bHRdWzFdLCBsZW4odGVzdHMpKSkKKyAgICAgICAgICAgICAgICB0ZXN0cy5zb3J0KCkKKyAg
ICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCIgICVzID0gJXNcbiIgJSAodGVzdCwga2V5KSkKKyAg
ICAgICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxuIikKKyAgICAgICAg
ICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0ZSgiXG4iKQorCisgICAgICAgIGlmIGxlbih1
bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10pIGFuZCBzZWxmLl9vcHRpb25zLnZlcmJvc2U6Cisg
ICAgICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIiVzXG4iICUgKCItIiAqIDc4
KSkKKworICAgIGRlZiBwcmludF91cGRhdGUoc2VsZiwgbXNnKToKKyAgICAgICAgaWYgc2VsZi5k
aXNhYmxlZCgndXBkYXRlcycpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX3Vw
ZGF0ZShtc2cpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgbXNnLCBvcHRpb249Im1pc2MiKToKKyAg
ICAgICAgaWYgc2VsZi5kaXNhYmxlZChvcHRpb24pOgorICAgICAgICAgICAgcmV0dXJuCisgICAg
ICAgIHNlbGYuX3dyaXRlKG1zZykKKworICAgIGRlZiBfd3JpdGUoc2VsZiwgbXNnKToKKyAgICAg
ICAgX2xvZy5pbmZvKG1zZykKKworICAgIGRlZiBfdXBkYXRlKHNlbGYsIG1zZyk6CisgICAgICAg
IGlmIHNlbGYuX21ldGVyOgorICAgICAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKG1zZykKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlKG1zZykKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3ZpZXdzL3ByaW50aW5nLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3ZpZXdzL3ByaW50aW5nLnB5
CShyZXZpc2lvbiAwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdmll
d3MvcHJpbnRpbmcucHkJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgaW1wb3J0IG9w
dHBhcnNlCiBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQgaW1wb3J0IHJl
c3VsdHNqc29ucGFyc2VyCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2Fn
ZSBpbXBvcnQgbWV0ZXJlZF9zdHJlYW0KK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnZpZXdz
Lm1ldGVyZWRfc3RyZWFtIGltcG9ydCBNZXRlcmVkU3RyZWFtCiBmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKIAogIyBGSVhN
RTogQ2hhbmdlIHRoaXMgdG8gX19maWxlX18gd2hlbiB3ZSBjYW4gZml4IHRlc3Qtd2Via2l0cHkn
cyBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uCkBAIC0yMjAsNyArMjIwLDcgQEAgY2xhc3MgUHJpbnRl
cihvYmplY3QpOgogICAgICAgICBzZWxmLl9sb2dnaW5nX2hhbmRsZXIgPSBOb25lCiAgICAgICAg
IGlmIHNlbGYuX3N0cmVhbS5pc2F0dHkoKSBhbmQgbm90IG9wdGlvbnMudmVyYm9zZToKICAgICAg
ICAgICAgIHNlbGYuX3VwZGF0ZV9pbnRlcnZhbF9zZWNvbmRzID0gRkFTVF9VUERBVEVTX1NFQ09O
RFMKLSAgICAgICAgICAgIHNlbGYuX21ldGVyID0gbWV0ZXJlZF9zdHJlYW0uTWV0ZXJlZFN0cmVh
bShzZWxmLl9zdHJlYW0pCisgICAgICAgICAgICBzZWxmLl9tZXRlciA9IE1ldGVyZWRTdHJlYW0o
c2VsZi5fc3RyZWFtKQogICAgICAgICAgICAgaWYgY29uZmlndXJlX2xvZ2dpbmc6CiAgICAgICAg
ICAgICAgICAgc2VsZi5fbG9nZ2luZ19oYW5kbGVyID0gX2NvbmZpZ3VyZV9sb2dnaW5nKHNlbGYu
X21ldGVyLCBvcHRpb25zLnZlcmJvc2UpCiAgICAgICAgIGVsc2U6CkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy92aWV3cy9wcmludGluZ191bml0dGVzdC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy92aWV3cy9wcmlu
dGluZ191bml0dGVzdC5weQkocmV2aXNpb24gOTA1MjMpCShmcm9tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nX3VuaXR0ZXN0LnB5Ojkw
NTIzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdmlld3MvcHJpbnRp
bmdfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MzkgQEAKKyMhL3Vzci9i
aW4vcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiVW5pdCB0ZXN0cyBmb3IgcHJpbnRpbmcu
cHkuIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCB0aW1lCitp
bXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IGFycmF5X3N0cmVh
bQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBsb2d0ZXN0aW5nCitmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9ydAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMuY29udHJvbGxlcnMgaW1wb3J0IG1hbmFnZXIKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LmxheW91dF9wYWNrYWdlIGltcG9ydCBwcmludGluZworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHJlc3VsdF9zdW1tYXJ5Citmcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKK2Zyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVz
Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9y
ZXN1bHRzCisKKworZGVmIGdldF9vcHRpb25zKGFyZ3MpOgorICAgIHByaW50X29wdGlvbnMgPSBw
cmludGluZy5wcmludF9vcHRpb25zKCkKKyAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0
aW9uUGFyc2VyKG9wdGlvbl9saXN0PXByaW50X29wdGlvbnMpCisgICAgcmV0dXJuIG9wdGlvbl9w
YXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisKK2NsYXNzIFRlc3RVdGlsaXR5RnVuY3Rpb25zKHVu
aXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jb25maWd1cmVfbG9nZ2luZyhzZWxmKToK
KyAgICAgICAgb3B0aW9ucywgYXJncyA9IGdldF9vcHRpb25zKFtdKQorICAgICAgICBzdHJlYW0g
PSBhcnJheV9zdHJlYW0uQXJyYXlTdHJlYW0oKQorICAgICAgICBoYW5kbGVyID0gcHJpbnRpbmcu
X2NvbmZpZ3VyZV9sb2dnaW5nKHN0cmVhbSwgb3B0aW9ucy52ZXJib3NlKQorICAgICAgICBsb2dn
aW5nLmluZm8oInRoaXMgc2hvdWxkIGJlIGxvZ2dlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFs
c2Uoc3RyZWFtLmVtcHR5KCkpCisKKyAgICAgICAgc3RyZWFtLnJlc2V0KCkKKyAgICAgICAgbG9n
Z2luZy5kZWJ1ZygidGhpcyBzaG91bGQgbm90IGJlIGxvZ2dlZCIpCisgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShzdHJlYW0uZW1wdHkoKSkKKworICAgICAgICBwcmludGluZy5fcmVzdG9yZV9sb2dn
aW5nKGhhbmRsZXIpCisKKyAgICAgICAgc3RyZWFtLnJlc2V0KCkKKyAgICAgICAgb3B0aW9ucywg
YXJncyA9IGdldF9vcHRpb25zKFsnLS12ZXJib3NlJ10pCisgICAgICAgIGhhbmRsZXIgPSBwcmlu
dGluZy5fY29uZmlndXJlX2xvZ2dpbmcoc3RyZWFtLCBvcHRpb25zLnZlcmJvc2UpCisgICAgICAg
IGxvZ2dpbmcuZGVidWcoInRoaXMgc2hvdWxkIGJlIGxvZ2dlZCIpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RmFsc2Uoc3RyZWFtLmVtcHR5KCkpCisgICAgICAgIHByaW50aW5nLl9yZXN0b3JlX2xvZ2dp
bmcoaGFuZGxlcikKKworICAgIGRlZiB0ZXN0X3ByaW50X29wdGlvbnMoc2VsZik6CisgICAgICAg
IG9wdGlvbnMsIGFyZ3MgPSBnZXRfb3B0aW9ucyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KG9wdGlvbnMgaXMgbm90IE5vbmUpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9wcmludF9vcHRpb25z
KHNlbGYpOgorICAgICAgICBkZWYgdGVzdF9zd2l0Y2hlcyhhcmdzLCBleHBlY3RlZF9zd2l0Y2hl
c19zdHIsIHZlcmJvc2U9RmFsc2UpOgorICAgICAgICAgICAgb3B0aW9ucywgYXJncyA9IGdldF9v
cHRpb25zKGFyZ3MpCisgICAgICAgICAgICBpZiBleHBlY3RlZF9zd2l0Y2hlc19zdHI6CisgICAg
ICAgICAgICAgICAgZXhwZWN0ZWRfc3dpdGNoZXMgPSBzZXQoZXhwZWN0ZWRfc3dpdGNoZXNfc3Ry
LnNwbGl0KCcsJykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGV4cGVjdGVk
X3N3aXRjaGVzID0gc2V0KCkKKyAgICAgICAgICAgIHN3aXRjaGVzID0gcHJpbnRpbmcucGFyc2Vf
cHJpbnRfb3B0aW9ucyhvcHRpb25zLnByaW50X29wdGlvbnMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZSkKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfc3dpdGNoZXMsIHN3aXRjaGVzKQorCisgICAgICAgICMg
dGVzdCB0aGF0IHdlIGRlZmF1bHQgdG8gdGhlIGRlZmF1bHQgc2V0IG9mIHN3aXRjaGVzCisgICAg
ICAgIHRlc3Rfc3dpdGNoZXMoW10sIHByaW50aW5nLlBSSU5UX0RFRkFVTFQpCisKKyAgICAgICAg
IyB0ZXN0IHRoYXQgdmVyYm9zZSBkZWZhdWx0cyB0byBldmVyeXRoaW5nCisgICAgICAgIHRlc3Rf
c3dpdGNoZXMoW10sIHByaW50aW5nLlBSSU5UX0VWRVJZVEhJTkcsIHZlcmJvc2U9VHJ1ZSkKKwor
ICAgICAgICAjIHRlc3QgdGhhdCAtLXByaW50IGRlZmF1bHQgZG9lcyB3aGF0IGl0J3Mgc3VwcG9z
ZWQgdG8KKyAgICAgICAgdGVzdF9zd2l0Y2hlcyhbJy0tcHJpbnQnLCAnZGVmYXVsdCddLCBwcmlu
dGluZy5QUklOVF9ERUZBVUxUKQorCisgICAgICAgICMgdGVzdCB0aGF0IC0tcHJpbnQgbm90aGlu
ZyBkb2VzIHdoYXQgaXQncyBzdXBwb3NlZCB0bworICAgICAgICB0ZXN0X3N3aXRjaGVzKFsnLS1w
cmludCcsICdub3RoaW5nJ10sIE5vbmUpCisKKyAgICAgICAgIyB0ZXN0IHRoYXQgLS1wcmludCBl
dmVyeXRoaW5nIGRvZXMgd2hhdCBpdCdzIHN1cHBvc2VkIHRvCisgICAgICAgIHRlc3Rfc3dpdGNo
ZXMoWyctLXByaW50JywgJ2V2ZXJ5dGhpbmcnXSwgcHJpbnRpbmcuUFJJTlRfRVZFUllUSElORykK
KworICAgICAgICAjIHRoaXMgdGVzdHMgdGhhdCAnLS1wcmludCBYJyBvdmVycmlkZXMgJy0tdmVy
Ym9zZScKKyAgICAgICAgdGVzdF9zd2l0Y2hlcyhbJy0tcHJpbnQnLCAnYWN0dWFsJ10sICdhY3R1
YWwnLCB2ZXJib3NlPVRydWUpCisKKworCitjbGFzcyAgVGVzdHByaW50ZXIodW5pdHRlc3QuVGVz
dENhc2UpOgorICAgIGRlZiBnZXRfcHJpbnRlcihzZWxmLCBhcmdzPU5vbmUsIHR0eT1GYWxzZSk6
CisgICAgICAgIGFyZ3MgPSBhcmdzIG9yIFtdCisgICAgICAgIHByaW50aW5nX29wdGlvbnMgPSBw
cmludGluZy5wcmludF9vcHRpb25zKCkKKyAgICAgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNl
Lk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1wcmludGluZ19vcHRpb25zKQorICAgICAgICBvcHRp
b25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisgICAgICAgIHNlbGYu
X3BvcnQgPSBwb3J0LmdldCgndGVzdCcsIG9wdGlvbnMpCisgICAgICAgIG5wcm9jID0gMgorCisg
ICAgICAgIHJlZ3VsYXJfb3V0cHV0ID0gYXJyYXlfc3RyZWFtLkFycmF5U3RyZWFtKHR0eT10dHkp
CisgICAgICAgIGJ1aWxkYm90X291dHB1dCA9IGFycmF5X3N0cmVhbS5BcnJheVN0cmVhbSgpCisg
ICAgICAgIHByaW50ZXIgPSBwcmludGluZy5QcmludGVyKHNlbGYuX3BvcnQsIG9wdGlvbnMsIHJl
Z3VsYXJfb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGJv
dF9vdXRwdXQsIGNvbmZpZ3VyZV9sb2dnaW5nPVRydWUpCisgICAgICAgIHJldHVybiBwcmludGVy
LCByZWd1bGFyX291dHB1dCwgYnVpbGRib3Rfb3V0cHV0CisKKyAgICBkZWYgZ2V0X3Jlc3VsdChz
ZWxmLCB0ZXN0X25hbWUsIHJlc3VsdF90eXBlPXRlc3RfZXhwZWN0YXRpb25zLlBBU1MsIHJ1bl90
aW1lPTApOgorICAgICAgICBmYWlsdXJlcyA9IFtdCisgICAgICAgIGlmIHJlc3VsdF90eXBlID09
IHRlc3RfZXhwZWN0YXRpb25zLlRJTUVPVVQ6CisgICAgICAgICAgICBmYWlsdXJlcyA9IFt0ZXN0
X2ZhaWx1cmVzLkZhaWx1cmVUaW1lb3V0KCldCisgICAgICAgIGVsaWYgcmVzdWx0X3R5cGUgPT0g
dGVzdF9leHBlY3RhdGlvbnMuQ1JBU0g6CisgICAgICAgICAgICBmYWlsdXJlcyA9IFt0ZXN0X2Zh
aWx1cmVzLkZhaWx1cmVDcmFzaCgpXQorICAgICAgICByZXR1cm4gdGVzdF9yZXN1bHRzLlRlc3RS
ZXN1bHQodGVzdF9uYW1lLCBmYWlsdXJlcz1mYWlsdXJlcywgdGVzdF9ydW5fdGltZT1ydW5fdGlt
ZSkKKworICAgIGRlZiBnZXRfcmVzdWx0X3N1bW1hcnkoc2VsZiwgdGVzdF9uYW1lcywgZXhwZWN0
YXRpb25zX3N0cik6CisgICAgICAgIGV4cGVjdGF0aW9ucyA9IHRlc3RfZXhwZWN0YXRpb25zLlRl
c3RFeHBlY3RhdGlvbnMoCisgICAgICAgICAgICBzZWxmLl9wb3J0LCB0ZXN0X25hbWVzLCBleHBl
Y3RhdGlvbnNfc3RyLAorICAgICAgICAgICAgc2VsZi5fcG9ydC50ZXN0X2NvbmZpZ3VyYXRpb24o
KSwKKyAgICAgICAgICAgIGlzX2xpbnRfbW9kZT1GYWxzZSkKKworICAgICAgICBycyA9IHJlc3Vs
dF9zdW1tYXJ5LlJlc3VsdFN1bW1hcnkoZXhwZWN0YXRpb25zLCB0ZXN0X25hbWVzKQorICAgICAg
ICByZXR1cm4gdGVzdF9uYW1lcywgcnMsIGV4cGVjdGF0aW9ucworCisgICAgZGVmIHRlc3RfaGVs
cF9wcmludGVyKHNlbGYpOgorICAgICAgICAjIEhlcmUgYW5kIGJlbG93IHdlJ2xsIGNhbGwgdGhl
ICJyZWd1bGFyIiBwcmludGVyIGVyciBhbmQgdGhlCisgICAgICAgICMgYnVpbGRib3QgcHJpbnRl
ciBvdXQ7IHRoaXMgY29ycmVzcG9uZHMgdG8gaG93IHRoaW5ncyBydW4gb24gdGhlCisgICAgICAg
ICMgYm90cyB3aXRoIHN0ZGVyciBhbmQgc3Rkb3V0LgorICAgICAgICBwcmludGVyLCBlcnIsIG91
dCA9IHNlbGYuZ2V0X3ByaW50ZXIoKQorCisgICAgICAgICMgVGhpcyByb3V0aW5lIHNob3VsZCBw
cmludCBzb21ldGhpbmcgdG8gc3Rkb3V0LiB0ZXN0aW5nIHdoYXQgaXQgaXMKKyAgICAgICAgIyBp
cyBraW5kIG9mIHBvaW50bGVzcy4KKyAgICAgICAgcHJpbnRlci5oZWxwX3ByaW50aW5nKCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKG91dC5lbXB0eSgpKQorCisgICAgZGVmIGRvX3N3aXRjaF90ZXN0cyhzZWxmLCBtZXRob2Rf
bmFtZSwgc3dpdGNoLCB0b19idWlsZGJvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2U9J2hlbGxvJywgZXhwX2Vycj1Ob25lLCBleHBfYm90PU5vbmUpOgorICAgICAgICBkZWYgZG9f
aGVscGVyKG1ldGhvZF9uYW1lLCBzd2l0Y2gsIG1lc3NhZ2UsIGV4cF9lcnIsIGV4cF9ib3QpOgor
ICAgICAgICAgICAgcHJpbnRlciwgZXJyLCBib3QgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmlu
dCcsIHN3aXRjaF0sIHR0eT1UcnVlKQorICAgICAgICAgICAgZ2V0YXR0cihwcmludGVyLCBtZXRo
b2RfbmFtZSkobWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmdldCgp
LCBleHBfZXJyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChib3QuZ2V0KCksIGV4cF9i
b3QpCisKKyAgICAgICAgaWYgdG9fYnVpbGRib3Q6CisgICAgICAgICAgICBpZiBleHBfZXJyIGlz
IE5vbmU6CisgICAgICAgICAgICAgICAgZXhwX2VyciA9IFtdCisgICAgICAgICAgICBpZiBleHBf
Ym90IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZXhwX2JvdCA9IFttZXNzYWdlICsgIlxuIl0K
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGV4cF9lcnIgaXMgTm9uZToKKyAgICAgICAg
ICAgICAgICBleHBfZXJyID0gW21lc3NhZ2UgKyAiXG4iXQorICAgICAgICAgICAgaWYgZXhwX2Jv
dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGV4cF9ib3QgPSBbXQorICAgICAgICBkb19oZWxw
ZXIobWV0aG9kX25hbWUsICdub3RoaW5nJywgJ2hlbGxvJywgW10sIFtdKQorICAgICAgICBkb19o
ZWxwZXIobWV0aG9kX25hbWUsIHN3aXRjaCwgJ2hlbGxvJywgZXhwX2VyciwgZXhwX2JvdCkKKyAg
ICAgICAgZG9faGVscGVyKG1ldGhvZF9uYW1lLCAnZXZlcnl0aGluZycsICdoZWxsbycsIGV4cF9l
cnIsIGV4cF9ib3QpCisKKyAgICBkZWYgdGVzdF9jb25maWd1cmVfYW5kX2NsZWFudXAoc2VsZik6
CisgICAgICAgICMgVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgY2FsbGluZyBjbGVhbnVwIHJlcGVh
dGVkbHkgYW5kIGRlbGV0aW5nCisgICAgICAgICMgdGhlIG9iamVjdCBpcyBzYWZlLgorICAgICAg
ICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ2V2ZXJ5
dGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5jbGVhbnVwKCkKKyAgICAgICAgcHJpbnRlci5jbGVh
bnVwKCkKKyAgICAgICAgcHJpbnRlciA9IE5vbmUKKworICAgIGRlZiB0ZXN0X3ByaW50X2FjdHVh
bChzZWxmKToKKyAgICAgICAgIyBBY3R1YWwgcmVzdWx0cyBuZWVkIHRvIGJlIGxvZ2dlZCB0byB0
aGUgYnVpbGRib3QncyBzdHJlYW0uCisgICAgICAgIHNlbGYuZG9fc3dpdGNoX3Rlc3RzKCdwcmlu
dF9hY3R1YWwnLCAnYWN0dWFsJywgdG9fYnVpbGRib3Q9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3By
aW50X2FjdHVhbF9idWlsZGJvdChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogVGVzdCB0aGF0IHRo
ZSBmb3JtYXQgb2YgdGhlIGFjdHVhbCByZXN1bHRzIG1hdGNoZXMgd2hhdCB0aGUKKyAgICAgICAg
IyBidWlsZGJvdCBpcyBleHBlY3RpbmcuCisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3By
aW50X2NvbmZpZyhzZWxmKToKKyAgICAgICAgc2VsZi5kb19zd2l0Y2hfdGVzdHMoJ3ByaW50X2Nv
bmZpZycsICdjb25maWcnLCB0b19idWlsZGJvdD1GYWxzZSkKKworICAgIGRlZiB0ZXN0X3ByaW50
X2V4cGVjdGVkKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3N3aXRjaF90ZXN0cygncHJpbnRfZXhw
ZWN0ZWQnLCAnZXhwZWN0ZWQnLCB0b19idWlsZGJvdD1GYWxzZSkKKworICAgIGRlZiB0ZXN0X3By
aW50X3RpbWluZyhzZWxmKToKKyAgICAgICAgc2VsZi5kb19zd2l0Y2hfdGVzdHMoJ3ByaW50X3Rp
bWluZycsICd0aW1pbmcnLCB0b19idWlsZGJvdD1GYWxzZSkKKworICAgIGRlZiB0ZXN0X3ByaW50
X3VwZGF0ZShzZWxmKToKKyAgICAgICAgIyBOb3RlIHRoYXQgdGhlcmUgc2hvdWxkbid0IGJlIGEg
Y2FycmlhZ2UgcmV0dXJuIGhlcmU7IHVwZGF0ZXMoKQorICAgICAgICAjIGFyZSBtZWFudCB0byBi
ZSBvdmVyd3JpdHRlbi4KKyAgICAgICAgc2VsZi5kb19zd2l0Y2hfdGVzdHMoJ3ByaW50X3VwZGF0
ZScsICd1cGRhdGVzJywgdG9fYnVpbGRib3Q9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1lc3NhZ2U9J2hlbGxvJywgZXhwX2Vycj1bJ2hlbGxvJ10pCisKKyAgICBkZWYgdGVz
dF9wcmludF9vbmVfbGluZV9zdW1tYXJ5KHNlbGYpOgorICAgICAgICBwcmludGVyLCBlcnIsIG91
dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAgICAgICAgcHJp
bnRlci5wcmludF9vbmVfbGluZV9zdW1tYXJ5KDEsIDEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0
X3ByaW50ZXIoWyctLXByaW50JywgJ29uZS1saW5lLXN1bW1hcnknXSkKKyAgICAgICAgcHJpbnRl
ci5wcmludF9vbmVfbGluZV9zdW1tYXJ5KDEsIDEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKGVyci5nZXQoKSwgWyJBbGwgMSB0ZXN0cyByYW4gYXMgZXhwZWN0ZWQuXG4iLCAiXG4iXSkK
KworICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50
JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgcHJpbnRlci5wcmludF9vbmVfbGluZV9zdW1tYXJ5
KDEsIDEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5nZXQoKSwgWyJBbGwgMSB0
ZXN0cyByYW4gYXMgZXhwZWN0ZWQuXG4iLCAiXG4iXSkKKworICAgICAgICBlcnIucmVzZXQoKQor
ICAgICAgICBwcmludGVyLnByaW50X29uZV9saW5lX3N1bW1hcnkoMiwgMSwgMSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoZXJyLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBb
IjEgdGVzdCByYW4gYXMgZXhwZWN0ZWQsIDEgZGlkbid0OlxuIiwgIlxuIl0pCisKKyAgICAgICAg
ZXJyLnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci5wcmludF9vbmVfbGluZV9zdW1tYXJ5KDMsIDIs
IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5nZXQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgWyIyIHRlc3RzIHJhbiBhcyBleHBlY3RlZCwgMSBkaWRuJ3Q6XG4iLCAiXG4i
XSkKKworICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X29uZV9saW5l
X3N1bW1hcnkoMywgMiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXJyLmdldCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBbJ1xuJywgIjIgdGVzdHMgcmFuIGFzIGV4cGVjdGVk
ICgxIGRpZG4ndCBydW4pLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddKQor
CisKKyAgICBkZWYgdGVzdF9wcmludF90ZXN0X3Jlc3VsdChzZWxmKToKKyAgICAgICAgIyBOb3Rl
IGhlcmUgdGhhdCB3ZSBkb24ndCB1c2UgbWVhbmluZ2Z1bCBleHBfc3RyIGFuZCBnb3Rfc3RyIHZh
bHVlczsKKyAgICAgICAgIyB0aGUgYWN0dWFsIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmcgYXJlIHRy
ZWF0ZWQgb3BhcXVlbHkgYnkKKyAgICAgICAgIyBwcmludF90ZXN0X3Jlc3VsdCgpIHdoZW4gdHJh
Y2luZywgYW5kIHVzdWFsbHkgd2UgZG9uJ3Qgd2FudAorICAgICAgICAjIHRvIHRlc3Qgd2hhdCBl
eGFjdGx5IGlzIHByaW50ZWQsIGp1c3QgdGhhdCBzb21ldGhpbmcKKyAgICAgICAgIyB3YXMgcHJp
bnRlZCAob3IgdGhhdCBub3RoaW5nIHdhcyBwcmludGVkKS4KKyAgICAgICAgIworICAgICAgICAj
IEZJWE1FOiB0aGlzIGlzIGFjdHVhbGx5IHNvbWUgZ29vZnkgbGF5ZXJpbmc7IGl0IHdvdWxkIGJl
IG5pY2UKKyAgICAgICAgIyB3ZSBjb3VsZCByZWZhY3RvciBpdCBzbyB0aGF0IHRoZSBhcmdzIHdl
cmVuJ3QgcmVkdW5kYW50LiBNYXliZQorICAgICAgICAjIHRoZSBUZXN0UmVzdWx0IHNob3VsZCBj
b250YWluIHdoYXQgd2FzIGV4cGVjdGVkLCBhbmQgdGhlCisgICAgICAgICMgc3RyaW5ncyBjb3Vs
ZCBiZSBkZXJpdmVkIGZyb20gdGhlIFRlc3RSZXN1bHQ/CisgICAgICAgIHByaW50ZXIsIGVyciwg
b3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICBy
ZXN1bHQgPSBzZWxmLmdldF9yZXN1bHQoJ3Bhc3Nlcy9pbWFnZS5odG1sJykKKyAgICAgICAgcHJp
bnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPUZhbHNlLCBleHBfc3RyPScn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBlcnIsIG91
dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ3VuZXhwZWN0ZWQnXSkKKyAgICAgICAg
cHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPVRydWUsIGV4cF9zdHI9
JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorICAgICAgICBwcmludGVyLnByaW50X3Rl
c3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2UsIGV4cF9zdHI9JycsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoZXJyLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJyAgcGFzc2VzL2lt
YWdlLmh0bWwgLT4gdW5leHBlY3RlZCBwYXNzXG4nXSkKKworICAgICAgICBwcmludGVyLCBlcnIs
IG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAg
ICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkPVRydWUsIGV4cF9z
dHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIucHJp
bnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1GYWxzZSwgZXhwX3N0cj0nJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhlcnIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsnICBwYXNz
ZXMvaW1hZ2UuaHRtbCAtPiB1bmV4cGVjdGVkIHBhc3NcbiddKQorCisgICAgICAgIHByaW50ZXIs
IGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnbm90aGluZyddKQorICAg
ICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2UsIGV4
cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorCisgICAgICAgIHByaW50ZXIs
IGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFjZS11bmV4cGVjdGVkJ10pCisgICAg
ICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1UcnVlLCBleHBf
c3RyPScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBl
cnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhY2UtdW5leHBlY3RlZCddKQorICAgICAg
ICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2UsIGV4cF9z
dHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLCBl
cnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhY2UtdW5leHBlY3RlZCddKQorICAgICAg
ICByZXN1bHQgPSBzZWxmLmdldF9yZXN1bHQoInBhc3Nlcy90ZXh0Lmh0bWwiKQorICAgICAgICBw
cmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2UsIGV4cF9zdHI9
JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0nJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKworICAgICAgICBlcnIucmVzZXQoKQor
ICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2Us
IGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3N0cj0n
JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKworICAgICAgICBwcmlu
dGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ3RyYWNlLWV2ZXJ5
dGhpbmcnXSkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5nZXRfcmVzdWx0KCdwYXNzZXMvaW1hZ2Uu
aHRtbCcpCisgICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3Rl
ZD1UcnVlLCBleHBfc3RyPScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv
dF9zdHI9JycpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZ2V0X3Jlc3VsdCgnZmFpbHVyZXMvZXhw
ZWN0ZWQvbWlzc2luZ190ZXh0Lmh0bWwnKQorICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVz
dWx0KHJlc3VsdCwgZXhwZWN0ZWQ9VHJ1ZSwgZXhwX3N0cj0nJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQorICAgICAgICByZXN1bHQgPSBzZWxmLmdldF9y
ZXN1bHQoJ2ZhaWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfY2hlY2suaHRtbCcpCisgICAgICAgIHBy
aW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1UcnVlLCBleHBfc3RyPScn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9zdHI9JycpCisgICAgICAg
IHJlc3VsdCA9IHNlbGYuZ2V0X3Jlc3VsdCgnZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ19pbWFn
ZS5odG1sJykKKyAgICAgICAgcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVj
dGVkPVRydWUsIGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z290X3N0cj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKworICAg
ICAgICBlcnIucmVzZXQoKQorICAgICAgICBwcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3Vs
dCwgZXhwZWN0ZWQ9RmFsc2UsIGV4cF9zdHI9JycsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ290X3N0cj0nJykKKworICAgIGRlZiB0ZXN0X3ByaW50X3Byb2dyZXNzKHNlbGYp
OgorICAgICAgICBleHBlY3RhdGlvbnMgPSAnJworCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0
ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICB0ZXN0
cyA9IFsncGFzc2VzL3RleHQuaHRtbCcsICdmYWlsdXJlcy9leHBlY3RlZC90aW1lb3V0Lmh0bWwn
LAorICAgICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0ZWQvY3Jhc2guaHRtbCddCisgICAg
ICAgIHBhdGhzLCBycywgZXhwID0gc2VsZi5nZXRfcmVzdWx0X3N1bW1hcnkodGVzdHMsIGV4cGVj
dGF0aW9ucykKKworICAgICAgICAjIEZpcnN0LCB0ZXN0IHRoYXQgd2UgcHJpbnQgbm90aGluZy4K
KyAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgRmFsc2UsIHBhdGhzKQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShl
cnIuZW1wdHkoKSkKKworICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBUcnVlLCBw
YXRocykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorICAgICAgICBzZWxm
LmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgc2VsZi50aW1lcyA9IFsxLCAyLCAx
MiwgMTMsIDE0LCAyMywgMzNdCisKKyAgICAgICAgZGVmIG1vY2tfdGltZSgpOgorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYudGltZXMucG9wKDApCisKKyAgICAgICAgb3JpZ190aW1lID0gdGltZS50
aW1lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRpbWUudGltZSA9IG1vY2tfdGltZQorCisg
ICAgICAgICAgICAjIFRlc3QgcHJpbnRpbmcgcHJvZ3Jlc3MgdXBkYXRlcyB0byBhIGZpbGUuCisg
ICAgICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50
JywgJ29uZS1saW5lLXByb2dyZXNzJ10pCisgICAgICAgICAgICBwcmludGVyLnByaW50X3Byb2dy
ZXNzKHJzLCBGYWxzZSwgcGF0aHMpCisgICAgICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNz
KHJzLCBGYWxzZSwgcGF0aHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5
KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAg
ICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIEZhbHNlLCBwYXRocykKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFs
c2UoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgICAgICBv
dXQucmVzZXQoKQorICAgICAgICAgICAgcHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgVHJ1ZSwg
cGF0aHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisgICAgICAg
ICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgICAgIHByaW50ZXIu
cHJpbnRfcHJvZ3Jlc3MocnMsIFRydWUsIHBhdGhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKG91dC5lbXB0eSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHko
KSkKKworICAgICAgICAgICAgIyBOb3cgcmVjb25maWd1cmUgdGhlIHByaW50ZXIgdG8gdGVzdCBw
cmludGluZyB0byBhIFRUWSBpbnN0ZWFkIG9mIGEgZmlsZS4KKyAgICAgICAgICAgIHNlbGYudGlt
ZXMgPSBbMSwgMS4wMSwgMiwgM10KKyAgICAgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2Vs
Zi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnb25lLWxpbmUtcHJvZ3Jlc3MnXSwgdHR5PVRydWUp
CisgICAgICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBGYWxzZSwgcGF0aHMpCisg
ICAgICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBGYWxzZSwgcGF0aHMpCisgICAg
ICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisgICAgICAgICAgICBzZWxmLmFz
c2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAgICAgICAgICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jl
c3MocnMsIEZhbHNlLCBwYXRocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1w
dHkoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisKKyAgICAg
ICAgICAgIGVyci5yZXNldCgpCisgICAgICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICAgICAg
cHJpbnRlci5wcmludF9wcm9ncmVzcyhycywgVHJ1ZSwgcGF0aHMpCisgICAgICAgICAgICBzZWxm
LmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVy
ci5lbXB0eSgpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGltZS50aW1lID0gb3Jp
Z190aW1lCisKKyAgICBkZWYgdGVzdF93cml0ZV9ub3RoaW5nKHNlbGYpOgorICAgICAgICBwcmlu
dGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ25vdGhpbmcnXSkK
KyAgICAgICAgcHJpbnRlci53cml0ZSgiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVy
ci5lbXB0eSgpKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfbWlzYyhzZWxmKToKKyAgICAgICAgcHJp
bnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdtaXNjJ10pCisg
ICAgICAgIHByaW50ZXIud3JpdGUoImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJy
LmVtcHR5KCkpCisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIHByaW50ZXIud3JpdGUoImZv
byIsICJjb25maWciKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisKKyAg
ICBkZWYgdGVzdF93cml0ZV9ldmVyeXRoaW5nKHNlbGYpOgorICAgICAgICBwcmludGVyLCBlcnIs
IG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAg
ICAgcHJpbnRlci53cml0ZSgiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1w
dHkoKSkKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgcHJpbnRlci53cml0ZSgiZm9vIiwg
ImNvbmZpZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisKKyAgICBk
ZWYgdGVzdF93cml0ZV92ZXJib3NlKHNlbGYpOgorICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9
IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXZlcmJvc2UnXSkKKyAgICAgICAgcHJpbnRlci53cml0ZSgi
Zm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBlcnIuZW1wdHkoKSBhbmQgImZvbyIg
aW4gZXJyLmdldCgpWzBdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisK
KyAgICBkZWYgdGVzdF9wcmludF91bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZik6CisgICAgICAgICMg
VGhpcyByb3V0aW5lIGlzIHRoZSBvbmx5IG9uZSB0aGF0IHByaW50cyBzdHVmZiB0aGF0IHRoZSBi
b3RzCisgICAgICAgICMgY2FyZSBhYm91dC4KKyAgICAgICAgIworICAgICAgICAjIEZJWE1FOiB0
aGVyZSdzIHNvbWUgd2VpcmQgbGF5ZXJpbmcgZ29pbmcgb24gaGVyZS4gSXQgc2VlbXMKKyAgICAg
ICAgIyBsaWtlIHdlIHNob3VsZG4ndCBiZSBib3RoIHVzaW5nIGFuIGV4cGVjdGF0aW9ucyBzdHJp
bmcgYW5kCisgICAgICAgICMgaGF2aW5nIHRvIHNwZWNpZnkgd2hldGhlciBvciBub3QgdGhlIHJl
c3VsdCB3YXMgZXhwZWN0ZWQuCisgICAgICAgICMgVGhpcyB3aG9sZSBzZXQgb2YgdGVzdHMgc2hv
dWxkIHByb2JhYmx5IGJlIHJld3JpdHRlbi4KKyAgICAgICAgIworICAgICAgICAjIEZJWE1FOiBQ
bHVzLCB0aGUgZmFjdCB0aGF0IHdlJ3JlIGhhdmluZyB0byBjYWxsIGludG8KKyAgICAgICAgIyBy
dW5fd2Via2l0X3Rlc3RzIGlzIGNsZWFybHkgYSBsYXllcmluZyBpbnZlcnNpb24uCisgICAgICAg
IGRlZiBnZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVkLCBwYXNzaW5nLCBmbGFreSk6Cisg
ICAgICAgICAgICAiIiJSZXR1cm4gYW4gdW5leHBlY3RlZCByZXN1bHRzIHN1bW1hcnkgbWF0Y2hp
bmcgdGhlIGlucHV0IGRlc2NyaXB0aW9uLgorCisgICAgICAgICAgICBUaGVyZSBhcmUgYSBsb3Qg
b2YgZGlmZmVyZW50IGNvbWJpbmF0aW9ucyBvZiB0ZXN0IHJlc3VsdHMgdGhhdAorICAgICAgICAg
ICAgY2FuIGJlIHRlc3RlZDsgdGhpcyByb3V0aW5lIHByb2R1Y2VzIHZhcmlvdXMgY29tYmluYXRp
b25zIGJhc2VkCisgICAgICAgICAgICBvbiB0aGUgdmFsdWVzIG9mIHRoZSBpbnB1dCBmbGFncy4K
KworICAgICAgICAgICAgQXJncworICAgICAgICAgICAgICAgIGV4cGVjdGVkOiB3aGV0aGVyIHRo
ZSB0ZXN0cyByYW4gYXMgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICBwYXNzaW5nOiB3aGV0aGVy
IHRoZSB0ZXN0cyBzaG91bGQgYWxsIHBhc3MKKyAgICAgICAgICAgICAgICBmbGFreTogd2hldGhl
ciB0aGUgdGVzdHMgc2hvdWxkIGJlIGZsYWt5IChpZiBGYWxzZSwgdGhleQorICAgICAgICAgICAg
ICAgICAgICBwcm9kdWNlIHRoZSBzYW1lIHJlc3VsdHMgb24gYm90aCBydW5zOyBpZiBUcnVlLCB0
aGV5CisgICAgICAgICAgICAgICAgICAgIGFsbCBwYXNzIG9uIHRoZSBzZWNvbmQgcnVuKS4KKwor
ICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBwYXRocywgcnMsIGV4cCA9IHNlbGYuZ2V0X3Jl
c3VsdF9zdW1tYXJ5KHRlc3RzLCBleHBlY3RhdGlvbnMpCisgICAgICAgICAgICBpZiBleHBlY3Rl
ZDoKKyAgICAgICAgICAgICAgICBycy5hZGQoc2VsZi5nZXRfcmVzdWx0KCdwYXNzZXMvdGV4dC5o
dG1sJywgdGVzdF9leHBlY3RhdGlvbnMuUEFTUyksIGV4cGVjdGVkKQorICAgICAgICAgICAgICAg
IHJzLmFkZChzZWxmLmdldF9yZXN1bHQoJ2ZhaWx1cmVzL2V4cGVjdGVkL3RpbWVvdXQuaHRtbCcs
IHRlc3RfZXhwZWN0YXRpb25zLlRJTUVPVVQpLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBy
cy5hZGQoc2VsZi5nZXRfcmVzdWx0KCdmYWlsdXJlcy9leHBlY3RlZC9jcmFzaC5odG1sJywgdGVz
dF9leHBlY3RhdGlvbnMuQ1JBU0gpLCBleHBlY3RlZCkKKyAgICAgICAgICAgIGVsaWYgcGFzc2lu
ZzoKKyAgICAgICAgICAgICAgICBycy5hZGQoc2VsZi5nZXRfcmVzdWx0KCdwYXNzZXMvdGV4dC5o
dG1sJyksIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHJzLmFkZChzZWxmLmdldF9yZXN1bHQo
J2ZhaWx1cmVzL2V4cGVjdGVkL3RpbWVvdXQuaHRtbCcpLCBleHBlY3RlZCkKKyAgICAgICAgICAg
ICAgICBycy5hZGQoc2VsZi5nZXRfcmVzdWx0KCdmYWlsdXJlcy9leHBlY3RlZC9jcmFzaC5odG1s
JyksIGV4cGVjdGVkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBycy5hZGQo
c2VsZi5nZXRfcmVzdWx0KCdwYXNzZXMvdGV4dC5odG1sJywgdGVzdF9leHBlY3RhdGlvbnMuVElN
RU9VVCksIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHJzLmFkZChzZWxmLmdldF9yZXN1bHQo
J2ZhaWx1cmVzL2V4cGVjdGVkL3RpbWVvdXQuaHRtbCcsIHRlc3RfZXhwZWN0YXRpb25zLkNSQVNI
KSwgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgcnMuYWRkKHNlbGYuZ2V0X3Jlc3VsdCgnZmFp
bHVyZXMvZXhwZWN0ZWQvY3Jhc2guaHRtbCcsIHRlc3RfZXhwZWN0YXRpb25zLlRJTUVPVVQpLCBl
eHBlY3RlZCkKKyAgICAgICAgICAgIHJldHJ5ID0gcnMKKyAgICAgICAgICAgIGlmIGZsYWt5Ogor
ICAgICAgICAgICAgICAgIHBhdGhzLCByZXRyeSwgZXhwID0gc2VsZi5nZXRfcmVzdWx0X3N1bW1h
cnkodGVzdHMsIGV4cGVjdGF0aW9ucykKKyAgICAgICAgICAgICAgICByZXRyeS5hZGQoc2VsZi5n
ZXRfcmVzdWx0KCdwYXNzZXMvdGV4dC5odG1sJyksIFRydWUpCisgICAgICAgICAgICAgICAgcmV0
cnkuYWRkKHNlbGYuZ2V0X3Jlc3VsdCgnZmFpbHVyZXMvZXhwZWN0ZWQvdGltZW91dC5odG1sJyks
IFRydWUpCisgICAgICAgICAgICAgICAgcmV0cnkuYWRkKHNlbGYuZ2V0X3Jlc3VsdCgnZmFpbHVy
ZXMvZXhwZWN0ZWQvY3Jhc2guaHRtbCcpLCBUcnVlKQorICAgICAgICAgICAgdW5leHBlY3RlZF9y
ZXN1bHRzID0gbWFuYWdlci5zdW1tYXJpemVfcmVzdWx0cyhzZWxmLl9wb3J0LCBleHAsIHJzLCBy
ZXRyeSwgdGVzdF90aW1pbmdzPXt9LCBvbmx5X3VuZXhwZWN0ZWQ9VHJ1ZSwgaW50ZXJydXB0ZWQ9
RmFsc2UpCisgICAgICAgICAgICByZXR1cm4gdW5leHBlY3RlZF9yZXN1bHRzCisKKyAgICAgICAg
dGVzdHMgPSBbJ3Bhc3Nlcy90ZXh0Lmh0bWwnLCAnZmFpbHVyZXMvZXhwZWN0ZWQvdGltZW91dC5o
dG1sJywgJ2ZhaWx1cmVzL2V4cGVjdGVkL2NyYXNoLmh0bWwnXQorICAgICAgICBleHBlY3RhdGlv
bnMgPSAnJworCisgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihb
Jy0tcHJpbnQnLCAnbm90aGluZyddKQorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3Vs
dHMoZXhwZWN0ZWQ9RmFsc2UsIHBhc3Npbmc9RmFsc2UsIGZsYWt5PUZhbHNlKQorICAgICAgICBw
cmludGVyLnByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1cikKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisK
KyAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcs
ICd1bmV4cGVjdGVkLXJlc3VsdHMnXSkKKworICAgICAgICAjIHRlc3QgZXZlcnl0aGluZyBydW5u
aW5nIGFzIGV4cGVjdGVkCisgICAgICAgIHVyID0gZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBl
Y3RlZD1UcnVlLCBwYXNzaW5nPUZhbHNlLCBmbGFreT1GYWxzZSkKKyAgICAgICAgcHJpbnRlci5w
cmludF91bmV4cGVjdGVkX3Jlc3VsdHModXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIu
ZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorCisgICAgICAg
ICMgdGVzdCBmYWlsdXJlcworICAgICAgICBlcnIucmVzZXQoKQorICAgICAgICBvdXQucmVzZXQo
KQorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQ9RmFsc2UsIHBh
c3Npbmc9RmFsc2UsIGZsYWt5PUZhbHNlKQorICAgICAgICBwcmludGVyLnByaW50X3VuZXhwZWN0
ZWRfcmVzdWx0cyh1cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQorICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKG91dC5lbXB0eSgpKQorCisgICAgICAgICMgdGVzdCB1bmV4
cGVjdGVkIGZsYWt5CisgICAgICAgIGVyci5yZXNldCgpCisgICAgICAgIG91dC5yZXNldCgpCisg
ICAgICAgIHVyID0gZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZD1GYWxzZSwgcGFzc2lu
Zz1GYWxzZSwgZmxha3k9VHJ1ZSkKKyAgICAgICAgcHJpbnRlci5wcmludF91bmV4cGVjdGVkX3Jl
c3VsdHModXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRGYWxzZShvdXQuZW1wdHkoKSkKKworICAgICAgICBlcnIucmVzZXQoKQorICAg
ICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3By
aW50ZXIoWyctLXByaW50JywgJ2V2ZXJ5dGhpbmcnXSkKKyAgICAgICAgdXIgPSBnZXRfdW5leHBl
Y3RlZF9yZXN1bHRzKGV4cGVjdGVkPUZhbHNlLCBwYXNzaW5nPUZhbHNlLCBmbGFreT1GYWxzZSkK
KyAgICAgICAgcHJpbnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModXIpCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXQu
ZW1wdHkoKSkKKworICAgICAgICBleHBlY3RhdGlvbnMgPSAiIiIKK0JVR1ggOiBmYWlsdXJlcy9l
eHBlY3RlZC9jcmFzaC5odG1sID0gQ1JBU0gKK0JVR1ggOiBmYWlsdXJlcy9leHBlY3RlZC90aW1l
b3V0Lmh0bWwgPSBUSU1FT1VUCisiIiIKKyAgICAgICAgZXJyLnJlc2V0KCkKKyAgICAgICAgb3V0
LnJlc2V0KCkKKyAgICAgICAgdXIgPSBnZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVkPUZh
bHNlLCBwYXNzaW5nPUZhbHNlLCBmbGFreT1GYWxzZSkKKyAgICAgICAgcHJpbnRlci5wcmludF91
bmV4cGVjdGVkX3Jlc3VsdHModXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHko
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXQuZW1wdHkoKSkKKworICAgICAgICBlcnIu
cmVzZXQoKQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVk
X3Jlc3VsdHMoZXhwZWN0ZWQ9RmFsc2UsIHBhc3Npbmc9VHJ1ZSwgZmxha3k9RmFsc2UpCisgICAg
ICAgIHByaW50ZXIucHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVyKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3V0LmVtcHR5
KCkpCisKKyAgICAgICAgIyBUZXN0IGhhbmRsaW5nIG9mIC0tdmVyYm9zZSBhcyB3ZWxsLgorICAg
ICAgICBlcnIucmVzZXQoKQorICAgICAgICBvdXQucmVzZXQoKQorICAgICAgICBwcmludGVyLCBl
cnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXZlcmJvc2UnXSkKKyAgICAgICAgdXIgPSBn
ZXRfdW5leHBlY3RlZF9yZXN1bHRzKGV4cGVjdGVkPUZhbHNlLCBwYXNzaW5nPUZhbHNlLCBmbGFr
eT1GYWxzZSkKKyAgICAgICAgcHJpbnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModXIpCisg
ICAgICAgICMgRklYTUU6IGRlYnVnIG91dHB1dCBmcm9tIHRoZSBwb3J0IGFuZCBzY20gb2JqZWN0
cyBtYXkgb3IgbWF5IG5vdCBnbworICAgICAgICAjIHRvIHN0ZGVyciwgc28gdGhlcmUncyBubyBw
b2ludCBpbiB0ZXN0aW5nIGl0cyBjb250ZW50cyBoZXJlLgorICAgICAgICBzZWxmLmFzc2VydEZh
bHNlKG91dC5lbXB0eSgpKQorCisgICAgZGVmIHRlc3RfcHJpbnRfdW5leHBlY3RlZF9yZXN1bHRz
X2J1aWxkYm90KHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBUZXN0IHRoYXQgcHJpbnRfdW5leHBl
Y3RlZF9yZXN1bHRzKCkgcHJvZHVjZXMgdGhlIHByaW50ZXIgdGhlCisgICAgICAgICMgYnVpbGRi
b3QgaXMgZXhwZWN0aW5nLgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5f
Xyc6CisgICAgdW5pdHRlc3QubWFpbigpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy92aWV3cy9wcmludGluZ191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy92aWV3cy9wcmludGluZ191bml0dGVzdC5w
eQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Zp
ZXdzL3ByaW50aW5nX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsMTEg
QEAgZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IGFycmF5X3N0cmVhbQogZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtIGltcG9ydCBsb2d0ZXN0aW5nCiBmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cyBpbXBvcnQgcG9ydAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMg
aW1wb3J0IG1hbmFnZXIKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdl
IGltcG9ydCBwcmludGluZwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2th
Z2UgaW1wb3J0IHJlc3VsdF9zdW1tYXJ5CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlv
dXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKIGZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCiBmcm9tIHdlYmtpdHB5
LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9yZXN1bHRzCitmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy52aWV3cyBpbXBvcnQgcHJpbnRpbmcKIAogCiBkZWYgZ2V0X29w
dGlvbnMoYXJncyk6Cg==
</data>
<flag name="review"
          id="94508"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>