<?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>170077</bug_id>
          
          <creation_ts>2017-03-24 14:59:16 -0700</creation_ts>
          <short_desc>Add a new test to ARES6</short_desc>
          <delta_ts>2017-04-03 12:05: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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1291009</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-24 14:59:16 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293728</commentid>
    <comment_count>1</comment_count>
      <attachid>306091</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-03 12:03:01 -0700</bug_when>
    <thetext>Created attachment 306091
patch for landing

Already rubber stamped by Filip.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293731</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-03 12:05:02 -0700</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/214828/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306091</attachid>
            <date>2017-04-03 12:03:01 -0700</date>
            <delta_ts>2017-04-03 12:03:01 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>346247</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTQ4MjcpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MiBAQAorMjAxNy0wNC0wMyAg
U2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBuZXcgdGVz
dCB0byBBUkVTNgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTcwMDc3CisKKyAgICAgICAgUnViYmVyIHN0YW1wZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgbmV3IHRlc3QgdG8gQVJFUzYuIFRoZSB0ZXN0IGlzIGNh
bGxlZCBCYWJ5bG9uLiBCYWJ5bG9uIGlzCisgICAgICAgIHRoZSBKYXZhU2NyaXB0IHBhcnNlciB0
aGF0IGlzIHBhcnQgb2YgdGhlIEJhYmVsIHRyYW5zcGlsZXIuIFRoZSB0ZXN0IHJ1bnMKKyAgICAg
ICAgdGhlIHBhcnNlciBvbiA0IGRpZmZlcmVudCBKUyBzY3JpcHRzLgorCisgICAgICAgICogQVJF
Uy02L0JhYnlsb246IEFkZGVkLgorICAgICAgICAqIEFSRVMtNi9CYWJ5bG9uL0FVVEhPUlM6IEFk
ZGVkLgorICAgICAgICAqIEFSRVMtNi9CYWJ5bG9uL2Fpci1ibG9iLmpzOiBBZGRlZC4KKyAgICAg
ICAgKFJlZyk6CisgICAgICAgIChSZWcuZnJvbVJlZyk6CisgICAgICAgIChSZWcucHJvdG90eXBl
LmdldCBpbmRleCk6CisgICAgICAgIChSZWcucHJvdG90eXBlLmdldCB0eXBlKToKKyAgICAgICAg
KFJlZy5wcm90b3R5cGUuZ2V0IG5hbWUpOgorICAgICAgICAoUmVnLnByb3RvdHlwZS5nZXQgaXND
YWxsZWVTYXZlKToKKyAgICAgICAgKFJlZy5wcm90b3R5cGUuZ2V0IGlzUmVnKToKKyAgICAgICAg
KFJlZy5wcm90b3R5cGUuaGFzaCk6CisgICAgICAgIChSZWcucHJvdG90eXBlLnRvU3RyaW5nKToK
KyAgICAgICAgKFJlZy5leHRyYWN0KToKKyAgICAgICAgKFJlZy5mb3JFYWNoRmFzdCk6CisgICAg
ICAgIChSZWcuZm9yRWFjaCk6CisgICAgICAgIChuZXdHUFIpOgorICAgICAgICAoUmVnLmdwcnMu
UmVnLmZwcnMuUmVnLmNhbGxlZVNhdmVHUFJzLlJlZy5jYWxsZWVTYXZlRlBScy5SZWcuY2FsbGVl
U2F2ZXMpOgorICAgICAgICAqIEFSRVMtNi9CYWJ5bG9uL2JhYnlsb24tYmxvYi5qczogQWRkZWQu
CisgICAgICAgIChleHBvcnQuZGVmYXVsdC5QYXJzZXIpOgorICAgICAgICAoZXhwb3J0LmRlZmF1
bHQuUGFyc2VyLnByb3RvdHlwZS5pc1Jlc2VydmVkV29yZCk6CisgICAgICAgIChleHBvcnQuZGVm
YXVsdC5QYXJzZXIucHJvdG90eXBlLmhhc1BsdWdpbik6CisgICAgICAgIChleHBvcnQuZGVmYXVs
dC5QYXJzZXIucHJvdG90eXBlLmV4dGVuZCk6CisgICAgICAgIChleHBvcnQuZGVmYXVsdC5QYXJz
ZXIucHJvdG90eXBlLmxvYWRQbHVnaW5zKToKKyAgICAgICAgKGV4cG9ydC5kZWZhdWx0LlBhcnNl
ci5wcm90b3R5cGUucGFyc2UpOgorICAgICAgICAqIEFSRVMtNi9CYWJ5bG9uL2Jhc2ljLWJsb2Iu
anM6IEFkZGVkLgorICAgICAgICAoQmFzaWMuTnVtYmVyQXBwbHkpOgorICAgICAgICAoQmFzaWMu
VmFyaWFibGUpOgorICAgICAgICAoQmFzaWMuQ29uc3QpOgorICAgICAgICAoQmFzaWMuTnVtYmVy
UG93KToKKyAgICAgICAgKEJhc2ljLk51bWJlck11bCk6CisgICAgICAgIChCYXNpYy5OdW1iZXJE
aXYpOgorICAgICAgICAoQmFzaWMuTnVtYmVyTmVnKToKKyAgICAgICAgKEJhc2ljLk51bWJlckFk
ZCk6CisgICAgICAgIChCYXNpYy5OdW1iZXJTdWIpOgorICAgICAgICAoQmFzaWMuU3RyaW5nVmFy
KToKKyAgICAgICAgKEJhc2ljLkVxdWFscyk6CisgICAgICAgIChCYXNpYy5Ob3RFcXVhbHMpOgor
ICAgICAgICAoQmFzaWMuTGVzc1RoYW4pOgorICAgICAgICAoQmFzaWMuR3JlYXRlclRoYW4pOgor
ICAgICAgICAoQmFzaWMuTGVzc0VxdWFsKToKKyAgICAgICAgKEJhc2ljLkdyZWF0ZXJFcXVhbCk6
CisgICAgICAgIChCYXNpYy5Hb1RvKToKKyAgICAgICAgKEJhc2ljLkdvU3ViKToKKyAgICAgICAg
KEJhc2ljLkRlZik6CisgICAgICAgIChCYXNpYy5MZXQpOgorICAgICAgICAoQmFzaWMuSWYpOgor
ICAgICAgICAoQmFzaWMuUmV0dXJuKToKKyAgICAgICAgKEJhc2ljLlN0b3ApOgorICAgICAgICAo
QmFzaWMuT24pOgorICAgICAgICAoc2lkZVN0YXRlLnNob3VsZFN0b3ApOgorICAgICAgICAoQmFz
aWMuRm9yKToKKyAgICAgICAgKEJhc2ljLk5leHQpOgorICAgICAgICAoQmFzaWMuUHJpbnQpOgor
ICAgICAgICAoQmFzaWMuSW5wdXQpOgorICAgICAgICAoQmFzaWMuUmVhZCk6CisgICAgICAgIChC
YXNpYy5SZXN0b3JlKToKKyAgICAgICAgKEJhc2ljLkRpbSk6CisgICAgICAgIChCYXNpYy5SYW5k
b21pemUpOgorICAgICAgICAoQmFzaWMuRW5kKToKKyAgICAgICAgKEJhc2ljLlByb2dyYW0pOgor
ICAgICAgICAqIEFSRVMtNi9CYWJ5bG9uL2JlbmNobWFyay5qczogQWRkZWQuCisgICAgICAgICh0
aGlzLnBlcmZvcm1hbmNlLnBlcmZvcm1hbmNlLm5vdy5jdXJyZW50VGltZSk6CisgICAgICAgIChl
bHNlLnRoaXMucHJlY2lzZVRpbWUuY3VycmVudFRpbWUpOgorICAgICAgICAoZWxzZS5jdXJyZW50
VGltZSk6CisgICAgICAgIChCYWJ5bG9uQmVuY2htYXJrLmFwcGVuZFNvdXJjZSk6CisgICAgICAg
IChCYWJ5bG9uQmVuY2htYXJrKToKKyAgICAgICAgKEJhYnlsb25CZW5jaG1hcmsucHJvdG90eXBl
LnJ1bkl0ZXJhdGlvbi5wYXJzZSk6CisgICAgICAgIChCYWJ5bG9uQmVuY2htYXJrLnByb3RvdHlw
ZS5ydW5JdGVyYXRpb24ucGFyc2VFeHByZXNzaW9uKToKKyAgICAgICAgKEJhYnlsb25CZW5jaG1h
cmsucHJvdG90eXBlLnJ1bkl0ZXJhdGlvbik6CisgICAgICAgIChydW5CZW5jaG1hcmspOgorICAg
ICAgICAqIEFSRVMtNi9CYWJ5bG9uL2luZGV4LmpzOiBBZGRlZC4KKyAgICAgICAgKGlzSWRlbnRp
ZmllclN0YXJ0KToKKyAgICAgICAgKGlzSWRlbnRpZmllckNoYXIpOgorICAgICAgICAoaXNOZXdM
aW5lKToKKyAgICAgICAgKFBvc2l0aW9uKToKKyAgICAgICAgKFNvdXJjZUxvY2F0aW9uKToKKyAg
ICAgICAgKGdldExpbmVJbmZvKToKKyAgICAgICAgKFRva2VuVHlwZSk6CisgICAgICAgIChLZXl3
b3JkVG9rZW5UeXBlKToKKyAgICAgICAgKEJpbm9wVG9rZW5UeXBlKToKKyAgICAgICAgKFRva0Nv
bnRleHQpOgorICAgICAgICAodHQucGFyZW5SLnVwZGF0ZUNvbnRleHQudHQuYnJhY2VSLnVwZGF0
ZUNvbnRleHQpOgorICAgICAgICAodHQubmFtZS51cGRhdGVDb250ZXh0KToKKyAgICAgICAgKHR0
LmJyYWNlTC51cGRhdGVDb250ZXh0KToKKyAgICAgICAgKHR0LmRvbGxhckJyYWNlTC51cGRhdGVD
b250ZXh0KToKKyAgICAgICAgKHR0LnBhcmVuTC51cGRhdGVDb250ZXh0KToKKyAgICAgICAgKHR0
LmluY0RlYy51cGRhdGVDb250ZXh0KToKKyAgICAgICAgKHR0Ll9mdW5jdGlvbi51cGRhdGVDb250
ZXh0KToKKyAgICAgICAgKHR0LmJhY2tRdW90ZS51cGRhdGVDb250ZXh0KToKKyAgICAgICAgKFN0
YXRlLnByb3RvdHlwZS5pbml0KToKKyAgICAgICAgKFN0YXRlLnByb3RvdHlwZS5jdXJQb3NpdGlv
bik6CisgICAgICAgIChTdGF0ZS5wcm90b3R5cGUuY2xvbmUpOgorICAgICAgICAoU3RhdGUpOgor
ICAgICAgICAoVG9rZW4pOgorICAgICAgICAoY29kZVBvaW50VG9TdHJpbmcpOgorICAgICAgICAo
VG9rZW5pemVyKToKKyAgICAgICAgKFRva2VuaXplci5wcm90b3R5cGUubmV4dCk6CisgICAgICAg
IChUb2tlbml6ZXIucHJvdG90eXBlLmVhdCk6CisgICAgICAgIChUb2tlbml6ZXIucHJvdG90eXBl
Lm1hdGNoKToKKyAgICAgICAgKFRva2VuaXplci5wcm90b3R5cGUuaXNLZXl3b3JkKToKKyAgICAg
ICAgKFRva2VuaXplci5wcm90b3R5cGUubG9va2FoZWFkKToKKyAgICAgICAgKFRva2VuaXplci5w
cm90b3R5cGUuc2V0U3RyaWN0KToKKyAgICAgICAgKFRva2VuaXplci5wcm90b3R5cGUuY3VyQ29u
dGV4dCk6CisgICAgICAgIChUb2tlbml6ZXIucHJvdG90eXBlLm5leHRUb2tlbik6CisgICAgICAg
IChUb2tlbml6ZXIucHJvdG90eXBlLnJlYWRUb2tlbik6CisgICAgICAgIChUb2tlbml6ZXIucHJv
dG90eXBlLmZ1bGxDaGFyQ29kZUF0UG9zKToKKyAgICAgICAgKFRva2VuaXplci5wcm90b3R5cGUu
cHVzaENvbW1lbnQpOgorICAgICAgICAoVG9rZW5pemVyLnByb3RvdHlwZS5za2lwQmxvY2tDb21t
ZW50KToKKyAgICAgICAgKFRva2VuaXplci5wcm90b3R5cGUuc2tpcExpbmVDb21tZW50KToKKyAg
ICAgICAgKFRva2VuaXplci5wcm90b3R5cGUuc2tpcFNwYWNlKToKKyAgICAgICAgKFRva2VuaXpl
ci5wcm90b3R5cGUuZmluaXNoVG9rZW4pOgorICAgICAgICAoVG9rZW5pemVyLnByb3RvdHlwZS5y
ZWFkVG9rZW5fZG90KToKKyAgICAgICAgKFRva2VuaXplci5wcm90b3R5cGUucmVhZFRva2VuX3Ns
YXNoKToKKyAgICAgICAgKFRva2VuaXplci5wcm90b3R5cGUucmVhZFRva2VuX211bHRfbW9kdWxv
KToKKyAgICAgICAgKFRva2VuaXplci5wcm90b3R5cGUucmVhZFRva2VuX3BpcGVfYW1wKToKKyAg
ICAgICAgKFRva2VuaXplci5wcm90b3R5cGUucmVhZFRva2VuX2NhcmV0KToKKyAgICAgICAgKFRv
a2VuaXplci5wcm90b3R5cGUucmVhZFRva2VuX3BsdXNfbWluKToKKyAgICAgICAgKFRva2VuaXpl
ci5wcm90b3R5cGUucmVhZFRva2VuX2x0X2d0KToKKyAgICAgICAgKFRva2VuaXplci5wcm90b3R5
cGUucmVhZFRva2VuX2VxX2V4Y2wpOgorICAgICAgICAoVG9rZW5pemVyLnByb3RvdHlwZS5nZXRU
b2tlbkZyb21Db2RlKToKKyAgICAgICAgKFRva2VuaXplci5wcm90b3R5cGUuZmluaXNoT3ApOgor
ICAgICAgICAoVG9rZW5pemVyLnByb3RvdHlwZS5yZWFkUmVnZXhwKToKKyAgICAgICAgKFRva2Vu
aXplci5wcm90b3R5cGUucmVhZEludCk6CisgICAgICAgIChUb2tlbml6ZXIucHJvdG90eXBlLnJl
YWRSYWRpeE51bWJlcik6CisgICAgICAgIChUb2tlbml6ZXIucHJvdG90eXBlLnJlYWROdW1iZXIp
OgorICAgICAgICAoVG9rZW5pemVyLnByb3RvdHlwZS5yZWFkQ29kZVBvaW50KToKKyAgICAgICAg
KFRva2VuaXplci5wcm90b3R5cGUucmVhZFN0cmluZyk6CisgICAgICAgIChUb2tlbml6ZXIucHJv
dG90eXBlLnJlYWRUbXBsVG9rZW4pOgorICAgICAgICAoVG9rZW5pemVyLnByb3RvdHlwZS5yZWFk
RXNjYXBlZENoYXIpOgorICAgICAgICAoVG9rZW5pemVyLnByb3RvdHlwZS5yZWFkSGV4Q2hhcik6
CisgICAgICAgIChUb2tlbml6ZXIucHJvdG90eXBlLnJlYWRXb3JkMSk6CisgICAgICAgIChUb2tl
bml6ZXIucHJvdG90eXBlLnJlYWRXb3JkKToKKyAgICAgICAgKFRva2VuaXplci5wcm90b3R5cGUu
YnJhY2VJc0Jsb2NrKToKKyAgICAgICAgKFRva2VuaXplci5wcm90b3R5cGUudXBkYXRlQ29udGV4
dCk6CisgICAgICAgIChnZXRPcHRpb25zKToKKyAgICAgICAgKHByb3RvdHlwZS5pc1Jlc2VydmVk
V29yZCk6CisgICAgICAgIChwcm90b3R5cGUuaGFzUGx1Z2luKToKKyAgICAgICAgKHByb3RvdHlw
ZS5leHRlbmQpOgorICAgICAgICAocHJvdG90eXBlLmxvYWRQbHVnaW5zKToKKyAgICAgICAgKHBy
b3RvdHlwZS5wYXJzZSk6CisgICAgICAgIChsYXN0KToKKyAgICAgICAgKHBwLmFkZENvbW1lbnQp
OgorICAgICAgICAocHAucHJvY2Vzc0NvbW1lbnQpOgorICAgICAgICAocHAuY2hlY2tQcm9wQ2xh
c2gpOgorICAgICAgICAocHAuZ2V0RXhwcmVzc2lvbik6CisgICAgICAgIChwcC5wYXJzZUV4cHJl
c3Npb24pOgorICAgICAgICAocHAucGFyc2VNYXliZUFzc2lnbik6CisgICAgICAgIChwb3Muc2V0
IGkpOgorICAgICAgICAqIEFSRVMtNi9CYWJ5bG9uL2luc3BlY3Rvci1ibG9iLmpzOiBBZGRlZC4K
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS5nZXQgcGFyc2VkU3VjY2Vzc2Z1bGx5
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS5mb3JF
YWNoTm9kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5
cGUuZmlsdGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3Rv
dHlwZS5jb250YWluZXJzT2ZPZmZzZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5
bnRheFRyZWUucHJvdG90eXBlLmZpbHRlckJ5UmFuZ2UuZmlsdGVyRm9yTm9kZXNJblJhbmdlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS5maWx0ZXJC
eVJhbmdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlw
ZS5jb250YWluc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50LnJlbW92ZUZ1bmN0aW9uc0ZpbHRlcik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUuY29udGFp
bnNOb25FbXB0eVJldHVyblN0YXRlbWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0
U3ludGF4VHJlZS5mdW5jdGlvblJldHVybkRpdm90KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS51cGRhdGVUeXBlcyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUuX2dhdGhlcklkZW50aWZpZXJzSW5EZWNs
YXJhdGlvbi5nYXRoZXJJZGVudGlmaWVycyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0
U3ludGF4VHJlZS5wcm90b3R5cGUuX2dhdGhlcklkZW50aWZpZXJzSW5EZWNsYXJhdGlvbik6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUuX2RlZmF1bHRQ
YXJzZXJTdGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90
b3R5cGUuX3JlY3Vyc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUu
cHJvdG90eXBlLl9yZWN1cnNlQXJyYXkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5
bnRheFRyZWUucHJvdG90eXBlLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUpOgorICAgICAgICAq
IEFSRVMtNi9hYm91dC5odG1sOgorICAgICAgICAqIEFSRVMtNi9iYWJ5bG9uX2JlbmNobWFyay5q
czogQWRkZWQuCisgICAgICAgICogQVJFUy02L2NsaS5qczoKKyAgICAgICAgKiBBUkVTLTYvZ2x1
ZS5qczoKKyAgICAgICAgKiBBUkVTLTYvaW5kZXguaHRtbDoKKyAgICAgICAgKiBBUkVTLTYvcmVz
dWx0cy5qczoKKyAgICAgICAgKFJlc3VsdHMucHJvdG90eXBlLnJlcG9ydFJlc3VsdCk6CisgICAg
ICAgIChSZXN1bHRzLnByb3RvdHlwZS5yZXBvcnRSZXN1bHQuYXZlcmFnZUFib3ZlUGVyY2VudGls
ZSk6IERlbGV0ZWQuCisgICAgICAgICogQVJFUy02L3N0eWxlcy5jc3M6CisgICAgICAgICgudGVz
dCk6CisgICAgICAgIChAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc4NHB4KSk6
CisKIDIwMTctMDMtMjkgIFphbGFuIEJ1anRhcyA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFtBcmFiaWMgdGV4dF0gQWRkIHdoaXRlc3BhY2UgcHJlc2VydmUvd29yZCB3cmFwIHBlcmZvcm1h
bmNlIHRlc3QuCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0FSRVMtNi9hYm91dC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQVJFUy02L2Fib3V0Lmh0bWwJKHJldmlzaW9uIDIx
NDgyNikKKysrIFBlcmZvcm1hbmNlVGVzdHMvQVJFUy02L2Fib3V0Lmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTE2LDE1ICsxNiwyMiBAQAogICAgIAogICAgICAgICA8aDI+QWJvdXQgdGhlIFRlc3Rz
PC9oMj4KICAgICAgICAgCi0gICAgICAgIDxwPkFSRVMtNiBtZWFzdXJlcyB0aGUgZXhlY3V0aW9u
IHRpbWUgb2YgSmF2YVNjcmlwdCYjODIxNztzIG5ld2VzdCBmZWF0dXJlcywgaW5jbHVkaW5nIHN5
bWJvbHMsIGZvci1vZiwgYXJyb3cgZnVuY3Rpb25zLCBNYXAvU2V0L1dlYWtNYXAsIGxldC9jb25z
dCwgY2xhc3NlcywgcHJveGllcywgc3RyaW5nIGludGVycG9sYXRpb24sIGRlc3RydWN0dXJpbmcs
IGRlZmF1bHQgYXJndW1lbnRzLCBzcHJlYWQsIHRhaWwgY2FsbHMsIGFuZCBnZW5lcmF0b3JzLiBB
UkVTLTYgY29tcHJpc2VzIHR3byBzdWItdGVzdHM6IEFpciBhbmQgQmFzaWMuPC9wPgorICAgICAg
ICA8cD5BUkVTLTYgbWVhc3VyZXMgdGhlIGV4ZWN1dGlvbiB0aW1lIG9mIEphdmFTY3JpcHQmIzgy
MTc7cyBuZXdlc3QgZmVhdHVyZXMsIGluY2x1ZGluZyBzeW1ib2xzLCBmb3Itb2YsIGFycm93IGZ1
bmN0aW9ucywgTWFwL1NldC9XZWFrTWFwLCBsZXQvY29uc3QsIGNsYXNzZXMsIHByb3hpZXMsIHN0
cmluZyBpbnRlcnBvbGF0aW9uLCBkZXN0cnVjdHVyaW5nLCBkZWZhdWx0IGFyZ3VtZW50cywgc3By
ZWFkLCB0YWlsIGNhbGxzLCBhbmQgZ2VuZXJhdG9ycy4gQVJFUy02IGlzIGNvbXByaXNlZCBvZiB0
aHJlZSBzdWItdGVzdHM6IEFpciwgQmFzaWMsIGFuZCBCYWJ5bG9uLjwvcD4KIAogICAgICAgICA8
cD5BaXIgaXMgYW4gRVMyMDE1IHBvcnQgb2YgdGhlIDxhIGhyZWY9Imh0dHBzOi8vd2Via2l0Lm9y
Zy9ibG9nLzU4NTIvaW50cm9kdWNpbmctdGhlLWIzLWppdC1jb21waWxlci8iPldlYktpdCBCMyBK
SVQ8L2E+JiM4MjE3O3MgPGEgaHJlZj0iaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0
LzIwMTc4MyI+PGNvZGU+QWlyOjphbGxvY2F0ZVN0YWNrPC9jb2RlPiBwaGFzZTwvYT4uIFRoaXMg
Y29kZSBpcyBhIGhlYXZ5IHVzZXIgb2YgTWFwLCBTZXQsIGNsYXNzZXMsIHNwcmVhZCwgYW5kIGZv
ci1vZi4gVGhlIGJlbmNobWFyayBydW5zIDxjb2RlPmFsbG9jYXRlU3RhY2s8L2NvZGU+IG9uIGhv
dCBmdW5jdGlvbiBib2RpZXMgZnJvbSBvdGhlciBwb3B1bGFyIEphdmFTY3JpcHQgYmVuY2htYXJr
czogPGNvZGU+ZXhlY3V0ZUl0ZXJhdGlvbjwvY29kZT4gZnJvbSA8YSBocmVmPSJodHRwczovL2Rl
dmVsb3BlcnMuZ29vZ2xlLmNvbS9vY3RhbmUvIj5PY3RhbmU8L2E+L0dhbWVib3ksIDxjb2RlPmdh
dXNzaWFuQmx1cjwvY29kZT4gZnJvbSA8YSBocmVmPSJodHRwOi8va3Jha2VuYmVuY2htYXJrLm1v
emlsbGEub3JnIj5LcmFrZW48L2E+LCBhbmQgPGNvZGU+c2NhbklkZW50aWZpZXI8L2NvZGU+IGZy
b20gT2N0YW5lL1R5cGVzY3JpcHQuIEFpciBhbHNvIHJ1bnMgPGNvZGU+YWxsb2NhdGVTdGFjazwv
Y29kZT4gb24gYSBob3QgZnVuY3Rpb24gZnJvbSBBaXIgaXRzZWxmLiA8YSBocmVmPSJodHRwczov
L3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvQVJFUy02L0Fp
cj9yZXY9MjExNjk3Ij5Ccm93c2UgdGhlIHNvdXJjZS48L2E+PC9wPgogCiAgICAgICAgIDxwPkJh
c2ljIGlzIGFuIDxhIGhyZWY9Imh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yMDI0
NDYiPkVTMjAxNSBpbXBsZW1lbnRhdGlvbjwvYT4gb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cu
ZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMvZmlsZXMvRUNNQS1TVC1XSVRIRFJB
V04vRUNNQS01NSwlMjAxc3QlMjBFZGl0aW9uLCUyMEphbnVhcnklMjAxOTc4LnBkZiI+RUNNQS01
NSBCQVNJQyBzdGFuZGFyZDwvYT4uIEJBU0lDIHdhcyBhbiBpbnRlcmFjdGl2ZSBsYW5ndWFnZSBm
cm9tIHRoZSBzdGFydCwgc28gb3VyIGltcGxlbWVudGF0aW9uIHVzZXMgZ2VuZXJhdG9yIGZ1bmN0
aW9ucyBmb3IgdGhlIGVudGlyZSBpbnRlcnByZXRlci4gV2hlbiB0aGUgQkFTSUMgcHJvZ3JhbSBz
YXlzIDxjb2RlPklOUFVUPC9jb2RlPiwgb3VyIGludGVycHJldGVyIHNheXMgPGNvZGU+eWllbGQ8
L2NvZGU+LiBUaGlzIGFsbG93cyB1c2VycyBvZiB0aGUgaW50ZXJwcmV0ZXIgdG8gZWFzaWx5IGlu
dGVncmF0ZSBpdCBpbnRvIGEgcnVubG9vcC4gQmFzaWMgYWxzbyB1c2VzIGNsYXNzZXMsIE1hcCwg
YW5kIFdlYWtNYXAuIFRoZSBiZW5jaG1hcmsgcnVucyBhIGhhbmRmdWwgb2Ygc2ltcGxlIHByb2dy
YW1zLCB0aGUgbW9zdCBjb21wbGV4IG9mIHdoaWNoIGZpbmRzIHByaW1lIG51bWJlcnMuIDxhIGhy
ZWY9Imh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0
cy9BUkVTLTYvQmFzaWM/cmV2PTIxMTY5NyZvcmRlcj1uYW1lIj5Ccm93c2UgdGhlIHNvdXJjZS48
L2E+PC9wPgorCisgICAgICAgIDxwPgorICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1
Yi5jb20vYmFiZWwvYmFieWxvbiI+QmFieWxvbjwvYT4gaXMgYW4gaW1wbGVtZW50YXRpb24gb2Yg
YSBwYXJzZXIgZm9yIHRoZSBKYXZhU2NyaXB0IGxhbmd1YWdlLgorICAgICAgICAgICBCYWJ5bG9u
IGlzIHRoZSBwYXJzZXIgdXNlZCBpbiB0aGUgPGEgaHJlZj0iaHR0cHM6Ly9iYWJlbGpzLmlvIj5C
YWJlbDwvYT4gSmF2YVNjcmlwdCB0cmFuc3BpbGVyLgorICAgICAgICAgICBUaGUgYmVuY2htYXJr
IHJ1bnMgdGhlIEJhYnlsb24gcGFyc2VyIG9uIGZvdXIgZGlmZmVyZW50IEphdmFTY3JpcHQgc291
cmNlcy4gQmFieWxvbiBtYWtlcyBoZWF2eSB1c2Ugb2YgY2xhc3NlcywKKyAgICAgICAgICAgZG9l
cyBub24gdHJpdmlhbCBzdHJpbmcgcHJvY2Vzc2luZywgYW5kIGNyZWF0ZXMgbm9uLXRyaXZpYWwg
b2JqZWN0IGdyYXBocy4KKyAgICAgICAgPC9wPgorCisgICAgICAgIDxwPkFSRVMtNiByZXdhcmRz
IGJyb3dzZXJzIHRoYXQgc3RhcnQgdXAgcXVpY2tseSBhbmQgcnVuIHNtb290aGx5LiBJdCdzIG5v
dCBlbm91Z2ggdG8ganVzdCBtZWFzdXJlIHRoZSB0b3RhbCBydW5uaW5nIHRpbWUgb2YgYSB3b3Jr
bG9hZC4gQnJvd3NlcnMgbWF5IHBlcmZvcm0gZGlmZmVyZW50bHkgZm9yIHRoZSBzYW1lIHdvcmts
b2FkIGRlcGVuZGluZyBvbiBob3cgbWFueSB0aW1lcyBpdCBoYXMgcnVuLiBHYXJiYWdlIGNvbGxl
Y3Rpb24gcnVucyBwZXJpb2RpY2FsbHksIG1ha2luZyBzb21lIGl0ZXJhdGlvbnMgdGFrZSBsb25n
ZXIgdGhhbiBvdGhlcnMuIENvZGUgdGhhdCBydW5zIHJlcGVhdGVkbHkgZ2V0cyBvcHRpbWl6ZWQg
YnkgdGhlIGJyb3dzZXIsIHNvIHRoZSBmaXJzdCBpdGVyYXRpb24gb2YgYW55IHdvcmtsb2FkIGlz
IG1vcmUgZXhwZW5zaXZlIHRoYW4gdGhlIHJlc3QuIEFSRVMtNiBydW5zIGVhY2ggdGVzdCBmb3Ig
MjAwIGl0ZXJhdGlvbnMsIGFuZCByZXBvcnRzIHRoZSBleGVjdXRpb24gdGltZSBvZiB0aGUgZmly
c3QgaXRlcmF0aW9uLCB0aGUgYXZlcmFnZSBvZiB0aGUgNCB3b3JzdCBpdGVyYXRpb25zLCBhbmQg
dGhlIG92ZXJhbGwgZ2VvbWV0cmljIG1lYW4uIEVhY2ggb2YgdGhlc2UgdmFsdWVzIGlzIGdpdmVu
IGFuIGVxdWFsIHdlaWdodCB3aGVuIGNvbXB1dGluZyB0aGUgb3ZhcmFsbCB0aW1lLiBBUkVTLTYg
ZXF1YWxseSByZXdhcmRzIGZhc3Qgc3RhcnQtdXAsIGxvdyBqYW5rLCBhbmQgc29waGlzdGljYXRl
ZCBhZGFwdGl2ZSBvcHRpbWl6YXRpb25zIGZvciBsb25nLXJ1bm5pbmcgY29kZS48L3A+CiAgICAg
ICAgIAotICAgICAgICA8cD5BUkVTLTYgcmV3YXJkcyBicm93c2VycyB0aGF0IHN0YXJ0IHVwIHF1
aWNrbHkgYW5kIHJ1biBzbW9vdGhseS4gSXQncyBub3QgZW5vdWdoIHRvIGp1c3QgbWVhc3VyZSB0
aGUgdG90YWwgcnVubmluZyB0aW1lIG9mIGEgd29ya2xvYWQuIEJyb3dzZXJzIG1heSBwZXJmb3Jt
IGRpZmZlcmVudGx5IGZvciB0aGUgc2FtZSB3b3JrbG9hZCBkZXBlbmRpbmcgb24gaG93IG1hbnkg
dGltZXMgaXQgaGFzIHJ1bi4gR2FyYmFnZSBjb2xsZWN0aW9uIHJ1bnMgcGVyaW9kaWNhbGx5LCBt
YWtpbmcgc29tZSBpdGVyYXRpb25zIHRha2UgbG9uZ2VyIHRoYW4gb3RoZXJzLiBDb2RlIHRoYXQg
cnVucyByZXBlYXRlZGx5IGdldHMgb3B0aW1pemVkIGJ5IHRoZSBicm93c2VyLCBzbyB0aGUgZmly
c3QgaXRlcmF0aW9uIG9mIGFueSB3b3JrbG9hZCBpcyBtb3JlIGV4cGVuc2l2ZSB0aGFuIHRoZSBy
ZXN0LiBBUkVTLTYgcnVucyB0aGVzZSBiZW5jaG1hcmtzIGZvciAyMDAgaXRlcmF0aW9ucyBhbmQg
cmVwb3J0cyB0aGUgZXhlY3V0aW9uIHRpbWUgb2YgdGhlIGZpcnN0IGl0ZXJhdGlvbiwgdGhlIGF2
ZXJhZ2Ugb2YgdGhlIHdvcnN0IDIlIGl0ZXJhdGlvbnMsIGFuZCB0aGUgb3ZlcmFsbCBnZW9tZXRy
aWMgbWVhbi4gRWFjaCBvZiB0aGVzZSB2YWx1ZXMgaXMgZ2l2ZW4gYW4gZXF1YWwgd2VpZ2h0IHdo
ZW4gY29tcHV0aW5nIHRoZSBvdmFyYWxsIHRpbWUuIEFSRVMtNiBlcXVhbGx5IHJld2FyZHMgZmFz
dCBzdGFydC11cCwgbG93IGphbmssIGFuZCBzb3BoaXN0aWNhdGVkIGFkYXB0aXZlIG9wdGltaXph
dGlvbnMgZm9yIGxvbmctcnVubmluZyBjb2RlLjwvcD4KLSAgICAgICAgCi0gICAgICAgIDxwPkVh
Y2ggQVJFUy02IHNhbXBsZSBoYXMgMjAwIGl0ZXJhdGlvbnMgb2YgQWlyIGFuZCAyMDAgaXRlcmF0
aW9ucyBvZiBCYXNpYy4gQVJFUy02IHJ1bnMgMTAgc2FtcGxlcywgYW5kIHJlcG9ydHMgdGhlIGF2
ZXJhZ2Ugd2l0aCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMuIEVhY2ggc2FtcGxlIHJ1bnMgaW4g
YSBmcmVzaCA8Y29kZT5pZnJhbWU8L2NvZGU+IHRvIHNpbXVsYXRlIHNvbWUgb2YgdGhlIGVmZmVj
dHMgb2YgcGFnZSBuYXZpZ2F0aW9uLjwvcD4KKyAgICAgICAgPHA+RWFjaCBBUkVTLTYgc2FtcGxl
IGhhcyAyMDAgaXRlcmF0aW9ucyBvZiBBaXIsIEJhc2ljLCBhbmQgQmFieWxvbi4gQVJFUy02IHJ1
bnMgOCBzYW1wbGVzLCBhbmQgcmVwb3J0cyB0aGUgYXZlcmFnZSB3aXRoIDk1JSBjb25maWRlbmNl
IGludGVydmFscy4gRWFjaCBzYW1wbGUgcnVucyBpbiBhIGZyZXNoIDxjb2RlPmlmcmFtZTwvY29k
ZT4gdG8gc2ltdWxhdGUgc29tZSBvZiB0aGUgZWZmZWN0cyBvZiBwYWdlIG5hdmlnYXRpb24uPC9w
PgogCiAgICAgICAgIDxwPjxhIGhyZWY9ImluZGV4Lmh0bWwiIGNsYXNzPSJidXR0b24gcmV0dXJu
Ij5SZXR1cm4gdG8gVGVzdGluZzwvYT48L3A+CiAKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQVJF
Uy02L2JhYnlsb25fYmVuY2htYXJrLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMv
QVJFUy02L2JhYnlsb25fYmVuY2htYXJrLmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1hbmNl
VGVzdHMvQVJFUy02L2JhYnlsb25fYmVuY2htYXJrLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1
c2Ugc3RyaWN0IjsKKworY29uc3QgQmFieWxvbkJlbmNobWFya0NvZGUgPSBTdHJpbmcucmF3YAor
PHNjcmlwdCBzcmM9IkJhYnlsb24vaW5kZXguanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkJh
Ynlsb24vYmVuY2htYXJrLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cit2YXIgcmVzdWx0cyA9IFtd
OwordmFyIGJlbmNobWFyayA9IG5ldyBCYWJ5bG9uQmVuY2htYXJrKCk7Cit2YXIgbnVtSXRlcmF0
aW9ucyA9IDIwMDsKK2ZvciAodmFyIGkgPSAwOyBpIDwgbnVtSXRlcmF0aW9uczsgKytpKSB7Cisg
ICAgdmFyIGJlZm9yZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgYmVuY2htYXJrLnJ1bkl0ZXJhdGlv
bigpOworICAgIHZhciBhZnRlciA9IGN1cnJlbnRUaW1lKCk7CisgICAgcmVzdWx0cy5wdXNoKGFm
dGVyIC0gYmVmb3JlKTsKK30KK3JlcG9ydFJlc3VsdChyZXN1bHRzKTsKKzwvc2NyaXB0PmA7CisK
KworbGV0IHJ1bkJhYnlsb25CZW5jaG1hcmsgPSBudWxsOworaWYgKCFpc0luQnJvd3Nlcikgewor
ICAgIGxldCBzb3VyY2VzID0gWworICAgICAgICAiQmFieWxvbi9pbmRleC5qcyIKKyAgICAgICAg
LCAiQmFieWxvbi9iZW5jaG1hcmsuanMiCisgICAgXTsKKworICAgIHJ1bkJhYnlsb25CZW5jaG1h
cmsgPSBtYWtlQmVuY2htYXJrUnVubmVyKHNvdXJjZXMsICJCYWJ5bG9uQmVuY2htYXJrIik7Cit9
CisKK2NvbnN0IEJhYnlsb25CZW5jaG1hcmtSdW5uZXIgPSB7CisgICAgbmFtZTogIkJhYnlsb24i
LAorICAgIGNvZGU6IEJhYnlsb25CZW5jaG1hcmtDb2RlLAorICAgIHJ1bjogcnVuQmFieWxvbkJl
bmNobWFyaywKKyAgICBjZWxsczoge30KK307CisKK2lmIChpc0luQnJvd3NlcikgeworICAgIEJh
Ynlsb25CZW5jaG1hcmtSdW5uZXIuY2VsbHMgPSB7CisgICAgICAgIGZpcnN0SXRlcmF0aW9uOiBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQmFieWxvbkZpcnN0SXRlcmF0aW9uIiksCisgICAgICAg
IGF2ZXJhZ2VXb3JzdENhc2U6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCYWJ5bG9uQXZlcmFn
ZVdvcnN0Q2FzZSIpLAorICAgICAgICBzdGVhZHlTdGF0ZTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoIkJhYnlsb25TdGVhZHlTdGF0ZSIpLAorICAgICAgICBtZXNzYWdlOiBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiQmFieWxvbk1lc3NhZ2UiKQorICAgIH07Cit9CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0FSRVMtNi9jbGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9BUkVT
LTYvY2xpLmpzCShyZXZpc2lvbiAyMTQ4MjYpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0FSRVMtNi9j
bGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCiBjb25zdCBpc0luQnJvd3NlciA9IGZhbHNlOwog
CiBmdW5jdGlvbiBtYWtlQmVuY2htYXJrUnVubmVyKHNvdXJjZXMsIGJlbmNobWFya0NvbnN0cnVj
dG9yKSB7CkBAIC0yOCw2ICs1Myw3IEBAIGxvYWQoInJlc3VsdHMuanMiKTsKIGxvYWQoInN0YXRz
LmpzIik7CiBsb2FkKCJhaXJfYmVuY2htYXJrLmpzIik7CiBsb2FkKCJiYXNpY19iZW5jaG1hcmsu
anMiKTsKK2xvYWQoImJhYnlsb25fYmVuY2htYXJrLmpzIik7CiBsb2FkKCJnbHVlLmpzIik7CiAK
LWRyaXZlci5zdGFydCgxMCk7Citkcml2ZXIuc3RhcnQoOCk7CkluZGV4OiBQZXJmb3JtYW5jZVRl
c3RzL0FSRVMtNi9nbHVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQVJFUy02
L2dsdWUuanMJKHJldmlzaW9uIDIxNDgyNikKKysrIFBlcmZvcm1hbmNlVGVzdHMvQVJFUy02L2ds
dWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNyArMjgsNyBAQCBjb25zdCBkcml2ZXIgPSBuZXcgRHJp
dmVyKAogICAgIGlzSW5Ccm93c2VyID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXR1cyIp
IDogbnVsbCwKICAgICBpc0luQnJvd3NlciA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0cmln
Z2VyIikgOiBudWxsLAogICAgIGZ1bmN0aW9uKCkgewotICAgICAgICBkcml2ZXIuc3RhcnQoMTAp
CisgICAgICAgIGRyaXZlci5zdGFydCg4KQogICAgIH0sCiAgICAgaXNJbkJyb3dzZXIgPyBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgibWFnaWMiKSA6IG51bGwsCiAgICAgaXNJbkJyb3dzZXIgPyBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiR2VvbWVhbiIpIDogbnVsbCwKQEAgLTQwLDQgKzQwLDUg
QEAgZnVuY3Rpb24gcmVwb3J0UmVzdWx0KC4uLmFyZ3MpIHsKIAogZHJpdmVyLmFkZEJlbmNobWFy
ayhBaXJCZW5jaG1hcmtSdW5uZXIpOwogZHJpdmVyLmFkZEJlbmNobWFyayhCYXNpY0JlbmNobWFy
a1J1bm5lcik7Citkcml2ZXIuYWRkQmVuY2htYXJrKEJhYnlsb25CZW5jaG1hcmtSdW5uZXIpOwog
ZHJpdmVyLnJlYWR5VHJpZ2dlcigpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9BUkVTLTYvaW5k
ZXguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0FSRVMtNi9pbmRleC5odG1s
CShyZXZpc2lvbiAyMTQ4MjYpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0FSRVMtNi9pbmRleC5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICA8L2Rpdj4KICAK
ICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNjb3JlIj4KLSAgICAgICAgICAgICAgICA8bGFiZWw+
V29yc3QgMiU8L2xhYmVsPgorICAgICAgICAgICAgICAgIDxsYWJlbD5Xb3JzdCA0IEl0ZXJhdGlv
bnM8L2xhYmVsPgogICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJBaXJBdmVyYWdlV29yc3RDYXNl
Ij4KICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj4mIzg3MDk7PC9zcGFu
PjxzcGFuIGNsYXNzPSJ1bml0cyI+bXM8L3NwYW4+CiAgICAgICAgICAgICAgICAgPC9zcGFuPgpA
QCAtNjYsNyArNjYsNiBAQAogICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idmFsdWUi
PiYjODcwOTs8L3NwYW4+PHNwYW4gY2xhc3M9InVuaXRzIj5tczwvc3Bhbj4KICAgICAgICAgICAg
ICAgICA8L3NwYW4+CiAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIAogICAgICAgICA8
L2Rpdj4KICAgICAKICAgICAgICAgPGRpdiBjbGFzcz0iYmFzaWMgdGVzdCI+CkBAIC04MSw3ICs4
MCw3IEBACiAgICAgICAgICAgICA8L2Rpdj4KICAKICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNj
b3JlIj4KLSAgICAgICAgICAgICAgICA8bGFiZWw+V29yc3QgMiU8L2xhYmVsPgorICAgICAgICAg
ICAgICAgIDxsYWJlbD5Xb3JzdCA0IEl0ZXJhdG9uczwvbGFiZWw+CiAgICAgICAgICAgICAgICAg
PHNwYW4gaWQ9IkJhc2ljQXZlcmFnZVdvcnN0Q2FzZSI+CiAgICAgICAgICAgICAgICAgICAgIDxz
cGFuIGNsYXNzPSJ2YWx1ZSI+JiM4NzA5Ozwvc3Bhbj48c3BhbiBjbGFzcz0idW5pdHMiPm1zPC9z
cGFuPiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgPC9zcGFuPgpAQCAtOTMs
MTUgKzkyLDQwIEBACiAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2YWx1ZSI+JiM4
NzA5Ozwvc3Bhbj48c3BhbiBjbGFzcz0idW5pdHMiPm1zPC9zcGFuPiAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgPC9kaXY+CisgICAgICAg
IDwvZGl2PgorCisgICAgICAgIDxkaXYgY2xhc3M9ImJhYnlsb24gdGVzdCI+CisgICAgICAgICAg
ICA8ZGl2IGlkPSJCYWJ5bG9uTWVzc2FnZSIgY2xhc3M9ImluZGljYXRvciI+LjwvZGl2PgorICAg
ICAgICAgICAgPGgyPkJhYnlsb248L2gyPiAKICAgICAgICAgICAgIAorICAgICAgICAgICAgPGRp
diBjbGFzcz0ic2NvcmUiPgorICAgICAgICAgICAgICAgIDxsYWJlbD5GaXJzdCBJdGVyYXRpb248
L2xhYmVsPgorICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJCYWJ5bG9uRmlyc3RJdGVyYXRpb24i
PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPiYjODcwOTs8L3NwYW4+
PHNwYW4gY2xhc3M9InVuaXRzIj5tczwvc3Bhbj4gICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZGl2PgorIAorICAgICAgICAgICAgPGRp
diBjbGFzcz0ic2NvcmUiPgorICAgICAgICAgICAgICAgIDxsYWJlbD5Xb3JzdCA0IEl0ZXJhdGlv
bnM8L2xhYmVsPgorICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJCYWJ5bG9uQXZlcmFnZVdvcnN0
Q2FzZSI+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2YWx1ZSI+JiM4NzA5Ozwv
c3Bhbj48c3BhbiBjbGFzcz0idW5pdHMiPm1zPC9zcGFuPiAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAg
IDxkaXYgY2xhc3M9InNjb3JlIj4KKyAgICAgICAgICAgICAgICA8bGFiZWw+QXZlcmFnZTwvbGFi
ZWw+CisgICAgICAgICAgICAgICAgPHNwYW4gaWQ9IkJhYnlsb25TdGVhZHlTdGF0ZSI+CisgICAg
ICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2YWx1ZSI+JiM4NzA5Ozwvc3Bhbj48c3BhbiBj
bGFzcz0idW5pdHMiPm1zPC9zcGFuPiAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgPC9zcGFuPgorICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgIDwvZGl2PgotICAgICAgICAK
ICAgICA8L2Rpdj4KICAgICA8L21haW4+CiAgICAgCiAgICAgPGlmcmFtZSBpZD0ibWFnaWMiIGZy
YW1lQm9yZGVyPTA+PC9pZnJhbWU+CiAgICAgPHNjcmlwdCBzcmM9ImFpcl9iZW5jaG1hcmsuanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJiYXNpY19iZW5jaG1hcmsuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgc3JjPSJiYWJ5bG9uX2JlbmNobWFyay5qcyI+PC9zY3JpcHQ+CiAgICAg
PHNjcmlwdCBzcmM9ImdsdWUuanMiPjwvc2NyaXB0PgogICAgICAgICAKIDwvYm9keT4KSW5kZXg6
IFBlcmZvcm1hbmNlVGVzdHMvQVJFUy02L3Jlc3VsdHMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9BUkVTLTYvcmVzdWx0cy5qcwkocmV2aXNpb24gMjE0ODI2KQorKysgUGVyZm9y
bWFuY2VUZXN0cy9BUkVTLTYvcmVzdWx0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCw0NSArNTQsMTIg
QEAgY2xhc3MgUmVzdWx0cyB7CiAgICAgCiAgICAgcmVwb3J0UmVzdWx0KHRpbWVzKQogICAgIHsK
LSAgICAgICAgZnVuY3Rpb24gYXZlcmFnZUFib3ZlUGVyY2VudGlsZShudW1iZXJzLCBwZXJjZW50
aWxlKSB7Ci0gICAgICAgICAgICAvLyBEb24ndCBjaGFuZ2UgdGhlIG9yaWdpbmFsIGFycmF5Lgot
ICAgICAgICAgICAgbnVtYmVycyA9IG51bWJlcnMuc2xpY2UoKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gU29ydCBpbiBhc2NlbmRpbmcgb3JkZXIuCi0gICAgICAgICAgICBudW1iZXJz
LnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAtIGI7IH0pOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBOb3cgdGhlIGVsZW1lbnRzIHdlIHdhbnQgYXJlIGF0IHRoZSBlbmQuIEtl
ZXAgcmVtb3ZpbmcgdGhlbSB1bnRpbCB0aGUgYXJyYXkgc2l6ZSBzaHJpbmtzIHRvbyBtdWNoLgot
ICAgICAgICAgICAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgcGVyY2VudGlsZSA9IDk5OgotICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gbnVtYmVycy5sZW5ndGggc3RhcnRzIGF0IDEwMDog
d2Ugd2lsbCByZW1vdmUganVzdCB0aGUgd29yc3QgZW50cnkgYW5kIHRoZW4gbm90IHJlbW92ZSBh
bnltb3JlLAotICAgICAgICAgICAgLy8gICBzaW5jZSB0aGVuIG51bWJlcnMubGVuZ3RoIC8gb3Jp
Z2luYWxMZW5ndGggPSAwLjk5LgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gbnVt
YmVycy5sZW5ndGggc3RhcnRzIGF0IDEwMDA6IHdlIHdpbGwgcmVtb3ZlIHRoZSB0ZW4gd29yc3Qu
Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMg
YXQgMTA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdvcnN0LgotICAgICAgICAgICAgdmFyIG51
bWJlcnNXZVdhbnQgPSBbXTsKLSAgICAgICAgICAgIHZhciBvcmlnaW5hbExlbmd0aCA9IG51bWJl
cnMubGVuZ3RoOwotICAgICAgICAgICAgd2hpbGUgKG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxM
ZW5ndGggPiBwZXJjZW50aWxlIC8gMTAwKQotICAgICAgICAgICAgICAgIG51bWJlcnNXZVdhbnQu
cHVzaChudW1iZXJzLnBvcCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyIHN1bSA9
IDA7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlcnNXZVdhbnQubGVuZ3Ro
OyArK2kpCi0gICAgICAgICAgICAgICAgc3VtICs9IG51bWJlcnNXZVdhbnRbaV07Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBzdW0gLyBudW1iZXJzV2VXYW50Lmxlbmd0
aDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRG8gYSBzYW5pdHkgY2hlY2suCi0gICAg
ICAgICAgICBpZiAobnVtYmVycy5sZW5ndGggJiYgcmVzdWx0IDwgbnVtYmVyc1tudW1iZXJzLmxl
bmd0aCAtIDFdKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgIlNhbml0eSBjaGVjayBmYWlsOiB0
aGUgd29yc3QgY2FzZSByZXN1bHQgaXMgIiArIHJlc3VsdCArCi0gICAgICAgICAgICAgICAgICAg
ICIgYnV0IHdlIGRpZG4ndCB0YWtlIGludG8gYWNjb3VudCAiICsgbnVtYmVyczsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
fQorICAgICAgICBpZiAodGltZXMubGVuZ3RoIDwgNSkKKyAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigiV2UgZXhwZWN0ID49IDUgaXRlcmF0aW9ucyIpOwogCiAgICAgICAgIHRoaXMuZmlyc3RJ
dGVyYXRpb24uYWRkKHRpbWVzWzBdKTsKLSAgICAgICAgbGV0IHN0ZWFkeVRpbWVzID0gdGltZXMu
c2xpY2UoMSk7Ci0gICAgICAgIHRoaXMuYXZlcmFnZVdvcnN0Q2FzZS5hZGQoYXZlcmFnZUFib3Zl
UGVyY2VudGlsZShzdGVhZHlUaW1lcywgOTgpKTsKKyAgICAgICAgbGV0IHN0ZWFkeVRpbWVzID0g
dGltZXMuc2xpY2UoMSkuc29ydCgoYSwgYikgPT4gYiAtIGEpOyAvLyBTb3J0IGluIHJldmVyc2Ug
b3JkZXIuCisgICAgICAgIHRoaXMuYXZlcmFnZVdvcnN0Q2FzZS5hZGQoKHRpbWVzWzBdICsgdGlt
ZXNbMV0gKyB0aW1lc1syXSArIHRpbWVzWzNdKSAvIDQpOwogICAgICAgICB0aGlzLnN0ZWFkeVN0
YXRlLmFkZChzdGVhZHlUaW1lcy5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiBwcmV2aW91
cyArIGN1cnJlbnQpIC8gc3RlYWR5VGltZXMubGVuZ3RoKTsKICAgICAgICAgdGhpcy5yZXBvcnRE
b25lKCk7CiAgICAgfQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9BUkVTLTYvc3R5bGVzLmNzcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0FSRVMtNi9zdHlsZXMuY3NzCShyZXZpc2lv
biAyMTQ4MjYpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0FSRVMtNi9zdHlsZXMuY3NzCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDMsNyArMTQzLDkgQEAgcCB7CiAgICAgbWFyZ2luLWJvdHRvbTogM3JlbTsK
ICAgICBvcGFjaXR5OiAwOwogICAgIGFuaW1hdGlvbjogZmFkZS1pbiAxcyBlYXNlLW91dCA3MDBt
cyBmb3J3YXJkczsKKyAgICBtaW4td2lkdGg6IDQwJTsKIH0KKwogLnRlc3Q6bnRoLWNoaWxkKG9k
ZCkgewogICAgIGFuaW1hdGlvbi1kZWxheTogOTAwbXM7CiB9CkBAIC0yOTcsNCArMjk5LDQgQEAg
cCB7CiAKICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKK30KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQVJFUy02L0JhYnlsb24vQVVUSE9S
Uwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0FSRVMtNi9CYWJ5bG9uL0FVVEhPUlMJ
KG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9BUkVTLTYvQmFieWxvbi9BVVRIT1JT
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKK0xpc3Qgb2YgQWNvcm4gY29udHJpYnV0
b3JzLiBVcGRhdGVkIGJlZm9yZSBldmVyeSByZWxlYXNlLgorCitBZHJpYW4gUmFrb3Zza3kKK0Fs
aXN0YWlyIEJyYWlkd29vZAorQW5kcmVzIFN1YXJlegorQXBhcmFqaXRhIEZpc2htYW4KK0FyaWFu
IFN0b2x3aWprCitBcnRlbSBHb3Zvcm92CitCcmFuZG9uIE1pbGxzCitDaGFybGVzIEh1Z2hlcwor
Q29ucmFkIElyd2luCitEYXZpZCBCb25uZXQKK0ZvcmJlcyBMaW5kZXNheQorR2lsYWQgUGVsZWcK
K2ltcGluYmFsbAorSW5ndmFyIFN0ZXBhbnlhbgorSmVzc2UgTWNDYXJ0aHkKK0ppYXhpbmcgV2Fu
ZworSm9lbCBLZW1wCitKb2hhbm5lcyBIZXJyCitKw7xyZyBMZWhuaQora2VleWlwY2hhbgorS2V2
aW4gS3dvawora3JhdG9yCitNYXJpam4gSGF2ZXJiZWtlCitNYXJ0aW4gQ2FybGJlcmcKK01hdGhp
YXMgQnluZW5zCitNYXRoaWV1ICdwMDEnIEhlbnJpCitNYXggU2NoYWVmZXIKK01heCBaZXJ6b3Vy
aQorTWloYWkgQmF6b24KK01pa2UgUmVubmllCitOaWNrIEZpdHpnZXJhbGQKK09za2FyIFNjaMO2
bGRzdHLDtm0KK1BhdWwgSGFycGVyCitQZXRlciBSdXN0CitQbE5HCityLWUtZAorUmljaCBIYXJy
aXMKK1NlYmFzdGlhbiBNY0tlbnppZQorenNqZm9yY24KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMv
QVJFUy02L0JhYnlsb24vYWlyLWJsb2IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0
cy9BUkVTLTYvQmFieWxvbi9haXItYmxvYi5qcwkobm9uZXhpc3RlbnQpCisrKyBQZXJmb3JtYW5j
ZVRlc3RzL0FSRVMtNi9CYWJ5bG9uL2Fpci1ibG9iLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgUmVnIGV4dGVuZHMgVG1wQmFzZSB7CisgICAgY29u
c3RydWN0b3IoaW5kZXgsIHR5cGUsIG5hbWUsIGlzQ2FsbGVlU2F2ZSkKKyAgICB7CisgICAgICAg
IHN1cGVyKCk7CisgICAgICAgIHRoaXMuX2luZGV4ID0gaW5kZXg7CisgICAgICAgIHRoaXMuX3R5
cGUgPSB0eXBlOworICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy5faXND
YWxsZWVTYXZlID0gISFpc0NhbGxlZVNhdmU7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBmcm9t
UmVnKHJlZykKKyAgICB7CisgICAgICAgIHJldHVybiByZWc7CisgICAgfQorICAgIAorICAgIGdl
dCBpbmRleCgpIHsgcmV0dXJuIHRoaXMuX2luZGV4OyB9CisgICAgZ2V0IHR5cGUoKSB7IHJldHVy
biB0aGlzLl90eXBlOyB9CisgICAgZ2V0IG5hbWUoKSB7IHJldHVybiB0aGlzLl9uYW1lOyB9Cisg
ICAgZ2V0IGlzQ2FsbGVlU2F2ZSgpIHsgcmV0dXJuIHRoaXMuX2lzQ2FsbGVlU2F2ZTsgfQorICAg
IAorICAgIGdldCBpc1JlZygpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAKKyAgICBoYXNoKCkKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzLmlzR1ApCisgICAgICAgICAgICByZXR1cm4gMSArIHRoaXMu
X2luZGV4OworICAgICAgICByZXR1cm4gLTEgLSB0aGlzLl9pbmRleDsKKyAgICB9CisgICAgCisg
ICAgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGAlJHt0aGlzLl9uYW1lfWA7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBleHRyYWN0KGFyZykKKyAgICB7CisgICAgICAgIGlmIChh
cmcuaXNSZWcpCisgICAgICAgICAgICByZXR1cm4gYXJnLnJlZzsKKyAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBmb3JFYWNoRmFzdChhcmcsIGZ1bmMpCisgICAg
eworICAgICAgICByZXR1cm4gYXJnLmZvckVhY2hUbXBGYXN0KHRtcCA9PiB7CisgICAgICAgICAg
ICBpZiAoIXRtcC5pc1JlZykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBy
ZXR1cm4gZnVuYyh0bXApOworICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGZv
ckVhY2goYXJnLCBhcmdSb2xlLCBhcmdUeXBlLCBhcmdXaWR0aCwgZnVuYykKKyAgICB7CisgICAg
ICAgIHJldHVybiBhcmcuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgIGFyZ1JvbGUsIGFyZ1R5cGUs
IGFyZ1dpZHRoLAorICAgICAgICAgICAgKHRtcCwgcm9sZSwgdHlwZSwgd2lkdGgpID0+IHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXRtcC5pc1JlZykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIHJldHVybiBmdW5jKHRtcCwgcm9sZSwgdHlwZSwgd2lkdGgpOwor
ICAgICAgICAgICAgfSk7CisgICAgfQorfQorCit7CisgICAgUmVnLnJlZ3MgPSBbXTsKKyAgICBm
dW5jdGlvbiBuZXdSZWcoLi4uYXJncykKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcg
UmVnKC4uLmFyZ3MpOworICAgICAgICBSZWcucmVncy5wdXNoKHJlc3VsdCk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gRGVmaW5lIFg4Nl82NCBHUFJzCisgICAgewor
ICAgICAgICBsZXQgaW5kZXggPSAwOworICAgICAgICBmdW5jdGlvbiBuZXdHUFIobmFtZSwgaXND
YWxsZWVTYXZlKSB7IHJldHVybiBuZXdSZWcoaW5kZXgrKywgR1AsIG5hbWUsIGlzQ2FsbGVlU2F2
ZSk7IH0KKyAgICAgICAgCisgICAgICAgIFJlZy5yYXggPSBuZXdHUFIoInJheCIpOworICAgICAg
ICBSZWcucmN4ID0gbmV3R1BSKCJyY3giKTsKKyAgICAgICAgUmVnLnJkeCA9IG5ld0dQUigicmR4
Iik7CisgICAgICAgIFJlZy5yYnggPSBuZXdHUFIoInJieCIsIHRydWUpOworICAgICAgICBSZWcu
cnNwID0gbmV3R1BSKCJyc3AiKTsKKyAgICAgICAgUmVnLnJicCA9IG5ld0dQUigicmJwIiwgdHJ1
ZSk7CisgICAgICAgIFJlZy5yc2kgPSBuZXdHUFIoInJzaSIpOworICAgICAgICBSZWcucmRpID0g
bmV3R1BSKCJyZGkiKTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDg7IGkgPD0gMTU7ICsraSkKKyAg
ICAgICAgICAgIFJlZ1tgciR7aX1gXSA9IG5ld0dQUihgciR7aX1gLCBpID49IDEyKTsKKyAgICB9
CisKKyAgICAvLyBEZWZpbmUgWDg2XzY0IEZQUnMuCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0g
MTU7ICsraSkKKyAgICAgICAgUmVnW2B4bW0ke2l9YF0gPSBuZXdSZWcoaSwgRlAsIGB4bW0ke2l9
YCk7CisKKyAgICBSZWcuZ3BycyA9IFtdCisgICAgUmVnLmZwcnMgPSBbXQorICAgIFJlZy5jYWxs
ZWVTYXZlR1BScyA9IFtdCisgICAgUmVnLmNhbGxlZVNhdmVGUFJzID0gW10KKyAgICBSZWcuY2Fs
bGVlU2F2ZXMgPSBbXQorICAgIGZvciAobGV0IHJlZyBvZiBSZWcucmVncykgeworICAgICAgICBp
ZiAocmVnLmlzR1ApIHsKKyAgICAgICAgICAgIFJlZy5ncHJzLnB1c2gocmVnKTsKKyAgICAgICAg
ICAgIGlmIChyZWcuaXNDYWxsZWVTYXZlKQorICAgICAgICAgICAgICAgIFJlZy5jYWxsZWVTYXZl
R1BScy5wdXNoKHJlZyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSZWcuZnBycy5w
dXNoKHJlZyk7CisgICAgICAgICAgICBpZiAocmVnLmlzQ2FsbGVlU2F2ZSkKKyAgICAgICAgICAg
ICAgICBSZWcuY2FsbGVlU2F2ZUZQUlMucHVzaChyZWcpOworICAgICAgICB9CisgICAgICAgIGlm
IChyZWcuaXNDYWxsZWVTYXZlKQorICAgICAgICAgICAgUmVnLmNhbGxlZVNhdmVzLnB1c2gocmVn
KTsKKyAgICB9CisgICAgCisgICAgUmVnLmNhbGxGcmFtZVJlZ2lzdGVyID0gUmVnLnJicDsKKyAg
ICBSZWcuc3RhY2tQb2ludGVyUmVnaXN0ZXIgPSBSZWcucnNwOworfQpJbmRleDogUGVyZm9ybWFu
Y2VUZXN0cy9BUkVTLTYvQmFieWxvbi9iYWJ5bG9uLWJsb2IuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVy
Zm9ybWFuY2VUZXN0cy9BUkVTLTYvQmFieWxvbi9iYWJ5bG9uLWJsb2IuanMJKG5vbmV4aXN0ZW50
KQorKysgUGVyZm9ybWFuY2VUZXN0cy9BUkVTLTYvQmFieWxvbi9iYWJ5bG9uLWJsb2IuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE0IGJ5IHZhcmlvdXMgY29udHJpYnV0b3JzIChzZWUgQVVUSE9SUykKKyAqCisgKiBQZXJtaXNz
aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh
aW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50
YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJl
IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJp
Z2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl
LCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k
IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQg
dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBU
aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFs
bCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv
ZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi
LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ
TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H
RU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M
REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklM
SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us
IEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX
QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyov
CisKK2ltcG9ydCB7IHJlc2VydmVkV29yZHMgfSBmcm9tICIuLi91dGlsL2lkZW50aWZpZXIiOwor
aW1wb3J0IHsgZ2V0T3B0aW9ucyB9IGZyb20gIi4uL29wdGlvbnMiOworaW1wb3J0IFRva2VuaXpl
ciBmcm9tICIuLi90b2tlbml6ZXIiOworCitleHBvcnQgY29uc3QgcGx1Z2lucyA9IHt9OworCitl
eHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJzZXIgZXh0ZW5kcyBUb2tlbml6ZXIgeworICBjb25zdHJ1
Y3RvcihvcHRpb25zLCBpbnB1dCkgeworICAgIG9wdGlvbnMgPSBnZXRPcHRpb25zKG9wdGlvbnMp
OworICAgIHN1cGVyKG9wdGlvbnMsIGlucHV0KTsKKworICAgIHRoaXMub3B0aW9ucyA9IG9wdGlv
bnM7CisgICAgdGhpcy5pbk1vZHVsZSA9IHRoaXMub3B0aW9ucy5zb3VyY2VUeXBlID09PSAibW9k
dWxlIjsKKyAgICB0aGlzLmlucHV0ID0gaW5wdXQ7CisgICAgdGhpcy5wbHVnaW5zID0gdGhpcy5s
b2FkUGx1Z2lucyh0aGlzLm9wdGlvbnMucGx1Z2lucyk7CisgICAgdGhpcy5maWxlbmFtZSA9IG9w
dGlvbnMuc291cmNlRmlsZW5hbWU7CisKKyAgICAvLyBJZiBlbmFibGVkLCBza2lwIGxlYWRpbmcg
aGFzaGJhbmcgbGluZS4KKyAgICBpZiAodGhpcy5zdGF0ZS5wb3MgPT09IDAgJiYgdGhpcy5pbnB1
dFswXSA9PT0gIiMiICYmIHRoaXMuaW5wdXRbMV0gPT09ICIhIikgeworICAgICAgdGhpcy5za2lw
TGluZUNvbW1lbnQoMik7CisgICAgfQorICB9CisKKyAgaXNSZXNlcnZlZFdvcmQod29yZCkgewor
ICAgIGlmICh3b3JkID09PSAiYXdhaXQiKSB7CisgICAgICByZXR1cm4gdGhpcy5pbk1vZHVsZTsK
KyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIHJlc2VydmVkV29yZHNbNl0od29yZCk7CisgICAg
fQorICB9CisKKyAgaGFzUGx1Z2luKG5hbWUpIHsKKyAgICByZXR1cm4gISF0aGlzLnBsdWdpbnNb
bmFtZV07CisgIH0KKworICBleHRlbmQobmFtZSwgZikgeworICAgIHRoaXNbbmFtZV0gPSBmKHRo
aXNbbmFtZV0pOworICB9CisKKyAgbG9hZFBsdWdpbnMocGx1Z2luTGlzdCkgeworICAgIGNvbnN0
IHBsdWdpbk1hcCA9IHt9OworCisgICAgaWYgKHBsdWdpbkxpc3QuaW5kZXhPZigiZmxvdyIpID49
IDApIHsKKyAgICAgIC8vIGVuc3VyZSBmbG93IHBsdWdpbiBsb2FkcyBsYXN0CisgICAgICBwbHVn
aW5MaXN0ID0gcGx1Z2luTGlzdC5maWx0ZXIoKHBsdWdpbikgPT4gcGx1Z2luICE9PSAiZmxvdyIp
OworICAgICAgcGx1Z2luTGlzdC5wdXNoKCJmbG93Iik7CisgICAgfQorCisgICAgaWYgKHBsdWdp
bkxpc3QuaW5kZXhPZigiZXN0cmVlIikgPj0gMCkgeworICAgICAgLy8gZW5zdXJlIGVzdHJlZSBw
bHVnaW4gbG9hZHMgZmlyc3QKKyAgICAgIHBsdWdpbkxpc3QgPSBwbHVnaW5MaXN0LmZpbHRlcigo
cGx1Z2luKSA9PiBwbHVnaW4gIT09ICJlc3RyZWUiKTsKKyAgICAgIHBsdWdpbkxpc3QudW5zaGlm
dCgiZXN0cmVlIik7CisgICAgfQorCisgICAgZm9yIChjb25zdCBuYW1lIG9mIHBsdWdpbkxpc3Qp
IHsKKyAgICAgIGlmICghcGx1Z2luTWFwW25hbWVdKSB7CisgICAgICAgIHBsdWdpbk1hcFtuYW1l
XSA9IHRydWU7CisKKyAgICAgICAgY29uc3QgcGx1Z2luID0gcGx1Z2luc1tuYW1lXTsKKyAgICAg
ICAgaWYgKHBsdWdpbikgcGx1Z2luKHRoaXMpOworICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBwbHVnaW5NYXA7CisgIH0KKworICBwYXJzZSgpIHsKKyAgICBjb25zdCBmaWxlID0gdGhpcy5z
dGFydE5vZGUoKTsKKyAgICBjb25zdCBwcm9ncmFtID0gdGhpcy5zdGFydE5vZGUoKTsKKyAgICB0
aGlzLm5leHRUb2tlbigpOworICAgIHJldHVybiB0aGlzLnBhcnNlVG9wTGV2ZWwoZmlsZSwgcHJv
Z3JhbSk7CisgIH0KK30KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQVJFUy02L0JhYnlsb24vYmFz
aWMtYmxvYi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0FSRVMtNi9CYWJ5bG9u
L2Jhc2ljLWJsb2IuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9BUkVTLTYv
QmFieWxvbi9iYXNpYy1ibG9iLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjczIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3Ry
aWN0IjsKKworY29uc3QgQmFzaWMgPSB7fTsKKworQmFzaWMuTnVtYmVyQXBwbHkgPSBmdW5jdGlv
bihzdGF0ZSkKK3sKKyAgICAvLyBJJ2QgY2FsbCB0aGlzIGFyZ3VtZW50cyBidXQgd2UncmUgaW4g
c3RyaWN0IG1vZGUuCisgICAgbGV0IHBhcmFtZXRlcnMgPSB0aGlzLnBhcmFtZXRlcnMubWFwKHZh
bHVlID0+IHZhbHVlLmV2YWx1YXRlKHN0YXRlKSk7CisgICAgCisgICAgcmV0dXJuIHN0YXRlLmdl
dFZhbHVlKHRoaXMubmFtZSwgcGFyYW1ldGVycy5sZW5ndGgpLmFwcGx5KHN0YXRlLCBwYXJhbWV0
ZXJzKTsKK307CisKK0Jhc2ljLlZhcmlhYmxlID0gZnVuY3Rpb24oc3RhdGUpCit7CisgICAgbGV0
IHBhcmFtZXRlcnMgPSB0aGlzLnBhcmFtZXRlcnMubWFwKHZhbHVlID0+IHZhbHVlLmV2YWx1YXRl
KHN0YXRlKSk7CisgICAgCisgICAgcmV0dXJuIHN0YXRlLmdldFZhbHVlKHRoaXMubmFtZSwgcGFy
YW1ldGVycy5sZW5ndGgpLmxlZnRBcHBseShzdGF0ZSwgcGFyYW1ldGVycyk7Cit9CisKK0Jhc2lj
LkNvbnN0ID0gZnVuY3Rpb24oc3RhdGUpCit7CisgICAgcmV0dXJuIHRoaXMudmFsdWU7Cit9CisK
K0Jhc2ljLk51bWJlclBvdyA9IGZ1bmN0aW9uKHN0YXRlKQoreworICAgIHJldHVybiBNYXRoLnBv
dyh0aGlzLmxlZnQuZXZhbHVhdGUoc3RhdGUpLCB0aGlzLnJpZ2h0LmV2YWx1YXRlKHN0YXRlKSk7
Cit9CisKK0Jhc2ljLk51bWJlck11bCA9IGZ1bmN0aW9uKHN0YXRlKQoreworICAgIHJldHVybiB0
aGlzLmxlZnQuZXZhbHVhdGUoc3RhdGUpICogdGhpcy5yaWdodC5ldmFsdWF0ZShzdGF0ZSk7Cit9
CisKK0Jhc2ljLk51bWJlckRpdiA9IGZ1bmN0aW9uKHN0YXRlKQoreworICAgIHJldHVybiB0aGlz
LmxlZnQuZXZhbHVhdGUoc3RhdGUpIC8gdGhpcy5yaWdodC5ldmFsdWF0ZShzdGF0ZSk7Cit9CisK
K0Jhc2ljLk51bWJlck5lZyA9IGZ1bmN0aW9uKHN0YXRlKQoreworICAgIHJldHVybiAtdGhpcy50
ZXJtLmV2YWx1YXRlKHN0YXRlKTsKK30KKworQmFzaWMuTnVtYmVyQWRkID0gZnVuY3Rpb24oc3Rh
dGUpCit7CisgICAgcmV0dXJuIHRoaXMubGVmdC5ldmFsdWF0ZShzdGF0ZSkgKyB0aGlzLnJpZ2h0
LmV2YWx1YXRlKHN0YXRlKTsKK30KKworQmFzaWMuTnVtYmVyU3ViID0gZnVuY3Rpb24oc3RhdGUp
Cit7CisgICAgcmV0dXJuIHRoaXMubGVmdC5ldmFsdWF0ZShzdGF0ZSkgLSB0aGlzLnJpZ2h0LmV2
YWx1YXRlKHN0YXRlKTsKK30KKworQmFzaWMuU3RyaW5nVmFyID0gZnVuY3Rpb24oc3RhdGUpCit7
CisgICAgbGV0IHZhbHVlID0gc3RhdGUuc3RyaW5nVmFsdWVzLmdldCh0aGlzLm5hbWUpOworICAg
IGlmICh2YWx1ZSA9PSBudWxsKQorICAgICAgICBzdGF0ZS5hYm9ydCgiQ291bGQgbm90IGZpbmQg
c3RyaW5nIHZhcmlhYmxlICIgKyB0aGlzLm5hbWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwor
QmFzaWMuRXF1YWxzID0gZnVuY3Rpb24oc3RhdGUpCit7CisgICAgcmV0dXJuIHRoaXMubGVmdC5l
dmFsdWF0ZShzdGF0ZSkgPT0gdGhpcy5yaWdodC5ldmFsdWF0ZShzdGF0ZSk7Cit9CisKK0Jhc2lj
Lk5vdEVxdWFscyA9IGZ1bmN0aW9uKHN0YXRlKQoreworICAgIHJldHVybiB0aGlzLmxlZnQuZXZh
bHVhdGUoc3RhdGUpICE9IHRoaXMucmlnaHQuZXZhbHVhdGUoc3RhdGUpOworfQorCitCYXNpYy5M
ZXNzVGhhbiA9IGZ1bmN0aW9uKHN0YXRlKQoreworICAgIHJldHVybiB0aGlzLmxlZnQuZXZhbHVh
dGUoc3RhdGUpIDwgdGhpcy5yaWdodC5ldmFsdWF0ZShzdGF0ZSk7Cit9CisKK0Jhc2ljLkdyZWF0
ZXJUaGFuID0gZnVuY3Rpb24oc3RhdGUpCit7CisgICAgcmV0dXJuIHRoaXMubGVmdC5ldmFsdWF0
ZShzdGF0ZSkgPiB0aGlzLnJpZ2h0LmV2YWx1YXRlKHN0YXRlKTsKK30KKworQmFzaWMuTGVzc0Vx
dWFsID0gZnVuY3Rpb24oc3RhdGUpCit7CisgICAgcmV0dXJuIHRoaXMubGVmdC5ldmFsdWF0ZShz
dGF0ZSkgPD0gdGhpcy5yaWdodC5ldmFsdWF0ZShzdGF0ZSk7Cit9CisKK0Jhc2ljLkdyZWF0ZXJF
cXVhbCA9IGZ1bmN0aW9uKHN0YXRlKQoreworICAgIHJldHVybiB0aGlzLmxlZnQuZXZhbHVhdGUo
c3RhdGUpID49IHRoaXMucmlnaHQuZXZhbHVhdGUoc3RhdGUpOworfQorCitCYXNpYy5Hb1RvID0g
ZnVuY3Rpb24qKHN0YXRlKQoreworICAgIHN0YXRlLm5leHRMaW5lTnVtYmVyID0gdGhpcy50YXJn
ZXQ7Cit9CisKK0Jhc2ljLkdvU3ViID0gZnVuY3Rpb24qKHN0YXRlKQoreworICAgIHN0YXRlLnN1
YlN0YWNrLnB1c2goc3RhdGUubmV4dExpbmVOdW1iZXIpOworICAgIHN0YXRlLm5leHRMaW5lTnVt
YmVyID0gdGhpcy50YXJnZXQ7Cit9CisKK0Jhc2ljLkRlZiA9IGZ1bmN0aW9uKihzdGF0ZSkKK3sK
KyAgICBzdGF0ZS52YWxpZGF0ZSghc3RhdGUudmFsdWVzLmhhcyh0aGlzLm5hbWUpLCAiQ2Fubm90
IHJlZGVmaW5lIGZ1bmN0aW9uIik7CisgICAgc3RhdGUudmFsdWVzLnNldCh0aGlzLm5hbWUsIG5l
dyBOdW1iZXJGdW5jdGlvbih0aGlzLnBhcmFtZXRlcnMsIHRoaXMuZXhwcmVzc2lvbikpOworfQor
CitCYXNpYy5MZXQgPSBmdW5jdGlvbiooc3RhdGUpCit7CisgICAgdGhpcy52YXJpYWJsZS5ldmFs
dWF0ZShzdGF0ZSkuYXNzaWduKHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShzdGF0ZSkpOworfQor
CitCYXNpYy5JZiA9IGZ1bmN0aW9uKihzdGF0ZSkKK3sKKyAgICBpZiAodGhpcy5jb25kaXRpb24u
ZXZhbHVhdGUoc3RhdGUpKQorICAgICAgICBzdGF0ZS5uZXh0TGluZU51bWJlciA9IHRoaXMudGFy
Z2V0OworfQorCitCYXNpYy5SZXR1cm4gPSBmdW5jdGlvbiooc3RhdGUpCit7CisgICAgdGhpcy52
YWxpZGF0ZShzdGF0ZS5zdWJTdGFjay5sZW5ndGgsICJOb3QgaW4gYSBzdWJyb3V0aW5lIik7Cisg
ICAgdGhpcy5uZXh0TGluZU51bWJlciA9IHN0YXRlLnN1YlN0YWNrLnBvcCgpOworfQorCitCYXNp
Yy5TdG9wID0gZnVuY3Rpb24qKHN0YXRlKQoreworICAgIHN0YXRlLm5leHRMaW5lTnVtYmVyID0g
bnVsbDsKK30KKworQmFzaWMuT24gPSBmdW5jdGlvbiooc3RhdGUpCit7CisgICAgbGV0IGluZGV4
ID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHN0YXRlKTsKKyAgICBpZiAoIShpbmRleCA+PSAx
KSB8fCAhKGluZGV4IDw9IHRoaXMudGFyZ2V0cy5sZW5ndGgpKQorICAgICAgICBzdGF0ZS5hYm9y
dCgiSW5kZXggb3V0IG9mIGJvdW5kczogIiArIGluZGV4KTsKKyAgICB0aGlzLm5leHRMaW5lTnVt
YmVyID0gdGhpcy50YXJnZXRzW01hdGguZmxvb3IoaW5kZXgpXTsKK30KKworQmFzaWMuRm9yID0g
ZnVuY3Rpb24qKHN0YXRlKQoreworICAgIGxldCBzaWRlU3RhdGUgPSBzdGF0ZS5nZXRTaWRlU3Rh
dGUodGhpcyk7CisgICAgc2lkZVN0YXRlLnZhcmlhYmxlID0gc3RhdGUuZ2V0VmFsdWUodGhpcy52
YXJpYWJsZSwgMCkubGVmdEFwcGx5KHN0YXRlLCBbXSk7CisgICAgc2lkZVN0YXRlLmluaXRpYWxW
YWx1ZSA9IHRoaXMuaW5pdGlhbC5ldmFsdWF0ZShzdGF0ZSk7CisgICAgc2lkZVN0YXRlLmxpbWl0
VmFsdWUgPSB0aGlzLmxpbWl0LmV2YWx1YXRlKHN0YXRlKTsKKyAgICBzaWRlU3RhdGUuc3RlcFZh
bHVlID0gdGhpcy5zdGVwLmV2YWx1YXRlKHN0YXRlKTsKKyAgICBzaWRlU3RhdGUudmFyaWFibGUu
YXNzaWduKHNpZGVTdGF0ZS5pbml0aWFsVmFsdWUpOworICAgIHNpZGVTdGF0ZS5zaG91bGRTdG9w
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiAoc2lkZVN0YXRlLnZhcmlhYmxlLnZhbHVl
IC0gc2lkZVN0YXRlLmxpbWl0VmFsdWUpICogTWF0aC5zaWduKHNpZGVTdGF0ZS5zdGVwVmFsdWUp
ID4gMDsKKyAgICB9OworICAgIGlmIChzaWRlU3RhdGUuc2hvdWxkU3RvcCgpKQorICAgICAgICB0
aGlzLm5leHRMaW5lTnVtYmVyID0gdGhpcy50YXJnZXQubGluZU51bWJlciArIDE7Cit9CisKK0Jh
c2ljLk5leHQgPSBmdW5jdGlvbiooc3RhdGUpCit7CisgICAgbGV0IHNpZGVTdGF0ZSA9IHN0YXRl
LmdldFNpZGVTdGF0ZSh0aGlzLnRhcmdldCk7CisgICAgc2lkZVN0YXRlLnZhcmlhYmxlLmFzc2ln
bihzaWRlU3RhdGUudmFyaWFibGUudmFsdWUgKyBzaWRlU3RhdGUuc3RlcFZhbHVlKTsKKyAgICBp
ZiAoc2lkZVN0YXRlLnNob3VsZFN0b3AoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHN0YXRlLm5l
eHRMaW5lTnVtYmVyID0gdGhpcy50YXJnZXQubGluZU51bWJlciArIDE7Cit9CisKK0Jhc2ljLk5l
eHQuaXNCbG9ja0VuZCA9IHRydWU7CisKK0Jhc2ljLlByaW50ID0gZnVuY3Rpb24qKHN0YXRlKQor
eworICAgIGxldCBzdHJpbmcgPSAiIjsKKyAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuaXRlbXMp
IHsKKyAgICAgICAgc3dpdGNoIChpdGVtLmtpbmQpIHsKKyAgICAgICAgY2FzZSAiY29tbWEiOgor
ICAgICAgICAgICAgd2hpbGUgKHN0cmluZy5sZW5ndGggJSAxNCkKKyAgICAgICAgICAgICAgICBz
dHJpbmcgKz0gIiAiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgInRhYiI6IHsK
KyAgICAgICAgICAgIGxldCB2YWx1ZSA9IGl0ZW0udmFsdWUuZXZhbHVhdGUoc3RhdGUpOworICAg
ICAgICAgICAgdmFsdWUgPSBNYXRoLm1heChNYXRoLnJvdW5kKHZhbHVlKSwgMSk7CisgICAgICAg
ICAgICB3aGlsZSAoc3RyaW5nLmxlbmd0aCAlIHZhbHVlKQorICAgICAgICAgICAgICAgIHN0cmlu
ZyArPSAiICI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlICJz
dHJpbmciOgorICAgICAgICBjYXNlICJudW1iZXIiOgorICAgICAgICAgICAgc3RyaW5nICs9IGl0
ZW0udmFsdWUuZXZhbHVhdGUoc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBpdGVtIGtpbmQ6ICIgKyBp
dGVtLmtpbmQpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHlpZWxkIHtraW5kOiAib3V0
cHV0Iiwgc3RyaW5nfTsKK30KKworQmFzaWMuSW5wdXQgPSBmdW5jdGlvbiooc3RhdGUpCit7Cisg
ICAgbGV0IHJlc3VsdHMgPSB5aWVsZCB7a2luZDogImlucHV0IiwgbnVtSXRlbXM6IHRoaXMuaXRl
bXMubGVuZ3RofTsKKyAgICBzdGF0ZS52YWxpZGF0ZShyZXN1bHRzICE9IG51bGwgJiYgcmVzdWx0
cy5sZW5ndGggPT0gdGhpcy5pdGVtcy5sZW5ndGgsICJJbnB1dCBkaWQgbm90IGdldCB0aGUgcmln
aHQgbnVtYmVyIG9mIGl0ZW1zIik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRzLmxl
bmd0aDsgKytpKQorICAgICAgICB0aGlzLml0ZW1zW2ldLmV2YWx1YXRlKHN0YXRlKS5hc3NpZ24o
cmVzdWx0c1tpXSk7Cit9CisKK0Jhc2ljLlJlYWQgPSBmdW5jdGlvbiooc3RhdGUpCit7CisgICAg
Zm9yIChsZXQgaXRlbSBvZiB0aGlzLml0ZW1zKSB7CisgICAgICAgIHN0YXRlLnZhbGlkYXRlKHN0
YXRlLmRhdGFJbmRleCA8IHN0YXRlLnByb2dyYW0uZGF0YS5sZW5ndGgsICJBdHRlbXB0aW5nIHRv
IHJlYWQgcGFzdCB0aGUgZW5kIG9mIGRhdGEiKTsKKyAgICAgICAgaXRlbS5hc3NpZ24oc3RhdGUu
cHJvZ3JhbS5kYXRhW3N0YXRlLmRhdGFJbmRleCsrXSk7CisgICAgfQorfQorCitCYXNpYy5SZXN0
b3JlID0gZnVuY3Rpb24qKHN0YXRlKQoreworICAgIHN0YXRlLmRhdGFJbmRleCA9IDA7Cit9CisK
K0Jhc2ljLkRpbSA9IGZ1bmN0aW9uKihzdGF0ZSkKK3sKKyAgICBmb3IgKGxldCBpdGVtIG9mIHRo
aXMuaXRlbXMpIHsKKyAgICAgICAgc3RhdGUudmFsaWRhdGUoIXN0YXRlLnZhbHVlcy5oYXMoaXRl
bS5uYW1lKSwgIlZhcmlhYmxlICIgKyBpdGVtLm5hbWUgKyAiIGFscmVhZHkgZXhpc3RzIik7Cisg
ICAgICAgIHN0YXRlLnZhbGlkYXRlKGl0ZW0uYm91bmRzLmxlbmd0aCwgIkRpbSBzdGF0ZW1lbnQg
aXMgZm9yIGFycmF5cyIpOworICAgICAgICBzdGF0ZS52YWx1ZXMuc2V0KGl0ZW0ubmFtZSwgbmV3
IE51bWJlckFycmF5KGl0ZW0uYm91bmRzLm1hcChib3VuZCA9PiBib3VuZCArIDEpKSk7CisgICAg
fQorfQorCitCYXNpYy5SYW5kb21pemUgPSBmdW5jdGlvbiooc3RhdGUpCit7CisgICAgc3RhdGUu
cm5nID0gY3JlYXRlUk5HV2l0aFJhbmRvbVNlZWQoKTsKK30KKworQmFzaWMuRW5kID0gZnVuY3Rp
b24qKHN0YXRlKQoreworICAgIHN0YXRlLm5leHRMaW5lTnVtYmVyID0gbnVsbDsKK30KKworQmFz
aWMuRW5kLmlzQmxvY2tFbmQgPSB0cnVlOworCitCYXNpYy5Qcm9ncmFtID0gZnVuY3Rpb24qIHBy
b2dyYW1HZW5lcmF0b3Ioc3RhdGUpCit7CisgICAgc3RhdGUudmFsaWRhdGUoc3RhdGUucHJvZ3Jh
bSA9PSB0aGlzLCAiU3RhdGUgbXVzdCBtYXRjaCBwcm9ncmFtIik7CisgICAgbGV0IG1heExpbmVO
dW1iZXIgPSBNYXRoLm1heCguLi50aGlzLnN0YXRlbWVudHMua2V5cygpKTsKKyAgICB3aGlsZSAo
c3RhdGUubmV4dExpbmVOdW1iZXIgIT0gbnVsbCkgeworICAgICAgICBzdGF0ZS52YWxpZGF0ZShz
dGF0ZS5uZXh0TGluZU51bWJlciA8PSBtYXhMaW5lTnVtYmVyLCAiV2VudCBvdXQgb2YgYm91bmRz
IG9mIHRoZSBwcm9ncmFtIik7CisgICAgICAgIGxldCBzdGF0ZW1lbnQgPSB0aGlzLnN0YXRlbWVu
dHMuZ2V0KHN0YXRlLm5leHRMaW5lTnVtYmVyKyspOworICAgICAgICBpZiAoc3RhdGVtZW50ID09
IG51bGwgfHwgc3RhdGVtZW50LnByb2Nlc3MgPT0gbnVsbCkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBzdGF0ZS5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7CisgICAgICAgIHlpZWxkKiBz
dGF0ZW1lbnQucHJvY2VzcyhzdGF0ZSk7CisgICAgfQorfQorCkluZGV4OiBQZXJmb3JtYW5jZVRl
c3RzL0FSRVMtNi9CYWJ5bG9uL2JlbmNobWFyay5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5j
ZVRlc3RzL0FSRVMtNi9CYWJ5bG9uL2JlbmNobWFyay5qcwkobm9uZXhpc3RlbnQpCisrKyBQZXJm
b3JtYW5jZVRlc3RzL0FSRVMtNi9CYWJ5bG9uL2JlbmNobWFyay5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisidXNlIHN0cmljdCI7CisKK2xldCBjdXJyZW50VGltZTsKK2lmICh0aGlzLnBlcmZv
cm1hbmNlICYmIHBlcmZvcm1hbmNlLm5vdykKKyAgICBjdXJyZW50VGltZSA9IGZ1bmN0aW9uKCkg
eyByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCkgfTsKK2Vsc2UgaWYgKHRoaXMucHJlY2lzZVRpbWUp
CisgICAgY3VycmVudFRpbWUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHByZWNpc2VUaW1lKCkgKiAx
MDAwOyB9OworZWxzZQorICAgIGN1cnJlbnRUaW1lID0gZnVuY3Rpb24oKSB7IHJldHVybiArbmV3
IERhdGUoKTsgfTsKKworY2xhc3MgQmFieWxvbkJlbmNobWFyayB7CisgICAgY29uc3RydWN0b3Io
dmVyYm9zZSA9IDApCisgICAgeworICAgICAgICBsZXQgc291cmNlcyA9IFtdOworCisgICAgICAg
IGNvbnN0IGZpbGVzID0gWworICAgICAgICAgICAgWyIuL0JhYnlsb24vYWlyLWJsb2IuanMiLCB7
fV0KKyAgICAgICAgICAgICwgWyIuL0JhYnlsb24vYmFzaWMtYmxvYi5qcyIsIHt9XQorICAgICAg
ICAgICAgLCBbIi4vQmFieWxvbi9pbnNwZWN0b3ItYmxvYi5qcyIsIHt9XQorICAgICAgICAgICAg
LCBbIi4vQmFieWxvbi9iYWJ5bG9uLWJsb2IuanMiLCB7c291cmNlVHlwZTogIm1vZHVsZSJ9XQor
ICAgICAgICBdOworCisgICAgICAgIGZvciAobGV0IFtmaWxlLCBvcHRpb25zXSBvZiBmaWxlcykg
eworICAgICAgICAgICAgZnVuY3Rpb24gYXBwZW5kU291cmNlKHMpIHsKKyAgICAgICAgICAgICAg
ICBzb3VyY2VzLnB1c2goW2ZpbGUsIHMsIG9wdGlvbnNdKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgbGV0IHM7CisgICAgICAgICAgICBjb25zdCBpc0luQnJvd3NlciA9IHR5cGVvZiB3
aW5kb3cgIT09ICJ1bmRlZmluZWQiOworICAgICAgICAgICAgaWYgKGlzSW5Ccm93c2VyKSB7Cisg
ICAgICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAg
ICAgICAgICAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIGZpbGUsIGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICByZXF1ZXN0LnNlbmQobnVsbCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LnJl
c3BvbnNlVGV4dC5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigi
RXhwZWN0IG5vbi1lbXB0eSBzb3VyY2VzIik7CisgICAgICAgICAgICAgICAgYXBwZW5kU291cmNl
KHJlcXVlc3QucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgYXBwZW5kU291cmNlKHJlYWQoZmlsZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgdGhpcy5zb3VyY2VzID0gc291cmNlczsKKyAgICB9CisKKyAgICBydW5JdGVy
YXRpb24oKQorICAgIHsKKyAgICAgICAgY29uc3QgUGFyc2VyID0gcGFyc2VySW5kZXhKUzsKKyAg
ICAgICAgY29uc3QgeyBwbHVnaW5zIH0gPSBwYXJzZXJJbmRleEpTOworICAgICAgICBjb25zdCB7
IHR5cGVzIDogdG9rVHlwZXMgfSA9IHRva2VuaXplclR5cGVzSlM7CisgICAgICAgIGNvbnN0IGVz
dHJlZVBsdWdpbiA9IHBsdWdpbnNFc3RyZWVKUzsKKyAgICAgICAgY29uc3QgZmxvd1BsdWdpbiA9
IHBsdWdpbnNGbG93SlM7CisgICAgICAgIGNvbnN0IGpzeFBsdWdpbiA9IHBsdWdpbnNKc3hJbmRl
eEpTOworICAgICAgICBwbHVnaW5zLmVzdHJlZSA9IGVzdHJlZVBsdWdpbjsKKyAgICAgICAgcGx1
Z2lucy5mbG93ID0gZmxvd1BsdWdpbjsKKyAgICAgICAgcGx1Z2lucy5qc3ggPSBqc3hQbHVnaW47
CisKKyAgICAgICAgZnVuY3Rpb24gcGFyc2UoaW5wdXQsIG9wdGlvbnMpIHsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgUGFyc2VyKG9wdGlvbnMsIGlucHV0KS5wYXJzZSgpOworICAgICAgICB9CisK
KyAgICAgICAgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKGlucHV0LCBvcHRpb25zKSB7CisgICAg
ICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgUGFyc2VyKG9wdGlvbnMsIGlucHV0KTsKKyAgICAg
ICAgICAgIGlmIChwYXJzZXIub3B0aW9ucy5zdHJpY3RNb2RlKSB7CisgICAgICAgICAgICAgICAg
cGFyc2VyLnN0YXRlLnN0cmljdCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gcGFyc2VyLmdldEV4cHJlc3Npb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAo
bGV0IFtmaWxlTmFtZSwgc291cmNlLCBvcHRpb25zXSBvZiB0aGlzLnNvdXJjZXMpIHsKKyAgICAg
ICAgICAgIHBhcnNlKHNvdXJjZSwgb3B0aW9ucyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1
bmN0aW9uIHJ1bkJlbmNobWFyaygpCit7CisgICAgY29uc3QgdmVyYm9zZSA9IDA7CisgICAgY29u
c3QgbnVtSXRlcmF0aW9ucyA9IDE1MDsKKworICAgIGxldCBiZWZvcmUgPSBjdXJyZW50VGltZSgp
OworCisgICAgbGV0IGJlbmNobWFyayA9IG5ldyBCZW5jaG1hcmsodmVyYm9zZSk7CisKKyAgICBm
b3IgKGxldCBpdGVyYXRpb24gPSAwOyBpdGVyYXRpb24gPCBudW1JdGVyYXRpb25zOyArK2l0ZXJh
dGlvbikKKyAgICAgICAgYmVuY2htYXJrLnJ1bkl0ZXJhdGlvbigpOworCisgICAgbGV0IGFmdGVy
ID0gY3VycmVudFRpbWUoKTsKKyAgICByZXR1cm4gYWZ0ZXIgLSBiZWZvcmU7Cit9CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0FSRVMtNi9CYWJ5bG9uL2luZGV4LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvQVJFUy02L0JhYnlsb24vaW5kZXguanMJKG5vbmV4aXN0ZW50KQorKysg
UGVyZm9ybWFuY2VUZXN0cy9BUkVTLTYvQmFieWxvbi9pbmRleC5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY5NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBieSB2YXJp
b3VzIGNvbnRyaWJ1dG9ycyAoc2VlIEFVVEhPUlMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5
IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkK
KyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo
dGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0
cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1
c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us
IGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl
cnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi
amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5
cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk
IGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2Fy
ZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS
UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg
Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM
RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9N
LAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT
RSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorKi8KKworInVzZSBzdHJp
Y3QiOworCisvLyB1dGlsL2lkZW50aWZpZXIuanMKKworY29uc3QgdXRpbElkZW50aWZpZXJKUyA9
IHsgfTsKK3sKKyAgICAvKiBlc2xpbnQgbWF4LWxlbjogMCAqLworCisgICAgLy8gVGhpcyBpcyBh
IHRyaWNrIHRha2VuIGZyb20gRXNwcmltYS4gSXQgdHVybnMgb3V0IHRoYXQsIG9uCisgICAgLy8g
bm9uLUNocm9tZSBicm93c2VycywgdG8gY2hlY2sgd2hldGhlciBhIHN0cmluZyBpcyBpbiBhIHNl
dCwgYQorICAgIC8vIHByZWRpY2F0ZSBjb250YWluaW5nIGEgYmlnIHVnbHkgYHN3aXRjaGAgc3Rh
dGVtZW50IGlzIGZhc3RlciB0aGFuCisgICAgLy8gYSByZWd1bGFyIGV4cHJlc3Npb24sIGFuZCBv
biBDaHJvbWUgdGhlIHR3byBhcmUgYWJvdXQgb24gcGFyLgorICAgIC8vIFRoaXMgZnVuY3Rpb24g
dXNlcyBgZXZhbGAgKG5vbi1sZXhpY2FsKSB0byBwcm9kdWNlIHN1Y2ggYQorICAgIC8vIHByZWRp
Y2F0ZSBmcm9tIGEgc3BhY2Utc2VwYXJhdGVkIHN0cmluZyBvZiB3b3Jkcy4KKyAgICAvLworICAg
IC8vIEl0IHN0YXJ0cyBieSBzb3J0aW5nIHRoZSB3b3JkcyBieSBsZW5ndGguCisKKyAgICBmdW5j
dGlvbiBtYWtlUHJlZGljYXRlKHdvcmRzKSB7CisgICAgICB3b3JkcyA9IHdvcmRzLnNwbGl0KCIg
Iik7CisgICAgICByZXR1cm4gZnVuY3Rpb24gKHN0cikgeworICAgICAgICByZXR1cm4gd29yZHMu
aW5kZXhPZihzdHIpID49IDA7CisgICAgICB9OworICAgIH0KKworICAgIC8vIFJlc2VydmVkIHdv
cmQgbGlzdHMgZm9yIHZhcmlvdXMgZGlhbGVjdHMgb2YgdGhlIGxhbmd1YWdlCisKKyAgICBjb25z
dCByZXNlcnZlZFdvcmRzID0geworICAgICAgNjogbWFrZVByZWRpY2F0ZSgiZW51bSBhd2FpdCIp
LAorICAgICAgc3RyaWN0OiBtYWtlUHJlZGljYXRlKCJpbXBsZW1lbnRzIGludGVyZmFjZSBsZXQg
cGFja2FnZSBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgc3RhdGljIHlpZWxkIiksCisgICAgICBz
dHJpY3RCaW5kOiBtYWtlUHJlZGljYXRlKCJldmFsIGFyZ3VtZW50cyIpCisgICAgfTsKKyAgICB1
dGlsSWRlbnRpZmllckpTLnJlc2VydmVkV29yZHMgPSByZXNlcnZlZFdvcmRzOworCisgICAgLy8g
QW5kIHRoZSBrZXl3b3JkcworCisgICAgY29uc3QgaXNLZXl3b3JkID0gbWFrZVByZWRpY2F0ZSgi
YnJlYWsgY2FzZSBjYXRjaCBjb250aW51ZSBkZWJ1Z2dlciBkZWZhdWx0IGRvIGVsc2UgZmluYWxs
eSBmb3IgZnVuY3Rpb24gaWYgcmV0dXJuIHN3aXRjaCB0aHJvdyB0cnkgdmFyIHdoaWxlIHdpdGgg
bnVsbCB0cnVlIGZhbHNlIGluc3RhbmNlb2YgdHlwZW9mIHZvaWQgZGVsZXRlIG5ldyBpbiB0aGlz
IGxldCBjb25zdCBjbGFzcyBleHRlbmRzIGV4cG9ydCBpbXBvcnQgeWllbGQgc3VwZXIiKTsKKyAg
ICB1dGlsSWRlbnRpZmllckpTLmlzS2V5d29yZCA9IGlzS2V5d29yZDsKKworICAgIC8vICMjIENo
YXJhY3RlciBjYXRlZ29yaWVzCisKKyAgICAvLyBCaWcgdWdseSByZWd1bGFyIGV4cHJlc3Npb25z
IHRoYXQgbWF0Y2ggY2hhcmFjdGVycyBpbiB0aGUKKyAgICAvLyB3aGl0ZXNwYWNlLCBpZGVudGlm
aWVyLCBhbmQgaWRlbnRpZmllci1zdGFydCBjYXRlZ29yaWVzLiBUaGVzZQorICAgIC8vIGFyZSBv
bmx5IGFwcGxpZWQgd2hlbiBhIGNoYXJhY3RlciBpcyBmb3VuZCB0byBhY3R1YWxseSBoYXZlIGEK
KyAgICAvLyBjb2RlIHBvaW50IGFib3ZlIDEyOC4KKyAgICAvLyBHZW5lcmF0ZWQgYnkgYGJpbi9n
ZW5lcmF0ZS1pZGVudGlmaWVyLXJlZ2V4LmpzYC4KKworICAgIGxldCBub25BU0NJSWlkZW50aWZp
ZXJTdGFydENoYXJzID0gIlx4YWFceGI1XHhiYVx4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHUwMmMx
XHUwMmM2LVx1MDJkMVx1MDJlMC1cdTAyZTRcdTAyZWNcdTAyZWVcdTAzNzAtXHUwMzc0XHUwMzc2
XHUwMzc3XHUwMzdhLVx1MDM3ZFx1MDM3Zlx1MDM4Nlx1MDM4OC1cdTAzOGFcdTAzOGNcdTAzOGUt
XHUwM2ExXHUwM2EzLVx1MDNmNVx1MDNmNy1cdTA0ODFcdTA0OGEtXHUwNTJmXHUwNTMxLVx1MDU1
Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1ZDAtXHUwNWVhXHUwNWYwLVx1MDVmMlx1MDYyMC1cdTA2
NGFcdTA2NmVcdTA2NmZcdTA2NzEtXHUwNmQzXHUwNmQ1XHUwNmU1XHUwNmU2XHUwNmVlXHUwNmVm
XHUwNmZhLVx1MDZmY1x1MDZmZlx1MDcxMFx1MDcxMi1cdTA3MmZcdTA3NGQtXHUwN2E1XHUwN2Ix
XHUwN2NhLVx1MDdlYVx1MDdmNFx1MDdmNVx1MDdmYVx1MDgwMC1cdTA4MTVcdTA4MWFcdTA4MjRc
dTA4MjhcdTA4NDAtXHUwODU4XHUwOGEwLVx1MDhiNFx1MDhiNi1cdTA4YmRcdTA5MDQtXHUwOTM5
XHUwOTNkXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5ODBcdTA5ODUtXHUwOThjXHUwOThm
XHUwOTkwXHUwOTkzLVx1MDlhOFx1MDlhYS1cdTA5YjBcdTA5YjJcdTA5YjYtXHUwOWI5XHUwOWJk
XHUwOWNlXHUwOWRjXHUwOWRkXHUwOWRmLVx1MDllMVx1MDlmMFx1MDlmMVx1MGEwNS1cdTBhMGFc
dTBhMGZcdTBhMTBcdTBhMTMtXHUwYTI4XHUwYTJhLVx1MGEzMFx1MGEzMlx1MGEzM1x1MGEzNVx1
MGEzNlx1MGEzOFx1MGEzOVx1MGE1OS1cdTBhNWNcdTBhNWVcdTBhNzItXHUwYTc0XHUwYTg1LVx1
MGE4ZFx1MGE4Zi1cdTBhOTFcdTBhOTMtXHUwYWE4XHUwYWFhLVx1MGFiMFx1MGFiMlx1MGFiM1x1
MGFiNS1cdTBhYjlcdTBhYmRcdTBhZDBcdTBhZTBcdTBhZTFcdTBhZjlcdTBiMDUtXHUwYjBjXHUw
YjBmXHUwYjEwXHUwYjEzLVx1MGIyOFx1MGIyYS1cdTBiMzBcdTBiMzJcdTBiMzNcdTBiMzUtXHUw
YjM5XHUwYjNkXHUwYjVjXHUwYjVkXHUwYjVmLVx1MGI2MVx1MGI3MVx1MGI4M1x1MGI4NS1cdTBi
OGFcdTBiOGUtXHUwYjkwXHUwYjkyLVx1MGI5NVx1MGI5OVx1MGI5YVx1MGI5Y1x1MGI5ZVx1MGI5
Zlx1MGJhM1x1MGJhNFx1MGJhOC1cdTBiYWFcdTBiYWUtXHUwYmI5XHUwYmQwXHUwYzA1LVx1MGMw
Y1x1MGMwZS1cdTBjMTBcdTBjMTItXHUwYzI4XHUwYzJhLVx1MGMzOVx1MGMzZFx1MGM1OC1cdTBj
NWFcdTBjNjBcdTBjNjFcdTBjODBcdTBjODUtXHUwYzhjXHUwYzhlLVx1MGM5MFx1MGM5Mi1cdTBj
YThcdTBjYWEtXHUwY2IzXHUwY2I1LVx1MGNiOVx1MGNiZFx1MGNkZVx1MGNlMFx1MGNlMVx1MGNm
MVx1MGNmMlx1MGQwNS1cdTBkMGNcdTBkMGUtXHUwZDEwXHUwZDEyLVx1MGQzYVx1MGQzZFx1MGQ0
ZVx1MGQ1NC1cdTBkNTZcdTBkNWYtXHUwZDYxXHUwZDdhLVx1MGQ3Zlx1MGQ4NS1cdTBkOTZcdTBk
OWEtXHUwZGIxXHUwZGIzLVx1MGRiYlx1MGRiZFx1MGRjMC1cdTBkYzZcdTBlMDEtXHUwZTMwXHUw
ZTMyXHUwZTMzXHUwZTQwLVx1MGU0Nlx1MGU4MVx1MGU4Mlx1MGU4NFx1MGU4N1x1MGU4OFx1MGU4
YVx1MGU4ZFx1MGU5NC1cdTBlOTdcdTBlOTktXHUwZTlmXHUwZWExLVx1MGVhM1x1MGVhNVx1MGVh
N1x1MGVhYVx1MGVhYlx1MGVhZC1cdTBlYjBcdTBlYjJcdTBlYjNcdTBlYmRcdTBlYzAtXHUwZWM0
XHUwZWM2XHUwZWRjLVx1MGVkZlx1MGYwMFx1MGY0MC1cdTBmNDdcdTBmNDktXHUwZjZjXHUwZjg4
LVx1MGY4Y1x1MTAwMC1cdTEwMmFcdTEwM2ZcdTEwNTAtXHUxMDU1XHUxMDVhLVx1MTA1ZFx1MTA2
MVx1MTA2NVx1MTA2Nlx1MTA2ZS1cdTEwNzBcdTEwNzUtXHUxMDgxXHUxMDhlXHUxMGEwLVx1MTBj
NVx1MTBjN1x1MTBjZFx1MTBkMC1cdTEwZmFcdTEwZmMtXHUxMjQ4XHUxMjRhLVx1MTI0ZFx1MTI1
MC1cdTEyNTZcdTEyNThcdTEyNWEtXHUxMjVkXHUxMjYwLVx1MTI4OFx1MTI4YS1cdTEyOGRcdTEy
OTAtXHUxMmIwXHUxMmIyLVx1MTJiNVx1MTJiOC1cdTEyYmVcdTEyYzBcdTEyYzItXHUxMmM1XHUx
MmM4LVx1MTJkNlx1MTJkOC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1YVx1MTM4MC1c
dTEzOGZcdTEzYTAtXHUxM2Y1XHUxM2Y4LVx1MTNmZFx1MTQwMS1cdTE2NmNcdTE2NmYtXHUxNjdm
XHUxNjgxLVx1MTY5YVx1MTZhMC1cdTE2ZWFcdTE2ZWUtXHUxNmY4XHUxNzAwLVx1MTcwY1x1MTcw
ZS1cdTE3MTFcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NmNcdTE3NmUtXHUx
NzcwXHUxNzgwLVx1MTdiM1x1MTdkN1x1MTdkY1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOGE4XHUx
OGFhXHUxOGIwLVx1MThmNVx1MTkwMC1cdTE5MWVcdTE5NTAtXHUxOTZkXHUxOTcwLVx1MTk3NFx1
MTk4MC1cdTE5YWJcdTE5YjAtXHUxOWM5XHUxYTAwLVx1MWExNlx1MWEyMC1cdTFhNTRcdTFhYTdc
dTFiMDUtXHUxYjMzXHUxYjQ1LVx1MWI0Ylx1MWI4My1cdTFiYTBcdTFiYWVcdTFiYWZcdTFiYmEt
XHUxYmU1XHUxYzAwLVx1MWMyM1x1MWM0ZC1cdTFjNGZcdTFjNWEtXHUxYzdkXHUxYzgwLVx1MWM4
OFx1MWNlOS1cdTFjZWNcdTFjZWUtXHUxY2YxXHUxY2Y1XHUxY2Y2XHUxZDAwLVx1MWRiZlx1MWUw
MC1cdTFmMTVcdTFmMTgtXHUxZjFkXHUxZjIwLVx1MWY0NVx1MWY0OC1cdTFmNGRcdTFmNTAtXHUx
ZjU3XHUxZjU5XHUxZjViXHUxZjVkXHUxZjVmLVx1MWY3ZFx1MWY4MC1cdTFmYjRcdTFmYjYtXHUx
ZmJjXHUxZmJlXHUxZmMyLVx1MWZjNFx1MWZjNi1cdTFmY2NcdTFmZDAtXHUxZmQzXHUxZmQ2LVx1
MWZkYlx1MWZlMC1cdTFmZWNcdTFmZjItXHUxZmY0XHUxZmY2LVx1MWZmY1x1MjA3MVx1MjA3Zlx1
MjA5MC1cdTIwOWNcdTIxMDJcdTIxMDdcdTIxMGEtXHUyMTEzXHUyMTE1XHUyMTE4LVx1MjExZFx1
MjEyNFx1MjEyNlx1MjEyOFx1MjEyYS1cdTIxMzlcdTIxM2MtXHUyMTNmXHUyMTQ1LVx1MjE0OVx1
MjE0ZVx1MjE2MC1cdTIxODhcdTJjMDAtXHUyYzJlXHUyYzMwLVx1MmM1ZVx1MmM2MC1cdTJjZTRc
dTJjZWItXHUyY2VlXHUyY2YyXHUyY2YzXHUyZDAwLVx1MmQyNVx1MmQyN1x1MmQyZFx1MmQzMC1c
dTJkNjdcdTJkNmZcdTJkODAtXHUyZDk2XHUyZGEwLVx1MmRhNlx1MmRhOC1cdTJkYWVcdTJkYjAt
XHUyZGI2XHUyZGI4LVx1MmRiZVx1MmRjMC1cdTJkYzZcdTJkYzgtXHUyZGNlXHUyZGQwLVx1MmRk
Nlx1MmRkOC1cdTJkZGVcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyOVx1MzAzMS1cdTMwMzVcdTMw
MzgtXHUzMDNjXHUzMDQxLVx1MzA5Nlx1MzA5Yi1cdTMwOWZcdTMwYTEtXHUzMGZhXHUzMGZjLVx1
MzBmZlx1MzEwNS1cdTMxMmRcdTMxMzEtXHUzMThlXHUzMWEwLVx1MzFiYVx1MzFmMC1cdTMxZmZc
dTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZkNVx1YTAwMC1cdWE0OGNcdWE0ZDAtXHVhNGZkXHVhNTAw
LVx1YTYwY1x1YTYxMC1cdWE2MWZcdWE2MmFcdWE2MmJcdWE2NDAtXHVhNjZlXHVhNjdmLVx1YTY5
ZFx1YTZhMC1cdWE2ZWZcdWE3MTctXHVhNzFmXHVhNzIyLVx1YTc4OFx1YTc4Yi1cdWE3YWVcdWE3
YjAtXHVhN2I3XHVhN2Y3LVx1YTgwMVx1YTgwMy1cdWE4MDVcdWE4MDctXHVhODBhXHVhODBjLVx1
YTgyMlx1YTg0MC1cdWE4NzNcdWE4ODItXHVhOGIzXHVhOGYyLVx1YThmN1x1YThmYlx1YThmZFx1
YTkwYS1cdWE5MjVcdWE5MzAtXHVhOTQ2XHVhOTYwLVx1YTk3Y1x1YTk4NC1cdWE5YjJcdWE5Y2Zc
dWE5ZTAtXHVhOWU0XHVhOWU2LVx1YTllZlx1YTlmYS1cdWE5ZmVcdWFhMDAtXHVhYTI4XHVhYTQw
LVx1YWE0Mlx1YWE0NC1cdWFhNGJcdWFhNjAtXHVhYTc2XHVhYTdhXHVhYTdlLVx1YWFhZlx1YWFi
MVx1YWFiNVx1YWFiNlx1YWFiOS1cdWFhYmRcdWFhYzBcdWFhYzJcdWFhZGItXHVhYWRkXHVhYWUw
LVx1YWFlYVx1YWFmMi1cdWFhZjRcdWFiMDEtXHVhYjA2XHVhYjA5LVx1YWIwZVx1YWIxMS1cdWFi
MTZcdWFiMjAtXHVhYjI2XHVhYjI4LVx1YWIyZVx1YWIzMC1cdWFiNWFcdWFiNWMtXHVhYjY1XHVh
YjcwLVx1YWJlMlx1YWMwMC1cdWQ3YTNcdWQ3YjAtXHVkN2M2XHVkN2NiLVx1ZDdmYlx1ZjkwMC1c
dWZhNmRcdWZhNzAtXHVmYWQ5XHVmYjAwLVx1ZmIwNlx1ZmIxMy1cdWZiMTdcdWZiMWRcdWZiMWYt
XHVmYjI4XHVmYjJhLVx1ZmIzNlx1ZmIzOC1cdWZiM2NcdWZiM2VcdWZiNDBcdWZiNDFcdWZiNDNc
dWZiNDRcdWZiNDYtXHVmYmIxXHVmYmQzLVx1ZmQzZFx1ZmQ1MC1cdWZkOGZcdWZkOTItXHVmZGM3
XHVmZGYwLVx1ZmRmYlx1ZmU3MC1cdWZlNzRcdWZlNzYtXHVmZWZjXHVmZjIxLVx1ZmYzYVx1ZmY0
MS1cdWZmNWFcdWZmNjYtXHVmZmJlXHVmZmMyLVx1ZmZjN1x1ZmZjYS1cdWZmY2ZcdWZmZDItXHVm
ZmQ3XHVmZmRhLVx1ZmZkYyI7CisgICAgbGV0IG5vbkFTQ0lJaWRlbnRpZmllckNoYXJzID0gIlx1
MjAwY1x1MjAwZFx4YjdcdTAzMDAtXHUwMzZmXHUwMzg3XHUwNDgzLVx1MDQ4N1x1MDU5MS1cdTA1
YmRcdTA1YmZcdTA1YzFcdTA1YzJcdTA1YzRcdTA1YzVcdTA1YzdcdTA2MTAtXHUwNjFhXHUwNjRi
LVx1MDY2OVx1MDY3MFx1MDZkNi1cdTA2ZGNcdTA2ZGYtXHUwNmU0XHUwNmU3XHUwNmU4XHUwNmVh
LVx1MDZlZFx1MDZmMC1cdTA2ZjlcdTA3MTFcdTA3MzAtXHUwNzRhXHUwN2E2LVx1MDdiMFx1MDdj
MC1cdTA3YzlcdTA3ZWItXHUwN2YzXHUwODE2LVx1MDgxOVx1MDgxYi1cdTA4MjNcdTA4MjUtXHUw
ODI3XHUwODI5LVx1MDgyZFx1MDg1OS1cdTA4NWJcdTA4ZDQtXHUwOGUxXHUwOGUzLVx1MDkwM1x1
MDkzYS1cdTA5M2NcdTA5M2UtXHUwOTRmXHUwOTUxLVx1MDk1N1x1MDk2Mlx1MDk2M1x1MDk2Ni1c
dTA5NmZcdTA5ODEtXHUwOTgzXHUwOWJjXHUwOWJlLVx1MDljNFx1MDljN1x1MDljOFx1MDljYi1c
dTA5Y2RcdTA5ZDdcdTA5ZTJcdTA5ZTNcdTA5ZTYtXHUwOWVmXHUwYTAxLVx1MGEwM1x1MGEzY1x1
MGEzZS1cdTBhNDJcdTBhNDdcdTBhNDhcdTBhNGItXHUwYTRkXHUwYTUxXHUwYTY2LVx1MGE3MVx1
MGE3NVx1MGE4MS1cdTBhODNcdTBhYmNcdTBhYmUtXHUwYWM1XHUwYWM3LVx1MGFjOVx1MGFjYi1c
dTBhY2RcdTBhZTJcdTBhZTNcdTBhZTYtXHUwYWVmXHUwYjAxLVx1MGIwM1x1MGIzY1x1MGIzZS1c
dTBiNDRcdTBiNDdcdTBiNDhcdTBiNGItXHUwYjRkXHUwYjU2XHUwYjU3XHUwYjYyXHUwYjYzXHUw
YjY2LVx1MGI2Zlx1MGI4Mlx1MGJiZS1cdTBiYzJcdTBiYzYtXHUwYmM4XHUwYmNhLVx1MGJjZFx1
MGJkN1x1MGJlNi1cdTBiZWZcdTBjMDAtXHUwYzAzXHUwYzNlLVx1MGM0NFx1MGM0Ni1cdTBjNDhc
dTBjNGEtXHUwYzRkXHUwYzU1XHUwYzU2XHUwYzYyXHUwYzYzXHUwYzY2LVx1MGM2Zlx1MGM4MS1c
dTBjODNcdTBjYmNcdTBjYmUtXHUwY2M0XHUwY2M2LVx1MGNjOFx1MGNjYS1cdTBjY2RcdTBjZDVc
dTBjZDZcdTBjZTJcdTBjZTNcdTBjZTYtXHUwY2VmXHUwZDAxLVx1MGQwM1x1MGQzZS1cdTBkNDRc
dTBkNDYtXHUwZDQ4XHUwZDRhLVx1MGQ0ZFx1MGQ1N1x1MGQ2Mlx1MGQ2M1x1MGQ2Ni1cdTBkNmZc
dTBkODJcdTBkODNcdTBkY2FcdTBkY2YtXHUwZGQ0XHUwZGQ2XHUwZGQ4LVx1MGRkZlx1MGRlNi1c
dTBkZWZcdTBkZjJcdTBkZjNcdTBlMzFcdTBlMzQtXHUwZTNhXHUwZTQ3LVx1MGU0ZVx1MGU1MC1c
dTBlNTlcdTBlYjFcdTBlYjQtXHUwZWI5XHUwZWJiXHUwZWJjXHUwZWM4LVx1MGVjZFx1MGVkMC1c
dTBlZDlcdTBmMThcdTBmMTlcdTBmMjAtXHUwZjI5XHUwZjM1XHUwZjM3XHUwZjM5XHUwZjNlXHUw
ZjNmXHUwZjcxLVx1MGY4NFx1MGY4Nlx1MGY4N1x1MGY4ZC1cdTBmOTdcdTBmOTktXHUwZmJjXHUw
ZmM2XHUxMDJiLVx1MTAzZVx1MTA0MC1cdTEwNDlcdTEwNTYtXHUxMDU5XHUxMDVlLVx1MTA2MFx1
MTA2Mi1cdTEwNjRcdTEwNjctXHUxMDZkXHUxMDcxLVx1MTA3NFx1MTA4Mi1cdTEwOGRcdTEwOGYt
XHUxMDlkXHUxMzVkLVx1MTM1Zlx1MTM2OS1cdTEzNzFcdTE3MTItXHUxNzE0XHUxNzMyLVx1MTcz
NFx1MTc1Mlx1MTc1M1x1MTc3Mlx1MTc3M1x1MTdiNC1cdTE3ZDNcdTE3ZGRcdTE3ZTAtXHUxN2U5
XHUxODBiLVx1MTgwZFx1MTgxMC1cdTE4MTlcdTE4YTlcdTE5MjAtXHUxOTJiXHUxOTMwLVx1MTkz
Ylx1MTk0Ni1cdTE5NGZcdTE5ZDAtXHUxOWRhXHUxYTE3LVx1MWExYlx1MWE1NS1cdTFhNWVcdTFh
NjAtXHUxYTdjXHUxYTdmLVx1MWE4OVx1MWE5MC1cdTFhOTlcdTFhYjAtXHUxYWJkXHUxYjAwLVx1
MWIwNFx1MWIzNC1cdTFiNDRcdTFiNTAtXHUxYjU5XHUxYjZiLVx1MWI3M1x1MWI4MC1cdTFiODJc
dTFiYTEtXHUxYmFkXHUxYmIwLVx1MWJiOVx1MWJlNi1cdTFiZjNcdTFjMjQtXHUxYzM3XHUxYzQw
LVx1MWM0OVx1MWM1MC1cdTFjNTlcdTFjZDAtXHUxY2QyXHUxY2Q0LVx1MWNlOFx1MWNlZFx1MWNm
Mi1cdTFjZjRcdTFjZjhcdTFjZjlcdTFkYzAtXHUxZGY1XHUxZGZiLVx1MWRmZlx1MjAzZlx1MjA0
MFx1MjA1NFx1MjBkMC1cdTIwZGNcdTIwZTFcdTIwZTUtXHUyMGYwXHUyY2VmLVx1MmNmMVx1MmQ3
Zlx1MmRlMC1cdTJkZmZcdTMwMmEtXHUzMDJmXHUzMDk5XHUzMDlhXHVhNjIwLVx1YTYyOVx1YTY2
Zlx1YTY3NC1cdWE2N2RcdWE2OWVcdWE2OWZcdWE2ZjBcdWE2ZjFcdWE4MDJcdWE4MDZcdWE4MGJc
dWE4MjMtXHVhODI3XHVhODgwXHVhODgxXHVhOGI0LVx1YThjNVx1YThkMC1cdWE4ZDlcdWE4ZTAt
XHVhOGYxXHVhOTAwLVx1YTkwOVx1YTkyNi1cdWE5MmRcdWE5NDctXHVhOTUzXHVhOTgwLVx1YTk4
M1x1YTliMy1cdWE5YzBcdWE5ZDAtXHVhOWQ5XHVhOWU1XHVhOWYwLVx1YTlmOVx1YWEyOS1cdWFh
MzZcdWFhNDNcdWFhNGNcdWFhNGRcdWFhNTAtXHVhYTU5XHVhYTdiLVx1YWE3ZFx1YWFiMFx1YWFi
Mi1cdWFhYjRcdWFhYjdcdWFhYjhcdWFhYmVcdWFhYmZcdWFhYzFcdWFhZWItXHVhYWVmXHVhYWY1
XHVhYWY2XHVhYmUzLVx1YWJlYVx1YWJlY1x1YWJlZFx1YWJmMC1cdWFiZjlcdWZiMWVcdWZlMDAt
XHVmZTBmXHVmZTIwLVx1ZmUyZlx1ZmUzM1x1ZmUzNFx1ZmU0ZC1cdWZlNGZcdWZmMTAtXHVmZjE5
XHVmZjNmIjsKKworICAgIGNvbnN0IG5vbkFTQ0lJaWRlbnRpZmllclN0YXJ0ID0gbmV3IFJlZ0V4
cCgiWyIgKyBub25BU0NJSWlkZW50aWZpZXJTdGFydENoYXJzICsgIl0iKTsKKyAgICBjb25zdCBu
b25BU0NJSWlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCJbIiArIG5vbkFTQ0lJaWRlbnRpZmllclN0
YXJ0Q2hhcnMgKyBub25BU0NJSWlkZW50aWZpZXJDaGFycyArICJdIik7CisKKyAgICBub25BU0NJ
SWlkZW50aWZpZXJTdGFydENoYXJzID0gbm9uQVNDSUlpZGVudGlmaWVyQ2hhcnMgPSBudWxsOwor
CisgICAgLy8gVGhlc2UgYXJlIGEgcnVuLWxlbmd0aCBhbmQgb2Zmc2V0IGVuY29kZWQgcmVwcmVz
ZW50YXRpb24gb2YgdGhlCisgICAgLy8gPjB4ZmZmZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBhIHZh
bGlkIHBhcnQgb2YgaWRlbnRpZmllcnMuIFRoZQorICAgIC8vIG9mZnNldCBzdGFydHMgYXQgMHgx
MDAwMCwgYW5kIGVhY2ggcGFpciBvZiBudW1iZXJzIHJlcHJlc2VudHMgYW4KKyAgICAvLyBvZmZz
ZXQgdG8gdGhlIG5leHQgcmFuZ2UsIGFuZCB0aGVuIGEgc2l6ZSBvZiB0aGUgcmFuZ2UuIFRoZXkg
d2VyZQorICAgIC8vIGdlbmVyYXRlZCBieSBgYmluL2dlbmVyYXRlLWlkZW50aWZpZXItcmVnZXgu
anNgLgorICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21tYS1zcGFjaW5nCisgICAg
Y29uc3QgYXN0cmFsSWRlbnRpZmllclN0YXJ0Q29kZXMgPSBbMCwxMSwyLDI1LDIsMTgsMiwxLDIs
MTQsMywxMywzNSwxMjIsNzAsNTIsMjY4LDI4LDQsNDgsNDgsMzEsMTcsMjYsNiwzNywxMSwyOSwz
LDM1LDUsNywyLDQsNDMsMTU3LDE5LDM1LDUsMzUsNSwzOSw5LDUxLDE1NywzMTAsMTAsMjEsMTEs
NywxNTMsNSwzLDAsMiw0MywyLDEsNCwwLDMsMjIsMTEsMjIsMTAsMzAsNjYsMTgsMiwxLDExLDIx
LDExLDI1LDcxLDU1LDcsMSw2NSwwLDE2LDMsMiwyLDIsMjYsNDUsMjgsNCwyOCwzNiw3LDIsMjcs
MjgsNTMsMTEsMjEsMTEsMTgsMTQsMTcsMTExLDcyLDU2LDUwLDE0LDUwLDc4NSw1Miw3Niw0NCwz
MywyNCwyNywzNSw0MiwzNCw0LDAsMTMsNDcsMTUsMywyMiwwLDIsMCwzNiwxNywyLDI0LDg1LDYs
MiwwLDIsMywyLDE0LDIsOSw4LDQ2LDM5LDcsMywxLDMsMjEsMiw2LDIsMSwyLDQsNCwwLDE5LDAs
MTMsNCwxNTksNTIsMTksMyw1NCw0NywyMSwxLDIsMCwxODUsNDYsNDIsMywzNyw0NywyMSwwLDYw
LDQyLDg2LDI1LDM5MSw2MywzMiwwLDQ0OSw1NiwyNjQsOCwyLDM2LDE4LDAsNTAsMjksODgxLDky
MSwxMDMsMTEwLDE4LDE5NSwyNzQ5LDEwNzAsNDA1MCw1ODIsODYzNCw1NjgsOCwzMCwxMTQsMjks
MTksNDcsMTcsMywzMiwyMCw2LDE4LDg4MSw2OCwxMiwwLDY3LDEyLDY1LDAsMzIsNjEyNCwyMCw3
NTQsOTQ4NiwxLDMwNzEsMTA2LDYsMTIsNCw4LDgsOSw1OTkxLDg0LDIsNzAsMiwxLDMsMCwzLDEs
MywzLDIsMTEsMiwwLDIsNiwyLDY0LDIsMywzLDcsMiw2LDIsMjcsMiwzLDIsNCwyLDAsNCw2LDIs
MzM5LDMsMjQsMiwyNCwyLDMwLDIsMjQsMiwzMCwyLDI0LDIsMzAsMiwyNCwyLDMwLDIsMjQsMiw3
LDQxNDksMTk2LDYwLDY3LDEyMTMsMywyLDI2LDIsMSwyLDAsMywwLDIsOSwyLDMsMiwwLDIsMCw3
LDAsNSwwLDIsMCwyLDAsMiwyLDIsMSwyLDAsMywwLDIsMCwyLDAsMiwwLDIsMCwyLDEsMiwwLDMs
MywyLDYsMiwzLDIsMywyLDAsMiw5LDIsMTYsNiwyLDIsNCwyLDE2LDQ0MjEsNDI3MTAsNDIsNDE0
OCwxMiwyMjEsMyw1NzYxLDEwNTkxLDU0MV07CisgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1s
aW5lIGNvbW1hLXNwYWNpbmcKKyAgICBjb25zdCBhc3RyYWxJZGVudGlmaWVyQ29kZXMgPSBbNTA5
LDAsMjI3LDAsMTUwLDQsMjk0LDksMTM2OCwyLDIsMSw2LDMsNDEsMiw1LDAsMTY2LDEsMTMwNiwy
LDU0LDE0LDMyLDksMTYsMyw0NiwxMCw1NCw5LDcsMiwzNywxMywyLDksNTIsMCwxMywyLDQ5LDEz
LDEwLDIsNCw5LDgzLDExLDcsMCwxNjEsMTEsNiw5LDcsMyw1NywwLDIsNiwzLDEsMywyLDEwLDAs
MTEsMSwzLDYsNCw0LDE5MywxNywxMCw5LDg3LDE5LDEzLDksMjE0LDYsMyw4LDI4LDEsODMsMTYs
MTYsOSw4MiwxMiw5LDksODQsMTQsNSw5LDQyMyw5LDgzOCw3LDIsNywxNyw5LDU3LDIxLDIsMTMs
MTk4ODIsOSwxMzUsNCw2MCw2LDI2LDksMTAxNiw0NSwxNywzLDE5NzIzLDEsNTMxOSw0LDQsNSw5
LDcsMyw2LDMxLDMsMTQ5LDIsMTQxOCw0OSw1MTMsNTQsNSw0OSw5LDAsMTUsMCwyMyw0LDIsMTQs
MTM2MSw2LDIsMTYsMyw2LDIsMSwyLDQsMjIxNCw2LDExMCw2LDYsOSw3OTI0ODcsMjM5XTsKKwor
ICAgIC8vIFRoaXMgaGFzIGEgY29tcGxleGl0eSBsaW5lYXIgdG8gdGhlIHZhbHVlIG9mIHRoZSBj
b2RlLiBUaGUKKyAgICAvLyBhc3N1bXB0aW9uIGlzIHRoYXQgbG9va2luZyB1cCBhc3RyYWwgaWRl
bnRpZmllciBjaGFyYWN0ZXJzIGlzCisgICAgLy8gcmFyZS4KKyAgICBmdW5jdGlvbiBpc0luQXN0
cmFsU2V0KGNvZGUsIHNldCkgeworICAgICAgbGV0IHBvcyA9IDB4MTAwMDA7CisgICAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IHNldC5sZW5ndGg7IGkgKz0gMikgeworICAgICAgICBwb3MgKz0gc2V0
W2ldOworICAgICAgICBpZiAocG9zID4gY29kZSkgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHBv
cyArPSBzZXRbaSArIDFdOworICAgICAgICBpZiAocG9zID49IGNvZGUpIHJldHVybiB0cnVlOwor
ICAgICAgfQorICAgIH0KKworICAgIC8vIFRlc3Qgd2hldGhlciBhIGdpdmVuIGNoYXJhY3RlciBj
b2RlIHN0YXJ0cyBhbiBpZGVudGlmaWVyLgorCisgICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyU3Rh
cnQoY29kZSkgeworICAgICAgaWYgKGNvZGUgPCA2NSkgcmV0dXJuIGNvZGUgPT09IDM2OworICAg
ICAgaWYgKGNvZGUgPCA5MSkgcmV0dXJuIHRydWU7CisgICAgICBpZiAoY29kZSA8IDk3KSByZXR1
cm4gY29kZSA9PT0gOTU7CisgICAgICBpZiAoY29kZSA8IDEyMykgcmV0dXJuIHRydWU7CisgICAg
ICBpZiAoY29kZSA8PSAweGZmZmYpIHJldHVybiBjb2RlID49IDB4YWEgJiYgbm9uQVNDSUlpZGVu
dGlmaWVyU3RhcnQudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpKTsKKyAgICAgIHJldHVy
biBpc0luQXN0cmFsU2V0KGNvZGUsIGFzdHJhbElkZW50aWZpZXJTdGFydENvZGVzKTsKKyAgICB9
CisgICAgdXRpbElkZW50aWZpZXJKUy5pc0lkZW50aWZpZXJTdGFydCA9IGlzSWRlbnRpZmllclN0
YXJ0OworCisgICAgLy8gVGVzdCB3aGV0aGVyIGEgZ2l2ZW4gY2hhcmFjdGVyIGlzIHBhcnQgb2Yg
YW4gaWRlbnRpZmllci4KKworICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllckNoYXIoY29kZSkgewor
ICAgICAgaWYgKGNvZGUgPCA0OCkgcmV0dXJuIGNvZGUgPT09IDM2OworICAgICAgaWYgKGNvZGUg
PCA1OCkgcmV0dXJuIHRydWU7CisgICAgICBpZiAoY29kZSA8IDY1KSByZXR1cm4gZmFsc2U7Cisg
ICAgICBpZiAoY29kZSA8IDkxKSByZXR1cm4gdHJ1ZTsKKyAgICAgIGlmIChjb2RlIDwgOTcpIHJl
dHVybiBjb2RlID09PSA5NTsKKyAgICAgIGlmIChjb2RlIDwgMTIzKSByZXR1cm4gdHJ1ZTsKKyAg
ICAgIGlmIChjb2RlIDw9IDB4ZmZmZikgcmV0dXJuIGNvZGUgPj0gMHhhYSAmJiBub25BU0NJSWlk
ZW50aWZpZXIudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpKTsKKyAgICAgIHJldHVybiBp
c0luQXN0cmFsU2V0KGNvZGUsIGFzdHJhbElkZW50aWZpZXJTdGFydENvZGVzKSB8fCBpc0luQXN0
cmFsU2V0KGNvZGUsIGFzdHJhbElkZW50aWZpZXJDb2Rlcyk7CisgICAgfQorICAgIHV0aWxJZGVu
dGlmaWVySlMuaXNJZGVudGlmaWVyQ2hhciA9IGlzSWRlbnRpZmllckNoYXI7Cit9CisKKy8vIHV0
aWwvd2hpdGVzcGFjZS5qcworY29uc3QgdXRpbFdoaXRlc3BhY2VKUyA9IHt9OworeworICAgIGNv
bnN0IGxpbmVCcmVhayA9IC9cclxuP3xcbnxcdTIwMjh8XHUyMDI5LzsKKyAgICB1dGlsV2hpdGVz
cGFjZUpTLmxpbmVCcmVhayA9IGxpbmVCcmVhazsKKyAgICBjb25zdCBsaW5lQnJlYWtHID0gbmV3
IFJlZ0V4cChsaW5lQnJlYWsuc291cmNlLCAiZyIpOworICAgIHV0aWxXaGl0ZXNwYWNlSlMubGlu
ZUJyZWFrRyA9IGxpbmVCcmVha0c7CisKKyAgICBmdW5jdGlvbiBpc05ld0xpbmUoY29kZSl7Cisg
ICAgICByZXR1cm4gY29kZSA9PT0gMTAgfHwgY29kZSA9PT0gMTMgfHwgY29kZSA9PT0gMHgyMDI4
IHx8IGNvZGUgPT09IDB4MjAyOTsKKyAgICB9CisgICAgdXRpbFdoaXRlc3BhY2VKUy5pc05ld0xp
bmUgPSBpc05ld0xpbmU7CisKKyAgICBjb25zdCBub25BU0NJSXdoaXRlc3BhY2UgPSAvW1x1MTY4
MFx1MTgwZVx1MjAwMC1cdTIwMGFcdTIwMmZcdTIwNWZcdTMwMDBcdWZlZmZdLzsKKyAgICB1dGls
V2hpdGVzcGFjZUpTLm5vbkFTQ0lJd2hpdGVzcGFjZSA9IG5vbkFTQ0lJd2hpdGVzcGFjZTsKK30K
KworLy8gdXRpbC9sb2NhdGlvbi5qcworY29uc3QgdXRpbExvY2F0aW9uSlMgPSB7fTsKK3sKKyAg
ICBjb25zdCBsaW5lQnJlYWtHID0gdXRpbFdoaXRlc3BhY2VKUy5saW5lQnJlYWtHOworCisgICAg
Ly8gVGhlc2UgYXJlIHVzZWQgd2hlbiBgb3B0aW9ucy5sb2NhdGlvbnNgIGlzIG9uLCBmb3IgdGhl
CisgICAgLy8gYHN0YXJ0TG9jYCBhbmQgYGVuZExvY2AgcHJvcGVydGllcy4KKworICAgIGNsYXNz
IFBvc2l0aW9uIHsKKyAgICAgIGNvbnN0cnVjdG9yKGxpbmUsIGNvbCkgeworICAgICAgICB0aGlz
LmxpbmUgPSBsaW5lOworICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbDsKKyAgICAgIH0KKyAgICB9
CisgICAgdXRpbExvY2F0aW9uSlMuUG9zaXRpb24gPSBQb3NpdGlvbjsKKworICAgIGNsYXNzIFNv
dXJjZUxvY2F0aW9uIHsKKyAgICAgIGNvbnN0cnVjdG9yKHN0YXJ0LCBlbmQpIHsKKyAgICAgICAg
dGhpcy5zdGFydCA9IHN0YXJ0OworICAgICAgICB0aGlzLmVuZCA9IGVuZDsKKyAgICAgIH0KKyAg
ICB9CisgICAgdXRpbExvY2F0aW9uSlMuU291cmNlTG9jYXRpb24gPSBTb3VyY2VMb2NhdGlvbjsK
KworICAgIC8vIFRoZSBgZ2V0TGluZUluZm9gIGZ1bmN0aW9uIGlzIG1vc3RseSB1c2VmdWwgd2hl
biB0aGUKKyAgICAvLyBgbG9jYXRpb25zYCBvcHRpb24gaXMgb2ZmIChmb3IgcGVyZm9ybWFuY2Ug
cmVhc29ucykgYW5kIHlvdQorICAgIC8vIHdhbnQgdG8gZmluZCB0aGUgbGluZS9jb2x1bW4gcG9z
aXRpb24gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyCisgICAgLy8gb2Zmc2V0LiBgaW5wdXRgIHNob3Vs
ZCBiZSB0aGUgY29kZSBzdHJpbmcgdGhhdCB0aGUgb2Zmc2V0IHJlZmVycworICAgIC8vIGludG8u
CisKKyAgICBmdW5jdGlvbiBnZXRMaW5lSW5mbyhpbnB1dCwgb2Zmc2V0KSB7CisgICAgICBmb3Ig
KGxldCBsaW5lID0gMSwgY3VyID0gMDsgOykgeworICAgICAgICBsaW5lQnJlYWtHLmxhc3RJbmRl
eCA9IGN1cjsKKyAgICAgICAgY29uc3QgbWF0Y2ggPSBsaW5lQnJlYWtHLmV4ZWMoaW5wdXQpOwor
ICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2guaW5kZXggPCBvZmZzZXQpIHsKKyAgICAgICAgICAr
K2xpbmU7CisgICAgICAgICAgY3VyID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIG5ldyBQb3NpdGlvbihsaW5lLCBvZmZz
ZXQgLSBjdXIpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHV0aWxMb2NhdGlvbkpT
LmdldExpbmVJbmZvID0gZ2V0TGluZUluZm87Cit9CisKKworLy8gdG9rZW5pemVyL3R5cGVzLmpz
Citjb25zdCB0b2tlbml6ZXJUeXBlc0pTID0ge307Cit7CisgICAgLy8gIyMgVG9rZW4gdHlwZXMK
KworICAgIC8vIFRoZSBhc3NpZ25tZW50IG9mIGZpbmUtZ3JhaW5lZCwgaW5mb3JtYXRpb24tY2Fy
cnlpbmcgdHlwZSBvYmplY3RzCisgICAgLy8gYWxsb3dzIHRoZSB0b2tlbml6ZXIgdG8gc3RvcmUg
dGhlIGluZm9ybWF0aW9uIGl0IGhhcyBhYm91dCBhCisgICAgLy8gdG9rZW4gaW4gYSB3YXkgdGhh
dCBpcyB2ZXJ5IGNoZWFwIGZvciB0aGUgcGFyc2VyIHRvIGxvb2sgdXAuCisKKyAgICAvLyBBbGwg
dG9rZW4gdHlwZSB2YXJpYWJsZXMgc3RhcnQgd2l0aCBhbiB1bmRlcnNjb3JlLCB0byBtYWtlIHRo
ZW0KKyAgICAvLyBlYXN5IHRvIHJlY29nbml6ZS4KKworICAgIC8vIFRoZSBgYmVmb3JlRXhwcmAg
cHJvcGVydHkgaXMgdXNlZCB0byBkaXNhbWJpZ3VhdGUgYmV0d2VlbiByZWd1bGFyCisgICAgLy8g
ZXhwcmVzc2lvbnMgYW5kIGRpdmlzaW9ucy4gSXQgaXMgc2V0IG9uIGFsbCB0b2tlbiB0eXBlcyB0
aGF0IGNhbgorICAgIC8vIGJlIGZvbGxvd2VkIGJ5IGFuIGV4cHJlc3Npb24gKHRodXMsIGEgc2xh
c2ggYWZ0ZXIgdGhlbSB3b3VsZCBiZSBhCisgICAgLy8gcmVndWxhciBleHByZXNzaW9uKS4KKyAg
ICAvLworICAgIC8vIGBpc0xvb3BgIG1hcmtzIGEga2V5d29yZCBhcyBzdGFydGluZyBhIGxvb3As
IHdoaWNoIGlzIGltcG9ydGFudAorICAgIC8vIHRvIGtub3cgd2hlbiBwYXJzaW5nIGEgbGFiZWws
IGluIG9yZGVyIHRvIGFsbG93IG9yIGRpc2FsbG93CisgICAgLy8gY29udGludWUganVtcHMgdG8g
dGhhdCBsYWJlbC4KKworICAgIGNvbnN0IGJlZm9yZUV4cHIgPSB0cnVlOworICAgIGNvbnN0IHN0
YXJ0c0V4cHIgPSB0cnVlOworICAgIGNvbnN0IGlzTG9vcCA9IHRydWU7CisgICAgY29uc3QgaXNB
c3NpZ24gPSB0cnVlOworICAgIGNvbnN0IHByZWZpeCA9IHRydWU7CisgICAgY29uc3QgcG9zdGZp
eCA9IHRydWU7CisKKyAgICBjbGFzcyBUb2tlblR5cGUgeworICAgICAgY29uc3RydWN0b3IobGFi
ZWwsIGNvbmYgPSB7fSkgeworICAgICAgICB0aGlzLmxhYmVsID0gbGFiZWw7CisgICAgICAgIHRo
aXMua2V5d29yZCA9IGNvbmYua2V5d29yZDsKKyAgICAgICAgdGhpcy5iZWZvcmVFeHByID0gISFj
b25mLmJlZm9yZUV4cHI7CisgICAgICAgIHRoaXMuc3RhcnRzRXhwciA9ICEhY29uZi5zdGFydHNF
eHByOworICAgICAgICB0aGlzLnJpZ2h0QXNzb2NpYXRpdmUgPSAhIWNvbmYucmlnaHRBc3NvY2lh
dGl2ZTsKKyAgICAgICAgdGhpcy5pc0xvb3AgPSAhIWNvbmYuaXNMb29wOworICAgICAgICB0aGlz
LmlzQXNzaWduID0gISFjb25mLmlzQXNzaWduOworICAgICAgICB0aGlzLnByZWZpeCA9ICEhY29u
Zi5wcmVmaXg7CisgICAgICAgIHRoaXMucG9zdGZpeCA9ICEhY29uZi5wb3N0Zml4OworICAgICAg
ICB0aGlzLmJpbm9wID0gY29uZi5iaW5vcCB8fCBudWxsOworICAgICAgICB0aGlzLnVwZGF0ZUNv
bnRleHQgPSBudWxsOworICAgICAgfQorICAgIH0KKyAgICB0b2tlbml6ZXJUeXBlc0pTLlRva2Vu
VHlwZSA9IFRva2VuVHlwZTsKKworICAgIGNsYXNzIEtleXdvcmRUb2tlblR5cGUgZXh0ZW5kcyBU
b2tlblR5cGUgeworICAgICAgY29uc3RydWN0b3IobmFtZSwgb3B0aW9ucyA9IHt9KSB7CisgICAg
ICAgIG9wdGlvbnMua2V5d29yZCA9IG5hbWU7CisKKyAgICAgICAgc3VwZXIobmFtZSwgb3B0aW9u
cyk7CisgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgQmlub3BUb2tlblR5cGUgZXh0ZW5kcyBU
b2tlblR5cGUgeworICAgICAgY29uc3RydWN0b3IobmFtZSwgcHJlYykgeworICAgICAgICBzdXBl
cihuYW1lLCB7IGJlZm9yZUV4cHIsIGJpbm9wOiBwcmVjIH0pOworICAgICAgfQorICAgIH0KKyAg
ICB0b2tlbml6ZXJUeXBlc0pTLkJpbm9wVG9rZW5UeXBlID0gQmlub3BUb2tlblR5cGU7CisKKyAg
ICBjb25zdCB0eXBlcyA9IHsKKyAgICAgIG51bTogbmV3IFRva2VuVHlwZSgibnVtIiwgeyBzdGFy
dHNFeHByIH0pLAorICAgICAgcmVnZXhwOiBuZXcgVG9rZW5UeXBlKCJyZWdleHAiLCB7IHN0YXJ0
c0V4cHIgfSksCisgICAgICBzdHJpbmc6IG5ldyBUb2tlblR5cGUoInN0cmluZyIsIHsgc3RhcnRz
RXhwciB9KSwKKyAgICAgIG5hbWU6IG5ldyBUb2tlblR5cGUoIm5hbWUiLCB7IHN0YXJ0c0V4cHIg
fSksCisgICAgICBlb2Y6IG5ldyBUb2tlblR5cGUoImVvZiIpLAorCisgICAgICAvLyBQdW5jdHVh
dGlvbiB0b2tlbiB0eXBlcy4KKyAgICAgIGJyYWNrZXRMOiBuZXcgVG9rZW5UeXBlKCJbIiwgeyBi
ZWZvcmVFeHByLCBzdGFydHNFeHByIH0pLAorICAgICAgYnJhY2tldFI6IG5ldyBUb2tlblR5cGUo
Il0iKSwKKyAgICAgIGJyYWNlTDogbmV3IFRva2VuVHlwZSgieyIsIHsgYmVmb3JlRXhwciwgc3Rh
cnRzRXhwciB9KSwKKyAgICAgIGJyYWNlQmFyTDogbmV3IFRva2VuVHlwZSgie3wiLCB7IGJlZm9y
ZUV4cHIsIHN0YXJ0c0V4cHIgfSksCisgICAgICBicmFjZVI6IG5ldyBUb2tlblR5cGUoIn0iKSwK
KyAgICAgIGJyYWNlQmFyUjogbmV3IFRva2VuVHlwZSgifH0iKSwKKyAgICAgIHBhcmVuTDogbmV3
IFRva2VuVHlwZSgiKCIsIHsgYmVmb3JlRXhwciwgc3RhcnRzRXhwciB9KSwKKyAgICAgIHBhcmVu
UjogbmV3IFRva2VuVHlwZSgiKSIpLAorICAgICAgY29tbWE6IG5ldyBUb2tlblR5cGUoIiwiLCB7
IGJlZm9yZUV4cHIgfSksCisgICAgICBzZW1pOiBuZXcgVG9rZW5UeXBlKCI7IiwgeyBiZWZvcmVF
eHByIH0pLAorICAgICAgY29sb246IG5ldyBUb2tlblR5cGUoIjoiLCB7IGJlZm9yZUV4cHIgfSks
CisgICAgICBkb3VibGVDb2xvbjogbmV3IFRva2VuVHlwZSgiOjoiLCB7IGJlZm9yZUV4cHIgfSks
CisgICAgICBkb3Q6IG5ldyBUb2tlblR5cGUoIi4iKSwKKyAgICAgIHF1ZXN0aW9uOiBuZXcgVG9r
ZW5UeXBlKCI/IiwgeyBiZWZvcmVFeHByIH0pLAorICAgICAgYXJyb3c6IG5ldyBUb2tlblR5cGUo
Ij0+IiwgeyBiZWZvcmVFeHByIH0pLAorICAgICAgdGVtcGxhdGU6IG5ldyBUb2tlblR5cGUoInRl
bXBsYXRlIiksCisgICAgICBlbGxpcHNpczogbmV3IFRva2VuVHlwZSgiLi4uIiwgeyBiZWZvcmVF
eHByIH0pLAorICAgICAgYmFja1F1b3RlOiBuZXcgVG9rZW5UeXBlKCJgIiwgeyBzdGFydHNFeHBy
IH0pLAorICAgICAgZG9sbGFyQnJhY2VMOiBuZXcgVG9rZW5UeXBlKCIkeyIsIHsgYmVmb3JlRXhw
ciwgc3RhcnRzRXhwciB9KSwKKyAgICAgIGF0OiBuZXcgVG9rZW5UeXBlKCJAIiksCisKKyAgICAg
IC8vIE9wZXJhdG9ycy4gVGhlc2UgY2Fycnkgc2V2ZXJhbCBraW5kcyBvZiBwcm9wZXJ0aWVzIHRv
IGhlbHAgdGhlCisgICAgICAvLyBwYXJzZXIgdXNlIHRoZW0gcHJvcGVybHkgKHRoZSBwcmVzZW5j
ZSBvZiB0aGVzZSBwcm9wZXJ0aWVzIGlzCisgICAgICAvLyB3aGF0IGNhdGVnb3JpemVzIHRoZW0g
YXMgb3BlcmF0b3JzKS4KKyAgICAgIC8vCisgICAgICAvLyBgYmlub3BgLCB3aGVuIHByZXNlbnQs
IHNwZWNpZmllcyB0aGF0IHRoaXMgb3BlcmF0b3IgaXMgYSBiaW5hcnkKKyAgICAgIC8vIG9wZXJh
dG9yLCBhbmQgd2lsbCByZWZlciB0byBpdHMgcHJlY2VkZW5jZS4KKyAgICAgIC8vCisgICAgICAv
LyBgcHJlZml4YCBhbmQgYHBvc3RmaXhgIG1hcmsgdGhlIG9wZXJhdG9yIGFzIGEgcHJlZml4IG9y
IHBvc3RmaXgKKyAgICAgIC8vIHVuYXJ5IG9wZXJhdG9yLgorICAgICAgLy8KKyAgICAgIC8vIGBp
c0Fzc2lnbmAgbWFya3MgYWxsIG9mIGA9YCwgYCs9YCwgYC09YCBldGNldGVyYSwgd2hpY2ggYWN0
IGFzCisgICAgICAvLyBiaW5hcnkgb3BlcmF0b3JzIHdpdGggYSB2ZXJ5IGxvdyBwcmVjZWRlbmNl
LCB0aGF0IHNob3VsZCByZXN1bHQKKyAgICAgIC8vIGluIEFzc2lnbm1lbnRFeHByZXNzaW9uIG5v
ZGVzLgorCisgICAgICBlcTogbmV3IFRva2VuVHlwZSgiPSIsIHsgYmVmb3JlRXhwciwgaXNBc3Np
Z24gfSksCisgICAgICBhc3NpZ246IG5ldyBUb2tlblR5cGUoIl89IiwgeyBiZWZvcmVFeHByLCBp
c0Fzc2lnbiB9KSwKKyAgICAgIGluY0RlYzogbmV3IFRva2VuVHlwZSgiKysvLS0iLCB7IHByZWZp
eCwgcG9zdGZpeCwgc3RhcnRzRXhwciB9KSwKKyAgICAgIHByZWZpeDogbmV3IFRva2VuVHlwZSgi
cHJlZml4IiwgeyBiZWZvcmVFeHByLCBwcmVmaXgsIHN0YXJ0c0V4cHIgfSksCisgICAgICBsb2dp
Y2FsT1I6IG5ldyBCaW5vcFRva2VuVHlwZSgifHwiLCAxKSwKKyAgICAgIGxvZ2ljYWxBTkQ6IG5l
dyBCaW5vcFRva2VuVHlwZSgiJiYiLCAyKSwKKyAgICAgIGJpdHdpc2VPUjogbmV3IEJpbm9wVG9r
ZW5UeXBlKCJ8IiwgMyksCisgICAgICBiaXR3aXNlWE9SOiBuZXcgQmlub3BUb2tlblR5cGUoIl4i
LCA0KSwKKyAgICAgIGJpdHdpc2VBTkQ6IG5ldyBCaW5vcFRva2VuVHlwZSgiJiIsIDUpLAorICAg
ICAgZXF1YWxpdHk6IG5ldyBCaW5vcFRva2VuVHlwZSgiPT0vIT0iLCA2KSwKKyAgICAgIHJlbGF0
aW9uYWw6IG5ldyBCaW5vcFRva2VuVHlwZSgiPC8+IiwgNyksCisgICAgICBiaXRTaGlmdDogbmV3
IEJpbm9wVG9rZW5UeXBlKCI8PC8+PiIsIDgpLAorICAgICAgcGx1c01pbjogbmV3IFRva2VuVHlw
ZSgiKy8tIiwgeyBiZWZvcmVFeHByLCBiaW5vcDogOSwgcHJlZml4LCBzdGFydHNFeHByIH0pLAor
ICAgICAgbW9kdWxvOiBuZXcgQmlub3BUb2tlblR5cGUoIiUiLCAxMCksCisgICAgICBzdGFyOiBu
ZXcgQmlub3BUb2tlblR5cGUoIioiLCAxMCksCisgICAgICBzbGFzaDogbmV3IEJpbm9wVG9rZW5U
eXBlKCIvIiwgMTApLAorICAgICAgZXhwb25lbnQ6IG5ldyBUb2tlblR5cGUoIioqIiwgeyBiZWZv
cmVFeHByLCBiaW5vcDogMTEsIHJpZ2h0QXNzb2NpYXRpdmU6IHRydWUgfSkKKyAgICB9OworICAg
IHRva2VuaXplclR5cGVzSlMudHlwZXMgPSB0eXBlczsKKworICAgIGNvbnN0IGtleXdvcmRzID0g
eworICAgICAgImJyZWFrIjogbmV3IEtleXdvcmRUb2tlblR5cGUoImJyZWFrIiksCisgICAgICAi
Y2FzZSI6IG5ldyBLZXl3b3JkVG9rZW5UeXBlKCJjYXNlIiwgeyBiZWZvcmVFeHByIH0pLAorICAg
ICAgImNhdGNoIjogbmV3IEtleXdvcmRUb2tlblR5cGUoImNhdGNoIiksCisgICAgICAiY29udGlu
dWUiOiBuZXcgS2V5d29yZFRva2VuVHlwZSgiY29udGludWUiKSwKKyAgICAgICJkZWJ1Z2dlciI6
IG5ldyBLZXl3b3JkVG9rZW5UeXBlKCJkZWJ1Z2dlciIpLAorICAgICAgImRlZmF1bHQiOiBuZXcg
S2V5d29yZFRva2VuVHlwZSgiZGVmYXVsdCIsIHsgYmVmb3JlRXhwciB9KSwKKyAgICAgICJkbyI6
IG5ldyBLZXl3b3JkVG9rZW5UeXBlKCJkbyIsIHsgaXNMb29wLCBiZWZvcmVFeHByIH0pLAorICAg
ICAgImVsc2UiOiBuZXcgS2V5d29yZFRva2VuVHlwZSgiZWxzZSIsIHsgYmVmb3JlRXhwciB9KSwK
KyAgICAgICJmaW5hbGx5IjogbmV3IEtleXdvcmRUb2tlblR5cGUoImZpbmFsbHkiKSwKKyAgICAg
ICJmb3IiOiBuZXcgS2V5d29yZFRva2VuVHlwZSgiZm9yIiwgeyBpc0xvb3AgfSksCisgICAgICAi
ZnVuY3Rpb24iOiBuZXcgS2V5d29yZFRva2VuVHlwZSgiZnVuY3Rpb24iLCB7IHN0YXJ0c0V4cHIg
fSksCisgICAgICAiaWYiOiBuZXcgS2V5d29yZFRva2VuVHlwZSgiaWYiKSwKKyAgICAgICJyZXR1
cm4iOiBuZXcgS2V5d29yZFRva2VuVHlwZSgicmV0dXJuIiwgeyBiZWZvcmVFeHByIH0pLAorICAg
ICAgInN3aXRjaCI6IG5ldyBLZXl3b3JkVG9rZW5UeXBlKCJzd2l0Y2giKSwKKyAgICAgICJ0aHJv
dyI6IG5ldyBLZXl3b3JkVG9rZW5UeXBlKCJ0aHJvdyIsIHsgYmVmb3JlRXhwciB9KSwKKyAgICAg
ICJ0cnkiOiBuZXcgS2V5d29yZFRva2VuVHlwZSgidHJ5IiksCisgICAgICAidmFyIjogbmV3IEtl
eXdvcmRUb2tlblR5cGUoInZhciIpLAorICAgICAgImxldCI6IG5ldyBLZXl3b3JkVG9rZW5UeXBl
KCJsZXQiKSwKKyAgICAgICJjb25zdCI6IG5ldyBLZXl3b3JkVG9rZW5UeXBlKCJjb25zdCIpLAor
ICAgICAgIndoaWxlIjogbmV3IEtleXdvcmRUb2tlblR5cGUoIndoaWxlIiwgeyBpc0xvb3AgfSks
CisgICAgICAid2l0aCI6IG5ldyBLZXl3b3JkVG9rZW5UeXBlKCJ3aXRoIiksCisgICAgICAibmV3
IjogbmV3IEtleXdvcmRUb2tlblR5cGUoIm5ldyIsIHsgYmVmb3JlRXhwciwgc3RhcnRzRXhwciB9
KSwKKyAgICAgICJ0aGlzIjogbmV3IEtleXdvcmRUb2tlblR5cGUoInRoaXMiLCB7IHN0YXJ0c0V4
cHIgfSksCisgICAgICAic3VwZXIiOiBuZXcgS2V5d29yZFRva2VuVHlwZSgic3VwZXIiLCB7IHN0
YXJ0c0V4cHIgfSksCisgICAgICAiY2xhc3MiOiBuZXcgS2V5d29yZFRva2VuVHlwZSgiY2xhc3Mi
KSwKKyAgICAgICJleHRlbmRzIjogbmV3IEtleXdvcmRUb2tlblR5cGUoImV4dGVuZHMiLCB7IGJl
Zm9yZUV4cHIgfSksCisgICAgICAiZXhwb3J0IjogbmV3IEtleXdvcmRUb2tlblR5cGUoImV4cG9y
dCIpLAorICAgICAgImltcG9ydCI6IG5ldyBLZXl3b3JkVG9rZW5UeXBlKCJpbXBvcnQiLCB7IHN0
YXJ0c0V4cHIgfSksCisgICAgICAieWllbGQiOiBuZXcgS2V5d29yZFRva2VuVHlwZSgieWllbGQi
LCB7IGJlZm9yZUV4cHIsIHN0YXJ0c0V4cHIgfSksCisgICAgICAibnVsbCI6IG5ldyBLZXl3b3Jk
VG9rZW5UeXBlKCJudWxsIiwgeyBzdGFydHNFeHByIH0pLAorICAgICAgInRydWUiOiBuZXcgS2V5
d29yZFRva2VuVHlwZSgidHJ1ZSIsIHsgc3RhcnRzRXhwciB9KSwKKyAgICAgICJmYWxzZSI6IG5l
dyBLZXl3b3JkVG9rZW5UeXBlKCJmYWxzZSIsIHsgc3RhcnRzRXhwciB9KSwKKyAgICAgICJpbiI6
IG5ldyBLZXl3b3JkVG9rZW5UeXBlKCJpbiIsIHsgYmVmb3JlRXhwciwgYmlub3A6IDcgfSksCisg
ICAgICAiaW5zdGFuY2VvZiI6IG5ldyBLZXl3b3JkVG9rZW5UeXBlKCJpbnN0YW5jZW9mIiwgeyBi
ZWZvcmVFeHByLCBiaW5vcDogNyB9KSwKKyAgICAgICJ0eXBlb2YiOiBuZXcgS2V5d29yZFRva2Vu
VHlwZSgidHlwZW9mIiwgeyBiZWZvcmVFeHByLCBwcmVmaXgsIHN0YXJ0c0V4cHIgfSksCisgICAg
ICAidm9pZCI6IG5ldyBLZXl3b3JkVG9rZW5UeXBlKCJ2b2lkIiwgeyBiZWZvcmVFeHByLCBwcmVm
aXgsIHN0YXJ0c0V4cHIgfSksCisgICAgICAiZGVsZXRlIjogbmV3IEtleXdvcmRUb2tlblR5cGUo
ImRlbGV0ZSIsIHsgYmVmb3JlRXhwciwgcHJlZml4LCBzdGFydHNFeHByIH0pCisgICAgfTsKKyAg
ICB0b2tlbml6ZXJUeXBlc0pTLmtleXdvcmRzID0ga2V5d29yZHM7CisKKyAgICAvLyBNYXAga2V5
d29yZCBuYW1lcyB0byB0b2tlbiB0eXBlcy4KKyAgICBPYmplY3Qua2V5cyhrZXl3b3JkcykuZm9y
RWFjaCgobmFtZSkgPT4geworICAgICAgdHlwZXNbIl8iICsgbmFtZV0gPSBrZXl3b3Jkc1tuYW1l
XTsKKyAgICB9KTsKK30KKworLy8gdG9rZW5pemVyL2NvbnRleHQuanMKK2NvbnN0IHRva2VuaXpl
ckNvbnRleHRKUyA9IHt9OworeworICAgIC8vIFRoZSBhbGdvcml0aG0gdXNlZCB0byBkZXRlcm1p
bmUgd2hldGhlciBhIHJlZ2V4cCBjYW4gYXBwZWFyIGF0IGEKKyAgICAvLyBnaXZlbiBwb2ludCBp
biB0aGUgcHJvZ3JhbSBpcyBsb29zZWx5IGJhc2VkIG9uIHN3ZWV0LmpzJyBhcHByb2FjaC4KKyAg
ICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc3dlZXQuanMvd2lraS9kZXNpZ24K
KworICAgIGNvbnN0IHR0ID0gdG9rZW5pemVyVHlwZXNKUy50eXBlczsKKyAgICBjb25zdCBsaW5l
QnJlYWsgPSB1dGlsV2hpdGVzcGFjZUpTLmxpbmVCcmVhazsKKworICAgIGNsYXNzIFRva0NvbnRl
eHQgeworICAgICAgY29uc3RydWN0b3IoCisgICAgICAgIHRva2VuLAorICAgICAgICBpc0V4cHIs
CisgICAgICAgIHByZXNlcnZlU3BhY2UsCisgICAgICAgIG92ZXJyaWRlLAorICAgICAgKSB7Cisg
ICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjsKKyAgICAgICAgdGhpcy5pc0V4cHIgPSAhIWlzRXhw
cjsKKyAgICAgICAgdGhpcy5wcmVzZXJ2ZVNwYWNlID0gISFwcmVzZXJ2ZVNwYWNlOworICAgICAg
ICB0aGlzLm92ZXJyaWRlID0gb3ZlcnJpZGU7CisgICAgICB9CisKKyAgICAgIC8vdG9rZW46IHN0
cmluZzsKKyAgICAgIC8vaXNFeHByOiBib29sZWFuOworICAgICAgLy9wcmVzZXJ2ZVNwYWNlOiBi
b29sZWFuOworICAgICAgLy9vdmVycmlkZTogP0Z1bmN0aW9uOworICAgIH0KKyAgICB0b2tlbml6
ZXJDb250ZXh0SlMuVG9rQ29udGV4dCA9IFRva0NvbnRleHQ7CisKKyAgICBjb25zdCB0eXBlcyA9
IHsKKyAgICAgIGJyYWNlU3RhdGVtZW50OiBuZXcgVG9rQ29udGV4dCgieyIsIGZhbHNlKSwKKyAg
ICAgIGJyYWNlRXhwcmVzc2lvbjogbmV3IFRva0NvbnRleHQoInsiLCB0cnVlKSwKKyAgICAgIHRl
bXBsYXRlUXVhc2k6IG5ldyBUb2tDb250ZXh0KCIkeyIsIHRydWUpLAorICAgICAgcGFyZW5TdGF0
ZW1lbnQ6IG5ldyBUb2tDb250ZXh0KCIoIiwgZmFsc2UpLAorICAgICAgcGFyZW5FeHByZXNzaW9u
OiBuZXcgVG9rQ29udGV4dCgiKCIsIHRydWUpLAorICAgICAgdGVtcGxhdGU6IG5ldyBUb2tDb250
ZXh0KCJgIiwgdHJ1ZSwgdHJ1ZSwgKHApID0+IHAucmVhZFRtcGxUb2tlbigpKSwKKyAgICAgIGZ1
bmN0aW9uRXhwcmVzc2lvbjogbmV3IFRva0NvbnRleHQoImZ1bmN0aW9uIiwgdHJ1ZSkKKyAgICB9
OworICAgIHRva2VuaXplckNvbnRleHRKUy50eXBlcyA9IHR5cGVzOworCisgICAgLy8gVG9rZW4t
c3BlY2lmaWMgY29udGV4dCB1cGRhdGUgY29kZQorCisgICAgdHQucGFyZW5SLnVwZGF0ZUNvbnRl
eHQgPSB0dC5icmFjZVIudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgIGlmICh0
aGlzLnN0YXRlLmNvbnRleHQubGVuZ3RoID09PSAxKSB7CisgICAgICAgIHRoaXMuc3RhdGUuZXhw
ckFsbG93ZWQgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIGNvbnN0
IG91dCA9IHRoaXMuc3RhdGUuY29udGV4dC5wb3AoKTsKKyAgICAgIGlmIChvdXQgPT09IHR5cGVz
LmJyYWNlU3RhdGVtZW50ICYmIHRoaXMuY3VyQ29udGV4dCgpID09PSB0eXBlcy5mdW5jdGlvbkV4
cHJlc3Npb24pIHsKKyAgICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LnBvcCgpOworICAgICAgICB0
aGlzLnN0YXRlLmV4cHJBbGxvd2VkID0gZmFsc2U7CisgICAgICB9IGVsc2UgaWYgKG91dCA9PT0g
dHlwZXMudGVtcGxhdGVRdWFzaSkgeworICAgICAgICB0aGlzLnN0YXRlLmV4cHJBbGxvd2VkID0g
dHJ1ZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMuc3RhdGUuZXhwckFsbG93ZWQgPSAh
b3V0LmlzRXhwcjsKKyAgICAgIH0KKyAgICB9OworCisgICAgdHQubmFtZS51cGRhdGVDb250ZXh0
ID0gZnVuY3Rpb24gKHByZXZUeXBlKSB7CisgICAgICB0aGlzLnN0YXRlLmV4cHJBbGxvd2VkID0g
ZmFsc2U7CisKKyAgICAgIGlmIChwcmV2VHlwZSA9PT0gdHQuX2xldCB8fCBwcmV2VHlwZSA9PT0g
dHQuX2NvbnN0IHx8IHByZXZUeXBlID09PSB0dC5fdmFyKSB7CisgICAgICAgIGlmIChsaW5lQnJl
YWsudGVzdCh0aGlzLmlucHV0LnNsaWNlKHRoaXMuc3RhdGUuZW5kKSkpIHsKKyAgICAgICAgICB0
aGlzLnN0YXRlLmV4cHJBbGxvd2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07
CisKKyAgICB0dC5icmFjZUwudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uIChwcmV2VHlwZSkgewor
ICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LnB1c2godGhpcy5icmFjZUlzQmxvY2socHJldlR5cGUp
ID8gdHlwZXMuYnJhY2VTdGF0ZW1lbnQgOiB0eXBlcy5icmFjZUV4cHJlc3Npb24pOworICAgICAg
dGhpcy5zdGF0ZS5leHByQWxsb3dlZCA9IHRydWU7CisgICAgfTsKKworICAgIHR0LmRvbGxhckJy
YWNlTC51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy5zdGF0ZS5jb250
ZXh0LnB1c2godHlwZXMudGVtcGxhdGVRdWFzaSk7CisgICAgICB0aGlzLnN0YXRlLmV4cHJBbGxv
d2VkID0gdHJ1ZTsKKyAgICB9OworCisgICAgdHQucGFyZW5MLnVwZGF0ZUNvbnRleHQgPSBmdW5j
dGlvbiAocHJldlR5cGUpIHsKKyAgICAgIGNvbnN0IHN0YXRlbWVudFBhcmVucyA9IHByZXZUeXBl
ID09PSB0dC5faWYgfHwgcHJldlR5cGUgPT09IHR0Ll9mb3IgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmV2VHlwZSA9PT0gdHQuX3dpdGggfHwgcHJldlR5cGUgPT09IHR0Ll93aGls
ZTsKKyAgICAgIHRoaXMuc3RhdGUuY29udGV4dC5wdXNoKHN0YXRlbWVudFBhcmVucyA/IHR5cGVz
LnBhcmVuU3RhdGVtZW50IDogdHlwZXMucGFyZW5FeHByZXNzaW9uKTsKKyAgICAgIHRoaXMuc3Rh
dGUuZXhwckFsbG93ZWQgPSB0cnVlOworICAgIH07CisKKyAgICB0dC5pbmNEZWMudXBkYXRlQ29u
dGV4dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgIC8vIHRva0V4cHJBbGxvd2VkIHN0YXlzIHVuY2hh
bmdlZAorICAgIH07CisKKyAgICB0dC5fZnVuY3Rpb24udXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgIGlmICh0aGlzLmN1ckNvbnRleHQoKSAhPT0gdHlwZXMuYnJhY2VTdGF0ZW1l
bnQpIHsKKyAgICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LnB1c2godHlwZXMuZnVuY3Rpb25FeHBy
ZXNzaW9uKTsKKyAgICAgIH0KKworICAgICAgdGhpcy5zdGF0ZS5leHByQWxsb3dlZCA9IGZhbHNl
OworICAgIH07CisKKyAgICB0dC5iYWNrUXVvdGUudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgIGlmICh0aGlzLmN1ckNvbnRleHQoKSA9PT0gdHlwZXMudGVtcGxhdGUpIHsKKyAg
ICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LnBvcCgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
dGhpcy5zdGF0ZS5jb250ZXh0LnB1c2godHlwZXMudGVtcGxhdGUpOworICAgICAgfQorICAgICAg
dGhpcy5zdGF0ZS5leHByQWxsb3dlZCA9IGZhbHNlOworICAgIH07Cit9CisKKy8vIHRva2VuaXpl
ci9zdGF0ZS5qcworbGV0IHRva2VuaXplclN0YXRlSlMgPSB7fTsKK3sKKyAgICBjb25zdCBUb2tD
b250ZXh0ID0gdG9rZW5pemVyQ29udGV4dEpTLlRva0NvbnRleHQ7CisgICAgY29uc3QgVG9rZW5U
eXBlID0gdG9rZW5pemVyVHlwZXNKUy5Ub2tlblR5cGU7CisgICAgY29uc3QgUG9zaXRpb24gPSB1
dGlsTG9jYXRpb25KUy5Qb3NpdGlvbjsKKyAgICBjb25zdCBjdCA9IHRva2VuaXplckNvbnRleHRK
Uy50eXBlczsKKyAgICBjb25zdCB0dCA9IHRva2VuaXplclR5cGVzSlMudHlwZXM7CisKKyAgICAv
L2V4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRlIHsKKyAgICBjbGFzcyBTdGF0ZSB7CisgICAgICBp
bml0KG9wdGlvbnMsIGlucHV0KSB7CisgICAgICAgIHRoaXMuc3RyaWN0ID0gb3B0aW9ucy5zdHJp
Y3RNb2RlID09PSBmYWxzZSA/IGZhbHNlIDogb3B0aW9ucy5zb3VyY2VUeXBlID09PSAibW9kdWxl
IjsKKworICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7CisKKyAgICAgICAgdGhpcy5wb3RlbnRp
YWxBcnJvd0F0ID0gLTE7CisKKyAgICAgICAgdGhpcy5pbk1ldGhvZCA9CisgICAgICAgICAgdGhp
cy5pbkZ1bmN0aW9uID0KKyAgICAgICAgICB0aGlzLmluR2VuZXJhdG9yID0KKyAgICAgICAgICB0
aGlzLmluQXN5bmMgPQorICAgICAgICAgIHRoaXMuaW5Qcm9wZXJ0eU5hbWUgPQorICAgICAgICAg
IHRoaXMuaW5UeXBlID0KKyAgICAgICAgICB0aGlzLm5vQW5vbkZ1bmN0aW9uVHlwZSA9CisgICAg
ICAgICAgICBmYWxzZTsKKworICAgICAgICB0aGlzLmxhYmVscyA9IFtdOworCisgICAgICAgIHRo
aXMuZGVjb3JhdG9ycyA9IFtdOworCisgICAgICAgIHRoaXMudG9rZW5zID0gW107CisKKyAgICAg
ICAgdGhpcy5jb21tZW50cyA9IFtdOworCisgICAgICAgIHRoaXMudHJhaWxpbmdDb21tZW50cyA9
IFtdOworICAgICAgICB0aGlzLmxlYWRpbmdDb21tZW50cyAgPSBbXTsKKyAgICAgICAgdGhpcy5j
b21tZW50U3RhY2sgICAgID0gW107CisKKyAgICAgICAgdGhpcy5wb3MgPSB0aGlzLmxpbmVTdGFy
dCA9IDA7CisgICAgICAgIHRoaXMuY3VyTGluZSA9IG9wdGlvbnMuc3RhcnRMaW5lOworCisgICAg
ICAgIHRoaXMudHlwZSA9IHR0LmVvZjsKKyAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7CisgICAg
ICAgIHRoaXMuc3RhcnQgPSB0aGlzLmVuZCA9IHRoaXMucG9zOworICAgICAgICB0aGlzLnN0YXJ0
TG9jID0gdGhpcy5lbmRMb2MgPSB0aGlzLmN1clBvc2l0aW9uKCk7CisKKyAgICAgICAgdGhpcy5s
YXN0VG9rRW5kTG9jID0gdGhpcy5sYXN0VG9rU3RhcnRMb2MgPSBudWxsOworICAgICAgICB0aGlz
Lmxhc3RUb2tTdGFydCA9IHRoaXMubGFzdFRva0VuZCA9IHRoaXMucG9zOworCisgICAgICAgIHRo
aXMuY29udGV4dCA9IFtjdC5icmFjZVN0YXRlbWVudF07CisgICAgICAgIHRoaXMuZXhwckFsbG93
ZWQgPSB0cnVlOworCisgICAgICAgIHRoaXMuY29udGFpbnNFc2MgPSB0aGlzLmNvbnRhaW5zT2N0
YWwgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5vY3RhbFBvc2l0aW9uID0gbnVsbDsKKworICAgICAg
ICB0aGlzLmludmFsaWRUZW1wbGF0ZUVzY2FwZVBvc2l0aW9uID0gbnVsbDsKKworICAgICAgICB0
aGlzLmV4cG9ydGVkSWRlbnRpZmllcnMgPSBbXTsKKworICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgIH0KKworICAgICAgLy8vLyBUT0RPCisgICAgICAvL3N0cmljdDogYm9vbGVhbjsKKworICAg
ICAgLy8vLyBUT0RPCisgICAgICAvL2lucHV0OiBzdHJpbmc7CisKKyAgICAgIC8vLy8gVXNlZCB0
byBzaWduaWZ5IHRoZSBzdGFydCBvZiBhIHBvdGVudGlhbCBhcnJvdyBmdW5jdGlvbgorICAgICAg
Ly9wb3RlbnRpYWxBcnJvd0F0OiBudW1iZXI7CisKKyAgICAgIC8vLy8gRmxhZ3MgdG8gdHJhY2sg
d2hldGhlciB3ZSBhcmUgaW4gYSBmdW5jdGlvbiwgYSBnZW5lcmF0b3IuCisgICAgICAvL2luRnVu
Y3Rpb246IGJvb2xlYW47CisgICAgICAvL2luR2VuZXJhdG9yOiBib29sZWFuOworICAgICAgLy9p
bk1ldGhvZDogYm9vbGVhbjsKKyAgICAgIC8vaW5Bc3luYzogYm9vbGVhbjsKKyAgICAgIC8vaW5U
eXBlOiBib29sZWFuOworICAgICAgLy9pblByb3BlcnR5TmFtZTogYm9vbGVhbjsKKworICAgICAg
Ly8vLyBMYWJlbHMgaW4gc2NvcGUuCisgICAgICAvL2xhYmVsczogQXJyYXk8T2JqZWN0PjsKKwor
ICAgICAgLy8vLyBMZWFkaW5nIGRlY29yYXRvcnMuCisgICAgICAvL2RlY29yYXRvcnM6IEFycmF5
PE9iamVjdD47CisKKyAgICAgIC8vLy8gVG9rZW4gc3RvcmUuCisgICAgICAvL3Rva2VuczogQXJy
YXk8T2JqZWN0PjsKKworICAgICAgLy8vLyBDb21tZW50IHN0b3JlLgorICAgICAgLy9jb21tZW50
czogQXJyYXk8T2JqZWN0PjsKKworICAgICAgLy8vLyBDb21tZW50IGF0dGFjaG1lbnQgc3RvcmUK
KyAgICAgIC8vdHJhaWxpbmdDb21tZW50czogQXJyYXk8T2JqZWN0PjsKKyAgICAgIC8vbGVhZGlu
Z0NvbW1lbnRzOiBBcnJheTxPYmplY3Q+OworICAgICAgLy9jb21tZW50U3RhY2s6IEFycmF5PE9i
amVjdD47CisKKyAgICAgIC8vLy8gVGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIHRva2VuaXpl
ciBpbiB0aGUgaW5wdXQuCisgICAgICAvL3BvczogbnVtYmVyOworICAgICAgLy9saW5lU3RhcnQ6
IG51bWJlcjsKKyAgICAgIC8vY3VyTGluZTogbnVtYmVyOworCisgICAgICAvLy8vIFByb3BlcnRp
ZXMgb2YgdGhlIGN1cnJlbnQgdG9rZW46CisgICAgICAvLy8vIEl0cyB0eXBlCisgICAgICAvL3R5
cGU6IFRva2VuVHlwZTsKKworICAgICAgLy8vLyBGb3IgdG9rZW5zIHRoYXQgaW5jbHVkZSBtb3Jl
IGluZm9ybWF0aW9uIHRoYW4gdGhlaXIgdHlwZSwgdGhlIHZhbHVlCisgICAgICAvL3ZhbHVlOiBh
bnk7CisKKyAgICAgIC8vLy8gSXRzIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0CisgICAgICAvL3N0YXJ0
OiBudW1iZXI7CisgICAgICAvL2VuZDogbnVtYmVyOworCisgICAgICAvLy8vIEFuZCwgaWYgbG9j
YXRpb25zIGFyZSB1c2VkLCB0aGUge2xpbmUsIGNvbHVtbn0gb2JqZWN0CisgICAgICAvLy8vIGNv
cnJlc3BvbmRpbmcgdG8gdGhvc2Ugb2Zmc2V0cworICAgICAgLy9zdGFydExvYzogUG9zaXRpb247
CisgICAgICAvL2VuZExvYzogUG9zaXRpb247CisKKyAgICAgIC8vLy8gUG9zaXRpb24gaW5mb3Jt
YXRpb24gZm9yIHRoZSBwcmV2aW91cyB0b2tlbgorICAgICAgLy9sYXN0VG9rRW5kTG9jOiA/UG9z
aXRpb247CisgICAgICAvL2xhc3RUb2tTdGFydExvYzogP1Bvc2l0aW9uOworICAgICAgLy9sYXN0
VG9rU3RhcnQ6IG51bWJlcjsKKyAgICAgIC8vbGFzdFRva0VuZDogbnVtYmVyOworCisgICAgICAv
Ly8vIFRoZSBjb250ZXh0IHN0YWNrIGlzIHVzZWQgdG8gc3VwZXJmaWNpYWxseSB0cmFjayBzeW50
YWN0aWMKKyAgICAgIC8vLy8gY29udGV4dCB0byBwcmVkaWN0IHdoZXRoZXIgYSByZWd1bGFyIGV4
cHJlc3Npb24gaXMgYWxsb3dlZCBpbiBhCisgICAgICAvLy8vIGdpdmVuIHBvc2l0aW9uLgorICAg
ICAgLy9jb250ZXh0OiBBcnJheTxUb2tDb250ZXh0PjsKKyAgICAgIC8vZXhwckFsbG93ZWQ6IGJv
b2xlYW47CisKKyAgICAgIC8vLy8gVXNlZCB0byBzaWduYWwgdG8gY2FsbGVycyBvZiBgcmVhZFdv
cmQxYCB3aGV0aGVyIHRoZSB3b3JkCisgICAgICAvLy8vIGNvbnRhaW5lZCBhbnkgZXNjYXBlIHNl
cXVlbmNlcy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB3b3JkcyB3aXRoCisgICAgICAvLy8vIGVz
Y2FwZSBzZXF1ZW5jZXMgbXVzdCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMga2V5d29yZHMuCisgICAg
ICAvL2NvbnRhaW5zRXNjOiBib29sZWFuOworCisgICAgICAvLy8vIFRPRE8KKyAgICAgIC8vY29u
dGFpbnNPY3RhbDogYm9vbGVhbjsKKyAgICAgIC8vb2N0YWxQb3NpdGlvbjogP251bWJlcjsKKwor
ICAgICAgLy8vLyBOYW1lcyBvZiBleHBvcnRzIHN0b3JlLiBgZGVmYXVsdGAgaXMgc3RvcmVkIGFz
IGEgbmFtZSBmb3IgYm90aAorICAgICAgLy8vLyBgZXhwb3J0IGRlZmF1bHQgZm9vO2AgYW5kIGBl
eHBvcnQgeyBmb28gYXMgZGVmYXVsdCB9O2AuCisgICAgICAvL2V4cG9ydGVkSWRlbnRpZmllcnM6
IEFycmF5PHN0cmluZz47CisKKyAgICAgIGN1clBvc2l0aW9uKCkgeworICAgICAgICByZXR1cm4g
bmV3IFBvc2l0aW9uKHRoaXMuY3VyTGluZSwgdGhpcy5wb3MgLSB0aGlzLmxpbmVTdGFydCk7Cisg
ICAgICB9CisKKyAgICAgIGNsb25lKHNraXBBcnJheXMpIHsKKyAgICAgICAgY29uc3Qgc3RhdGUg
PSBuZXcgU3RhdGU7CisgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMpIHsKKyAgICAgICAg
ICBsZXQgdmFsID0gdGhpc1trZXldOworCisgICAgICAgICAgaWYgKCghc2tpcEFycmF5cyB8fCBr
ZXkgPT09ICJjb250ZXh0IikgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7CisgICAgICAgICAgICB2
YWwgPSB2YWwuc2xpY2UoKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBzdGF0ZVtrZXldID0g
dmFsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdGF0ZTsKKyAgICAgIH0KKyAgICB9Cisg
ICAgdG9rZW5pemVyU3RhdGVKUyA9IFN0YXRlOworfQorCisvLyB0b2tlbml6ZXIvaW5kZXguanMK
K2xldCB0b2tlbml6ZXJJbmRleEpTID0ge307Cit7CisgICAgLyogZXNsaW50IG1heC1sZW46IDAg
Ki8KKworICAgIGNvbnN0IFRva2VuVHlwZSA9IHRva2VuaXplclR5cGVzSlMuVG9rZW5UeXBlOwor
ICAgIGNvbnN0IHtpc0lkZW50aWZpZXJTdGFydCwgaXNJZGVudGlmaWVyQ2hhciwgaXNLZXl3b3Jk
fSA9IHV0aWxJZGVudGlmaWVySlM7CisKKyAgICBjb25zdCB7IHR5cGVzOiB0dCAsIGtleXdvcmRz
OiBrZXl3b3JkVHlwZXMgfSA9IHRva2VuaXplclR5cGVzSlM7CisgICAgY29uc3QgeyB0eXBlczog
Y3QgfSA9IHRva2VuaXplckNvbnRleHRKUzsKKyAgICBjb25zdCB7IFNvdXJjZUxvY2F0aW9uIH0g
PSB1dGlsTG9jYXRpb25KUzsKKyAgICBjb25zdCB7IGxpbmVCcmVhaywgbGluZUJyZWFrRywgaXNO
ZXdMaW5lLCBub25BU0NJSXdoaXRlc3BhY2UgfSA9IHV0aWxXaGl0ZXNwYWNlSlM7CisgICAgY29u
c3QgU3RhdGUgPSB0b2tlbml6ZXJTdGF0ZUpTOworCisgICAgLy8gT2JqZWN0IHR5cGUgdXNlZCB0
byByZXByZXNlbnQgdG9rZW5zLiBOb3RlIHRoYXQgbm9ybWFsbHksIHRva2VucworICAgIC8vIHNp
bXBseSBleGlzdCBhcyBwcm9wZXJ0aWVzIG9uIHRoZSBwYXJzZXIgb2JqZWN0LiBUaGlzIGlzIG9u
bHkKKyAgICAvLyB1c2VkIGZvciB0aGUgb25Ub2tlbiBjYWxsYmFjayBhbmQgdGhlIGV4dGVybmFs
IHRva2VuaXplci4KKworICAgIC8vZXhwb3J0IGNsYXNzIFRva2VuIHsKKyAgICBjbGFzcyBUb2tl
biB7CisgICAgICBjb25zdHJ1Y3RvcihzdGF0ZSkgeworICAgICAgICB0aGlzLnR5cGUgPSBzdGF0
ZS50eXBlOworICAgICAgICB0aGlzLnZhbHVlID0gc3RhdGUudmFsdWU7CisgICAgICAgIHRoaXMu
c3RhcnQgPSBzdGF0ZS5zdGFydDsKKyAgICAgICAgdGhpcy5lbmQgPSBzdGF0ZS5lbmQ7CisgICAg
ICAgIHRoaXMubG9jID0gbmV3IFNvdXJjZUxvY2F0aW9uKHN0YXRlLnN0YXJ0TG9jLCBzdGF0ZS5l
bmRMb2MpOworICAgICAgfQorICAgIH0KKworICAgIC8vICMjIFRva2VuaXplcgorCisgICAgZnVu
Y3Rpb24gY29kZVBvaW50VG9TdHJpbmcoY29kZSkgeworICAgICAgLy8gVVRGLTE2IERlY29kaW5n
CisgICAgICBpZiAoY29kZSA8PSAweEZGRkYpIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9t
Q2hhckNvZGUoY29kZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gU3RyaW5nLmZy
b21DaGFyQ29kZSgoKGNvZGUgLSAweDEwMDAwKSA+PiAxMCkgKyAweEQ4MDAsICgoY29kZSAtIDB4
MTAwMDApICYgMTAyMykgKyAweERDMDApOworICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIFRv
a2VuaXplciB7CisgICAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBpbnB1dCkgeworICAgICAgICB0
aGlzLnN0YXRlID0gbmV3IFN0YXRlOworICAgICAgICB0aGlzLnN0YXRlLmluaXQob3B0aW9ucywg
aW5wdXQpOworICAgICAgfQorCisgICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IHRva2VuCisKKyAg
ICAgIG5leHQoKSB7CisgICAgICAgIGlmICghdGhpcy5pc0xvb2thaGVhZCkgeworICAgICAgICAg
IHRoaXMuc3RhdGUudG9rZW5zLnB1c2gobmV3IFRva2VuKHRoaXMuc3RhdGUpKTsKKyAgICAgICAg
fQorCisgICAgICAgIHRoaXMuc3RhdGUubGFzdFRva0VuZCA9IHRoaXMuc3RhdGUuZW5kOworICAg
ICAgICB0aGlzLnN0YXRlLmxhc3RUb2tTdGFydCA9IHRoaXMuc3RhdGUuc3RhcnQ7CisgICAgICAg
IHRoaXMuc3RhdGUubGFzdFRva0VuZExvYyA9IHRoaXMuc3RhdGUuZW5kTG9jOworICAgICAgICB0
aGlzLnN0YXRlLmxhc3RUb2tTdGFydExvYyA9IHRoaXMuc3RhdGUuc3RhcnRMb2M7CisgICAgICAg
IHRoaXMubmV4dFRva2VuKCk7CisgICAgICB9CisKKyAgICAgIC8vIFRPRE8KKworICAgICAgZWF0
KHR5cGUpIHsKKyAgICAgICAgaWYgKHRoaXMubWF0Y2godHlwZSkpIHsKKyAgICAgICAgICB0aGlz
Lm5leHQoKTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLy8gVE9ETwor
CisgICAgICBtYXRjaCh0eXBlKSB7CisgICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnR5cGUgPT09
IHR5cGU7CisgICAgICB9CisKKyAgICAgIC8vIFRPRE8KKworICAgICAgaXNLZXl3b3JkKHdvcmQp
IHsKKyAgICAgICAgcmV0dXJuIGlzS2V5d29yZCh3b3JkKTsKKyAgICAgIH0KKworICAgICAgLy8g
VE9ETworCisgICAgICBsb29rYWhlYWQoKSB7CisgICAgICAgIGNvbnN0IG9sZCA9IHRoaXMuc3Rh
dGU7CisgICAgICAgIHRoaXMuc3RhdGUgPSBvbGQuY2xvbmUodHJ1ZSk7CisKKyAgICAgICAgdGhp
cy5pc0xvb2thaGVhZCA9IHRydWU7CisgICAgICAgIHRoaXMubmV4dCgpOworICAgICAgICB0aGlz
LmlzTG9va2FoZWFkID0gZmFsc2U7CisKKyAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuc3RhdGUu
Y2xvbmUodHJ1ZSk7CisgICAgICAgIHRoaXMuc3RhdGUgPSBvbGQ7CisgICAgICAgIHJldHVybiBj
dXJyOworICAgICAgfQorCisgICAgICAvLyBUb2dnbGUgc3RyaWN0IG1vZGUuIFJlLXJlYWRzIHRo
ZSBuZXh0IG51bWJlciBvciBzdHJpbmcgdG8gcGxlYXNlCisgICAgICAvLyBwZWRhbnRpYyB0ZXN0
cyAoYCJ1c2Ugc3RyaWN0IjsgMDEwO2Agc2hvdWxkIGZhaWwpLgorCisgICAgICBzZXRTdHJpY3Qo
c3RyaWN0KSB7CisgICAgICAgIHRoaXMuc3RhdGUuc3RyaWN0ID0gc3RyaWN0OworICAgICAgICBp
ZiAoIXRoaXMubWF0Y2godHQubnVtKSAmJiAhdGhpcy5tYXRjaCh0dC5zdHJpbmcpKSByZXR1cm47
CisgICAgICAgIHRoaXMuc3RhdGUucG9zID0gdGhpcy5zdGF0ZS5zdGFydDsKKyAgICAgICAgd2hp
bGUgKHRoaXMuc3RhdGUucG9zIDwgdGhpcy5zdGF0ZS5saW5lU3RhcnQpIHsKKyAgICAgICAgICB0
aGlzLnN0YXRlLmxpbmVTdGFydCA9IHRoaXMuaW5wdXQubGFzdEluZGV4T2YoIlxuIiwgdGhpcy5z
dGF0ZS5saW5lU3RhcnQgLSAyKSArIDE7CisgICAgICAgICAgLS10aGlzLnN0YXRlLmN1ckxpbmU7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgIH0KKworICAgICAg
Y3VyQ29udGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuY29udGV4dFt0aGlzLnN0
YXRlLmNvbnRleHQubGVuZ3RoIC0gMV07CisgICAgICB9CisKKyAgICAgIC8vIFJlYWQgYSBzaW5n
bGUgdG9rZW4sIHVwZGF0aW5nIHRoZSBwYXJzZXIgb2JqZWN0J3MgdG9rZW4tcmVsYXRlZAorICAg
ICAgLy8gcHJvcGVydGllcy4KKworICAgICAgbmV4dFRva2VuKCkgeworICAgICAgICBjb25zdCBj
dXJDb250ZXh0ID0gdGhpcy5jdXJDb250ZXh0KCk7CisgICAgICAgIGlmICghY3VyQ29udGV4dCB8
fCAhY3VyQ29udGV4dC5wcmVzZXJ2ZVNwYWNlKSB0aGlzLnNraXBTcGFjZSgpOworCisgICAgICAg
IHRoaXMuc3RhdGUuY29udGFpbnNPY3RhbCA9IGZhbHNlOworICAgICAgICB0aGlzLnN0YXRlLm9j
dGFsUG9zaXRpb24gPSBudWxsOworICAgICAgICB0aGlzLnN0YXRlLnN0YXJ0ID0gdGhpcy5zdGF0
ZS5wb3M7CisgICAgICAgIHRoaXMuc3RhdGUuc3RhcnRMb2MgPSB0aGlzLnN0YXRlLmN1clBvc2l0
aW9uKCk7CisgICAgICAgIGlmICh0aGlzLnN0YXRlLnBvcyA+PSB0aGlzLmlucHV0Lmxlbmd0aCkg
cmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHQuZW9mKTsKKworICAgICAgICBpZiAoY3VyQ29udGV4
dC5vdmVycmlkZSkgeworICAgICAgICAgIHJldHVybiBjdXJDb250ZXh0Lm92ZXJyaWRlKHRoaXMp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbih0aGlz
LmZ1bGxDaGFyQ29kZUF0UG9zKCkpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJlYWRU
b2tlbihjb2RlKSB7CisgICAgICAgIC8vIElkZW50aWZpZXIgb3Iga2V5d29yZC4gJ1x1WFhYWCcg
c2VxdWVuY2VzIGFyZSBhbGxvd2VkIGluCisgICAgICAgIC8vIGlkZW50aWZpZXJzLCBzbyAnXCcg
YWxzbyBkaXNwYXRjaGVzIHRvIHRoYXQuCisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChj
b2RlKSB8fCBjb2RlID09PSA5MiAvKiAnXCcgKi8pIHsKKyAgICAgICAgICByZXR1cm4gdGhpcy5y
ZWFkV29yZCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiB0aGlzLmdldFRv
a2VuRnJvbUNvZGUoY29kZSk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZnVsbENoYXJD
b2RlQXRQb3MoKSB7CisgICAgICAgIGNvbnN0IGNvZGUgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQo
dGhpcy5zdGF0ZS5wb3MpOworICAgICAgICBpZiAoY29kZSA8PSAweGQ3ZmYgfHwgY29kZSA+PSAw
eGUwMDApIHJldHVybiBjb2RlOworCisgICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLmlucHV0LmNo
YXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MgKyAxKTsKKyAgICAgICAgcmV0dXJuIChjb2RlIDw8IDEw
KSArIG5leHQgLSAweDM1ZmRjMDA7CisgICAgICB9CisKKyAgICAgIHB1c2hDb21tZW50KGJsb2Nr
LCB0ZXh0LCBzdGFydCwgZW5kLCBzdGFydExvYywgZW5kTG9jKSB7CisgICAgICAgIGNvbnN0IGNv
bW1lbnQgPSB7CisgICAgICAgICAgdHlwZTogYmxvY2sgPyAiQ29tbWVudEJsb2NrIiA6ICJDb21t
ZW50TGluZSIsCisgICAgICAgICAgdmFsdWU6IHRleHQsCisgICAgICAgICAgc3RhcnQ6IHN0YXJ0
LAorICAgICAgICAgIGVuZDogZW5kLAorICAgICAgICAgIGxvYzogbmV3IFNvdXJjZUxvY2F0aW9u
KHN0YXJ0TG9jLCBlbmRMb2MpCisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCF0aGlzLmlzTG9v
a2FoZWFkKSB7CisgICAgICAgICAgdGhpcy5zdGF0ZS50b2tlbnMucHVzaChjb21tZW50KTsKKyAg
ICAgICAgICB0aGlzLnN0YXRlLmNvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgICAgdGhp
cy5hZGRDb21tZW50KGNvbW1lbnQpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHNraXBC
bG9ja0NvbW1lbnQoKSB7CisgICAgICAgIGNvbnN0IHN0YXJ0TG9jID0gdGhpcy5zdGF0ZS5jdXJQ
b3NpdGlvbigpOworICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuc3RhdGUucG9zOworICAgICAg
ICBjb25zdCBlbmQgPSB0aGlzLmlucHV0LmluZGV4T2YoIiovIiwgdGhpcy5zdGF0ZS5wb3MgKz0g
Mik7CisgICAgICAgIGlmIChlbmQgPT09IC0xKSB0aGlzLnJhaXNlKHRoaXMuc3RhdGUucG9zIC0g
MiwgIlVudGVybWluYXRlZCBjb21tZW50Iik7CisKKyAgICAgICAgdGhpcy5zdGF0ZS5wb3MgPSBl
bmQgKyAyOworICAgICAgICBsaW5lQnJlYWtHLmxhc3RJbmRleCA9IHN0YXJ0OworICAgICAgICBs
ZXQgbWF0Y2g7CisgICAgICAgIHdoaWxlICgobWF0Y2ggPSBsaW5lQnJlYWtHLmV4ZWModGhpcy5p
bnB1dCkpICYmIG1hdGNoLmluZGV4IDwgdGhpcy5zdGF0ZS5wb3MpIHsKKyAgICAgICAgICArK3Ro
aXMuc3RhdGUuY3VyTGluZTsKKyAgICAgICAgICB0aGlzLnN0YXRlLmxpbmVTdGFydCA9IG1hdGNo
LmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5wdXNo
Q29tbWVudCh0cnVlLCB0aGlzLmlucHV0LnNsaWNlKHN0YXJ0ICsgMiwgZW5kKSwgc3RhcnQsIHRo
aXMuc3RhdGUucG9zLCBzdGFydExvYywgdGhpcy5zdGF0ZS5jdXJQb3NpdGlvbigpKTsKKyAgICAg
IH0KKworICAgICAgc2tpcExpbmVDb21tZW50KHN0YXJ0U2tpcCkgeworICAgICAgICBjb25zdCBz
dGFydCA9IHRoaXMuc3RhdGUucG9zOworICAgICAgICBjb25zdCBzdGFydExvYyA9IHRoaXMuc3Rh
dGUuY3VyUG9zaXRpb24oKTsKKyAgICAgICAgbGV0IGNoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0
KHRoaXMuc3RhdGUucG9zICs9IHN0YXJ0U2tpcCk7CisgICAgICAgIHdoaWxlICh0aGlzLnN0YXRl
LnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoICYmIGNoICE9PSAxMCAmJiBjaCAhPT0gMTMgJiYgY2gg
IT09IDgyMzIgJiYgY2ggIT09IDgyMzMpIHsKKyAgICAgICAgICArK3RoaXMuc3RhdGUucG9zOwor
ICAgICAgICAgIGNoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHRoaXMucHVzaENvbW1lbnQoZmFsc2UsIHRoaXMuaW5wdXQuc2xp
Y2Uoc3RhcnQgKyBzdGFydFNraXAsIHRoaXMuc3RhdGUucG9zKSwgc3RhcnQsIHRoaXMuc3RhdGUu
cG9zLCBzdGFydExvYywgdGhpcy5zdGF0ZS5jdXJQb3NpdGlvbigpKTsKKyAgICAgIH0KKworICAg
ICAgLy8gQ2FsbGVkIGF0IHRoZSBzdGFydCBvZiB0aGUgcGFyc2UgYW5kIGFmdGVyIGV2ZXJ5IHRv
a2VuLiBTa2lwcworICAgICAgLy8gd2hpdGVzcGFjZSBhbmQgY29tbWVudHMsIGFuZC4KKworICAg
ICAgc2tpcFNwYWNlKCkgeworICAgICAgICBsb29wOiB3aGlsZSAodGhpcy5zdGF0ZS5wb3MgPCB0
aGlzLmlucHV0Lmxlbmd0aCkgeworICAgICAgICAgIGNvbnN0IGNoID0gdGhpcy5pbnB1dC5jaGFy
Q29kZUF0KHRoaXMuc3RhdGUucG9zKTsKKyAgICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAg
ICAgICBjYXNlIDMyOiBjYXNlIDE2MDogLy8gJyAnCisgICAgICAgICAgICAgICsrdGhpcy5zdGF0
ZS5wb3M7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDEzOgorICAg
ICAgICAgICAgICBpZiAodGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zICsgMSkg
PT09IDEwKSB7CisgICAgICAgICAgICAgICAgKyt0aGlzLnN0YXRlLnBvczsKKyAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBjYXNlIDEwOiBjYXNlIDgyMzI6IGNhc2UgODIzMzoKKyAgICAg
ICAgICAgICAgKyt0aGlzLnN0YXRlLnBvczsKKyAgICAgICAgICAgICAgKyt0aGlzLnN0YXRlLmN1
ckxpbmU7CisgICAgICAgICAgICAgIHRoaXMuc3RhdGUubGluZVN0YXJ0ID0gdGhpcy5zdGF0ZS5w
b3M7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDQ3OiAvLyAnLycK
KyAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5w
b3MgKyAxKSkgeworICAgICAgICAgICAgICAgIGNhc2UgNDI6IC8vICcqJworICAgICAgICAgICAg
ICAgICAgdGhpcy5za2lwQmxvY2tDb21tZW50KCk7CisgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgIGNhc2UgNDc6CisgICAgICAgICAgICAgICAgICB0aGlzLnNraXBM
aW5lQ29tbWVudCgyKTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgIGJyZWFrIGxvb3A7CisgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgIGlmIChjaCA+IDggJiYgY2ggPCAxNCB8fCBjaCA+PSA1NzYwICYmIG5vbkFTQ0lJd2hp
dGVzcGFjZS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSkgeworICAgICAgICAgICAgICAg
ICsrdGhpcy5zdGF0ZS5wb3M7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgYnJlYWsgbG9vcDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgfQorCisgICAgICAvLyBDYWxsZWQgYXQgdGhlIGVuZCBvZiBldmVyeSB0b2tlbi4gU2V0
cyBgZW5kYCwgYHZhbGAsIGFuZAorICAgICAgLy8gbWFpbnRhaW5zIGBjb250ZXh0YCBhbmQgYGV4
cHJBbGxvd2VkYCwgYW5kIHNraXBzIHRoZSBzcGFjZSBhZnRlcgorICAgICAgLy8gdGhlIHRva2Vu
LCBzbyB0aGF0IHRoZSBuZXh0IG9uZSdzIGBzdGFydGAgd2lsbCBwb2ludCBhdCB0aGUKKyAgICAg
IC8vIHJpZ2h0IHBvc2l0aW9uLgorCisgICAgICBmaW5pc2hUb2tlbih0eXBlLCB2YWwpIHsKKyAg
ICAgICAgdGhpcy5zdGF0ZS5lbmQgPSB0aGlzLnN0YXRlLnBvczsKKyAgICAgICAgdGhpcy5zdGF0
ZS5lbmRMb2MgPSB0aGlzLnN0YXRlLmN1clBvc2l0aW9uKCk7CisgICAgICAgIGNvbnN0IHByZXZU
eXBlID0gdGhpcy5zdGF0ZS50eXBlOworICAgICAgICB0aGlzLnN0YXRlLnR5cGUgPSB0eXBlOwor
ICAgICAgICB0aGlzLnN0YXRlLnZhbHVlID0gdmFsOworCisgICAgICAgIHRoaXMudXBkYXRlQ29u
dGV4dChwcmV2VHlwZSk7CisgICAgICB9CisKKyAgICAgIC8vICMjIyBUb2tlbiByZWFkaW5nCisK
KyAgICAgIC8vIFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHRvIGZldGNoIHRo
ZSBuZXh0IHRva2VuLiBJdAorICAgICAgLy8gaXMgc29tZXdoYXQgb2JzY3VyZSwgYmVjYXVzZSBp
dCB3b3JrcyBpbiBjaGFyYWN0ZXIgY29kZXMgcmF0aGVyCisgICAgICAvLyB0aGFuIGNoYXJhY3Rl
cnMsIGFuZCBiZWNhdXNlIG9wZXJhdG9yIHBhcnNpbmcgaGFzIGJlZW4gaW5saW5lZAorICAgICAg
Ly8gaW50byBpdC4KKyAgICAgIC8vCisgICAgICAvLyBBbGwgaW4gdGhlIG5hbWUgb2Ygc3BlZWQu
CisgICAgICAvLworICAgICAgcmVhZFRva2VuX2RvdCgpIHsKKyAgICAgICAgY29uc3QgbmV4dCA9
IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcyArIDEpOworICAgICAgICBpZiAo
bmV4dCA+PSA0OCAmJiBuZXh0IDw9IDU3KSB7CisgICAgICAgICAgcmV0dXJuIHRoaXMucmVhZE51
bWJlcih0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IG5leHQyID0gdGhpcy5pbnB1
dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zICsgMik7CisgICAgICAgIGlmIChuZXh0ID09PSA0
NiAmJiBuZXh0MiA9PT0gNDYpIHsgLy8gNDYgPSBkb3QgJy4nCisgICAgICAgICAgdGhpcy5zdGF0
ZS5wb3MgKz0gMzsKKyAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0dC5lbGxpcHNp
cyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgKyt0aGlzLnN0YXRlLnBvczsKKyAgICAg
ICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0dC5kb3QpOworICAgICAgICB9CisgICAgICB9
CisKKyAgICAgIHJlYWRUb2tlbl9zbGFzaCgpIHsgLy8gJy8nCisgICAgICAgIGlmICh0aGlzLnN0
YXRlLmV4cHJBbGxvd2VkKSB7CisgICAgICAgICAgKyt0aGlzLnN0YXRlLnBvczsKKyAgICAgICAg
ICByZXR1cm4gdGhpcy5yZWFkUmVnZXhwKCk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBu
ZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zICsgMSk7CisgICAgICAg
IGlmIChuZXh0ID09PSA2MSkgeworICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaE9wKHR0LmFz
c2lnbiwgMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNo
T3AodHQuc2xhc2gsIDEpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJlYWRUb2tlbl9t
dWx0X21vZHVsbyhjb2RlKSB7IC8vICclKicKKyAgICAgICAgbGV0IHR5cGUgPSBjb2RlID09PSA0
MiA/IHR0LnN0YXIgOiB0dC5tb2R1bG87CisgICAgICAgIGxldCB3aWR0aCA9IDE7CisgICAgICAg
IGxldCBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zICsgMSk7CisK
KyAgICAgICAgaWYgKG5leHQgPT09IDQyKSB7IC8vICcqJworICAgICAgICAgIHdpZHRoKys7Cisg
ICAgICAgICAgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcyArIDIp
OworICAgICAgICAgIHR5cGUgPSB0dC5leHBvbmVudDsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChuZXh0ID09PSA2MSkgeworICAgICAgICAgIHdpZHRoKys7CisgICAgICAgICAgdHlwZSA9IHR0
LmFzc2lnbjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGUs
IHdpZHRoKTsKKyAgICAgIH0KKworICAgICAgcmVhZFRva2VuX3BpcGVfYW1wKGNvZGUpIHsgLy8g
J3wmJworICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3Rh
dGUucG9zICsgMSk7CisgICAgICAgIGlmIChuZXh0ID09PSBjb2RlKSByZXR1cm4gdGhpcy5maW5p
c2hPcChjb2RlID09PSAxMjQgPyB0dC5sb2dpY2FsT1IgOiB0dC5sb2dpY2FsQU5ELCAyKTsKKyAg
ICAgICAgaWYgKG5leHQgPT09IDYxKSByZXR1cm4gdGhpcy5maW5pc2hPcCh0dC5hc3NpZ24sIDIp
OworICAgICAgICBpZiAoY29kZSA9PT0gMTI0ICYmIG5leHQgPT09IDEyNSAmJiB0aGlzLmhhc1Bs
dWdpbigiZmxvdyIpKSByZXR1cm4gdGhpcy5maW5pc2hPcCh0dC5icmFjZUJhclIsIDIpOworICAg
ICAgICByZXR1cm4gdGhpcy5maW5pc2hPcChjb2RlID09PSAxMjQgPyB0dC5iaXR3aXNlT1IgOiB0
dC5iaXR3aXNlQU5ELCAxKTsKKyAgICAgIH0KKworICAgICAgcmVhZFRva2VuX2NhcmV0KCkgeyAv
LyAnXicKKyAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0
YXRlLnBvcyArIDEpOworICAgICAgICBpZiAobmV4dCA9PT0gNjEpIHsKKyAgICAgICAgICByZXR1
cm4gdGhpcy5maW5pc2hPcCh0dC5hc3NpZ24sIDIpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIHJldHVybiB0aGlzLmZpbmlzaE9wKHR0LmJpdHdpc2VYT1IsIDEpOworICAgICAgICB9Cisg
ICAgICB9CisKKyAgICAgIHJlYWRUb2tlbl9wbHVzX21pbihjb2RlKSB7IC8vICcrLScKKyAgICAg
ICAgY29uc3QgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcyArIDEp
OworCisgICAgICAgIGlmIChuZXh0ID09PSBjb2RlKSB7CisgICAgICAgICAgaWYgKG5leHQgPT09
IDQ1ICYmIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcyArIDIpID09PSA2MiAm
JiBsaW5lQnJlYWsudGVzdCh0aGlzLmlucHV0LnNsaWNlKHRoaXMuc3RhdGUubGFzdFRva0VuZCwg
dGhpcy5zdGF0ZS5wb3MpKSkgeworICAgICAgICAgICAgLy8gQSBgLS0+YCBsaW5lIGNvbW1lbnQK
KyAgICAgICAgICAgIHRoaXMuc2tpcExpbmVDb21tZW50KDMpOworICAgICAgICAgICAgdGhpcy5z
a2lwU3BhY2UoKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm5leHRUb2tlbigpOworICAgICAg
ICAgIH0KKyAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hPcCh0dC5pbmNEZWMsIDIpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG5leHQgPT09IDYxKSB7CisgICAgICAgICAgcmV0dXJuIHRo
aXMuZmluaXNoT3AodHQuYXNzaWduLCAyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBy
ZXR1cm4gdGhpcy5maW5pc2hPcCh0dC5wbHVzTWluLCAxKTsKKyAgICAgICAgfQorICAgICAgfQor
CisgICAgICByZWFkVG9rZW5fbHRfZ3QoY29kZSkgeyAvLyAnPD4nCisgICAgICAgIGNvbnN0IG5l
eHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MgKyAxKTsKKyAgICAgICAg
bGV0IHNpemUgPSAxOworCisgICAgICAgIGlmIChuZXh0ID09PSBjb2RlKSB7CisgICAgICAgICAg
c2l6ZSA9IGNvZGUgPT09IDYyICYmIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBv
cyArIDIpID09PSA2MiA/IDMgOiAyOworICAgICAgICAgIGlmICh0aGlzLmlucHV0LmNoYXJDb2Rl
QXQodGhpcy5zdGF0ZS5wb3MgKyBzaXplKSA9PT0gNjEpIHJldHVybiB0aGlzLmZpbmlzaE9wKHR0
LmFzc2lnbiwgc2l6ZSArIDEpOworICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaE9wKHR0LmJp
dFNoaWZ0LCBzaXplKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZXh0ID09PSAzMyAmJiBj
b2RlID09PSA2MCAmJiB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MgKyAyKSA9
PT0gNDUgJiYgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zICsgMykgPT09IDQ1
KSB7CisgICAgICAgICAgaWYgKHRoaXMuaW5Nb2R1bGUpIHRoaXMudW5leHBlY3RlZCgpOworICAg
ICAgICAgIC8vIGA8IS0tYCwgYW4gWE1MLXN0eWxlIGNvbW1lbnQgdGhhdCBzaG91bGQgYmUgaW50
ZXJwcmV0ZWQgYXMgYSBsaW5lIGNvbW1lbnQKKyAgICAgICAgICB0aGlzLnNraXBMaW5lQ29tbWVu
dCg0KTsKKyAgICAgICAgICB0aGlzLnNraXBTcGFjZSgpOworICAgICAgICAgIHJldHVybiB0aGlz
Lm5leHRUb2tlbigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5leHQgPT09IDYxKSB7Cisg
ICAgICAgICAgLy8gPD0gfCA+PQorICAgICAgICAgIHNpemUgPSAyOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHQucmVsYXRpb25hbCwgc2l6ZSk7CisgICAgICB9
CisKKyAgICAgIHJlYWRUb2tlbl9lcV9leGNsKGNvZGUpIHsgLy8gJz0hJworICAgICAgICBjb25z
dCBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zICsgMSk7CisgICAg
ICAgIGlmIChuZXh0ID09PSA2MSkgcmV0dXJuIHRoaXMuZmluaXNoT3AodHQuZXF1YWxpdHksIHRo
aXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcyArIDIpID09PSA2MSA/IDMgOiAyKTsK
KyAgICAgICAgaWYgKGNvZGUgPT09IDYxICYmIG5leHQgPT09IDYyKSB7IC8vICc9PicKKyAgICAg
ICAgICB0aGlzLnN0YXRlLnBvcyArPSAyOworICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRv
a2VuKHR0LmFycm93KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hPcChj
b2RlID09PSA2MSA/IHR0LmVxIDogdHQucHJlZml4LCAxKTsKKyAgICAgIH0KKworICAgICAgZ2V0
VG9rZW5Gcm9tQ29kZShjb2RlKSB7CisgICAgICAgIHN3aXRjaCAoY29kZSkgeworICAgICAgICAg
IC8vIFRoZSBpbnRlcnByZXRhdGlvbiBvZiBhIGRvdCBkZXBlbmRzIG9uIHdoZXRoZXIgaXQgaXMg
Zm9sbG93ZWQKKyAgICAgICAgICAvLyBieSBhIGRpZ2l0IG9yIGFub3RoZXIgdHdvIGRvdHMuCisg
ICAgICAgICAgY2FzZSA0NjogLy8gJy4nCisgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWFkVG9r
ZW5fZG90KCk7CisKKyAgICAgICAgICAvLyBQdW5jdHVhdGlvbiB0b2tlbnMuCisgICAgICAgICAg
Y2FzZSA0MDogKyt0aGlzLnN0YXRlLnBvczsgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHQucGFy
ZW5MKTsKKyAgICAgICAgICBjYXNlIDQxOiArK3RoaXMuc3RhdGUucG9zOyByZXR1cm4gdGhpcy5m
aW5pc2hUb2tlbih0dC5wYXJlblIpOworICAgICAgICAgIGNhc2UgNTk6ICsrdGhpcy5zdGF0ZS5w
b3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LnNlbWkpOworICAgICAgICAgIGNhc2UgNDQ6
ICsrdGhpcy5zdGF0ZS5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LmNvbW1hKTsKKyAg
ICAgICAgICBjYXNlIDkxOiArK3RoaXMuc3RhdGUucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tl
bih0dC5icmFja2V0TCk7CisgICAgICAgICAgY2FzZSA5MzogKyt0aGlzLnN0YXRlLnBvczsgcmV0
dXJuIHRoaXMuZmluaXNoVG9rZW4odHQuYnJhY2tldFIpOworCisgICAgICAgICAgY2FzZSAxMjM6
CisgICAgICAgICAgICBpZiAodGhpcy5oYXNQbHVnaW4oImZsb3ciKSAmJiB0aGlzLmlucHV0LmNo
YXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MgKyAxKSA9PT0gMTI0KSB7CisgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmZpbmlzaE9wKHR0LmJyYWNlQmFyTCwgMik7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICArK3RoaXMuc3RhdGUucG9zOworICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5maW5pc2hUb2tlbih0dC5icmFjZUwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
Y2FzZSAxMjU6CisgICAgICAgICAgICArK3RoaXMuc3RhdGUucG9zOyByZXR1cm4gdGhpcy5maW5p
c2hUb2tlbih0dC5icmFjZVIpOworCisgICAgICAgICAgY2FzZSA1ODoKKyAgICAgICAgICAgIGlm
ICh0aGlzLmhhc1BsdWdpbigiZnVuY3Rpb25CaW5kIikgJiYgdGhpcy5pbnB1dC5jaGFyQ29kZUF0
KHRoaXMuc3RhdGUucG9zICsgMSkgPT09IDU4KSB7CisgICAgICAgICAgICAgIHJldHVybiB0aGlz
LmZpbmlzaE9wKHR0LmRvdWJsZUNvbG9uLCAyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICsrdGhpcy5zdGF0ZS5wb3M7CisgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZp
bmlzaFRva2VuKHR0LmNvbG9uKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGNhc2UgNjM6
ICsrdGhpcy5zdGF0ZS5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LnF1ZXN0aW9uKTsK
KyAgICAgICAgICBjYXNlIDY0OiArK3RoaXMuc3RhdGUucG9zOyByZXR1cm4gdGhpcy5maW5pc2hU
b2tlbih0dC5hdCk7CisKKyAgICAgICAgICBjYXNlIDk2OiAvLyAnYCcKKyAgICAgICAgICAgICsr
dGhpcy5zdGF0ZS5wb3M7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0dC5i
YWNrUXVvdGUpOworCisgICAgICAgICAgY2FzZSA0ODogLy8gJzAnCisgICAgICAgICAgICBjb25z
dCBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zICsgMSk7CisgICAg
ICAgICAgICBpZiAobmV4dCA9PT0gMTIwIHx8IG5leHQgPT09IDg4KSByZXR1cm4gdGhpcy5yZWFk
UmFkaXhOdW1iZXIoMTYpOyAvLyAnMHgnLCAnMFgnIC0gaGV4IG51bWJlcgorICAgICAgICAgICAg
aWYgKG5leHQgPT09IDExMSB8fCBuZXh0ID09PSA3OSkgcmV0dXJuIHRoaXMucmVhZFJhZGl4TnVt
YmVyKDgpOyAvLyAnMG8nLCAnME8nIC0gb2N0YWwgbnVtYmVyCisgICAgICAgICAgICBpZiAobmV4
dCA9PT0gOTggfHwgbmV4dCA9PT0gNjYpIHJldHVybiB0aGlzLnJlYWRSYWRpeE51bWJlcigyKTsg
Ly8gJzBiJywgJzBCJyAtIGJpbmFyeSBudW1iZXIKKyAgICAgICAgICAgIC8vIEFueXRoaW5nIGVs
c2UgYmVnaW5uaW5nIHdpdGggYSBkaWdpdCBpcyBhbiBpbnRlZ2VyLCBvY3RhbAorICAgICAgICAg
ICAgLy8gbnVtYmVyLCBvciBmbG9hdC4KKyAgICAgICAgICBjYXNlIDQ5OiBjYXNlIDUwOiBjYXNl
IDUxOiBjYXNlIDUyOiBjYXNlIDUzOiBjYXNlIDU0OiBjYXNlIDU1OiBjYXNlIDU2OiBjYXNlIDU3
OiAvLyAxLTkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnJlYWROdW1iZXIoZmFsc2UpOworCisg
ICAgICAgICAgICAvLyBRdW90ZXMgcHJvZHVjZSBzdHJpbmdzLgorICAgICAgICAgIGNhc2UgMzQ6
IGNhc2UgMzk6IC8vICciJywgIiciCisgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWFkU3RyaW5n
KGNvZGUpOworCisgICAgICAgICAgLy8gT3BlcmF0b3JzIGFyZSBwYXJzZWQgaW5saW5lIGluIHRp
bnkgc3RhdGUgbWFjaGluZXMuICc9JyAoNjEpIGlzCisgICAgICAgICAgLy8gb2Z0ZW4gcmVmZXJy
ZWQgdG8uIGBmaW5pc2hPcGAgc2ltcGx5IHNraXBzIHRoZSBhbW91bnQgb2YKKyAgICAgICAgICAv
LyBjaGFyYWN0ZXJzIGl0IGlzIGdpdmVuIGFzIHNlY29uZCBhcmd1bWVudCwgYW5kIHJldHVybnMg
YSB0b2tlbgorICAgICAgICAgIC8vIG9mIHRoZSB0eXBlIGdpdmVuIGJ5IGl0cyBmaXJzdCBhcmd1
bWVudC4KKworICAgICAgICAgIGNhc2UgNDc6IC8vICcvJworICAgICAgICAgICAgcmV0dXJuIHRo
aXMucmVhZFRva2VuX3NsYXNoKCk7CisKKyAgICAgICAgICBjYXNlIDM3OiBjYXNlIDQyOiAvLyAn
JSonCisgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fbXVsdF9tb2R1bG8oY29kZSk7
CisKKyAgICAgICAgICBjYXNlIDEyNDogY2FzZSAzODogLy8gJ3wmJworICAgICAgICAgICAgcmV0
dXJuIHRoaXMucmVhZFRva2VuX3BpcGVfYW1wKGNvZGUpOworCisgICAgICAgICAgY2FzZSA5NDog
Ly8gJ14nCisgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fY2FyZXQoKTsKKworICAg
ICAgICAgIGNhc2UgNDM6IGNhc2UgNDU6IC8vICcrLScKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LnJlYWRUb2tlbl9wbHVzX21pbihjb2RlKTsKKworICAgICAgICAgIGNhc2UgNjA6IGNhc2UgNjI6
IC8vICc8PicKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9sdF9ndChjb2RlKTsK
KworICAgICAgICAgIGNhc2UgNjE6IGNhc2UgMzM6IC8vICc9IScKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLnJlYWRUb2tlbl9lcV9leGNsKGNvZGUpOworCisgICAgICAgICAgY2FzZSAxMjY6IC8v
ICd+JworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHQucHJlZml4LCAxKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHRoaXMucmFpc2UodGhpcy5zdGF0ZS5wb3MsIGBVbmV4cGVjdGVk
IGNoYXJhY3RlciAnJHtjb2RlUG9pbnRUb1N0cmluZyhjb2RlKX0nYCk7CisgICAgICB9CisKKyAg
ICAgIGZpbmlzaE9wKHR5cGUsIHNpemUpIHsKKyAgICAgICAgY29uc3Qgc3RyID0gdGhpcy5pbnB1
dC5zbGljZSh0aGlzLnN0YXRlLnBvcywgdGhpcy5zdGF0ZS5wb3MgKyBzaXplKTsKKyAgICAgICAg
dGhpcy5zdGF0ZS5wb3MgKz0gc2l6ZTsKKyAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4o
dHlwZSwgc3RyKTsKKyAgICAgIH0KKworICAgICAgcmVhZFJlZ2V4cCgpIHsKKyAgICAgICAgY29u
c3Qgc3RhcnQgPSB0aGlzLnN0YXRlLnBvczsKKyAgICAgICAgbGV0IGVzY2FwZWQsIGluQ2xhc3M7
CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5wb3MgPj0gdGhp
cy5pbnB1dC5sZW5ndGgpIHRoaXMucmFpc2Uoc3RhcnQsICJVbnRlcm1pbmF0ZWQgcmVndWxhciBl
eHByZXNzaW9uIik7CisgICAgICAgICAgY29uc3QgY2ggPSB0aGlzLmlucHV0LmNoYXJBdCh0aGlz
LnN0YXRlLnBvcyk7CisgICAgICAgICAgaWYgKGxpbmVCcmVhay50ZXN0KGNoKSkgeworICAgICAg
ICAgICAgdGhpcy5yYWlzZShzdGFydCwgIlVudGVybWluYXRlZCByZWd1bGFyIGV4cHJlc3Npb24i
KTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKGVzY2FwZWQpIHsKKyAgICAgICAgICAgIGVz
Y2FwZWQgPSBmYWxzZTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGNoID09
PSAiWyIpIHsKKyAgICAgICAgICAgICAgaW5DbGFzcyA9IHRydWU7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGNoID09PSAiXSIgJiYgaW5DbGFzcykgeworICAgICAgICAgICAgICBpbkNsYXNzID0g
ZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAiLyIgJiYgIWluQ2xhc3MpIHsK
KyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlc2NhcGVk
ID0gY2ggPT09ICJcXCI7CisgICAgICAgICAgfQorICAgICAgICAgICsrdGhpcy5zdGF0ZS5wb3M7
CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuaW5wdXQuc2xpY2Uoc3Rh
cnQsIHRoaXMuc3RhdGUucG9zKTsKKyAgICAgICAgKyt0aGlzLnN0YXRlLnBvczsKKyAgICAgICAg
Ly8gTmVlZCB0byB1c2UgYHJlYWRXb3JkMWAgYmVjYXVzZSAnXHVYWFhYJyBzZXF1ZW5jZXMgYXJl
IGFsbG93ZWQKKyAgICAgICAgLy8gaGVyZSAoZG9uJ3QgYXNrKS4KKyAgICAgICAgY29uc3QgbW9k
cyA9IHRoaXMucmVhZFdvcmQxKCk7CisgICAgICAgIGlmIChtb2RzKSB7CisgICAgICAgICAgY29u
c3QgdmFsaWRGbGFncyA9IC9eW2dtc2l5dV0qJC87CisgICAgICAgICAgaWYgKCF2YWxpZEZsYWdz
LnRlc3QobW9kcykpIHRoaXMucmFpc2Uoc3RhcnQsICJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lv
biBmbGFnIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHQu
cmVnZXhwLCB7CisgICAgICAgICAgcGF0dGVybjogY29udGVudCwKKyAgICAgICAgICBmbGFnczog
bW9kcworICAgICAgICB9KTsKKyAgICAgIH0KKworICAgICAgLy8gUmVhZCBhbiBpbnRlZ2VyIGlu
IHRoZSBnaXZlbiByYWRpeC4gUmV0dXJuIG51bGwgaWYgemVybyBkaWdpdHMKKyAgICAgIC8vIHdl
cmUgcmVhZCwgdGhlIGludGVnZXIgdmFsdWUgb3RoZXJ3aXNlLiBXaGVuIGBsZW5gIGlzIGdpdmVu
LCB0aGlzCisgICAgICAvLyB3aWxsIHJldHVybiBgbnVsbGAgdW5sZXNzIHRoZSBpbnRlZ2VyIGhh
cyBleGFjdGx5IGBsZW5gIGRpZ2l0cy4KKworICAgICAgcmVhZEludChyYWRpeCwgbGVuKSB7Cisg
ICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5zdGF0ZS5wb3M7CisgICAgICAgIGxldCB0b3RhbCA9
IDA7CisKKyAgICAgICAgZm9yIChsZXQgaSA9IDAsIGUgPSBsZW4gPT0gbnVsbCA/IEluZmluaXR5
IDogbGVuOyBpIDwgZTsgKytpKSB7CisgICAgICAgICAgY29uc3QgY29kZSA9IHRoaXMuaW5wdXQu
Y2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcyk7CisgICAgICAgICAgbGV0IHZhbDsKKyAgICAgICAg
ICBpZiAoY29kZSA+PSA5NykgeworICAgICAgICAgICAgdmFsID0gY29kZSAtIDk3ICsgMTA7IC8v
IGEKKyAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPj0gNjUpIHsKKyAgICAgICAgICAgIHZhbCA9
IGNvZGUgLSA2NSArIDEwOyAvLyBBCisgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID49IDQ4ICYm
IGNvZGUgPD0gNTcpIHsKKyAgICAgICAgICAgIHZhbCA9IGNvZGUgLSA0ODsgLy8gMC05CisgICAg
ICAgICAgfSBlbHNlICB7CisgICAgICAgICAgICB2YWwgPSBJbmZpbml0eTsKKyAgICAgICAgICB9
CisgICAgICAgICAgaWYgKHZhbCA+PSByYWRpeCkgYnJlYWs7CisgICAgICAgICAgKyt0aGlzLnN0
YXRlLnBvczsKKyAgICAgICAgICB0b3RhbCA9IHRvdGFsICogcmFkaXggKyB2YWw7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHRoaXMuc3RhdGUucG9zID09PSBzdGFydCB8fCBsZW4gIT0gbnVsbCAm
JiB0aGlzLnN0YXRlLnBvcyAtIHN0YXJ0ICE9PSBsZW4pIHJldHVybiBudWxsOworCisgICAgICAg
IHJldHVybiB0b3RhbDsKKyAgICAgIH0KKworICAgICAgcmVhZFJhZGl4TnVtYmVyKHJhZGl4KSB7
CisgICAgICAgIHRoaXMuc3RhdGUucG9zICs9IDI7IC8vIDB4CisgICAgICAgIGNvbnN0IHZhbCA9
IHRoaXMucmVhZEludChyYWRpeCk7CisgICAgICAgIGlmICh2YWwgPT0gbnVsbCkgdGhpcy5yYWlz
ZSh0aGlzLnN0YXRlLnN0YXJ0ICsgMiwgIkV4cGVjdGVkIG51bWJlciBpbiByYWRpeCAiICsgcmFk
aXgpOworICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQodGhpcy5mdWxsQ2hhckNvZGVBdFBv
cygpKSkgdGhpcy5yYWlzZSh0aGlzLnN0YXRlLnBvcywgIklkZW50aWZpZXIgZGlyZWN0bHkgYWZ0
ZXIgbnVtYmVyIik7CisgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0Lm51bSwgdmFs
KTsKKyAgICAgIH0KKworICAgICAgLy8gUmVhZCBhbiBpbnRlZ2VyLCBvY3RhbCBpbnRlZ2VyLCBv
ciBmbG9hdGluZy1wb2ludCBudW1iZXIuCisKKyAgICAgIHJlYWROdW1iZXIoc3RhcnRzV2l0aERv
dCkgeworICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuc3RhdGUucG9zOworICAgICAgICBjb25z
dCBvY3RhbCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcykgPT09IDQ4Owor
ICAgICAgICBsZXQgaXNGbG9hdCA9IGZhbHNlOworCisgICAgICAgIGlmICghc3RhcnRzV2l0aERv
dCAmJiB0aGlzLnJlYWRJbnQoMTApID09PSBudWxsKSB0aGlzLnJhaXNlKHN0YXJ0LCAiSW52YWxp
ZCBudW1iZXIiKTsKKyAgICAgICAgbGV0IG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhp
cy5zdGF0ZS5wb3MpOworICAgICAgICBpZiAobmV4dCA9PT0gNDYpIHsgLy8gJy4nCisgICAgICAg
ICAgKyt0aGlzLnN0YXRlLnBvczsKKyAgICAgICAgICB0aGlzLnJlYWRJbnQoMTApOworICAgICAg
ICAgIGlzRmxvYXQgPSB0cnVlOworICAgICAgICAgIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2Rl
QXQodGhpcy5zdGF0ZS5wb3MpOworICAgICAgICB9CisgICAgICAgIGlmIChuZXh0ID09PSA2OSB8
fCBuZXh0ID09PSAxMDEpIHsgLy8gJ2VFJworICAgICAgICAgIG5leHQgPSB0aGlzLmlucHV0LmNo
YXJDb2RlQXQoKyt0aGlzLnN0YXRlLnBvcyk7CisgICAgICAgICAgaWYgKG5leHQgPT09IDQzIHx8
IG5leHQgPT09IDQ1KSArK3RoaXMuc3RhdGUucG9zOyAvLyAnKy0nCisgICAgICAgICAgaWYgKHRo
aXMucmVhZEludCgxMCkgPT09IG51bGwpIHRoaXMucmFpc2Uoc3RhcnQsICJJbnZhbGlkIG51bWJl
ciIpOworICAgICAgICAgIGlzRmxvYXQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChp
c0lkZW50aWZpZXJTdGFydCh0aGlzLmZ1bGxDaGFyQ29kZUF0UG9zKCkpKSB0aGlzLnJhaXNlKHRo
aXMuc3RhdGUucG9zLCAiSWRlbnRpZmllciBkaXJlY3RseSBhZnRlciBudW1iZXIiKTsKKworICAg
ICAgICBjb25zdCBzdHIgPSB0aGlzLmlucHV0LnNsaWNlKHN0YXJ0LCB0aGlzLnN0YXRlLnBvcyk7
CisgICAgICAgIGxldCB2YWw7CisgICAgICAgIGlmIChpc0Zsb2F0KSB7CisgICAgICAgICAgdmFs
ID0gcGFyc2VGbG9hdChzdHIpOworICAgICAgICB9IGVsc2UgaWYgKCFvY3RhbCB8fCBzdHIubGVu
Z3RoID09PSAxKSB7CisgICAgICAgICAgdmFsID0gcGFyc2VJbnQoc3RyLCAxMCk7CisgICAgICAg
IH0gZWxzZSBpZiAoL1s4OV0vLnRlc3Qoc3RyKSB8fCB0aGlzLnN0YXRlLnN0cmljdCkgeworICAg
ICAgICAgIHRoaXMucmFpc2Uoc3RhcnQsICJJbnZhbGlkIG51bWJlciIpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgIHZhbCA9IHBhcnNlSW50KHN0ciwgOCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHQubnVtLCB2YWwpOworICAgICAgfQorCisgICAg
ICAvLyBSZWFkIGEgc3RyaW5nIHZhbHVlLCBpbnRlcnByZXRpbmcgYmFja3NsYXNoLWVzY2FwZXMu
CisKKyAgICAgIHJlYWRDb2RlUG9pbnQodGhyb3dPbkludmFsaWQpIHsKKyAgICAgICAgY29uc3Qg
Y2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MpOworICAgICAgICBsZXQg
Y29kZTsKKworICAgICAgICBpZiAoY2ggPT09IDEyMykgeyAvLyAneycKKyAgICAgICAgICBjb25z
dCBjb2RlUG9zID0gKyt0aGlzLnN0YXRlLnBvczsKKyAgICAgICAgICBjb2RlID0gdGhpcy5yZWFk
SGV4Q2hhcih0aGlzLmlucHV0LmluZGV4T2YoIn0iLCB0aGlzLnN0YXRlLnBvcykgLSB0aGlzLnN0
YXRlLnBvcywgdGhyb3dPbkludmFsaWQpOworICAgICAgICAgICsrdGhpcy5zdGF0ZS5wb3M7Cisg
ICAgICAgICAgaWYgKGNvZGUgPT09IG51bGwpIHsKKyAgICAgICAgICAgIC0tdGhpcy5zdGF0ZS5p
bnZhbGlkVGVtcGxhdGVFc2NhcGVQb3NpdGlvbjsgLy8gdG8gcG9pbnQgdG8gdGhlICdcJycgaW5z
dGVhZCBvZiB0aGUgJ3UnCisgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID4gMHgxMEZGRkYpIHsK
KyAgICAgICAgICAgIGlmICh0aHJvd09uSW52YWxpZCkgeworICAgICAgICAgICAgICB0aGlzLnJh
aXNlKGNvZGVQb3MsICJDb2RlIHBvaW50IG91dCBvZiBib3VuZHMiKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgIHRoaXMuc3RhdGUuaW52YWxpZFRlbXBsYXRlRXNjYXBlUG9z
aXRpb24gPSBjb2RlUG9zIC0gMjsKKyAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGNvZGUgPSB0
aGlzLnJlYWRIZXhDaGFyKDQsIHRocm93T25JbnZhbGlkKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gY29kZTsKKyAgICAgIH0KKworICAgICAgcmVhZFN0cmluZyhxdW90ZSkgeworICAgICAg
ICBsZXQgb3V0ID0gIiIsIGNodW5rU3RhcnQgPSArK3RoaXMuc3RhdGUucG9zOworICAgICAgICBm
b3IgKDs7KSB7CisgICAgICAgICAgaWYgKHRoaXMuc3RhdGUucG9zID49IHRoaXMuaW5wdXQubGVu
Z3RoKSB0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsICJVbnRlcm1pbmF0ZWQgc3RyaW5nIGNv
bnN0YW50Iik7CisgICAgICAgICAgY29uc3QgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhp
cy5zdGF0ZS5wb3MpOworICAgICAgICAgIGlmIChjaCA9PT0gcXVvdGUpIGJyZWFrOworICAgICAg
ICAgIGlmIChjaCA9PT0gOTIpIHsgLy8gJ1wnCisgICAgICAgICAgICBvdXQgKz0gdGhpcy5pbnB1
dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnN0YXRlLnBvcyk7CisgICAgICAgICAgICBvdXQgKz0g
dGhpcy5yZWFkRXNjYXBlZENoYXIoZmFsc2UpOworICAgICAgICAgICAgY2h1bmtTdGFydCA9IHRo
aXMuc3RhdGUucG9zOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaXNOZXdM
aW5lKGNoKSkgdGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0LCAiVW50ZXJtaW5hdGVkIHN0cmlu
ZyBjb25zdGFudCIpOworICAgICAgICAgICAgKyt0aGlzLnN0YXRlLnBvczsKKyAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgb3V0ICs9IHRoaXMuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwg
dGhpcy5zdGF0ZS5wb3MrKyk7CisgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LnN0
cmluZywgb3V0KTsKKyAgICAgIH0KKworICAgICAgLy8gUmVhZHMgdGVtcGxhdGUgc3RyaW5nIHRv
a2Vucy4KKworICAgICAgcmVhZFRtcGxUb2tlbigpIHsKKyAgICAgICAgbGV0IG91dCA9ICIiLCBj
aHVua1N0YXJ0ID0gdGhpcy5zdGF0ZS5wb3MsIGNvbnRhaW5zSW52YWxpZCA9IGZhbHNlOworICAg
ICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgaWYgKHRoaXMuc3RhdGUucG9zID49IHRoaXMuaW5w
dXQubGVuZ3RoKSB0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsICJVbnRlcm1pbmF0ZWQgdGVt
cGxhdGUiKTsKKyAgICAgICAgICBjb25zdCBjaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlz
LnN0YXRlLnBvcyk7CisgICAgICAgICAgaWYgKGNoID09PSA5NiB8fCBjaCA9PT0gMzYgJiYgdGhp
cy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zICsgMSkgPT09IDEyMykgeyAvLyAnYCcs
ICckeycKKyAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnBvcyA9PT0gdGhpcy5zdGF0ZS5zdGFy
dCAmJiB0aGlzLm1hdGNoKHR0LnRlbXBsYXRlKSkgeworICAgICAgICAgICAgICBpZiAoY2ggPT09
IDM2KSB7CisgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wb3MgKz0gMjsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0dC5kb2xsYXJCcmFjZUwpOworICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICsrdGhpcy5zdGF0ZS5wb3M7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHQuYmFja1F1b3RlKTsKKyAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0ICs9IHRoaXMuaW5wdXQuc2xp
Y2UoY2h1bmtTdGFydCwgdGhpcy5zdGF0ZS5wb3MpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZmluaXNoVG9rZW4odHQudGVtcGxhdGUsIGNvbnRhaW5zSW52YWxpZCA/IG51bGwgOiBvdXQpOwor
ICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoY2ggPT09IDkyKSB7IC8vICdcJworICAgICAgICAg
ICAgb3V0ICs9IHRoaXMuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwgdGhpcy5zdGF0ZS5wb3MpOwor
ICAgICAgICAgICAgY29uc3QgZXNjYXBlZCA9IHRoaXMucmVhZEVzY2FwZWRDaGFyKHRydWUpOwor
ICAgICAgICAgICAgaWYgKGVzY2FwZWQgPT09IG51bGwpIHsKKyAgICAgICAgICAgICAgY29udGFp
bnNJbnZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIG91
dCArPSBlc2NhcGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2h1bmtTdGFydCA9IHRo
aXMuc3RhdGUucG9zOworICAgICAgICAgIH0gZWxzZSBpZiAoaXNOZXdMaW5lKGNoKSkgeworICAg
ICAgICAgICAgb3V0ICs9IHRoaXMuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwgdGhpcy5zdGF0ZS5w
b3MpOworICAgICAgICAgICAgKyt0aGlzLnN0YXRlLnBvczsKKyAgICAgICAgICAgIHN3aXRjaCAo
Y2gpIHsKKyAgICAgICAgICAgICAgY2FzZSAxMzoKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5p
bnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zKSA9PT0gMTApICsrdGhpcy5zdGF0ZS5wb3M7
CisgICAgICAgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICAgICAgb3V0ICs9ICJcbiI7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKyt0aGlzLnN0YXRlLmN1ckxpbmU7Cisg
ICAgICAgICAgICB0aGlzLnN0YXRlLmxpbmVTdGFydCA9IHRoaXMuc3RhdGUucG9zOworICAgICAg
ICAgICAgY2h1bmtTdGFydCA9IHRoaXMuc3RhdGUucG9zOworICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICArK3RoaXMuc3RhdGUucG9zOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgfQorCisgICAgICAvLyBVc2VkIHRvIHJlYWQgZXNjYXBlZCBjaGFyYWN0ZXJzCisKKyAgICAg
IHJlYWRFc2NhcGVkQ2hhcihpblRlbXBsYXRlKSB7CisgICAgICAgIGNvbnN0IHRocm93T25JbnZh
bGlkID0gIWluVGVtcGxhdGU7CisgICAgICAgIGNvbnN0IGNoID0gdGhpcy5pbnB1dC5jaGFyQ29k
ZUF0KCsrdGhpcy5zdGF0ZS5wb3MpOworICAgICAgICArK3RoaXMuc3RhdGUucG9zOworICAgICAg
ICBzd2l0Y2ggKGNoKSB7CisgICAgICAgICAgY2FzZSAxMTA6IHJldHVybiAiXG4iOyAvLyAnbicg
LT4gJ1xuJworICAgICAgICAgIGNhc2UgMTE0OiByZXR1cm4gIlxyIjsgLy8gJ3InIC0+ICdccicK
KyAgICAgICAgICBjYXNlIDEyMDogeyAvLyAneCcKKyAgICAgICAgICAgIGNvbnN0IGNvZGUgPSB0
aGlzLnJlYWRIZXhDaGFyKDIsIHRocm93T25JbnZhbGlkKTsKKyAgICAgICAgICAgIHJldHVybiBj
b2RlID09PSBudWxsID8gbnVsbCA6IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7CisgICAgICAg
ICAgfQorICAgICAgICAgIGNhc2UgMTE3OiB7IC8vICd1JworICAgICAgICAgICAgY29uc3QgY29k
ZSA9IHRoaXMucmVhZENvZGVQb2ludCh0aHJvd09uSW52YWxpZCk7CisgICAgICAgICAgICByZXR1
cm4gY29kZSA9PT0gbnVsbCA/IG51bGwgOiBjb2RlUG9pbnRUb1N0cmluZyhjb2RlKTsKKyAgICAg
ICAgICB9CisgICAgICAgICAgY2FzZSAxMTY6IHJldHVybiAiXHQiOyAvLyAndCcgLT4gJ1x0Jwor
ICAgICAgICAgIGNhc2UgOTg6IHJldHVybiAiXGIiOyAvLyAnYicgLT4gJ1xiJworICAgICAgICAg
IGNhc2UgMTE4OiByZXR1cm4gIlx1MDAwYiI7IC8vICd2JyAtPiAnXHUwMDBiJworICAgICAgICAg
IGNhc2UgMTAyOiByZXR1cm4gIlxmIjsgLy8gJ2YnIC0+ICdcZicKKyAgICAgICAgICBjYXNlIDEz
OiBpZiAodGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zKSA9PT0gMTApICsrdGhp
cy5zdGF0ZS5wb3M7IC8vICdcclxuJworICAgICAgICAgIGNhc2UgMTA6IC8vICcgXG4nCisgICAg
ICAgICAgICB0aGlzLnN0YXRlLmxpbmVTdGFydCA9IHRoaXMuc3RhdGUucG9zOworICAgICAgICAg
ICAgKyt0aGlzLnN0YXRlLmN1ckxpbmU7CisgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmIChjaCA+PSA0OCAmJiBjaCA8PSA1NSkgeworICAg
ICAgICAgICAgICBjb25zdCBjb2RlUG9zID0gdGhpcy5zdGF0ZS5wb3MgLSAxOworICAgICAgICAg
ICAgICBsZXQgb2N0YWxTdHIgPSB0aGlzLmlucHV0LnN1YnN0cih0aGlzLnN0YXRlLnBvcyAtIDEs
IDMpLm1hdGNoKC9eWzAtN10rLylbMF07CisgICAgICAgICAgICAgIGxldCBvY3RhbCA9IHBhcnNl
SW50KG9jdGFsU3RyLCA4KTsKKyAgICAgICAgICAgICAgaWYgKG9jdGFsID4gMjU1KSB7CisgICAg
ICAgICAgICAgICAgb2N0YWxTdHIgPSBvY3RhbFN0ci5zbGljZSgwLCAtMSk7CisgICAgICAgICAg
ICAgICAgb2N0YWwgPSBwYXJzZUludChvY3RhbFN0ciwgOCk7CisgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgaWYgKG9jdGFsID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChpblRlbXBs
YXRlKSB7CisgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmludmFsaWRUZW1wbGF0ZUVzY2Fw
ZVBvc2l0aW9uID0gY29kZVBvczsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5zdHJpY3QpIHsKKyAgICAgICAgICAg
ICAgICAgIHRoaXMucmFpc2UoY29kZVBvcywgIk9jdGFsIGxpdGVyYWwgaW4gc3RyaWN0IG1vZGUi
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlLmNvbnRhaW5zT2N0YWwp
IHsKKyAgICAgICAgICAgICAgICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgYXJlIG9ubHkgdXNlZCB0
byB0aHJvdyBhbiBlcnJvciBmb3IgYW4gb2N0YWwgd2hpY2ggb2NjdXJzCisgICAgICAgICAgICAg
ICAgICAvLyBpbiBhIGRpcmVjdGl2ZSB3aGljaCBvY2N1cnMgcHJpb3IgdG8gYSAidXNlIHN0cmlj
dCIgZGlyZWN0aXZlLgorICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5jb250YWluc09jdGFs
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUub2N0YWxQb3NpdGlvbiA9IGNv
ZGVQb3M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
IHRoaXMuc3RhdGUucG9zICs9IG9jdGFsU3RyLmxlbmd0aCAtIDE7CisgICAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG9jdGFsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTsKKyAgICAgICAgfQorICAgICAgfQor
CisgICAgICAvLyBVc2VkIHRvIHJlYWQgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZXMgKCdceCcs
ICdcdScpLgorCisgICAgICByZWFkSGV4Q2hhcihsZW4sIHRocm93T25JbnZhbGlkKSB7CisgICAg
ICAgIGNvbnN0IGNvZGVQb3MgPSB0aGlzLnN0YXRlLnBvczsKKyAgICAgICAgY29uc3QgbiA9IHRo
aXMucmVhZEludCgxNiwgbGVuKTsKKyAgICAgICAgaWYgKG4gPT09IG51bGwpIHsKKyAgICAgICAg
ICBpZiAodGhyb3dPbkludmFsaWQpIHsKKyAgICAgICAgICAgIHRoaXMucmFpc2UoY29kZVBvcywg
IkJhZCBjaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlIik7CisgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHRoaXMuc3RhdGUucG9zID0gY29kZVBvcyAtIDE7CisgICAgICAgICAgICB0aGlz
LnN0YXRlLmludmFsaWRUZW1wbGF0ZUVzY2FwZVBvc2l0aW9uID0gY29kZVBvcyAtIDE7CisgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBuOworICAgICAgfQorCisgICAgICAv
LyBSZWFkIGFuIGlkZW50aWZpZXIsIGFuZCByZXR1cm4gaXQgYXMgYSBzdHJpbmcuIFNldHMgYHRo
aXMuc3RhdGUuY29udGFpbnNFc2NgCisgICAgICAvLyB0byB3aGV0aGVyIHRoZSB3b3JkIGNvbnRh
aW5lZCBhICdcdScgZXNjYXBlLgorICAgICAgLy8KKyAgICAgIC8vIEluY3JlbWVudGFsbHkgYWRk
cyBvbmx5IGVzY2FwZWQgY2hhcnMsIGFkZGluZyBvdGhlciBjaHVua3MgYXMtaXMKKyAgICAgIC8v
IGFzIGEgbWljcm8tb3B0aW1pemF0aW9uLgorCisgICAgICByZWFkV29yZDEoKSB7CisgICAgICAg
IHRoaXMuc3RhdGUuY29udGFpbnNFc2MgPSBmYWxzZTsKKyAgICAgICAgbGV0IHdvcmQgPSAiIiwg
Zmlyc3QgPSB0cnVlLCBjaHVua1N0YXJ0ID0gdGhpcy5zdGF0ZS5wb3M7CisgICAgICAgIHdoaWxl
ICh0aGlzLnN0YXRlLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoKSB7CisgICAgICAgICAgY29uc3Qg
Y2ggPSB0aGlzLmZ1bGxDaGFyQ29kZUF0UG9zKCk7CisgICAgICAgICAgaWYgKGlzSWRlbnRpZmll
ckNoYXIoY2gpKSB7CisgICAgICAgICAgICB0aGlzLnN0YXRlLnBvcyArPSBjaCA8PSAweGZmZmYg
PyAxIDogMjsKKyAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSA5MikgeyAvLyAiXCIKKyAgICAg
ICAgICAgIHRoaXMuc3RhdGUuY29udGFpbnNFc2MgPSB0cnVlOworCisgICAgICAgICAgICB3b3Jk
ICs9IHRoaXMuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwgdGhpcy5zdGF0ZS5wb3MpOworICAgICAg
ICAgICAgY29uc3QgZXNjU3RhcnQgPSB0aGlzLnN0YXRlLnBvczsKKworICAgICAgICAgICAgaWYg
KHRoaXMuaW5wdXQuY2hhckNvZGVBdCgrK3RoaXMuc3RhdGUucG9zKSAhPT0gMTE3KSB7IC8vICJ1
IgorICAgICAgICAgICAgICB0aGlzLnJhaXNlKHRoaXMuc3RhdGUucG9zLCAiRXhwZWN0aW5nIFVu
aWNvZGUgZXNjYXBlIHNlcXVlbmNlIFxcdVhYWFgiKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgKyt0aGlzLnN0YXRlLnBvczsKKyAgICAgICAgICAgIGNvbnN0IGVzYyA9IHRoaXMucmVh
ZENvZGVQb2ludCh0cnVlKTsKKyAgICAgICAgICAgIGlmICghKGZpcnN0ID8gaXNJZGVudGlmaWVy
U3RhcnQgOiBpc0lkZW50aWZpZXJDaGFyKShlc2MsIHRydWUpKSB7CisgICAgICAgICAgICAgIHRo
aXMucmFpc2UoZXNjU3RhcnQsICJJbnZhbGlkIFVuaWNvZGUgZXNjYXBlIik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHdvcmQgKz0gY29kZVBvaW50VG9TdHJpbmcoZXNjKTsKKyAgICAg
ICAgICAgIGNodW5rU3RhcnQgPSB0aGlzLnN0YXRlLnBvczsKKyAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIGZpcnN0ID0gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHdvcmQgKyB0aGlzLmlucHV0LnNsaWNlKGNodW5r
U3RhcnQsIHRoaXMuc3RhdGUucG9zKTsKKyAgICAgIH0KKworICAgICAgLy8gUmVhZCBhbiBpZGVu
dGlmaWVyIG9yIGtleXdvcmQgdG9rZW4uIFdpbGwgY2hlY2sgZm9yIHJlc2VydmVkCisgICAgICAv
LyB3b3JkcyB3aGVuIG5lY2Vzc2FyeS4KKworICAgICAgcmVhZFdvcmQoKSB7CisgICAgICAgIGNv
bnN0IHdvcmQgPSB0aGlzLnJlYWRXb3JkMSgpOworICAgICAgICBsZXQgdHlwZSA9IHR0Lm5hbWU7
CisgICAgICAgIGlmICghdGhpcy5zdGF0ZS5jb250YWluc0VzYyAmJiB0aGlzLmlzS2V5d29yZCh3
b3JkKSkgeworICAgICAgICAgIHR5cGUgPSBrZXl3b3JkVHlwZXNbd29yZF07CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZSwgd29yZCk7CisgICAgICB9CisK
KyAgICAgIGJyYWNlSXNCbG9jayhwcmV2VHlwZSkgeworICAgICAgICBpZiAocHJldlR5cGUgPT09
IHR0LmNvbG9uKSB7CisgICAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5jdXJDb250ZXh0KCk7
CisgICAgICAgICAgaWYgKHBhcmVudCA9PT0gY3QuYnJhY2VTdGF0ZW1lbnQgfHwgcGFyZW50ID09
PSBjdC5icmFjZUV4cHJlc3Npb24pIHsKKyAgICAgICAgICAgIHJldHVybiAhcGFyZW50LmlzRXhw
cjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocHJldlR5cGUgPT09IHR0
Ll9yZXR1cm4pIHsKKyAgICAgICAgICByZXR1cm4gbGluZUJyZWFrLnRlc3QodGhpcy5pbnB1dC5z
bGljZSh0aGlzLnN0YXRlLmxhc3RUb2tFbmQsIHRoaXMuc3RhdGUuc3RhcnQpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChwcmV2VHlwZSA9PT0gdHQuX2Vsc2UgfHwgcHJldlR5cGUgPT09IHR0
LnNlbWkgfHwgcHJldlR5cGUgPT09IHR0LmVvZiB8fCBwcmV2VHlwZSA9PT0gdHQucGFyZW5SKSB7
CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAocHJldlR5
cGUgPT09IHR0LmJyYWNlTCkgeworICAgICAgICAgIHJldHVybiB0aGlzLmN1ckNvbnRleHQoKSA9
PT0gY3QuYnJhY2VTdGF0ZW1lbnQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gIXRoaXMu
c3RhdGUuZXhwckFsbG93ZWQ7CisgICAgICB9CisKKyAgICAgIHVwZGF0ZUNvbnRleHQocHJldlR5
cGUpIHsKKyAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMuc3RhdGUudHlwZTsKKyAgICAgICAgbGV0
IHVwZGF0ZTsKKworICAgICAgICBpZiAodHlwZS5rZXl3b3JkICYmIHByZXZUeXBlID09PSB0dC5k
b3QpIHsKKyAgICAgICAgICB0aGlzLnN0YXRlLmV4cHJBbGxvd2VkID0gZmFsc2U7CisgICAgICAg
IH0gZWxzZSBpZiAodXBkYXRlID0gdHlwZS51cGRhdGVDb250ZXh0KSB7CisgICAgICAgICAgdXBk
YXRlLmNhbGwodGhpcywgcHJldlR5cGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRo
aXMuc3RhdGUuZXhwckFsbG93ZWQgPSB0eXBlLmJlZm9yZUV4cHI7CisgICAgICAgIH0KKyAgICAg
IH0KKyAgICB9CisgICAgCisgICAgdG9rZW5pemVySW5kZXhKUyA9IFRva2VuaXplcjsKKyAgICB0
b2tlbml6ZXJJbmRleEpTLlRva2VuID0gVG9rZW47Cit9CisKKworLy8gb3B0aW9ucy5qcworY29u
c3Qgb3B0aW9uc0pTID0ge307Cit7CisgICAgLy8gQSBzZWNvbmQgb3B0aW9uYWwgYXJndW1lbnQg
Y2FuIGJlIGdpdmVuIHRvIGZ1cnRoZXIgY29uZmlndXJlCisgICAgLy8gdGhlIHBhcnNlciBwcm9j
ZXNzLiBUaGVzZSBvcHRpb25zIGFyZSByZWNvZ25pemVkOgorCisgICAgY29uc3QgZGVmYXVsdE9w
dGlvbnMgPSB7CisgICAgICAvLyBTb3VyY2UgdHlwZSAoInNjcmlwdCIgb3IgIm1vZHVsZSIpIGZv
ciBkaWZmZXJlbnQgc2VtYW50aWNzCisgICAgICBzb3VyY2VUeXBlOiAic2NyaXB0IiwKKyAgICAg
IC8vIFNvdXJjZSBmaWxlbmFtZS4KKyAgICAgIHNvdXJjZUZpbGVuYW1lOiB1bmRlZmluZWQsCisg
ICAgICAvLyBMaW5lIGZyb20gd2hpY2ggdG8gc3RhcnQgY291bnRpbmcgc291cmNlLiBVc2VmdWwg
Zm9yCisgICAgICAvLyBpbnRlZ3JhdGlvbiB3aXRoIG90aGVyIHRvb2xzLgorICAgICAgc3RhcnRM
aW5lOiAxLAorICAgICAgLy8gV2hlbiBlbmFibGVkLCBhIHJldHVybiBhdCB0aGUgdG9wIGxldmVs
IGlzIG5vdCBjb25zaWRlcmVkIGFuCisgICAgICAvLyBlcnJvci4KKyAgICAgIGFsbG93UmV0dXJu
T3V0c2lkZUZ1bmN0aW9uOiBmYWxzZSwKKyAgICAgIC8vIFdoZW4gZW5hYmxlZCwgaW1wb3J0L2V4
cG9ydCBzdGF0ZW1lbnRzIGFyZSBub3QgY29uc3RyYWluZWQgdG8KKyAgICAgIC8vIGFwcGVhcmlu
ZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtLgorICAgICAgYWxsb3dJbXBvcnRFeHBvcnRFdmVy
eXdoZXJlOiBmYWxzZSwKKyAgICAgIC8vIFRPRE8KKyAgICAgIGFsbG93U3VwZXJPdXRzaWRlTWV0
aG9kOiBmYWxzZSwKKyAgICAgIC8vIEFuIGFycmF5IG9mIHBsdWdpbnMgdG8gZW5hYmxlCisgICAg
ICBwbHVnaW5zOiBbXSwKKyAgICAgIC8vIFRPRE8KKyAgICAgIHN0cmljdE1vZGU6IG51bGwsCisg
ICAgICAvLyBOb2RlcyBoYXZlIHRoZWlyIHN0YXJ0IGFuZCBlbmQgY2hhcmFjdGVycyBvZmZzZXRz
IHJlY29yZGVkIGluCisgICAgICAvLyBgc3RhcnRgIGFuZCBgZW5kYCBwcm9wZXJ0aWVzIChkaXJl
Y3RseSBvbiB0aGUgbm9kZSwgcmF0aGVyIHRoYW4KKyAgICAgIC8vIHRoZSBgbG9jYCBvYmplY3Qs
IHdoaWNoIGhvbGRzIGxpbmUvY29sdW1uIGRhdGEuIFRvIGFsc28gYWRkIGEKKyAgICAgIC8vIFtz
ZW1pLXN0YW5kYXJkaXplZF1bcmFuZ2VdIGByYW5nZWAgcHJvcGVydHkgaG9sZGluZyBhIGBbc3Rh
cnQsCisgICAgICAvLyBlbmRdYCBhcnJheSB3aXRoIHRoZSBzYW1lIG51bWJlcnMsIHNldCB0aGUg
YHJhbmdlc2Agb3B0aW9uIHRvCisgICAgICAvLyBgdHJ1ZWAuCisgICAgICAvLworICAgICAgLy8g
W3JhbmdlXTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1
Njc4CisgICAgICByYW5nZXM6IGZhbHNlLAorICAgIH07CisgICAgb3B0aW9uc0pTLmRlZmF1bHRP
cHRpb25zID0gZGVmYXVsdE9wdGlvbnM7CisKKyAgICAvLyBJbnRlcnByZXQgYW5kIGRlZmF1bHQg
YW4gb3B0aW9ucyBvYmplY3QKKworICAgIGZ1bmN0aW9uIGdldE9wdGlvbnMob3B0cykgeworICAg
ICAgY29uc3Qgb3B0aW9ucyA9IHt9OworICAgICAgZm9yIChjb25zdCBrZXkgaW4gZGVmYXVsdE9w
dGlvbnMpIHsKKyAgICAgICAgb3B0aW9uc1trZXldID0gb3B0cyAmJiBrZXkgaW4gb3B0cyA/IG9w
dHNba2V5XSA6IGRlZmF1bHRPcHRpb25zW2tleV07CisgICAgICB9CisgICAgICByZXR1cm4gb3B0
aW9uczsKKyAgICB9CisgICAgb3B0aW9uc0pTLmdldE9wdGlvbnMgPSBnZXRPcHRpb25zOworfQor
CisKKy8vIHBhcnNlci9pbmRleC5qcworbGV0IHBhcnNlckluZGV4SlMgPSB7fTsKK3sKKyAgICBj
b25zdCB7IHJlc2VydmVkV29yZHMgfSA9IHV0aWxJZGVudGlmaWVySlM7CisgICAgY29uc3QgeyBn
ZXRPcHRpb25zIH0gPSBvcHRpb25zSlM7CisgICAgY29uc3QgVG9rZW5pemVyID0gdG9rZW5pemVy
SW5kZXhKUzsKKworICAgIGNvbnN0IHBsdWdpbnMgPSB7fTsKKworICAgIGNsYXNzIFBhcnNlciBl
eHRlbmRzIFRva2VuaXplciB7CisgICAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBpbnB1dCkgewor
ICAgICAgICBvcHRpb25zID0gZ2V0T3B0aW9ucyhvcHRpb25zKTsKKyAgICAgICAgc3VwZXIob3B0
aW9ucywgaW5wdXQpOworCisgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CisgICAgICAg
IHRoaXMuaW5Nb2R1bGUgPSB0aGlzLm9wdGlvbnMuc291cmNlVHlwZSA9PT0gIm1vZHVsZSI7Cisg
ICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDsKKyAgICAgICAgdGhpcy5wbHVnaW5zID0gdGhpcy5s
b2FkUGx1Z2lucyh0aGlzLm9wdGlvbnMucGx1Z2lucyk7CisgICAgICAgIHRoaXMuZmlsZW5hbWUg
PSBvcHRpb25zLnNvdXJjZUZpbGVuYW1lOworCisgICAgICAgIC8vIElmIGVuYWJsZWQsIHNraXAg
bGVhZGluZyBoYXNoYmFuZyBsaW5lLgorICAgICAgICBpZiAodGhpcy5zdGF0ZS5wb3MgPT09IDAg
JiYgdGhpcy5pbnB1dFswXSA9PT0gIiMiICYmIHRoaXMuaW5wdXRbMV0gPT09ICIhIikgeworICAg
ICAgICAgIHRoaXMuc2tpcExpbmVDb21tZW50KDIpOworICAgICAgICB9CisgICAgICB9CisKKyAg
ICAgIGlzUmVzZXJ2ZWRXb3JkKHdvcmQpIHsKKyAgICAgICAgaWYgKHdvcmQgPT09ICJhd2FpdCIp
IHsKKyAgICAgICAgICByZXR1cm4gdGhpcy5pbk1vZHVsZTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICByZXR1cm4gcmVzZXJ2ZWRXb3Jkc1s2XSh3b3JkKTsKKyAgICAgICAgfQorICAgICAg
fQorCisgICAgICBoYXNQbHVnaW4obmFtZSkgeworICAgICAgICByZXR1cm4gISF0aGlzLnBsdWdp
bnNbbmFtZV07CisgICAgICB9CisKKyAgICAgIGV4dGVuZChuYW1lLCBmKSB7CisgICAgICAgIHRo
aXNbbmFtZV0gPSBmKHRoaXNbbmFtZV0pOworICAgICAgfQorCisgICAgICBsb2FkUGx1Z2lucyhw
bHVnaW5MaXN0KSAgeworICAgICAgICBjb25zdCBwbHVnaW5NYXAgPSB7fTsKKworICAgICAgICBp
ZiAocGx1Z2luTGlzdC5pbmRleE9mKCJmbG93IikgPj0gMCkgeworICAgICAgICAgIC8vIGVuc3Vy
ZSBmbG93IHBsdWdpbiBsb2FkcyBsYXN0CisgICAgICAgICAgcGx1Z2luTGlzdCA9IHBsdWdpbkxp
c3QuZmlsdGVyKChwbHVnaW4pID0+IHBsdWdpbiAhPT0gImZsb3ciKTsKKyAgICAgICAgICBwbHVn
aW5MaXN0LnB1c2goImZsb3ciKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwbHVnaW5MaXN0
LmluZGV4T2YoImVzdHJlZSIpID49IDApIHsKKyAgICAgICAgICAvLyBlbnN1cmUgZXN0cmVlIHBs
dWdpbiBsb2FkcyBmaXJzdAorICAgICAgICAgIHBsdWdpbkxpc3QgPSBwbHVnaW5MaXN0LmZpbHRl
cigocGx1Z2luKSA9PiBwbHVnaW4gIT09ICJlc3RyZWUiKTsKKyAgICAgICAgICBwbHVnaW5MaXN0
LnVuc2hpZnQoImVzdHJlZSIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChjb25zdCBuYW1l
IG9mIHBsdWdpbkxpc3QpIHsKKyAgICAgICAgICBpZiAoIXBsdWdpbk1hcFtuYW1lXSkgeworICAg
ICAgICAgICAgcGx1Z2luTWFwW25hbWVdID0gdHJ1ZTsKKworICAgICAgICAgICAgY29uc3QgcGx1
Z2luID0gcGx1Z2luc1tuYW1lXTsKKyAgICAgICAgICAgIGlmIChwbHVnaW4pIHBsdWdpbih0aGlz
KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcGx1Z2luTWFwOwor
ICAgICAgfQorCisgICAgICBwYXJzZSgpIHsKKyAgICAgICAgY29uc3QgZmlsZSA9IHRoaXMuc3Rh
cnROb2RlKCk7CisgICAgICAgIGNvbnN0IHByb2dyYW0gPSB0aGlzLnN0YXJ0Tm9kZSgpOworICAg
ICAgICB0aGlzLm5leHRUb2tlbigpOworICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRvcExldmVs
KGZpbGUsIHByb2dyYW0pOworICAgICAgfQorICAgIH0KKworICAgIHBhcnNlckluZGV4SlMgPSBQ
YXJzZXI7CisgICAgcGFyc2VySW5kZXhKUy5wbHVnaW5zID0gcGx1Z2luczsKK30KKworLy8gcGFy
c2VyL2NvbW1lbnRzLmpzCitjb25zdCBwYXJzZXJDb21tZW50c0pTID0ge307Cit7CisgICAgLyog
ZXNsaW50IG1heC1sZW46IDAgKi8KKworICAgIC8qKgorICAgICAqIEJhc2VkIG9uIHRoZSBjb21t
ZW50IGF0dGFjaG1lbnQgYWxnb3JpdGhtIHVzZWQgaW4gZXNwcmVlIGFuZCBlc3RyYXZlcnNlLgor
ICAgICAqCisgICAgICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICAgICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAg
ICoKKyAgICAgKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgICogKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAg
ICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICAgICAqICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgKgorICAgICAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMgIkFTIElTIgorICAgICAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgICAgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQorICAgICAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09Q
WVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTlkKKyAgICAgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICAgICAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAgICAgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAgICAgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAgICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICAgICAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgICAgICovCisKKworICAgIHsKKyAgICAgICAgY29uc3QgUGFyc2VyID0gcGFy
c2VySW5kZXhKUzsKKworICAgICAgICBmdW5jdGlvbiBsYXN0KHN0YWNrKSB7CisgICAgICAgICAg
cmV0dXJuIHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdOworICAgICAgICB9CisKKyAgICAgICAgY29u
c3QgcHAgPSBQYXJzZXIucHJvdG90eXBlOworCisgICAgICAgIHBwLmFkZENvbW1lbnQgPSBmdW5j
dGlvbiAoY29tbWVudCkgeworICAgICAgICAgIGlmICh0aGlzLmZpbGVuYW1lKSBjb21tZW50Lmxv
Yy5maWxlbmFtZSA9IHRoaXMuZmlsZW5hbWU7CisgICAgICAgICAgdGhpcy5zdGF0ZS50cmFpbGlu
Z0NvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgICAgdGhpcy5zdGF0ZS5sZWFkaW5nQ29t
bWVudHMucHVzaChjb21tZW50KTsKKyAgICAgICAgfTsKKworICAgICAgICBwcC5wcm9jZXNzQ29t
bWVudCA9IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gIlBy
b2dyYW0iICYmIG5vZGUuYm9keS5sZW5ndGggPiAwKSByZXR1cm47CisKKyAgICAgICAgICBjb25z
dCBzdGFjayA9IHRoaXMuc3RhdGUuY29tbWVudFN0YWNrOworCisgICAgICAgICAgbGV0IGxhc3RD
aGlsZCwgdHJhaWxpbmdDb21tZW50cywgaSwgajsKKworICAgICAgICAgIGlmICh0aGlzLnN0YXRl
LnRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgLy8gSWYgdGhlIGZp
cnN0IGNvbW1lbnQgaW4gdHJhaWxpbmdDb21tZW50cyBjb21lcyBhZnRlciB0aGUKKyAgICAgICAg
ICAgIC8vIGN1cnJlbnQgbm9kZSwgdGhlbiB3ZSdyZSBnb29kIC0gYWxsIGNvbW1lbnRzIGluIHRo
ZSBhcnJheSB3aWxsCisgICAgICAgICAgICAvLyBjb21lIGFmdGVyIHRoZSBub2RlIGFuZCBzbyBp
dCdzIHNhZmUgdG8gYWRkIHRoZW0gYXMgb2ZmaWNpYWwKKyAgICAgICAgICAgIC8vIHRyYWlsaW5n
Q29tbWVudHMuCisgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS50cmFpbGluZ0NvbW1lbnRzWzBd
LnN0YXJ0ID49IG5vZGUuZW5kKSB7CisgICAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMgPSB0
aGlzLnN0YXRlLnRyYWlsaW5nQ29tbWVudHM7CisgICAgICAgICAgICAgIHRoaXMuc3RhdGUudHJh
aWxpbmdDb21tZW50cyA9IFtdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
Ly8gT3RoZXJ3aXNlLCBpZiB0aGUgZmlyc3QgY29tbWVudCBkb2Vzbid0IGNvbWUgYWZ0ZXIgdGhl
CisgICAgICAgICAgICAgIC8vIGN1cnJlbnQgbm9kZSwgdGhhdCBtZWFucyB3ZSBoYXZlIGEgbWl4
IG9mIGxlYWRpbmcgYW5kIHRyYWlsaW5nCisgICAgICAgICAgICAgIC8vIGNvbW1lbnRzIGluIHRo
ZSBhcnJheSBhbmQgdGhhdCBsZWFkaW5nQ29tbWVudHMgY29udGFpbnMgdGhlCisgICAgICAgICAg
ICAgIC8vIHNhbWUgaXRlbXMgYXMgdHJhaWxpbmdDb21tZW50cy4gUmVzZXQgdHJhaWxpbmdDb21t
ZW50cyB0bworICAgICAgICAgICAgICAvLyB6ZXJvIGl0ZW1zIGFuZCB3ZSdsbCBoYW5kbGUgdGhp
cyBieSBldmFsdWF0aW5nIGxlYWRpbmdDb21tZW50cworICAgICAgICAgICAgICAvLyBsYXRlci4K
KyAgICAgICAgICAgICAgdGhpcy5zdGF0ZS50cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA9IDA7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IGxhc3RJ
blN0YWNrID0gbGFzdChzdGFjayk7CisgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID4gMCAm
JiBsYXN0SW5TdGFjay50cmFpbGluZ0NvbW1lbnRzICYmIGxhc3RJblN0YWNrLnRyYWlsaW5nQ29t
bWVudHNbMF0uc3RhcnQgPj0gbm9kZS5lbmQpIHsKKyAgICAgICAgICAgICAgdHJhaWxpbmdDb21t
ZW50cyA9IGxhc3RJblN0YWNrLnRyYWlsaW5nQ29tbWVudHM7CisgICAgICAgICAgICAgIGxhc3RJ
blN0YWNrLnRyYWlsaW5nQ29tbWVudHMgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAg
IH0KKworICAgICAgICAgIC8vIEVhdGluZyB0aGUgc3RhY2suCisgICAgICAgICAgd2hpbGUgKHN0
YWNrLmxlbmd0aCA+IDAgJiYgbGFzdChzdGFjaykuc3RhcnQgPj0gbm9kZS5zdGFydCkgeworICAg
ICAgICAgICAgbGFzdENoaWxkID0gc3RhY2sucG9wKCk7CisgICAgICAgICAgfQorCisgICAgICAg
ICAgaWYgKGxhc3RDaGlsZCkgeworICAgICAgICAgICAgaWYgKGxhc3RDaGlsZC5sZWFkaW5nQ29t
bWVudHMpIHsKKyAgICAgICAgICAgICAgaWYgKGxhc3RDaGlsZCAhPT0gbm9kZSAmJiBsYXN0KGxh
c3RDaGlsZC5sZWFkaW5nQ29tbWVudHMpLmVuZCA8PSBub2RlLnN0YXJ0KSB7CisgICAgICAgICAg
ICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMgPSBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzOwor
ICAgICAgICAgICAgICAgIGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHMgPSBudWxsOworICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEEgbGVhZGluZyBjb21tZW50IGZv
ciBhbiBhbm9ueW1vdXMgY2xhc3MgaGFkIGJlZW4gc3RvbGVuIGJ5IGl0cyBmaXJzdCBDbGFzc01l
dGhvZCwKKyAgICAgICAgICAgICAgICAvLyBzbyB0aGlzIHRha2VzIGJhY2sgdGhlIGxlYWRpbmcg
Y29tbWVudC4KKyAgICAgICAgICAgICAgICAvLyBTZWUgYWxzbzogaHR0cHM6Ly9naXRodWIuY29t
L2VzbGludC9lc3ByZWUvaXNzdWVzLzE1OAorICAgICAgICAgICAgICAgIGZvciAoaSA9IGxhc3RD
aGlsZC5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIC0gMjsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAg
ICAgICAgICAgIGlmIChsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzW2ldLmVuZCA8PSBub2RlLnN0
YXJ0KSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gbGFzdENo
aWxkLmxlYWRpbmdDb21tZW50cy5zcGxpY2UoMCwgaSArIDEpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUu
bGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIGlmIChsYXN0KHRoaXMu
c3RhdGUubGVhZGluZ0NvbW1lbnRzKS5lbmQgPD0gbm9kZS5zdGFydCkgeworICAgICAgICAgICAg
ICBpZiAodGhpcy5zdGF0ZS5jb21tZW50UHJldmlvdXNOb2RlKSB7CisgICAgICAgICAgICAgICAg
Zm9yIChqID0gMDsgaiA8IHRoaXMuc3RhdGUubGVhZGluZ0NvbW1lbnRzLmxlbmd0aDsgaisrKSB7
CisgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5sZWFkaW5nQ29tbWVudHNbal0uZW5k
IDwgdGhpcy5zdGF0ZS5jb21tZW50UHJldmlvdXNOb2RlLmVuZCkgeworICAgICAgICAgICAgICAg
ICAgICB0aGlzLnN0YXRlLmxlYWRpbmdDb21tZW50cy5zcGxpY2UoaiwgMSk7CisgICAgICAgICAg
ICAgICAgICAgIGotLTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUubGVhZGluZ0NvbW1l
bnRzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cyA9
IHRoaXMuc3RhdGUubGVhZGluZ0NvbW1lbnRzOworICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUu
bGVhZGluZ0NvbW1lbnRzID0gW107CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNwcmVlL2lz
c3Vlcy8yCisgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgIC8vIEluIHNwZWNpYWwgY2Fz
ZXMsIHN1Y2ggYXMgcmV0dXJuICh3aXRob3V0IGEgdmFsdWUpIGFuZAorICAgICAgICAgICAgICAv
LyBkZWJ1Z2dlciwgYWxsIGNvbW1lbnRzIHdpbGwgZW5kIHVwIGFzIGxlYWRpbmdDb21tZW50cyBh
bmQKKyAgICAgICAgICAgICAgLy8gd2lsbCBvdGhlcndpc2UgYmUgZWxpbWluYXRlZC4gVGhpcyBz
dGVwIHJ1bnMgd2hlbiB0aGUKKyAgICAgICAgICAgICAgLy8gY29tbWVudFN0YWNrIGlzIGVtcHR5
IGFuZCB0aGVyZSBhcmUgY29tbWVudHMgbGVmdAorICAgICAgICAgICAgICAvLyBpbiBsZWFkaW5n
Q29tbWVudHMuCisgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgIC8vIFRoaXMgbG9vcCBm
aWd1cmVzIG91dCB0aGUgc3RvcHBpbmcgcG9pbnQgYmV0d2VlbiB0aGUgYWN0dWFsCisgICAgICAg
ICAgICAgIC8vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGNvbW1lbnRzIGJ5IGZpbmRpbmcgdGhlIGxv
Y2F0aW9uIG9mIHRoZQorICAgICAgICAgICAgICAvLyBmaXJzdCBjb21tZW50IHRoYXQgY29tZXMg
YWZ0ZXIgdGhlIGdpdmVuIG5vZGUuCisgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlz
LnN0YXRlLmxlYWRpbmdDb21tZW50cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlm
ICh0aGlzLnN0YXRlLmxlYWRpbmdDb21tZW50c1tpXS5lbmQgPiBub2RlLnN0YXJ0KSB7CisgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAvLyBTcGxpdCB0aGUgYXJyYXkgYmFzZWQgb24gdGhlIGxvY2F0aW9u
IG9mIHRoZSBmaXJzdCBjb21tZW50CisgICAgICAgICAgICAgIC8vIHRoYXQgY29tZXMgYWZ0ZXIg
dGhlIG5vZGUuIEtlZXAgaW4gbWluZCB0aGF0IHRoaXMgY291bGQKKyAgICAgICAgICAgICAgLy8g
cmVzdWx0IGluIGFuIGVtcHR5IGFycmF5LCBhbmQgaWYgc28sIHRoZSBhcnJheSBtdXN0IGJlCisg
ICAgICAgICAgICAgIC8vIGRlbGV0ZWQuCisgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1l
bnRzID0gdGhpcy5zdGF0ZS5sZWFkaW5nQ29tbWVudHMuc2xpY2UoMCwgaSk7CisgICAgICAgICAg
ICAgIGlmICgobm9kZS5sZWFkaW5nQ29tbWVudHMpLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAg
ICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gbnVsbDsKKyAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgIC8vIFNpbWlsYXJseSwgdHJhaWxpbmcgY29tbWVudHMgYXJlIGF0dGFjaGVk
IGxhdGVyLiBUaGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgLy8gbXVzdCBiZSByZXNldCB0byBu
dWxsIGlmIHRoZXJlIGFyZSBubyB0cmFpbGluZyBjb21tZW50cy4KKyAgICAgICAgICAgICAgdHJh
aWxpbmdDb21tZW50cyA9IHRoaXMuc3RhdGUubGVhZGluZ0NvbW1lbnRzLnNsaWNlKGkpOworICAg
ICAgICAgICAgICBpZiAodHJhaWxpbmdDb21tZW50cy5sZW5ndGggPT09IDApIHsKKyAgICAgICAg
ICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gbnVsbDsKKyAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIHRoaXMuc3RhdGUuY29tbWVudFByZXZp
b3VzTm9kZSA9IG5vZGU7CisKKyAgICAgICAgICBpZiAodHJhaWxpbmdDb21tZW50cykgeworICAg
ICAgICAgICAgaWYgKHRyYWlsaW5nQ29tbWVudHMubGVuZ3RoICYmIHRyYWlsaW5nQ29tbWVudHNb
MF0uc3RhcnQgPj0gbm9kZS5zdGFydCAmJiBsYXN0KHRyYWlsaW5nQ29tbWVudHMpLmVuZCA8PSBu
b2RlLmVuZCkgeworICAgICAgICAgICAgICBub2RlLmlubmVyQ29tbWVudHMgPSB0cmFpbGluZ0Nv
bW1lbnRzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgbm9kZS50cmFpbGlu
Z0NvbW1lbnRzID0gdHJhaWxpbmdDb21tZW50czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9
CisKKyAgICAgICAgICBzdGFjay5wdXNoKG5vZGUpOworICAgICAgICB9OworICAgIH0KKworfQor
CisvLyBwYXJzZXIvZXhwcmVzc2lvbi5qcworY29uc3QgcGFyc2VyRXhwcmVzc2lvbkpTID0ge307
Cit7CisgICAgLyogZXNsaW50IG1heC1sZW46IDAgKi8KKworICAgIC8vIEEgcmVjdXJzaXZlIGRl
c2NlbnQgcGFyc2VyIG9wZXJhdGVzIGJ5IGRlZmluaW5nIGZ1bmN0aW9ucyBmb3IgYWxsCisgICAg
Ly8gc3ludGFjdGljIGVsZW1lbnRzLCBhbmQgcmVjdXJzaXZlbHkgY2FsbGluZyB0aG9zZSwgZWFj
aCBmdW5jdGlvbgorICAgIC8vIGFkdmFuY2luZyB0aGUgaW5wdXQgc3RyZWFtIGFuZCByZXR1cm5p
bmcgYW4gQVNUIG5vZGUuIFByZWNlZGVuY2UKKyAgICAvLyBvZiBjb25zdHJ1Y3RzIChmb3IgZXhh
bXBsZSwgdGhlIGZhY3QgdGhhdCBgIXhbMV1gIG1lYW5zIGAhKHhbMV0pYAorICAgIC8vIGluc3Rl
YWQgb2YgYCgheClbMV1gIGlzIGhhbmRsZWQgYnkgdGhlIGZhY3QgdGhhdCB0aGUgcGFyc2VyCisg
ICAgLy8gZnVuY3Rpb24gdGhhdCBwYXJzZXMgdW5hcnkgcHJlZml4IG9wZXJhdG9ycyBpcyBjYWxs
ZWQgZmlyc3QsIGFuZAorICAgIC8vIGluIHR1cm4gY2FsbHMgdGhlIGZ1bmN0aW9uIHRoYXQgcGFy
c2VzIGBbXWAgc3Vic2NyaXB0cyDigJQgdGhhdAorICAgIC8vIHdheSwgaXQnbGwgcmVjZWl2ZSB0
aGUgbm9kZSBmb3IgYHhbMV1gIGFscmVhZHkgcGFyc2VkLCBhbmQgd3JhcHMKKyAgICAvLyAqdGhh
dCogaW4gdGhlIHVuYXJ5IG9wZXJhdG9yIG5vZGUuCisgICAgLy8KKyAgICAvLyBBY29ybiB1c2Vz
IGFuIFtvcGVyYXRvciBwcmVjZWRlbmNlIHBhcnNlcl1bb3BwXSB0byBoYW5kbGUgYmluYXJ5Cisg
ICAgLy8gb3BlcmF0b3IgcHJlY2VkZW5jZSwgYmVjYXVzZSBpdCBpcyBtdWNoIG1vcmUgY29tcGFj
dCB0aGFuIHVzaW5nCisgICAgLy8gdGhlIHRlY2huaXF1ZSBvdXRsaW5lZCBhYm92ZSwgd2hpY2gg
dXNlcyBkaWZmZXJlbnQsIG5lc3RpbmcKKyAgICAvLyBmdW5jdGlvbnMgdG8gc3BlY2lmeSBwcmVj
ZWRlbmNlLCBmb3IgYWxsIG9mIHRoZSB0ZW4gYmluYXJ5CisgICAgLy8gcHJlY2VkZW5jZSBsZXZl
bHMgdGhhdCBKYXZhU2NyaXB0IGRlZmluZXMuCisgICAgLy8KKyAgICAvLyBbb3BwXTogaHR0cDov
L2VuLndpa2lwZWRpYS5vcmcvd2lraS9PcGVyYXRvci1wcmVjZWRlbmNlX3BhcnNlcgorCisgICAg
Y29uc3QgeyB0eXBlczogdHQgfSA9IHRva2VuaXplclR5cGVzSlM7CisgICAgY29uc3QgUGFyc2Vy
ID0gcGFyc2VySW5kZXhKUzsKKyAgICBjb25zdCB7IHJlc2VydmVkV29yZHMgfSA9IHV0aWxJZGVu
dGlmaWVySlM7CisKKyAgICBjb25zdCBwcCA9IFBhcnNlci5wcm90b3R5cGU7CisKKyAgICAvLyBD
aGVjayBpZiBwcm9wZXJ0eSBuYW1lIGNsYXNoZXMgd2l0aCBhbHJlYWR5IGFkZGVkLgorICAgIC8v
IE9iamVjdC9jbGFzcyBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGFyZSBub3QgYWxsb3dlZCB0byBjbGFz
aCDigJQKKyAgICAvLyBlaXRoZXIgd2l0aCBlYWNoIG90aGVyIG9yIHdpdGggYW4gaW5pdCBwcm9w
ZXJ0eSDigJQgYW5kIGluCisgICAgLy8gc3RyaWN0IG1vZGUsIGluaXQgcHJvcGVydGllcyBhcmUg
YWxzbyBub3QgYWxsb3dlZCB0byBiZSByZXBlYXRlZC4KKworICAgIHBwLmNoZWNrUHJvcENsYXNo
ID0gZnVuY3Rpb24gKHByb3AsIHByb3BIYXNoKSB7CisgICAgICBpZiAocHJvcC5jb21wdXRlZCB8
fCBwcm9wLmtpbmQpIHJldHVybjsKKworICAgICAgY29uc3Qga2V5ID0gcHJvcC5rZXk7CisgICAg
ICAvLyBJdCBpcyBlaXRoZXIgYW4gSWRlbnRpZmllciBvciBhIFN0cmluZy9OdW1lcmljTGl0ZXJh
bAorICAgICAgY29uc3QgbmFtZSA9IGtleS50eXBlID09PSAiSWRlbnRpZmllciIgPyBrZXkubmFt
ZSA6IFN0cmluZyhrZXkudmFsdWUpOworCisgICAgICBpZiAobmFtZSA9PT0gIl9fcHJvdG9fXyIp
IHsKKyAgICAgICAgaWYgKHByb3BIYXNoLnByb3RvKSB0aGlzLnJhaXNlKGtleS5zdGFydCwgIlJl
ZGVmaW5pdGlvbiBvZiBfX3Byb3RvX18gcHJvcGVydHkiKTsKKyAgICAgICAgcHJvcEhhc2gucHJv
dG8gPSB0cnVlOworICAgICAgfQorICAgIH07CisKKyAgICAvLyBDb252ZW5pZW5jZSBtZXRob2Qg
dG8gcGFyc2UgYW4gRXhwcmVzc2lvbiBvbmx5CisgICAgcHAuZ2V0RXhwcmVzc2lvbiA9IGZ1bmN0
aW9uKCkgeworICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgIGNvbnN0IGV4cHIgPSB0aGlz
LnBhcnNlRXhwcmVzc2lvbigpOworICAgICAgaWYgKCF0aGlzLm1hdGNoKHR0LmVvZikpIHsKKyAg
ICAgICAgdGhpcy51bmV4cGVjdGVkKCk7CisgICAgICB9CisgICAgICByZXR1cm4gZXhwcjsKKyAg
ICB9OworCisgICAgLy8gIyMjIEV4cHJlc3Npb24gcGFyc2luZworCisgICAgLy8gVGhlc2UgbmVz
dCwgZnJvbSB0aGUgbW9zdCBnZW5lcmFsIGV4cHJlc3Npb24gdHlwZSBhdCB0aGUgdG9wIHRvCisg
ICAgLy8gJ2F0b21pYycsIG5vbmRpdmlzaWJsZSBleHByZXNzaW9uIHR5cGVzIGF0IHRoZSBib3R0
b20uIE1vc3Qgb2YKKyAgICAvLyB0aGUgZnVuY3Rpb25zIHdpbGwgc2ltcGx5IGxldCB0aGUgZnVu
Y3Rpb24gKHMpIGJlbG93IHRoZW0gcGFyc2UsCisgICAgLy8gYW5kLCAqaWYqIHRoZSBzeW50YWN0
aWMgY29uc3RydWN0IHRoZXkgaGFuZGxlIGlzIHByZXNlbnQsIHdyYXAKKyAgICAvLyB0aGUgQVNU
IG5vZGUgdGhhdCB0aGUgaW5uZXIgcGFyc2VyIGdhdmUgdGhlbSBpbiBhbm90aGVyIG5vZGUuCisK
KyAgICAvLyBQYXJzZSBhIGZ1bGwgZXhwcmVzc2lvbi4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50cyBh
cmUgdXNlZCB0bworICAgIC8vIGZvcmJpZCB0aGUgYGluYCBvcGVyYXRvciAoaW4gZm9yIGxvb3Bz
IGluaXRpYWxpemF0aW9uIGV4cHJlc3Npb25zKQorICAgIC8vIGFuZCBwcm92aWRlIHJlZmVyZW5j
ZSBmb3Igc3RvcmluZyAnPScgb3BlcmF0b3IgaW5zaWRlIHNob3J0aGFuZAorICAgIC8vIHByb3Bl
cnR5IGFzc2lnbm1lbnQgaW4gY29udGV4dHMgd2hlcmUgYm90aCBvYmplY3QgZXhwcmVzc2lvbgor
ICAgIC8vIGFuZCBvYmplY3QgcGF0dGVybiBtaWdodCBhcHBlYXIgKHNvIGl0J3MgcG9zc2libGUg
dG8gcmFpc2UKKyAgICAvLyBkZWxheWVkIHN5bnRheCBlcnJvciBhdCBjb3JyZWN0IHBvc2l0aW9u
KS4KKworICAgIHBwLnBhcnNlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub0luLCByZWZTaG9ydGhh
bmREZWZhdWx0UG9zKSB7CisgICAgICBjb25zdCBzdGFydFBvcyA9IHRoaXMuc3RhdGUuc3RhcnQ7
CisgICAgICBjb25zdCBzdGFydExvYyA9IHRoaXMuc3RhdGUuc3RhcnRMb2M7CisgICAgICBjb25z
dCBleHByID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKG5vSW4sIHJlZlNob3J0aGFuZERlZmF1bHRQ
b3MpOworICAgICAgaWYgKHRoaXMubWF0Y2godHQuY29tbWEpKSB7CisgICAgICAgIGNvbnN0IG5v
ZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7CisgICAgICAgIG5vZGUu
ZXhwcmVzc2lvbnMgPSBbZXhwcl07CisgICAgICAgIHdoaWxlICh0aGlzLmVhdCh0dC5jb21tYSkp
IHsKKyAgICAgICAgICBub2RlLmV4cHJlc3Npb25zLnB1c2godGhpcy5wYXJzZU1heWJlQXNzaWdu
KG5vSW4sIHJlZlNob3J0aGFuZERlZmF1bHRQb3MpKTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
LnRvUmVmZXJlbmNlZExpc3Qobm9kZS5leHByZXNzaW9ucyk7CisgICAgICAgIHJldHVybiB0aGlz
LmZpbmlzaE5vZGUobm9kZSwgIlNlcXVlbmNlRXhwcmVzc2lvbiIpOworICAgICAgfQorICAgICAg
cmV0dXJuIGV4cHI7CisgICAgfTsKKworICAgIC8vIFBhcnNlIGFuIGFzc2lnbm1lbnQgZXhwcmVz
c2lvbi4gVGhpcyBpbmNsdWRlcyBhcHBsaWNhdGlvbnMgb2YKKyAgICAvLyBvcGVyYXRvcnMgbGlr
ZSBgKz1gLgorCisgICAgcHAucGFyc2VNYXliZUFzc2lnbiA9IGZ1bmN0aW9uIChub0luLCByZWZT
aG9ydGhhbmREZWZhdWx0UG9zLCBhZnRlckxlZnRQYXJzZSwgcmVmTmVlZHNBcnJvd1Bvcykgewor
ICAgICAgY29uc3Qgc3RhcnRQb3MgPSB0aGlzLnN0YXRlLnN0YXJ0OworICAgICAgY29uc3Qgc3Rh
cnRMb2MgPSB0aGlzLnN0YXRlLnN0YXJ0TG9jOworCisgICAgICBpZiAodGhpcy5tYXRjaCh0dC5f
eWllbGQpICYmIHRoaXMuc3RhdGUuaW5HZW5lcmF0b3IpIHsKKyAgICAgICAgbGV0IGxlZnQgPSB0
aGlzLnBhcnNlWWllbGQoKTsKKyAgICAgICAgaWYgKGFmdGVyTGVmdFBhcnNlKSBsZWZ0ID0gYWZ0
ZXJMZWZ0UGFyc2UuY2FsbCh0aGlzLCBsZWZ0LCBzdGFydFBvcywgc3RhcnRMb2MpOworICAgICAg
ICByZXR1cm4gbGVmdDsKKyAgICAgIH0KKworICAgICAgbGV0IGZhaWxPblNob3J0aGFuZEFzc2ln
bjsKKyAgICAgIGlmIChyZWZTaG9ydGhhbmREZWZhdWx0UG9zKSB7CisgICAgICAgIGZhaWxPblNo
b3J0aGFuZEFzc2lnbiA9IGZhbHNlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmVmU2hvcnRo
YW5kRGVmYXVsdFBvcyA9IHsgc3RhcnQ6IDAgfTsKKyAgICAgICAgZmFpbE9uU2hvcnRoYW5kQXNz
aWduID0gdHJ1ZTsKKyAgICAgIH0KKworICAgICAgaWYgKHRoaXMubWF0Y2godHQucGFyZW5MKSB8
fCB0aGlzLm1hdGNoKHR0Lm5hbWUpKSB7CisgICAgICAgIHRoaXMuc3RhdGUucG90ZW50aWFsQXJy
b3dBdCA9IHRoaXMuc3RhdGUuc3RhcnQ7CisgICAgICB9CisKKyAgICAgIGxldCBsZWZ0ID0gdGhp
cy5wYXJzZU1heWJlQ29uZGl0aW9uYWwobm9JbiwgcmVmU2hvcnRoYW5kRGVmYXVsdFBvcywgcmVm
TmVlZHNBcnJvd1Bvcyk7CisgICAgICBpZiAoYWZ0ZXJMZWZ0UGFyc2UpIGxlZnQgPSBhZnRlckxl
ZnRQYXJzZS5jYWxsKHRoaXMsIGxlZnQsIHN0YXJ0UG9zLCBzdGFydExvYyk7CisgICAgICBpZiAo
dGhpcy5zdGF0ZS50eXBlLmlzQXNzaWduKSB7CisgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0
YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7CisgICAgICAgIG5vZGUub3BlcmF0b3IgPSB0
aGlzLnN0YXRlLnZhbHVlOworICAgICAgICBub2RlLmxlZnQgPSB0aGlzLm1hdGNoKHR0LmVxKSA/
IHRoaXMudG9Bc3NpZ25hYmxlKGxlZnQsIHVuZGVmaW5lZCwgImFzc2lnbm1lbnQgZXhwcmVzc2lv
biIpIDogbGVmdDsKKyAgICAgICAgcmVmU2hvcnRoYW5kRGVmYXVsdFBvcy5zdGFydCA9IDA7IC8v
IHJlc2V0IGJlY2F1c2Ugc2hvcnRoYW5kIGRlZmF1bHQgd2FzIHVzZWQgY29ycmVjdGx5CisKKyAg
ICAgICAgdGhpcy5jaGVja0xWYWwobGVmdCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICJhc3NpZ25t
ZW50IGV4cHJlc3Npb24iKTsKKworICAgICAgICBpZiAobGVmdC5leHRyYSAmJiBsZWZ0LmV4dHJh
LnBhcmVudGhlc2l6ZWQpIHsKKyAgICAgICAgICBsZXQgZXJyb3JNc2c7CisgICAgICAgICAgaWYg
KGxlZnQudHlwZSA9PT0gIk9iamVjdFBhdHRlcm4iKSB7CisgICAgICAgICAgICBlcnJvck1zZyA9
ICJgKHthfSkgPSAwYCB1c2UgYCh7YX0gPSAwKWAiOworICAgICAgICAgIH0gZWxzZSBpZiAobGVm
dC50eXBlID09PSAiQXJyYXlQYXR0ZXJuIikgeworICAgICAgICAgICAgZXJyb3JNc2cgPSAiYChb
YV0pID0gMGAgdXNlIGAoW2FdID0gMClgIjsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKGVy
cm9yTXNnKSB7CisgICAgICAgICAgICB0aGlzLnJhaXNlKGxlZnQuc3RhcnQsIGBZb3UncmUgdHJ5
aW5nIHRvIGFzc2lnbiB0byBhIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbiwgZWcuIGluc3RlYWQg
b2YgJHtlcnJvck1zZ31gKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aGlz
Lm5leHQoKTsKKyAgICAgICAgbm9kZS5yaWdodCA9IHRoaXMucGFyc2VNYXliZUFzc2lnbihub0lu
KTsKKyAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAiQXNzaWdubWVudEV4cHJl
c3Npb24iKTsKKyAgICAgIH0gZWxzZSBpZiAoZmFpbE9uU2hvcnRoYW5kQXNzaWduICYmIHJlZlNo
b3J0aGFuZERlZmF1bHRQb3Muc3RhcnQpIHsKKyAgICAgICAgdGhpcy51bmV4cGVjdGVkKHJlZlNo
b3J0aGFuZERlZmF1bHRQb3Muc3RhcnQpOworICAgICAgfQorCisgICAgICByZXR1cm4gbGVmdDsK
KyAgICB9OworCisgICAgLy8gUGFyc2UgYSB0ZXJuYXJ5IGNvbmRpdGlvbmFsIChgPzpgKSBvcGVy
YXRvci4KKworICAgIHBwLnBhcnNlTWF5YmVDb25kaXRpb25hbCA9IGZ1bmN0aW9uIChub0luLCBy
ZWZTaG9ydGhhbmREZWZhdWx0UG9zLCByZWZOZWVkc0Fycm93UG9zKSB7CisgICAgICBjb25zdCBz
dGFydFBvcyA9IHRoaXMuc3RhdGUuc3RhcnQ7CisgICAgICBjb25zdCBzdGFydExvYyA9IHRoaXMu
c3RhdGUuc3RhcnRMb2M7CisgICAgICBjb25zdCBleHByID0gdGhpcy5wYXJzZUV4cHJPcHMobm9J
biwgcmVmU2hvcnRoYW5kRGVmYXVsdFBvcyk7CisgICAgICBpZiAocmVmU2hvcnRoYW5kRGVmYXVs
dFBvcyAmJiByZWZTaG9ydGhhbmREZWZhdWx0UG9zLnN0YXJ0KSByZXR1cm4gZXhwcjsKKworICAg
ICAgcmV0dXJuIHRoaXMucGFyc2VDb25kaXRpb25hbChleHByLCBub0luLCBzdGFydFBvcywgc3Rh
cnRMb2MsIHJlZk5lZWRzQXJyb3dQb3MpOworICAgIH07CisKKyAgICBwcC5wYXJzZUNvbmRpdGlv
bmFsID0gZnVuY3Rpb24gKGV4cHIsIG5vSW4sIHN0YXJ0UG9zLCBzdGFydExvYykgeworICAgICAg
aWYgKHRoaXMuZWF0KHR0LnF1ZXN0aW9uKSkgeworICAgICAgICBjb25zdCBub2RlID0gdGhpcy5z
dGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpOworICAgICAgICBub2RlLnRlc3QgPSBleHBy
OworICAgICAgICBub2RlLmNvbnNlcXVlbnQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKTsKKyAg
ICAgICAgdGhpcy5leHBlY3QodHQuY29sb24pOworICAgICAgICBub2RlLmFsdGVybmF0ZSA9IHRo
aXMucGFyc2VNYXliZUFzc2lnbihub0luKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9k
ZShub2RlLCAiQ29uZGl0aW9uYWxFeHByZXNzaW9uIik7CisgICAgICB9CisgICAgICByZXR1cm4g
ZXhwcjsKKyAgICB9OworCisgICAgLy8gU3RhcnQgdGhlIHByZWNlZGVuY2UgcGFyc2VyLgorCisg
ICAgcHAucGFyc2VFeHByT3BzID0gZnVuY3Rpb24gKG5vSW4sIHJlZlNob3J0aGFuZERlZmF1bHRQ
b3MpIHsKKyAgICAgIGNvbnN0IHN0YXJ0UG9zID0gdGhpcy5zdGF0ZS5zdGFydDsKKyAgICAgIGNv
bnN0IHN0YXJ0TG9jID0gdGhpcy5zdGF0ZS5zdGFydExvYzsKKyAgICAgIGNvbnN0IGV4cHIgPSB0
aGlzLnBhcnNlTWF5YmVVbmFyeShyZWZTaG9ydGhhbmREZWZhdWx0UG9zKTsKKyAgICAgIGlmIChy
ZWZTaG9ydGhhbmREZWZhdWx0UG9zICYmIHJlZlNob3J0aGFuZERlZmF1bHRQb3Muc3RhcnQpIHsK
KyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gdGhp
cy5wYXJzZUV4cHJPcChleHByLCBzdGFydFBvcywgc3RhcnRMb2MsIC0xLCBub0luKTsKKyAgICAg
IH0KKyAgICB9OworCisgICAgLy8gUGFyc2UgYmluYXJ5IG9wZXJhdG9ycyB3aXRoIHRoZSBvcGVy
YXRvciBwcmVjZWRlbmNlIHBhcnNpbmcKKyAgICAvLyBhbGdvcml0aG0uIGBsZWZ0YCBpcyB0aGUg
bGVmdC1oYW5kIHNpZGUgb2YgdGhlIG9wZXJhdG9yLgorICAgIC8vIGBtaW5QcmVjYCBwcm92aWRl
cyBjb250ZXh0IHRoYXQgYWxsb3dzIHRoZSBmdW5jdGlvbiB0byBzdG9wIGFuZAorICAgIC8vIGRl
ZmVyIGZ1cnRoZXIgcGFyc2VyIHRvIG9uZSBvZiBpdHMgY2FsbGVycyB3aGVuIGl0IGVuY291bnRl
cnMgYW4KKyAgICAvLyBvcGVyYXRvciB0aGF0IGhhcyBhIGxvd2VyIHByZWNlZGVuY2UgdGhhbiB0
aGUgc2V0IGl0IGlzIHBhcnNpbmcuCisKKyAgICBwcC5wYXJzZUV4cHJPcCA9IGZ1bmN0aW9uKGxl
ZnQsIGxlZnRTdGFydFBvcywgbGVmdFN0YXJ0TG9jLCBtaW5QcmVjLCBub0luKSB7CisgICAgICBj
b25zdCBwcmVjID0gdGhpcy5zdGF0ZS50eXBlLmJpbm9wOworICAgICAgaWYgKHByZWMgIT0gbnVs
bCAmJiAoIW5vSW4gfHwgIXRoaXMubWF0Y2godHQuX2luKSkpIHsKKyAgICAgICAgaWYgKHByZWMg
PiBtaW5QcmVjKSB7CisgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQobGVm
dFN0YXJ0UG9zLCBsZWZ0U3RhcnRMb2MpOworICAgICAgICAgIG5vZGUubGVmdCA9IGxlZnQ7Cisg
ICAgICAgICAgbm9kZS5vcGVyYXRvciA9IHRoaXMuc3RhdGUudmFsdWU7CisKKyAgICAgICAgICBp
ZiAoCisgICAgICAgICAgICBub2RlLm9wZXJhdG9yID09PSAiKioiICYmCisgICAgICAgICAgICBs
ZWZ0LnR5cGUgPT09ICJVbmFyeUV4cHJlc3Npb24iICYmCisgICAgICAgICAgICBsZWZ0LmV4dHJh
ICYmCisgICAgICAgICAgICAhbGVmdC5leHRyYS5wYXJlbnRoZXNpemVkQXJndW1lbnQgJiYKKyAg
ICAgICAgICAgICFsZWZ0LmV4dHJhLnBhcmVudGhlc2l6ZWQKKyAgICAgICAgICApIHsKKyAgICAg
ICAgICAgIHRoaXMucmFpc2UobGVmdC5hcmd1bWVudC5zdGFydCwgIklsbGVnYWwgZXhwcmVzc2lv
bi4gV3JhcCBsZWZ0IGhhbmQgc2lkZSBvciBlbnRpcmUgZXhwb25lbnRpYXRpb24gaW4gcGFyZW50
aGVzZXMuIik7CisgICAgICAgICAgfQorCisgICAgICAgICAgY29uc3Qgb3AgPSB0aGlzLnN0YXRl
LnR5cGU7CisgICAgICAgICAgdGhpcy5uZXh0KCk7CisKKyAgICAgICAgICBjb25zdCBzdGFydFBv
cyA9IHRoaXMuc3RhdGUuc3RhcnQ7CisgICAgICAgICAgY29uc3Qgc3RhcnRMb2MgPSB0aGlzLnN0
YXRlLnN0YXJ0TG9jOworICAgICAgICAgIG5vZGUucmlnaHQgPSB0aGlzLnBhcnNlRXhwck9wKHRo
aXMucGFyc2VNYXliZVVuYXJ5KCksIHN0YXJ0UG9zLCBzdGFydExvYywgb3AucmlnaHRBc3NvY2lh
dGl2ZSA/IHByZWMgLSAxIDogcHJlYywgbm9Jbik7CisKKyAgICAgICAgICB0aGlzLmZpbmlzaE5v
ZGUobm9kZSwgKG9wID09PSB0dC5sb2dpY2FsT1IgfHwgb3AgPT09IHR0LmxvZ2ljYWxBTkQpID8g
IkxvZ2ljYWxFeHByZXNzaW9uIiA6ICJCaW5hcnlFeHByZXNzaW9uIik7CisgICAgICAgICAgcmV0
dXJuIHRoaXMucGFyc2VFeHByT3Aobm9kZSwgbGVmdFN0YXJ0UG9zLCBsZWZ0U3RhcnRMb2MsIG1p
blByZWMsIG5vSW4pOworICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gbGVmdDsKKyAg
ICB9OworCisgICAgLy8gUGFyc2UgdW5hcnkgb3BlcmF0b3JzLCBib3RoIHByZWZpeCBhbmQgcG9z
dGZpeC4KKworICAgIHBwLnBhcnNlTWF5YmVVbmFyeSA9IGZ1bmN0aW9uIChyZWZTaG9ydGhhbmRE
ZWZhdWx0UG9zKSB7CisgICAgICBpZiAodGhpcy5zdGF0ZS50eXBlLnByZWZpeCkgeworICAgICAg
ICBjb25zdCBub2RlID0gdGhpcy5zdGFydE5vZGUoKTsKKyAgICAgICAgY29uc3QgdXBkYXRlID0g
dGhpcy5tYXRjaCh0dC5pbmNEZWMpOworICAgICAgICBub2RlLm9wZXJhdG9yID0gdGhpcy5zdGF0
ZS52YWx1ZTsKKyAgICAgICAgbm9kZS5wcmVmaXggPSB0cnVlOworICAgICAgICB0aGlzLm5leHQo
KTsKKworICAgICAgICBjb25zdCBhcmdUeXBlID0gdGhpcy5zdGF0ZS50eXBlOworICAgICAgICBu
b2RlLmFyZ3VtZW50ID0gdGhpcy5wYXJzZU1heWJlVW5hcnkoKTsKKworICAgICAgICB0aGlzLmFk
ZEV4dHJhKG5vZGUsICJwYXJlbnRoZXNpemVkQXJndW1lbnQiLCBhcmdUeXBlID09PSB0dC5wYXJl
bkwgJiYgKCFub2RlLmFyZ3VtZW50LmV4dHJhIHx8ICFub2RlLmFyZ3VtZW50LmV4dHJhLnBhcmVu
dGhlc2l6ZWQpKTsKKworICAgICAgICBpZiAocmVmU2hvcnRoYW5kRGVmYXVsdFBvcyAmJiByZWZT
aG9ydGhhbmREZWZhdWx0UG9zLnN0YXJ0KSB7CisgICAgICAgICAgdGhpcy51bmV4cGVjdGVkKHJl
ZlNob3J0aGFuZERlZmF1bHRQb3Muc3RhcnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVw
ZGF0ZSkgeworICAgICAgICAgIHRoaXMuY2hlY2tMVmFsKG5vZGUuYXJndW1lbnQsIHVuZGVmaW5l
ZCwgdW5kZWZpbmVkLCAicHJlZml4IG9wZXJhdGlvbiIpOworICAgICAgICB9IGVsc2UgaWYgKHRo
aXMuc3RhdGUuc3RyaWN0ICYmIG5vZGUub3BlcmF0b3IgPT09ICJkZWxldGUiICYmIG5vZGUuYXJn
dW1lbnQudHlwZSA9PT0gIklkZW50aWZpZXIiKSB7CisgICAgICAgICAgdGhpcy5yYWlzZShub2Rl
LnN0YXJ0LCAiRGVsZXRpbmcgbG9jYWwgdmFyaWFibGUgaW4gc3RyaWN0IG1vZGUiKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgdXBkYXRlID8gIlVw
ZGF0ZUV4cHJlc3Npb24iIDogIlVuYXJ5RXhwcmVzc2lvbiIpOworICAgICAgfQorCisgICAgICBj
b25zdCBzdGFydFBvcyA9IHRoaXMuc3RhdGUuc3RhcnQ7CisgICAgICBjb25zdCBzdGFydExvYyA9
IHRoaXMuc3RhdGUuc3RhcnRMb2M7CisgICAgICBsZXQgZXhwciA9IHRoaXMucGFyc2VFeHByU3Vi
c2NyaXB0cyhyZWZTaG9ydGhhbmREZWZhdWx0UG9zKTsKKyAgICAgIGlmIChyZWZTaG9ydGhhbmRE
ZWZhdWx0UG9zICYmIHJlZlNob3J0aGFuZERlZmF1bHRQb3Muc3RhcnQpIHJldHVybiBleHByOwor
ICAgICAgd2hpbGUgKHRoaXMuc3RhdGUudHlwZS5wb3N0Zml4ICYmICF0aGlzLmNhbkluc2VydFNl
bWljb2xvbigpKSB7CisgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0
UG9zLCBzdGFydExvYyk7CisgICAgICAgIG5vZGUub3BlcmF0b3IgPSB0aGlzLnN0YXRlLnZhbHVl
OworICAgICAgICBub2RlLnByZWZpeCA9IGZhbHNlOworICAgICAgICBub2RlLmFyZ3VtZW50ID0g
ZXhwcjsKKyAgICAgICAgdGhpcy5jaGVja0xWYWwoZXhwciwgdW5kZWZpbmVkLCB1bmRlZmluZWQs
ICJwb3N0Zml4IG9wZXJhdGlvbiIpOworICAgICAgICB0aGlzLm5leHQoKTsKKyAgICAgICAgZXhw
ciA9IHRoaXMuZmluaXNoTm9kZShub2RlLCAiVXBkYXRlRXhwcmVzc2lvbiIpOworICAgICAgfQor
ICAgICAgcmV0dXJuIGV4cHI7CisgICAgfTsKKworICAgIC8vIFBhcnNlIGNhbGwsIGRvdCwgYW5k
IGBbXWAtc3Vic2NyaXB0IGV4cHJlc3Npb25zLgorCisgICAgcHAucGFyc2VFeHByU3Vic2NyaXB0
cyA9IGZ1bmN0aW9uIChyZWZTaG9ydGhhbmREZWZhdWx0UG9zKSB7CisgICAgICBjb25zdCBzdGFy
dFBvcyA9IHRoaXMuc3RhdGUuc3RhcnQ7CisgICAgICBjb25zdCBzdGFydExvYyA9IHRoaXMuc3Rh
dGUuc3RhcnRMb2M7CisgICAgICBjb25zdCBwb3RlbnRpYWxBcnJvd0F0ID0gdGhpcy5zdGF0ZS5w
b3RlbnRpYWxBcnJvd0F0OworICAgICAgY29uc3QgZXhwciA9IHRoaXMucGFyc2VFeHByQXRvbShy
ZWZTaG9ydGhhbmREZWZhdWx0UG9zKTsKKworICAgICAgaWYgKGV4cHIudHlwZSA9PT0gIkFycm93
RnVuY3Rpb25FeHByZXNzaW9uIiAmJiBleHByLnN0YXJ0ID09PSBwb3RlbnRpYWxBcnJvd0F0KSB7
CisgICAgICAgIHJldHVybiBleHByOworICAgICAgfQorCisgICAgICBpZiAocmVmU2hvcnRoYW5k
RGVmYXVsdFBvcyAmJiByZWZTaG9ydGhhbmREZWZhdWx0UG9zLnN0YXJ0KSB7CisgICAgICAgIHJl
dHVybiBleHByOworICAgICAgfQorCisgICAgICByZXR1cm4gdGhpcy5wYXJzZVN1YnNjcmlwdHMo
ZXhwciwgc3RhcnRQb3MsIHN0YXJ0TG9jKTsKKyAgICB9OworCisgICAgcHAucGFyc2VTdWJzY3Jp
cHRzID0gZnVuY3Rpb24gKGJhc2UsIHN0YXJ0UG9zLCBzdGFydExvYywgbm9DYWxscykgeworICAg
ICAgZm9yICg7OykgeworICAgICAgICBpZiAoIW5vQ2FsbHMgJiYgdGhpcy5lYXQodHQuZG91Ymxl
Q29sb24pKSB7CisgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQ
b3MsIHN0YXJ0TG9jKTsKKyAgICAgICAgICBub2RlLm9iamVjdCA9IGJhc2U7CisgICAgICAgICAg
bm9kZS5jYWxsZWUgPSB0aGlzLnBhcnNlTm9DYWxsRXhwcigpOworICAgICAgICAgIHJldHVybiB0
aGlzLnBhcnNlU3Vic2NyaXB0cyh0aGlzLmZpbmlzaE5vZGUobm9kZSwgIkJpbmRFeHByZXNzaW9u
IiksIHN0YXJ0UG9zLCBzdGFydExvYywgbm9DYWxscyk7CisgICAgICAgIH0gZWxzZSBpZiAodGhp
cy5lYXQodHQuZG90KSkgeworICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0
KHN0YXJ0UG9zLCBzdGFydExvYyk7CisgICAgICAgICAgbm9kZS5vYmplY3QgPSBiYXNlOworICAg
ICAgICAgIG5vZGUucHJvcGVydHkgPSB0aGlzLnBhcnNlSWRlbnRpZmllcih0cnVlKTsKKyAgICAg
ICAgICBub2RlLmNvbXB1dGVkID0gZmFsc2U7CisgICAgICAgICAgYmFzZSA9IHRoaXMuZmluaXNo
Tm9kZShub2RlLCAiTWVtYmVyRXhwcmVzc2lvbiIpOworICAgICAgICB9IGVsc2UgaWYgKHRoaXMu
ZWF0KHR0LmJyYWNrZXRMKSkgeworICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXJ0Tm9k
ZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7CisgICAgICAgICAgbm9kZS5vYmplY3QgPSBiYXNlOwor
ICAgICAgICAgIG5vZGUucHJvcGVydHkgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOworICAgICAg
ICAgIG5vZGUuY29tcHV0ZWQgPSB0cnVlOworICAgICAgICAgIHRoaXMuZXhwZWN0KHR0LmJyYWNr
ZXRSKTsKKyAgICAgICAgICBiYXNlID0gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJNZW1iZXJFeHBy
ZXNzaW9uIik7CisgICAgICAgIH0gZWxzZSBpZiAoIW5vQ2FsbHMgJiYgdGhpcy5tYXRjaCh0dC5w
YXJlbkwpKSB7CisgICAgICAgICAgY29uc3QgcG9zc2libGVBc3luYyA9IHRoaXMuc3RhdGUucG90
ZW50aWFsQXJyb3dBdCA9PT0gYmFzZS5zdGFydCAmJiBiYXNlLnR5cGUgPT09ICJJZGVudGlmaWVy
IiAmJiBiYXNlLm5hbWUgPT09ICJhc3luYyIgJiYgIXRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCk7
CisgICAgICAgICAgdGhpcy5uZXh0KCk7CisKKyAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5z
dGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpOworICAgICAgICAgIG5vZGUuY2FsbGVlID0g
YmFzZTsKKyAgICAgICAgICBub2RlLmFyZ3VtZW50cyA9IHRoaXMucGFyc2VDYWxsRXhwcmVzc2lv
bkFyZ3VtZW50cyh0dC5wYXJlblIsIHBvc3NpYmxlQXN5bmMpOworICAgICAgICAgIGlmIChub2Rl
LmNhbGxlZS50eXBlID09PSAiSW1wb3J0IiAmJiBub2RlLmFyZ3VtZW50cy5sZW5ndGggIT09IDEp
IHsKKyAgICAgICAgICAgIHRoaXMucmFpc2Uobm9kZS5zdGFydCwgImltcG9ydCgpIHJlcXVpcmVz
IGV4YWN0bHkgb25lIGFyZ3VtZW50Iik7CisgICAgICAgICAgfQorICAgICAgICAgIGJhc2UgPSB0
aGlzLmZpbmlzaE5vZGUobm9kZSwgIkNhbGxFeHByZXNzaW9uIik7CisKKyAgICAgICAgICBpZiAo
cG9zc2libGVBc3luYyAmJiB0aGlzLnNob3VsZFBhcnNlQXN5bmNBcnJvdygpKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5wYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24odGhpcy5z
dGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpLCBub2RlKTsKKyAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgdGhpcy50b1JlZmVyZW5jZWRMaXN0KG5vZGUuYXJndW1lbnRzKTsKKyAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tYXRjaCh0dC5iYWNrUXVvdGUpKSB7
CisgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0
TG9jKTsKKyAgICAgICAgICBub2RlLnRhZyA9IGJhc2U7CisgICAgICAgICAgbm9kZS5xdWFzaSA9
IHRoaXMucGFyc2VUZW1wbGF0ZSh0cnVlKTsKKyAgICAgICAgICBiYXNlID0gdGhpcy5maW5pc2hO
b2RlKG5vZGUsICJUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24iKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICByZXR1cm4gYmFzZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisKKyAg
ICBwcC5wYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzID0gZnVuY3Rpb24gKGNsb3NlLCBwb3Nz
aWJsZUFzeW5jQXJyb3cpIHsKKyAgICAgIGNvbnN0IGVsdHMgPSBbXTsKKyAgICAgIGxldCBpbm5l
clBhcmVuU3RhcnQ7CisgICAgICBsZXQgZmlyc3QgPSB0cnVlOworCisgICAgICB3aGlsZSAoIXRo
aXMuZWF0KGNsb3NlKSkgeworICAgICAgICBpZiAoZmlyc3QpIHsKKyAgICAgICAgICBmaXJzdCA9
IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRoaXMuZXhwZWN0KHR0LmNvbW1h
KTsKKyAgICAgICAgICBpZiAodGhpcy5lYXQoY2xvc2UpKSBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaWYgdGhpcyBpcyBhbiBhc3luYyBh
cnJvdyBmdW5jdGlvbnMsIHRoYXQgd2UgZG9uJ3QgYWxsb3cgaW5uZXIgcGFyZW5zIGluc2lkZSB0
aGUgcGFyYW1zCisgICAgICAgIGlmICh0aGlzLm1hdGNoKHR0LnBhcmVuTCkgJiYgIWlubmVyUGFy
ZW5TdGFydCkgeworICAgICAgICAgIGlubmVyUGFyZW5TdGFydCA9IHRoaXMuc3RhdGUuc3RhcnQ7
CisgICAgICAgIH0KKworICAgICAgICBlbHRzLnB1c2godGhpcy5wYXJzZUV4cHJMaXN0SXRlbShm
YWxzZSwgcG9zc2libGVBc3luY0Fycm93ID8geyBzdGFydDogMCB9IDogdW5kZWZpbmVkLCBwb3Nz
aWJsZUFzeW5jQXJyb3cgPyB7IHN0YXJ0OiAwIH0gOiB1bmRlZmluZWQpKTsKKyAgICAgIH0KKwor
ICAgICAgLy8gd2UgZm91bmQgYW4gYXN5bmMgYXJyb3cgZnVuY3Rpb24gc28gbGV0J3Mgbm90IGFs
bG93IGFueSBpbm5lciBwYXJlbnMKKyAgICAgIGlmIChwb3NzaWJsZUFzeW5jQXJyb3cgJiYgaW5u
ZXJQYXJlblN0YXJ0ICYmIHRoaXMuc2hvdWxkUGFyc2VBc3luY0Fycm93KCkpIHsKKyAgICAgICAg
dGhpcy51bmV4cGVjdGVkKCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBlbHRzOworICAgIH07
CisKKyAgICBwcC5zaG91bGRQYXJzZUFzeW5jQXJyb3cgPSBmdW5jdGlvbiAoKSB7CisgICAgICBy
ZXR1cm4gdGhpcy5tYXRjaCh0dC5hcnJvdyk7CisgICAgfTsKKworICAgIHBwLnBhcnNlQXN5bmNB
cnJvd0Zyb21DYWxsRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub2RlLCBjYWxsKSB7CisgICAgICB0
aGlzLmV4cGVjdCh0dC5hcnJvdyk7CisgICAgICByZXR1cm4gdGhpcy5wYXJzZUFycm93RXhwcmVz
c2lvbihub2RlLCBjYWxsLmFyZ3VtZW50cywgdHJ1ZSk7CisgICAgfTsKKworICAgIC8vIFBhcnNl
IGEgbm8tY2FsbCBleHByZXNzaW9uIChsaWtlIGFyZ3VtZW50IG9mIGBuZXdgIG9yIGA6OmAgb3Bl
cmF0b3JzKS4KKworICAgIHBwLnBhcnNlTm9DYWxsRXhwciA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
IGNvbnN0IHN0YXJ0UG9zID0gdGhpcy5zdGF0ZS5zdGFydDsKKyAgICAgIGNvbnN0IHN0YXJ0TG9j
ID0gdGhpcy5zdGF0ZS5zdGFydExvYzsKKyAgICAgIHJldHVybiB0aGlzLnBhcnNlU3Vic2NyaXB0
cyh0aGlzLnBhcnNlRXhwckF0b20oKSwgc3RhcnRQb3MsIHN0YXJ0TG9jLCB0cnVlKTsKKyAgICB9
OworCisgICAgLy8gUGFyc2UgYW4gYXRvbWljIGV4cHJlc3Npb24g4oCUIGVpdGhlciBhIHNpbmds
ZSB0b2tlbiB0aGF0IGlzIGFuCisgICAgLy8gZXhwcmVzc2lvbiwgYW4gZXhwcmVzc2lvbiBzdGFy
dGVkIGJ5IGEga2V5d29yZCBsaWtlIGBmdW5jdGlvbmAgb3IKKyAgICAvLyBgbmV3YCwgb3IgYW4g
ZXhwcmVzc2lvbiB3cmFwcGVkIGluIHB1bmN0dWF0aW9uIGxpa2UgYCgpYCwgYFtdYCwKKyAgICAv
LyBvciBge31gLgorCisgICAgcHAucGFyc2VFeHByQXRvbSA9IGZ1bmN0aW9uIChyZWZTaG9ydGhh
bmREZWZhdWx0UG9zKSB7CisgICAgICBjb25zdCBjYW5CZUFycm93ID0gdGhpcy5zdGF0ZS5wb3Rl
bnRpYWxBcnJvd0F0ID09PSB0aGlzLnN0YXRlLnN0YXJ0OworICAgICAgbGV0IG5vZGU7CisKKyAg
ICAgIHN3aXRjaCAodGhpcy5zdGF0ZS50eXBlKSB7CisgICAgICAgIGNhc2UgdHQuX3N1cGVyOgor
ICAgICAgICAgIGlmICghdGhpcy5zdGF0ZS5pbk1ldGhvZCAmJiAhdGhpcy5vcHRpb25zLmFsbG93
U3VwZXJPdXRzaWRlTWV0aG9kKSB7CisgICAgICAgICAgICB0aGlzLnJhaXNlKHRoaXMuc3RhdGUu
c3RhcnQsICInc3VwZXInIG91dHNpZGUgb2YgZnVuY3Rpb24gb3IgY2xhc3MiKTsKKyAgICAgICAg
ICB9CisKKyAgICAgICAgICBub2RlID0gdGhpcy5zdGFydE5vZGUoKTsKKyAgICAgICAgICB0aGlz
Lm5leHQoKTsKKyAgICAgICAgICBpZiAoIXRoaXMubWF0Y2godHQucGFyZW5MKSAmJiAhdGhpcy5t
YXRjaCh0dC5icmFja2V0TCkgJiYgIXRoaXMubWF0Y2godHQuZG90KSkgeworICAgICAgICAgICAg
dGhpcy51bmV4cGVjdGVkKCk7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICh0aGlzLm1hdGNo
KHR0LnBhcmVuTCkgJiYgdGhpcy5zdGF0ZS5pbk1ldGhvZCAhPT0gImNvbnN0cnVjdG9yIiAmJiAh
dGhpcy5vcHRpb25zLmFsbG93U3VwZXJPdXRzaWRlTWV0aG9kKSB7CisgICAgICAgICAgICB0aGlz
LnJhaXNlKG5vZGUuc3RhcnQsICJzdXBlcigpIGlzIG9ubHkgdmFsaWQgaW5zaWRlIGEgY2xhc3Mg
Y29uc3RydWN0b3IuIE1ha2Ugc3VyZSB0aGUgbWV0aG9kIG5hbWUgaXMgc3BlbGxlZCBleGFjdGx5
IGFzICdjb25zdHJ1Y3RvcicuIik7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiB0aGlz
LmZpbmlzaE5vZGUobm9kZSwgIlN1cGVyIik7CisKKyAgICAgICAgY2FzZSB0dC5faW1wb3J0Ogor
ICAgICAgICAgIGlmICghdGhpcy5oYXNQbHVnaW4oImR5bmFtaWNJbXBvcnQiKSkgdGhpcy51bmV4
cGVjdGVkKCk7CisKKyAgICAgICAgICBub2RlID0gdGhpcy5zdGFydE5vZGUoKTsKKyAgICAgICAg
ICB0aGlzLm5leHQoKTsKKyAgICAgICAgICBpZiAoIXRoaXMubWF0Y2godHQucGFyZW5MKSkgewor
ICAgICAgICAgICAgdGhpcy51bmV4cGVjdGVkKG51bGwsIHR0LnBhcmVuTCk7CisgICAgICAgICAg
fQorICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIkltcG9ydCIpOworCisg
ICAgICAgIGNhc2UgdHQuX3RoaXM6CisgICAgICAgICAgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7
CisgICAgICAgICAgdGhpcy5uZXh0KCk7CisgICAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9k
ZShub2RlLCAiVGhpc0V4cHJlc3Npb24iKTsKKworICAgICAgICBjYXNlIHR0Ll95aWVsZDoKKyAg
ICAgICAgICBpZiAodGhpcy5zdGF0ZS5pbkdlbmVyYXRvcikgdGhpcy51bmV4cGVjdGVkKCk7CisK
KyAgICAgICAgY2FzZSB0dC5uYW1lOgorICAgICAgICAgIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgp
OworICAgICAgICAgIGNvbnN0IGFsbG93QXdhaXQgPSB0aGlzLnN0YXRlLnZhbHVlID09PSAiYXdh
aXQiICYmIHRoaXMuc3RhdGUuaW5Bc3luYzsKKyAgICAgICAgICBjb25zdCBhbGxvd1lpZWxkID0g
dGhpcy5zaG91bGRBbGxvd1lpZWxkSWRlbnRpZmllcigpOworICAgICAgICAgIGNvbnN0IGlkID0g
dGhpcy5wYXJzZUlkZW50aWZpZXIoYWxsb3dBd2FpdCB8fCBhbGxvd1lpZWxkKTsKKworICAgICAg
ICAgIGlmIChpZC5uYW1lID09PSAiYXdhaXQiKSB7CisgICAgICAgICAgICBpZiAodGhpcy5zdGF0
ZS5pbkFzeW5jIHx8IHRoaXMuaW5Nb2R1bGUpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
cGFyc2VBd2FpdChub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgaWYgKGlk
Lm5hbWUgPT09ICJhc3luYyIgJiYgdGhpcy5tYXRjaCh0dC5fZnVuY3Rpb24pICYmICF0aGlzLmNh
bkluc2VydFNlbWljb2xvbigpKSB7CisgICAgICAgICAgICB0aGlzLm5leHQoKTsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb24obm9kZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTsK
KyAgICAgICAgICB9IGVsc2UgaWYgKGNhbkJlQXJyb3cgJiYgaWQubmFtZSA9PT0gImFzeW5jIiAm
JiB0aGlzLm1hdGNoKHR0Lm5hbWUpKSB7CisgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBbdGhp
cy5wYXJzZUlkZW50aWZpZXIoKV07CisgICAgICAgICAgICB0aGlzLmV4cGVjdCh0dC5hcnJvdyk7
CisgICAgICAgICAgICAvLyBsZXQgZm9vID0gYmFyID0+IHt9OworICAgICAgICAgICAgcmV0dXJu
IHRoaXMucGFyc2VBcnJvd0V4cHJlc3Npb24obm9kZSwgcGFyYW1zLCB0cnVlKTsKKyAgICAgICAg
ICB9CisKKyAgICAgICAgICBpZiAoY2FuQmVBcnJvdyAmJiAhdGhpcy5jYW5JbnNlcnRTZW1pY29s
b24oKSAmJiB0aGlzLmVhdCh0dC5hcnJvdykpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnBh
cnNlQXJyb3dFeHByZXNzaW9uKG5vZGUsIFtpZF0pOworICAgICAgICAgIH0KKworICAgICAgICAg
IHJldHVybiBpZDsKKworICAgICAgICBjYXNlIHR0Ll9kbzoKKyAgICAgICAgICBpZiAodGhpcy5o
YXNQbHVnaW4oImRvRXhwcmVzc2lvbnMiKSkgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRo
aXMuc3RhcnROb2RlKCk7CisgICAgICAgICAgICB0aGlzLm5leHQoKTsKKyAgICAgICAgICAgIGNv
bnN0IG9sZEluRnVuY3Rpb24gPSB0aGlzLnN0YXRlLmluRnVuY3Rpb247CisgICAgICAgICAgICBj
b25zdCBvbGRMYWJlbHMgPSB0aGlzLnN0YXRlLmxhYmVsczsKKyAgICAgICAgICAgIHRoaXMuc3Rh
dGUubGFiZWxzID0gW107CisgICAgICAgICAgICB0aGlzLnN0YXRlLmluRnVuY3Rpb24gPSBmYWxz
ZTsKKyAgICAgICAgICAgIG5vZGUuYm9keSA9IHRoaXMucGFyc2VCbG9jayhmYWxzZSwgdHJ1ZSk7
CisgICAgICAgICAgICB0aGlzLnN0YXRlLmluRnVuY3Rpb24gPSBvbGRJbkZ1bmN0aW9uOworICAg
ICAgICAgICAgdGhpcy5zdGF0ZS5sYWJlbHMgPSBvbGRMYWJlbHM7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJEb0V4cHJlc3Npb24iKTsKKyAgICAgICAgICB9CisK
KyAgICAgICAgY2FzZSB0dC5yZWdleHA6CisgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnN0
YXRlLnZhbHVlOworICAgICAgICAgIG5vZGUgPSB0aGlzLnBhcnNlTGl0ZXJhbCh2YWx1ZS52YWx1
ZSwgIlJlZ0V4cExpdGVyYWwiKTsKKyAgICAgICAgICBub2RlLnBhdHRlcm4gPSB2YWx1ZS5wYXR0
ZXJuOworICAgICAgICAgIG5vZGUuZmxhZ3MgPSB2YWx1ZS5mbGFnczsKKyAgICAgICAgICByZXR1
cm4gbm9kZTsKKworICAgICAgICBjYXNlIHR0Lm51bToKKyAgICAgICAgICByZXR1cm4gdGhpcy5w
YXJzZUxpdGVyYWwodGhpcy5zdGF0ZS52YWx1ZSwgIk51bWVyaWNMaXRlcmFsIik7CisKKyAgICAg
ICAgY2FzZSB0dC5zdHJpbmc6CisgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VMaXRlcmFsKHRo
aXMuc3RhdGUudmFsdWUsICJTdHJpbmdMaXRlcmFsIik7CisKKyAgICAgICAgY2FzZSB0dC5fbnVs
bDoKKyAgICAgICAgICBub2RlID0gdGhpcy5zdGFydE5vZGUoKTsKKyAgICAgICAgICB0aGlzLm5l
eHQoKTsKKyAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJOdWxsTGl0ZXJh
bCIpOworCisgICAgICAgIGNhc2UgdHQuX3RydWU6IGNhc2UgdHQuX2ZhbHNlOgorICAgICAgICAg
IG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpOworICAgICAgICAgIG5vZGUudmFsdWUgPSB0aGlzLm1h
dGNoKHR0Ll90cnVlKTsKKyAgICAgICAgICB0aGlzLm5leHQoKTsKKyAgICAgICAgICByZXR1cm4g
dGhpcy5maW5pc2hOb2RlKG5vZGUsICJCb29sZWFuTGl0ZXJhbCIpOworCisgICAgICAgIGNhc2Ug
dHQucGFyZW5MOgorICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlUGFyZW5BbmREaXN0aW5ndWlz
aEV4cHJlc3Npb24obnVsbCwgbnVsbCwgY2FuQmVBcnJvdyk7CisKKyAgICAgICAgY2FzZSB0dC5i
cmFja2V0TDoKKyAgICAgICAgICBub2RlID0gdGhpcy5zdGFydE5vZGUoKTsKKyAgICAgICAgICB0
aGlzLm5leHQoKTsKKyAgICAgICAgICBub2RlLmVsZW1lbnRzID0gdGhpcy5wYXJzZUV4cHJMaXN0
KHR0LmJyYWNrZXRSLCB0cnVlLCByZWZTaG9ydGhhbmREZWZhdWx0UG9zKTsKKyAgICAgICAgICB0
aGlzLnRvUmVmZXJlbmNlZExpc3Qobm9kZS5lbGVtZW50cyk7CisgICAgICAgICAgcmV0dXJuIHRo
aXMuZmluaXNoTm9kZShub2RlLCAiQXJyYXlFeHByZXNzaW9uIik7CisKKyAgICAgICAgY2FzZSB0
dC5icmFjZUw6CisgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPYmooZmFsc2UsIHJlZlNob3J0
aGFuZERlZmF1bHRQb3MpOworCisgICAgICAgIGNhc2UgdHQuX2Z1bmN0aW9uOgorICAgICAgICAg
IHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCk7CisKKyAgICAgICAgY2FzZSB0
dC5hdDoKKyAgICAgICAgICB0aGlzLnBhcnNlRGVjb3JhdG9ycygpOworCisgICAgICAgIGNhc2Ug
dHQuX2NsYXNzOgorICAgICAgICAgIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpOworICAgICAgICAg
IHRoaXMudGFrZURlY29yYXRvcnMobm9kZSk7CisgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VD
bGFzcyhub2RlLCBmYWxzZSk7CisKKyAgICAgICAgY2FzZSB0dC5fbmV3OgorICAgICAgICAgIHJl
dHVybiB0aGlzLnBhcnNlTmV3KCk7CisKKyAgICAgICAgY2FzZSB0dC5iYWNrUXVvdGU6CisgICAg
ICAgICAgcmV0dXJuIHRoaXMucGFyc2VUZW1wbGF0ZShmYWxzZSk7CisKKyAgICAgICAgY2FzZSB0
dC5kb3VibGVDb2xvbjoKKyAgICAgICAgICBub2RlID0gdGhpcy5zdGFydE5vZGUoKTsKKyAgICAg
ICAgICB0aGlzLm5leHQoKTsKKyAgICAgICAgICBub2RlLm9iamVjdCA9IG51bGw7CisgICAgICAg
ICAgY29uc3QgY2FsbGVlID0gbm9kZS5jYWxsZWUgPSB0aGlzLnBhcnNlTm9DYWxsRXhwcigpOwor
ICAgICAgICAgIGlmIChjYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJCaW5kRXhwcmVzc2lvbiIpOwor
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLnJhaXNlKGNhbGxlZS5zdGFydCwg
IkJpbmRpbmcgc2hvdWxkIGJlIHBlcmZvcm1lZCBvbiBvYmplY3QgcHJvcGVydHkuIik7CisgICAg
ICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgdGhpcy51bmV4cGVjdGVkKCk7
CisgICAgICB9CisgICAgfTsKKworICAgIHBwLnBhcnNlRnVuY3Rpb25FeHByZXNzaW9uID0gZnVu
Y3Rpb24gKCkgeworICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7CisgICAgICBj
b25zdCBtZXRhID0gdGhpcy5wYXJzZUlkZW50aWZpZXIodHJ1ZSk7CisgICAgICBpZiAodGhpcy5z
dGF0ZS5pbkdlbmVyYXRvciAmJiB0aGlzLmVhdCh0dC5kb3QpICYmIHRoaXMuaGFzUGx1Z2luKCJm
dW5jdGlvblNlbnQiKSkgeworICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU1ldGFQcm9wZXJ0eShu
b2RlLCBtZXRhLCAic2VudCIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
cGFyc2VGdW5jdGlvbihub2RlLCBmYWxzZSk7CisgICAgICB9CisgICAgfTsKKworICAgIHBwLnBh
cnNlTWV0YVByb3BlcnR5ID0gZnVuY3Rpb24gKG5vZGUsIG1ldGEsIHByb3BlcnR5TmFtZSkgewor
ICAgICAgbm9kZS5tZXRhID0gbWV0YTsKKyAgICAgIG5vZGUucHJvcGVydHkgPSB0aGlzLnBhcnNl
SWRlbnRpZmllcih0cnVlKTsKKworICAgICAgaWYgKG5vZGUucHJvcGVydHkubmFtZSAhPT0gcHJv
cGVydHlOYW1lKSB7CisgICAgICAgIHRoaXMucmFpc2Uobm9kZS5wcm9wZXJ0eS5zdGFydCwgYFRo
ZSBvbmx5IHZhbGlkIG1ldGEgcHJvcGVydHkgZm9yIG5ldyBpcyAke21ldGEubmFtZX0uJHtwcm9w
ZXJ0eU5hbWV9YCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9k
ZSwgIk1ldGFQcm9wZXJ0eSIpOworICAgIH07CisKKyAgICBwcC5wYXJzZUxpdGVyYWwgPSBmdW5j
dGlvbiAodmFsdWUsIHR5cGUsIHN0YXJ0UG9zLCBzdGFydExvYykgeworICAgICAgc3RhcnRQb3Mg
PSBzdGFydFBvcyB8fCB0aGlzLnN0YXRlLnN0YXJ0OworICAgICAgc3RhcnRMb2MgPSBzdGFydExv
YyB8fCB0aGlzLnN0YXRlLnN0YXJ0TG9jOworCisgICAgICBjb25zdCBub2RlID0gdGhpcy5zdGFy
dE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpOworICAgICAgdGhpcy5hZGRFeHRyYShub2RlLCAi
cmF3VmFsdWUiLCB2YWx1ZSk7CisgICAgICB0aGlzLmFkZEV4dHJhKG5vZGUsICJyYXciLCB0aGlz
LmlucHV0LnNsaWNlKHN0YXJ0UG9zLCB0aGlzLnN0YXRlLmVuZCkpOworICAgICAgbm9kZS52YWx1
ZSA9IHZhbHVlOworICAgICAgdGhpcy5uZXh0KCk7CisgICAgICByZXR1cm4gdGhpcy5maW5pc2hO
b2RlKG5vZGUsIHR5cGUpOworICAgIH07CisKKyAgICBwcC5wYXJzZVBhcmVuRXhwcmVzc2lvbiA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgIHRoaXMuZXhwZWN0KHR0LnBhcmVuTCk7CisgICAgICBjb25z
dCB2YWwgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOworICAgICAgdGhpcy5leHBlY3QodHQucGFy
ZW5SKTsKKyAgICAgIHJldHVybiB2YWw7CisgICAgfTsKKworICAgIHBwLnBhcnNlUGFyZW5BbmRE
aXN0aW5ndWlzaEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoc3RhcnRQb3MsIHN0YXJ0TG9jLCBjYW5C
ZUFycm93KSB7CisgICAgICBzdGFydFBvcyA9IHN0YXJ0UG9zIHx8IHRoaXMuc3RhdGUuc3RhcnQ7
CisgICAgICBzdGFydExvYyA9IHN0YXJ0TG9jIHx8IHRoaXMuc3RhdGUuc3RhcnRMb2M7CisKKyAg
ICAgIGxldCB2YWw7CisgICAgICB0aGlzLmV4cGVjdCh0dC5wYXJlbkwpOworCisgICAgICBjb25z
dCBpbm5lclN0YXJ0UG9zID0gdGhpcy5zdGF0ZS5zdGFydDsKKyAgICAgIGNvbnN0IGlubmVyU3Rh
cnRMb2MgPSB0aGlzLnN0YXRlLnN0YXJ0TG9jOworICAgICAgY29uc3QgZXhwckxpc3QgPSBbXTsK
KyAgICAgIGNvbnN0IHJlZlNob3J0aGFuZERlZmF1bHRQb3MgPSB7IHN0YXJ0OiAwIH07CisgICAg
ICBjb25zdCByZWZOZWVkc0Fycm93UG9zID0geyBzdGFydDogMCB9OworICAgICAgbGV0IGZpcnN0
ID0gdHJ1ZTsKKyAgICAgIGxldCBzcHJlYWRTdGFydDsKKyAgICAgIGxldCBvcHRpb25hbENvbW1h
U3RhcnQ7CisKKyAgICAgIHdoaWxlICghdGhpcy5tYXRjaCh0dC5wYXJlblIpKSB7CisgICAgICAg
IGlmIChmaXJzdCkgeworICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgdGhpcy5leHBlY3QodHQuY29tbWEsIHJlZk5lZWRzQXJyb3dQb3Muc3RhcnQg
fHwgbnVsbCk7CisgICAgICAgICAgaWYgKHRoaXMubWF0Y2godHQucGFyZW5SKSkgeworICAgICAg
ICAgICAgb3B0aW9uYWxDb21tYVN0YXJ0ID0gdGhpcy5zdGF0ZS5zdGFydDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLm1hdGNo
KHR0LmVsbGlwc2lzKSkgeworICAgICAgICAgIGNvbnN0IHNwcmVhZE5vZGVTdGFydFBvcyA9IHRo
aXMuc3RhdGUuc3RhcnQ7CisgICAgICAgICAgY29uc3Qgc3ByZWFkTm9kZVN0YXJ0TG9jID0gdGhp
cy5zdGF0ZS5zdGFydExvYzsKKyAgICAgICAgICBzcHJlYWRTdGFydCA9IHRoaXMuc3RhdGUuc3Rh
cnQ7CisgICAgICAgICAgZXhwckxpc3QucHVzaCh0aGlzLnBhcnNlUGFyZW5JdGVtKHRoaXMucGFy
c2VSZXN0KCksIHNwcmVhZE5vZGVTdGFydFBvcywgc3ByZWFkTm9kZVN0YXJ0TG9jKSk7CisgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZXhwckxpc3QucHVzaCh0
aGlzLnBhcnNlTWF5YmVBc3NpZ24oZmFsc2UsIHJlZlNob3J0aGFuZERlZmF1bHRQb3MsIHRoaXMu
cGFyc2VQYXJlbkl0ZW0sIHJlZk5lZWRzQXJyb3dQb3MpKTsKKyAgICAgICAgfQorICAgICAgfQor
CisgICAgICBjb25zdCBpbm5lckVuZFBvcyA9IHRoaXMuc3RhdGUuc3RhcnQ7CisgICAgICBjb25z
dCBpbm5lckVuZExvYyA9IHRoaXMuc3RhdGUuc3RhcnRMb2M7CisgICAgICB0aGlzLmV4cGVjdCh0
dC5wYXJlblIpOworCisgICAgICBsZXQgYXJyb3dOb2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFy
dFBvcywgc3RhcnRMb2MpOworICAgICAgaWYgKGNhbkJlQXJyb3cgJiYgdGhpcy5zaG91bGRQYXJz
ZUFycm93KCkgJiYgKGFycm93Tm9kZSA9IHRoaXMucGFyc2VBcnJvdyhhcnJvd05vZGUpKSkgewor
ICAgICAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIGV4cHJMaXN0KSB7CisgICAgICAgICAgaWYgKHBh
cmFtLmV4dHJhICYmIHBhcmFtLmV4dHJhLnBhcmVudGhlc2l6ZWQpIHRoaXMudW5leHBlY3RlZChw
YXJhbS5leHRyYS5wYXJlblN0YXJ0KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlz
LnBhcnNlQXJyb3dFeHByZXNzaW9uKGFycm93Tm9kZSwgZXhwckxpc3QpOworICAgICAgfQorCisg
ICAgICBpZiAoIWV4cHJMaXN0Lmxlbmd0aCkgeworICAgICAgICB0aGlzLnVuZXhwZWN0ZWQodGhp
cy5zdGF0ZS5sYXN0VG9rU3RhcnQpOworICAgICAgfQorICAgICAgaWYgKG9wdGlvbmFsQ29tbWFT
dGFydCkgdGhpcy51bmV4cGVjdGVkKG9wdGlvbmFsQ29tbWFTdGFydCk7CisgICAgICBpZiAoc3By
ZWFkU3RhcnQpIHRoaXMudW5leHBlY3RlZChzcHJlYWRTdGFydCk7CisgICAgICBpZiAocmVmU2hv
cnRoYW5kRGVmYXVsdFBvcy5zdGFydCkgdGhpcy51bmV4cGVjdGVkKHJlZlNob3J0aGFuZERlZmF1
bHRQb3Muc3RhcnQpOworICAgICAgaWYgKHJlZk5lZWRzQXJyb3dQb3Muc3RhcnQpIHRoaXMudW5l
eHBlY3RlZChyZWZOZWVkc0Fycm93UG9zLnN0YXJ0KTsKKworICAgICAgaWYgKGV4cHJMaXN0Lmxl
bmd0aCA+IDEpIHsKKyAgICAgICAgdmFsID0gdGhpcy5zdGFydE5vZGVBdChpbm5lclN0YXJ0UG9z
LCBpbm5lclN0YXJ0TG9jKTsKKyAgICAgICAgdmFsLmV4cHJlc3Npb25zID0gZXhwckxpc3Q7Cisg
ICAgICAgIHRoaXMudG9SZWZlcmVuY2VkTGlzdCh2YWwuZXhwcmVzc2lvbnMpOworICAgICAgICB0
aGlzLmZpbmlzaE5vZGVBdCh2YWwsICJTZXF1ZW5jZUV4cHJlc3Npb24iLCBpbm5lckVuZFBvcywg
aW5uZXJFbmRMb2MpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsID0gZXhwckxpc3RbMF07
CisgICAgICB9CisKKworICAgICAgdGhpcy5hZGRFeHRyYSh2YWwsICJwYXJlbnRoZXNpemVkIiwg
dHJ1ZSk7CisgICAgICB0aGlzLmFkZEV4dHJhKHZhbCwgInBhcmVuU3RhcnQiLCBzdGFydFBvcyk7
CisKKyAgICAgIHJldHVybiB2YWw7CisgICAgfTsKKworICAgIHBwLnNob3VsZFBhcnNlQXJyb3cg
PSBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gIXRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCk7
CisgICAgfTsKKworICAgIHBwLnBhcnNlQXJyb3cgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAg
aWYgKHRoaXMuZWF0KHR0LmFycm93KSkgeworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgIH0K
KyAgICB9OworCisgICAgcHAucGFyc2VQYXJlbkl0ZW0gPSBmdW5jdGlvbiAobm9kZSkgeworICAg
ICAgcmV0dXJuIG5vZGU7CisgICAgfTsKKworICAgIC8vIE5ldydzIHByZWNlZGVuY2UgaXMgc2xp
Z2h0bHkgdHJpY2t5LiBJdCBtdXN0IGFsbG93IGl0cyBhcmd1bWVudAorICAgIC8vIHRvIGJlIGEg
YFtdYCBvciBkb3Qgc3Vic2NyaXB0IGV4cHJlc3Npb24sIGJ1dCBub3QgYSBjYWxsIOKAlCBhdAor
ICAgIC8vIGxlYXN0LCBub3Qgd2l0aG91dCB3cmFwcGluZyBpdCBpbiBwYXJlbnRoZXNlcy4gVGh1
cywgaXQgdXNlcyB0aGUKKworICAgIHBwLnBhcnNlTmV3ID0gZnVuY3Rpb24gKCkgeworICAgICAg
Y29uc3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7CisgICAgICBjb25zdCBtZXRhID0gdGhpcy5w
YXJzZUlkZW50aWZpZXIodHJ1ZSk7CisKKyAgICAgIGlmICh0aGlzLmVhdCh0dC5kb3QpKSB7Cisg
ICAgICAgIGNvbnN0IG1ldGFQcm9wID0gdGhpcy5wYXJzZU1ldGFQcm9wZXJ0eShub2RlLCBtZXRh
LCAidGFyZ2V0Iik7CisKKyAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmluRnVuY3Rpb24pIHsKKyAg
ICAgICAgICB0aGlzLnJhaXNlKG1ldGFQcm9wLnByb3BlcnR5LnN0YXJ0LCAibmV3LnRhcmdldCBj
YW4gb25seSBiZSB1c2VkIGluIGZ1bmN0aW9ucyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIG1ldGFQcm9wOworICAgICAgfQorCisgICAgICBub2RlLmNhbGxlZSA9IHRoaXMucGFyc2VO
b0NhbGxFeHByKCk7CisKKyAgICAgIGlmICh0aGlzLmVhdCh0dC5wYXJlbkwpKSB7CisgICAgICAg
IG5vZGUuYXJndW1lbnRzID0gdGhpcy5wYXJzZUV4cHJMaXN0KHR0LnBhcmVuUik7CisgICAgICAg
IHRoaXMudG9SZWZlcmVuY2VkTGlzdChub2RlLmFyZ3VtZW50cyk7CisgICAgICB9IGVsc2Ugewor
ICAgICAgICBub2RlLmFyZ3VtZW50cyA9IFtdOworICAgICAgfQorCisgICAgICByZXR1cm4gdGhp
cy5maW5pc2hOb2RlKG5vZGUsICJOZXdFeHByZXNzaW9uIik7CisgICAgfTsKKworICAgIC8vIFBh
cnNlIHRlbXBsYXRlIGV4cHJlc3Npb24uCisKKyAgICBwcC5wYXJzZVRlbXBsYXRlRWxlbWVudCA9
IGZ1bmN0aW9uIChpc1RhZ2dlZCkgeworICAgICAgY29uc3QgZWxlbSA9IHRoaXMuc3RhcnROb2Rl
KCk7CisgICAgICBpZiAodGhpcy5zdGF0ZS52YWx1ZSA9PT0gbnVsbCkgeworICAgICAgICBpZiAo
IWlzVGFnZ2VkKSB7CisgICAgICAgICAgdGhpcy5yYWlzZSh0aGlzLnN0YXRlLmludmFsaWRUZW1w
bGF0ZUVzY2FwZVBvc2l0aW9uLCAiSW52YWxpZCBlc2NhcGUgc2VxdWVuY2UgaW4gdGVtcGxhdGUi
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aGlzLnN0YXRlLmludmFsaWRUZW1wbGF0
ZUVzY2FwZVBvc2l0aW9uID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxlbS52
YWx1ZSA9IHsKKyAgICAgICAgcmF3OiB0aGlzLmlucHV0LnNsaWNlKHRoaXMuc3RhdGUuc3RhcnQs
IHRoaXMuc3RhdGUuZW5kKS5yZXBsYWNlKC9cclxuPy9nLCAiXG4iKSwKKyAgICAgICAgY29va2Vk
OiB0aGlzLnN0YXRlLnZhbHVlCisgICAgICB9OworICAgICAgdGhpcy5uZXh0KCk7CisgICAgICBl
bGVtLnRhaWwgPSB0aGlzLm1hdGNoKHR0LmJhY2tRdW90ZSk7CisgICAgICByZXR1cm4gdGhpcy5m
aW5pc2hOb2RlKGVsZW0sICJUZW1wbGF0ZUVsZW1lbnQiKTsKKyAgICB9OworCisgICAgcHAucGFy
c2VUZW1wbGF0ZSA9IGZ1bmN0aW9uIChpc1RhZ2dlZCkgeworICAgICAgY29uc3Qgbm9kZSA9IHRo
aXMuc3RhcnROb2RlKCk7CisgICAgICB0aGlzLm5leHQoKTsKKyAgICAgIG5vZGUuZXhwcmVzc2lv
bnMgPSBbXTsKKyAgICAgIGxldCBjdXJFbHQgPSB0aGlzLnBhcnNlVGVtcGxhdGVFbGVtZW50KGlz
VGFnZ2VkKTsKKyAgICAgIG5vZGUucXVhc2lzID0gW2N1ckVsdF07CisgICAgICB3aGlsZSAoIWN1
ckVsdC50YWlsKSB7CisgICAgICAgIHRoaXMuZXhwZWN0KHR0LmRvbGxhckJyYWNlTCk7CisgICAg
ICAgIG5vZGUuZXhwcmVzc2lvbnMucHVzaCh0aGlzLnBhcnNlRXhwcmVzc2lvbigpKTsKKyAgICAg
ICAgdGhpcy5leHBlY3QodHQuYnJhY2VSKTsKKyAgICAgICAgbm9kZS5xdWFzaXMucHVzaChjdXJF
bHQgPSB0aGlzLnBhcnNlVGVtcGxhdGVFbGVtZW50KGlzVGFnZ2VkKSk7CisgICAgICB9CisgICAg
ICB0aGlzLm5leHQoKTsKKyAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIlRlbXBs
YXRlTGl0ZXJhbCIpOworICAgIH07CisKKyAgICAvLyBQYXJzZSBhbiBvYmplY3QgbGl0ZXJhbCBv
ciBiaW5kaW5nIHBhdHRlcm4uCisKKyAgICBwcC5wYXJzZU9iaiA9IGZ1bmN0aW9uIChpc1BhdHRl
cm4sIHJlZlNob3J0aGFuZERlZmF1bHRQb3MpIHsKKyAgICAgIGxldCBkZWNvcmF0b3JzID0gW107
CisgICAgICBjb25zdCBwcm9wSGFzaCA9IE9iamVjdC5jcmVhdGUobnVsbCk7CisgICAgICBsZXQg
Zmlyc3QgPSB0cnVlOworICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7CisKKyAg
ICAgIG5vZGUucHJvcGVydGllcyA9IFtdOworICAgICAgdGhpcy5uZXh0KCk7CisKKyAgICAgIGxl
dCBmaXJzdFJlc3RMb2NhdGlvbiA9IG51bGw7CisKKyAgICAgIHdoaWxlICghdGhpcy5lYXQodHQu
YnJhY2VSKSkgeworICAgICAgICBpZiAoZmlyc3QpIHsKKyAgICAgICAgICBmaXJzdCA9IGZhbHNl
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRoaXMuZXhwZWN0KHR0LmNvbW1hKTsKKyAg
ICAgICAgICBpZiAodGhpcy5lYXQodHQuYnJhY2VSKSkgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICB3aGlsZSAodGhpcy5tYXRjaCh0dC5hdCkpIHsKKyAgICAgICAgICBkZWNvcmF0b3JzLnB1
c2godGhpcy5wYXJzZURlY29yYXRvcigpKTsKKyAgICAgICAgfQorCisgICAgICAgIGxldCBwcm9w
ID0gdGhpcy5zdGFydE5vZGUoKSwgaXNHZW5lcmF0b3IgPSBmYWxzZSwgaXNBc3luYyA9IGZhbHNl
LCBzdGFydFBvcywgc3RhcnRMb2M7CisgICAgICAgIGlmIChkZWNvcmF0b3JzLmxlbmd0aCkgewor
ICAgICAgICAgIHByb3AuZGVjb3JhdG9ycyA9IGRlY29yYXRvcnM7CisgICAgICAgICAgZGVjb3Jh
dG9ycyA9IFtdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuaGFzUGx1Z2luKCJvYmpl
Y3RSZXN0U3ByZWFkIikgJiYgdGhpcy5tYXRjaCh0dC5lbGxpcHNpcykpIHsKKyAgICAgICAgICBw
cm9wID0gdGhpcy5wYXJzZVNwcmVhZChpc1BhdHRlcm4gPyB7IHN0YXJ0OiAwIH0gOiB1bmRlZmlu
ZWQpOworICAgICAgICAgIHByb3AudHlwZSA9IGlzUGF0dGVybiA/ICJSZXN0RWxlbWVudCIgOiAi
U3ByZWFkRWxlbWVudCI7CisgICAgICAgICAgaWYgKGlzUGF0dGVybikgdGhpcy50b0Fzc2lnbmFi
bGUocHJvcC5hcmd1bWVudCwgdHJ1ZSwgIm9iamVjdCBwYXR0ZXJuIik7CisgICAgICAgICAgbm9k
ZS5wcm9wZXJ0aWVzLnB1c2gocHJvcCk7CisgICAgICAgICAgaWYgKGlzUGF0dGVybikgeworICAg
ICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnN0YXRlLnN0YXJ0OworICAgICAgICAgICAg
aWYgKGZpcnN0UmVzdExvY2F0aW9uICE9PSBudWxsKSB7CisgICAgICAgICAgICAgIHRoaXMudW5l
eHBlY3RlZChmaXJzdFJlc3RMb2NhdGlvbiwgIkNhbm5vdCBoYXZlIG11bHRpcGxlIHJlc3QgZWxl
bWVudHMgd2hlbiBkZXN0cnVjdHVyaW5nIik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMu
ZWF0KHR0LmJyYWNlUikpIHsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHRoaXMubWF0Y2godHQuY29tbWEpICYmIHRoaXMubG9va2FoZWFkKCkudHlwZSA9PT0g
dHQuYnJhY2VSKSB7CisgICAgICAgICAgICAgIHRoaXMudW5leHBlY3RlZChwb3NpdGlvbiwgIkEg
dHJhaWxpbmcgY29tbWEgaXMgbm90IHBlcm1pdHRlZCBhZnRlciB0aGUgcmVzdCBlbGVtZW50Iik7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBmaXJzdFJlc3RMb2NhdGlvbiA9
IHBvc2l0aW9uOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgcHJvcC5tZXRob2QgPSBmYWxzZTsKKyAgICAgICAgcHJvcC5zaG9ydGhh
bmQgPSBmYWxzZTsKKworICAgICAgICBpZiAoaXNQYXR0ZXJuIHx8IHJlZlNob3J0aGFuZERlZmF1
bHRQb3MpIHsKKyAgICAgICAgICBzdGFydFBvcyA9IHRoaXMuc3RhdGUuc3RhcnQ7CisgICAgICAg
ICAgc3RhcnRMb2MgPSB0aGlzLnN0YXRlLnN0YXJ0TG9jOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCFpc1BhdHRlcm4pIHsKKyAgICAgICAgICBpc0dlbmVyYXRvciA9IHRoaXMuZWF0KHR0LnN0
YXIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFpc1BhdHRlcm4gJiYgdGhpcy5pc0NvbnRl
eHR1YWwoImFzeW5jIikpIHsKKyAgICAgICAgICBpZiAoaXNHZW5lcmF0b3IpIHRoaXMudW5leHBl
Y3RlZCgpOworCisgICAgICAgICAgY29uc3QgYXN5bmNJZCA9IHRoaXMucGFyc2VJZGVudGlmaWVy
KCk7CisgICAgICAgICAgaWYgKHRoaXMubWF0Y2godHQuY29sb24pIHx8IHRoaXMubWF0Y2godHQu
cGFyZW5MKSB8fCB0aGlzLm1hdGNoKHR0LmJyYWNlUikgfHwgdGhpcy5tYXRjaCh0dC5lcSkgfHwg
dGhpcy5tYXRjaCh0dC5jb21tYSkpIHsKKyAgICAgICAgICAgIHByb3Aua2V5ID0gYXN5bmNJZDsK
KyAgICAgICAgICAgIHByb3AuY29tcHV0ZWQgPSBmYWxzZTsKKyAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaXNBc3luYyA9IHRydWU7CisgICAgICAgICAgICBpZiAodGhpcy5oYXNQbHVn
aW4oImFzeW5jR2VuZXJhdG9ycyIpKSBpc0dlbmVyYXRvciA9IHRoaXMuZWF0KHR0LnN0YXIpOwor
ICAgICAgICAgICAgdGhpcy5wYXJzZVByb3BlcnR5TmFtZShwcm9wKTsKKyAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy5wYXJzZVByb3BlcnR5TmFtZShwcm9wKTsK
KyAgICAgICAgfQorCisgICAgICAgIHRoaXMucGFyc2VPYmpQcm9wVmFsdWUocHJvcCwgc3RhcnRQ
b3MsIHN0YXJ0TG9jLCBpc0dlbmVyYXRvciwgaXNBc3luYywgaXNQYXR0ZXJuLCByZWZTaG9ydGhh
bmREZWZhdWx0UG9zKTsKKyAgICAgICAgdGhpcy5jaGVja1Byb3BDbGFzaChwcm9wLCBwcm9wSGFz
aCk7CisKKyAgICAgICAgaWYgKHByb3Auc2hvcnRoYW5kKSB7CisgICAgICAgICAgdGhpcy5hZGRF
eHRyYShwcm9wLCAic2hvcnRoYW5kIiwgdHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBub2Rl
LnByb3BlcnRpZXMucHVzaChwcm9wKTsKKyAgICAgIH0KKworICAgICAgaWYgKGZpcnN0UmVzdExv
Y2F0aW9uICE9PSBudWxsKSB7CisgICAgICAgIHRoaXMudW5leHBlY3RlZChmaXJzdFJlc3RMb2Nh
dGlvbiwgIlRoZSByZXN0IGVsZW1lbnQgaGFzIHRvIGJlIHRoZSBsYXN0IGVsZW1lbnQgd2hlbiBk
ZXN0cnVjdHVyaW5nIik7CisgICAgICB9CisKKyAgICAgIGlmIChkZWNvcmF0b3JzLmxlbmd0aCkg
eworICAgICAgICB0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsICJZb3UgaGF2ZSB0cmFpbGlu
ZyBkZWNvcmF0b3JzIHdpdGggbm8gcHJvcGVydHkiKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJu
IHRoaXMuZmluaXNoTm9kZShub2RlLCBpc1BhdHRlcm4gPyAiT2JqZWN0UGF0dGVybiIgOiAiT2Jq
ZWN0RXhwcmVzc2lvbiIpOworICAgIH07CisKKyAgICBwcC5pc0dldHRlck9yU2V0dGVyTWV0aG9k
ID0gZnVuY3Rpb24gKHByb3AsIGlzUGF0dGVybikgeworICAgICAgcmV0dXJuICFpc1BhdHRlcm4g
JiYKKyAgICAgICAgIXByb3AuY29tcHV0ZWQgJiYKKyAgICAgICAgcHJvcC5rZXkudHlwZSA9PT0g
IklkZW50aWZpZXIiICYmCisgICAgICAgIChwcm9wLmtleS5uYW1lID09PSAiZ2V0IiB8fCBwcm9w
LmtleS5uYW1lID09PSAic2V0IikgJiYKKyAgICAgICAgKAorICAgICAgICAgIHRoaXMubWF0Y2go
dHQuc3RyaW5nKSB8fCAvLyBnZXQgInN0cmluZyIoKSB7fQorICAgICAgICAgIHRoaXMubWF0Y2go
dHQubnVtKSB8fCAvLyBnZXQgMSgpIHt9CisgICAgICAgICAgdGhpcy5tYXRjaCh0dC5icmFja2V0
TCkgfHwgLy8gZ2V0IFsic3RyaW5nIl0oKSB7fQorICAgICAgICAgIHRoaXMubWF0Y2godHQubmFt
ZSkgfHwgLy8gZ2V0IGZvbygpIHt9CisgICAgICAgICAgdGhpcy5zdGF0ZS50eXBlLmtleXdvcmQg
Ly8gZ2V0IGRlYnVnZ2VyKCkge30KKyAgICAgICAgKTsKKyAgICB9OworCisgICAgLy8gZ2V0IG1l
dGhvZHMgYXJlbid0IGFsbG93ZWQgdG8gaGF2ZSBhbnkgcGFyYW1ldGVycworICAgIC8vIHNldCBt
ZXRob2RzIG11c3QgaGF2ZSBleGFjdGx5IDEgcGFyYW1ldGVyCisgICAgcHAuY2hlY2tHZXR0ZXJT
ZXR0ZXJQYXJhbUNvdW50ID0gZnVuY3Rpb24gKG1ldGhvZCkgeworICAgICAgY29uc3QgcGFyYW1D
b3VudCA9IG1ldGhvZC5raW5kID09PSAiZ2V0IiA/IDAgOiAxOworICAgICAgaWYgKG1ldGhvZC5w
YXJhbXMubGVuZ3RoICE9PSBwYXJhbUNvdW50KSB7CisgICAgICAgIGNvbnN0IHN0YXJ0ID0gbWV0
aG9kLnN0YXJ0OworICAgICAgICBpZiAobWV0aG9kLmtpbmQgPT09ICJnZXQiKSB7CisgICAgICAg
ICAgdGhpcy5yYWlzZShzdGFydCwgImdldHRlciBzaG91bGQgaGF2ZSBubyBwYXJhbXMiKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aGlzLnJhaXNlKHN0YXJ0LCAic2V0dGVyIHNob3Vs
ZCBoYXZlIGV4YWN0bHkgb25lIHBhcmFtIik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9Owor
CisgICAgcHAucGFyc2VPYmplY3RNZXRob2QgPSBmdW5jdGlvbiAocHJvcCwgaXNHZW5lcmF0b3Is
IGlzQXN5bmMsIGlzUGF0dGVybikgeworICAgICAgaWYgKGlzQXN5bmMgfHwgaXNHZW5lcmF0b3Ig
fHwgdGhpcy5tYXRjaCh0dC5wYXJlbkwpKSB7CisgICAgICAgIGlmIChpc1BhdHRlcm4pIHRoaXMu
dW5leHBlY3RlZCgpOworICAgICAgICBwcm9wLmtpbmQgPSAibWV0aG9kIjsKKyAgICAgICAgcHJv
cC5tZXRob2QgPSB0cnVlOworICAgICAgICB0aGlzLnBhcnNlTWV0aG9kKHByb3AsIGlzR2VuZXJh
dG9yLCBpc0FzeW5jKTsKKworICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKHByb3AsICJP
YmplY3RNZXRob2QiKTsKKyAgICAgIH0KKworICAgICAgaWYgKHRoaXMuaXNHZXR0ZXJPclNldHRl
ck1ldGhvZChwcm9wLCBpc1BhdHRlcm4pKSB7CisgICAgICAgIGlmIChpc0dlbmVyYXRvciB8fCBp
c0FzeW5jKSB0aGlzLnVuZXhwZWN0ZWQoKTsKKyAgICAgICAgcHJvcC5raW5kID0gcHJvcC5rZXku
bmFtZTsKKyAgICAgICAgdGhpcy5wYXJzZVByb3BlcnR5TmFtZShwcm9wKTsKKyAgICAgICAgdGhp
cy5wYXJzZU1ldGhvZChwcm9wKTsKKyAgICAgICAgdGhpcy5jaGVja0dldHRlclNldHRlclBhcmFt
Q291bnQocHJvcCk7CisKKyAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShwcm9wLCAiT2Jq
ZWN0TWV0aG9kIik7CisgICAgICB9CisgICAgfTsKKworICAgIHBwLnBhcnNlT2JqZWN0UHJvcGVy
dHkgPSBmdW5jdGlvbiAocHJvcCwgc3RhcnRQb3MsIHN0YXJ0TG9jLCBpc1BhdHRlcm4sIHJlZlNo
b3J0aGFuZERlZmF1bHRQb3MpIHsKKyAgICAgIGlmICh0aGlzLmVhdCh0dC5jb2xvbikpIHsKKyAg
ICAgICAgcHJvcC52YWx1ZSA9IGlzUGF0dGVybiA/IHRoaXMucGFyc2VNYXliZURlZmF1bHQodGhp
cy5zdGF0ZS5zdGFydCwgdGhpcy5zdGF0ZS5zdGFydExvYykgOiB0aGlzLnBhcnNlTWF5YmVBc3Np
Z24oZmFsc2UsIHJlZlNob3J0aGFuZERlZmF1bHRQb3MpOworCisgICAgICAgIHJldHVybiB0aGlz
LmZpbmlzaE5vZGUocHJvcCwgIk9iamVjdFByb3BlcnR5Iik7CisgICAgICB9CisKKyAgICAgIGlm
ICghcHJvcC5jb21wdXRlZCAmJiBwcm9wLmtleS50eXBlID09PSAiSWRlbnRpZmllciIpIHsKKyAg
ICAgICAgaWYgKGlzUGF0dGVybikgeworICAgICAgICAgIHRoaXMuY2hlY2tSZXNlcnZlZFdvcmQo
cHJvcC5rZXkubmFtZSwgcHJvcC5rZXkuc3RhcnQsIHRydWUsIHRydWUpOworICAgICAgICAgIHBy
b3AudmFsdWUgPSB0aGlzLnBhcnNlTWF5YmVEZWZhdWx0KHN0YXJ0UG9zLCBzdGFydExvYywgcHJv
cC5rZXkuX19jbG9uZSgpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1hdGNoKHR0LmVxKSAm
JiByZWZTaG9ydGhhbmREZWZhdWx0UG9zKSB7CisgICAgICAgICAgaWYgKCFyZWZTaG9ydGhhbmRE
ZWZhdWx0UG9zLnN0YXJ0KSB7CisgICAgICAgICAgICByZWZTaG9ydGhhbmREZWZhdWx0UG9zLnN0
YXJ0ID0gdGhpcy5zdGF0ZS5zdGFydDsKKyAgICAgICAgICB9CisgICAgICAgICAgcHJvcC52YWx1
ZSA9IHRoaXMucGFyc2VNYXliZURlZmF1bHQoc3RhcnRQb3MsIHN0YXJ0TG9jLCBwcm9wLmtleS5f
X2Nsb25lKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHByb3AudmFsdWUgPSBwcm9w
LmtleS5fX2Nsb25lKCk7CisgICAgICAgIH0KKyAgICAgICAgcHJvcC5zaG9ydGhhbmQgPSB0cnVl
OworCisgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUocHJvcCwgIk9iamVjdFByb3BlcnR5
Iik7CisgICAgICB9CisgICAgfTsKKworICAgIHBwLnBhcnNlT2JqUHJvcFZhbHVlID0gZnVuY3Rp
b24gKHByb3AsIHN0YXJ0UG9zLCBzdGFydExvYywgaXNHZW5lcmF0b3IsIGlzQXN5bmMsIGlzUGF0
dGVybiwgcmVmU2hvcnRoYW5kRGVmYXVsdFBvcykgeworICAgICAgY29uc3Qgbm9kZSA9CisgICAg
ICAgIHRoaXMucGFyc2VPYmplY3RNZXRob2QocHJvcCwgaXNHZW5lcmF0b3IsIGlzQXN5bmMsIGlz
UGF0dGVybikgfHwKKyAgICAgICAgdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5KHByb3AsIHN0YXJ0
UG9zLCBzdGFydExvYywgaXNQYXR0ZXJuLCByZWZTaG9ydGhhbmREZWZhdWx0UG9zKTsKKworICAg
ICAgaWYgKCFub2RlKSB0aGlzLnVuZXhwZWN0ZWQoKTsKKworICAgICAgcmV0dXJuIG5vZGU7Cisg
ICAgfTsKKworICAgIHBwLnBhcnNlUHJvcGVydHlOYW1lID0gZnVuY3Rpb24gKHByb3ApIHsKKyAg
ICAgIGlmICh0aGlzLmVhdCh0dC5icmFja2V0TCkpIHsKKyAgICAgICAgcHJvcC5jb21wdXRlZCA9
IHRydWU7CisgICAgICAgIHByb3Aua2V5ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKCk7CisgICAg
ICAgIHRoaXMuZXhwZWN0KHR0LmJyYWNrZXRSKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHBy
b3AuY29tcHV0ZWQgPSBmYWxzZTsKKyAgICAgICAgY29uc3Qgb2xkSW5Qcm9wZXJ0eU5hbWUgPSB0
aGlzLnN0YXRlLmluUHJvcGVydHlOYW1lOworICAgICAgICB0aGlzLnN0YXRlLmluUHJvcGVydHlO
YW1lID0gdHJ1ZTsKKyAgICAgICAgcHJvcC5rZXkgPSAodGhpcy5tYXRjaCh0dC5udW0pIHx8IHRo
aXMubWF0Y2godHQuc3RyaW5nKSkgPyB0aGlzLnBhcnNlRXhwckF0b20oKSA6IHRoaXMucGFyc2VJ
ZGVudGlmaWVyKHRydWUpOworICAgICAgICB0aGlzLnN0YXRlLmluUHJvcGVydHlOYW1lID0gb2xk
SW5Qcm9wZXJ0eU5hbWU7CisgICAgICB9CisgICAgICByZXR1cm4gcHJvcC5rZXk7CisgICAgfTsK
KworICAgIC8vIEluaXRpYWxpemUgZW1wdHkgZnVuY3Rpb24gbm9kZS4KKworICAgIHBwLmluaXRG
dW5jdGlvbiA9IGZ1bmN0aW9uIChub2RlLCBpc0FzeW5jKSB7CisgICAgICBub2RlLmlkID0gbnVs
bDsKKyAgICAgIG5vZGUuZ2VuZXJhdG9yID0gZmFsc2U7CisgICAgICBub2RlLmV4cHJlc3Npb24g
PSBmYWxzZTsKKyAgICAgIG5vZGUuYXN5bmMgPSAhIWlzQXN5bmM7CisgICAgfTsKKworICAgIC8v
IFBhcnNlIG9iamVjdCBvciBjbGFzcyBtZXRob2QuCisKKyAgICBwcC5wYXJzZU1ldGhvZCA9IGZ1
bmN0aW9uIChub2RlLCBpc0dlbmVyYXRvciwgaXNBc3luYykgeworICAgICAgY29uc3Qgb2xkSW5N
ZXRob2QgPSB0aGlzLnN0YXRlLmluTWV0aG9kOworICAgICAgdGhpcy5zdGF0ZS5pbk1ldGhvZCA9
IG5vZGUua2luZCB8fCB0cnVlOworICAgICAgdGhpcy5pbml0RnVuY3Rpb24obm9kZSwgaXNBc3lu
Yyk7CisgICAgICB0aGlzLmV4cGVjdCh0dC5wYXJlbkwpOworICAgICAgbm9kZS5wYXJhbXMgPSB0
aGlzLnBhcnNlQmluZGluZ0xpc3QodHQucGFyZW5SKTsKKyAgICAgIG5vZGUuZ2VuZXJhdG9yID0g
ISFpc0dlbmVyYXRvcjsKKyAgICAgIHRoaXMucGFyc2VGdW5jdGlvbkJvZHkobm9kZSk7CisgICAg
ICB0aGlzLnN0YXRlLmluTWV0aG9kID0gb2xkSW5NZXRob2Q7CisgICAgICByZXR1cm4gbm9kZTsK
KyAgICB9OworCisgICAgLy8gUGFyc2UgYXJyb3cgZnVuY3Rpb24gZXhwcmVzc2lvbiB3aXRoIGdp
dmVuIHBhcmFtZXRlcnMuCisKKyAgICBwcC5wYXJzZUFycm93RXhwcmVzc2lvbiA9IGZ1bmN0aW9u
IChub2RlLCBwYXJhbXMsIGlzQXN5bmMpIHsKKyAgICAgIHRoaXMuaW5pdEZ1bmN0aW9uKG5vZGUs
IGlzQXN5bmMpOworICAgICAgbm9kZS5wYXJhbXMgPSB0aGlzLnRvQXNzaWduYWJsZUxpc3QocGFy
YW1zLCB0cnVlLCAiYXJyb3cgZnVuY3Rpb24gcGFyYW1ldGVycyIpOworICAgICAgdGhpcy5wYXJz
ZUZ1bmN0aW9uQm9keShub2RlLCB0cnVlKTsKKyAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUo
bm9kZSwgIkFycm93RnVuY3Rpb25FeHByZXNzaW9uIik7CisgICAgfTsKKworICAgIHBwLmlzU3Ry
aWN0Qm9keSA9IGZ1bmN0aW9uIChub2RlLCBpc0V4cHJlc3Npb24pIHsKKyAgICAgIGlmICghaXNF
eHByZXNzaW9uICYmIG5vZGUuYm9keS5kaXJlY3RpdmVzLmxlbmd0aCkgeworICAgICAgICBmb3Ig
KGNvbnN0IGRpcmVjdGl2ZSBvZiAobm9kZS5ib2R5LmRpcmVjdGl2ZXMpKSB7CisgICAgICAgICAg
aWYgKGRpcmVjdGl2ZS52YWx1ZS52YWx1ZSA9PT0gInVzZSBzdHJpY3QiKSB7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICAvLyBQYXJzZSBmdW5jdGlvbiBib2R5IGFuZCBj
aGVjayBwYXJhbWV0ZXJzLgorICAgIHBwLnBhcnNlRnVuY3Rpb25Cb2R5ID0gZnVuY3Rpb24gKG5v
ZGUsIGFsbG93RXhwcmVzc2lvbikgeworICAgICAgY29uc3QgaXNFeHByZXNzaW9uID0gYWxsb3dF
eHByZXNzaW9uICYmICF0aGlzLm1hdGNoKHR0LmJyYWNlTCk7CisKKyAgICAgIGNvbnN0IG9sZElu
QXN5bmMgPSB0aGlzLnN0YXRlLmluQXN5bmM7CisgICAgICB0aGlzLnN0YXRlLmluQXN5bmMgPSBu
b2RlLmFzeW5jOworICAgICAgaWYgKGlzRXhwcmVzc2lvbikgeworICAgICAgICBub2RlLmJvZHkg
PSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKTsKKyAgICAgICAgbm9kZS5leHByZXNzaW9uID0gdHJ1
ZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFN0YXJ0IGEgbmV3IHNjb3BlIHdpdGggcmVn
YXJkIHRvIGxhYmVscyBhbmQgdGhlIGBpbkZ1bmN0aW9uYAorICAgICAgICAvLyBmbGFnIChyZXN0
b3JlIHRoZW0gdG8gdGhlaXIgb2xkIHZhbHVlIGFmdGVyd2FyZHMpLgorICAgICAgICBjb25zdCBv
bGRJbkZ1bmMgPSB0aGlzLnN0YXRlLmluRnVuY3Rpb247CisgICAgICAgIGNvbnN0IG9sZEluR2Vu
ID0gdGhpcy5zdGF0ZS5pbkdlbmVyYXRvcjsKKyAgICAgICAgY29uc3Qgb2xkTGFiZWxzID0gdGhp
cy5zdGF0ZS5sYWJlbHM7CisgICAgICAgIHRoaXMuc3RhdGUuaW5GdW5jdGlvbiA9IHRydWU7IHRo
aXMuc3RhdGUuaW5HZW5lcmF0b3IgPSBub2RlLmdlbmVyYXRvcjsgdGhpcy5zdGF0ZS5sYWJlbHMg
PSBbXTsKKyAgICAgICAgbm9kZS5ib2R5ID0gdGhpcy5wYXJzZUJsb2NrKHRydWUpOworICAgICAg
ICBub2RlLmV4cHJlc3Npb24gPSBmYWxzZTsKKyAgICAgICAgdGhpcy5zdGF0ZS5pbkZ1bmN0aW9u
ID0gb2xkSW5GdW5jOyB0aGlzLnN0YXRlLmluR2VuZXJhdG9yID0gb2xkSW5HZW47IHRoaXMuc3Rh
dGUubGFiZWxzID0gb2xkTGFiZWxzOworICAgICAgfQorICAgICAgdGhpcy5zdGF0ZS5pbkFzeW5j
ID0gb2xkSW5Bc3luYzsKKworICAgICAgLy8gSWYgdGhpcyBpcyBhIHN0cmljdCBtb2RlIGZ1bmN0
aW9uLCB2ZXJpZnkgdGhhdCBhcmd1bWVudCBuYW1lcworICAgICAgLy8gYXJlIG5vdCByZXBlYXRl
ZCwgYW5kIGl0IGRvZXMgbm90IHRyeSB0byBiaW5kIHRoZSB3b3JkcyBgZXZhbGAKKyAgICAgIC8v
IG9yIGBhcmd1bWVudHNgLgorICAgICAgY29uc3QgaXNTdHJpY3QgPSB0aGlzLmlzU3RyaWN0Qm9k
eShub2RlLCBpc0V4cHJlc3Npb24pOworICAgICAgLy8gQWxzbyBjaGVjayB3aGVuIGFsbG93RXhw
cmVzc2lvbiA9PT0gdHJ1ZSBmb3IgYXJyb3cgZnVuY3Rpb25zCisgICAgICBjb25zdCBjaGVja0xW
YWwgPSB0aGlzLnN0YXRlLnN0cmljdCB8fCBhbGxvd0V4cHJlc3Npb24gfHwgaXNTdHJpY3Q7CisK
KyAgICAgIGlmIChpc1N0cmljdCAmJiBub2RlLmlkICYmIG5vZGUuaWQudHlwZSA9PT0gIklkZW50
aWZpZXIiICYmIG5vZGUuaWQubmFtZSA9PT0gInlpZWxkIikgeworICAgICAgICB0aGlzLnJhaXNl
KG5vZGUuaWQuc3RhcnQsICJCaW5kaW5nIHlpZWxkIGluIHN0cmljdCBtb2RlIik7CisgICAgICB9
CisKKyAgICAgIGlmIChjaGVja0xWYWwpIHsKKyAgICAgICAgY29uc3QgbmFtZUhhc2ggPSBPYmpl
Y3QuY3JlYXRlKG51bGwpOworICAgICAgICBjb25zdCBvbGRTdHJpY3QgPSB0aGlzLnN0YXRlLnN0
cmljdDsKKyAgICAgICAgaWYgKGlzU3RyaWN0KSB0aGlzLnN0YXRlLnN0cmljdCA9IHRydWU7Cisg
ICAgICAgIGlmIChub2RlLmlkKSB7CisgICAgICAgICAgdGhpcy5jaGVja0xWYWwobm9kZS5pZCwg
dHJ1ZSwgdW5kZWZpbmVkLCAiZnVuY3Rpb24gbmFtZSIpOworICAgICAgICB9CisgICAgICAgIGZv
ciAoY29uc3QgcGFyYW0gb2YgKG5vZGUucGFyYW1zKSkgeworICAgICAgICAgIGlmIChpc1N0cmlj
dCAmJiBwYXJhbS50eXBlICE9PSAiSWRlbnRpZmllciIpIHsKKyAgICAgICAgICAgIHRoaXMucmFp
c2UocGFyYW0uc3RhcnQsICJOb24tc2ltcGxlIHBhcmFtZXRlciBpbiBzdHJpY3QgbW9kZSIpOwor
ICAgICAgICAgIH0KKyAgICAgICAgICB0aGlzLmNoZWNrTFZhbChwYXJhbSwgdHJ1ZSwgbmFtZUhh
c2gsICJmdW5jdGlvbiBwYXJhbWV0ZXIgbGlzdCIpOworICAgICAgICB9CisgICAgICAgIHRoaXMu
c3RhdGUuc3RyaWN0ID0gb2xkU3RyaWN0OworICAgICAgfQorICAgIH07CisKKyAgICAvLyBQYXJz
ZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBleHByZXNzaW9ucywgYW5kIHJldHVybnMgdGhl
bSBhcworICAgIC8vIGFuIGFycmF5LiBgY2xvc2VgIGlzIHRoZSB0b2tlbiB0eXBlIHRoYXQgZW5k
cyB0aGUgbGlzdCwgYW5kCisgICAgLy8gYGFsbG93RW1wdHlgIGNhbiBiZSB0dXJuZWQgb24gdG8g
YWxsb3cgc3Vic2VxdWVudCBjb21tYXMgd2l0aAorICAgIC8vIG5vdGhpbmcgaW4gYmV0d2VlbiB0
aGVtIHRvIGJlIHBhcnNlZCBhcyBgbnVsbGAgKHdoaWNoIGlzIG5lZWRlZAorICAgIC8vIGZvciBh
cnJheSBsaXRlcmFscykuCisKKyAgICBwcC5wYXJzZUV4cHJMaXN0ID0gZnVuY3Rpb24gKGNsb3Nl
LCBhbGxvd0VtcHR5LCByZWZTaG9ydGhhbmREZWZhdWx0UG9zKSB7CisgICAgICBjb25zdCBlbHRz
ID0gW107CisgICAgICBsZXQgZmlyc3QgPSB0cnVlOworCisgICAgICB3aGlsZSAoIXRoaXMuZWF0
KGNsb3NlKSkgeworICAgICAgICBpZiAoZmlyc3QpIHsKKyAgICAgICAgICBmaXJzdCA9IGZhbHNl
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRoaXMuZXhwZWN0KHR0LmNvbW1hKTsKKyAg
ICAgICAgICBpZiAodGhpcy5lYXQoY2xvc2UpKSBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGVsdHMucHVzaCh0aGlzLnBhcnNlRXhwckxpc3RJdGVtKGFsbG93RW1wdHksIHJlZlNob3J0aGFu
ZERlZmF1bHRQb3MpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBlbHRzOworICAgIH07CisKKyAg
ICBwcC5wYXJzZUV4cHJMaXN0SXRlbSA9IGZ1bmN0aW9uIChhbGxvd0VtcHR5LCByZWZTaG9ydGhh
bmREZWZhdWx0UG9zLCByZWZOZWVkc0Fycm93UG9zKSB7CisgICAgICBsZXQgZWx0OworICAgICAg
aWYgKGFsbG93RW1wdHkgJiYgdGhpcy5tYXRjaCh0dC5jb21tYSkpIHsKKyAgICAgICAgZWx0ID0g
bnVsbDsKKyAgICAgIH0gZWxzZSBpZiAodGhpcy5tYXRjaCh0dC5lbGxpcHNpcykpIHsKKyAgICAg
ICAgZWx0ID0gdGhpcy5wYXJzZVNwcmVhZChyZWZTaG9ydGhhbmREZWZhdWx0UG9zKTsKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIGVsdCA9IHRoaXMucGFyc2VNYXliZUFzc2lnbihmYWxzZSwgcmVm
U2hvcnRoYW5kRGVmYXVsdFBvcywgdGhpcy5wYXJzZVBhcmVuSXRlbSwgcmVmTmVlZHNBcnJvd1Bv
cyk7CisgICAgICB9CisgICAgICByZXR1cm4gZWx0OworICAgIH07CisKKyAgICAvLyBQYXJzZSB0
aGUgbmV4dCB0b2tlbiBhcyBhbiBpZGVudGlmaWVyLiBJZiBgbGliZXJhbGAgaXMgdHJ1ZSAodXNl
ZAorICAgIC8vIHdoZW4gcGFyc2luZyBwcm9wZXJ0aWVzKSwgaXQgd2lsbCBhbHNvIGNvbnZlcnQg
a2V5d29yZHMgaW50bworICAgIC8vIGlkZW50aWZpZXJzLgorCisgICAgcHAucGFyc2VJZGVudGlm
aWVyID0gZnVuY3Rpb24gKGxpYmVyYWwpIHsKKyAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXJ0
Tm9kZSgpOworICAgICAgaWYgKCFsaWJlcmFsKSB7CisgICAgICAgIHRoaXMuY2hlY2tSZXNlcnZl
ZFdvcmQodGhpcy5zdGF0ZS52YWx1ZSwgdGhpcy5zdGF0ZS5zdGFydCwgISF0aGlzLnN0YXRlLnR5
cGUua2V5d29yZCwgZmFsc2UpOworICAgICAgfQorCisgICAgICBpZiAodGhpcy5tYXRjaCh0dC5u
YW1lKSkgeworICAgICAgICBub2RlLm5hbWUgPSB0aGlzLnN0YXRlLnZhbHVlOworICAgICAgfSBl
bHNlIGlmICh0aGlzLnN0YXRlLnR5cGUua2V5d29yZCkgeworICAgICAgICBub2RlLm5hbWUgPSB0
aGlzLnN0YXRlLnR5cGUua2V5d29yZDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMudW5l
eHBlY3RlZCgpOworICAgICAgfQorCisgICAgICBpZiAoIWxpYmVyYWwgJiYgbm9kZS5uYW1lID09
PSAiYXdhaXQiICYmIHRoaXMuc3RhdGUuaW5Bc3luYykgeworICAgICAgICB0aGlzLnJhaXNlKG5v
ZGUuc3RhcnQsICJpbnZhbGlkIHVzZSBvZiBhd2FpdCBpbnNpZGUgb2YgYW4gYXN5bmMgZnVuY3Rp
b24iKTsKKyAgICAgIH0KKworICAgICAgbm9kZS5sb2MuaWRlbnRpZmllck5hbWUgPSBub2RlLm5h
bWU7CisKKyAgICAgIHRoaXMubmV4dCgpOworICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShu
b2RlLCAiSWRlbnRpZmllciIpOworICAgIH07CisKKyAgICBwcC5jaGVja1Jlc2VydmVkV29yZCA9
IGZ1bmN0aW9uICh3b3JkLCBzdGFydExvYywgY2hlY2tLZXl3b3JkcywgaXNCaW5kaW5nKSB7Cisg
ICAgICBpZiAodGhpcy5pc1Jlc2VydmVkV29yZCh3b3JkKSB8fCAoY2hlY2tLZXl3b3JkcyAmJiB0
aGlzLmlzS2V5d29yZCh3b3JkKSkpIHsKKyAgICAgICAgdGhpcy5yYWlzZShzdGFydExvYywgd29y
ZCArICIgaXMgYSByZXNlcnZlZCB3b3JkIik7CisgICAgICB9CisKKyAgICAgIGlmICh0aGlzLnN0
YXRlLnN0cmljdCAmJiAocmVzZXJ2ZWRXb3Jkcy5zdHJpY3Qod29yZCkgfHwgKGlzQmluZGluZyAm
JiByZXNlcnZlZFdvcmRzLnN0cmljdEJpbmQod29yZCkpKSkgeworICAgICAgICB0aGlzLnJhaXNl
KHN0YXJ0TG9jLCB3b3JkICsgIiBpcyBhIHJlc2VydmVkIHdvcmQgaW4gc3RyaWN0IG1vZGUiKTsK
KyAgICAgIH0KKyAgICB9OworCisgICAgLy8gUGFyc2VzIGF3YWl0IGV4cHJlc3Npb24gaW5zaWRl
IGFzeW5jIGZ1bmN0aW9uLgorCisgICAgcHAucGFyc2VBd2FpdCA9IGZ1bmN0aW9uIChub2RlKSB7
CisgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogdGhpcyBjb25kaXRpb24gaXMgY2hlY2tl
ZCBhdCB0aGUgY2FsbCBzaXRlIHNvIHdvbid0IGJlIGhpdCBoZXJlCisgICAgICBpZiAoIXRoaXMu
c3RhdGUuaW5Bc3luYykgeworICAgICAgICB0aGlzLnVuZXhwZWN0ZWQoKTsKKyAgICAgIH0KKyAg
ICAgIGlmICh0aGlzLm1hdGNoKHR0LnN0YXIpKSB7CisgICAgICAgIHRoaXMucmFpc2Uobm9kZS5z
dGFydCwgImF3YWl0KiBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGFzeW5jIGZ1bmN0aW9ucyBw
cm9wb3NhbC4gVXNlIFByb21pc2UuYWxsKCkgaW5zdGVhZC4iKTsKKyAgICAgIH0KKyAgICAgIG5v
ZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlTWF5YmVVbmFyeSgpOworICAgICAgcmV0dXJuIHRoaXMu
ZmluaXNoTm9kZShub2RlLCAiQXdhaXRFeHByZXNzaW9uIik7CisgICAgfTsKKworICAgIC8vIFBh
cnNlcyB5aWVsZCBleHByZXNzaW9uIGluc2lkZSBnZW5lcmF0b3IuCisKKyAgICBwcC5wYXJzZVlp
ZWxkID0gZnVuY3Rpb24gKCkgeworICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7
CisgICAgICB0aGlzLm5leHQoKTsKKyAgICAgIGlmICgKKyAgICAgICAgdGhpcy5tYXRjaCh0dC5z
ZW1pKSB8fAorICAgICAgICB0aGlzLmNhbkluc2VydFNlbWljb2xvbigpIHx8CisgICAgICAgICgh
dGhpcy5tYXRjaCh0dC5zdGFyKSAmJiAhdGhpcy5zdGF0ZS50eXBlLnN0YXJ0c0V4cHIpCisgICAg
ICApIHsKKyAgICAgICAgbm9kZS5kZWxlZ2F0ZSA9IGZhbHNlOworICAgICAgICBub2RlLmFyZ3Vt
ZW50ID0gbnVsbDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG5vZGUuZGVsZWdhdGUgPSB0aGlz
LmVhdCh0dC5zdGFyKTsKKyAgICAgICAgbm9kZS5hcmd1bWVudCA9IHRoaXMucGFyc2VNYXliZUFz
c2lnbigpOworICAgICAgfQorICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAiWWll
bGRFeHByZXNzaW9uIik7CisgICAgfTsKKworfQorCisvLyBwYXJzZXIvbG9jYXRpb24uanMKK2Nv
bnN0IHBhcnNlckxvY2F0aW9uSlMgPSB7fTsKK3sKKyAgICBjb25zdCB7IGdldExpbmVJbmZvIH0g
PSB1dGlsTG9jYXRpb25KUzsKKyAgICBjb25zdCBQYXJzZXIgPSBwYXJzZXJJbmRleEpTOworCisg
ICAgY29uc3QgcHAgPSBQYXJzZXIucHJvdG90eXBlOworCisgICAgLy8gVGhpcyBmdW5jdGlvbiBp
cyB1c2VkIHRvIHJhaXNlIGV4Y2VwdGlvbnMgb24gcGFyc2UgZXJyb3JzLiBJdAorICAgIC8vIHRh
a2VzIGFuIG9mZnNldCBpbnRlZ2VyIChpbnRvIHRoZSBjdXJyZW50IGBpbnB1dGApIHRvIGluZGlj
YXRlCisgICAgLy8gdGhlIGxvY2F0aW9uIG9mIHRoZSBlcnJvciwgYXR0YWNoZXMgdGhlIHBvc2l0
aW9uIHRvIHRoZSBlbmQKKyAgICAvLyBvZiB0aGUgZXJyb3IgbWVzc2FnZSwgYW5kIHRoZW4gcmFp
c2VzIGEgYFN5bnRheEVycm9yYCB3aXRoIHRoYXQKKyAgICAvLyBtZXNzYWdlLgorCisgICAgcHAu
cmFpc2UgPSBmdW5jdGlvbiAocG9zLCBtZXNzYWdlKSB7CisgICAgICBjb25zdCBsb2MgPSBnZXRM
aW5lSW5mbyh0aGlzLmlucHV0LCBwb3MpOworICAgICAgbWVzc2FnZSArPSBgICgke2xvYy5saW5l
fToke2xvYy5jb2x1bW59KWA7CisgICAgICBjb25zdCBlcnIgPSBuZXcgU3ludGF4RXJyb3IobWVz
c2FnZSk7CisgICAgICBlcnIucG9zID0gcG9zOworICAgICAgZXJyLmxvYyA9IGxvYzsKKyAgICAg
IHRocm93IGVycjsKKyAgICB9OworfQorCisvLyBwYXJzZXIvbHZhbC5qcworY29uc3QgcGFyc2Vy
THZhbEpTID0ge307Cit7CisgICAgY29uc3QgeyB0eXBlczogdHQgfSA9IHRva2VuaXplclR5cGVz
SlM7CisgICAgY29uc3QgUGFyc2VyID0gcGFyc2VySW5kZXhKUzsKKworICAgIGNvbnN0IHBwID0g
UGFyc2VyLnByb3RvdHlwZTsKKworICAgIC8vIENvbnZlcnQgZXhpc3RpbmcgZXhwcmVzc2lvbiBh
dG9tIHRvIGFzc2lnbmFibGUgcGF0dGVybgorICAgIC8vIGlmIHBvc3NpYmxlLgorCisgICAgcHAu
dG9Bc3NpZ25hYmxlID0gZnVuY3Rpb24gKG5vZGUsIGlzQmluZGluZywgY29udGV4dERlc2NyaXB0
aW9uKSB7CisgICAgICBpZiAobm9kZSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgewor
ICAgICAgICAgIGNhc2UgIklkZW50aWZpZXIiOgorICAgICAgICAgIGNhc2UgIk9iamVjdFBhdHRl
cm4iOgorICAgICAgICAgIGNhc2UgIkFycmF5UGF0dGVybiI6CisgICAgICAgICAgY2FzZSAiQXNz
aWdubWVudFBhdHRlcm4iOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICJP
YmplY3RFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIG5vZGUudHlwZSA9ICJPYmplY3RQYXR0ZXJu
IjsKKyAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiAobm9kZS5wcm9wZXJ0aWVzKSkgewor
ICAgICAgICAgICAgICBpZiAocHJvcC50eXBlID09PSAiT2JqZWN0TWV0aG9kIikgeworICAgICAg
ICAgICAgICAgIGlmIChwcm9wLmtpbmQgPT09ICJnZXQiIHx8IHByb3Aua2luZCA9PT0gInNldCIp
IHsKKyAgICAgICAgICAgICAgICAgIHRoaXMucmFpc2UocHJvcC5rZXkuc3RhcnQsICJPYmplY3Qg
cGF0dGVybiBjYW4ndCBjb250YWluIGdldHRlciBvciBzZXR0ZXIiKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgdGhpcy5yYWlzZShwcm9wLmtleS5zdGFydCwg
Ik9iamVjdCBwYXR0ZXJuIGNhbid0IGNvbnRhaW4gbWV0aG9kcyIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRvQXNzaWdu
YWJsZShwcm9wLCBpc0JpbmRpbmcsICJvYmplY3QgZGVzdHJ1Y3R1cmluZyBwYXR0ZXJuIik7Cisg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgY2FzZSAiT2JqZWN0UHJvcGVydHkiOgorICAgICAgICAgICAgdGhpcy50b0Fzc2lnbmFi
bGUobm9kZS52YWx1ZSwgaXNCaW5kaW5nLCBjb250ZXh0RGVzY3JpcHRpb24pOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICJTcHJlYWRFbGVtZW50IjoKKyAgICAgICAgICAg
IG5vZGUudHlwZSA9ICJSZXN0RWxlbWVudCI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgIGNhc2UgIkFycmF5RXhwcmVzc2lvbiI6CisgICAgICAgICAgICBub2RlLnR5cGUgPSAiQXJy
YXlQYXR0ZXJuIjsKKyAgICAgICAgICAgIHRoaXMudG9Bc3NpZ25hYmxlTGlzdChub2RlLmVsZW1l
bnRzLCBpc0JpbmRpbmcsIGNvbnRleHREZXNjcmlwdGlvbik7CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgIGNhc2UgIkFzc2lnbm1lbnRFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIGlm
IChub2RlLm9wZXJhdG9yID09PSAiPSIpIHsKKyAgICAgICAgICAgICAgbm9kZS50eXBlID0gIkFz
c2lnbm1lbnRQYXR0ZXJuIjsKKyAgICAgICAgICAgICAgZGVsZXRlIG5vZGUub3BlcmF0b3I7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICB0aGlzLnJhaXNlKG5vZGUubGVmdC5l
bmQsICJPbmx5ICc9JyBvcGVyYXRvciBjYW4gYmUgdXNlZCBmb3Igc3BlY2lmeWluZyBkZWZhdWx0
IHZhbHVlLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICBjYXNlICJNZW1iZXJFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIGlmICghaXNCaW5kaW5nKSBi
cmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2Ug
PSAiSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSIgKworICAgICAgICAgICAgICAoY29udGV4dERlc2Ny
aXB0aW9uID8gIiBpbiAiICsgY29udGV4dERlc2NyaXB0aW9uIDogLyogaXN0YW5idWwgaWdub3Jl
IG5leHQgKi8gImV4cHJlc3Npb24iKTsKKyAgICAgICAgICAgIHRoaXMucmFpc2Uobm9kZS5zdGFy
dCwgbWVzc2FnZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1
cm4gbm9kZTsKKyAgICB9OworCisgICAgLy8gQ29udmVydCBsaXN0IG9mIGV4cHJlc3Npb24gYXRv
bXMgdG8gYmluZGluZyBsaXN0LgorCisgICAgcHAudG9Bc3NpZ25hYmxlTGlzdCA9IGZ1bmN0aW9u
IChleHByTGlzdCwgaXNCaW5kaW5nLCBjb250ZXh0RGVzY3JpcHRpb24pIHsKKyAgICAgIGxldCBl
bmQgPSBleHByTGlzdC5sZW5ndGg7CisgICAgICBpZiAoZW5kKSB7CisgICAgICAgIGNvbnN0IGxh
c3QgPSBleHByTGlzdFtlbmQgLSAxXTsKKyAgICAgICAgaWYgKGxhc3QgJiYgbGFzdC50eXBlID09
PSAiUmVzdEVsZW1lbnQiKSB7CisgICAgICAgICAgLS1lbmQ7CisgICAgICAgIH0gZWxzZSBpZiAo
bGFzdCAmJiBsYXN0LnR5cGUgPT09ICJTcHJlYWRFbGVtZW50IikgeworICAgICAgICAgIGxhc3Qu
dHlwZSA9ICJSZXN0RWxlbWVudCI7CisgICAgICAgICAgY29uc3QgYXJnID0gbGFzdC5hcmd1bWVu
dDsKKyAgICAgICAgICB0aGlzLnRvQXNzaWduYWJsZShhcmcsIGlzQmluZGluZywgY29udGV4dERl
c2NyaXB0aW9uKTsKKyAgICAgICAgICBpZiAoYXJnLnR5cGUgIT09ICJJZGVudGlmaWVyIiAmJiBh
cmcudHlwZSAhPT0gIk1lbWJlckV4cHJlc3Npb24iICYmIGFyZy50eXBlICE9PSAiQXJyYXlQYXR0
ZXJuIikgeworICAgICAgICAgICAgdGhpcy51bmV4cGVjdGVkKGFyZy5zdGFydCk7CisgICAgICAg
ICAgfQorICAgICAgICAgIC0tZW5kOworICAgICAgICB9CisgICAgICB9CisgICAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IGVuZDsgaSsrKSB7CisgICAgICAgIGNvbnN0IGVsdCA9IGV4cHJMaXN0W2ld
OworICAgICAgICBpZiAoZWx0ICYmIGVsdC50eXBlID09PSAiU3ByZWFkRWxlbWVudCIpCisgICAg
ICAgICAgdGhpcy5yYWlzZShlbHQuc3RhcnQsICJUaGUgcmVzdCBlbGVtZW50IGhhcyB0byBiZSB0
aGUgbGFzdCBlbGVtZW50IHdoZW4gZGVzdHJ1Y3R1cmluZyIpOworICAgICAgICBpZiAoZWx0KSB0
aGlzLnRvQXNzaWduYWJsZShlbHQsIGlzQmluZGluZywgY29udGV4dERlc2NyaXB0aW9uKTsKKyAg
ICAgIH0KKyAgICAgIHJldHVybiBleHByTGlzdDsKKyAgICB9OworCisgICAgLy8gQ29udmVydCBs
aXN0IG9mIGV4cHJlc3Npb24gYXRvbXMgdG8gYSBsaXN0IG9mCisKKyAgICBwcC50b1JlZmVyZW5j
ZWRMaXN0ID0gZnVuY3Rpb24gKGV4cHJMaXN0KSB7CisgICAgICByZXR1cm4gZXhwckxpc3Q7Cisg
ICAgfTsKKworICAgIC8vIFBhcnNlcyBzcHJlYWQgZWxlbWVudC4KKworICAgIHBwLnBhcnNlU3By
ZWFkID0gZnVuY3Rpb24gKHJlZlNob3J0aGFuZERlZmF1bHRQb3MpIHsKKyAgICAgIGNvbnN0IG5v
ZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpOworICAgICAgdGhpcy5uZXh0KCk7CisgICAgICBub2RlLmFy
Z3VtZW50ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKGZhbHNlLCByZWZTaG9ydGhhbmREZWZhdWx0
UG9zKTsKKyAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIlNwcmVhZEVsZW1lbnQi
KTsKKyAgICB9OworCisgICAgcHAucGFyc2VSZXN0ID0gZnVuY3Rpb24gKCkgeworICAgICAgY29u
c3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7CisgICAgICB0aGlzLm5leHQoKTsKKyAgICAgIG5v
ZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlQmluZGluZ0lkZW50aWZpZXIoKTsKKyAgICAgIHJldHVy
biB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIlJlc3RFbGVtZW50Iik7CisgICAgfTsKKworICAgIHBw
LnNob3VsZEFsbG93WWllbGRJZGVudGlmaWVyID0gZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJu
IHRoaXMubWF0Y2godHQuX3lpZWxkKSAmJiAhdGhpcy5zdGF0ZS5zdHJpY3QgJiYgIXRoaXMuc3Rh
dGUuaW5HZW5lcmF0b3I7CisgICAgfTsKKworICAgIHBwLnBhcnNlQmluZGluZ0lkZW50aWZpZXIg
PSBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gdGhpcy5wYXJzZUlkZW50aWZpZXIodGhpcy5z
aG91bGRBbGxvd1lpZWxkSWRlbnRpZmllcigpKTsKKyAgICB9OworCisgICAgLy8gUGFyc2VzIGx2
YWx1ZSAoYXNzaWduYWJsZSkgYXRvbS4KKworICAgIHBwLnBhcnNlQmluZGluZ0F0b20gPSBmdW5j
dGlvbiAoKSB7CisgICAgICBzd2l0Y2ggKHRoaXMuc3RhdGUudHlwZSkgeworICAgICAgICBjYXNl
IHR0Ll95aWVsZDoKKyAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5zdHJpY3QgfHwgdGhpcy5zdGF0
ZS5pbkdlbmVyYXRvcikgdGhpcy51bmV4cGVjdGVkKCk7CisgICAgICAgICAgLy8gZmFsbC10aHJv
dWdoCisgICAgICAgIGNhc2UgdHQubmFtZToKKyAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUlk
ZW50aWZpZXIodHJ1ZSk7CisKKyAgICAgICAgY2FzZSB0dC5icmFja2V0TDoKKyAgICAgICAgICBj
b25zdCBub2RlID0gdGhpcy5zdGFydE5vZGUoKTsKKyAgICAgICAgICB0aGlzLm5leHQoKTsKKyAg
ICAgICAgICBub2RlLmVsZW1lbnRzID0gdGhpcy5wYXJzZUJpbmRpbmdMaXN0KHR0LmJyYWNrZXRS
LCB0cnVlKTsKKyAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJBcnJheVBh
dHRlcm4iKTsKKworICAgICAgICBjYXNlIHR0LmJyYWNlTDoKKyAgICAgICAgICByZXR1cm4gdGhp
cy5wYXJzZU9iaih0cnVlKTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHRoaXMudW5l
eHBlY3RlZCgpOworICAgICAgfQorICAgIH07CisKKyAgICBwcC5wYXJzZUJpbmRpbmdMaXN0ID0g
ZnVuY3Rpb24gKGNsb3NlLCBhbGxvd0VtcHR5KSB7CisgICAgICBjb25zdCBlbHRzID0gW107Cisg
ICAgICBsZXQgZmlyc3QgPSB0cnVlOworICAgICAgd2hpbGUgKCF0aGlzLmVhdChjbG9zZSkpIHsK
KyAgICAgICAgaWYgKGZpcnN0KSB7CisgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICB0aGlzLmV4cGVjdCh0dC5jb21tYSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGFsbG93RW1wdHkgJiYgdGhpcy5tYXRjaCh0dC5jb21tYSkpIHsKKyAgICAgICAg
ICBlbHRzLnB1c2gobnVsbCk7CisgICAgICAgIH0gZWxzZSBpZiAodGhpcy5lYXQoY2xvc2UpKSB7
CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tYXRjaCh0dC5lbGxp
cHNpcykpIHsKKyAgICAgICAgICBlbHRzLnB1c2godGhpcy5wYXJzZUFzc2lnbmFibGVMaXN0SXRl
bVR5cGVzKHRoaXMucGFyc2VSZXN0KCkpKTsKKyAgICAgICAgICB0aGlzLmV4cGVjdChjbG9zZSk7
CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgY29uc3QgZGVj
b3JhdG9ycyA9IFtdOworICAgICAgICAgIHdoaWxlICh0aGlzLm1hdGNoKHR0LmF0KSkgeworICAg
ICAgICAgICAgZGVjb3JhdG9ycy5wdXNoKHRoaXMucGFyc2VEZWNvcmF0b3IoKSk7CisgICAgICAg
ICAgfQorICAgICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLnBhcnNlTWF5YmVEZWZhdWx0KCk7Cisg
ICAgICAgICAgaWYgKGRlY29yYXRvcnMubGVuZ3RoKSB7CisgICAgICAgICAgICBsZWZ0LmRlY29y
YXRvcnMgPSBkZWNvcmF0b3JzOworICAgICAgICAgIH0KKyAgICAgICAgICB0aGlzLnBhcnNlQXNz
aWduYWJsZUxpc3RJdGVtVHlwZXMobGVmdCk7CisgICAgICAgICAgZWx0cy5wdXNoKHRoaXMucGFy
c2VNYXliZURlZmF1bHQobGVmdC5zdGFydCwgbGVmdC5sb2Muc3RhcnQsIGxlZnQpKTsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIGVsdHM7CisgICAgfTsKKworICAgIHBwLnBhcnNl
QXNzaWduYWJsZUxpc3RJdGVtVHlwZXMgPSBmdW5jdGlvbiAocGFyYW0pIHsKKyAgICAgIHJldHVy
biBwYXJhbTsKKyAgICB9OworCisgICAgLy8gUGFyc2VzIGFzc2lnbm1lbnQgcGF0dGVybiBhcm91
bmQgZ2l2ZW4gYXRvbSBpZiBwb3NzaWJsZS4KKworICAgIHBwLnBhcnNlTWF5YmVEZWZhdWx0ID0g
ZnVuY3Rpb24gKHN0YXJ0UG9zLCBzdGFydExvYywgbGVmdCkgeworICAgICAgc3RhcnRMb2MgPSBz
dGFydExvYyB8fCB0aGlzLnN0YXRlLnN0YXJ0TG9jOworICAgICAgc3RhcnRQb3MgPSBzdGFydFBv
cyB8fCB0aGlzLnN0YXRlLnN0YXJ0OworICAgICAgbGVmdCA9IGxlZnQgfHwgdGhpcy5wYXJzZUJp
bmRpbmdBdG9tKCk7CisgICAgICBpZiAoIXRoaXMuZWF0KHR0LmVxKSkgcmV0dXJuIGxlZnQ7CisK
KyAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7
CisgICAgICBub2RlLmxlZnQgPSBsZWZ0OworICAgICAgbm9kZS5yaWdodCA9IHRoaXMucGFyc2VN
YXliZUFzc2lnbigpOworICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAiQXNzaWdu
bWVudFBhdHRlcm4iKTsKKyAgICB9OworCisgICAgLy8gVmVyaWZ5IHRoYXQgYSBub2RlIGlzIGFu
IGx2YWwg4oCUIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBhc3NpZ25lZAorICAgIC8vIHRvLgorCisg
ICAgcHAuY2hlY2tMVmFsID0gZnVuY3Rpb24gKGV4cHIsIGlzQmluZGluZywgY2hlY2tDbGFzaGVz
LCBjb250ZXh0RGVzY3JpcHRpb24pIHsKKyAgICAgIHN3aXRjaCAoZXhwci50eXBlKSB7CisgICAg
ICAgIGNhc2UgIklkZW50aWZpZXIiOgorICAgICAgICAgIHRoaXMuY2hlY2tSZXNlcnZlZFdvcmQo
ZXhwci5uYW1lLCBleHByLnN0YXJ0LCBmYWxzZSwgdHJ1ZSk7CisKKyAgICAgICAgICBpZiAoY2hl
Y2tDbGFzaGVzKSB7CisgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHByZWZpeCB0aGlzIHdpdGgg
YW4gdW5kZXJzY29yZSBmb3IgdGhlIGNhc2VzIHdoZXJlIHdlIGhhdmUgYSBrZXkgb2YKKyAgICAg
ICAgICAgIC8vIGBfX3Byb3RvX19gLiB0aGVyZSdzIGEgYnVnIGluIG9sZCBWOCB3aGVyZSB0aGUg
Zm9sbG93aW5nIHdvdWxkbid0IHdvcms6CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8g
ICA+IHZhciBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpOworICAgICAgICAgICAgLy8gICB1bmRl
ZmluZWQKKyAgICAgICAgICAgIC8vICAgPiBvYmouX19wcm90b19fCisgICAgICAgICAgICAvLyAg
IG51bGwKKyAgICAgICAgICAgIC8vICAgPiBvYmouX19wcm90b19fID0gdHJ1ZTsKKyAgICAgICAg
ICAgIC8vICAgdHJ1ZQorICAgICAgICAgICAgLy8gICA+IG9iai5fX3Byb3RvX18KKyAgICAgICAg
ICAgIC8vICAgbnVsbAorICAgICAgICAgICAgY29uc3Qga2V5ID0gYF8ke2V4cHIubmFtZX1gOwor
CisgICAgICAgICAgICBpZiAoY2hlY2tDbGFzaGVzW2tleV0pIHsKKyAgICAgICAgICAgICAgdGhp
cy5yYWlzZShleHByLnN0YXJ0LCAiQXJndW1lbnQgbmFtZSBjbGFzaCBpbiBzdHJpY3QgbW9kZSIp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgY2hlY2tDbGFzaGVzW2tleV0g
PSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlICJNZW1iZXJFeHByZXNzaW9uIjoKKyAgICAgICAgICBpZiAoaXNCaW5kaW5n
KSB0aGlzLnJhaXNlKGV4cHIuc3RhcnQsIChpc0JpbmRpbmcgPyAiQmluZGluZyIgOiAiQXNzaWdu
aW5nIHRvIikgKyAiIG1lbWJlciBleHByZXNzaW9uIik7CisgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSAiT2JqZWN0UGF0dGVybiI6CisgICAgICAgICAgZm9yIChsZXQgcHJvcCBvZiAo
ZXhwci5wcm9wZXJ0aWVzKSkgeworICAgICAgICAgICAgaWYgKHByb3AudHlwZSA9PT0gIk9iamVj
dFByb3BlcnR5IikgcHJvcCA9IHByb3AudmFsdWU7CisgICAgICAgICAgICB0aGlzLmNoZWNrTFZh
bChwcm9wLCBpc0JpbmRpbmcsIGNoZWNrQ2xhc2hlcywgIm9iamVjdCBkZXN0cnVjdHVyaW5nIHBh
dHRlcm4iKTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAi
QXJyYXlQYXR0ZXJuIjoKKyAgICAgICAgICBmb3IgKGNvbnN0IGVsZW0gb2YgKGV4cHIuZWxlbWVu
dHMpKSB7CisgICAgICAgICAgICBpZiAoZWxlbSkgdGhpcy5jaGVja0xWYWwoZWxlbSwgaXNCaW5k
aW5nLCBjaGVja0NsYXNoZXMsICJhcnJheSBkZXN0cnVjdHVyaW5nIHBhdHRlcm4iKTsKKyAgICAg
ICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAiQXNzaWdubWVudFBhdHRl
cm4iOgorICAgICAgICAgIHRoaXMuY2hlY2tMVmFsKGV4cHIubGVmdCwgaXNCaW5kaW5nLCBjaGVj
a0NsYXNoZXMsICJhc3NpZ25tZW50IHBhdHRlcm4iKTsKKyAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlICJSZXN0RWxlbWVudCI6CisgICAgICAgICAgdGhpcy5jaGVja0xWYWwoZXhwci5h
cmd1bWVudCwgaXNCaW5kaW5nLCBjaGVja0NsYXNoZXMsICJyZXN0IGVsZW1lbnQiKTsKKyAgICAg
ICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgY29uc3QgbWVzc2Fn
ZSA9IChpc0JpbmRpbmcgPyAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyAiQmluZGluZyBpbnZh
bGlkIiA6ICJJbnZhbGlkIikgKworICAgICAgICAgICAgIiBsZWZ0LWhhbmQgc2lkZSIgKworICAg
ICAgICAgICAgKGNvbnRleHREZXNjcmlwdGlvbiA/ICIgaW4gIiArIGNvbnRleHREZXNjcmlwdGlv
biA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovICJleHByZXNzaW9uIik7CisgICAgICAgICAg
dGhpcy5yYWlzZShleHByLnN0YXJ0LCBtZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgfQorICAg
IH07CisKK30KKworCisvLyBwYXJzZXIvbm9kZS5qcworY29uc3QgcGFyc2VyTm9kZUpTID0ge307
Cit7CisgICAgY29uc3QgUGFyc2VyID0gcGFyc2VySW5kZXhKUzsKKyAgICBjb25zdCB7IFNvdXJj
ZUxvY2F0aW9uLCBQb3NpdGlvbiB9ID0gdXRpbExvY2F0aW9uSlM7CisKKyAgICAvLyBTdGFydCBh
biBBU1Qgbm9kZSwgYXR0YWNoaW5nIGEgc3RhcnQgb2Zmc2V0LgorCisgICAgY29uc3QgcHAgPSBQ
YXJzZXIucHJvdG90eXBlOworICAgIGNvbnN0IGNvbW1lbnRLZXlzID0gWyJsZWFkaW5nQ29tbWVu
dHMiLCAidHJhaWxpbmdDb21tZW50cyIsICJpbm5lckNvbW1lbnRzIl07CisKKyAgICBjbGFzcyBO
b2RlIHsKKyAgICAgIGNvbnN0cnVjdG9yKHBhcnNlciwgcG9zLCBsb2MpIHsKKyAgICAgICAgdGhp
cy50eXBlID0gIiI7CisgICAgICAgIHRoaXMuc3RhcnQgPSBwb3M7CisgICAgICAgIHRoaXMuZW5k
ID0gMDsKKyAgICAgICAgdGhpcy5sb2MgPSBuZXcgU291cmNlTG9jYXRpb24obG9jKTsKKyAgICAg
ICAgaWYgKHBhcnNlciAmJiBwYXJzZXIub3B0aW9ucy5yYW5nZXMpIHRoaXMucmFuZ2UgPSBbcG9z
LCAwXTsKKyAgICAgICAgaWYgKHBhcnNlciAmJiBwYXJzZXIuZmlsZW5hbWUpIHRoaXMubG9jLmZp
bGVuYW1lID0gcGFyc2VyLmZpbGVuYW1lOworICAgICAgfQorCisgICAgICAvL3R5cGU6IHN0cmlu
ZzsKKyAgICAgIC8vc3RhcnQ6ID9udW1iZXI7CisgICAgICAvL2VuZDogbnVtYmVyOworICAgICAg
Ly9sb2M6IFNvdXJjZUxvY2F0aW9uOworCisgICAgICBfX2Nsb25lKCl7CisgICAgICAgIGNvbnN0
IG5vZGUyID0gbmV3IE5vZGU7CisgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMpIHsKKyAg
ICAgICAgICAvLyBEbyBub3QgY2xvbmUgY29tbWVudHMgdGhhdCBhcmUgYWxyZWFkeSBhdHRhY2hl
ZCB0byB0aGUgbm9kZQorICAgICAgICAgIGlmIChjb21tZW50S2V5cy5pbmRleE9mKGtleSkgPCAw
KSB7CisgICAgICAgICAgICBub2RlMltrZXldID0gdGhpc1trZXldOworICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBub2RlMjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBw
cC5zdGFydE5vZGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gbmV3IE5vZGUodGhpcywg
dGhpcy5zdGF0ZS5zdGFydCwgdGhpcy5zdGF0ZS5zdGFydExvYyk7CisgICAgfTsKKworICAgIHBw
LnN0YXJ0Tm9kZUF0ID0gZnVuY3Rpb24gKHBvcywgbG9jKSB7CisgICAgICByZXR1cm4gbmV3IE5v
ZGUodGhpcywgcG9zLCBsb2MpOworICAgIH07CisKKyAgICBmdW5jdGlvbiBmaW5pc2hOb2RlQXQo
bm9kZSwgdHlwZSwgcG9zLCBsb2MpIHsKKyAgICAgIG5vZGUudHlwZSA9IHR5cGU7CisgICAgICBu
b2RlLmVuZCA9IHBvczsKKyAgICAgIG5vZGUubG9jLmVuZCA9IGxvYzsKKyAgICAgIGlmICh0aGlz
Lm9wdGlvbnMucmFuZ2VzKSBub2RlLnJhbmdlWzFdID0gcG9zOworICAgICAgdGhpcy5wcm9jZXNz
Q29tbWVudChub2RlKTsKKyAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIC8vIEZpbmlz
aCBhbiBBU1Qgbm9kZSwgYWRkaW5nIGB0eXBlYCBhbmQgYGVuZGAgcHJvcGVydGllcy4KKworICAg
IHBwLmZpbmlzaE5vZGUgPSBmdW5jdGlvbiAobm9kZSwgdHlwZSkgeworICAgICAgcmV0dXJuIGZp
bmlzaE5vZGVBdC5jYWxsKHRoaXMsIG5vZGUsIHR5cGUsIHRoaXMuc3RhdGUubGFzdFRva0VuZCwg
dGhpcy5zdGF0ZS5sYXN0VG9rRW5kTG9jKTsKKyAgICB9OworCisgICAgLy8gRmluaXNoIG5vZGUg
YXQgZ2l2ZW4gcG9zaXRpb24KKworICAgIHBwLmZpbmlzaE5vZGVBdCA9IGZ1bmN0aW9uIChub2Rl
LCB0eXBlLCBwb3MsIGxvYykgeworICAgICAgcmV0dXJuIGZpbmlzaE5vZGVBdC5jYWxsKHRoaXMs
IG5vZGUsIHR5cGUsIHBvcywgbG9jKTsKKyAgICB9OworCisKKyAgICAvKioKKyAgICAgKiBSZXNl
dCB0aGUgc3RhcnQgbG9jYXRpb24gb2Ygbm9kZSB0byB0aGUgc3RhcnQgbG9jYXRpb24gb2YgbG9j
YXRpb25Ob2RlCisgICAgICovCisgICAgcHAucmVzZXRTdGFydExvY2F0aW9uRnJvbU5vZGUgPSBm
dW5jdGlvbiAobm9kZSwgbG9jYXRpb25Ob2RlKSB7CisgICAgICBub2RlLnN0YXJ0ID0gbG9jYXRp
b25Ob2RlLnN0YXJ0OworICAgICAgbm9kZS5sb2Muc3RhcnQgPSBsb2NhdGlvbk5vZGUubG9jLnN0
YXJ0OworICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIG5vZGUucmFuZ2VbMF0gPSBsb2Nh
dGlvbk5vZGUucmFuZ2VbMF07CisKKyAgICAgIHJldHVybiBub2RlOworICAgIH07Cit9CisKKy8v
IHBhcnNlci9zdGF0ZW1lbnQuanMKK2NvbnN0IHBhcnNlclN0YXRlbWVudEpTID0ge307Cit7Cisg
ICAgLyogZXNsaW50IG1heC1sZW46IDAgKi8KKworICAgIGNvbnN0IHsgdHlwZXM6IHR0IH0gPSB0
b2tlbml6ZXJUeXBlc0pTOworICAgIGNvbnN0IFBhcnNlciA9IHBhcnNlckluZGV4SlM7CisgICAg
Y29uc3QgeyBsaW5lQnJlYWsgfSA9IHV0aWxXaGl0ZXNwYWNlSlM7CisKKyAgICBjb25zdCBwcCA9
IFBhcnNlci5wcm90b3R5cGU7CisKKyAgICAvLyAjIyMgU3RhdGVtZW50IHBhcnNpbmcKKworICAg
IC8vIFBhcnNlIGEgcHJvZ3JhbS4gSW5pdGlhbGl6ZXMgdGhlIHBhcnNlciwgcmVhZHMgYW55IG51
bWJlciBvZgorICAgIC8vIHN0YXRlbWVudHMsIGFuZCB3cmFwcyB0aGVtIGluIGEgUHJvZ3JhbSBu
b2RlLiAgT3B0aW9uYWxseSB0YWtlcyBhCisgICAgLy8gYHByb2dyYW1gIGFyZ3VtZW50LiAgSWYg
cHJlc2VudCwgdGhlIHN0YXRlbWVudHMgd2lsbCBiZSBhcHBlbmRlZAorICAgIC8vIHRvIGl0cyBi
b2R5IGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgbm9kZS4KKworICAgIHBwLnBhcnNlVG9wTGV2
ZWwgPSBmdW5jdGlvbiAoZmlsZSwgcHJvZ3JhbSkgeworICAgICAgcHJvZ3JhbS5zb3VyY2VUeXBl
ID0gdGhpcy5vcHRpb25zLnNvdXJjZVR5cGU7CisKKyAgICAgIHRoaXMucGFyc2VCbG9ja0JvZHko
cHJvZ3JhbSwgdHJ1ZSwgdHJ1ZSwgdHQuZW9mKTsKKworICAgICAgZmlsZS5wcm9ncmFtICA9IHRo
aXMuZmluaXNoTm9kZShwcm9ncmFtLCAiUHJvZ3JhbSIpOworICAgICAgZmlsZS5jb21tZW50cyA9
IHRoaXMuc3RhdGUuY29tbWVudHM7CisgICAgICBmaWxlLnRva2VucyAgID0gdGhpcy5zdGF0ZS50
b2tlbnM7CisKKyAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUoZmlsZSwgIkZpbGUiKTsKKyAg
ICB9OworCisgICAgY29uc3QgbG9vcExhYmVsID0geyBraW5kOiAibG9vcCIgfSwgc3dpdGNoTGFi
ZWwgPSB7IGtpbmQ6ICJzd2l0Y2giIH07CisKKyAgICAvLyBUT0RPCisKKyAgICBwcC5zdG10VG9E
aXJlY3RpdmUgPSBmdW5jdGlvbiAoc3RtdCkgeworICAgICAgY29uc3QgZXhwciA9IHN0bXQuZXhw
cmVzc2lvbjsKKworICAgICAgY29uc3QgZGlyZWN0aXZlTGl0ZXJhbCA9IHRoaXMuc3RhcnROb2Rl
QXQoZXhwci5zdGFydCwgZXhwci5sb2Muc3RhcnQpOworICAgICAgY29uc3QgZGlyZWN0aXZlICAg
ICAgICA9IHRoaXMuc3RhcnROb2RlQXQoc3RtdC5zdGFydCwgc3RtdC5sb2Muc3RhcnQpOworCisg
ICAgICBjb25zdCByYXcgPSB0aGlzLmlucHV0LnNsaWNlKGV4cHIuc3RhcnQsIGV4cHIuZW5kKTsK
KyAgICAgIGNvbnN0IHZhbCA9IGRpcmVjdGl2ZUxpdGVyYWwudmFsdWUgPSByYXcuc2xpY2UoMSwg
LTEpOyAvLyByZW1vdmUgcXVvdGVzCisKKyAgICAgIHRoaXMuYWRkRXh0cmEoZGlyZWN0aXZlTGl0
ZXJhbCwgInJhdyIsIHJhdyk7CisgICAgICB0aGlzLmFkZEV4dHJhKGRpcmVjdGl2ZUxpdGVyYWws
ICJyYXdWYWx1ZSIsIHZhbCk7CisKKyAgICAgIGRpcmVjdGl2ZS52YWx1ZSA9IHRoaXMuZmluaXNo
Tm9kZUF0KGRpcmVjdGl2ZUxpdGVyYWwsICJEaXJlY3RpdmVMaXRlcmFsIiwgZXhwci5lbmQsIGV4
cHIubG9jLmVuZCk7CisKKyAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGVBdChkaXJlY3RpdmUs
ICJEaXJlY3RpdmUiLCBzdG10LmVuZCwgc3RtdC5sb2MuZW5kKTsKKyAgICB9OworCisgICAgLy8g
UGFyc2UgYSBzaW5nbGUgc3RhdGVtZW50LgorICAgIC8vCisgICAgLy8gSWYgZXhwZWN0aW5nIGEg
c3RhdGVtZW50IGFuZCBmaW5kaW5nIGEgc2xhc2ggb3BlcmF0b3IsIHBhcnNlIGEKKyAgICAvLyBy
ZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbC4gVGhpcyBpcyB0byBoYW5kbGUgY2FzZXMgbGlrZQor
ICAgIC8vIGBpZiAoZm9vKSAvYmxhaC8uZXhlYyhmb28pYCwgd2hlcmUgbG9va2luZyBhdCB0aGUg
cHJldmlvdXMgdG9rZW4KKyAgICAvLyBkb2VzIG5vdCBoZWxwLgorCisgICAgcHAucGFyc2VTdGF0
ZW1lbnQgPSBmdW5jdGlvbiAoZGVjbGFyYXRpb24sIHRvcExldmVsKSB7CisgICAgICBpZiAodGhp
cy5tYXRjaCh0dC5hdCkpIHsKKyAgICAgICAgdGhpcy5wYXJzZURlY29yYXRvcnModHJ1ZSk7Cisg
ICAgICB9CisKKyAgICAgIGNvbnN0IHN0YXJ0dHlwZSA9IHRoaXMuc3RhdGUudHlwZTsKKyAgICAg
IGNvbnN0IG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpOworCisgICAgICAvLyBNb3N0IHR5cGVzIG9m
IHN0YXRlbWVudHMgYXJlIHJlY29nbml6ZWQgYnkgdGhlIGtleXdvcmQgdGhleQorICAgICAgLy8g
c3RhcnQgd2l0aC4gTWFueSBhcmUgdHJpdmlhbCB0byBwYXJzZSwgc29tZSByZXF1aXJlIGEgYml0
IG9mCisgICAgICAvLyBjb21wbGV4aXR5LgorCisgICAgICBzd2l0Y2ggKHN0YXJ0dHlwZSkgewor
ICAgICAgICBjYXNlIHR0Ll9icmVhazogY2FzZSB0dC5fY29udGludWU6IHJldHVybiB0aGlzLnBh
cnNlQnJlYWtDb250aW51ZVN0YXRlbWVudChub2RlLCBzdGFydHR5cGUua2V5d29yZCk7CisgICAg
ICAgIGNhc2UgdHQuX2RlYnVnZ2VyOiByZXR1cm4gdGhpcy5wYXJzZURlYnVnZ2VyU3RhdGVtZW50
KG5vZGUpOworICAgICAgICBjYXNlIHR0Ll9kbzogcmV0dXJuIHRoaXMucGFyc2VEb1N0YXRlbWVu
dChub2RlKTsKKyAgICAgICAgY2FzZSB0dC5fZm9yOiByZXR1cm4gdGhpcy5wYXJzZUZvclN0YXRl
bWVudChub2RlKTsKKyAgICAgICAgY2FzZSB0dC5fZnVuY3Rpb246CisgICAgICAgICAgaWYgKCFk
ZWNsYXJhdGlvbikgdGhpcy51bmV4cGVjdGVkKCk7CisgICAgICAgICAgcmV0dXJuIHRoaXMucGFy
c2VGdW5jdGlvblN0YXRlbWVudChub2RlKTsKKworICAgICAgICBjYXNlIHR0Ll9jbGFzczoKKyAg
ICAgICAgICBpZiAoIWRlY2xhcmF0aW9uKSB0aGlzLnVuZXhwZWN0ZWQoKTsKKyAgICAgICAgICBy
ZXR1cm4gdGhpcy5wYXJzZUNsYXNzKG5vZGUsIHRydWUpOworCisgICAgICAgIGNhc2UgdHQuX2lm
OiByZXR1cm4gdGhpcy5wYXJzZUlmU3RhdGVtZW50KG5vZGUpOworICAgICAgICBjYXNlIHR0Ll9y
ZXR1cm46IHJldHVybiB0aGlzLnBhcnNlUmV0dXJuU3RhdGVtZW50KG5vZGUpOworICAgICAgICBj
YXNlIHR0Ll9zd2l0Y2g6IHJldHVybiB0aGlzLnBhcnNlU3dpdGNoU3RhdGVtZW50KG5vZGUpOwor
ICAgICAgICBjYXNlIHR0Ll90aHJvdzogcmV0dXJuIHRoaXMucGFyc2VUaHJvd1N0YXRlbWVudChu
b2RlKTsKKyAgICAgICAgY2FzZSB0dC5fdHJ5OiByZXR1cm4gdGhpcy5wYXJzZVRyeVN0YXRlbWVu
dChub2RlKTsKKworICAgICAgICBjYXNlIHR0Ll9sZXQ6CisgICAgICAgIGNhc2UgdHQuX2NvbnN0
OgorICAgICAgICAgIGlmICghZGVjbGFyYXRpb24pIHRoaXMudW5leHBlY3RlZCgpOyAvLyBOT1RF
OiBmYWxscyB0aHJvdWdoIHRvIF92YXIKKworICAgICAgICBjYXNlIHR0Ll92YXI6CisgICAgICAg
ICAgcmV0dXJuIHRoaXMucGFyc2VWYXJTdGF0ZW1lbnQobm9kZSwgc3RhcnR0eXBlKTsKKworICAg
ICAgICBjYXNlIHR0Ll93aGlsZTogcmV0dXJuIHRoaXMucGFyc2VXaGlsZVN0YXRlbWVudChub2Rl
KTsKKyAgICAgICAgY2FzZSB0dC5fd2l0aDogcmV0dXJuIHRoaXMucGFyc2VXaXRoU3RhdGVtZW50
KG5vZGUpOworICAgICAgICBjYXNlIHR0LmJyYWNlTDogcmV0dXJuIHRoaXMucGFyc2VCbG9jaygp
OworICAgICAgICBjYXNlIHR0LnNlbWk6IHJldHVybiB0aGlzLnBhcnNlRW1wdHlTdGF0ZW1lbnQo
bm9kZSk7CisgICAgICAgIGNhc2UgdHQuX2V4cG9ydDoKKyAgICAgICAgY2FzZSB0dC5faW1wb3J0
OgorICAgICAgICAgIGlmICh0aGlzLmhhc1BsdWdpbigiZHluYW1pY0ltcG9ydCIpICYmIHRoaXMu
bG9va2FoZWFkKCkudHlwZSA9PT0gdHQucGFyZW5MKSBicmVhazsKKworICAgICAgICAgIGlmICgh
dGhpcy5vcHRpb25zLmFsbG93SW1wb3J0RXhwb3J0RXZlcnl3aGVyZSkgeworICAgICAgICAgICAg
aWYgKCF0b3BMZXZlbCkgeworICAgICAgICAgICAgICB0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3Rh
cnQsICInaW1wb3J0JyBhbmQgJ2V4cG9ydCcgbWF5IG9ubHkgYXBwZWFyIGF0IHRoZSB0b3AgbGV2
ZWwiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCF0aGlzLmluTW9kdWxlKSB7
CisgICAgICAgICAgICAgIHRoaXMucmFpc2UodGhpcy5zdGF0ZS5zdGFydCwgIidpbXBvcnQnIGFu
ZCAnZXhwb3J0JyBtYXkgYXBwZWFyIG9ubHkgd2l0aCAnc291cmNlVHlwZTogbW9kdWxlJyIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gc3RhcnR0eXBlID09
PSB0dC5faW1wb3J0ID8gdGhpcy5wYXJzZUltcG9ydChub2RlKSA6IHRoaXMucGFyc2VFeHBvcnQo
bm9kZSk7CisKKyAgICAgICAgY2FzZSB0dC5uYW1lOgorICAgICAgICAgIGlmICh0aGlzLnN0YXRl
LnZhbHVlID09PSAiYXN5bmMiKSB7CisgICAgICAgICAgICAvLyBwZWVrIGFoZWFkIGFuZCBzZWUg
aWYgbmV4dCB0b2tlbiBpcyBhIGZ1bmN0aW9uCisgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRo
aXMuc3RhdGUuY2xvbmUoKTsKKyAgICAgICAgICAgIHRoaXMubmV4dCgpOworICAgICAgICAgICAg
aWYgKHRoaXMubWF0Y2godHQuX2Z1bmN0aW9uKSAmJiAhdGhpcy5jYW5JbnNlcnRTZW1pY29sb24o
KSkgeworICAgICAgICAgICAgICB0aGlzLmV4cGVjdCh0dC5fZnVuY3Rpb24pOworICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5wYXJzZUZ1bmN0aW9uKG5vZGUsIHRydWUsIGZhbHNlLCB0cnVlKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8vIElmIHRoZSBz
dGF0ZW1lbnQgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIHN0YXRlbWVudCBrZXl3b3JkIG9yIGEKKyAg
ICAgIC8vIGJyYWNlLCBpdCdzIGFuIEV4cHJlc3Npb25TdGF0ZW1lbnQgb3IgTGFiZWxlZFN0YXRl
bWVudC4gV2UKKyAgICAgIC8vIHNpbXBseSBzdGFydCBwYXJzaW5nIGFuIGV4cHJlc3Npb24sIGFu
ZCBhZnRlcndhcmRzLCBpZiB0aGUKKyAgICAgIC8vIG5leHQgdG9rZW4gaXMgYSBjb2xvbiBhbmQg
dGhlIGV4cHJlc3Npb24gd2FzIGEgc2ltcGxlCisgICAgICAvLyBJZGVudGlmaWVyIG5vZGUsIHdl
IHN3aXRjaCB0byBpbnRlcnByZXRpbmcgaXQgYXMgYSBsYWJlbC4KKyAgICAgIGNvbnN0IG1heWJl
TmFtZSA9IHRoaXMuc3RhdGUudmFsdWU7CisgICAgICBjb25zdCBleHByID0gdGhpcy5wYXJzZUV4
cHJlc3Npb24oKTsKKworICAgICAgaWYgKHN0YXJ0dHlwZSA9PT0gdHQubmFtZSAmJiBleHByLnR5
cGUgPT09ICJJZGVudGlmaWVyIiAmJiB0aGlzLmVhdCh0dC5jb2xvbikpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMucGFyc2VMYWJlbGVkU3RhdGVtZW50KG5vZGUsIG1heWJlTmFtZSwgZXhwcik7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUV4cHJlc3Npb25TdGF0ZW1l
bnQobm9kZSwgZXhwcik7CisgICAgICB9CisgICAgfTsKKworICAgIHBwLnRha2VEZWNvcmF0b3Jz
ID0gZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgIGlmICh0aGlzLnN0YXRlLmRlY29yYXRvcnMubGVu
Z3RoKSB7CisgICAgICAgIG5vZGUuZGVjb3JhdG9ycyA9IHRoaXMuc3RhdGUuZGVjb3JhdG9yczsK
KyAgICAgICAgdGhpcy5zdGF0ZS5kZWNvcmF0b3JzID0gW107CisgICAgICB9CisgICAgfTsKKwor
ICAgIHBwLnBhcnNlRGVjb3JhdG9ycyA9IGZ1bmN0aW9uIChhbGxvd0V4cG9ydCkgeworICAgICAg
d2hpbGUgKHRoaXMubWF0Y2godHQuYXQpKSB7CisgICAgICAgIGNvbnN0IGRlY29yYXRvciA9IHRo
aXMucGFyc2VEZWNvcmF0b3IoKTsKKyAgICAgICAgdGhpcy5zdGF0ZS5kZWNvcmF0b3JzLnB1c2go
ZGVjb3JhdG9yKTsKKyAgICAgIH0KKworICAgICAgaWYgKGFsbG93RXhwb3J0ICYmIHRoaXMubWF0
Y2godHQuX2V4cG9ydCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICBpZiAo
IXRoaXMubWF0Y2godHQuX2NsYXNzKSkgeworICAgICAgICB0aGlzLnJhaXNlKHRoaXMuc3RhdGUu
c3RhcnQsICJMZWFkaW5nIGRlY29yYXRvcnMgbXVzdCBiZSBhdHRhY2hlZCB0byBhIGNsYXNzIGRl
Y2xhcmF0aW9uIik7CisgICAgICB9CisgICAgfTsKKworICAgIHBwLnBhcnNlRGVjb3JhdG9yID0g
ZnVuY3Rpb24gKCkgeworICAgICAgaWYgKCF0aGlzLmhhc1BsdWdpbigiZGVjb3JhdG9ycyIpKSB7
CisgICAgICAgIHRoaXMudW5leHBlY3RlZCgpOworICAgICAgfQorICAgICAgY29uc3Qgbm9kZSA9
IHRoaXMuc3RhcnROb2RlKCk7CisgICAgICB0aGlzLm5leHQoKTsKKyAgICAgIG5vZGUuZXhwcmVz
c2lvbiA9IHRoaXMucGFyc2VNYXliZUFzc2lnbigpOworICAgICAgcmV0dXJuIHRoaXMuZmluaXNo
Tm9kZShub2RlLCAiRGVjb3JhdG9yIik7CisgICAgfTsKKworICAgIHBwLnBhcnNlQnJlYWtDb250
aW51ZVN0YXRlbWVudCA9IGZ1bmN0aW9uIChub2RlLCBrZXl3b3JkKSB7CisgICAgICBjb25zdCBp
c0JyZWFrID0ga2V5d29yZCA9PT0gImJyZWFrIjsKKyAgICAgIHRoaXMubmV4dCgpOworCisgICAg
ICBpZiAodGhpcy5pc0xpbmVUZXJtaW5hdG9yKCkpIHsKKyAgICAgICAgbm9kZS5sYWJlbCA9IG51
bGw7CisgICAgICB9IGVsc2UgaWYgKCF0aGlzLm1hdGNoKHR0Lm5hbWUpKSB7CisgICAgICAgIHRo
aXMudW5leHBlY3RlZCgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbm9kZS5sYWJlbCA9IHRo
aXMucGFyc2VJZGVudGlmaWVyKCk7CisgICAgICAgIHRoaXMuc2VtaWNvbG9uKCk7CisgICAgICB9
CisKKyAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZXJlIGlzIGFuIGFjdHVhbCBkZXN0aW5hdGlvbiB0
byBicmVhayBvcgorICAgICAgLy8gY29udGludWUgdG8uCisgICAgICBsZXQgaTsKKyAgICAgIGZv
ciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRlLmxhYmVscy5sZW5ndGg7ICsraSkgeworICAgICAgICBj
b25zdCBsYWIgPSB0aGlzLnN0YXRlLmxhYmVsc1tpXTsKKyAgICAgICAgaWYgKG5vZGUubGFiZWwg
PT0gbnVsbCB8fCBsYWIubmFtZSA9PT0gbm9kZS5sYWJlbC5uYW1lKSB7CisgICAgICAgICAgaWYg
KGxhYi5raW5kICE9IG51bGwgJiYgKGlzQnJlYWsgfHwgbGFiLmtpbmQgPT09ICJsb29wIikpIGJy
ZWFrOworICAgICAgICAgIGlmIChub2RlLmxhYmVsICYmIGlzQnJlYWspIGJyZWFrOworICAgICAg
ICB9CisgICAgICB9CisgICAgICBpZiAoaSA9PT0gdGhpcy5zdGF0ZS5sYWJlbHMubGVuZ3RoKSB0
aGlzLnJhaXNlKG5vZGUuc3RhcnQsICJVbnN5bnRhY3RpYyAiICsga2V5d29yZCk7CisgICAgICBy
ZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIGlzQnJlYWsgPyAiQnJlYWtTdGF0ZW1lbnQiIDog
IkNvbnRpbnVlU3RhdGVtZW50Iik7CisgICAgfTsKKworICAgIHBwLnBhcnNlRGVidWdnZXJTdGF0
ZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAgdGhpcy5uZXh0KCk7CisgICAgICB0aGlz
LnNlbWljb2xvbigpOworICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAiRGVidWdn
ZXJTdGF0ZW1lbnQiKTsKKyAgICB9OworCisgICAgcHAucGFyc2VEb1N0YXRlbWVudCA9IGZ1bmN0
aW9uIChub2RlKSB7CisgICAgICB0aGlzLm5leHQoKTsKKyAgICAgIHRoaXMuc3RhdGUubGFiZWxz
LnB1c2gobG9vcExhYmVsKTsKKyAgICAgIG5vZGUuYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQo
ZmFsc2UpOworICAgICAgdGhpcy5zdGF0ZS5sYWJlbHMucG9wKCk7CisgICAgICB0aGlzLmV4cGVj
dCh0dC5fd2hpbGUpOworICAgICAgbm9kZS50ZXN0ID0gdGhpcy5wYXJzZVBhcmVuRXhwcmVzc2lv
bigpOworICAgICAgdGhpcy5lYXQodHQuc2VtaSk7CisgICAgICByZXR1cm4gdGhpcy5maW5pc2hO
b2RlKG5vZGUsICJEb1doaWxlU3RhdGVtZW50Iik7CisgICAgfTsKKworICAgIC8vIERpc2FtYmln
dWF0aW5nIGJldHdlZW4gYSBgZm9yYCBhbmQgYSBgZm9yYC9gaW5gIG9yIGBmb3JgL2BvZmAKKyAg
ICAvLyBsb29wIGlzIG5vbi10cml2aWFsLiBCYXNpY2FsbHksIHdlIGhhdmUgdG8gcGFyc2UgdGhl
IGluaXQgYHZhcmAKKyAgICAvLyBzdGF0ZW1lbnQgb3IgZXhwcmVzc2lvbiwgZGlzYWxsb3dpbmcg
dGhlIGBpbmAgb3BlcmF0b3IgKHNlZQorICAgIC8vIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIGBw
YXJzZUV4cHJlc3Npb25gKSwgYW5kIHRoZW4gY2hlY2sKKyAgICAvLyB3aGV0aGVyIHRoZSBuZXh0
IHRva2VuIGlzIGBpbmAgb3IgYG9mYC4gV2hlbiB0aGVyZSBpcyBubyBpbml0CisgICAgLy8gcGFy
dCAoc2VtaWNvbG9uIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBvcGVuaW5nIHBhcmVudGhlc2lzKSwg
aXQKKyAgICAvLyBpcyBhIHJlZ3VsYXIgYGZvcmAgbG9vcC4KKworICAgIHBwLnBhcnNlRm9yU3Rh
dGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgIHRoaXMubmV4dCgpOworICAgICAgdGhp
cy5zdGF0ZS5sYWJlbHMucHVzaChsb29wTGFiZWwpOworCisgICAgICBsZXQgZm9yQXdhaXQgPSBm
YWxzZTsKKyAgICAgIGlmICh0aGlzLmhhc1BsdWdpbigiYXN5bmNHZW5lcmF0b3JzIikgJiYgdGhp
cy5zdGF0ZS5pbkFzeW5jICYmIHRoaXMuaXNDb250ZXh0dWFsKCJhd2FpdCIpKSB7CisgICAgICAg
IGZvckF3YWl0ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5uZXh0KCk7CisgICAgICB9CisgICAgICB0
aGlzLmV4cGVjdCh0dC5wYXJlbkwpOworCisgICAgICBpZiAodGhpcy5tYXRjaCh0dC5zZW1pKSkg
eworICAgICAgICBpZiAoZm9yQXdhaXQpIHsKKyAgICAgICAgICB0aGlzLnVuZXhwZWN0ZWQoKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUZvcihub2RlLCBudWxsKTsKKyAg
ICAgIH0KKworICAgICAgaWYgKHRoaXMubWF0Y2godHQuX3ZhcikgfHwgdGhpcy5tYXRjaCh0dC5f
bGV0KSB8fCB0aGlzLm1hdGNoKHR0Ll9jb25zdCkpIHsKKyAgICAgICAgY29uc3QgaW5pdCA9IHRo
aXMuc3RhcnROb2RlKCk7CisgICAgICAgIGNvbnN0IHZhcktpbmQgPSB0aGlzLnN0YXRlLnR5cGU7
CisgICAgICAgIHRoaXMubmV4dCgpOworICAgICAgICB0aGlzLnBhcnNlVmFyKGluaXQsIHRydWUs
IHZhcktpbmQpOworICAgICAgICB0aGlzLmZpbmlzaE5vZGUoaW5pdCwgIlZhcmlhYmxlRGVjbGFy
YXRpb24iKTsKKworICAgICAgICBpZiAodGhpcy5tYXRjaCh0dC5faW4pIHx8IHRoaXMuaXNDb250
ZXh0dWFsKCJvZiIpKSB7CisgICAgICAgICAgaWYgKGluaXQuZGVjbGFyYXRpb25zLmxlbmd0aCA9
PT0gMSAmJiAhaW5pdC5kZWNsYXJhdGlvbnNbMF0uaW5pdCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMucGFyc2VGb3JJbihub2RlLCBpbml0LCBmb3JBd2FpdCk7CisgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGlmIChmb3JBd2FpdCkgeworICAgICAgICAgIHRoaXMudW5leHBlY3Rl
ZCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRm9yKG5vZGUsIGluaXQp
OworICAgICAgfQorCisgICAgICBjb25zdCByZWZTaG9ydGhhbmREZWZhdWx0UG9zID0geyBzdGFy
dDogMCB9OworICAgICAgY29uc3QgaW5pdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKHRydWUsIHJl
ZlNob3J0aGFuZERlZmF1bHRQb3MpOworICAgICAgaWYgKHRoaXMubWF0Y2godHQuX2luKSB8fCB0
aGlzLmlzQ29udGV4dHVhbCgib2YiKSkgeworICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRo
aXMuaXNDb250ZXh0dWFsKCJvZiIpID8gImZvci1vZiBzdGF0ZW1lbnQiIDogImZvci1pbiBzdGF0
ZW1lbnQiOworICAgICAgICB0aGlzLnRvQXNzaWduYWJsZShpbml0LCB1bmRlZmluZWQsIGRlc2Ny
aXB0aW9uKTsKKyAgICAgICAgdGhpcy5jaGVja0xWYWwoaW5pdCwgdW5kZWZpbmVkLCB1bmRlZmlu
ZWQsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VGb3JJbihub2RlLCBp
bml0LCBmb3JBd2FpdCk7CisgICAgICB9IGVsc2UgaWYgKHJlZlNob3J0aGFuZERlZmF1bHRQb3Mu
c3RhcnQpIHsKKyAgICAgICAgdGhpcy51bmV4cGVjdGVkKHJlZlNob3J0aGFuZERlZmF1bHRQb3Mu
c3RhcnQpOworICAgICAgfQorICAgICAgaWYgKGZvckF3YWl0KSB7CisgICAgICAgIHRoaXMudW5l
eHBlY3RlZCgpOworICAgICAgfQorICAgICAgcmV0dXJuIHRoaXMucGFyc2VGb3Iobm9kZSwgaW5p
dCk7CisgICAgfTsKKworICAgIHBwLnBhcnNlRnVuY3Rpb25TdGF0ZW1lbnQgPSBmdW5jdGlvbiAo
bm9kZSkgeworICAgICAgdGhpcy5uZXh0KCk7CisgICAgICByZXR1cm4gdGhpcy5wYXJzZUZ1bmN0
aW9uKG5vZGUsIHRydWUpOworICAgIH07CisKKyAgICBwcC5wYXJzZUlmU3RhdGVtZW50ID0gZnVu
Y3Rpb24gKG5vZGUpIHsKKyAgICAgIHRoaXMubmV4dCgpOworICAgICAgbm9kZS50ZXN0ID0gdGhp
cy5wYXJzZVBhcmVuRXhwcmVzc2lvbigpOworICAgICAgbm9kZS5jb25zZXF1ZW50ID0gdGhpcy5w
YXJzZVN0YXRlbWVudChmYWxzZSk7CisgICAgICBub2RlLmFsdGVybmF0ZSA9IHRoaXMuZWF0KHR0
Ll9lbHNlKSA/IHRoaXMucGFyc2VTdGF0ZW1lbnQoZmFsc2UpIDogbnVsbDsKKyAgICAgIHJldHVy
biB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIklmU3RhdGVtZW50Iik7CisgICAgfTsKKworICAgIHBw
LnBhcnNlUmV0dXJuU3RhdGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgIGlmICghdGhp
cy5zdGF0ZS5pbkZ1bmN0aW9uICYmICF0aGlzLm9wdGlvbnMuYWxsb3dSZXR1cm5PdXRzaWRlRnVu
Y3Rpb24pIHsKKyAgICAgICAgdGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0LCAiJ3JldHVybicg
b3V0c2lkZSBvZiBmdW5jdGlvbiIpOworICAgICAgfQorCisgICAgICB0aGlzLm5leHQoKTsKKwor
ICAgICAgLy8gSW4gYHJldHVybmAgKGFuZCBgYnJlYWtgL2Bjb250aW51ZWApLCB0aGUga2V5d29y
ZHMgd2l0aAorICAgICAgLy8gb3B0aW9uYWwgYXJndW1lbnRzLCB3ZSBlYWdlcmx5IGxvb2sgZm9y
IGEgc2VtaWNvbG9uIG9yIHRoZQorICAgICAgLy8gcG9zc2liaWxpdHkgdG8gaW5zZXJ0IG9uZS4K
KworICAgICAgaWYgKHRoaXMuaXNMaW5lVGVybWluYXRvcigpKSB7CisgICAgICAgIG5vZGUuYXJn
dW1lbnQgPSBudWxsOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbm9kZS5hcmd1bWVudCA9IHRo
aXMucGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgIHRoaXMuc2VtaWNvbG9uKCk7CisgICAgICB9
CisKKyAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIlJldHVyblN0YXRlbWVudCIp
OworICAgIH07CisKKyAgICBwcC5wYXJzZVN3aXRjaFN0YXRlbWVudCA9IGZ1bmN0aW9uIChub2Rl
KSB7CisgICAgICB0aGlzLm5leHQoKTsKKyAgICAgIG5vZGUuZGlzY3JpbWluYW50ID0gdGhpcy5w
YXJzZVBhcmVuRXhwcmVzc2lvbigpOworICAgICAgbm9kZS5jYXNlcyA9IFtdOworICAgICAgdGhp
cy5leHBlY3QodHQuYnJhY2VMKTsKKyAgICAgIHRoaXMuc3RhdGUubGFiZWxzLnB1c2goc3dpdGNo
TGFiZWwpOworCisgICAgICAvLyBTdGF0ZW1lbnRzIHVuZGVyIG11c3QgYmUgZ3JvdXBlZCAoYnkg
bGFiZWwpIGluIFN3aXRjaENhc2UKKyAgICAgIC8vIG5vZGVzLiBgY3VyYCBpcyB1c2VkIHRvIGtl
ZXAgdGhlIG5vZGUgdGhhdCB3ZSBhcmUgY3VycmVudGx5CisgICAgICAvLyBhZGRpbmcgc3RhdGVt
ZW50cyB0by4KKworICAgICAgbGV0IGN1cjsKKyAgICAgIGZvciAobGV0IHNhd0RlZmF1bHQ7ICF0
aGlzLm1hdGNoKHR0LmJyYWNlUik7ICkgeworICAgICAgICBpZiAodGhpcy5tYXRjaCh0dC5fY2Fz
ZSkgfHwgdGhpcy5tYXRjaCh0dC5fZGVmYXVsdCkpIHsKKyAgICAgICAgICBjb25zdCBpc0Nhc2Ug
PSB0aGlzLm1hdGNoKHR0Ll9jYXNlKTsKKyAgICAgICAgICBpZiAoY3VyKSB0aGlzLmZpbmlzaE5v
ZGUoY3VyLCAiU3dpdGNoQ2FzZSIpOworICAgICAgICAgIG5vZGUuY2FzZXMucHVzaChjdXIgPSB0
aGlzLnN0YXJ0Tm9kZSgpKTsKKyAgICAgICAgICBjdXIuY29uc2VxdWVudCA9IFtdOworICAgICAg
ICAgIHRoaXMubmV4dCgpOworICAgICAgICAgIGlmIChpc0Nhc2UpIHsKKyAgICAgICAgICAgIGN1
ci50ZXN0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaWYgKHNhd0RlZmF1bHQpIHRoaXMucmFpc2UodGhpcy5zdGF0ZS5sYXN0VG9rU3Rh
cnQsICJNdWx0aXBsZSBkZWZhdWx0IGNsYXVzZXMiKTsKKyAgICAgICAgICAgIHNhd0RlZmF1bHQg
PSB0cnVlOworICAgICAgICAgICAgY3VyLnRlc3QgPSBudWxsOworICAgICAgICAgIH0KKyAgICAg
ICAgICB0aGlzLmV4cGVjdCh0dC5jb2xvbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
aWYgKGN1cikgeworICAgICAgICAgICAgY3VyLmNvbnNlcXVlbnQucHVzaCh0aGlzLnBhcnNlU3Rh
dGVtZW50KHRydWUpKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy51bmV4
cGVjdGVkKCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoY3Vy
KSB0aGlzLmZpbmlzaE5vZGUoY3VyLCAiU3dpdGNoQ2FzZSIpOworICAgICAgdGhpcy5uZXh0KCk7
IC8vIENsb3NpbmcgYnJhY2UKKyAgICAgIHRoaXMuc3RhdGUubGFiZWxzLnBvcCgpOworICAgICAg
cmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAiU3dpdGNoU3RhdGVtZW50Iik7CisgICAgfTsK
KworICAgIHBwLnBhcnNlVGhyb3dTdGF0ZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAg
dGhpcy5uZXh0KCk7CisgICAgICBpZiAobGluZUJyZWFrLnRlc3QodGhpcy5pbnB1dC5zbGljZSh0
aGlzLnN0YXRlLmxhc3RUb2tFbmQsIHRoaXMuc3RhdGUuc3RhcnQpKSkKKyAgICAgICAgdGhpcy5y
YWlzZSh0aGlzLnN0YXRlLmxhc3RUb2tFbmQsICJJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIgdGhyb3ci
KTsKKyAgICAgIG5vZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOworICAgICAg
dGhpcy5zZW1pY29sb24oKTsKKyAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIlRo
cm93U3RhdGVtZW50Iik7CisgICAgfTsKKworICAgIC8vIFJldXNlZCBlbXB0eSBhcnJheSBhZGRl
ZCBmb3Igbm9kZSBmaWVsZHMgdGhhdCBhcmUgYWx3YXlzIGVtcHR5LgorCisgICAgY29uc3QgZW1w
dHkgPSBbXTsKKworICAgIHBwLnBhcnNlVHJ5U3RhdGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHsK
KyAgICAgIHRoaXMubmV4dCgpOworCisgICAgICBub2RlLmJsb2NrID0gdGhpcy5wYXJzZUJsb2Nr
KCk7CisgICAgICBub2RlLmhhbmRsZXIgPSBudWxsOworCisgICAgICBpZiAodGhpcy5tYXRjaCh0
dC5fY2F0Y2gpKSB7CisgICAgICAgIGNvbnN0IGNsYXVzZSA9IHRoaXMuc3RhcnROb2RlKCk7Cisg
ICAgICAgIHRoaXMubmV4dCgpOworCisgICAgICAgIHRoaXMuZXhwZWN0KHR0LnBhcmVuTCk7Cisg
ICAgICAgIGNsYXVzZS5wYXJhbSA9IHRoaXMucGFyc2VCaW5kaW5nQXRvbSgpOworICAgICAgICB0
aGlzLmNoZWNrTFZhbChjbGF1c2UucGFyYW0sIHRydWUsIE9iamVjdC5jcmVhdGUobnVsbCksICJj
YXRjaCBjbGF1c2UiKTsKKyAgICAgICAgdGhpcy5leHBlY3QodHQucGFyZW5SKTsKKworICAgICAg
ICBjbGF1c2UuYm9keSA9IHRoaXMucGFyc2VCbG9jaygpOworICAgICAgICBub2RlLmhhbmRsZXIg
PSB0aGlzLmZpbmlzaE5vZGUoY2xhdXNlLCAiQ2F0Y2hDbGF1c2UiKTsKKyAgICAgIH0KKworICAg
ICAgbm9kZS5ndWFyZGVkSGFuZGxlcnMgPSBlbXB0eTsKKyAgICAgIG5vZGUuZmluYWxpemVyID0g
dGhpcy5lYXQodHQuX2ZpbmFsbHkpID8gdGhpcy5wYXJzZUJsb2NrKCkgOiBudWxsOworCisgICAg
ICBpZiAoIW5vZGUuaGFuZGxlciAmJiAhbm9kZS5maW5hbGl6ZXIpIHsKKyAgICAgICAgdGhpcy5y
YWlzZShub2RlLnN0YXJ0LCAiTWlzc2luZyBjYXRjaCBvciBmaW5hbGx5IGNsYXVzZSIpOworICAg
ICAgfQorCisgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJUcnlTdGF0ZW1lbnQi
KTsKKyAgICB9OworCisgICAgcHAucGFyc2VWYXJTdGF0ZW1lbnQgPSBmdW5jdGlvbiAobm9kZSwg
a2luZCkgeworICAgICAgdGhpcy5uZXh0KCk7CisgICAgICB0aGlzLnBhcnNlVmFyKG5vZGUsIGZh
bHNlLCBraW5kKTsKKyAgICAgIHRoaXMuc2VtaWNvbG9uKCk7CisgICAgICByZXR1cm4gdGhpcy5m
aW5pc2hOb2RlKG5vZGUsICJWYXJpYWJsZURlY2xhcmF0aW9uIik7CisgICAgfTsKKworICAgIHBw
LnBhcnNlV2hpbGVTdGF0ZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAgdGhpcy5uZXh0
KCk7CisgICAgICBub2RlLnRlc3QgPSB0aGlzLnBhcnNlUGFyZW5FeHByZXNzaW9uKCk7CisgICAg
ICB0aGlzLnN0YXRlLmxhYmVscy5wdXNoKGxvb3BMYWJlbCk7CisgICAgICBub2RlLmJvZHkgPSB0
aGlzLnBhcnNlU3RhdGVtZW50KGZhbHNlKTsKKyAgICAgIHRoaXMuc3RhdGUubGFiZWxzLnBvcCgp
OworICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAiV2hpbGVTdGF0ZW1lbnQiKTsK
KyAgICB9OworCisgICAgcHAucGFyc2VXaXRoU3RhdGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHsK
KyAgICAgIGlmICh0aGlzLnN0YXRlLnN0cmljdCkgdGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0
LCAiJ3dpdGgnIGluIHN0cmljdCBtb2RlIik7CisgICAgICB0aGlzLm5leHQoKTsKKyAgICAgIG5v
ZGUub2JqZWN0ID0gdGhpcy5wYXJzZVBhcmVuRXhwcmVzc2lvbigpOworICAgICAgbm9kZS5ib2R5
ID0gdGhpcy5wYXJzZVN0YXRlbWVudChmYWxzZSk7CisgICAgICByZXR1cm4gdGhpcy5maW5pc2hO
b2RlKG5vZGUsICJXaXRoU3RhdGVtZW50Iik7CisgICAgfTsKKworICAgIHBwLnBhcnNlRW1wdHlT
dGF0ZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAgdGhpcy5uZXh0KCk7CisgICAgICBy
ZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJFbXB0eVN0YXRlbWVudCIpOworICAgIH07CisK
KyAgICBwcC5wYXJzZUxhYmVsZWRTdGF0ZW1lbnQgPSBmdW5jdGlvbiAobm9kZSwgbWF5YmVOYW1l
LCBleHByKSB7CisgICAgICBmb3IgKGNvbnN0IGxhYmVsIG9mICh0aGlzLnN0YXRlLmxhYmVscykp
IHsKKyAgICAgICAgaWYgKGxhYmVsLm5hbWUgPT09IG1heWJlTmFtZSkgeworICAgICAgICAgIHRo
aXMucmFpc2UoZXhwci5zdGFydCwgYExhYmVsICcke21heWJlTmFtZX0nIGlzIGFscmVhZHkgZGVj
bGFyZWRgKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBjb25zdCBraW5kID0gdGhpcy5z
dGF0ZS50eXBlLmlzTG9vcCA/ICJsb29wIiA6IHRoaXMubWF0Y2godHQuX3N3aXRjaCkgPyAic3dp
dGNoIiA6IG51bGw7CisgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGF0ZS5sYWJlbHMubGVuZ3Ro
IC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnN0YXRlLmxh
YmVsc1tpXTsKKyAgICAgICAgaWYgKGxhYmVsLnN0YXRlbWVudFN0YXJ0ID09PSBub2RlLnN0YXJ0
KSB7CisgICAgICAgICAgbGFiZWwuc3RhdGVtZW50U3RhcnQgPSB0aGlzLnN0YXRlLnN0YXJ0Owor
ICAgICAgICAgIGxhYmVsLmtpbmQgPSBraW5kOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHRoaXMuc3RhdGUubGFiZWxzLnB1
c2goeyBuYW1lOiBtYXliZU5hbWUsIGtpbmQ6IGtpbmQsIHN0YXRlbWVudFN0YXJ0OiB0aGlzLnN0
YXRlLnN0YXJ0IH0pOworICAgICAgbm9kZS5ib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudCh0cnVl
KTsKKyAgICAgIHRoaXMuc3RhdGUubGFiZWxzLnBvcCgpOworICAgICAgbm9kZS5sYWJlbCA9IGV4
cHI7CisgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJMYWJlbGVkU3RhdGVtZW50
Iik7CisgICAgfTsKKworICAgIHBwLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCA9IGZ1bmN0aW9u
IChub2RlLCBleHByKSB7CisgICAgICBub2RlLmV4cHJlc3Npb24gPSBleHByOworICAgICAgdGhp
cy5zZW1pY29sb24oKTsKKyAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIkV4cHJl
c3Npb25TdGF0ZW1lbnQiKTsKKyAgICB9OworCisgICAgLy8gUGFyc2UgYSBzZW1pY29sb24tZW5j
bG9zZWQgYmxvY2sgb2Ygc3RhdGVtZW50cywgaGFuZGxpbmcgYCJ1c2UKKyAgICAvLyBzdHJpY3Qi
YCBkZWNsYXJhdGlvbnMgd2hlbiBgYWxsb3dTdHJpY3RgIGlzIHRydWUgKHVzZWQgZm9yCisgICAg
Ly8gZnVuY3Rpb24gYm9kaWVzKS4KKworICAgIHBwLnBhcnNlQmxvY2sgPSBmdW5jdGlvbiAoYWxs
b3dEaXJlY3RpdmVzKSB7CisgICAgICBjb25zdCBub2RlID0gdGhpcy5zdGFydE5vZGUoKTsKKyAg
ICAgIHRoaXMuZXhwZWN0KHR0LmJyYWNlTCk7CisgICAgICB0aGlzLnBhcnNlQmxvY2tCb2R5KG5v
ZGUsIGFsbG93RGlyZWN0aXZlcywgZmFsc2UsIHR0LmJyYWNlUik7CisgICAgICByZXR1cm4gdGhp
cy5maW5pc2hOb2RlKG5vZGUsICJCbG9ja1N0YXRlbWVudCIpOworICAgIH07CisKKyAgICBwcC5p
c1ZhbGlkRGlyZWN0aXZlID0gZnVuY3Rpb24gKHN0bXQpIHsKKyAgICAgIHJldHVybiBzdG10LnR5
cGUgPT09ICJFeHByZXNzaW9uU3RhdGVtZW50IiAmJgorICAgICAgICBzdG10LmV4cHJlc3Npb24u
dHlwZSA9PT0gIlN0cmluZ0xpdGVyYWwiICYmCisgICAgICAgICFzdG10LmV4cHJlc3Npb24uZXh0
cmEucGFyZW50aGVzaXplZDsKKyAgICB9OworCisgICAgcHAucGFyc2VCbG9ja0JvZHkgPSBmdW5j
dGlvbiAobm9kZSwgYWxsb3dEaXJlY3RpdmVzLCB0b3BMZXZlbCwgZW5kKSB7CisgICAgICBub2Rl
LmJvZHkgPSBbXTsKKyAgICAgIG5vZGUuZGlyZWN0aXZlcyA9IFtdOworCisgICAgICBsZXQgcGFy
c2VkTm9uRGlyZWN0aXZlID0gZmFsc2U7CisgICAgICBsZXQgb2xkU3RyaWN0OworICAgICAgbGV0
IG9jdGFsUG9zaXRpb247CisKKyAgICAgIHdoaWxlICghdGhpcy5lYXQoZW5kKSkgeworICAgICAg
ICBpZiAoIXBhcnNlZE5vbkRpcmVjdGl2ZSAmJiB0aGlzLnN0YXRlLmNvbnRhaW5zT2N0YWwgJiYg
IW9jdGFsUG9zaXRpb24pIHsKKyAgICAgICAgICBvY3RhbFBvc2l0aW9uID0gdGhpcy5zdGF0ZS5v
Y3RhbFBvc2l0aW9uOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qgc3RtdCA9IHRoaXMucGFy
c2VTdGF0ZW1lbnQodHJ1ZSwgdG9wTGV2ZWwpOworCisgICAgICAgIGlmIChhbGxvd0RpcmVjdGl2
ZXMgJiYgIXBhcnNlZE5vbkRpcmVjdGl2ZSAmJiB0aGlzLmlzVmFsaWREaXJlY3RpdmUoc3RtdCkp
IHsKKyAgICAgICAgICBjb25zdCBkaXJlY3RpdmUgPSB0aGlzLnN0bXRUb0RpcmVjdGl2ZShzdG10
KTsKKyAgICAgICAgICBub2RlLmRpcmVjdGl2ZXMucHVzaChkaXJlY3RpdmUpOworCisgICAgICAg
ICAgaWYgKG9sZFN0cmljdCA9PT0gdW5kZWZpbmVkICYmIGRpcmVjdGl2ZS52YWx1ZS52YWx1ZSA9
PT0gInVzZSBzdHJpY3QiKSB7CisgICAgICAgICAgICBvbGRTdHJpY3QgPSB0aGlzLnN0YXRlLnN0
cmljdDsKKyAgICAgICAgICAgIHRoaXMuc2V0U3RyaWN0KHRydWUpOworCisgICAgICAgICAgICBp
ZiAob2N0YWxQb3NpdGlvbikgeworICAgICAgICAgICAgICB0aGlzLnJhaXNlKG9jdGFsUG9zaXRp
b24sICJPY3RhbCBsaXRlcmFsIGluIHN0cmljdCBtb2RlIik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgfQorCisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBwYXJz
ZWROb25EaXJlY3RpdmUgPSB0cnVlOworICAgICAgICBub2RlLmJvZHkucHVzaChzdG10KTsKKyAg
ICAgIH0KKworICAgICAgaWYgKG9sZFN0cmljdCA9PT0gZmFsc2UpIHsKKyAgICAgICAgdGhpcy5z
ZXRTdHJpY3QoZmFsc2UpOworICAgICAgfQorICAgIH07CisKKyAgICAvLyBQYXJzZSBhIHJlZ3Vs
YXIgYGZvcmAgbG9vcC4gVGhlIGRpc2FtYmlndWF0aW9uIGNvZGUgaW4KKyAgICAvLyBgcGFyc2VT
dGF0ZW1lbnRgIHdpbGwgYWxyZWFkeSBoYXZlIHBhcnNlZCB0aGUgaW5pdCBzdGF0ZW1lbnQgb3IK
KyAgICAvLyBleHByZXNzaW9uLgorCisgICAgcHAucGFyc2VGb3IgPSBmdW5jdGlvbiAobm9kZSwg
aW5pdCkgeworICAgICAgbm9kZS5pbml0ID0gaW5pdDsKKyAgICAgIHRoaXMuZXhwZWN0KHR0LnNl
bWkpOworICAgICAgbm9kZS50ZXN0ID0gdGhpcy5tYXRjaCh0dC5zZW1pKSA/IG51bGwgOiB0aGlz
LnBhcnNlRXhwcmVzc2lvbigpOworICAgICAgdGhpcy5leHBlY3QodHQuc2VtaSk7CisgICAgICBu
b2RlLnVwZGF0ZSA9IHRoaXMubWF0Y2godHQucGFyZW5SKSA/IG51bGwgOiB0aGlzLnBhcnNlRXhw
cmVzc2lvbigpOworICAgICAgdGhpcy5leHBlY3QodHQucGFyZW5SKTsKKyAgICAgIG5vZGUuYm9k
eSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoZmFsc2UpOworICAgICAgdGhpcy5zdGF0ZS5sYWJlbHMu
cG9wKCk7CisgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJGb3JTdGF0ZW1lbnQi
KTsKKyAgICB9OworCisgICAgLy8gUGFyc2UgYSBgZm9yYC9gaW5gIGFuZCBgZm9yYC9gb2ZgIGxv
b3AsIHdoaWNoIGFyZSBhbG1vc3QKKyAgICAvLyBzYW1lIGZyb20gcGFyc2VyJ3MgcGVyc3BlY3Rp
dmUuCisKKyAgICBwcC5wYXJzZUZvckluID0gZnVuY3Rpb24gKG5vZGUsIGluaXQsIGZvckF3YWl0
KSB7CisgICAgICBjb25zdCB0eXBlID0gdGhpcy5tYXRjaCh0dC5faW4pID8gIkZvckluU3RhdGVt
ZW50IiA6ICJGb3JPZlN0YXRlbWVudCI7CisgICAgICBpZiAoZm9yQXdhaXQpIHsKKyAgICAgICAg
dGhpcy5lYXRDb250ZXh0dWFsKCJvZiIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5u
ZXh0KCk7CisgICAgICB9CisgICAgICBub2RlLmF3YWl0ID0gISFmb3JBd2FpdDsKKyAgICAgIG5v
ZGUubGVmdCA9IGluaXQ7CisgICAgICBub2RlLnJpZ2h0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24o
KTsKKyAgICAgIHRoaXMuZXhwZWN0KHR0LnBhcmVuUik7CisgICAgICBub2RlLmJvZHkgPSB0aGlz
LnBhcnNlU3RhdGVtZW50KGZhbHNlKTsKKyAgICAgIHRoaXMuc3RhdGUubGFiZWxzLnBvcCgpOwor
ICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCB0eXBlKTsKKyAgICB9OworCisgICAg
Ly8gUGFyc2UgYSBsaXN0IG9mIHZhcmlhYmxlIGRlY2xhcmF0aW9ucy4KKworICAgIHBwLnBhcnNl
VmFyID0gZnVuY3Rpb24gKG5vZGUsIGlzRm9yLCBraW5kKSB7CisgICAgICBub2RlLmRlY2xhcmF0
aW9ucyA9IFtdOworICAgICAgbm9kZS5raW5kID0ga2luZC5rZXl3b3JkOworICAgICAgZm9yICg7
OykgeworICAgICAgICBjb25zdCBkZWNsID0gdGhpcy5zdGFydE5vZGUoKTsKKyAgICAgICAgdGhp
cy5wYXJzZVZhckhlYWQoZGVjbCk7CisgICAgICAgIGlmICh0aGlzLmVhdCh0dC5lcSkpIHsKKyAg
ICAgICAgICBkZWNsLmluaXQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oaXNGb3IpOworICAgICAg
ICB9IGVsc2UgaWYgKGtpbmQgPT09IHR0Ll9jb25zdCAmJiAhKHRoaXMubWF0Y2godHQuX2luKSB8
fCB0aGlzLmlzQ29udGV4dHVhbCgib2YiKSkpIHsKKyAgICAgICAgICB0aGlzLnVuZXhwZWN0ZWQo
KTsKKyAgICAgICAgfSBlbHNlIGlmIChkZWNsLmlkLnR5cGUgIT09ICJJZGVudGlmaWVyIiAmJiAh
KGlzRm9yICYmICh0aGlzLm1hdGNoKHR0Ll9pbikgfHwgdGhpcy5pc0NvbnRleHR1YWwoIm9mIikp
KSkgeworICAgICAgICAgIHRoaXMucmFpc2UodGhpcy5zdGF0ZS5sYXN0VG9rRW5kLCAiQ29tcGxl
eCBiaW5kaW5nIHBhdHRlcm5zIHJlcXVpcmUgYW4gaW5pdGlhbGl6YXRpb24gdmFsdWUiKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBkZWNsLmluaXQgPSBudWxsOworICAgICAgICB9Cisg
ICAgICAgIG5vZGUuZGVjbGFyYXRpb25zLnB1c2godGhpcy5maW5pc2hOb2RlKGRlY2wsICJWYXJp
YWJsZURlY2xhcmF0b3IiKSk7CisgICAgICAgIGlmICghdGhpcy5lYXQodHQuY29tbWEpKSBicmVh
azsKKyAgICAgIH0KKyAgICAgIHJldHVybiBub2RlOworICAgIH07CisKKyAgICBwcC5wYXJzZVZh
ckhlYWQgPSBmdW5jdGlvbiAoZGVjbCkgeworICAgICAgZGVjbC5pZCA9IHRoaXMucGFyc2VCaW5k
aW5nQXRvbSgpOworICAgICAgdGhpcy5jaGVja0xWYWwoZGVjbC5pZCwgdHJ1ZSwgdW5kZWZpbmVk
LCAidmFyaWFibGUgZGVjbGFyYXRpb24iKTsKKyAgICB9OworCisgICAgLy8gUGFyc2UgYSBmdW5j
dGlvbiBkZWNsYXJhdGlvbiBvciBsaXRlcmFsIChkZXBlbmRpbmcgb24gdGhlCisgICAgLy8gYGlz
U3RhdGVtZW50YCBwYXJhbWV0ZXIpLgorCisgICAgcHAucGFyc2VGdW5jdGlvbiA9IGZ1bmN0aW9u
IChub2RlLCBpc1N0YXRlbWVudCwgYWxsb3dFeHByZXNzaW9uQm9keSwgaXNBc3luYywgb3B0aW9u
YWxJZCkgeworICAgICAgY29uc3Qgb2xkSW5NZXRob2QgPSB0aGlzLnN0YXRlLmluTWV0aG9kOwor
ICAgICAgdGhpcy5zdGF0ZS5pbk1ldGhvZCA9IGZhbHNlOworCisgICAgICB0aGlzLmluaXRGdW5j
dGlvbihub2RlLCBpc0FzeW5jKTsKKworICAgICAgaWYgKHRoaXMubWF0Y2godHQuc3RhcikpIHsK
KyAgICAgICAgaWYgKG5vZGUuYXN5bmMgJiYgIXRoaXMuaGFzUGx1Z2luKCJhc3luY0dlbmVyYXRv
cnMiKSkgeworICAgICAgICAgIHRoaXMudW5leHBlY3RlZCgpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgIG5vZGUuZ2VuZXJhdG9yID0gdHJ1ZTsKKyAgICAgICAgICB0aGlzLm5leHQoKTsK
KyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoaXNTdGF0ZW1lbnQgJiYgIW9wdGlvbmFs
SWQgJiYgIXRoaXMubWF0Y2godHQubmFtZSkgJiYgIXRoaXMubWF0Y2godHQuX3lpZWxkKSkgewor
ICAgICAgICB0aGlzLnVuZXhwZWN0ZWQoKTsKKyAgICAgIH0KKworICAgICAgaWYgKHRoaXMubWF0
Y2godHQubmFtZSkgfHwgdGhpcy5tYXRjaCh0dC5feWllbGQpKSB7CisgICAgICAgIG5vZGUuaWQg
PSB0aGlzLnBhcnNlQmluZGluZ0lkZW50aWZpZXIoKTsKKyAgICAgIH0KKworICAgICAgdGhpcy5w
YXJzZUZ1bmN0aW9uUGFyYW1zKG5vZGUpOworICAgICAgdGhpcy5wYXJzZUZ1bmN0aW9uQm9keShu
b2RlLCBhbGxvd0V4cHJlc3Npb25Cb2R5KTsKKworICAgICAgdGhpcy5zdGF0ZS5pbk1ldGhvZCA9
IG9sZEluTWV0aG9kOworCisgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIGlzU3Rh
dGVtZW50ID8gIkZ1bmN0aW9uRGVjbGFyYXRpb24iIDogIkZ1bmN0aW9uRXhwcmVzc2lvbiIpOwor
ICAgIH07CisKKyAgICBwcC5wYXJzZUZ1bmN0aW9uUGFyYW1zID0gZnVuY3Rpb24gKG5vZGUpIHsK
KyAgICAgIHRoaXMuZXhwZWN0KHR0LnBhcmVuTCk7CisgICAgICBub2RlLnBhcmFtcyA9IHRoaXMu
cGFyc2VCaW5kaW5nTGlzdCh0dC5wYXJlblIpOworICAgIH07CisKKyAgICAvLyBQYXJzZSBhIGNs
YXNzIGRlY2xhcmF0aW9uIG9yIGxpdGVyYWwgKGRlcGVuZGluZyBvbiB0aGUKKyAgICAvLyBgaXNT
dGF0ZW1lbnRgIHBhcmFtZXRlcikuCisKKyAgICBwcC5wYXJzZUNsYXNzID0gZnVuY3Rpb24gKG5v
ZGUsIGlzU3RhdGVtZW50LCBvcHRpb25hbElkKSB7CisgICAgICB0aGlzLm5leHQoKTsKKyAgICAg
IHRoaXMudGFrZURlY29yYXRvcnMobm9kZSk7CisgICAgICB0aGlzLnBhcnNlQ2xhc3NJZChub2Rl
LCBpc1N0YXRlbWVudCwgb3B0aW9uYWxJZCk7CisgICAgICB0aGlzLnBhcnNlQ2xhc3NTdXBlcihu
b2RlKTsKKyAgICAgIHRoaXMucGFyc2VDbGFzc0JvZHkobm9kZSk7CisgICAgICByZXR1cm4gdGhp
cy5maW5pc2hOb2RlKG5vZGUsIGlzU3RhdGVtZW50ID8gIkNsYXNzRGVjbGFyYXRpb24iIDogIkNs
YXNzRXhwcmVzc2lvbiIpOworICAgIH07CisKKyAgICBwcC5pc0NsYXNzUHJvcGVydHkgPSBmdW5j
dGlvbiAoKSB7CisgICAgICByZXR1cm4gdGhpcy5tYXRjaCh0dC5lcSkgfHwgdGhpcy5tYXRjaCh0
dC5zZW1pKSB8fCB0aGlzLm1hdGNoKHR0LmJyYWNlUik7CisgICAgfTsKKworICAgIHBwLmlzQ2xh
c3NNZXRob2QgPSBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gdGhpcy5tYXRjaCh0dC5wYXJl
bkwpOworICAgIH07CisKKyAgICBwcC5pc05vbnN0YXRpY0NvbnN0cnVjdG9yID0gZnVuY3Rpb24g
KG1ldGhvZCkgeworICAgICAgcmV0dXJuICFtZXRob2QuY29tcHV0ZWQgJiYgIW1ldGhvZC5zdGF0
aWMgJiYgKAorICAgICAgICAobWV0aG9kLmtleS5uYW1lID09PSAiY29uc3RydWN0b3IiKSB8fCAv
LyBJZGVudGlmaWVyCisgICAgICAgIChtZXRob2Qua2V5LnZhbHVlID09PSAiY29uc3RydWN0b3Ii
KSAgIC8vIExpdGVyYWwKKyAgICAgICk7CisgICAgfTsKKworICAgIHBwLnBhcnNlQ2xhc3NCb2R5
ID0gZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgIC8vIGNsYXNzIGJvZGllcyBhcmUgaW1wbGljaXRs
eSBzdHJpY3QKKyAgICAgIGNvbnN0IG9sZFN0cmljdCA9IHRoaXMuc3RhdGUuc3RyaWN0OworICAg
ICAgdGhpcy5zdGF0ZS5zdHJpY3QgPSB0cnVlOworCisgICAgICBsZXQgaGFkQ29uc3RydWN0b3Ig
PSBmYWxzZTsKKyAgICAgIGxldCBkZWNvcmF0b3JzID0gW107CisgICAgICBjb25zdCBjbGFzc0Jv
ZHkgPSB0aGlzLnN0YXJ0Tm9kZSgpOworCisgICAgICBjbGFzc0JvZHkuYm9keSA9IFtdOworCisg
ICAgICB0aGlzLmV4cGVjdCh0dC5icmFjZUwpOworCisgICAgICB3aGlsZSAoIXRoaXMuZWF0KHR0
LmJyYWNlUikpIHsKKyAgICAgICAgaWYgKHRoaXMuZWF0KHR0LnNlbWkpKSB7CisgICAgICAgICAg
aWYgKGRlY29yYXRvcnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgdGhpcy5yYWlzZSh0aGlz
LnN0YXRlLmxhc3RUb2tFbmQsICJEZWNvcmF0b3JzIG11c3Qgbm90IGJlIGZvbGxvd2VkIGJ5IGEg
c2VtaWNvbG9uIik7CisgICAgICAgICAgfQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHRoaXMubWF0Y2godHQuYXQpKSB7CisgICAgICAgICAgZGVjb3JhdG9y
cy5wdXNoKHRoaXMucGFyc2VEZWNvcmF0b3IoKSk7CisgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICBjb25zdCBtZXRob2QgPSB0aGlzLnN0YXJ0Tm9kZSgpOworCisgICAg
ICAgIC8vIHN0ZWFsIHRoZSBkZWNvcmF0b3JzIGlmIHRoZXJlIGFyZSBhbnkKKyAgICAgICAgaWYg
KGRlY29yYXRvcnMubGVuZ3RoKSB7CisgICAgICAgICAgbWV0aG9kLmRlY29yYXRvcnMgPSBkZWNv
cmF0b3JzOworICAgICAgICAgIGRlY29yYXRvcnMgPSBbXTsKKyAgICAgICAgfQorCisgICAgICAg
IG1ldGhvZC5zdGF0aWMgPSBmYWxzZTsKKyAgICAgICAgaWYgKHRoaXMubWF0Y2godHQubmFtZSkg
JiYgdGhpcy5zdGF0ZS52YWx1ZSA9PT0gInN0YXRpYyIpIHsKKyAgICAgICAgICBjb25zdCBrZXkg
PSB0aGlzLnBhcnNlSWRlbnRpZmllcih0cnVlKTsgLy8gZWF0cyAnc3RhdGljJworICAgICAgICAg
IGlmICh0aGlzLmlzQ2xhc3NNZXRob2QoKSkgeworICAgICAgICAgICAgLy8gYSBtZXRob2QgbmFt
ZWQgJ3N0YXRpYycKKyAgICAgICAgICAgIG1ldGhvZC5raW5kID0gIm1ldGhvZCI7CisgICAgICAg
ICAgICBtZXRob2QuY29tcHV0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1ldGhvZC5rZXkgPSBr
ZXk7CisgICAgICAgICAgICB0aGlzLnBhcnNlQ2xhc3NNZXRob2QoY2xhc3NCb2R5LCBtZXRob2Qs
IGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9IGVsc2Ug
aWYgKHRoaXMuaXNDbGFzc1Byb3BlcnR5KCkpIHsKKyAgICAgICAgICAgIC8vIGEgcHJvcGVydHkg
bmFtZWQgJ3N0YXRpYycKKyAgICAgICAgICAgIG1ldGhvZC5jb21wdXRlZCA9IGZhbHNlOworICAg
ICAgICAgICAgbWV0aG9kLmtleSA9IGtleTsKKyAgICAgICAgICAgIGNsYXNzQm9keS5ib2R5LnB1
c2godGhpcy5wYXJzZUNsYXNzUHJvcGVydHkobWV0aG9kKSk7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICB9CisgICAgICAgICAgLy8gb3RoZXJ3aXNlIHNvbWV0aGluZyBzdGF0aWMK
KyAgICAgICAgICBtZXRob2Quc3RhdGljID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICh0aGlzLmVhdCh0dC5zdGFyKSkgeworICAgICAgICAgIC8vIGEgZ2VuZXJhdG9yCisgICAgICAg
ICAgbWV0aG9kLmtpbmQgPSAibWV0aG9kIjsKKyAgICAgICAgICB0aGlzLnBhcnNlUHJvcGVydHlO
YW1lKG1ldGhvZCk7CisgICAgICAgICAgaWYgKHRoaXMuaXNOb25zdGF0aWNDb25zdHJ1Y3Rvciht
ZXRob2QpKSB7CisgICAgICAgICAgICB0aGlzLnJhaXNlKG1ldGhvZC5rZXkuc3RhcnQsICJDb25z
dHJ1Y3RvciBjYW4ndCBiZSBhIGdlbmVyYXRvciIpOworICAgICAgICAgIH0KKyAgICAgICAgICBp
ZiAoIW1ldGhvZC5jb21wdXRlZCAmJiBtZXRob2Quc3RhdGljICYmIChtZXRob2Qua2V5Lm5hbWUg
PT09ICJwcm90b3R5cGUiIHx8IG1ldGhvZC5rZXkudmFsdWUgPT09ICJwcm90b3R5cGUiKSkgewor
ICAgICAgICAgICAgdGhpcy5yYWlzZShtZXRob2Qua2V5LnN0YXJ0LCAiQ2xhc3NlcyBtYXkgbm90
IGhhdmUgc3RhdGljIHByb3BlcnR5IG5hbWVkIHByb3RvdHlwZSIpOworICAgICAgICAgIH0KKyAg
ICAgICAgICB0aGlzLnBhcnNlQ2xhc3NNZXRob2QoY2xhc3NCb2R5LCBtZXRob2QsIHRydWUsIGZh
bHNlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBjb25zdCBpc1NpbXBsZSA9IHRoaXMu
bWF0Y2godHQubmFtZSk7CisgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5wYXJzZVByb3BlcnR5
TmFtZShtZXRob2QpOworICAgICAgICAgIGlmICghbWV0aG9kLmNvbXB1dGVkICYmIG1ldGhvZC5z
dGF0aWMgJiYgKG1ldGhvZC5rZXkubmFtZSA9PT0gInByb3RvdHlwZSIgfHwgbWV0aG9kLmtleS52
YWx1ZSA9PT0gInByb3RvdHlwZSIpKSB7CisgICAgICAgICAgICB0aGlzLnJhaXNlKG1ldGhvZC5r
ZXkuc3RhcnQsICJDbGFzc2VzIG1heSBub3QgaGF2ZSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgcHJv
dG90eXBlIik7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICh0aGlzLmlzQ2xhc3NNZXRob2Qo
KSkgeworICAgICAgICAgICAgLy8gYSBub3JtYWwgbWV0aG9kCisgICAgICAgICAgICBpZiAodGhp
cy5pc05vbnN0YXRpY0NvbnN0cnVjdG9yKG1ldGhvZCkpIHsKKyAgICAgICAgICAgICAgaWYgKGhh
ZENvbnN0cnVjdG9yKSB7CisgICAgICAgICAgICAgICAgdGhpcy5yYWlzZShrZXkuc3RhcnQsICJE
dXBsaWNhdGUgY29uc3RydWN0b3IgaW4gdGhlIHNhbWUgY2xhc3MiKTsKKyAgICAgICAgICAgICAg
fSBlbHNlIGlmIChtZXRob2QuZGVjb3JhdG9ycykgeworICAgICAgICAgICAgICAgIHRoaXMucmFp
c2UobWV0aG9kLnN0YXJ0LCAiWW91IGNhbid0IGF0dGFjaCBkZWNvcmF0b3JzIHRvIGEgY2xhc3Mg
Y29uc3RydWN0b3IiKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBoYWRDb25zdHJ1
Y3RvciA9IHRydWU7CisgICAgICAgICAgICAgIG1ldGhvZC5raW5kID0gImNvbnN0cnVjdG9yIjsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIG1ldGhvZC5raW5kID0gIm1ldGhv
ZCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLnBhcnNlQ2xhc3NNZXRob2QoY2xh
c3NCb2R5LCBtZXRob2QsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgfSBlbHNlIGlmICh0aGlz
LmlzQ2xhc3NQcm9wZXJ0eSgpKSB7CisgICAgICAgICAgICAvLyBhIG5vcm1hbCBwcm9wZXJ0eQor
ICAgICAgICAgICAgaWYgKHRoaXMuaXNOb25zdGF0aWNDb25zdHJ1Y3RvcihtZXRob2QpKSB7Cisg
ICAgICAgICAgICAgIHRoaXMucmFpc2UobWV0aG9kLmtleS5zdGFydCwgIkNsYXNzZXMgbWF5IG5v
dCBoYXZlIGEgbm9uLXN0YXRpYyBmaWVsZCBuYW1lZCAnY29uc3RydWN0b3InIik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjbGFzc0JvZHkuYm9keS5wdXNoKHRoaXMucGFyc2VDbGFzc1By
b3BlcnR5KG1ldGhvZCkpOworICAgICAgICAgIH0gZWxzZSBpZiAoaXNTaW1wbGUgJiYga2V5Lm5h
bWUgPT09ICJhc3luYyIgJiYgIXRoaXMuaXNMaW5lVGVybWluYXRvcigpKSB7CisgICAgICAgICAg
ICAvLyBhbiBhc3luYyBtZXRob2QKKyAgICAgICAgICAgIGNvbnN0IGlzR2VuZXJhdG9yID0gdGhp
cy5oYXNQbHVnaW4oImFzeW5jR2VuZXJhdG9ycyIpICYmIHRoaXMuZWF0KHR0LnN0YXIpOworICAg
ICAgICAgICAgbWV0aG9kLmtpbmQgPSAibWV0aG9kIjsKKyAgICAgICAgICAgIHRoaXMucGFyc2VQ
cm9wZXJ0eU5hbWUobWV0aG9kKTsKKyAgICAgICAgICAgIGlmICh0aGlzLmlzTm9uc3RhdGljQ29u
c3RydWN0b3IobWV0aG9kKSkgeworICAgICAgICAgICAgICB0aGlzLnJhaXNlKG1ldGhvZC5rZXku
c3RhcnQsICJDb25zdHJ1Y3RvciBjYW4ndCBiZSBhbiBhc3luYyBmdW5jdGlvbiIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhpcy5wYXJzZUNsYXNzTWV0aG9kKGNsYXNzQm9keSwgbWV0
aG9kLCBpc0dlbmVyYXRvciwgdHJ1ZSk7CisgICAgICAgICAgfSBlbHNlIGlmIChpc1NpbXBsZSAm
JiAoa2V5Lm5hbWUgPT09ICJnZXQiIHx8IGtleS5uYW1lID09PSAic2V0IikgJiYgISh0aGlzLmlz
TGluZVRlcm1pbmF0b3IoKSAmJiB0aGlzLm1hdGNoKHR0LnN0YXIpKSkgeyAvLyBgZ2V0XG4qYCBp
cyBhbiB1bmluaXRpYWxpemVkIHByb3BlcnR5IG5hbWVkICdnZXQnIGZvbGxvd2VkIGJ5IGEgZ2Vu
ZXJhdG9yLgorICAgICAgICAgICAgLy8gYSBnZXR0ZXIgb3Igc2V0dGVyCisgICAgICAgICAgICBt
ZXRob2Qua2luZCA9IGtleS5uYW1lOworICAgICAgICAgICAgdGhpcy5wYXJzZVByb3BlcnR5TmFt
ZShtZXRob2QpOworICAgICAgICAgICAgaWYgKHRoaXMuaXNOb25zdGF0aWNDb25zdHJ1Y3Rvciht
ZXRob2QpKSB7CisgICAgICAgICAgICAgIHRoaXMucmFpc2UobWV0aG9kLmtleS5zdGFydCwgIkNv
bnN0cnVjdG9yIGNhbid0IGhhdmUgZ2V0L3NldCBtb2RpZmllciIpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhpcy5wYXJzZUNsYXNzTWV0aG9kKGNsYXNzQm9keSwgbWV0aG9kLCBmYWxz
ZSwgZmFsc2UpOworICAgICAgICAgICAgdGhpcy5jaGVja0dldHRlclNldHRlclBhcmFtQ291bnQo
bWV0aG9kKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNMaW5lVGVybWluYXRvcigpKSB7
CisgICAgICAgICAgICAvLyBhbiB1bmluaXRpYWxpemVkIGNsYXNzIHByb3BlcnR5IChkdWUgdG8g
QVNJLCBzaW5jZSB3ZSBkb24ndCBvdGhlcndpc2UgcmVjb2duaXplIHRoZSBuZXh0IHRva2VuKQor
ICAgICAgICAgICAgaWYgKHRoaXMuaXNOb25zdGF0aWNDb25zdHJ1Y3RvcihtZXRob2QpKSB7Cisg
ICAgICAgICAgICAgIHRoaXMucmFpc2UobWV0aG9kLmtleS5zdGFydCwgIkNsYXNzZXMgbWF5IG5v
dCBoYXZlIGEgbm9uLXN0YXRpYyBmaWVsZCBuYW1lZCAnY29uc3RydWN0b3InIik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjbGFzc0JvZHkuYm9keS5wdXNoKHRoaXMucGFyc2VDbGFzc1By
b3BlcnR5KG1ldGhvZCkpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLnVu
ZXhwZWN0ZWQoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYg
KGRlY29yYXRvcnMubGVuZ3RoKSB7CisgICAgICAgIHRoaXMucmFpc2UodGhpcy5zdGF0ZS5zdGFy
dCwgIllvdSBoYXZlIHRyYWlsaW5nIGRlY29yYXRvcnMgd2l0aCBubyBtZXRob2QiKTsKKyAgICAg
IH0KKworICAgICAgbm9kZS5ib2R5ID0gdGhpcy5maW5pc2hOb2RlKGNsYXNzQm9keSwgIkNsYXNz
Qm9keSIpOworCisgICAgICB0aGlzLnN0YXRlLnN0cmljdCA9IG9sZFN0cmljdDsKKyAgICB9Owor
CisgICAgcHAucGFyc2VDbGFzc1Byb3BlcnR5ID0gZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgIGNv
bnN0IG5vUGx1Z2luTXNnID0gIllvdSBjYW4gb25seSB1c2UgQ2xhc3MgUHJvcGVydGllcyB3aGVu
IHRoZSAnY2xhc3NQcm9wZXJ0aWVzJyBwbHVnaW4gaXMgZW5hYmxlZC4iOworICAgICAgaWYgKCFu
b2RlLnR5cGVBbm5vdGF0aW9uICYmICF0aGlzLmhhc1BsdWdpbigiY2xhc3NQcm9wZXJ0aWVzIikp
IHsKKyAgICAgICAgdGhpcy5yYWlzZShub2RlLnN0YXJ0LCBub1BsdWdpbk1zZyk7CisgICAgICB9
CisKKyAgICAgIGlmICh0aGlzLm1hdGNoKHR0LmVxKSkgeworICAgICAgICBpZiAoIXRoaXMuaGFz
UGx1Z2luKCJjbGFzc1Byb3BlcnRpZXMiKSkgdGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0LCBu
b1BsdWdpbk1zZyk7CisgICAgICAgIHRoaXMubmV4dCgpOworICAgICAgICBub2RlLnZhbHVlID0g
dGhpcy5wYXJzZU1heWJlQXNzaWduKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBub2RlLnZh
bHVlID0gbnVsbDsKKyAgICAgIH0KKyAgICAgIHRoaXMuc2VtaWNvbG9uKCk7CisgICAgICByZXR1
cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJDbGFzc1Byb3BlcnR5Iik7CisgICAgfTsKKworICAg
IHBwLnBhcnNlQ2xhc3NNZXRob2QgPSBmdW5jdGlvbiAoY2xhc3NCb2R5LCBtZXRob2QsIGlzR2Vu
ZXJhdG9yLCBpc0FzeW5jKSB7CisgICAgICB0aGlzLnBhcnNlTWV0aG9kKG1ldGhvZCwgaXNHZW5l
cmF0b3IsIGlzQXN5bmMpOworICAgICAgY2xhc3NCb2R5LmJvZHkucHVzaCh0aGlzLmZpbmlzaE5v
ZGUobWV0aG9kLCAiQ2xhc3NNZXRob2QiKSk7CisgICAgfTsKKworICAgIHBwLnBhcnNlQ2xhc3NJ
ZCA9IGZ1bmN0aW9uIChub2RlLCBpc1N0YXRlbWVudCwgb3B0aW9uYWxJZCkgeworICAgICAgaWYg
KHRoaXMubWF0Y2godHQubmFtZSkpIHsKKyAgICAgICAgbm9kZS5pZCA9IHRoaXMucGFyc2VJZGVu
dGlmaWVyKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAob3B0aW9uYWxJZCB8fCAhaXNT
dGF0ZW1lbnQpIHsKKyAgICAgICAgICBub2RlLmlkID0gbnVsbDsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICB0aGlzLnVuZXhwZWN0ZWQoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07
CisKKyAgICBwcC5wYXJzZUNsYXNzU3VwZXIgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAgbm9k
ZS5zdXBlckNsYXNzID0gdGhpcy5lYXQodHQuX2V4dGVuZHMpID8gdGhpcy5wYXJzZUV4cHJTdWJz
Y3JpcHRzKCkgOiBudWxsOworICAgIH07CisKKyAgICAvLyBQYXJzZXMgbW9kdWxlIGV4cG9ydCBk
ZWNsYXJhdGlvbi4KKworICAgIHBwLnBhcnNlRXhwb3J0ID0gZnVuY3Rpb24gKG5vZGUpIHsKKyAg
ICAgIHRoaXMubmV4dCgpOworICAgICAgLy8gZXhwb3J0ICogZnJvbSAnLi4uJworICAgICAgaWYg
KHRoaXMubWF0Y2godHQuc3RhcikpIHsKKyAgICAgICAgY29uc3Qgc3BlY2lmaWVyID0gdGhpcy5z
dGFydE5vZGUoKTsKKyAgICAgICAgdGhpcy5uZXh0KCk7CisgICAgICAgIGlmICh0aGlzLmhhc1Bs
dWdpbigiZXhwb3J0RXh0ZW5zaW9ucyIpICYmIHRoaXMuZWF0Q29udGV4dHVhbCgiYXMiKSkgewor
ICAgICAgICAgIHNwZWNpZmllci5leHBvcnRlZCA9IHRoaXMucGFyc2VJZGVudGlmaWVyKCk7Cisg
ICAgICAgICAgbm9kZS5zcGVjaWZpZXJzID0gW3RoaXMuZmluaXNoTm9kZShzcGVjaWZpZXIsICJF
eHBvcnROYW1lc3BhY2VTcGVjaWZpZXIiKV07CisgICAgICAgICAgdGhpcy5wYXJzZUV4cG9ydFNw
ZWNpZmllcnNNYXliZShub2RlKTsKKyAgICAgICAgICB0aGlzLnBhcnNlRXhwb3J0RnJvbShub2Rl
LCB0cnVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aGlzLnBhcnNlRXhwb3J0RnJv
bShub2RlLCB0cnVlKTsKKyAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJF
eHBvcnRBbGxEZWNsYXJhdGlvbiIpOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKHRoaXMu
aGFzUGx1Z2luKCJleHBvcnRFeHRlbnNpb25zIikgJiYgdGhpcy5pc0V4cG9ydERlZmF1bHRTcGVj
aWZpZXIoKSkgeworICAgICAgICBjb25zdCBzcGVjaWZpZXIgPSB0aGlzLnN0YXJ0Tm9kZSgpOwor
ICAgICAgICBzcGVjaWZpZXIuZXhwb3J0ZWQgPSB0aGlzLnBhcnNlSWRlbnRpZmllcih0cnVlKTsK
KyAgICAgICAgbm9kZS5zcGVjaWZpZXJzID0gW3RoaXMuZmluaXNoTm9kZShzcGVjaWZpZXIsICJF
eHBvcnREZWZhdWx0U3BlY2lmaWVyIildOworICAgICAgICBpZiAodGhpcy5tYXRjaCh0dC5jb21t
YSkgJiYgdGhpcy5sb29rYWhlYWQoKS50eXBlID09PSB0dC5zdGFyKSB7CisgICAgICAgICAgdGhp
cy5leHBlY3QodHQuY29tbWEpOworICAgICAgICAgIGNvbnN0IHNwZWNpZmllciA9IHRoaXMuc3Rh
cnROb2RlKCk7CisgICAgICAgICAgdGhpcy5leHBlY3QodHQuc3Rhcik7CisgICAgICAgICAgdGhp
cy5leHBlY3RDb250ZXh0dWFsKCJhcyIpOworICAgICAgICAgIHNwZWNpZmllci5leHBvcnRlZCA9
IHRoaXMucGFyc2VJZGVudGlmaWVyKCk7CisgICAgICAgICAgbm9kZS5zcGVjaWZpZXJzLnB1c2go
dGhpcy5maW5pc2hOb2RlKHNwZWNpZmllciwgIkV4cG9ydE5hbWVzcGFjZVNwZWNpZmllciIpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aGlzLnBhcnNlRXhwb3J0U3BlY2lmaWVyc01h
eWJlKG5vZGUpOworICAgICAgICB9CisgICAgICAgIHRoaXMucGFyc2VFeHBvcnRGcm9tKG5vZGUs
IHRydWUpOworICAgICAgfSBlbHNlIGlmICh0aGlzLmVhdCh0dC5fZGVmYXVsdCkpIHsgLy8gZXhw
b3J0IGRlZmF1bHQgLi4uCisgICAgICAgIGxldCBleHByID0gdGhpcy5zdGFydE5vZGUoKTsKKyAg
ICAgICAgbGV0IG5lZWRzU2VtaSA9IGZhbHNlOworICAgICAgICBpZiAodGhpcy5lYXQodHQuX2Z1
bmN0aW9uKSkgeworICAgICAgICAgIGV4cHIgPSB0aGlzLnBhcnNlRnVuY3Rpb24oZXhwciwgdHJ1
ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgfSBlbHNlIGlmICgKKyAgICAgICAgICB0
aGlzLmlzQ29udGV4dHVhbCgiYXN5bmMiKSAmJgorICAgICAgICAgIHRoaXMubG9va2FoZWFkKCku
dHlwZSA9PT0gdHQuX2Z1bmN0aW9uCisgICAgICAgICkgeyAvLyBhc3luYyBmdW5jdGlvbiBkZWNs
YXJhdGlvbgorICAgICAgICAgIHRoaXMuZWF0Q29udGV4dHVhbCgiYXN5bmMiKTsKKyAgICAgICAg
ICB0aGlzLmVhdCh0dC5fZnVuY3Rpb24pOworICAgICAgICAgIGV4cHIgPSB0aGlzLnBhcnNlRnVu
Y3Rpb24oZXhwciwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUpOworICAgICAgICB9IGVsc2UgaWYg
KHRoaXMubWF0Y2godHQuX2NsYXNzKSkgeworICAgICAgICAgIGV4cHIgPSB0aGlzLnBhcnNlQ2xh
c3MoZXhwciwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbmVlZHNT
ZW1pID0gdHJ1ZTsKKyAgICAgICAgICBleHByID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgbm9kZS5kZWNsYXJhdGlvbiA9IGV4cHI7CisgICAgICAgIGlmIChu
ZWVkc1NlbWkpIHRoaXMuc2VtaWNvbG9uKCk7CisgICAgICAgIHRoaXMuY2hlY2tFeHBvcnQobm9k
ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIkV4
cG9ydERlZmF1bHREZWNsYXJhdGlvbiIpOworICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3VsZFBh
cnNlRXhwb3J0RGVjbGFyYXRpb24oKSkgeworICAgICAgICBub2RlLnNwZWNpZmllcnMgPSBbXTsK
KyAgICAgICAgbm9kZS5zb3VyY2UgPSBudWxsOworICAgICAgICBub2RlLmRlY2xhcmF0aW9uID0g
dGhpcy5wYXJzZUV4cG9ydERlY2xhcmF0aW9uKG5vZGUpOworICAgICAgfSBlbHNlIHsgLy8gZXhw
b3J0IHsgeCwgeSBhcyB6IH0gW2Zyb20gJy4uLiddCisgICAgICAgIG5vZGUuZGVjbGFyYXRpb24g
PSBudWxsOworICAgICAgICBub2RlLnNwZWNpZmllcnMgPSB0aGlzLnBhcnNlRXhwb3J0U3BlY2lm
aWVycygpOworICAgICAgICB0aGlzLnBhcnNlRXhwb3J0RnJvbShub2RlKTsKKyAgICAgIH0KKyAg
ICAgIHRoaXMuY2hlY2tFeHBvcnQobm9kZSwgdHJ1ZSk7CisgICAgICByZXR1cm4gdGhpcy5maW5p
c2hOb2RlKG5vZGUsICJFeHBvcnROYW1lZERlY2xhcmF0aW9uIik7CisgICAgfTsKKworICAgIHBw
LnBhcnNlRXhwb3J0RGVjbGFyYXRpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gdGhp
cy5wYXJzZVN0YXRlbWVudCh0cnVlKTsKKyAgICB9OworCisgICAgcHAuaXNFeHBvcnREZWZhdWx0
U3BlY2lmaWVyID0gZnVuY3Rpb24gKCkgeworICAgICAgaWYgKHRoaXMubWF0Y2godHQubmFtZSkp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudmFsdWUgIT09ICJ0eXBlIgorICAgICAgICAg
ICAgJiYgdGhpcy5zdGF0ZS52YWx1ZSAhPT0gImFzeW5jIgorICAgICAgICAgICAgJiYgdGhpcy5z
dGF0ZS52YWx1ZSAhPT0gImludGVyZmFjZSI7CisgICAgICB9CisKKyAgICAgIGlmICghdGhpcy5t
YXRjaCh0dC5fZGVmYXVsdCkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisg
ICAgICBjb25zdCBsb29rYWhlYWQgPSB0aGlzLmxvb2thaGVhZCgpOworICAgICAgcmV0dXJuIGxv
b2thaGVhZC50eXBlID09PSB0dC5jb21tYSB8fCAobG9va2FoZWFkLnR5cGUgPT09IHR0Lm5hbWUg
JiYgbG9va2FoZWFkLnZhbHVlID09PSAiZnJvbSIpOworICAgIH07CisKKyAgICBwcC5wYXJzZUV4
cG9ydFNwZWNpZmllcnNNYXliZSA9IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICBpZiAodGhpcy5l
YXQodHQuY29tbWEpKSB7CisgICAgICAgIG5vZGUuc3BlY2lmaWVycyA9IG5vZGUuc3BlY2lmaWVy
cy5jb25jYXQodGhpcy5wYXJzZUV4cG9ydFNwZWNpZmllcnMoKSk7CisgICAgICB9CisgICAgfTsK
KworICAgIHBwLnBhcnNlRXhwb3J0RnJvbSA9IGZ1bmN0aW9uIChub2RlLCBleHBlY3QpIHsKKyAg
ICAgIGlmICh0aGlzLmVhdENvbnRleHR1YWwoImZyb20iKSkgeworICAgICAgICBub2RlLnNvdXJj
ZSA9IHRoaXMubWF0Y2godHQuc3RyaW5nKSA/IHRoaXMucGFyc2VFeHByQXRvbSgpIDogdGhpcy51
bmV4cGVjdGVkKCk7CisgICAgICAgIHRoaXMuY2hlY2tFeHBvcnQobm9kZSk7CisgICAgICB9IGVs
c2UgeworICAgICAgICBpZiAoZXhwZWN0KSB7CisgICAgICAgICAgdGhpcy51bmV4cGVjdGVkKCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbm9kZS5zb3VyY2UgPSBudWxsOworICAgICAg
ICB9CisgICAgICB9CisKKyAgICAgIHRoaXMuc2VtaWNvbG9uKCk7CisgICAgfTsKKworICAgIHBw
LnNob3VsZFBhcnNlRXhwb3J0RGVjbGFyYXRpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1
cm4gdGhpcy5zdGF0ZS50eXBlLmtleXdvcmQgPT09ICJ2YXIiCisgICAgICAgIHx8IHRoaXMuc3Rh
dGUudHlwZS5rZXl3b3JkID09PSAiY29uc3QiCisgICAgICAgIHx8IHRoaXMuc3RhdGUudHlwZS5r
ZXl3b3JkID09PSAibGV0IgorICAgICAgICB8fCB0aGlzLnN0YXRlLnR5cGUua2V5d29yZCA9PT0g
ImZ1bmN0aW9uIgorICAgICAgICB8fCB0aGlzLnN0YXRlLnR5cGUua2V5d29yZCA9PT0gImNsYXNz
IgorICAgICAgICB8fCB0aGlzLmlzQ29udGV4dHVhbCgiYXN5bmMiKTsKKyAgICB9OworCisgICAg
cHAuY2hlY2tFeHBvcnQgPSBmdW5jdGlvbiAobm9kZSwgY2hlY2tOYW1lcywgaXNEZWZhdWx0KSB7
CisgICAgICBpZiAoY2hlY2tOYW1lcykgeworICAgICAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRl
IGV4cG9ydHMKKyAgICAgICAgaWYgKGlzRGVmYXVsdCkgeworICAgICAgICAgIC8vIERlZmF1bHQg
ZXhwb3J0cworICAgICAgICAgIHRoaXMuY2hlY2tEdXBsaWNhdGVFeHBvcnRzKG5vZGUsICJkZWZh
dWx0Iik7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS5zcGVjaWZpZXJzICYmIG5vZGUuc3BlY2lm
aWVycy5sZW5ndGgpIHsKKyAgICAgICAgICAvLyBOYW1lZCBleHBvcnRzCisgICAgICAgICAgZm9y
IChjb25zdCBzcGVjaWZpZXIgb2Ygbm9kZS5zcGVjaWZpZXJzKSB7CisgICAgICAgICAgICB0aGlz
LmNoZWNrRHVwbGljYXRlRXhwb3J0cyhzcGVjaWZpZXIsIHNwZWNpZmllci5leHBvcnRlZC5uYW1l
KTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS5kZWNsYXJhdGlvbikgewor
ICAgICAgICAgIC8vIEV4cG9ydGVkIGRlY2xhcmF0aW9ucworICAgICAgICAgIGlmIChub2RlLmRl
Y2xhcmF0aW9uLnR5cGUgPT09ICJGdW5jdGlvbkRlY2xhcmF0aW9uIiB8fCBub2RlLmRlY2xhcmF0
aW9uLnR5cGUgPT09ICJDbGFzc0RlY2xhcmF0aW9uIikgeworICAgICAgICAgICAgdGhpcy5jaGVj
a0R1cGxpY2F0ZUV4cG9ydHMobm9kZSwgbm9kZS5kZWNsYXJhdGlvbi5pZC5uYW1lKTsKKyAgICAg
ICAgICB9IGVsc2UgaWYgKG5vZGUuZGVjbGFyYXRpb24udHlwZSA9PT0gIlZhcmlhYmxlRGVjbGFy
YXRpb24iKSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG5vZGUuZGVj
bGFyYXRpb24uZGVjbGFyYXRpb25zKSB7CisgICAgICAgICAgICAgIHRoaXMuY2hlY2tEZWNsYXJh
dGlvbihkZWNsYXJhdGlvbi5pZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICB9CisKKyAgICAgIGlmICh0aGlzLnN0YXRlLmRlY29yYXRvcnMubGVuZ3RoKSB7
CisgICAgICAgIGNvbnN0IGlzQ2xhc3MgPSBub2RlLmRlY2xhcmF0aW9uICYmIChub2RlLmRlY2xh
cmF0aW9uLnR5cGUgPT09ICJDbGFzc0RlY2xhcmF0aW9uIiB8fCBub2RlLmRlY2xhcmF0aW9uLnR5
cGUgPT09ICJDbGFzc0V4cHJlc3Npb24iKTsKKyAgICAgICAgaWYgKCFub2RlLmRlY2xhcmF0aW9u
IHx8ICFpc0NsYXNzKSB7CisgICAgICAgICAgdGhpcy5yYWlzZShub2RlLnN0YXJ0LCAiWW91IGNh
biBvbmx5IHVzZSBkZWNvcmF0b3JzIG9uIGFuIGV4cG9ydCB3aGVuIGV4cG9ydGluZyBhIGNsYXNz
Iik7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy50YWtlRGVjb3JhdG9ycyhub2RlLmRlY2xhcmF0
aW9uKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgcHAuY2hlY2tEZWNsYXJhdGlvbiA9IGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgIGlmIChub2RlLnR5cGUgPT09ICJPYmplY3RQYXR0ZXJuIikgewor
ICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2Ygbm9kZS5wcm9wZXJ0aWVzKSB7CisgICAgICAgICAg
dGhpcy5jaGVja0RlY2xhcmF0aW9uKHByb3ApOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYg
KG5vZGUudHlwZSA9PT0gIkFycmF5UGF0dGVybiIpIHsKKyAgICAgICAgZm9yIChjb25zdCBlbGVt
IG9mIG5vZGUuZWxlbWVudHMpIHsKKyAgICAgICAgICBpZiAoZWxlbSkgeworICAgICAgICAgICAg
dGhpcy5jaGVja0RlY2xhcmF0aW9uKGVsZW0pOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09ICJPYmplY3RQcm9wZXJ0eSIpIHsKKyAgICAgICAg
dGhpcy5jaGVja0RlY2xhcmF0aW9uKG5vZGUudmFsdWUpOworICAgICAgfSBlbHNlIGlmIChub2Rl
LnR5cGUgPT09ICJSZXN0RWxlbWVudCIpIHsKKyAgICAgICAgdGhpcy5jaGVja0RlY2xhcmF0aW9u
KG5vZGUuYXJndW1lbnQpOworICAgICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09ICJJZGVudGlm
aWVyIikgeworICAgICAgICB0aGlzLmNoZWNrRHVwbGljYXRlRXhwb3J0cyhub2RlLCBub2RlLm5h
bWUpOworICAgICAgfQorICAgIH07CisKKyAgICBwcC5jaGVja0R1cGxpY2F0ZUV4cG9ydHMgPSBm
dW5jdGlvbihub2RlLCBuYW1lKSB7CisgICAgICBpZiAodGhpcy5zdGF0ZS5leHBvcnRlZElkZW50
aWZpZXJzLmluZGV4T2YobmFtZSkgPiAtMSkgeworICAgICAgICB0aGlzLnJhaXNlRHVwbGljYXRl
RXhwb3J0RXJyb3Iobm9kZSwgbmFtZSk7CisgICAgICB9CisgICAgICB0aGlzLnN0YXRlLmV4cG9y
dGVkSWRlbnRpZmllcnMucHVzaChuYW1lKTsKKyAgICB9OworCisgICAgcHAucmFpc2VEdXBsaWNh
dGVFeHBvcnRFcnJvciA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHsKKyAgICAgIHRoaXMucmFpc2Uo
bm9kZS5zdGFydCwgbmFtZSA9PT0gImRlZmF1bHQiID8KKyAgICAgICAgIk9ubHkgb25lIGRlZmF1
bHQgZXhwb3J0IGFsbG93ZWQgcGVyIG1vZHVsZS4iIDoKKyAgICAgICAgYFxgJHtuYW1lfVxgIGhh
cyBhbHJlYWR5IGJlZW4gZXhwb3J0ZWQuIEV4cG9ydGVkIGlkZW50aWZpZXJzIG11c3QgYmUgdW5p
cXVlLmAKKyAgICAgICk7CisgICAgfTsKKworICAgIC8vIFBhcnNlcyBhIGNvbW1hLXNlcGFyYXRl
ZCBsaXN0IG9mIG1vZHVsZSBleHBvcnRzLgorCisgICAgcHAucGFyc2VFeHBvcnRTcGVjaWZpZXJz
ID0gZnVuY3Rpb24gKCkgeworICAgICAgY29uc3Qgbm9kZXMgPSBbXTsKKyAgICAgIGxldCBmaXJz
dCA9IHRydWU7CisgICAgICBsZXQgbmVlZHNGcm9tOworCisgICAgICAvLyBleHBvcnQgeyB4LCB5
IGFzIHogfSBbZnJvbSAnLi4uJ10KKyAgICAgIHRoaXMuZXhwZWN0KHR0LmJyYWNlTCk7CisKKyAg
ICAgIHdoaWxlICghdGhpcy5lYXQodHQuYnJhY2VSKSkgeworICAgICAgICBpZiAoZmlyc3QpIHsK
KyAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRo
aXMuZXhwZWN0KHR0LmNvbW1hKTsKKyAgICAgICAgICBpZiAodGhpcy5lYXQodHQuYnJhY2VSKSkg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBpc0RlZmF1bHQgPSB0aGlzLm1hdGNo
KHR0Ll9kZWZhdWx0KTsKKyAgICAgICAgaWYgKGlzRGVmYXVsdCAmJiAhbmVlZHNGcm9tKSBuZWVk
c0Zyb20gPSB0cnVlOworCisgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpOwor
ICAgICAgICBub2RlLmxvY2FsID0gdGhpcy5wYXJzZUlkZW50aWZpZXIoaXNEZWZhdWx0KTsKKyAg
ICAgICAgbm9kZS5leHBvcnRlZCA9IHRoaXMuZWF0Q29udGV4dHVhbCgiYXMiKSA/IHRoaXMucGFy
c2VJZGVudGlmaWVyKHRydWUpIDogbm9kZS5sb2NhbC5fX2Nsb25lKCk7CisgICAgICAgIG5vZGVz
LnB1c2godGhpcy5maW5pc2hOb2RlKG5vZGUsICJFeHBvcnRTcGVjaWZpZXIiKSk7CisgICAgICB9
CisKKyAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lbWJlci1jbGkvZW1iZXItY2xpL3B1bGwv
MzczOQorICAgICAgaWYgKG5lZWRzRnJvbSAmJiAhdGhpcy5pc0NvbnRleHR1YWwoImZyb20iKSkg
eworICAgICAgICB0aGlzLnVuZXhwZWN0ZWQoKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIG5v
ZGVzOworICAgIH07CisKKyAgICAvLyBQYXJzZXMgaW1wb3J0IGRlY2xhcmF0aW9uLgorCisgICAg
cHAucGFyc2VJbXBvcnQgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAgdGhpcy5lYXQodHQuX2lt
cG9ydCk7CisKKyAgICAgIC8vIGltcG9ydCAnLi4uJworICAgICAgaWYgKHRoaXMubWF0Y2godHQu
c3RyaW5nKSkgeworICAgICAgICBub2RlLnNwZWNpZmllcnMgPSBbXTsKKyAgICAgICAgbm9kZS5z
b3VyY2UgPSB0aGlzLnBhcnNlRXhwckF0b20oKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG5v
ZGUuc3BlY2lmaWVycyA9IFtdOworICAgICAgICB0aGlzLnBhcnNlSW1wb3J0U3BlY2lmaWVycyhu
b2RlKTsKKyAgICAgICAgdGhpcy5leHBlY3RDb250ZXh0dWFsKCJmcm9tIik7CisgICAgICAgIG5v
ZGUuc291cmNlID0gdGhpcy5tYXRjaCh0dC5zdHJpbmcpID8gdGhpcy5wYXJzZUV4cHJBdG9tKCkg
OiB0aGlzLnVuZXhwZWN0ZWQoKTsKKyAgICAgIH0KKyAgICAgIHRoaXMuc2VtaWNvbG9uKCk7Cisg
ICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJJbXBvcnREZWNsYXJhdGlvbiIpOwor
ICAgIH07CisKKyAgICAvLyBQYXJzZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtb2R1bGUg
aW1wb3J0cy4KKworICAgIHBwLnBhcnNlSW1wb3J0U3BlY2lmaWVycyA9IGZ1bmN0aW9uIChub2Rl
KSB7CisgICAgICBsZXQgZmlyc3QgPSB0cnVlOworICAgICAgaWYgKHRoaXMubWF0Y2godHQubmFt
ZSkpIHsKKyAgICAgICAgLy8gaW1wb3J0IGRlZmF1bHRPYmosIHsgeCwgeSBhcyB6IH0gZnJvbSAn
Li4uJworICAgICAgICBjb25zdCBzdGFydFBvcyA9IHRoaXMuc3RhdGUuc3RhcnQ7CisgICAgICAg
IGNvbnN0IHN0YXJ0TG9jID0gdGhpcy5zdGF0ZS5zdGFydExvYzsKKyAgICAgICAgbm9kZS5zcGVj
aWZpZXJzLnB1c2godGhpcy5wYXJzZUltcG9ydFNwZWNpZmllckRlZmF1bHQodGhpcy5wYXJzZUlk
ZW50aWZpZXIoKSwgc3RhcnRQb3MsIHN0YXJ0TG9jKSk7CisgICAgICAgIGlmICghdGhpcy5lYXQo
dHQuY29tbWEpKSByZXR1cm47CisgICAgICB9CisKKyAgICAgIGlmICh0aGlzLm1hdGNoKHR0LnN0
YXIpKSB7CisgICAgICAgIGNvbnN0IHNwZWNpZmllciA9IHRoaXMuc3RhcnROb2RlKCk7CisgICAg
ICAgIHRoaXMubmV4dCgpOworICAgICAgICB0aGlzLmV4cGVjdENvbnRleHR1YWwoImFzIik7Cisg
ICAgICAgIHNwZWNpZmllci5sb2NhbCA9IHRoaXMucGFyc2VJZGVudGlmaWVyKCk7CisgICAgICAg
IHRoaXMuY2hlY2tMVmFsKHNwZWNpZmllci5sb2NhbCwgdHJ1ZSwgdW5kZWZpbmVkLCAiaW1wb3J0
IG5hbWVzcGFjZSBzcGVjaWZpZXIiKTsKKyAgICAgICAgbm9kZS5zcGVjaWZpZXJzLnB1c2godGhp
cy5maW5pc2hOb2RlKHNwZWNpZmllciwgIkltcG9ydE5hbWVzcGFjZVNwZWNpZmllciIpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICB0aGlzLmV4cGVjdCh0dC5icmFjZUwpOwor
ICAgICAgd2hpbGUgKCF0aGlzLmVhdCh0dC5icmFjZVIpKSB7CisgICAgICAgIGlmIChmaXJzdCkg
eworICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
Ly8gRGV0ZWN0IGFuIGF0dGVtcHQgdG8gZGVlcCBkZXN0cnVjdHVyZQorICAgICAgICAgIGlmICh0
aGlzLmVhdCh0dC5jb2xvbikpIHsKKyAgICAgICAgICAgIHRoaXMudW5leHBlY3RlZChudWxsLCAi
RVMyMDE1IG5hbWVkIGltcG9ydHMgZG8gbm90IGRlc3RydWN0dXJlLiBVc2UgYW5vdGhlciBzdGF0
ZW1lbnQgZm9yIGRlc3RydWN0dXJpbmcgYWZ0ZXIgdGhlIGltcG9ydC4iKTsKKyAgICAgICAgICB9
CisKKyAgICAgICAgICB0aGlzLmV4cGVjdCh0dC5jb21tYSk7CisgICAgICAgICAgaWYgKHRoaXMu
ZWF0KHR0LmJyYWNlUikpIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5wYXJzZUlt
cG9ydFNwZWNpZmllcihub2RlKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgcHAucGFyc2VJbXBv
cnRTcGVjaWZpZXIgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAgY29uc3Qgc3BlY2lmaWVyID0g
dGhpcy5zdGFydE5vZGUoKTsKKyAgICAgIHNwZWNpZmllci5pbXBvcnRlZCA9IHRoaXMucGFyc2VJ
ZGVudGlmaWVyKHRydWUpOworICAgICAgaWYgKHRoaXMuZWF0Q29udGV4dHVhbCgiYXMiKSkgewor
ICAgICAgICBzcGVjaWZpZXIubG9jYWwgPSB0aGlzLnBhcnNlSWRlbnRpZmllcigpOworICAgICAg
fSBlbHNlIHsKKyAgICAgICAgdGhpcy5jaGVja1Jlc2VydmVkV29yZChzcGVjaWZpZXIuaW1wb3J0
ZWQubmFtZSwgc3BlY2lmaWVyLnN0YXJ0LCB0cnVlLCB0cnVlKTsKKyAgICAgICAgc3BlY2lmaWVy
LmxvY2FsID0gc3BlY2lmaWVyLmltcG9ydGVkLl9fY2xvbmUoKTsKKyAgICAgIH0KKyAgICAgIHRo
aXMuY2hlY2tMVmFsKHNwZWNpZmllci5sb2NhbCwgdHJ1ZSwgdW5kZWZpbmVkLCAiaW1wb3J0IHNw
ZWNpZmllciIpOworICAgICAgbm9kZS5zcGVjaWZpZXJzLnB1c2godGhpcy5maW5pc2hOb2RlKHNw
ZWNpZmllciwgIkltcG9ydFNwZWNpZmllciIpKTsKKyAgICB9OworCisgICAgcHAucGFyc2VJbXBv
cnRTcGVjaWZpZXJEZWZhdWx0ID0gZnVuY3Rpb24gKGlkLCBzdGFydFBvcywgc3RhcnRMb2MpIHsK
KyAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7
CisgICAgICBub2RlLmxvY2FsID0gaWQ7CisgICAgICB0aGlzLmNoZWNrTFZhbChub2RlLmxvY2Fs
LCB0cnVlLCB1bmRlZmluZWQsICJkZWZhdWx0IGltcG9ydCBzcGVjaWZpZXIiKTsKKyAgICAgIHJl
dHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIkltcG9ydERlZmF1bHRTcGVjaWZpZXIiKTsKKyAg
ICB9OworfQorCisvLyBwYXJzZXIvdXRpbC5qcworY29uc3QgcGFyc2VyVXRpbEpTID0ge307Cit7
CisgICAgY29uc3QgeyB0eXBlcyA6IHR0IH0gPSB0b2tlbml6ZXJUeXBlc0pTOworICAgIGNvbnN0
IFBhcnNlciA9IHBhcnNlckluZGV4SlM7CisgICAgY29uc3QgeyBsaW5lQnJlYWsgfSA9IHV0aWxX
aGl0ZXNwYWNlSlM7CisKKyAgICBjb25zdCBwcCA9IFBhcnNlci5wcm90b3R5cGU7CisKKyAgICAv
LyAjIyBQYXJzZXIgdXRpbGl0aWVzCisKKyAgICAvLyBUT0RPCisKKyAgICBwcC5hZGRFeHRyYSA9
IGZ1bmN0aW9uIChub2RlLCBrZXksIHZhbCkgeworICAgICAgaWYgKCFub2RlKSByZXR1cm47CisK
KyAgICAgIGNvbnN0IGV4dHJhID0gbm9kZS5leHRyYSA9IG5vZGUuZXh0cmEgfHwge307CisgICAg
ICBleHRyYVtrZXldID0gdmFsOworICAgIH07CisKKyAgICAvLyBUT0RPCisKKyAgICBwcC5pc1Jl
bGF0aW9uYWwgPSBmdW5jdGlvbiAob3ApIHsKKyAgICAgIHJldHVybiB0aGlzLm1hdGNoKHR0LnJl
bGF0aW9uYWwpICYmIHRoaXMuc3RhdGUudmFsdWUgPT09IG9wOworICAgIH07CisKKyAgICAvLyBU
T0RPCisKKyAgICBwcC5leHBlY3RSZWxhdGlvbmFsID0gZnVuY3Rpb24gKG9wKSB7CisgICAgICBp
ZiAodGhpcy5pc1JlbGF0aW9uYWwob3ApKSB7CisgICAgICAgIHRoaXMubmV4dCgpOworICAgICAg
fSBlbHNlIHsKKyAgICAgICAgdGhpcy51bmV4cGVjdGVkKG51bGwsIHR0LnJlbGF0aW9uYWwpOwor
ICAgICAgfQorICAgIH07CisKKyAgICAvLyBUZXN0cyB3aGV0aGVyIHBhcnNlZCB0b2tlbiBpcyBh
IGNvbnRleHR1YWwga2V5d29yZC4KKworICAgIHBwLmlzQ29udGV4dHVhbCA9IGZ1bmN0aW9uIChu
YW1lKSB7CisgICAgICByZXR1cm4gdGhpcy5tYXRjaCh0dC5uYW1lKSAmJiB0aGlzLnN0YXRlLnZh
bHVlID09PSBuYW1lOworICAgIH07CisKKyAgICAvLyBDb25zdW1lcyBjb250ZXh0dWFsIGtleXdv
cmQgaWYgcG9zc2libGUuCisKKyAgICBwcC5lYXRDb250ZXh0dWFsID0gZnVuY3Rpb24gKG5hbWUp
IHsKKyAgICAgIHJldHVybiB0aGlzLnN0YXRlLnZhbHVlID09PSBuYW1lICYmIHRoaXMuZWF0KHR0
Lm5hbWUpOworICAgIH07CisKKyAgICAvLyBBc3NlcnRzIHRoYXQgZm9sbG93aW5nIHRva2VuIGlz
IGdpdmVuIGNvbnRleHR1YWwga2V5d29yZC4KKworICAgIHBwLmV4cGVjdENvbnRleHR1YWwgPSBm
dW5jdGlvbiAobmFtZSwgbWVzc2FnZSkgeworICAgICAgaWYgKCF0aGlzLmVhdENvbnRleHR1YWwo
bmFtZSkpIHRoaXMudW5leHBlY3RlZChudWxsLCBtZXNzYWdlKTsKKyAgICB9OworCisgICAgLy8g
VGVzdCB3aGV0aGVyIGEgc2VtaWNvbG9uIGNhbiBiZSBpbnNlcnRlZCBhdCB0aGUgY3VycmVudCBw
b3NpdGlvbi4KKworICAgIHBwLmNhbkluc2VydFNlbWljb2xvbiA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgIHJldHVybiB0aGlzLm1hdGNoKHR0LmVvZikgfHwKKyAgICAgICAgdGhpcy5tYXRjaCh0dC5i
cmFjZVIpIHx8CisgICAgICAgIGxpbmVCcmVhay50ZXN0KHRoaXMuaW5wdXQuc2xpY2UodGhpcy5z
dGF0ZS5sYXN0VG9rRW5kLCB0aGlzLnN0YXRlLnN0YXJ0KSk7CisgICAgfTsKKworICAgIC8vIFRP
RE8KKworICAgIHBwLmlzTGluZVRlcm1pbmF0b3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1
cm4gdGhpcy5lYXQodHQuc2VtaSkgfHwgdGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKTsKKyAgICB9
OworCisgICAgLy8gQ29uc3VtZSBhIHNlbWljb2xvbiwgb3IsIGZhaWxpbmcgdGhhdCwgc2VlIGlm
IHdlIGFyZSBhbGxvd2VkIHRvCisgICAgLy8gcHJldGVuZCB0aGF0IHRoZXJlIGlzIGEgc2VtaWNv
bG9uIGF0IHRoaXMgcG9zaXRpb24uCisKKyAgICBwcC5zZW1pY29sb24gPSBmdW5jdGlvbiAoKSB7
CisgICAgICBpZiAoIXRoaXMuaXNMaW5lVGVybWluYXRvcigpKSB0aGlzLnVuZXhwZWN0ZWQobnVs
bCwgdHQuc2VtaSk7CisgICAgfTsKKworICAgIC8vIEV4cGVjdCBhIHRva2VuIG9mIGEgZ2l2ZW4g
dHlwZS4gSWYgZm91bmQsIGNvbnN1bWUgaXQsIG90aGVyd2lzZSwKKyAgICAvLyByYWlzZSBhbiB1
bmV4cGVjdGVkIHRva2VuIGVycm9yIGF0IGdpdmVuIHBvcy4KKworICAgIHBwLmV4cGVjdCA9IGZ1
bmN0aW9uICh0eXBlLCBwb3MpIHsKKyAgICAgIHJldHVybiB0aGlzLmVhdCh0eXBlKSB8fCB0aGlz
LnVuZXhwZWN0ZWQocG9zLCB0eXBlKTsKKyAgICB9OworCisgICAgLy8gUmFpc2UgYW4gdW5leHBl
Y3RlZCB0b2tlbiBlcnJvci4gQ2FuIHRha2UgdGhlIGV4cGVjdGVkIHRva2VuIHR5cGUKKyAgICAv
LyBpbnN0ZWFkIG9mIGEgbWVzc2FnZSBzdHJpbmcuCisKKyAgICBwcC51bmV4cGVjdGVkID0gZnVu
Y3Rpb24gKHBvcywgbWVzc2FnZU9yVHlwZSA9ICJVbmV4cGVjdGVkIHRva2VuIikgeworICAgICAg
aWYgKG1lc3NhZ2VPclR5cGUgJiYgdHlwZW9mIG1lc3NhZ2VPclR5cGUgPT09ICJvYmplY3QiICYm
IG1lc3NhZ2VPclR5cGUubGFiZWwpIHsKKyAgICAgICAgbWVzc2FnZU9yVHlwZSA9IGBVbmV4cGVj
dGVkIHRva2VuLCBleHBlY3RlZCAke21lc3NhZ2VPclR5cGUubGFiZWx9YDsKKyAgICAgIH0KKyAg
ICAgIHRoaXMucmFpc2UocG9zICE9IG51bGwgPyBwb3MgOiB0aGlzLnN0YXRlLnN0YXJ0LCBtZXNz
YWdlT3JUeXBlKTsKKyAgICB9OworfQorCisKKy8vIHBsdWdpbnMvZXN0cmVlLmpzCitsZXQgcGx1
Z2luc0VzdHJlZUpTID0ge307Cit7CisgICAgY29uc3QgeyB0eXBlcyA6IHR0IH0gPSB0b2tlbml6
ZXJUeXBlc0pTOworICAgIGNvbnN0IFBhcnNlciA9IHBhcnNlckluZGV4SlM7CisKKyAgICBjb25z
dCBwcCA9IFBhcnNlci5wcm90b3R5cGU7CisKKyAgICBwcC5lc3RyZWVQYXJzZVJlZ0V4cExpdGVy
YWwgPSBmdW5jdGlvbiAoeyBwYXR0ZXJuLCBmbGFncyB9KSB7CisgICAgICBsZXQgcmVnZXggPSBu
dWxsOworICAgICAgdHJ5IHsKKyAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm4sIGZs
YWdzKTsKKyAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgLy8gSW4gZW52aXJvbm1lbnRzIHRo
YXQgZG9uJ3Qgc3VwcG9ydCB0aGVzZSBmbGFncyB2YWx1ZSB3aWxsCisgICAgICAgIC8vIGJlIG51
bGwgYXMgdGhlIHJlZ2V4IGNhbid0IGJlIHJlcHJlc2VudGVkIG5hdGl2ZWx5LgorICAgICAgfQor
ICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZXN0cmVlUGFyc2VMaXRlcmFsKHJlZ2V4KTsKKyAgICAg
IG5vZGUucmVnZXggPSB7IHBhdHRlcm4sIGZsYWdzIH07CisKKyAgICAgIHJldHVybiBub2RlOwor
ICAgIH07CisKKyAgICBwcC5lc3RyZWVQYXJzZUxpdGVyYWwgPSBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgIHJldHVybiB0aGlzLnBhcnNlTGl0ZXJhbCh2YWx1ZSwgIkxpdGVyYWwiKTsKKyAgICB9
OworCisgICAgcHAuZGlyZWN0aXZlVG9TdG10ID0gZnVuY3Rpb24gKGRpcmVjdGl2ZSkgeworICAg
ICAgY29uc3QgZGlyZWN0aXZlTGl0ZXJhbCA9IGRpcmVjdGl2ZS52YWx1ZTsKKworICAgICAgY29u
c3Qgc3RtdCA9IHRoaXMuc3RhcnROb2RlQXQoZGlyZWN0aXZlLnN0YXJ0LCBkaXJlY3RpdmUubG9j
LnN0YXJ0KTsKKyAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLnN0YXJ0Tm9kZUF0KGRpcmVj
dGl2ZUxpdGVyYWwuc3RhcnQsIGRpcmVjdGl2ZUxpdGVyYWwubG9jLnN0YXJ0KTsKKworICAgICAg
ZXhwcmVzc2lvbi52YWx1ZSA9IGRpcmVjdGl2ZUxpdGVyYWwudmFsdWU7CisgICAgICBleHByZXNz
aW9uLnJhdyA9IGRpcmVjdGl2ZUxpdGVyYWwuZXh0cmEucmF3OworCisgICAgICBzdG10LmV4cHJl
c3Npb24gPSB0aGlzLmZpbmlzaE5vZGVBdChleHByZXNzaW9uLCAiTGl0ZXJhbCIsIGRpcmVjdGl2
ZUxpdGVyYWwuZW5kLCBkaXJlY3RpdmVMaXRlcmFsLmxvYy5lbmQpOworICAgICAgc3RtdC5kaXJl
Y3RpdmUgPSBkaXJlY3RpdmVMaXRlcmFsLmV4dHJhLnJhdy5zbGljZSgxLCAtMSk7CisKKyAgICAg
IHJldHVybiB0aGlzLmZpbmlzaE5vZGVBdChzdG10LCAiRXhwcmVzc2lvblN0YXRlbWVudCIsIGRp
cmVjdGl2ZS5lbmQsIGRpcmVjdGl2ZS5sb2MuZW5kKTsKKyAgICB9OworCisgICAgZnVuY3Rpb24g
aXNTaW1wbGVQcm9wZXJ0eShub2RlKSB7CisgICAgICByZXR1cm4gbm9kZSAmJgorICAgICAgICBu
b2RlLnR5cGUgPT09ICJQcm9wZXJ0eSIgJiYKKyAgICAgICAgbm9kZS5raW5kID09PSAiaW5pdCIg
JiYKKyAgICAgICAgbm9kZS5tZXRob2QgPT09IGZhbHNlOworICAgIH0KKworICAgIC8vZXhwb3J0
IGRlZmF1bHQgZnVuY3Rpb24gKGluc3RhbmNlKSB7CisKKyAgICBwbHVnaW5zRXN0cmVlSlMgPSBm
dW5jdGlvbiAoaW5zdGFuY2UpIHsKKyAgICAgIGluc3RhbmNlLmV4dGVuZCgiY2hlY2tEZWNsYXJh
dGlvbiIsIGZ1bmN0aW9uKGlubmVyKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAobm9kZSkg
eworICAgICAgICAgIGlmIChpc1NpbXBsZVByb3BlcnR5KG5vZGUpKSB7CisgICAgICAgICAgICB0
aGlzLmNoZWNrRGVjbGFyYXRpb24obm9kZS52YWx1ZSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlubmVyLmNhbGwodGhpcywgbm9kZSk7CisgICAgICAgICAgfQorICAgICAgICB9
OworICAgICAgfSk7CisKKyAgICAgIGluc3RhbmNlLmV4dGVuZCgiY2hlY2tHZXR0ZXJTZXR0ZXJQ
YXJhbUNvdW50IiwgZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAocHJvcCkg
eworICAgICAgICAgIGNvbnN0IHBhcmFtQ291bnQgPSBwcm9wLmtpbmQgPT09ICJnZXQiID8gMCA6
IDE7CisgICAgICAgICAgaWYgKHByb3AudmFsdWUucGFyYW1zLmxlbmd0aCAhPT0gcGFyYW1Db3Vu
dCkgeworICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBwcm9wLnN0YXJ0OworICAgICAgICAgICAg
aWYgKHByb3Aua2luZCA9PT0gImdldCIpIHsKKyAgICAgICAgICAgICAgdGhpcy5yYWlzZShzdGFy
dCwgImdldHRlciBzaG91bGQgaGF2ZSBubyBwYXJhbXMiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgIHRoaXMucmFpc2Uoc3RhcnQsICJzZXR0ZXIgc2hvdWxkIGhhdmUgZXhh
Y3RseSBvbmUgcGFyYW0iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH07
CisgICAgICB9KTsKKworICAgICAgaW5zdGFuY2UuZXh0ZW5kKCJjaGVja0xWYWwiLCBmdW5jdGlv
bihpbm5lcikgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGV4cHIsIGlzQmluZGluZywgY2hl
Y2tDbGFzaGVzLCAuLi5hcmdzKSB7CisgICAgICAgICAgc3dpdGNoIChleHByLnR5cGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgIk9iamVjdFBhdHRlcm4iOgorICAgICAgICAgICAgICBleHByLnByb3Bl
cnRpZXMuZm9yRWFjaCgocHJvcCkgPT4geworICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMVmFs
KAorICAgICAgICAgICAgICAgICAgcHJvcC50eXBlID09PSAiUHJvcGVydHkiID8gcHJvcC52YWx1
ZSA6IHByb3AsCisgICAgICAgICAgICAgICAgICBpc0JpbmRpbmcsCisgICAgICAgICAgICAgICAg
ICBjaGVja0NsYXNoZXMsCisgICAgICAgICAgICAgICAgICAib2JqZWN0IGRlc3RydWN0dXJpbmcg
cGF0dGVybiIKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICBpbm5lci5j
YWxsKHRoaXMsIGV4cHIsIGlzQmluZGluZywgY2hlY2tDbGFzaGVzLCAuLi5hcmdzKTsKKyAgICAg
ICAgICB9CisgICAgICAgIH07CisgICAgICB9KTsKKworICAgICAgaW5zdGFuY2UuZXh0ZW5kKCJj
aGVja1Byb3BDbGFzaCIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChw
cm9wLCBwcm9wSGFzaCkgeworICAgICAgICAgIGlmIChwcm9wLmNvbXB1dGVkIHx8ICFpc1NpbXBs
ZVByb3BlcnR5KHByb3ApKSByZXR1cm47CisKKyAgICAgICAgICBjb25zdCBrZXkgPSBwcm9wLmtl
eTsKKyAgICAgICAgICAvLyBJdCBpcyBlaXRoZXIgYW4gSWRlbnRpZmllciBvciBhIFN0cmluZy9O
dW1lcmljTGl0ZXJhbAorICAgICAgICAgIGNvbnN0IG5hbWUgPSBrZXkudHlwZSA9PT0gIklkZW50
aWZpZXIiID8ga2V5Lm5hbWUgOiBTdHJpbmcoa2V5LnZhbHVlKTsKKworICAgICAgICAgIGlmIChu
YW1lID09PSAiX19wcm90b19fIikgeworICAgICAgICAgICAgaWYgKHByb3BIYXNoLnByb3RvKSB0
aGlzLnJhaXNlKGtleS5zdGFydCwgIlJlZGVmaW5pdGlvbiBvZiBfX3Byb3RvX18gcHJvcGVydHki
KTsKKyAgICAgICAgICAgIHByb3BIYXNoLnByb3RvID0gdHJ1ZTsKKyAgICAgICAgICB9CisgICAg
ICAgIH07CisgICAgICB9KTsKKworICAgICAgaW5zdGFuY2UuZXh0ZW5kKCJpc1N0cmljdEJvZHki
LCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAobm9kZSwgaXNFeHByZXNz
aW9uKSB7CisgICAgICAgICAgaWYgKCFpc0V4cHJlc3Npb24gJiYgbm9kZS5ib2R5LmJvZHkubGVu
Z3RoID4gMCkgeworICAgICAgICAgICAgZm9yIChjb25zdCBkaXJlY3RpdmUgb2YgKG5vZGUuYm9k
eS5ib2R5KSkgeworICAgICAgICAgICAgICBpZiAoZGlyZWN0aXZlLnR5cGUgPT09ICJFeHByZXNz
aW9uU3RhdGVtZW50IiAmJiBkaXJlY3RpdmUuZXhwcmVzc2lvbi50eXBlID09PSAiTGl0ZXJhbCIp
IHsKKyAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aXZlLmV4cHJlc3Npb24udmFsdWUgPT09ICJ1
c2Ugc3RyaWN0IikgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gQnJlYWsgZm9yIHRoZSBmaXJzdCBub24gbGl0ZXJhbCBleHByZXNzaW9uCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH07CisgICAgICB9
KTsKKworICAgICAgaW5zdGFuY2UuZXh0ZW5kKCJpc1ZhbGlkRGlyZWN0aXZlIiwgZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHN0bXQpIHsKKyAgICAgICAgICByZXR1cm4g
c3RtdC50eXBlID09PSAiRXhwcmVzc2lvblN0YXRlbWVudCIgJiYKKyAgICAgICAgICAgIHN0bXQu
ZXhwcmVzc2lvbi50eXBlID09PSAiTGl0ZXJhbCIgJiYKKyAgICAgICAgICAgIHR5cGVvZiBzdG10
LmV4cHJlc3Npb24udmFsdWUgPT09ICJzdHJpbmciICYmCisgICAgICAgICAgICAoIXN0bXQuZXhw
cmVzc2lvbi5leHRyYSB8fCAhc3RtdC5leHByZXNzaW9uLmV4dHJhLnBhcmVudGhlc2l6ZWQpOwor
ICAgICAgICB9OworICAgICAgfSk7CisKKyAgICAgIGluc3RhbmNlLmV4dGVuZCgicGFyc2VCbG9j
a0JvZHkiLCBmdW5jdGlvbiAoaW5uZXIpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChub2Rl
LCAuLi5hcmdzKSB7CisgICAgICAgICAgaW5uZXIuY2FsbCh0aGlzLCBub2RlLCAuLi5hcmdzKTsK
KworICAgICAgICAgIG5vZGUuZGlyZWN0aXZlcy5yZXZlcnNlKCkuZm9yRWFjaCgoZGlyZWN0aXZl
KSA9PiB7CisgICAgICAgICAgICBub2RlLmJvZHkudW5zaGlmdCh0aGlzLmRpcmVjdGl2ZVRvU3Rt
dChkaXJlY3RpdmUpKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgICBkZWxldGUgbm9kZS5kaXJl
Y3RpdmVzOworICAgICAgICB9OworICAgICAgfSk7CisKKyAgICAgIGluc3RhbmNlLmV4dGVuZCgi
cGFyc2VDbGFzc01ldGhvZCIsIGZ1bmN0aW9uIChpbm5lcikgeworICAgICAgICByZXR1cm4gZnVu
Y3Rpb24gKGNsYXNzQm9keSwgLi4uYXJncykgeworICAgICAgICAgIGlubmVyLmNhbGwodGhpcywg
Y2xhc3NCb2R5LCAuLi5hcmdzKTsKKworICAgICAgICAgIGNvbnN0IGJvZHkgPSBjbGFzc0JvZHku
Ym9keTsKKyAgICAgICAgICBib2R5W2JvZHkubGVuZ3RoIC0gMV0udHlwZSA9ICJNZXRob2REZWZp
bml0aW9uIjsKKyAgICAgICAgfTsKKyAgICAgIH0pOworCisgICAgICBpbnN0YW5jZS5leHRlbmQo
InBhcnNlRXhwckF0b20iLCBmdW5jdGlvbihpbm5lcikgeworICAgICAgICByZXR1cm4gZnVuY3Rp
b24gKC4uLmFyZ3MpIHsKKyAgICAgICAgICBzd2l0Y2ggKHRoaXMuc3RhdGUudHlwZSkgeworICAg
ICAgICAgICAgY2FzZSB0dC5yZWdleHA6CisgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVzdHJl
ZVBhcnNlUmVnRXhwTGl0ZXJhbCh0aGlzLnN0YXRlLnZhbHVlKTsKKworICAgICAgICAgICAgY2Fz
ZSB0dC5udW06CisgICAgICAgICAgICBjYXNlIHR0LnN0cmluZzoKKyAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZXN0cmVlUGFyc2VMaXRlcmFsKHRoaXMuc3RhdGUudmFsdWUpOworCisgICAgICAg
ICAgICBjYXNlIHR0Ll9udWxsOgorICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lc3RyZWVQYXJz
ZUxpdGVyYWwobnVsbCk7CisKKyAgICAgICAgICAgIGNhc2UgdHQuX3RydWU6CisgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmVzdHJlZVBhcnNlTGl0ZXJhbCh0cnVlKTsKKworICAgICAgICAgICAg
Y2FzZSB0dC5fZmFsc2U6CisgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVzdHJlZVBhcnNlTGl0
ZXJhbChmYWxzZSk7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIHJldHVy
biBpbm5lci5jYWxsKHRoaXMsIC4uLmFyZ3MpOworICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAg
ICAgIH0pOworCisgICAgICBpbnN0YW5jZS5leHRlbmQoInBhcnNlTGl0ZXJhbCIsIGZ1bmN0aW9u
KGlubmVyKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykgeworICAgICAgICAg
IGNvbnN0IG5vZGUgPSBpbm5lci5jYWxsKHRoaXMsIC4uLmFyZ3MpOworICAgICAgICAgIG5vZGUu
cmF3ID0gbm9kZS5leHRyYS5yYXc7CisgICAgICAgICAgZGVsZXRlIG5vZGUuZXh0cmE7CisKKyAg
ICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfTsKKyAgICAgIH0pOworCisgICAgICBpbnN0
YW5jZS5leHRlbmQoInBhcnNlTWV0aG9kIiwgZnVuY3Rpb24oaW5uZXIpIHsKKyAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uIChub2RlLCAuLi5hcmdzKSB7CisgICAgICAgICAgbGV0IGZ1bmNOb2RlID0g
dGhpcy5zdGFydE5vZGUoKTsKKyAgICAgICAgICBmdW5jTm9kZS5raW5kID0gbm9kZS5raW5kOyAv
LyBwcm92aWRlIGtpbmQsIHNvIGlubmVyIG1ldGhvZCBjb3JyZWN0bHkgc2V0cyBzdGF0ZQorICAg
ICAgICAgIGZ1bmNOb2RlID0gaW5uZXIuY2FsbCh0aGlzLCBmdW5jTm9kZSwgLi4uYXJncyk7Cisg
ICAgICAgICAgZGVsZXRlIGZ1bmNOb2RlLmtpbmQ7CisgICAgICAgICAgbm9kZS52YWx1ZSA9IHRo
aXMuZmluaXNoTm9kZShmdW5jTm9kZSwgIkZ1bmN0aW9uRXhwcmVzc2lvbiIpOworCisgICAgICAg
ICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH07CisgICAgICB9KTsKKworICAgICAgaW5zdGFuY2Uu
ZXh0ZW5kKCJwYXJzZU9iamVjdE1ldGhvZCIsIGZ1bmN0aW9uKGlubmVyKSB7CisgICAgICAgIHJl
dHVybiBmdW5jdGlvbiAoLi4uYXJncykgeworICAgICAgICAgIGNvbnN0IG5vZGUgPSBpbm5lci5j
YWxsKHRoaXMsIC4uLmFyZ3MpOworCisgICAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAg
IGlmIChub2RlLmtpbmQgPT09ICJtZXRob2QiKSBub2RlLmtpbmQgPSAiaW5pdCI7CisgICAgICAg
ICAgICBub2RlLnR5cGUgPSAiUHJvcGVydHkiOworICAgICAgICAgIH0KKworICAgICAgICAgIHJl
dHVybiBub2RlOworICAgICAgICB9OworICAgICAgfSk7CisKKyAgICAgIGluc3RhbmNlLmV4dGVu
ZCgicGFyc2VPYmplY3RQcm9wZXJ0eSIsIGZ1bmN0aW9uKGlubmVyKSB7CisgICAgICAgIHJldHVy
biBmdW5jdGlvbiAoLi4uYXJncykgeworICAgICAgICAgIGNvbnN0IG5vZGUgPSBpbm5lci5jYWxs
KHRoaXMsIC4uLmFyZ3MpOworCisgICAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgIG5v
ZGUua2luZCA9ICJpbml0IjsKKyAgICAgICAgICAgIG5vZGUudHlwZSA9ICJQcm9wZXJ0eSI7Cisg
ICAgICAgICAgfQorCisgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH07CisgICAgICB9
KTsKKworICAgICAgaW5zdGFuY2UuZXh0ZW5kKCJ0b0Fzc2lnbmFibGUiLCBmdW5jdGlvbihpbm5l
cikgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5vZGUsIGlzQmluZGluZywgLi4uYXJncykg
eworICAgICAgICAgIGlmIChpc1NpbXBsZVByb3BlcnR5KG5vZGUpKSB7CisgICAgICAgICAgICB0
aGlzLnRvQXNzaWduYWJsZShub2RlLnZhbHVlLCBpc0JpbmRpbmcsIC4uLmFyZ3MpOworCisgICAg
ICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0g
Ik9iamVjdEV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICBub2RlLnR5cGUgPSAiT2JqZWN0UGF0
dGVybiI7CisgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgKG5vZGUucHJvcGVydGllcykp
IHsKKyAgICAgICAgICAgICAgaWYgKHByb3Aua2luZCA9PT0gImdldCIgfHwgcHJvcC5raW5kID09
PSAic2V0IikgeworICAgICAgICAgICAgICAgIHRoaXMucmFpc2UocHJvcC5rZXkuc3RhcnQsICJP
YmplY3QgcGF0dGVybiBjYW4ndCBjb250YWluIGdldHRlciBvciBzZXR0ZXIiKTsKKyAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChwcm9wLm1ldGhvZCkgeworICAgICAgICAgICAgICAgIHRoaXMucmFp
c2UocHJvcC5rZXkuc3RhcnQsICJPYmplY3QgcGF0dGVybiBjYW4ndCBjb250YWluIG1ldGhvZHMi
KTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRvQXNzaWdu
YWJsZShwcm9wLCBpc0JpbmRpbmcsICJvYmplY3QgZGVzdHJ1Y3R1cmluZyBwYXR0ZXJuIik7Cisg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG5vZGU7
CisgICAgICAgICAgfQorCisgICAgICAgICAgcmV0dXJuIGlubmVyLmNhbGwodGhpcywgbm9kZSwg
aXNCaW5kaW5nLCAuLi5hcmdzKTsKKyAgICAgICAgfTsKKyAgICAgIH0pOworICAgIH0KK30KKwor
CisvLyBwbHVnaW5zL2Zsb3cuanMKK2xldCBwbHVnaW5zRmxvd0pTID0ge307Cit7CisKKyAgICAv
KiBlc2xpbnQgbWF4LWxlbjogMCAqLworCisgICAgY29uc3QgeyB0eXBlcyA6IHR0IH0gPSB0b2tl
bml6ZXJUeXBlc0pTOworICAgIGNvbnN0IHsgdHlwZXMgOiBjdCB9ID0gdG9rZW5pemVyQ29udGV4
dEpTOworICAgIGNvbnN0IFBhcnNlciA9IHBhcnNlckluZGV4SlM7CisKKyAgICBjb25zdCBwcmlt
aXRpdmVUeXBlcyA9IFsKKyAgICAgICJhbnkiLAorICAgICAgIm1peGVkIiwKKyAgICAgICJlbXB0
eSIsCisgICAgICAiYm9vbCIsCisgICAgICAiYm9vbGVhbiIsCisgICAgICAibnVtYmVyIiwKKyAg
ICAgICJzdHJpbmciLAorICAgICAgInZvaWQiLAorICAgICAgIm51bGwiCisgICAgXTsKKworICAg
IGNvbnN0IHBwID0gUGFyc2VyLnByb3RvdHlwZTsKKworICAgIHBwLmZsb3dQYXJzZVR5cGVJbml0
aWFsaXNlciA9IGZ1bmN0aW9uICh0b2spIHsKKyAgICAgIGNvbnN0IG9sZEluVHlwZSA9IHRoaXMu
c3RhdGUuaW5UeXBlOworICAgICAgdGhpcy5zdGF0ZS5pblR5cGUgPSB0cnVlOworICAgICAgdGhp
cy5leHBlY3QodG9rIHx8IHR0LmNvbG9uKTsKKworICAgICAgY29uc3QgdHlwZSA9IHRoaXMuZmxv
d1BhcnNlVHlwZSgpOworICAgICAgdGhpcy5zdGF0ZS5pblR5cGUgPSBvbGRJblR5cGU7CisgICAg
ICByZXR1cm4gdHlwZTsKKyAgICB9OworCisgICAgcHAuZmxvd1BhcnNlUHJlZGljYXRlID0gZnVu
Y3Rpb24oKSB7CisgICAgICBjb25zdCBub2RlID0gdGhpcy5zdGFydE5vZGUoKTsKKyAgICAgIGNv
bnN0IG1vZHVsb0xvYyA9IHRoaXMuc3RhdGUuc3RhcnRMb2M7CisgICAgICBjb25zdCBtb2R1bG9Q
b3MgPSB0aGlzLnN0YXRlLnN0YXJ0OworICAgICAgdGhpcy5leHBlY3QodHQubW9kdWxvKTsKKyAg
ICAgIGNvbnN0IGNoZWNrc0xvYyA9IHRoaXMuc3RhdGUuc3RhcnRMb2M7CisgICAgICB0aGlzLmV4
cGVjdENvbnRleHR1YWwoImNoZWNrcyIpOworICAgICAgLy8gRm9yY2UgJyUnIGFuZCAnY2hlY2tz
JyB0byBiZSBhZGphY2VudAorICAgICAgaWYgKG1vZHVsb0xvYy5saW5lICE9PSBjaGVja3NMb2Mu
bGluZSB8fCBtb2R1bG9Mb2MuY29sdW1uICE9PSBjaGVja3NMb2MuY29sdW1uIC0gMSkgeworICAg
ICAgICB0aGlzLnJhaXNlKG1vZHVsb1BvcywgIlNwYWNlcyBiZXR3ZWVuIMK0JcK0IGFuZCDCtGNo
ZWNrc8K0IGFyZSBub3QgYWxsb3dlZCBoZXJlLiIpOworICAgICAgfQorICAgICAgaWYgKHRoaXMu
ZWF0KHR0LnBhcmVuTCkpIHsKKyAgICAgICAgbm9kZS5leHByZXNzaW9uID0gdGhpcy5wYXJzZUV4
cHJlc3Npb24oKTsKKyAgICAgICAgdGhpcy5leHBlY3QodHQucGFyZW5SKTsKKyAgICAgICAgcmV0
dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAiRGVjbGFyZWRQcmVkaWNhdGUiKTsKKyAgICAgIH0g
ZWxzZSB7CisgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIkluZmVycmVkUHJl
ZGljYXRlIik7CisgICAgICB9CisgICAgfTsKKworICAgIHBwLmZsb3dQYXJzZVR5cGVBbmRQcmVk
aWNhdGVJbml0aWFsaXNlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IG9sZEluVHlwZSA9
IHRoaXMuc3RhdGUuaW5UeXBlOworICAgICAgdGhpcy5zdGF0ZS5pblR5cGUgPSB0cnVlOworICAg
ICAgdGhpcy5leHBlY3QodHQuY29sb24pOworICAgICAgbGV0IHR5cGUgPSBudWxsOworICAgICAg
bGV0IHByZWRpY2F0ZSA9IG51bGw7CisgICAgICBpZiAodGhpcy5tYXRjaCh0dC5tb2R1bG8pKSB7
CisgICAgICAgIHRoaXMuc3RhdGUuaW5UeXBlID0gb2xkSW5UeXBlOworICAgICAgICBwcmVkaWNh
dGUgPSB0aGlzLmZsb3dQYXJzZVByZWRpY2F0ZSgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
dHlwZSA9IHRoaXMuZmxvd1BhcnNlVHlwZSgpOworICAgICAgICB0aGlzLnN0YXRlLmluVHlwZSA9
IG9sZEluVHlwZTsKKyAgICAgICAgaWYgKHRoaXMubWF0Y2godHQubW9kdWxvKSkgeworICAgICAg
ICAgIHByZWRpY2F0ZSA9IHRoaXMuZmxvd1BhcnNlUHJlZGljYXRlKCk7CisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICAgIHJldHVybiBbdHlwZSwgcHJlZGljYXRlXTsKKyAgICB9OworCisgICAgcHAu
Zmxvd1BhcnNlRGVjbGFyZUNsYXNzID0gZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgIHRoaXMubmV4
dCgpOworICAgICAgdGhpcy5mbG93UGFyc2VJbnRlcmZhY2Vpc2gobm9kZSwgdHJ1ZSk7CisgICAg
ICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJEZWNsYXJlQ2xhc3MiKTsKKyAgICB9Owor
CisgICAgcHAuZmxvd1BhcnNlRGVjbGFyZUZ1bmN0aW9uID0gZnVuY3Rpb24gKG5vZGUpIHsKKyAg
ICAgIHRoaXMubmV4dCgpOworCisgICAgICBjb25zdCBpZCA9IG5vZGUuaWQgPSB0aGlzLnBhcnNl
SWRlbnRpZmllcigpOworCisgICAgICBjb25zdCB0eXBlTm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7
CisgICAgICBjb25zdCB0eXBlQ29udGFpbmVyID0gdGhpcy5zdGFydE5vZGUoKTsKKworICAgICAg
aWYgKHRoaXMuaXNSZWxhdGlvbmFsKCI8IikpIHsKKyAgICAgICAgdHlwZU5vZGUudHlwZVBhcmFt
ZXRlcnMgPSB0aGlzLmZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbigpOworICAgICAg
fSBlbHNlIHsKKyAgICAgICAgdHlwZU5vZGUudHlwZVBhcmFtZXRlcnMgPSBudWxsOworICAgICAg
fQorCisgICAgICB0aGlzLmV4cGVjdCh0dC5wYXJlbkwpOworICAgICAgY29uc3QgdG1wID0gdGhp
cy5mbG93UGFyc2VGdW5jdGlvblR5cGVQYXJhbXMoKTsKKyAgICAgIHR5cGVOb2RlLnBhcmFtcyA9
IHRtcC5wYXJhbXM7CisgICAgICB0eXBlTm9kZS5yZXN0ID0gdG1wLnJlc3Q7CisgICAgICB0aGlz
LmV4cGVjdCh0dC5wYXJlblIpOworICAgICAgbGV0IHByZWRpY2F0ZSA9IG51bGw7CisgICAgICBb
dHlwZU5vZGUucmV0dXJuVHlwZSwgcHJlZGljYXRlXSA9IHRoaXMuZmxvd1BhcnNlVHlwZUFuZFBy
ZWRpY2F0ZUluaXRpYWxpc2VyKCk7CisgICAgICB0eXBlQ29udGFpbmVyLnR5cGVBbm5vdGF0aW9u
ID0gdGhpcy5maW5pc2hOb2RlKHR5cGVOb2RlLCAiRnVuY3Rpb25UeXBlQW5ub3RhdGlvbiIpOwor
ICAgICAgdHlwZUNvbnRhaW5lci5wcmVkaWNhdGUgPSBwcmVkaWNhdGU7CisgICAgICBpZC50eXBl
QW5ub3RhdGlvbiA9IHRoaXMuZmluaXNoTm9kZSh0eXBlQ29udGFpbmVyLCAiVHlwZUFubm90YXRp
b24iKTsKKworICAgICAgdGhpcy5maW5pc2hOb2RlKGlkLCBpZC50eXBlKTsKKworICAgICAgdGhp
cy5zZW1pY29sb24oKTsKKworICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAiRGVj
bGFyZUZ1bmN0aW9uIik7CisgICAgfTsKKworICAgIHBwLmZsb3dQYXJzZURlY2xhcmUgPSBmdW5j
dGlvbiAobm9kZSkgeworICAgICAgaWYgKHRoaXMubWF0Y2godHQuX2NsYXNzKSkgeworICAgICAg
ICByZXR1cm4gdGhpcy5mbG93UGFyc2VEZWNsYXJlQ2xhc3Mobm9kZSk7CisgICAgICB9IGVsc2Ug
aWYgKHRoaXMubWF0Y2godHQuX2Z1bmN0aW9uKSkgeworICAgICAgICByZXR1cm4gdGhpcy5mbG93
UGFyc2VEZWNsYXJlRnVuY3Rpb24obm9kZSk7CisgICAgICB9IGVsc2UgaWYgKHRoaXMubWF0Y2go
dHQuX3ZhcikpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZmxvd1BhcnNlRGVjbGFyZVZhcmlhYmxl
KG5vZGUpOworICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQ29udGV4dHVhbCgibW9kdWxlIikpIHsK
KyAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkKCkudHlwZSA9PT0gdHQuZG90KSB7CisgICAgICAg
ICAgcmV0dXJuIHRoaXMuZmxvd1BhcnNlRGVjbGFyZU1vZHVsZUV4cG9ydHMobm9kZSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIHRoaXMuZmxvd1BhcnNlRGVjbGFyZU1vZHVs
ZShub2RlKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQ29udGV4dHVhbCgi
dHlwZSIpKSB7CisgICAgICAgIHJldHVybiB0aGlzLmZsb3dQYXJzZURlY2xhcmVUeXBlQWxpYXMo
bm9kZSk7CisgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb250ZXh0dWFsKCJpbnRlcmZhY2UiKSkg
eworICAgICAgICByZXR1cm4gdGhpcy5mbG93UGFyc2VEZWNsYXJlSW50ZXJmYWNlKG5vZGUpOwor
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy51bmV4cGVjdGVkKCk7CisgICAgICB9CisgICAg
fTsKKworICAgIHBwLmZsb3dQYXJzZURlY2xhcmVWYXJpYWJsZSA9IGZ1bmN0aW9uIChub2RlKSB7
CisgICAgICB0aGlzLm5leHQoKTsKKyAgICAgIG5vZGUuaWQgPSB0aGlzLmZsb3dQYXJzZVR5cGVB
bm5vdGF0YWJsZUlkZW50aWZpZXIoKTsKKyAgICAgIHRoaXMuc2VtaWNvbG9uKCk7CisgICAgICBy
ZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJEZWNsYXJlVmFyaWFibGUiKTsKKyAgICB9Owor
CisgICAgcHAuZmxvd1BhcnNlRGVjbGFyZU1vZHVsZSA9IGZ1bmN0aW9uIChub2RlKSB7CisgICAg
ICB0aGlzLm5leHQoKTsKKworICAgICAgaWYgKHRoaXMubWF0Y2godHQuc3RyaW5nKSkgeworICAg
ICAgICBub2RlLmlkID0gdGhpcy5wYXJzZUV4cHJBdG9tKCk7CisgICAgICB9IGVsc2UgeworICAg
ICAgICBub2RlLmlkID0gdGhpcy5wYXJzZUlkZW50aWZpZXIoKTsKKyAgICAgIH0KKworICAgICAg
Y29uc3QgYm9keU5vZGUgPSBub2RlLmJvZHkgPSB0aGlzLnN0YXJ0Tm9kZSgpOworICAgICAgY29u
c3QgYm9keSA9IGJvZHlOb2RlLmJvZHkgPSBbXTsKKyAgICAgIHRoaXMuZXhwZWN0KHR0LmJyYWNl
TCk7CisgICAgICB3aGlsZSAoIXRoaXMubWF0Y2godHQuYnJhY2VSKSkgeworICAgICAgICBsZXQg
Ym9keU5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpOworCisgICAgICAgIGlmICh0aGlzLm1hdGNoKHR0
Ll9pbXBvcnQpKSB7CisgICAgICAgICAgY29uc3QgbG9va2FoZWFkID0gdGhpcy5sb29rYWhlYWQo
KTsKKyAgICAgICAgICBpZiAobG9va2FoZWFkLnZhbHVlICE9PSAidHlwZSIgJiYgbG9va2FoZWFk
LnZhbHVlICE9PSAidHlwZW9mIikgeworICAgICAgICAgICAgdGhpcy51bmV4cGVjdGVkKG51bGws
ICJJbXBvcnRzIHdpdGhpbiBhIGBkZWNsYXJlIG1vZHVsZWAgYm9keSBtdXN0IGFsd2F5cyBiZSBg
aW1wb3J0IHR5cGVgIG9yIGBpbXBvcnQgdHlwZW9mYCIpOworICAgICAgICAgIH0KKworICAgICAg
ICAgIHRoaXMucGFyc2VJbXBvcnQoYm9keU5vZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIHRoaXMuZXhwZWN0Q29udGV4dHVhbCgiZGVjbGFyZSIsICJPbmx5IGRlY2xhcmVzIGFuZCB0
eXBlIGltcG9ydHMgYXJlIGFsbG93ZWQgaW5zaWRlIGRlY2xhcmUgbW9kdWxlIik7CisKKyAgICAg
ICAgICBib2R5Tm9kZSA9IHRoaXMuZmxvd1BhcnNlRGVjbGFyZShib2R5Tm9kZSwgdHJ1ZSk7Cisg
ICAgICAgIH0KKworICAgICAgICBib2R5LnB1c2goYm9keU5vZGUpOworICAgICAgfQorICAgICAg
dGhpcy5leHBlY3QodHQuYnJhY2VSKTsKKworICAgICAgdGhpcy5maW5pc2hOb2RlKGJvZHlOb2Rl
LCAiQmxvY2tTdGF0ZW1lbnQiKTsKKyAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwg
IkRlY2xhcmVNb2R1bGUiKTsKKyAgICB9OworCisgICAgcHAuZmxvd1BhcnNlRGVjbGFyZU1vZHVs
ZUV4cG9ydHMgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAgdGhpcy5leHBlY3RDb250ZXh0dWFs
KCJtb2R1bGUiKTsKKyAgICAgIHRoaXMuZXhwZWN0KHR0LmRvdCk7CisgICAgICB0aGlzLmV4cGVj
dENvbnRleHR1YWwoImV4cG9ydHMiKTsKKyAgICAgIG5vZGUudHlwZUFubm90YXRpb24gPSB0aGlz
LmZsb3dQYXJzZVR5cGVBbm5vdGF0aW9uKCk7CisgICAgICB0aGlzLnNlbWljb2xvbigpOworCisg
ICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJEZWNsYXJlTW9kdWxlRXhwb3J0cyIp
OworICAgIH07CisKKyAgICBwcC5mbG93UGFyc2VEZWNsYXJlVHlwZUFsaWFzID0gZnVuY3Rpb24g
KG5vZGUpIHsKKyAgICAgIHRoaXMubmV4dCgpOworICAgICAgdGhpcy5mbG93UGFyc2VUeXBlQWxp
YXMobm9kZSk7CisgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJEZWNsYXJlVHlw
ZUFsaWFzIik7CisgICAgfTsKKworICAgIHBwLmZsb3dQYXJzZURlY2xhcmVJbnRlcmZhY2UgPSBm
dW5jdGlvbiAobm9kZSkgeworICAgICAgdGhpcy5uZXh0KCk7CisgICAgICB0aGlzLmZsb3dQYXJz
ZUludGVyZmFjZWlzaChub2RlKTsKKyAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwg
IkRlY2xhcmVJbnRlcmZhY2UiKTsKKyAgICB9OworCisgICAgLy8gSW50ZXJmYWNlcworCisgICAg
cHAuZmxvd1BhcnNlSW50ZXJmYWNlaXNoID0gZnVuY3Rpb24gKG5vZGUsIGFsbG93U3RhdGljKSB7
CisgICAgICBub2RlLmlkID0gdGhpcy5wYXJzZUlkZW50aWZpZXIoKTsKKworICAgICAgaWYgKHRo
aXMuaXNSZWxhdGlvbmFsKCI8IikpIHsKKyAgICAgICAgbm9kZS50eXBlUGFyYW1ldGVycyA9IHRo
aXMuZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7CisgICAgICB9IGVsc2Ugewor
ICAgICAgICBub2RlLnR5cGVQYXJhbWV0ZXJzID0gbnVsbDsKKyAgICAgIH0KKworICAgICAgbm9k
ZS5leHRlbmRzID0gW107CisgICAgICBub2RlLm1peGlucyA9IFtdOworCisgICAgICBpZiAodGhp
cy5lYXQodHQuX2V4dGVuZHMpKSB7CisgICAgICAgIGRvIHsKKyAgICAgICAgICBub2RlLmV4dGVu
ZHMucHVzaCh0aGlzLmZsb3dQYXJzZUludGVyZmFjZUV4dGVuZHMoKSk7CisgICAgICAgIH0gd2hp
bGUgKHRoaXMuZWF0KHR0LmNvbW1hKSk7CisgICAgICB9CisKKyAgICAgIGlmICh0aGlzLmlzQ29u
dGV4dHVhbCgibWl4aW5zIikpIHsKKyAgICAgICAgdGhpcy5uZXh0KCk7CisgICAgICAgIGRvIHsK
KyAgICAgICAgICBub2RlLm1peGlucy5wdXNoKHRoaXMuZmxvd1BhcnNlSW50ZXJmYWNlRXh0ZW5k
cygpKTsKKyAgICAgICAgfSB3aGlsZSAodGhpcy5lYXQodHQuY29tbWEpKTsKKyAgICAgIH0KKwor
ICAgICAgbm9kZS5ib2R5ID0gdGhpcy5mbG93UGFyc2VPYmplY3RUeXBlKGFsbG93U3RhdGljKTsK
KyAgICB9OworCisgICAgcHAuZmxvd1BhcnNlSW50ZXJmYWNlRXh0ZW5kcyA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpOworCisgICAgICBub2RlLmlk
ID0gdGhpcy5mbG93UGFyc2VRdWFsaWZpZWRUeXBlSWRlbnRpZmllcigpOworICAgICAgaWYgKHRo
aXMuaXNSZWxhdGlvbmFsKCI8IikpIHsKKyAgICAgICAgbm9kZS50eXBlUGFyYW1ldGVycyA9IHRo
aXMuZmxvd1BhcnNlVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24oKTsKKyAgICAgIH0gZWxzZSB7
CisgICAgICAgIG5vZGUudHlwZVBhcmFtZXRlcnMgPSBudWxsOworICAgICAgfQorCisgICAgICBy
ZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJJbnRlcmZhY2VFeHRlbmRzIik7CisgICAgfTsK
KworICAgIHBwLmZsb3dQYXJzZUludGVyZmFjZSA9IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICB0
aGlzLmZsb3dQYXJzZUludGVyZmFjZWlzaChub2RlLCBmYWxzZSk7CisgICAgICByZXR1cm4gdGhp
cy5maW5pc2hOb2RlKG5vZGUsICJJbnRlcmZhY2VEZWNsYXJhdGlvbiIpOworICAgIH07CisKKyAg
ICBwcC5mbG93UGFyc2VSZXN0cmljdGVkSWRlbnRpZmllciA9IGZ1bmN0aW9uKGxpYmVyYWwpIHsK
KyAgICAgIGlmIChwcmltaXRpdmVUeXBlcy5pbmRleE9mKHRoaXMuc3RhdGUudmFsdWUpID4gLTEp
IHsKKyAgICAgICAgdGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0LCBgQ2Fubm90IG92ZXJ3cml0
ZSBwcmltaXRpdmUgdHlwZSAke3RoaXMuc3RhdGUudmFsdWV9YCk7CisgICAgICB9CisKKyAgICAg
IHJldHVybiB0aGlzLnBhcnNlSWRlbnRpZmllcihsaWJlcmFsKTsKKyAgICB9OworCisgICAgLy8g
VHlwZSBhbGlhc2VzCisKKyAgICBwcC5mbG93UGFyc2VUeXBlQWxpYXMgPSBmdW5jdGlvbiAobm9k
ZSkgeworICAgICAgbm9kZS5pZCA9IHRoaXMuZmxvd1BhcnNlUmVzdHJpY3RlZElkZW50aWZpZXIo
KTsKKworICAgICAgaWYgKHRoaXMuaXNSZWxhdGlvbmFsKCI8IikpIHsKKyAgICAgICAgbm9kZS50
eXBlUGFyYW1ldGVycyA9IHRoaXMuZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7
CisgICAgICB9IGVsc2UgeworICAgICAgICBub2RlLnR5cGVQYXJhbWV0ZXJzID0gbnVsbDsKKyAg
ICAgIH0KKworICAgICAgbm9kZS5yaWdodCA9IHRoaXMuZmxvd1BhcnNlVHlwZUluaXRpYWxpc2Vy
KHR0LmVxKTsKKyAgICAgIHRoaXMuc2VtaWNvbG9uKCk7CisKKyAgICAgIHJldHVybiB0aGlzLmZp
bmlzaE5vZGUobm9kZSwgIlR5cGVBbGlhcyIpOworICAgIH07CisKKyAgICAvLyBUeXBlIGFubm90
YXRpb25zCisKKyAgICBwcC5mbG93UGFyc2VUeXBlUGFyYW1ldGVyID0gZnVuY3Rpb24gKCkgewor
ICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7CisKKyAgICAgIGNvbnN0IHZhcmlh
bmNlID0gdGhpcy5mbG93UGFyc2VWYXJpYW5jZSgpOworCisgICAgICBjb25zdCBpZGVudCA9IHRo
aXMuZmxvd1BhcnNlVHlwZUFubm90YXRhYmxlSWRlbnRpZmllcigpOworICAgICAgbm9kZS5uYW1l
ID0gaWRlbnQubmFtZTsKKyAgICAgIG5vZGUudmFyaWFuY2UgPSB2YXJpYW5jZTsKKyAgICAgIG5v
ZGUuYm91bmQgPSBpZGVudC50eXBlQW5ub3RhdGlvbjsKKworICAgICAgaWYgKHRoaXMubWF0Y2go
dHQuZXEpKSB7CisgICAgICAgIHRoaXMuZWF0KHR0LmVxKTsKKyAgICAgICAgbm9kZS5kZWZhdWx0
ID0gdGhpcy5mbG93UGFyc2VUeXBlKCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0aGlzLmZp
bmlzaE5vZGUobm9kZSwgIlR5cGVQYXJhbWV0ZXIiKTsKKyAgICB9OworCisgICAgcHAuZmxvd1Bh
cnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgY29uc3Qg
b2xkSW5UeXBlID0gdGhpcy5zdGF0ZS5pblR5cGU7CisgICAgICBjb25zdCBub2RlID0gdGhpcy5z
dGFydE5vZGUoKTsKKyAgICAgIG5vZGUucGFyYW1zID0gW107CisKKyAgICAgIHRoaXMuc3RhdGUu
aW5UeXBlID0gdHJ1ZTsKKworICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IHRoaXMgY29u
ZGl0aW9uIGlzIGFscmVhZHkgY2hlY2tlZCBhdCBhbGwgY2FsbCBzaXRlcworICAgICAgaWYgKHRo
aXMuaXNSZWxhdGlvbmFsKCI8IikgfHwgdGhpcy5tYXRjaCh0dC5qc3hUYWdTdGFydCkpIHsKKyAg
ICAgICAgdGhpcy5uZXh0KCk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLnVuZXhwZWN0
ZWQoKTsKKyAgICAgIH0KKworICAgICAgZG8geworICAgICAgICBub2RlLnBhcmFtcy5wdXNoKHRo
aXMuZmxvd1BhcnNlVHlwZVBhcmFtZXRlcigpKTsKKyAgICAgICAgaWYgKCF0aGlzLmlzUmVsYXRp
b25hbCgiPiIpKSB7CisgICAgICAgICAgdGhpcy5leHBlY3QodHQuY29tbWEpOworICAgICAgICB9
CisgICAgICB9IHdoaWxlICghdGhpcy5pc1JlbGF0aW9uYWwoIj4iKSk7CisgICAgICB0aGlzLmV4
cGVjdFJlbGF0aW9uYWwoIj4iKTsKKworICAgICAgdGhpcy5zdGF0ZS5pblR5cGUgPSBvbGRJblR5
cGU7CisKKyAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIlR5cGVQYXJhbWV0ZXJE
ZWNsYXJhdGlvbiIpOworICAgIH07CisKKyAgICBwcC5mbG93UGFyc2VUeXBlUGFyYW1ldGVySW5z
dGFudGlhdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXJ0
Tm9kZSgpOworICAgICAgY29uc3Qgb2xkSW5UeXBlID0gdGhpcy5zdGF0ZS5pblR5cGU7CisgICAg
ICBub2RlLnBhcmFtcyA9IFtdOworCisgICAgICB0aGlzLnN0YXRlLmluVHlwZSA9IHRydWU7CisK
KyAgICAgIHRoaXMuZXhwZWN0UmVsYXRpb25hbCgiPCIpOworICAgICAgd2hpbGUgKCF0aGlzLmlz
UmVsYXRpb25hbCgiPiIpKSB7CisgICAgICAgIG5vZGUucGFyYW1zLnB1c2godGhpcy5mbG93UGFy
c2VUeXBlKCkpOworICAgICAgICBpZiAoIXRoaXMuaXNSZWxhdGlvbmFsKCI+IikpIHsKKyAgICAg
ICAgICB0aGlzLmV4cGVjdCh0dC5jb21tYSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHRo
aXMuZXhwZWN0UmVsYXRpb25hbCgiPiIpOworCisgICAgICB0aGlzLnN0YXRlLmluVHlwZSA9IG9s
ZEluVHlwZTsKKworICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAiVHlwZVBhcmFt
ZXRlckluc3RhbnRpYXRpb24iKTsKKyAgICB9OworCisgICAgcHAuZmxvd1BhcnNlT2JqZWN0UHJv
cGVydHlLZXkgPSBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gKHRoaXMubWF0Y2godHQubnVt
KSB8fCB0aGlzLm1hdGNoKHR0LnN0cmluZykpID8gdGhpcy5wYXJzZUV4cHJBdG9tKCkgOiB0aGlz
LnBhcnNlSWRlbnRpZmllcih0cnVlKTsKKyAgICB9OworCisgICAgcHAuZmxvd1BhcnNlT2JqZWN0
VHlwZUluZGV4ZXIgPSBmdW5jdGlvbiAobm9kZSwgaXNTdGF0aWMsIHZhcmlhbmNlKSB7CisgICAg
ICBub2RlLnN0YXRpYyA9IGlzU3RhdGljOworCisgICAgICB0aGlzLmV4cGVjdCh0dC5icmFja2V0
TCk7CisgICAgICBpZiAodGhpcy5sb29rYWhlYWQoKS50eXBlID09PSB0dC5jb2xvbikgeworICAg
ICAgICBub2RlLmlkID0gdGhpcy5mbG93UGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOworICAgICAg
ICBub2RlLmtleSA9IHRoaXMuZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCk7CisgICAgICB9IGVs
c2UgeworICAgICAgICBub2RlLmlkID0gbnVsbDsKKyAgICAgICAgbm9kZS5rZXkgPSB0aGlzLmZs
b3dQYXJzZVR5cGUoKTsKKyAgICAgIH0KKyAgICAgIHRoaXMuZXhwZWN0KHR0LmJyYWNrZXRSKTsK
KyAgICAgIG5vZGUudmFsdWUgPSB0aGlzLmZsb3dQYXJzZVR5cGVJbml0aWFsaXNlcigpOworICAg
ICAgbm9kZS52YXJpYW5jZSA9IHZhcmlhbmNlOworCisgICAgICAvLyBGaW5pc2ggbm9kZSBmaXJz
dCB0byBub3QgaW5jbHVkZSBhIHBvc3NpYmxlIHNlbWljb2xvbiBpbiB0aGUgbG9jYXRpb25zCisg
ICAgICBjb25zdCBpbmRleGVyID0gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJPYmplY3RUeXBlSW5k
ZXhlciIpOworICAgICAgdGhpcy5mbG93T2JqZWN0VHlwZVNlbWljb2xvbigpOworCisgICAgICBy
ZXR1cm4gaW5kZXhlcjsKKyAgICB9OworCisgICAgcHAuZmxvd1BhcnNlT2JqZWN0VHlwZU1ldGhv
ZGlzaCA9IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICBub2RlLnBhcmFtcyA9IFtdOworICAgICAg
bm9kZS5yZXN0ID0gbnVsbDsKKyAgICAgIG5vZGUudHlwZVBhcmFtZXRlcnMgPSBudWxsOworCisg
ICAgICBpZiAodGhpcy5pc1JlbGF0aW9uYWwoIjwiKSkgeworICAgICAgICBub2RlLnR5cGVQYXJh
bWV0ZXJzID0gdGhpcy5mbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTsKKyAgICAg
IH0KKworICAgICAgdGhpcy5leHBlY3QodHQucGFyZW5MKTsKKyAgICAgIHdoaWxlICh0aGlzLm1h
dGNoKHR0Lm5hbWUpKSB7CisgICAgICAgIG5vZGUucGFyYW1zLnB1c2godGhpcy5mbG93UGFyc2VG
dW5jdGlvblR5cGVQYXJhbSgpKTsKKyAgICAgICAgaWYgKCF0aGlzLm1hdGNoKHR0LnBhcmVuUikp
IHsKKyAgICAgICAgICB0aGlzLmV4cGVjdCh0dC5jb21tYSk7CisgICAgICAgIH0KKyAgICAgIH0K
KworICAgICAgaWYgKHRoaXMuZWF0KHR0LmVsbGlwc2lzKSkgeworICAgICAgICBub2RlLnJlc3Qg
PSB0aGlzLmZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtKCk7CisgICAgICB9CisgICAgICB0aGlz
LmV4cGVjdCh0dC5wYXJlblIpOworICAgICAgbm9kZS5yZXR1cm5UeXBlID0gdGhpcy5mbG93UGFy
c2VUeXBlSW5pdGlhbGlzZXIoKTsKKworICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2Rl
LCAiRnVuY3Rpb25UeXBlQW5ub3RhdGlvbiIpOworICAgIH07CisKKyAgICBwcC5mbG93UGFyc2VP
YmplY3RUeXBlTWV0aG9kID0gZnVuY3Rpb24gKHN0YXJ0UG9zLCBzdGFydExvYywgaXNTdGF0aWMs
IGtleSkgeworICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0
YXJ0TG9jKTsKKyAgICAgIG5vZGUudmFsdWUgPSB0aGlzLmZsb3dQYXJzZU9iamVjdFR5cGVNZXRo
b2Rpc2godGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpKTsKKyAgICAgIG5vZGUu
c3RhdGljID0gaXNTdGF0aWM7CisgICAgICBub2RlLmtleSA9IGtleTsKKyAgICAgIG5vZGUub3B0
aW9uYWwgPSBmYWxzZTsKKyAgICAgIHRoaXMuZmxvd09iamVjdFR5cGVTZW1pY29sb24oKTsKKyAg
ICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIk9iamVjdFR5cGVQcm9wZXJ0eSIpOwor
ICAgIH07CisKKyAgICBwcC5mbG93UGFyc2VPYmplY3RUeXBlQ2FsbFByb3BlcnR5ID0gZnVuY3Rp
b24gKG5vZGUsIGlzU3RhdGljKSB7CisgICAgICBjb25zdCB2YWx1ZU5vZGUgPSB0aGlzLnN0YXJ0
Tm9kZSgpOworICAgICAgbm9kZS5zdGF0aWMgPSBpc1N0YXRpYzsKKyAgICAgIG5vZGUudmFsdWUg
PSB0aGlzLmZsb3dQYXJzZU9iamVjdFR5cGVNZXRob2Rpc2godmFsdWVOb2RlKTsKKyAgICAgIHRo
aXMuZmxvd09iamVjdFR5cGVTZW1pY29sb24oKTsKKyAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5v
ZGUobm9kZSwgIk9iamVjdFR5cGVDYWxsUHJvcGVydHkiKTsKKyAgICB9OworCisgICAgcHAuZmxv
d1BhcnNlT2JqZWN0VHlwZSA9IGZ1bmN0aW9uIChhbGxvd1N0YXRpYywgYWxsb3dFeGFjdCkgewor
ICAgICAgY29uc3Qgb2xkSW5UeXBlID0gdGhpcy5zdGF0ZS5pblR5cGU7CisgICAgICB0aGlzLnN0
YXRlLmluVHlwZSA9IHRydWU7CisKKyAgICAgIGNvbnN0IG5vZGVTdGFydCA9IHRoaXMuc3RhcnRO
b2RlKCk7CisgICAgICBsZXQgbm9kZTsKKyAgICAgIGxldCBwcm9wZXJ0eUtleTsKKyAgICAgIGxl
dCBpc1N0YXRpYyA9IGZhbHNlOworCisgICAgICBub2RlU3RhcnQuY2FsbFByb3BlcnRpZXMgPSBb
XTsKKyAgICAgIG5vZGVTdGFydC5wcm9wZXJ0aWVzID0gW107CisgICAgICBub2RlU3RhcnQuaW5k
ZXhlcnMgPSBbXTsKKworICAgICAgbGV0IGVuZERlbGltOworICAgICAgbGV0IGV4YWN0OworICAg
ICAgaWYgKGFsbG93RXhhY3QgJiYgdGhpcy5tYXRjaCh0dC5icmFjZUJhckwpKSB7CisgICAgICAg
IHRoaXMuZXhwZWN0KHR0LmJyYWNlQmFyTCk7CisgICAgICAgIGVuZERlbGltID0gdHQuYnJhY2VC
YXJSOworICAgICAgICBleGFjdCA9IHRydWU7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlz
LmV4cGVjdCh0dC5icmFjZUwpOworICAgICAgICBlbmREZWxpbSA9IHR0LmJyYWNlUjsKKyAgICAg
ICAgZXhhY3QgPSBmYWxzZTsKKyAgICAgIH0KKworICAgICAgbm9kZVN0YXJ0LmV4YWN0ID0gZXhh
Y3Q7CisKKyAgICAgIHdoaWxlICghdGhpcy5tYXRjaChlbmREZWxpbSkpIHsKKyAgICAgICAgbGV0
IG9wdGlvbmFsID0gZmFsc2U7CisgICAgICAgIGNvbnN0IHN0YXJ0UG9zID0gdGhpcy5zdGF0ZS5z
dGFydDsKKyAgICAgICAgY29uc3Qgc3RhcnRMb2MgPSB0aGlzLnN0YXRlLnN0YXJ0TG9jOworICAg
ICAgICBub2RlID0gdGhpcy5zdGFydE5vZGUoKTsKKyAgICAgICAgaWYgKGFsbG93U3RhdGljICYm
IHRoaXMuaXNDb250ZXh0dWFsKCJzdGF0aWMiKSAmJiB0aGlzLmxvb2thaGVhZCgpLnR5cGUgIT09
IHR0LmNvbG9uKSB7CisgICAgICAgICAgdGhpcy5uZXh0KCk7CisgICAgICAgICAgaXNTdGF0aWMg
PSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgdmFyaWFuY2UgPSB0aGlzLmZsb3dQ
YXJzZVZhcmlhbmNlKCk7CisKKyAgICAgICAgaWYgKHRoaXMubWF0Y2godHQuYnJhY2tldEwpKSB7
CisgICAgICAgICAgbm9kZVN0YXJ0LmluZGV4ZXJzLnB1c2godGhpcy5mbG93UGFyc2VPYmplY3RU
eXBlSW5kZXhlcihub2RlLCBpc1N0YXRpYywgdmFyaWFuY2UpKTsKKyAgICAgICAgfSBlbHNlIGlm
ICh0aGlzLm1hdGNoKHR0LnBhcmVuTCkgfHwgdGhpcy5pc1JlbGF0aW9uYWwoIjwiKSkgeworICAg
ICAgICAgIGlmICh2YXJpYW5jZSkgeworICAgICAgICAgICAgdGhpcy51bmV4cGVjdGVkKHZhcmlh
bmNlLnN0YXJ0KTsKKyAgICAgICAgICB9CisgICAgICAgICAgbm9kZVN0YXJ0LmNhbGxQcm9wZXJ0
aWVzLnB1c2godGhpcy5mbG93UGFyc2VPYmplY3RUeXBlQ2FsbFByb3BlcnR5KG5vZGUsIGlzU3Rh
dGljKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcHJvcGVydHlLZXkgPSB0aGlzLmZs
b3dQYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisgICAgICAgICAgaWYgKHRoaXMuaXNSZWxhdGlv
bmFsKCI8IikgfHwgdGhpcy5tYXRjaCh0dC5wYXJlbkwpKSB7CisgICAgICAgICAgICAvLyBUaGlz
IGlzIGEgbWV0aG9kIHByb3BlcnR5CisgICAgICAgICAgICBpZiAodmFyaWFuY2UpIHsKKyAgICAg
ICAgICAgICAgdGhpcy51bmV4cGVjdGVkKHZhcmlhbmNlLnN0YXJ0KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIG5vZGVTdGFydC5wcm9wZXJ0aWVzLnB1c2godGhpcy5mbG93UGFyc2VPYmpl
Y3RUeXBlTWV0aG9kKHN0YXJ0UG9zLCBzdGFydExvYywgaXNTdGF0aWMsIHByb3BlcnR5S2V5KSk7
CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmVhdCh0dC5xdWVzdGlv
bikpIHsKKyAgICAgICAgICAgICAgb3B0aW9uYWwgPSB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbm9kZS5rZXkgPSBwcm9wZXJ0eUtleTsKKyAgICAgICAgICAgIG5vZGUudmFsdWUg
PSB0aGlzLmZsb3dQYXJzZVR5cGVJbml0aWFsaXNlcigpOworICAgICAgICAgICAgbm9kZS5vcHRp
b25hbCA9IG9wdGlvbmFsOworICAgICAgICAgICAgbm9kZS5zdGF0aWMgPSBpc1N0YXRpYzsKKyAg
ICAgICAgICAgIG5vZGUudmFyaWFuY2UgPSB2YXJpYW5jZTsKKyAgICAgICAgICAgIHRoaXMuZmxv
d09iamVjdFR5cGVTZW1pY29sb24oKTsKKyAgICAgICAgICAgIG5vZGVTdGFydC5wcm9wZXJ0aWVz
LnB1c2godGhpcy5maW5pc2hOb2RlKG5vZGUsICJPYmplY3RUeXBlUHJvcGVydHkiKSk7CisgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaXNTdGF0aWMgPSBmYWxzZTsKKyAgICAgIH0K
KworICAgICAgdGhpcy5leHBlY3QoZW5kRGVsaW0pOworCisgICAgICBjb25zdCBvdXQgPSB0aGlz
LmZpbmlzaE5vZGUobm9kZVN0YXJ0LCAiT2JqZWN0VHlwZUFubm90YXRpb24iKTsKKworICAgICAg
dGhpcy5zdGF0ZS5pblR5cGUgPSBvbGRJblR5cGU7CisKKyAgICAgIHJldHVybiBvdXQ7CisgICAg
fTsKKworICAgIHBwLmZsb3dPYmplY3RUeXBlU2VtaWNvbG9uID0gZnVuY3Rpb24gKCkgeworICAg
ICAgaWYgKCF0aGlzLmVhdCh0dC5zZW1pKSAmJiAhdGhpcy5lYXQodHQuY29tbWEpICYmCisgICAg
ICAgICAgIXRoaXMubWF0Y2godHQuYnJhY2VSKSAmJiAhdGhpcy5tYXRjaCh0dC5icmFjZUJhclIp
KSB7CisgICAgICAgIHRoaXMudW5leHBlY3RlZCgpOworICAgICAgfQorICAgIH07CisKKyAgICBw
cC5mbG93UGFyc2VRdWFsaWZpZWRUeXBlSWRlbnRpZmllciA9IGZ1bmN0aW9uIChzdGFydFBvcywg
c3RhcnRMb2MsIGlkKSB7CisgICAgICBzdGFydFBvcyA9IHN0YXJ0UG9zIHx8IHRoaXMuc3RhdGUu
c3RhcnQ7CisgICAgICBzdGFydExvYyA9IHN0YXJ0TG9jIHx8IHRoaXMuc3RhdGUuc3RhcnRMb2M7
CisgICAgICBsZXQgbm9kZSA9IGlkIHx8IHRoaXMucGFyc2VJZGVudGlmaWVyKCk7CisKKyAgICAg
IHdoaWxlICh0aGlzLmVhdCh0dC5kb3QpKSB7CisgICAgICAgIGNvbnN0IG5vZGUyID0gdGhpcy5z
dGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpOworICAgICAgICBub2RlMi5xdWFsaWZpY2F0
aW9uID0gbm9kZTsKKyAgICAgICAgbm9kZTIuaWQgPSB0aGlzLnBhcnNlSWRlbnRpZmllcigpOwor
ICAgICAgICBub2RlID0gdGhpcy5maW5pc2hOb2RlKG5vZGUyLCAiUXVhbGlmaWVkVHlwZUlkZW50
aWZpZXIiKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIG5vZGU7CisgICAgfTsKKworICAgIHBw
LmZsb3dQYXJzZUdlbmVyaWNUeXBlID0gZnVuY3Rpb24gKHN0YXJ0UG9zLCBzdGFydExvYywgaWQp
IHsKKyAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExv
Yyk7CisKKyAgICAgIG5vZGUudHlwZVBhcmFtZXRlcnMgPSBudWxsOworICAgICAgbm9kZS5pZCA9
IHRoaXMuZmxvd1BhcnNlUXVhbGlmaWVkVHlwZUlkZW50aWZpZXIoc3RhcnRQb3MsIHN0YXJ0TG9j
LCBpZCk7CisKKyAgICAgIGlmICh0aGlzLmlzUmVsYXRpb25hbCgiPCIpKSB7CisgICAgICAgIG5v
ZGUudHlwZVBhcmFtZXRlcnMgPSB0aGlzLmZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0
aW9uKCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIkdl
bmVyaWNUeXBlQW5ub3RhdGlvbiIpOworICAgIH07CisKKyAgICBwcC5mbG93UGFyc2VUeXBlb2ZU
eXBlID0gZnVuY3Rpb24gKCkgeworICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7
CisgICAgICB0aGlzLmV4cGVjdCh0dC5fdHlwZW9mKTsKKyAgICAgIG5vZGUuYXJndW1lbnQgPSB0
aGlzLmZsb3dQYXJzZVByaW1hcnlUeXBlKCk7CisgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2Rl
KG5vZGUsICJUeXBlb2ZUeXBlQW5ub3RhdGlvbiIpOworICAgIH07CisKKyAgICBwcC5mbG93UGFy
c2VUdXBsZVR5cGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCBub2RlID0gdGhpcy5zdGFy
dE5vZGUoKTsKKyAgICAgIG5vZGUudHlwZXMgPSBbXTsKKyAgICAgIHRoaXMuZXhwZWN0KHR0LmJy
YWNrZXRMKTsKKyAgICAgIC8vIFdlIGFsbG93IHRyYWlsaW5nIGNvbW1hcworICAgICAgd2hpbGUg
KHRoaXMuc3RhdGUucG9zIDwgdGhpcy5pbnB1dC5sZW5ndGggJiYgIXRoaXMubWF0Y2godHQuYnJh
Y2tldFIpKSB7CisgICAgICAgIG5vZGUudHlwZXMucHVzaCh0aGlzLmZsb3dQYXJzZVR5cGUoKSk7
CisgICAgICAgIGlmICh0aGlzLm1hdGNoKHR0LmJyYWNrZXRSKSkgYnJlYWs7CisgICAgICAgIHRo
aXMuZXhwZWN0KHR0LmNvbW1hKTsKKyAgICAgIH0KKyAgICAgIHRoaXMuZXhwZWN0KHR0LmJyYWNr
ZXRSKTsKKyAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIlR1cGxlVHlwZUFubm90
YXRpb24iKTsKKyAgICB9OworCisgICAgcHAuZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW0gPSBm
dW5jdGlvbiAoKSB7CisgICAgICBsZXQgbmFtZSA9IG51bGw7CisgICAgICBsZXQgb3B0aW9uYWwg
PSBmYWxzZTsKKyAgICAgIGxldCB0eXBlQW5ub3RhdGlvbiA9IG51bGw7CisgICAgICBjb25zdCBu
b2RlID0gdGhpcy5zdGFydE5vZGUoKTsKKyAgICAgIGNvbnN0IGxoID0gdGhpcy5sb29rYWhlYWQo
KTsKKyAgICAgIGlmIChsaC50eXBlID09PSB0dC5jb2xvbiB8fAorICAgICAgICAgIGxoLnR5cGUg
PT09IHR0LnF1ZXN0aW9uKSB7CisgICAgICAgIG5hbWUgPSB0aGlzLnBhcnNlSWRlbnRpZmllcigp
OworICAgICAgICBpZiAodGhpcy5lYXQodHQucXVlc3Rpb24pKSB7CisgICAgICAgICAgb3B0aW9u
YWwgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHR5cGVBbm5vdGF0aW9uID0gdGhpcy5mbG93
UGFyc2VUeXBlSW5pdGlhbGlzZXIoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHR5cGVBbm5v
dGF0aW9uID0gdGhpcy5mbG93UGFyc2VUeXBlKCk7CisgICAgICB9CisgICAgICBub2RlLm5hbWUg
PSBuYW1lOworICAgICAgbm9kZS5vcHRpb25hbCA9IG9wdGlvbmFsOworICAgICAgbm9kZS50eXBl
QW5ub3RhdGlvbiA9IHR5cGVBbm5vdGF0aW9uOworICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9k
ZShub2RlLCAiRnVuY3Rpb25UeXBlUGFyYW0iKTsKKyAgICB9OworCisgICAgcHAucmVpbnRlcnBy
ZXRUeXBlQXNGdW5jdGlvblR5cGVQYXJhbSA9IGZ1bmN0aW9uICh0eXBlKSB7CisgICAgICBjb25z
dCBub2RlID0gdGhpcy5zdGFydE5vZGVBdCh0eXBlLnN0YXJ0LCB0eXBlLmxvYyk7CisgICAgICBu
b2RlLm5hbWUgPSBudWxsOworICAgICAgbm9kZS5vcHRpb25hbCA9IGZhbHNlOworICAgICAgbm9k
ZS50eXBlQW5ub3RhdGlvbiA9IHR5cGU7CisgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5v
ZGUsICJGdW5jdGlvblR5cGVQYXJhbSIpOworICAgIH07CisKKyAgICBwcC5mbG93UGFyc2VGdW5j
dGlvblR5cGVQYXJhbXMgPSBmdW5jdGlvbiAocGFyYW1zID0gW10pIHsKKyAgICAgIGNvbnN0IHJl
dCA9IHsgcGFyYW1zLCByZXN0OiBudWxsIH07CisgICAgICB3aGlsZSAoIXRoaXMubWF0Y2godHQu
cGFyZW5SKSAmJiAhdGhpcy5tYXRjaCh0dC5lbGxpcHNpcykpIHsKKyAgICAgICAgcmV0LnBhcmFt
cy5wdXNoKHRoaXMuZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW0oKSk7CisgICAgICAgIGlmICgh
dGhpcy5tYXRjaCh0dC5wYXJlblIpKSB7CisgICAgICAgICAgdGhpcy5leHBlY3QodHQuY29tbWEp
OworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAodGhpcy5lYXQodHQuZWxsaXBzaXMpKSB7
CisgICAgICAgIHJldC5yZXN0ID0gdGhpcy5mbG93UGFyc2VGdW5jdGlvblR5cGVQYXJhbSgpOwor
ICAgICAgfQorICAgICAgcmV0dXJuIHJldDsKKyAgICB9OworCisgICAgcHAuZmxvd0lkZW50VG9U
eXBlQW5ub3RhdGlvbiA9IGZ1bmN0aW9uIChzdGFydFBvcywgc3RhcnRMb2MsIG5vZGUsIGlkKSB7
CisgICAgICBzd2l0Y2ggKGlkLm5hbWUpIHsKKyAgICAgICAgY2FzZSAiYW55IjoKKyAgICAgICAg
ICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJBbnlUeXBlQW5ub3RhdGlvbiIpOworCisg
ICAgICAgIGNhc2UgInZvaWQiOgorICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9k
ZSwgIlZvaWRUeXBlQW5ub3RhdGlvbiIpOworCisgICAgICAgIGNhc2UgImJvb2wiOgorICAgICAg
ICBjYXNlICJib29sZWFuIjoKKyAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUs
ICJCb29sZWFuVHlwZUFubm90YXRpb24iKTsKKworICAgICAgICBjYXNlICJtaXhlZCI6CisgICAg
ICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAiTWl4ZWRUeXBlQW5ub3RhdGlvbiIp
OworCisgICAgICAgIGNhc2UgImVtcHR5IjoKKyAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hO
b2RlKG5vZGUsICJFbXB0eVR5cGVBbm5vdGF0aW9uIik7CisKKyAgICAgICAgY2FzZSAibnVtYmVy
IjoKKyAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJOdW1iZXJUeXBlQW5u
b3RhdGlvbiIpOworCisgICAgICAgIGNhc2UgInN0cmluZyI6CisgICAgICAgICAgcmV0dXJuIHRo
aXMuZmluaXNoTm9kZShub2RlLCAiU3RyaW5nVHlwZUFubm90YXRpb24iKTsKKworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgIHJldHVybiB0aGlzLmZsb3dQYXJzZUdlbmVyaWNUeXBlKHN0YXJ0
UG9zLCBzdGFydExvYywgaWQpOworICAgICAgfQorICAgIH07CisKKyAgICAvLyBUaGUgcGFyc2lu
ZyBvZiB0eXBlcyByb3VnaGx5IHBhcmFsbGVscyB0aGUgcGFyc2luZyBvZiBleHByZXNzaW9ucywg
YW5kCisgICAgLy8gcHJpbWFyeSB0eXBlcyBhcmUga2luZCBvZiBsaWtlIHByaW1hcnkgZXhwcmVz
c2lvbnMuLi50aGV5J3JlIHRoZQorICAgIC8vIHByaW1pdGl2ZXMgd2l0aCB3aGljaCBvdGhlciB0
eXBlcyBhcmUgY29uc3RydWN0ZWQuCisgICAgcHAuZmxvd1BhcnNlUHJpbWFyeVR5cGUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICBjb25zdCBzdGFydFBvcyA9IHRoaXMuc3RhdGUuc3RhcnQ7CisgICAg
ICBjb25zdCBzdGFydExvYyA9IHRoaXMuc3RhdGUuc3RhcnRMb2M7CisgICAgICBjb25zdCBub2Rl
ID0gdGhpcy5zdGFydE5vZGUoKTsKKyAgICAgIGxldCB0bXA7CisgICAgICBsZXQgdHlwZTsKKyAg
ICAgIGxldCBpc0dyb3VwZWRUeXBlID0gZmFsc2U7CisgICAgICBjb25zdCBvbGROb0Fub25GdW5j
dGlvblR5cGUgPSB0aGlzLnN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZTsKKworICAgICAgc3dpdGNo
ICh0aGlzLnN0YXRlLnR5cGUpIHsKKyAgICAgICAgY2FzZSB0dC5uYW1lOgorICAgICAgICAgIHJl
dHVybiB0aGlzLmZsb3dJZGVudFRvVHlwZUFubm90YXRpb24oc3RhcnRQb3MsIHN0YXJ0TG9jLCBu
b2RlLCB0aGlzLnBhcnNlSWRlbnRpZmllcigpKTsKKworICAgICAgICBjYXNlIHR0LmJyYWNlTDoK
KyAgICAgICAgICByZXR1cm4gdGhpcy5mbG93UGFyc2VPYmplY3RUeXBlKGZhbHNlLCBmYWxzZSk7
CisKKyAgICAgICAgY2FzZSB0dC5icmFjZUJhckw6CisgICAgICAgICAgcmV0dXJuIHRoaXMuZmxv
d1BhcnNlT2JqZWN0VHlwZShmYWxzZSwgdHJ1ZSk7CisKKyAgICAgICAgY2FzZSB0dC5icmFja2V0
TDoKKyAgICAgICAgICByZXR1cm4gdGhpcy5mbG93UGFyc2VUdXBsZVR5cGUoKTsKKworICAgICAg
ICBjYXNlIHR0LnJlbGF0aW9uYWw6CisgICAgICAgICAgaWYgKHRoaXMuc3RhdGUudmFsdWUgPT09
ICI8IikgeworICAgICAgICAgICAgbm9kZS50eXBlUGFyYW1ldGVycyA9IHRoaXMuZmxvd1BhcnNl
VHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7CisgICAgICAgICAgICB0aGlzLmV4cGVjdCh0dC5w
YXJlbkwpOworICAgICAgICAgICAgdG1wID0gdGhpcy5mbG93UGFyc2VGdW5jdGlvblR5cGVQYXJh
bXMoKTsKKyAgICAgICAgICAgIG5vZGUucGFyYW1zID0gdG1wLnBhcmFtczsKKyAgICAgICAgICAg
IG5vZGUucmVzdCA9IHRtcC5yZXN0OworICAgICAgICAgICAgdGhpcy5leHBlY3QodHQucGFyZW5S
KTsKKworICAgICAgICAgICAgdGhpcy5leHBlY3QodHQuYXJyb3cpOworCisgICAgICAgICAgICBu
b2RlLnJldHVyblR5cGUgPSB0aGlzLmZsb3dQYXJzZVR5cGUoKTsKKworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAiRnVuY3Rpb25UeXBlQW5ub3RhdGlvbiIpOworICAg
ICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIHR0LnBhcmVuTDoKKyAg
ICAgICAgICB0aGlzLm5leHQoKTsKKworICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlz
IGlzIGFjdHVhbGx5IGEgZ3JvdXBlZCB0eXBlCisgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKHR0
LnBhcmVuUikgJiYgIXRoaXMubWF0Y2godHQuZWxsaXBzaXMpKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5tYXRjaCh0dC5uYW1lKSkgeworICAgICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMu
bG9va2FoZWFkKCkudHlwZTsKKyAgICAgICAgICAgICAgaXNHcm91cGVkVHlwZSA9IHRva2VuICE9
PSB0dC5xdWVzdGlvbiAmJiB0b2tlbiAhPT0gdHQuY29sb247CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICBpc0dyb3VwZWRUeXBlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICB9CisKKyAgICAgICAgICBpZiAoaXNHcm91cGVkVHlwZSkgeworICAgICAgICAgICAg
dGhpcy5zdGF0ZS5ub0Fub25GdW5jdGlvblR5cGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHR5cGUg
PSB0aGlzLmZsb3dQYXJzZVR5cGUoKTsKKyAgICAgICAgICAgIHRoaXMuc3RhdGUubm9Bbm9uRnVu
Y3Rpb25UeXBlID0gb2xkTm9Bbm9uRnVuY3Rpb25UeXBlOworCisgICAgICAgICAgICAvLyBBIGAs
YCBvciBhIGApID0+YCBtZWFucyB0aGlzIGlzIGFuIGFub255bW91cyBmdW5jdGlvbiB0eXBlCisg
ICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5ub0Fub25GdW5jdGlvblR5cGUgfHwKKyAgICAgICAg
ICAgICAgICAhKHRoaXMubWF0Y2godHQuY29tbWEpIHx8CisgICAgICAgICAgICAgICAgICh0aGlz
Lm1hdGNoKHR0LnBhcmVuUikgJiYgdGhpcy5sb29rYWhlYWQoKS50eXBlID09PSB0dC5hcnJvdykp
KSB7CisgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KHR0LnBhcmVuUik7CisgICAgICAgICAgICAg
IHJldHVybiB0eXBlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgLy8gRWF0
IGEgY29tbWEgaWYgdGhlcmUgaXMgb25lCisgICAgICAgICAgICAgIHRoaXMuZWF0KHR0LmNvbW1h
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAodHlwZSkgewor
ICAgICAgICAgICAgdG1wID0gdGhpcy5mbG93UGFyc2VGdW5jdGlvblR5cGVQYXJhbXMoCisgICAg
ICAgICAgICAgIFt0aGlzLnJlaW50ZXJwcmV0VHlwZUFzRnVuY3Rpb25UeXBlUGFyYW0odHlwZSld
LAorICAgICAgICAgICAgKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdG1wID0g
dGhpcy5mbG93UGFyc2VGdW5jdGlvblR5cGVQYXJhbXMoKTsKKyAgICAgICAgICB9CisKKyAgICAg
ICAgICBub2RlLnBhcmFtcyA9IHRtcC5wYXJhbXM7CisgICAgICAgICAgbm9kZS5yZXN0ID0gdG1w
LnJlc3Q7CisKKyAgICAgICAgICB0aGlzLmV4cGVjdCh0dC5wYXJlblIpOworCisgICAgICAgICAg
dGhpcy5leHBlY3QodHQuYXJyb3cpOworCisgICAgICAgICAgbm9kZS5yZXR1cm5UeXBlID0gdGhp
cy5mbG93UGFyc2VUeXBlKCk7CisKKyAgICAgICAgICBub2RlLnR5cGVQYXJhbWV0ZXJzID0gbnVs
bDsKKworICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIkZ1bmN0aW9uVHlw
ZUFubm90YXRpb24iKTsKKworICAgICAgICBjYXNlIHR0LnN0cmluZzoKKyAgICAgICAgICByZXR1
cm4gdGhpcy5wYXJzZUxpdGVyYWwodGhpcy5zdGF0ZS52YWx1ZSwgIlN0cmluZ0xpdGVyYWxUeXBl
QW5ub3RhdGlvbiIpOworCisgICAgICAgIGNhc2UgdHQuX3RydWU6IGNhc2UgdHQuX2ZhbHNlOgor
ICAgICAgICAgIG5vZGUudmFsdWUgPSB0aGlzLm1hdGNoKHR0Ll90cnVlKTsKKyAgICAgICAgICB0
aGlzLm5leHQoKTsKKyAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJCb29s
ZWFuTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIik7CisKKyAgICAgICAgY2FzZSB0dC5wbHVzTWluOgor
ICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnZhbHVlID09PSAiLSIpIHsKKyAgICAgICAgICAgIHRo
aXMubmV4dCgpOworICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKHR0Lm51bSkpIHRoaXMudW5l
eHBlY3RlZChudWxsLCAiVW5leHBlY3RlZCB0b2tlbiwgZXhwZWN0ZWQgbnVtYmVyIik7CisKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlTGl0ZXJhbCgtdGhpcy5zdGF0ZS52YWx1ZSwgIk51
bWJlckxpdGVyYWxUeXBlQW5ub3RhdGlvbiIsIG5vZGUuc3RhcnQsIG5vZGUubG9jLnN0YXJ0KTsK
KyAgICAgICAgICB9CisKKyAgICAgICAgICB0aGlzLnVuZXhwZWN0ZWQoKTsKKyAgICAgICAgY2Fz
ZSB0dC5udW06CisgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VMaXRlcmFsKHRoaXMuc3RhdGUu
dmFsdWUsICJOdW1iZXJMaXRlcmFsVHlwZUFubm90YXRpb24iKTsKKworICAgICAgICBjYXNlIHR0
Ll9udWxsOgorICAgICAgICAgIG5vZGUudmFsdWUgPSB0aGlzLm1hdGNoKHR0Ll9udWxsKTsKKyAg
ICAgICAgICB0aGlzLm5leHQoKTsKKyAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5v
ZGUsICJOdWxsTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIik7CisKKyAgICAgICAgY2FzZSB0dC5fdGhp
czoKKyAgICAgICAgICBub2RlLnZhbHVlID0gdGhpcy5tYXRjaCh0dC5fdGhpcyk7CisgICAgICAg
ICAgdGhpcy5uZXh0KCk7CisgICAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAi
VGhpc1R5cGVBbm5vdGF0aW9uIik7CisKKyAgICAgICAgY2FzZSB0dC5zdGFyOgorICAgICAgICAg
IHRoaXMubmV4dCgpOworICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIkV4
aXN0c1R5cGVBbm5vdGF0aW9uIik7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBpZiAo
dGhpcy5zdGF0ZS50eXBlLmtleXdvcmQgPT09ICJ0eXBlb2YiKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5mbG93UGFyc2VUeXBlb2ZUeXBlKCk7CisgICAgICAgICAgfQorICAgICAgfQorCisg
ICAgICB0aGlzLnVuZXhwZWN0ZWQoKTsKKyAgICB9OworCisgICAgcHAuZmxvd1BhcnNlUG9zdGZp
eFR5cGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCBzdGFydFBvcyA9IHRoaXMuc3RhdGUu
c3RhcnQsIHN0YXJ0TG9jID0gdGhpcy5zdGF0ZS5zdGFydExvYzsKKyAgICAgIGxldCB0eXBlID0g
dGhpcy5mbG93UGFyc2VQcmltYXJ5VHlwZSgpOworICAgICAgd2hpbGUgKCF0aGlzLmNhbkluc2Vy
dFNlbWljb2xvbigpICYmIHRoaXMubWF0Y2godHQuYnJhY2tldEwpKSB7CisgICAgICAgIGNvbnN0
IG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7CisgICAgICAgIG5v
ZGUuZWxlbWVudFR5cGUgPSB0eXBlOworICAgICAgICB0aGlzLmV4cGVjdCh0dC5icmFja2V0TCk7
CisgICAgICAgIHRoaXMuZXhwZWN0KHR0LmJyYWNrZXRSKTsKKyAgICAgICAgdHlwZSA9IHRoaXMu
ZmluaXNoTm9kZShub2RlLCAiQXJyYXlUeXBlQW5ub3RhdGlvbiIpOworICAgICAgfQorICAgICAg
cmV0dXJuIHR5cGU7CisgICAgfTsKKworICAgIHBwLmZsb3dQYXJzZVByZWZpeFR5cGUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICBjb25zdCBub2RlID0gdGhpcy5zdGFydE5vZGUoKTsKKyAgICAgIGlm
ICh0aGlzLmVhdCh0dC5xdWVzdGlvbikpIHsKKyAgICAgICAgbm9kZS50eXBlQW5ub3RhdGlvbiA9
IHRoaXMuZmxvd1BhcnNlUHJlZml4VHlwZSgpOworICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hO
b2RlKG5vZGUsICJOdWxsYWJsZVR5cGVBbm5vdGF0aW9uIik7CisgICAgICB9IGVsc2UgeworICAg
ICAgICByZXR1cm4gdGhpcy5mbG93UGFyc2VQb3N0Zml4VHlwZSgpOworICAgICAgfQorICAgIH07
CisKKyAgICBwcC5mbG93UGFyc2VBbm9uRnVuY3Rpb25XaXRob3V0UGFyZW5zID0gZnVuY3Rpb24g
KCkgeworICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLmZsb3dQYXJzZVByZWZpeFR5cGUoKTsKKyAg
ICAgIGlmICghdGhpcy5zdGF0ZS5ub0Fub25GdW5jdGlvblR5cGUgJiYgdGhpcy5lYXQodHQuYXJy
b3cpKSB7CisgICAgICAgIGNvbnN0IG5vZGUgID0gdGhpcy5zdGFydE5vZGVBdChwYXJhbS5zdGFy
dCwgcGFyYW0ubG9jKTsKKyAgICAgICAgbm9kZS5wYXJhbXMgPSBbdGhpcy5yZWludGVycHJldFR5
cGVBc0Z1bmN0aW9uVHlwZVBhcmFtKHBhcmFtKV07CisgICAgICAgIG5vZGUucmVzdCA9IG51bGw7
CisgICAgICAgIG5vZGUucmV0dXJuVHlwZSA9IHRoaXMuZmxvd1BhcnNlVHlwZSgpOworICAgICAg
ICBub2RlLnR5cGVQYXJhbWV0ZXJzID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNo
Tm9kZShub2RlLCAiRnVuY3Rpb25UeXBlQW5ub3RhdGlvbiIpOworICAgICAgfQorICAgICAgcmV0
dXJuIHBhcmFtOworICAgIH07CisKKyAgICBwcC5mbG93UGFyc2VJbnRlcnNlY3Rpb25UeXBlID0g
ZnVuY3Rpb24gKCkgeworICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7CisgICAg
ICB0aGlzLmVhdCh0dC5iaXR3aXNlQU5EKTsKKyAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZsb3dQ
YXJzZUFub25GdW5jdGlvbldpdGhvdXRQYXJlbnMoKTsKKyAgICAgIG5vZGUudHlwZXMgPSBbdHlw
ZV07CisgICAgICB3aGlsZSAodGhpcy5lYXQodHQuYml0d2lzZUFORCkpIHsKKyAgICAgICAgbm9k
ZS50eXBlcy5wdXNoKHRoaXMuZmxvd1BhcnNlQW5vbkZ1bmN0aW9uV2l0aG91dFBhcmVucygpKTsK
KyAgICAgIH0KKyAgICAgIHJldHVybiBub2RlLnR5cGVzLmxlbmd0aCA9PT0gMSA/IHR5cGUgOiB0
aGlzLmZpbmlzaE5vZGUobm9kZSwgIkludGVyc2VjdGlvblR5cGVBbm5vdGF0aW9uIik7CisgICAg
fTsKKworICAgIHBwLmZsb3dQYXJzZVVuaW9uVHlwZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgIGNv
bnN0IG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpOworICAgICAgdGhpcy5lYXQodHQuYml0d2lzZU9S
KTsKKyAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZsb3dQYXJzZUludGVyc2VjdGlvblR5cGUoKTsK
KyAgICAgIG5vZGUudHlwZXMgPSBbdHlwZV07CisgICAgICB3aGlsZSAodGhpcy5lYXQodHQuYml0
d2lzZU9SKSkgeworICAgICAgICBub2RlLnR5cGVzLnB1c2godGhpcy5mbG93UGFyc2VJbnRlcnNl
Y3Rpb25UeXBlKCkpOworICAgICAgfQorICAgICAgcmV0dXJuIG5vZGUudHlwZXMubGVuZ3RoID09
PSAxID8gdHlwZSA6IHRoaXMuZmluaXNoTm9kZShub2RlLCAiVW5pb25UeXBlQW5ub3RhdGlvbiIp
OworICAgIH07CisKKyAgICBwcC5mbG93UGFyc2VUeXBlID0gZnVuY3Rpb24gKCkgeworICAgICAg
Y29uc3Qgb2xkSW5UeXBlID0gdGhpcy5zdGF0ZS5pblR5cGU7CisgICAgICB0aGlzLnN0YXRlLmlu
VHlwZSA9IHRydWU7CisgICAgICBjb25zdCB0eXBlID0gdGhpcy5mbG93UGFyc2VVbmlvblR5cGUo
KTsKKyAgICAgIHRoaXMuc3RhdGUuaW5UeXBlID0gb2xkSW5UeXBlOworICAgICAgcmV0dXJuIHR5
cGU7CisgICAgfTsKKworICAgIHBwLmZsb3dQYXJzZVR5cGVBbm5vdGF0aW9uID0gZnVuY3Rpb24g
KCkgeworICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7CisgICAgICBub2RlLnR5
cGVBbm5vdGF0aW9uID0gdGhpcy5mbG93UGFyc2VUeXBlSW5pdGlhbGlzZXIoKTsKKyAgICAgIHJl
dHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIlR5cGVBbm5vdGF0aW9uIik7CisgICAgfTsKKwor
ICAgIHBwLmZsb3dQYXJzZVR5cGVBbmRQcmVkaWNhdGVBbm5vdGF0aW9uID0gZnVuY3Rpb24gKCkg
eworICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7CisgICAgICBbbm9kZS50eXBl
QW5ub3RhdGlvbiwgbm9kZS5wcmVkaWNhdGVdID0gdGhpcy5mbG93UGFyc2VUeXBlQW5kUHJlZGlj
YXRlSW5pdGlhbGlzZXIoKTsKKyAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIlR5
cGVBbm5vdGF0aW9uIik7CisgICAgfTsKKworICAgIHBwLmZsb3dQYXJzZVR5cGVBbm5vdGF0YWJs
ZUlkZW50aWZpZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCBpZGVudCA9IHRoaXMuZmxv
d1BhcnNlUmVzdHJpY3RlZElkZW50aWZpZXIoKTsKKyAgICAgIGlmICh0aGlzLm1hdGNoKHR0LmNv
bG9uKSkgeworICAgICAgICBpZGVudC50eXBlQW5ub3RhdGlvbiA9IHRoaXMuZmxvd1BhcnNlVHlw
ZUFubm90YXRpb24oKTsKKyAgICAgICAgdGhpcy5maW5pc2hOb2RlKGlkZW50LCBpZGVudC50eXBl
KTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBpZGVudDsKKyAgICB9OworCisgICAgcHAudHlwZUNh
c3RUb1BhcmFtZXRlciA9IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICBub2RlLmV4cHJlc3Npb24u
dHlwZUFubm90YXRpb24gPSBub2RlLnR5cGVBbm5vdGF0aW9uOworCisgICAgICByZXR1cm4gdGhp
cy5maW5pc2hOb2RlQXQoCisgICAgICAgIG5vZGUuZXhwcmVzc2lvbiwKKyAgICAgICAgbm9kZS5l
eHByZXNzaW9uLnR5cGUsCisgICAgICAgIG5vZGUudHlwZUFubm90YXRpb24uZW5kLAorICAgICAg
ICBub2RlLnR5cGVBbm5vdGF0aW9uLmxvYy5lbmQKKyAgICAgICk7CisgICAgfTsKKworICAgIHBw
LmZsb3dQYXJzZVZhcmlhbmNlID0gZnVuY3Rpb24oKSB7CisgICAgICBsZXQgdmFyaWFuY2UgPSBu
dWxsOworICAgICAgaWYgKHRoaXMubWF0Y2godHQucGx1c01pbikpIHsKKyAgICAgICAgdmFyaWFu
Y2UgPSB0aGlzLnN0YXJ0Tm9kZSgpOworICAgICAgICBpZiAodGhpcy5zdGF0ZS52YWx1ZSA9PT0g
IisiKSB7CisgICAgICAgICAgdmFyaWFuY2Uua2luZCA9ICJwbHVzIjsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICB2YXJpYW5jZS5raW5kID0gIm1pbnVzIjsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLm5leHQoKTsKKyAgICAgICAgdGhpcy5maW5pc2hOb2RlKHZhcmlhbmNlLCAiVmFyaWFu
Y2UiKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB2YXJpYW5jZTsKKyAgICB9OworCisgICAgLy9l
eHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoaW5zdGFuY2UpIHsKKyAgICBwbHVnaW5zRmxvd0pTID0g
ZnVuY3Rpb24gKGluc3RhbmNlKSB7CisgICAgICAvLyBwbGFpbiBmdW5jdGlvbiByZXR1cm4gdHlw
ZXM6IGZ1bmN0aW9uIG5hbWUoKTogc3RyaW5nIHt9CisgICAgICBpbnN0YW5jZS5leHRlbmQoInBh
cnNlRnVuY3Rpb25Cb2R5IiwgZnVuY3Rpb24gKGlubmVyKSB7CisgICAgICAgIHJldHVybiBmdW5j
dGlvbiAobm9kZSwgYWxsb3dFeHByZXNzaW9uKSB7CisgICAgICAgICAgaWYgKHRoaXMubWF0Y2go
dHQuY29sb24pICYmICFhbGxvd0V4cHJlc3Npb24pIHsKKyAgICAgICAgICAgIC8vIGlmIGFsbG93
RXhwcmVzc2lvbiBpcyB0cnVlIHRoZW4gd2UncmUgcGFyc2luZyBhbiBhcnJvdyBmdW5jdGlvbiBh
bmQgaWYKKyAgICAgICAgICAgIC8vIHRoZXJlJ3MgYSByZXR1cm4gdHlwZSB0aGVuIGl0J3MgYmVl
biBoYW5kbGVkIGVsc2V3aGVyZQorICAgICAgICAgICAgbm9kZS5yZXR1cm5UeXBlID0gdGhpcy5m
bG93UGFyc2VUeXBlQW5kUHJlZGljYXRlQW5ub3RhdGlvbigpOworICAgICAgICAgIH0KKworICAg
ICAgICAgIHJldHVybiBpbm5lci5jYWxsKHRoaXMsIG5vZGUsIGFsbG93RXhwcmVzc2lvbik7Cisg
ICAgICAgIH07CisgICAgICB9KTsKKworICAgICAgLy8gaW50ZXJmYWNlcworICAgICAgaW5zdGFu
Y2UuZXh0ZW5kKCJwYXJzZVN0YXRlbWVudCIsIGZ1bmN0aW9uIChpbm5lcikgeworICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24gKGRlY2xhcmF0aW9uLCB0b3BMZXZlbCkgeworICAgICAgICAgIC8vIHN0
cmljdCBtb2RlIGhhbmRsaW5nIG9mIGBpbnRlcmZhY2VgIHNpbmNlIGl0J3MgYSByZXNlcnZlZCB3
b3JkCisgICAgICAgICAgaWYgKHRoaXMuc3RhdGUuc3RyaWN0ICYmIHRoaXMubWF0Y2godHQubmFt
ZSkgJiYgdGhpcy5zdGF0ZS52YWx1ZSA9PT0gImludGVyZmFjZSIpIHsKKyAgICAgICAgICAgIGNv
bnN0IG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpOworICAgICAgICAgICAgdGhpcy5uZXh0KCk7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5mbG93UGFyc2VJbnRlcmZhY2Uobm9kZSk7CisgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBpbm5lci5jYWxsKHRoaXMsIGRlY2xhcmF0
aW9uLCB0b3BMZXZlbCk7CisgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgfSk7CisKKyAg
ICAgIC8vIGRlY2xhcmVzLCBpbnRlcmZhY2VzIGFuZCB0eXBlIGFsaWFzZXMKKyAgICAgIGluc3Rh
bmNlLmV4dGVuZCgicGFyc2VFeHByZXNzaW9uU3RhdGVtZW50IiwgZnVuY3Rpb24gKGlubmVyKSB7
CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAobm9kZSwgZXhwcikgeworICAgICAgICAgIGlmIChl
eHByLnR5cGUgPT09ICJJZGVudGlmaWVyIikgeworICAgICAgICAgICAgaWYgKGV4cHIubmFtZSA9
PT0gImRlY2xhcmUiKSB7CisgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKHR0Ll9jbGFzcykg
fHwgdGhpcy5tYXRjaCh0dC5uYW1lKSB8fCB0aGlzLm1hdGNoKHR0Ll9mdW5jdGlvbikgfHwgdGhp
cy5tYXRjaCh0dC5fdmFyKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZsb3dQYXJz
ZURlY2xhcmUobm9kZSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
dGhpcy5tYXRjaCh0dC5uYW1lKSkgeworICAgICAgICAgICAgICBpZiAoZXhwci5uYW1lID09PSAi
aW50ZXJmYWNlIikgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZsb3dQYXJzZUludGVy
ZmFjZShub2RlKTsKKyAgICAgICAgICAgICAgfSBlbHNlIGlmIChleHByLm5hbWUgPT09ICJ0eXBl
IikgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZsb3dQYXJzZVR5cGVBbGlhcyhub2Rl
KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAg
ICAgIHJldHVybiBpbm5lci5jYWxsKHRoaXMsIG5vZGUsIGV4cHIpOworICAgICAgICB9OworICAg
ICAgfSk7CisKKyAgICAgIC8vIGV4cG9ydCB0eXBlCisgICAgICBpbnN0YW5jZS5leHRlbmQoInNo
b3VsZFBhcnNlRXhwb3J0RGVjbGFyYXRpb24iLCBmdW5jdGlvbiAoaW5uZXIpIHsKKyAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICByZXR1cm4gdGhpcy5pc0NvbnRleHR1YWwo
InR5cGUiKQorICAgICAgICAgICAgICB8fCB0aGlzLmlzQ29udGV4dHVhbCgiaW50ZXJmYWNlIikK
KyAgICAgICAgICAgICAgfHwgaW5uZXIuY2FsbCh0aGlzKTsKKyAgICAgICAgfTsKKyAgICAgIH0p
OworCisgICAgICBpbnN0YW5jZS5leHRlbmQoInBhcnNlQ29uZGl0aW9uYWwiLCBmdW5jdGlvbiAo
aW5uZXIpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChleHByLCBub0luLCBzdGFydFBvcywg
c3RhcnRMb2MsIHJlZk5lZWRzQXJyb3dQb3MpIHsKKyAgICAgICAgICAvLyBvbmx5IGRvIHRoZSBl
eHBlbnNpdmUgY2xvbmUgaWYgdGhlcmUgaXMgYSBxdWVzdGlvbiBtYXJrCisgICAgICAgICAgLy8g
YW5kIGlmIHdlIGNvbWUgZnJvbSBpbnNpZGUgcGFyZW5zCisgICAgICAgICAgaWYgKHJlZk5lZWRz
QXJyb3dQb3MgJiYgdGhpcy5tYXRjaCh0dC5xdWVzdGlvbikpIHsKKyAgICAgICAgICAgIGNvbnN0
IHN0YXRlID0gdGhpcy5zdGF0ZS5jbG9uZSgpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgICAgcmV0dXJuIGlubmVyLmNhbGwodGhpcywgZXhwciwgbm9Jbiwgc3RhcnRQb3MsIHN0YXJ0
TG9jKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICAgICAgICBpZiAoZXJy
IGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0g
c3RhdGU7CisgICAgICAgICAgICAgICAgcmVmTmVlZHNBcnJvd1Bvcy5zdGFydCA9IGVyci5wb3Mg
fHwgdGhpcy5zdGF0ZS5zdGFydDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4
dDogbm8gc3VjaCBlcnJvciBpcyBleHBlY3RlZAorICAgICAgICAgICAgICAgIHRocm93IGVycjsK
KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAg
IHJldHVybiBpbm5lci5jYWxsKHRoaXMsIGV4cHIsIG5vSW4sIHN0YXJ0UG9zLCBzdGFydExvYyk7
CisgICAgICAgIH07CisgICAgICB9KTsKKworICAgICAgaW5zdGFuY2UuZXh0ZW5kKCJwYXJzZVBh
cmVuSXRlbSIsIGZ1bmN0aW9uIChpbm5lcikgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5v
ZGUsIHN0YXJ0UG9zLCBzdGFydExvYykgeworICAgICAgICAgIG5vZGUgPSBpbm5lci5jYWxsKHRo
aXMsIG5vZGUsIHN0YXJ0UG9zLCBzdGFydExvYyk7CisgICAgICAgICAgaWYgKHRoaXMuZWF0KHR0
LnF1ZXN0aW9uKSkgeworICAgICAgICAgICAgbm9kZS5vcHRpb25hbCA9IHRydWU7CisgICAgICAg
ICAgfQorCisgICAgICAgICAgaWYgKHRoaXMubWF0Y2godHQuY29sb24pKSB7CisgICAgICAgICAg
ICBjb25zdCB0eXBlQ2FzdE5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExv
Yyk7CisgICAgICAgICAgICB0eXBlQ2FzdE5vZGUuZXhwcmVzc2lvbiA9IG5vZGU7CisgICAgICAg
ICAgICB0eXBlQ2FzdE5vZGUudHlwZUFubm90YXRpb24gPSB0aGlzLmZsb3dQYXJzZVR5cGVBbm5v
dGF0aW9uKCk7CisKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUodHlwZUNhc3RO
b2RlLCAiVHlwZUNhc3RFeHByZXNzaW9uIik7CisgICAgICAgICAgfQorCisgICAgICAgICAgcmV0
dXJuIG5vZGU7CisgICAgICAgIH07CisgICAgICB9KTsKKworICAgICAgaW5zdGFuY2UuZXh0ZW5k
KCJwYXJzZUV4cG9ydCIsIGZ1bmN0aW9uIChpbm5lcikgeworICAgICAgICByZXR1cm4gZnVuY3Rp
b24gKG5vZGUpIHsKKyAgICAgICAgICBub2RlID0gaW5uZXIuY2FsbCh0aGlzLCBub2RlKTsKKyAg
ICAgICAgICBpZiAobm9kZS50eXBlID09PSAiRXhwb3J0TmFtZWREZWNsYXJhdGlvbiIpIHsKKyAg
ICAgICAgICAgIG5vZGUuZXhwb3J0S2luZCA9IG5vZGUuZXhwb3J0S2luZCB8fCAidmFsdWUiOwor
ICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfTsKKyAgICAgIH0p
OworCisgICAgICBpbnN0YW5jZS5leHRlbmQoInBhcnNlRXhwb3J0RGVjbGFyYXRpb24iLCBmdW5j
dGlvbiAoaW5uZXIpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAg
ICAgaWYgKHRoaXMuaXNDb250ZXh0dWFsKCJ0eXBlIikpIHsKKyAgICAgICAgICAgIG5vZGUuZXhw
b3J0S2luZCA9ICJ0eXBlIjsKKworICAgICAgICAgICAgY29uc3QgZGVjbGFyYXRpb25Ob2RlID0g
dGhpcy5zdGFydE5vZGUoKTsKKyAgICAgICAgICAgIHRoaXMubmV4dCgpOworCisgICAgICAgICAg
ICBpZiAodGhpcy5tYXRjaCh0dC5icmFjZUwpKSB7CisgICAgICAgICAgICAgIC8vIGV4cG9ydCB0
eXBlIHsgZm9vLCBiYXIgfTsKKyAgICAgICAgICAgICAgbm9kZS5zcGVjaWZpZXJzID0gdGhpcy5w
YXJzZUV4cG9ydFNwZWNpZmllcnMoKTsKKyAgICAgICAgICAgICAgdGhpcy5wYXJzZUV4cG9ydEZy
b20obm9kZSk7CisgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgLy8gZXhwb3J0IHR5cGUgRm9vID0gQmFyOworICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5mbG93UGFyc2VUeXBlQWxpYXMoZGVjbGFyYXRpb25Ob2RlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb250ZXh0dWFsKCJpbnRlcmZh
Y2UiKSkgeworICAgICAgICAgICAgbm9kZS5leHBvcnRLaW5kID0gInR5cGUiOworICAgICAgICAg
ICAgY29uc3QgZGVjbGFyYXRpb25Ob2RlID0gdGhpcy5zdGFydE5vZGUoKTsKKyAgICAgICAgICAg
IHRoaXMubmV4dCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmxvd1BhcnNlSW50ZXJmYWNl
KGRlY2xhcmF0aW9uTm9kZSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVy
biBpbm5lci5jYWxsKHRoaXMsIG5vZGUpOworICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAg
IH0pOworCisgICAgICBpbnN0YW5jZS5leHRlbmQoInBhcnNlQ2xhc3NJZCIsIGZ1bmN0aW9uIChp
bm5lcikgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICBpbm5l
ci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICAgIGlmICh0aGlzLmlzUmVsYXRpb25h
bCgiPCIpKSB7CisgICAgICAgICAgICBub2RlLnR5cGVQYXJhbWV0ZXJzID0gdGhpcy5mbG93UGFy
c2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTsKKyAgICAgICAgICB9CisgICAgICAgIH07Cisg
ICAgICB9KTsKKworICAgICAgLy8gZG9uJ3QgY29uc2lkZXIgYHZvaWRgIHRvIGJlIGEga2V5d29y
ZCBhcyB0aGVuIGl0J2xsIHVzZSB0aGUgdm9pZCB0b2tlbiB0eXBlCisgICAgICAvLyBhbmQgc2V0
IHN0YXJ0RXhwcgorICAgICAgaW5zdGFuY2UuZXh0ZW5kKCJpc0tleXdvcmQiLCBmdW5jdGlvbiAo
aW5uZXIpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgICAgaWYg
KHRoaXMuc3RhdGUuaW5UeXBlICYmIG5hbWUgPT09ICJ2b2lkIikgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gaW5uZXIu
Y2FsbCh0aGlzLCBuYW1lKTsKKyAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICB9KTsKKwor
ICAgICAgLy8gZW5zdXJlIHRoYXQgaW5zaWRlIGZsb3cgdHlwZXMsIHdlIGJ5cGFzcyB0aGUganN4
IHBhcnNlciBwbHVnaW4KKyAgICAgIGluc3RhbmNlLmV4dGVuZCgicmVhZFRva2VuIiwgZnVuY3Rp
b24gKGlubmVyKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAoY29kZSkgeworICAgICAgICAg
IGlmICh0aGlzLnN0YXRlLmluVHlwZSAmJiAoY29kZSA9PT0gNjIgfHwgY29kZSA9PT0gNjApKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hPcCh0dC5yZWxhdGlvbmFsLCAxKTsKKyAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGlubmVyLmNhbGwodGhpcywgY29k
ZSk7CisgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgfSk7CisKKyAgICAgIC8vIGRvbid0
IGxleCBhbnkgdG9rZW4gYXMgYSBqc3ggb25lIGluc2lkZSBhIGZsb3cgdHlwZQorICAgICAgaW5z
dGFuY2UuZXh0ZW5kKCJqc3hfcmVhZFRva2VuIiwgZnVuY3Rpb24gKGlubmVyKSB7CisgICAgICAg
IHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmluVHlwZSkg
cmV0dXJuIGlubmVyLmNhbGwodGhpcyk7CisgICAgICAgIH07CisgICAgICB9KTsKKworICAgICAg
aW5zdGFuY2UuZXh0ZW5kKCJ0b0Fzc2lnbmFibGUiLCBmdW5jdGlvbiAoaW5uZXIpIHsKKyAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uIChub2RlLCBpc0JpbmRpbmcsIGNvbnRleHREZXNjcmlwdGlvbikg
eworICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09ICJUeXBlQ2FzdEV4cHJlc3Npb24iKSB7Cisg
ICAgICAgICAgICByZXR1cm4gaW5uZXIuY2FsbCh0aGlzLCB0aGlzLnR5cGVDYXN0VG9QYXJhbWV0
ZXIobm9kZSksIGlzQmluZGluZywgY29udGV4dERlc2NyaXB0aW9uKTsKKyAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgcmV0dXJuIGlubmVyLmNhbGwodGhpcywgbm9kZSwgaXNCaW5kaW5n
LCBjb250ZXh0RGVzY3JpcHRpb24pOworICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgIH0p
OworCisgICAgICAvLyB0dXJuIHR5cGUgY2FzdHMgdGhhdCB3ZSBmb3VuZCBpbiBmdW5jdGlvbiBw
YXJhbWV0ZXIgaGVhZCBpbnRvIHR5cGUgYW5ub3RhdGVkIHBhcmFtcworICAgICAgaW5zdGFuY2Uu
ZXh0ZW5kKCJ0b0Fzc2lnbmFibGVMaXN0IiwgZnVuY3Rpb24gKGlubmVyKSB7CisgICAgICAgIHJl
dHVybiBmdW5jdGlvbiAoZXhwckxpc3QsIGlzQmluZGluZywgY29udGV4dERlc2NyaXB0aW9uKSB7
CisgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHByTGlzdC5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgY29uc3QgZXhwciA9IGV4cHJMaXN0W2ldOworICAgICAgICAgICAgaWYgKGV4
cHIgJiYgZXhwci50eXBlID09PSAiVHlwZUNhc3RFeHByZXNzaW9uIikgeworICAgICAgICAgICAg
ICBleHByTGlzdFtpXSA9IHRoaXMudHlwZUNhc3RUb1BhcmFtZXRlcihleHByKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIGlubmVyLmNhbGwodGhpcywgZXhw
ckxpc3QsIGlzQmluZGluZywgY29udGV4dERlc2NyaXB0aW9uKTsKKyAgICAgICAgfTsKKyAgICAg
IH0pOworCisgICAgICAvLyB0aGlzIGlzIGEgbGlzdCBvZiBub2RlcywgZnJvbSBzb21ldGhpbmcg
bGlrZSBhIGNhbGwgZXhwcmVzc2lvbiwgd2UgbmVlZCB0byBmaWx0ZXIgdGhlCisgICAgICAvLyB0
eXBlIGNhc3RzIHRoYXQgd2UndmUgZm91bmQgdGhhdCBhcmUgaWxsZWdhbCBpbiB0aGlzIGNvbnRl
eHQKKyAgICAgIGluc3RhbmNlLmV4dGVuZCgidG9SZWZlcmVuY2VkTGlzdCIsIGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChleHByTGlzdCkgeworICAgICAgICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgZXhwckxpc3QubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGNvbnN0
IGV4cHIgPSBleHByTGlzdFtpXTsKKyAgICAgICAgICAgIGlmIChleHByICYmIGV4cHIuX2V4cHJM
aXN0SXRlbSAmJiBleHByLnR5cGUgPT09ICJUeXBlQ2FzdEV4cHJlc3Npb24iKSB7CisgICAgICAg
ICAgICAgIHRoaXMucmFpc2UoZXhwci5zdGFydCwgIlVuZXhwZWN0ZWQgdHlwZSBjYXN0Iik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgcmV0dXJuIGV4cHJMaXN0Owor
ICAgICAgICB9OworICAgICAgfSk7CisKKyAgICAgIC8vIHBhcnNlIGFuIGl0ZW0gaW5zaWRlIGEg
ZXhwcmVzc2lvbiBsaXN0IGVnLiBgKE5PREUsIE5PREUpYCB3aGVyZSBOT0RFIHJlcHJlc2VudHMK
KyAgICAgIC8vIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAorICAg
ICAgaW5zdGFuY2UuZXh0ZW5kKCJwYXJzZUV4cHJMaXN0SXRlbSIsIGZ1bmN0aW9uIChpbm5lcikg
eworICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHsKKyAgICAgICAgICBjb25zdCBj
b250YWluZXIgPSB0aGlzLnN0YXJ0Tm9kZSgpOworICAgICAgICAgIGNvbnN0IG5vZGUgPSBpbm5l
ci5jYWxsKHRoaXMsIC4uLmFyZ3MpOworICAgICAgICAgIGlmICh0aGlzLm1hdGNoKHR0LmNvbG9u
KSkgeworICAgICAgICAgICAgY29udGFpbmVyLl9leHByTGlzdEl0ZW0gPSB0cnVlOworICAgICAg
ICAgICAgY29udGFpbmVyLmV4cHJlc3Npb24gPSBub2RlOworICAgICAgICAgICAgY29udGFpbmVy
LnR5cGVBbm5vdGF0aW9uID0gdGhpcy5mbG93UGFyc2VUeXBlQW5ub3RhdGlvbigpOworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShjb250YWluZXIsICJUeXBlQ2FzdEV4cHJlc3Np
b24iKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAg
ICAgICAgfQorICAgICAgICB9OworICAgICAgfSk7CisKKyAgICAgIGluc3RhbmNlLmV4dGVuZCgi
Y2hlY2tMVmFsIiwgZnVuY3Rpb24gKGlubmVyKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAo
bm9kZSkgeworICAgICAgICAgIGlmIChub2RlLnR5cGUgIT09ICJUeXBlQ2FzdEV4cHJlc3Npb24i
KSB7CisgICAgICAgICAgICByZXR1cm4gaW5uZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAg
ICAgICAgICB9CisgICAgICAgIH07CisgICAgICB9KTsKKworICAgICAgLy8gcGFyc2UgY2xhc3Mg
cHJvcGVydHkgdHlwZSBhbm5vdGF0aW9ucworICAgICAgaW5zdGFuY2UuZXh0ZW5kKCJwYXJzZUNs
YXNzUHJvcGVydHkiLCBmdW5jdGlvbiAoaW5uZXIpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
IChub2RlKSB7CisgICAgICAgICAgaWYgKHRoaXMubWF0Y2godHQuY29sb24pKSB7CisgICAgICAg
ICAgICBub2RlLnR5cGVBbm5vdGF0aW9uID0gdGhpcy5mbG93UGFyc2VUeXBlQW5ub3RhdGlvbigp
OworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gaW5uZXIuY2FsbCh0aGlzLCBub2RlKTsK
KyAgICAgICAgfTsKKyAgICAgIH0pOworCisgICAgICAvLyBkZXRlcm1pbmUgd2hldGhlciBvciBu
b3Qgd2UncmUgY3VycmVudGx5IGluIHRoZSBwb3NpdGlvbiB3aGVyZSBhIGNsYXNzIG1ldGhvZCB3
b3VsZCBhcHBlYXIKKyAgICAgIGluc3RhbmNlLmV4dGVuZCgiaXNDbGFzc01ldGhvZCIsIGZ1bmN0
aW9uIChpbm5lcikgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeworICAgICAgICAgIHJl
dHVybiB0aGlzLmlzUmVsYXRpb25hbCgiPCIpIHx8IGlubmVyLmNhbGwodGhpcyk7CisgICAgICAg
IH07CisgICAgICB9KTsKKworICAgICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlJ3Jl
IGN1cnJlbnRseSBpbiB0aGUgcG9zaXRpb24gd2hlcmUgYSBjbGFzcyBwcm9wZXJ0eSB3b3VsZCBh
cHBlYXIKKyAgICAgIGluc3RhbmNlLmV4dGVuZCgiaXNDbGFzc1Byb3BlcnR5IiwgZnVuY3Rpb24g
KGlubmVyKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgcmV0dXJu
IHRoaXMubWF0Y2godHQuY29sb24pIHx8IGlubmVyLmNhbGwodGhpcyk7CisgICAgICAgIH07Cisg
ICAgICB9KTsKKworICAgICAgLy8gcGFyc2UgdHlwZSBwYXJhbWV0ZXJzIGZvciBjbGFzcyBtZXRo
b2RzCisgICAgICBpbnN0YW5jZS5leHRlbmQoInBhcnNlQ2xhc3NNZXRob2QiLCBmdW5jdGlvbiAo
aW5uZXIpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjbGFzc0JvZHksIG1ldGhvZCwgLi4u
YXJncykgeworICAgICAgICAgIGlmIChtZXRob2QudmFyaWFuY2UpIHsKKyAgICAgICAgICAgIHRo
aXMudW5leHBlY3RlZChtZXRob2QudmFyaWFuY2Uuc3RhcnQpOworICAgICAgICAgIH0KKyAgICAg
ICAgICBkZWxldGUgbWV0aG9kLnZhcmlhbmNlOworICAgICAgICAgIGlmICh0aGlzLmlzUmVsYXRp
b25hbCgiPCIpKSB7CisgICAgICAgICAgICBtZXRob2QudHlwZVBhcmFtZXRlcnMgPSB0aGlzLmZs
b3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbigpOworICAgICAgICAgIH0KKworICAgICAg
ICAgIGlubmVyLmNhbGwodGhpcywgY2xhc3NCb2R5LCBtZXRob2QsIC4uLmFyZ3MpOworICAgICAg
ICB9OworICAgICAgfSk7CisKKyAgICAgIC8vIHBhcnNlIGEgdGhlIHN1cGVyIGNsYXNzIHR5cGUg
cGFyYW1ldGVycyBhbmQgaW1wbGVtZW50cworICAgICAgaW5zdGFuY2UuZXh0ZW5kKCJwYXJzZUNs
YXNzU3VwZXIiLCBmdW5jdGlvbiAoaW5uZXIpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChu
b2RlLCBpc1N0YXRlbWVudCkgeworICAgICAgICAgIGlubmVyLmNhbGwodGhpcywgbm9kZSwgaXNT
dGF0ZW1lbnQpOworICAgICAgICAgIGlmIChub2RlLnN1cGVyQ2xhc3MgJiYgdGhpcy5pc1JlbGF0
aW9uYWwoIjwiKSkgeworICAgICAgICAgICAgbm9kZS5zdXBlclR5cGVQYXJhbWV0ZXJzID0gdGhp
cy5mbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpOworICAgICAgICAgIH0KKyAg
ICAgICAgICBpZiAodGhpcy5pc0NvbnRleHR1YWwoImltcGxlbWVudHMiKSkgeworICAgICAgICAg
ICAgdGhpcy5uZXh0KCk7CisgICAgICAgICAgICBjb25zdCBpbXBsZW1lbnRlZCA9IG5vZGUuaW1w
bGVtZW50cyA9IFtdOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICBjb25zdCBub2Rl
ID0gdGhpcy5zdGFydE5vZGUoKTsKKyAgICAgICAgICAgICAgbm9kZS5pZCA9IHRoaXMucGFyc2VJ
ZGVudGlmaWVyKCk7CisgICAgICAgICAgICAgIGlmICh0aGlzLmlzUmVsYXRpb25hbCgiPCIpKSB7
CisgICAgICAgICAgICAgICAgbm9kZS50eXBlUGFyYW1ldGVycyA9IHRoaXMuZmxvd1BhcnNlVHlw
ZVBhcmFtZXRlckluc3RhbnRpYXRpb24oKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBub2RlLnR5cGVQYXJhbWV0ZXJzID0gbnVsbDsKKyAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICBpbXBsZW1lbnRlZC5wdXNoKHRoaXMuZmluaXNoTm9kZShub2RlLCAiQ2xh
c3NJbXBsZW1lbnRzIikpOworICAgICAgICAgICAgfSB3aGlsZSAodGhpcy5lYXQodHQuY29tbWEp
KTsKKyAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICB9KTsKKworICAgICAgaW5zdGFuY2Uu
ZXh0ZW5kKCJwYXJzZVByb3BlcnR5TmFtZSIsIGZ1bmN0aW9uIChpbm5lcikgeworICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICBjb25zdCB2YXJpYW5jZSA9IHRoaXMu
Zmxvd1BhcnNlVmFyaWFuY2UoKTsKKyAgICAgICAgICBjb25zdCBrZXkgPSBpbm5lci5jYWxsKHRo
aXMsIG5vZGUpOworICAgICAgICAgIG5vZGUudmFyaWFuY2UgPSB2YXJpYW5jZTsKKyAgICAgICAg
ICByZXR1cm4ga2V5OworICAgICAgICB9OworICAgICAgfSk7CisKKyAgICAgIC8vIHBhcnNlIHR5
cGUgcGFyYW1ldGVycyBmb3Igb2JqZWN0IG1ldGhvZCBzaG9ydGhhbmQKKyAgICAgIGluc3RhbmNl
LmV4dGVuZCgicGFyc2VPYmpQcm9wVmFsdWUiLCBmdW5jdGlvbiAoaW5uZXIpIHsKKyAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uIChwcm9wKSB7CisgICAgICAgICAgaWYgKHByb3AudmFyaWFuY2UpIHsK
KyAgICAgICAgICAgIHRoaXMudW5leHBlY3RlZChwcm9wLnZhcmlhbmNlLnN0YXJ0KTsKKyAgICAg
ICAgICB9CisgICAgICAgICAgZGVsZXRlIHByb3AudmFyaWFuY2U7CisKKyAgICAgICAgICBsZXQg
dHlwZVBhcmFtZXRlcnM7CisKKyAgICAgICAgICAvLyBtZXRob2Qgc2hvcnRoYW5kCisgICAgICAg
ICAgaWYgKHRoaXMuaXNSZWxhdGlvbmFsKCI8IikpIHsKKyAgICAgICAgICAgIHR5cGVQYXJhbWV0
ZXJzID0gdGhpcy5mbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTsKKyAgICAgICAg
ICAgIGlmICghdGhpcy5tYXRjaCh0dC5wYXJlbkwpKSB0aGlzLnVuZXhwZWN0ZWQoKTsKKyAgICAg
ICAgICB9CisKKyAgICAgICAgICBpbm5lci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCisgICAg
ICAgICAgLy8gYWRkIHR5cGVQYXJhbWV0ZXJzIGlmIHdlIGZvdW5kIHRoZW0KKyAgICAgICAgICBp
ZiAodHlwZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgICAgIChwcm9wLnZhbHVlIHx8IHByb3ApLnR5
cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnM7CisgICAgICAgICAgfQorICAgICAgICB9Owor
ICAgICAgfSk7CisKKyAgICAgIGluc3RhbmNlLmV4dGVuZCgicGFyc2VBc3NpZ25hYmxlTGlzdEl0
ZW1UeXBlcyIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwYXJhbSkg
eworICAgICAgICAgIGlmICh0aGlzLmVhdCh0dC5xdWVzdGlvbikpIHsKKyAgICAgICAgICAgIHBh
cmFtLm9wdGlvbmFsID0gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHRoaXMubWF0
Y2godHQuY29sb24pKSB7CisgICAgICAgICAgICBwYXJhbS50eXBlQW5ub3RhdGlvbiA9IHRoaXMu
Zmxvd1BhcnNlVHlwZUFubm90YXRpb24oKTsKKyAgICAgICAgICB9CisgICAgICAgICAgdGhpcy5m
aW5pc2hOb2RlKHBhcmFtLCBwYXJhbS50eXBlKTsKKyAgICAgICAgICByZXR1cm4gcGFyYW07Cisg
ICAgICAgIH07CisgICAgICB9KTsKKworICAgICAgaW5zdGFuY2UuZXh0ZW5kKCJwYXJzZU1heWJl
RGVmYXVsdCIsIGZ1bmN0aW9uIChpbm5lcikgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4u
LmFyZ3MpIHsKKyAgICAgICAgICBjb25zdCBub2RlID0gaW5uZXIuYXBwbHkodGhpcywgYXJncyk7
CisKKyAgICAgICAgICBpZiAobm9kZS50eXBlID09PSAiQXNzaWdubWVudFBhdHRlcm4iICYmIG5v
ZGUudHlwZUFubm90YXRpb24gJiYgbm9kZS5yaWdodC5zdGFydCA8IG5vZGUudHlwZUFubm90YXRp
b24uc3RhcnQpIHsKKyAgICAgICAgICAgIHRoaXMucmFpc2Uobm9kZS50eXBlQW5ub3RhdGlvbi5z
dGFydCwgIlR5cGUgYW5ub3RhdGlvbnMgbXVzdCBjb21lIGJlZm9yZSBkZWZhdWx0IGFzc2lnbm1l
bnRzLCBlLmcuIGluc3RlYWQgb2YgYGFnZSA9IDI1OiBudW1iZXJgIHVzZSBgYWdlOiBudW1iZXIg
PSAyNWAiKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAg
fTsKKyAgICAgIH0pOworCisKKyAgICAgIC8vIHBhcnNlIHR5cGVvZiBhbmQgdHlwZSBpbXBvcnRz
CisgICAgICBpbnN0YW5jZS5leHRlbmQoInBhcnNlSW1wb3J0U3BlY2lmaWVycyIsIGZ1bmN0aW9u
IChpbm5lcikgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICBu
b2RlLmltcG9ydEtpbmQgPSAidmFsdWUiOworCisgICAgICAgICAgbGV0IGtpbmQgPSBudWxsOwor
ICAgICAgICAgIGlmICh0aGlzLm1hdGNoKHR0Ll90eXBlb2YpKSB7CisgICAgICAgICAgICBraW5k
ID0gInR5cGVvZiI7CisgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQ29udGV4dHVhbCgidHlw
ZSIpKSB7CisgICAgICAgICAgICBraW5kID0gInR5cGUiOworICAgICAgICAgIH0KKyAgICAgICAg
ICBpZiAoa2luZCkgeworICAgICAgICAgICAgY29uc3QgbGggPSB0aGlzLmxvb2thaGVhZCgpOwor
ICAgICAgICAgICAgaWYgKChsaC50eXBlID09PSB0dC5uYW1lICYmIGxoLnZhbHVlICE9PSAiZnJv
bSIpIHx8IGxoLnR5cGUgPT09IHR0LmJyYWNlTCB8fCBsaC50eXBlID09PSB0dC5zdGFyKSB7Cisg
ICAgICAgICAgICAgIHRoaXMubmV4dCgpOworICAgICAgICAgICAgICBub2RlLmltcG9ydEtpbmQg
PSBraW5kOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGlubmVyLmNh
bGwodGhpcywgbm9kZSk7CisgICAgICAgIH07CisgICAgICB9KTsKKworICAgICAgLy8gcGFyc2Ug
aW1wb3J0LXR5cGUvdHlwZW9mIHNob3J0aGFuZAorICAgICAgaW5zdGFuY2UuZXh0ZW5kKCJwYXJz
ZUltcG9ydFNwZWNpZmllciIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
IChub2RlKSB7CisgICAgICAgICAgY29uc3Qgc3BlY2lmaWVyID0gdGhpcy5zdGFydE5vZGUoKTsK
KyAgICAgICAgICBjb25zdCBmaXJzdElkZW50TG9jID0gdGhpcy5zdGF0ZS5zdGFydDsKKyAgICAg
ICAgICBjb25zdCBmaXJzdElkZW50ID0gdGhpcy5wYXJzZUlkZW50aWZpZXIodHJ1ZSk7CisKKyAg
ICAgICAgICBsZXQgc3BlY2lmaWVyVHlwZUtpbmQgPSBudWxsOworICAgICAgICAgIGlmIChmaXJz
dElkZW50Lm5hbWUgPT09ICJ0eXBlIikgeworICAgICAgICAgICAgc3BlY2lmaWVyVHlwZUtpbmQg
PSAidHlwZSI7CisgICAgICAgICAgfSBlbHNlIGlmIChmaXJzdElkZW50Lm5hbWUgPT09ICJ0eXBl
b2YiKSB7CisgICAgICAgICAgICBzcGVjaWZpZXJUeXBlS2luZCA9ICJ0eXBlb2YiOworICAgICAg
ICAgIH0KKworICAgICAgICAgIGxldCBpc0JpbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgICBpZiAo
dGhpcy5pc0NvbnRleHR1YWwoImFzIikpIHsKKyAgICAgICAgICAgIGNvbnN0IGFzX2lkZW50ID0g
dGhpcy5wYXJzZUlkZW50aWZpZXIodHJ1ZSk7CisgICAgICAgICAgICBpZiAoc3BlY2lmaWVyVHlw
ZUtpbmQgIT09IG51bGwgJiYgIXRoaXMubWF0Y2godHQubmFtZSkgJiYgIXRoaXMuc3RhdGUudHlw
ZS5rZXl3b3JkKSB7CisgICAgICAgICAgICAgIC8vIGBpbXBvcnQge3R5cGUgYXMgLGAgb3IgYGlt
cG9ydCB7dHlwZSBhcyB9YAorICAgICAgICAgICAgICBzcGVjaWZpZXIuaW1wb3J0ZWQgPSBhc19p
ZGVudDsKKyAgICAgICAgICAgICAgc3BlY2lmaWVyLmltcG9ydEtpbmQgPSBzcGVjaWZpZXJUeXBl
S2luZDsKKyAgICAgICAgICAgICAgc3BlY2lmaWVyLmxvY2FsID0gYXNfaWRlbnQuX19jbG9uZSgp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgLy8gYGltcG9ydCB7dHlwZSBh
cyBmb29gCisgICAgICAgICAgICAgIHNwZWNpZmllci5pbXBvcnRlZCA9IGZpcnN0SWRlbnQ7Cisg
ICAgICAgICAgICAgIHNwZWNpZmllci5pbXBvcnRLaW5kID0gbnVsbDsKKyAgICAgICAgICAgICAg
c3BlY2lmaWVyLmxvY2FsID0gdGhpcy5wYXJzZUlkZW50aWZpZXIoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICB9IGVsc2UgaWYgKHNwZWNpZmllclR5cGVLaW5kICE9PSBudWxsICYmICh0aGlz
Lm1hdGNoKHR0Lm5hbWUpIHx8IHRoaXMuc3RhdGUudHlwZS5rZXl3b3JkKSkgeworICAgICAgICAg
ICAgLy8gYGltcG9ydCB7dHlwZSBmb29gCisgICAgICAgICAgICBzcGVjaWZpZXIuaW1wb3J0ZWQg
PSB0aGlzLnBhcnNlSWRlbnRpZmllcih0cnVlKTsKKyAgICAgICAgICAgIHNwZWNpZmllci5pbXBv
cnRLaW5kID0gc3BlY2lmaWVyVHlwZUtpbmQ7CisgICAgICAgICAgICBpZiAodGhpcy5lYXRDb250
ZXh0dWFsKCJhcyIpKSB7CisgICAgICAgICAgICAgIHNwZWNpZmllci5sb2NhbCA9IHRoaXMucGFy
c2VJZGVudGlmaWVyKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBpc0Jp
bmRpbmcgPSB0cnVlOworICAgICAgICAgICAgICBzcGVjaWZpZXIubG9jYWwgPSBzcGVjaWZpZXIu
aW1wb3J0ZWQuX19jbG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBpc0JpbmRpbmcgPSB0cnVlOworICAgICAgICAgICAgc3BlY2lmaWVyLmltcG9y
dGVkID0gZmlyc3RJZGVudDsKKyAgICAgICAgICAgIHNwZWNpZmllci5pbXBvcnRLaW5kID0gbnVs
bDsKKyAgICAgICAgICAgIHNwZWNpZmllci5sb2NhbCA9IHNwZWNpZmllci5pbXBvcnRlZC5fX2Ns
b25lKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKAorICAgICAgICAgICAgKG5vZGUu
aW1wb3J0S2luZCA9PT0gInR5cGUiIHx8IG5vZGUuaW1wb3J0S2luZCA9PT0gInR5cGVvZiIpICYm
CisgICAgICAgICAgICAoc3BlY2lmaWVyLmltcG9ydEtpbmQgPT09ICJ0eXBlIiB8fCBzcGVjaWZp
ZXIuaW1wb3J0S2luZCA9PT0gInR5cGVvZiIpCisgICAgICAgICAgKSB7CisgICAgICAgICAgICB0
aGlzLnJhaXNlKGZpcnN0SWRlbnRMb2MsICJgVGhlIGB0eXBlYCBhbmQgYHR5cGVvZmAga2V5d29y
ZHMgb24gbmFtZWQgaW1wb3J0cyBjYW4gb25seSBiZSB1c2VkIG9uIHJlZ3VsYXIgYGltcG9ydGAg
c3RhdGVtZW50cy4gSXQgY2Fubm90IGJlIHVzZWQgd2l0aCBgaW1wb3J0IHR5cGVgIG9yIGBpbXBv
cnQgdHlwZW9mYCBzdGF0ZW1lbnRzYCIpOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChp
c0JpbmRpbmcpIHRoaXMuY2hlY2tSZXNlcnZlZFdvcmQoc3BlY2lmaWVyLmxvY2FsLm5hbWUsIHNw
ZWNpZmllci5zdGFydCwgdHJ1ZSwgdHJ1ZSk7CisKKyAgICAgICAgICB0aGlzLmNoZWNrTFZhbChz
cGVjaWZpZXIubG9jYWwsIHRydWUsIHVuZGVmaW5lZCwgImltcG9ydCBzcGVjaWZpZXIiKTsKKyAg
ICAgICAgICBub2RlLnNwZWNpZmllcnMucHVzaCh0aGlzLmZpbmlzaE5vZGUoc3BlY2lmaWVyLCAi
SW1wb3J0U3BlY2lmaWVyIikpOworICAgICAgICB9OworICAgICAgfSk7CisKKyAgICAgIC8vIHBh
cnNlIGZ1bmN0aW9uIHR5cGUgcGFyYW1ldGVycyAtIGZ1bmN0aW9uIGZvbzxUPigpIHt9CisgICAg
ICBpbnN0YW5jZS5leHRlbmQoInBhcnNlRnVuY3Rpb25QYXJhbXMiLCBmdW5jdGlvbiAoaW5uZXIp
IHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgaWYgKHRoaXMu
aXNSZWxhdGlvbmFsKCI8IikpIHsKKyAgICAgICAgICAgIG5vZGUudHlwZVBhcmFtZXRlcnMgPSB0
aGlzLmZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbigpOworICAgICAgICAgIH0KKyAg
ICAgICAgICBpbm5lci5jYWxsKHRoaXMsIG5vZGUpOworICAgICAgICB9OworICAgICAgfSk7CisK
KyAgICAgIC8vIHBhcnNlIGZsb3cgdHlwZSBhbm5vdGF0aW9ucyBvbiB2YXJpYWJsZSBkZWNsYXJh
dG9yIGhlYWRzIC0gbGV0IGZvbzogc3RyaW5nID0gYmFyCisgICAgICBpbnN0YW5jZS5leHRlbmQo
InBhcnNlVmFySGVhZCIsIGZ1bmN0aW9uIChpbm5lcikgeworICAgICAgICByZXR1cm4gZnVuY3Rp
b24gKGRlY2wpIHsKKyAgICAgICAgICBpbm5lci5jYWxsKHRoaXMsIGRlY2wpOworICAgICAgICAg
IGlmICh0aGlzLm1hdGNoKHR0LmNvbG9uKSkgeworICAgICAgICAgICAgZGVjbC5pZC50eXBlQW5u
b3RhdGlvbiA9IHRoaXMuZmxvd1BhcnNlVHlwZUFubm90YXRpb24oKTsKKyAgICAgICAgICAgIHRo
aXMuZmluaXNoTm9kZShkZWNsLmlkLCBkZWNsLmlkLnR5cGUpOworICAgICAgICAgIH0KKyAgICAg
ICAgfTsKKyAgICAgIH0pOworCisgICAgICAvLyBwYXJzZSB0aGUgcmV0dXJuIHR5cGUgb2YgYW4g
YXN5bmMgYXJyb3cgZnVuY3Rpb24gLSBsZXQgZm9vID0gKGFzeW5jICgpOiBudW1iZXIgPT4ge30p
OworICAgICAgaW5zdGFuY2UuZXh0ZW5kKCJwYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Np
b24iLCBmdW5jdGlvbiAoaW5uZXIpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChub2RlLCBj
YWxsKSB7CisgICAgICAgICAgaWYgKHRoaXMubWF0Y2godHQuY29sb24pKSB7CisgICAgICAgICAg
ICBjb25zdCBvbGROb0Fub25GdW5jdGlvblR5cGUgPSB0aGlzLnN0YXRlLm5vQW5vbkZ1bmN0aW9u
VHlwZTsKKyAgICAgICAgICAgIHRoaXMuc3RhdGUubm9Bbm9uRnVuY3Rpb25UeXBlID0gdHJ1ZTsK
KyAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZSA9IHRoaXMuZmxvd1BhcnNlVHlwZUFubm90YXRp
b24oKTsKKyAgICAgICAgICAgIHRoaXMuc3RhdGUubm9Bbm9uRnVuY3Rpb25UeXBlID0gb2xkTm9B
bm9uRnVuY3Rpb25UeXBlOworICAgICAgICAgIH0KKworICAgICAgICAgIHJldHVybiBpbm5lci5j
YWxsKHRoaXMsIG5vZGUsIGNhbGwpOworICAgICAgICB9OworICAgICAgfSk7CisKKyAgICAgIC8v
IHRvZG8gZGVzY3JpcHRpb24KKyAgICAgIGluc3RhbmNlLmV4dGVuZCgic2hvdWxkUGFyc2VBc3lu
Y0Fycm93IiwgZnVuY3Rpb24gKGlubmVyKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2godHQuY29sb24pIHx8IGlubmVyLmNhbGwodGhp
cyk7CisgICAgICAgIH07CisgICAgICB9KTsKKworICAgICAgLy8gV2UgbmVlZCB0byBzdXBwb3J0
IHR5cGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9ucyBmb3IgYXJyb3cgZnVuY3Rpb25zLiBUaGlzCisg
ICAgICAvLyBpcyB0cmlja3kuIFRoZXJlIGFyZSB0aHJlZSBzaXR1YXRpb25zIHdlIG5lZWQgdG8g
aGFuZGxlCisgICAgICAvLworICAgICAgLy8gMS4gVGhpcyBpcyBlaXRoZXIgSlNYIG9yIGFuIGFy
cm93IGZ1bmN0aW9uLiBXZSdsbCB0cnkgSlNYIGZpcnN0LiBJZiB0aGF0CisgICAgICAvLyAgICBm
YWlscywgd2UnbGwgdHJ5IGFuIGFycm93IGZ1bmN0aW9uLiBJZiB0aGF0IGZhaWxzLCB3ZSdsbCB0
aHJvdyB0aGUgSlNYCisgICAgICAvLyAgICBlcnJvci4KKyAgICAgIC8vIDIuIFRoaXMgaXMgYW4g
YXJyb3cgZnVuY3Rpb24uIFdlJ2xsIHBhcnNlIHRoZSB0eXBlIHBhcmFtZXRlciBkZWNsYXJhdGlv
biwKKyAgICAgIC8vICAgIHBhcnNlIHRoZSByZXN0LCBtYWtlIHN1cmUgdGhlIHJlc3QgaXMgYW4g
YXJyb3cgZnVuY3Rpb24sIGFuZCBnbyBmcm9tCisgICAgICAvLyAgICB0aGVyZQorICAgICAgLy8g
My4gVGhpcyBpcyBuZWl0aGVyLiBKdXN0IGNhbGwgdGhlIGlubmVyIGZ1bmN0aW9uCisgICAgICBp
bnN0YW5jZS5leHRlbmQoInBhcnNlTWF5YmVBc3NpZ24iLCBmdW5jdGlvbiAoaW5uZXIpIHsKKyAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7CisgICAgICAgICAgbGV0IGpzeEVycm9y
ID0gbnVsbDsKKyAgICAgICAgICBpZiAodHQuanN4VGFnU3RhcnQgJiYgdGhpcy5tYXRjaCh0dC5q
c3hUYWdTdGFydCkpIHsKKyAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZS5jbG9u
ZSgpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgcmV0dXJuIGlubmVyLmFwcGx5
KHRoaXMsIGFyZ3MpOworICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgICAgICAg
IGlmIChlcnIgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikgeworICAgICAgICAgICAgICAgIHRoaXMu
c3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgICAgICAgICBqc3hFcnJvciA9IGVycjsKKyAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dDog
bm8gc3VjaCBlcnJvciBpcyBleHBlY3RlZAorICAgICAgICAgICAgICAgIHRocm93IGVycjsKKyAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGlm
IChqc3hFcnJvciAhPSBudWxsIHx8IHRoaXMuaXNSZWxhdGlvbmFsKCI8IikpIHsKKyAgICAgICAg
ICAgIC8vIE5lZWQgdG8gcHVzaCBzb21ldGhpbmcgb250byB0aGUgY29udGV4dCB0byBzdG9wCisg
ICAgICAgICAgICAvLyB0aGUgSlNYIHBsdWdpbiBmcm9tIG1lc3Npbmcgd2l0aCB0aGUgdG9rZW5z
CisgICAgICAgICAgICB0aGlzLnN0YXRlLmNvbnRleHQucHVzaChjdC5wYXJlbkV4cHJlc3Npb24p
OworICAgICAgICAgICAgbGV0IGFycm93RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIGxldCB0eXBl
UGFyYW1ldGVyczsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIHR5cGVQYXJhbWV0
ZXJzID0gdGhpcy5mbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTsKKworICAgICAg
ICAgICAgICBhcnJvd0V4cHJlc3Npb24gPSBpbm5lci5hcHBseSh0aGlzLCBhcmdzKTsKKyAgICAg
ICAgICAgICAgYXJyb3dFeHByZXNzaW9uLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnM7
CisgICAgICAgICAgICAgIHRoaXMucmVzZXRTdGFydExvY2F0aW9uRnJvbU5vZGUoYXJyb3dFeHBy
ZXNzaW9uLCB0eXBlUGFyYW1ldGVycyk7CisgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKKyAg
ICAgICAgICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LnBvcCgpOworCisgICAgICAgICAgICAgIHRo
cm93IGpzeEVycm9yIHx8IGVycjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy5z
dGF0ZS5jb250ZXh0LnBvcCgpOworCisgICAgICAgICAgICBpZiAoYXJyb3dFeHByZXNzaW9uLnR5
cGUgPT09ICJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAgcmV0dXJu
IGFycm93RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoanN4RXJyb3IgIT0gbnVs
bCkgeworICAgICAgICAgICAgICB0aHJvdyBqc3hFcnJvcjsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgIHRoaXMucmFpc2UoCisgICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRl
cnMuc3RhcnQsCisgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGFuIGFycm93IGZ1bmN0aW9uIGFm
dGVyIHRoaXMgdHlwZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24iLAorICAgICAgICAgICAgICApOwor
ICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIHJldHVybiBpbm5lci5hcHBs
eSh0aGlzLCBhcmdzKTsKKyAgICAgICAgfTsKKyAgICAgIH0pOworCisgICAgICAvLyBoYW5kbGUg
cmV0dXJuIHR5cGVzIGZvciBhcnJvdyBmdW5jdGlvbnMKKyAgICAgIGluc3RhbmNlLmV4dGVuZCgi
cGFyc2VBcnJvdyIsIGZ1bmN0aW9uIChpbm5lcikgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24g
KG5vZGUpIHsKKyAgICAgICAgICBpZiAodGhpcy5tYXRjaCh0dC5jb2xvbikpIHsKKyAgICAgICAg
ICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZS5jbG9uZSgpOworICAgICAgICAgICAgdHJ5IHsK
KyAgICAgICAgICAgICAgY29uc3Qgb2xkTm9Bbm9uRnVuY3Rpb25UeXBlID0gdGhpcy5zdGF0ZS5u
b0Fub25GdW5jdGlvblR5cGU7CisgICAgICAgICAgICAgIHRoaXMuc3RhdGUubm9Bbm9uRnVuY3Rp
b25UeXBlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgY29uc3QgcmV0dXJuVHlwZSA9IHRoaXMuZmxv
d1BhcnNlVHlwZUFuZFByZWRpY2F0ZUFubm90YXRpb24oKTsKKyAgICAgICAgICAgICAgdGhpcy5z
dGF0ZS5ub0Fub25GdW5jdGlvblR5cGUgPSBvbGROb0Fub25GdW5jdGlvblR5cGU7CisKKyAgICAg
ICAgICAgICAgaWYgKHRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkpIHRoaXMudW5leHBlY3RlZCgp
OworICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2godHQuYXJyb3cpKSB0aGlzLnVuZXhwZWN0
ZWQoKTsKKyAgICAgICAgICAgICAgLy8gYXNzaWduIGFmdGVyIGl0IGlzIGNsZWFyIGl0IGlzIGFu
IGFycm93CisgICAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZSA9IHJldHVyblR5cGU7CisgICAg
ICAgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9m
IFN5bnRheEVycm9yKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlOworICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBu
ZXh0OiBubyBzdWNoIGVycm9yIGlzIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgdGhyb3cgZXJy
OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAg
ICAgcmV0dXJuIGlubmVyLmNhbGwodGhpcywgbm9kZSk7CisgICAgICAgIH07CisgICAgICB9KTsK
KworICAgICAgaW5zdGFuY2UuZXh0ZW5kKCJzaG91bGRQYXJzZUFycm93IiwgZnVuY3Rpb24gKGlu
bmVyKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgcmV0dXJuIHRo
aXMubWF0Y2godHQuY29sb24pIHx8IGlubmVyLmNhbGwodGhpcyk7CisgICAgICAgIH07CisgICAg
ICB9KTsKKyAgICB9Cit9CisKKy8vIHBsdWdpbnMvanN4L3hodG1sLmpzCitsZXQgcGx1Z2luc0pz
eFhodG1sSlMgPSB7fTsKK3sKKyAgICAgcGx1Z2luc0pzeFhodG1sSlMgPSB7CisgICAgICBxdW90
OiAiXHUwMDIyIiwKKyAgICAgIGFtcDogIiYiLAorICAgICAgYXBvczogIlx1MDAyNyIsCisgICAg
ICBsdDogIjwiLAorICAgICAgZ3Q6ICI+IiwKKyAgICAgIG5ic3A6ICJcdTAwQTAiLAorICAgICAg
aWV4Y2w6ICJcdTAwQTEiLAorICAgICAgY2VudDogIlx1MDBBMiIsCisgICAgICBwb3VuZDogIlx1
MDBBMyIsCisgICAgICBjdXJyZW46ICJcdTAwQTQiLAorICAgICAgeWVuOiAiXHUwMEE1IiwKKyAg
ICAgIGJydmJhcjogIlx1MDBBNiIsCisgICAgICBzZWN0OiAiXHUwMEE3IiwKKyAgICAgIHVtbDog
Ilx1MDBBOCIsCisgICAgICBjb3B5OiAiXHUwMEE5IiwKKyAgICAgIG9yZGY6ICJcdTAwQUEiLAor
ICAgICAgbGFxdW86ICJcdTAwQUIiLAorICAgICAgbm90OiAiXHUwMEFDIiwKKyAgICAgIHNoeTog
Ilx1MDBBRCIsCisgICAgICByZWc6ICJcdTAwQUUiLAorICAgICAgbWFjcjogIlx1MDBBRiIsCisg
ICAgICBkZWc6ICJcdTAwQjAiLAorICAgICAgcGx1c21uOiAiXHUwMEIxIiwKKyAgICAgIHN1cDI6
ICJcdTAwQjIiLAorICAgICAgc3VwMzogIlx1MDBCMyIsCisgICAgICBhY3V0ZTogIlx1MDBCNCIs
CisgICAgICBtaWNybzogIlx1MDBCNSIsCisgICAgICBwYXJhOiAiXHUwMEI2IiwKKyAgICAgIG1p
ZGRvdDogIlx1MDBCNyIsCisgICAgICBjZWRpbDogIlx1MDBCOCIsCisgICAgICBzdXAxOiAiXHUw
MEI5IiwKKyAgICAgIG9yZG06ICJcdTAwQkEiLAorICAgICAgcmFxdW86ICJcdTAwQkIiLAorICAg
ICAgZnJhYzE0OiAiXHUwMEJDIiwKKyAgICAgIGZyYWMxMjogIlx1MDBCRCIsCisgICAgICBmcmFj
MzQ6ICJcdTAwQkUiLAorICAgICAgaXF1ZXN0OiAiXHUwMEJGIiwKKyAgICAgIEFncmF2ZTogIlx1
MDBDMCIsCisgICAgICBBYWN1dGU6ICJcdTAwQzEiLAorICAgICAgQWNpcmM6ICJcdTAwQzIiLAor
ICAgICAgQXRpbGRlOiAiXHUwMEMzIiwKKyAgICAgIEF1bWw6ICJcdTAwQzQiLAorICAgICAgQXJp
bmc6ICJcdTAwQzUiLAorICAgICAgQUVsaWc6ICJcdTAwQzYiLAorICAgICAgQ2NlZGlsOiAiXHUw
MEM3IiwKKyAgICAgIEVncmF2ZTogIlx1MDBDOCIsCisgICAgICBFYWN1dGU6ICJcdTAwQzkiLAor
ICAgICAgRWNpcmM6ICJcdTAwQ0EiLAorICAgICAgRXVtbDogIlx1MDBDQiIsCisgICAgICBJZ3Jh
dmU6ICJcdTAwQ0MiLAorICAgICAgSWFjdXRlOiAiXHUwMENEIiwKKyAgICAgIEljaXJjOiAiXHUw
MENFIiwKKyAgICAgIEl1bWw6ICJcdTAwQ0YiLAorICAgICAgRVRIOiAiXHUwMEQwIiwKKyAgICAg
IE50aWxkZTogIlx1MDBEMSIsCisgICAgICBPZ3JhdmU6ICJcdTAwRDIiLAorICAgICAgT2FjdXRl
OiAiXHUwMEQzIiwKKyAgICAgIE9jaXJjOiAiXHUwMEQ0IiwKKyAgICAgIE90aWxkZTogIlx1MDBE
NSIsCisgICAgICBPdW1sOiAiXHUwMEQ2IiwKKyAgICAgIHRpbWVzOiAiXHUwMEQ3IiwKKyAgICAg
IE9zbGFzaDogIlx1MDBEOCIsCisgICAgICBVZ3JhdmU6ICJcdTAwRDkiLAorICAgICAgVWFjdXRl
OiAiXHUwMERBIiwKKyAgICAgIFVjaXJjOiAiXHUwMERCIiwKKyAgICAgIFV1bWw6ICJcdTAwREMi
LAorICAgICAgWWFjdXRlOiAiXHUwMEREIiwKKyAgICAgIFRIT1JOOiAiXHUwMERFIiwKKyAgICAg
IHN6bGlnOiAiXHUwMERGIiwKKyAgICAgIGFncmF2ZTogIlx1MDBFMCIsCisgICAgICBhYWN1dGU6
ICJcdTAwRTEiLAorICAgICAgYWNpcmM6ICJcdTAwRTIiLAorICAgICAgYXRpbGRlOiAiXHUwMEUz
IiwKKyAgICAgIGF1bWw6ICJcdTAwRTQiLAorICAgICAgYXJpbmc6ICJcdTAwRTUiLAorICAgICAg
YWVsaWc6ICJcdTAwRTYiLAorICAgICAgY2NlZGlsOiAiXHUwMEU3IiwKKyAgICAgIGVncmF2ZTog
Ilx1MDBFOCIsCisgICAgICBlYWN1dGU6ICJcdTAwRTkiLAorICAgICAgZWNpcmM6ICJcdTAwRUEi
LAorICAgICAgZXVtbDogIlx1MDBFQiIsCisgICAgICBpZ3JhdmU6ICJcdTAwRUMiLAorICAgICAg
aWFjdXRlOiAiXHUwMEVEIiwKKyAgICAgIGljaXJjOiAiXHUwMEVFIiwKKyAgICAgIGl1bWw6ICJc
dTAwRUYiLAorICAgICAgZXRoOiAiXHUwMEYwIiwKKyAgICAgIG50aWxkZTogIlx1MDBGMSIsCisg
ICAgICBvZ3JhdmU6ICJcdTAwRjIiLAorICAgICAgb2FjdXRlOiAiXHUwMEYzIiwKKyAgICAgIG9j
aXJjOiAiXHUwMEY0IiwKKyAgICAgIG90aWxkZTogIlx1MDBGNSIsCisgICAgICBvdW1sOiAiXHUw
MEY2IiwKKyAgICAgIGRpdmlkZTogIlx1MDBGNyIsCisgICAgICBvc2xhc2g6ICJcdTAwRjgiLAor
ICAgICAgdWdyYXZlOiAiXHUwMEY5IiwKKyAgICAgIHVhY3V0ZTogIlx1MDBGQSIsCisgICAgICB1
Y2lyYzogIlx1MDBGQiIsCisgICAgICB1dW1sOiAiXHUwMEZDIiwKKyAgICAgIHlhY3V0ZTogIlx1
MDBGRCIsCisgICAgICB0aG9ybjogIlx1MDBGRSIsCisgICAgICB5dW1sOiAiXHUwMEZGIiwKKyAg
ICAgIE9FbGlnOiAiXHUwMTUyIiwKKyAgICAgIG9lbGlnOiAiXHUwMTUzIiwKKyAgICAgIFNjYXJv
bjogIlx1MDE2MCIsCisgICAgICBzY2Fyb246ICJcdTAxNjEiLAorICAgICAgWXVtbDogIlx1MDE3
OCIsCisgICAgICBmbm9mOiAiXHUwMTkyIiwKKyAgICAgIGNpcmM6ICJcdTAyQzYiLAorICAgICAg
dGlsZGU6ICJcdTAyREMiLAorICAgICAgQWxwaGE6ICJcdTAzOTEiLAorICAgICAgQmV0YTogIlx1
MDM5MiIsCisgICAgICBHYW1tYTogIlx1MDM5MyIsCisgICAgICBEZWx0YTogIlx1MDM5NCIsCisg
ICAgICBFcHNpbG9uOiAiXHUwMzk1IiwKKyAgICAgIFpldGE6ICJcdTAzOTYiLAorICAgICAgRXRh
OiAiXHUwMzk3IiwKKyAgICAgIFRoZXRhOiAiXHUwMzk4IiwKKyAgICAgIElvdGE6ICJcdTAzOTki
LAorICAgICAgS2FwcGE6ICJcdTAzOUEiLAorICAgICAgTGFtYmRhOiAiXHUwMzlCIiwKKyAgICAg
IE11OiAiXHUwMzlDIiwKKyAgICAgIE51OiAiXHUwMzlEIiwKKyAgICAgIFhpOiAiXHUwMzlFIiwK
KyAgICAgIE9taWNyb246ICJcdTAzOUYiLAorICAgICAgUGk6ICJcdTAzQTAiLAorICAgICAgUmhv
OiAiXHUwM0ExIiwKKyAgICAgIFNpZ21hOiAiXHUwM0EzIiwKKyAgICAgIFRhdTogIlx1MDNBNCIs
CisgICAgICBVcHNpbG9uOiAiXHUwM0E1IiwKKyAgICAgIFBoaTogIlx1MDNBNiIsCisgICAgICBD
aGk6ICJcdTAzQTciLAorICAgICAgUHNpOiAiXHUwM0E4IiwKKyAgICAgIE9tZWdhOiAiXHUwM0E5
IiwKKyAgICAgIGFscGhhOiAiXHUwM0IxIiwKKyAgICAgIGJldGE6ICJcdTAzQjIiLAorICAgICAg
Z2FtbWE6ICJcdTAzQjMiLAorICAgICAgZGVsdGE6ICJcdTAzQjQiLAorICAgICAgZXBzaWxvbjog
Ilx1MDNCNSIsCisgICAgICB6ZXRhOiAiXHUwM0I2IiwKKyAgICAgIGV0YTogIlx1MDNCNyIsCisg
ICAgICB0aGV0YTogIlx1MDNCOCIsCisgICAgICBpb3RhOiAiXHUwM0I5IiwKKyAgICAgIGthcHBh
OiAiXHUwM0JBIiwKKyAgICAgIGxhbWJkYTogIlx1MDNCQiIsCisgICAgICBtdTogIlx1MDNCQyIs
CisgICAgICBudTogIlx1MDNCRCIsCisgICAgICB4aTogIlx1MDNCRSIsCisgICAgICBvbWljcm9u
OiAiXHUwM0JGIiwKKyAgICAgIHBpOiAiXHUwM0MwIiwKKyAgICAgIHJobzogIlx1MDNDMSIsCisg
ICAgICBzaWdtYWY6ICJcdTAzQzIiLAorICAgICAgc2lnbWE6ICJcdTAzQzMiLAorICAgICAgdGF1
OiAiXHUwM0M0IiwKKyAgICAgIHVwc2lsb246ICJcdTAzQzUiLAorICAgICAgcGhpOiAiXHUwM0M2
IiwKKyAgICAgIGNoaTogIlx1MDNDNyIsCisgICAgICBwc2k6ICJcdTAzQzgiLAorICAgICAgb21l
Z2E6ICJcdTAzQzkiLAorICAgICAgdGhldGFzeW06ICJcdTAzRDEiLAorICAgICAgdXBzaWg6ICJc
dTAzRDIiLAorICAgICAgcGl2OiAiXHUwM0Q2IiwKKyAgICAgIGVuc3A6ICJcdTIwMDIiLAorICAg
ICAgZW1zcDogIlx1MjAwMyIsCisgICAgICB0aGluc3A6ICJcdTIwMDkiLAorICAgICAgenduajog
Ilx1MjAwQyIsCisgICAgICB6d2o6ICJcdTIwMEQiLAorICAgICAgbHJtOiAiXHUyMDBFIiwKKyAg
ICAgIHJsbTogIlx1MjAwRiIsCisgICAgICBuZGFzaDogIlx1MjAxMyIsCisgICAgICBtZGFzaDog
Ilx1MjAxNCIsCisgICAgICBsc3F1bzogIlx1MjAxOCIsCisgICAgICByc3F1bzogIlx1MjAxOSIs
CisgICAgICBzYnF1bzogIlx1MjAxQSIsCisgICAgICBsZHF1bzogIlx1MjAxQyIsCisgICAgICBy
ZHF1bzogIlx1MjAxRCIsCisgICAgICBiZHF1bzogIlx1MjAxRSIsCisgICAgICBkYWdnZXI6ICJc
dTIwMjAiLAorICAgICAgRGFnZ2VyOiAiXHUyMDIxIiwKKyAgICAgIGJ1bGw6ICJcdTIwMjIiLAor
ICAgICAgaGVsbGlwOiAiXHUyMDI2IiwKKyAgICAgIHBlcm1pbDogIlx1MjAzMCIsCisgICAgICBw
cmltZTogIlx1MjAzMiIsCisgICAgICBQcmltZTogIlx1MjAzMyIsCisgICAgICBsc2FxdW86ICJc
dTIwMzkiLAorICAgICAgcnNhcXVvOiAiXHUyMDNBIiwKKyAgICAgIG9saW5lOiAiXHUyMDNFIiwK
KyAgICAgIGZyYXNsOiAiXHUyMDQ0IiwKKyAgICAgIGV1cm86ICJcdTIwQUMiLAorICAgICAgaW1h
Z2U6ICJcdTIxMTEiLAorICAgICAgd2VpZXJwOiAiXHUyMTE4IiwKKyAgICAgIHJlYWw6ICJcdTIx
MUMiLAorICAgICAgdHJhZGU6ICJcdTIxMjIiLAorICAgICAgYWxlZnN5bTogIlx1MjEzNSIsCisg
ICAgICBsYXJyOiAiXHUyMTkwIiwKKyAgICAgIHVhcnI6ICJcdTIxOTEiLAorICAgICAgcmFycjog
Ilx1MjE5MiIsCisgICAgICBkYXJyOiAiXHUyMTkzIiwKKyAgICAgIGhhcnI6ICJcdTIxOTQiLAor
ICAgICAgY3JhcnI6ICJcdTIxQjUiLAorICAgICAgbEFycjogIlx1MjFEMCIsCisgICAgICB1QXJy
OiAiXHUyMUQxIiwKKyAgICAgIHJBcnI6ICJcdTIxRDIiLAorICAgICAgZEFycjogIlx1MjFEMyIs
CisgICAgICBoQXJyOiAiXHUyMUQ0IiwKKyAgICAgIGZvcmFsbDogIlx1MjIwMCIsCisgICAgICBw
YXJ0OiAiXHUyMjAyIiwKKyAgICAgIGV4aXN0OiAiXHUyMjAzIiwKKyAgICAgIGVtcHR5OiAiXHUy
MjA1IiwKKyAgICAgIG5hYmxhOiAiXHUyMjA3IiwKKyAgICAgIGlzaW46ICJcdTIyMDgiLAorICAg
ICAgbm90aW46ICJcdTIyMDkiLAorICAgICAgbmk6ICJcdTIyMEIiLAorICAgICAgcHJvZDogIlx1
MjIwRiIsCisgICAgICBzdW06ICJcdTIyMTEiLAorICAgICAgbWludXM6ICJcdTIyMTIiLAorICAg
ICAgbG93YXN0OiAiXHUyMjE3IiwKKyAgICAgIHJhZGljOiAiXHUyMjFBIiwKKyAgICAgIHByb3A6
ICJcdTIyMUQiLAorICAgICAgaW5maW46ICJcdTIyMUUiLAorICAgICAgYW5nOiAiXHUyMjIwIiwK
KyAgICAgIGFuZDogIlx1MjIyNyIsCisgICAgICBvcjogIlx1MjIyOCIsCisgICAgICBjYXA6ICJc
dTIyMjkiLAorICAgICAgY3VwOiAiXHUyMjJBIiwKKyAgICAgICJpbnQiOiAiXHUyMjJCIiwKKyAg
ICAgIHRoZXJlNDogIlx1MjIzNCIsCisgICAgICBzaW06ICJcdTIyM0MiLAorICAgICAgY29uZzog
Ilx1MjI0NSIsCisgICAgICBhc3ltcDogIlx1MjI0OCIsCisgICAgICBuZTogIlx1MjI2MCIsCisg
ICAgICBlcXVpdjogIlx1MjI2MSIsCisgICAgICBsZTogIlx1MjI2NCIsCisgICAgICBnZTogIlx1
MjI2NSIsCisgICAgICBzdWI6ICJcdTIyODIiLAorICAgICAgc3VwOiAiXHUyMjgzIiwKKyAgICAg
IG5zdWI6ICJcdTIyODQiLAorICAgICAgc3ViZTogIlx1MjI4NiIsCisgICAgICBzdXBlOiAiXHUy
Mjg3IiwKKyAgICAgIG9wbHVzOiAiXHUyMjk1IiwKKyAgICAgIG90aW1lczogIlx1MjI5NyIsCisg
ICAgICBwZXJwOiAiXHUyMkE1IiwKKyAgICAgIHNkb3Q6ICJcdTIyQzUiLAorICAgICAgbGNlaWw6
ICJcdTIzMDgiLAorICAgICAgcmNlaWw6ICJcdTIzMDkiLAorICAgICAgbGZsb29yOiAiXHUyMzBB
IiwKKyAgICAgIHJmbG9vcjogIlx1MjMwQiIsCisgICAgICBsYW5nOiAiXHUyMzI5IiwKKyAgICAg
IHJhbmc6ICJcdTIzMkEiLAorICAgICAgbG96OiAiXHUyNUNBIiwKKyAgICAgIHNwYWRlczogIlx1
MjY2MCIsCisgICAgICBjbHViczogIlx1MjY2MyIsCisgICAgICBoZWFydHM6ICJcdTI2NjUiLAor
ICAgICAgZGlhbXM6ICJcdTI2NjYiCisgICAgfTsKK30KKworLy8gcGx1Z2lucy9qc3gvaW5kZXgu
anMKK2xldCBwbHVnaW5zSnN4SW5kZXhKUyA9IHt9OworeworICAgIGNvbnN0IFhIVE1MRW50aXRp
ZXMgPSBwbHVnaW5zSnN4WGh0bWxKUzsKKyAgICBjb25zdCB7IFRva2VuVHlwZSwgdHlwZXMgOiB0
dCB9ID0gdG9rZW5pemVyVHlwZXNKUzsKKyAgICBjb25zdCB7IFRva0NvbnRleHQsIHR5cGVzIDog
dGMgfSA9IHRva2VuaXplckNvbnRleHRKUzsKKyAgICBjb25zdCBQYXJzZXIgPSBwYXJzZXJJbmRl
eEpTOworICAgIGNvbnN0IHsgaXNJZGVudGlmaWVyQ2hhciwgaXNJZGVudGlmaWVyU3RhcnQgfSA9
IHV0aWxJZGVudGlmaWVySlM7CisgICAgY29uc3QgeyBpc05ld0xpbmUgfSA9IHV0aWxXaGl0ZXNw
YWNlSlM7CisKKyAgICBjb25zdCBIRVhfTlVNQkVSID0gL15bXGRhLWZBLUZdKyQvOworICAgIGNv
bnN0IERFQ0lNQUxfTlVNQkVSID0gL15cZCskLzsKKworICAgIHRjLmpfb1RhZyA9IG5ldyBUb2tD
b250ZXh0KCI8dGFnIiwgZmFsc2UpOworICAgIHRjLmpfY1RhZyA9IG5ldyBUb2tDb250ZXh0KCI8
L3RhZyIsIGZhbHNlKTsKKyAgICB0Yy5qX2V4cHIgPSBuZXcgVG9rQ29udGV4dCgiPHRhZz4uLi48
L3RhZz4iLCB0cnVlLCB0cnVlKTsKKworICAgIHR0LmpzeE5hbWUgPSBuZXcgVG9rZW5UeXBlKCJq
c3hOYW1lIik7CisgICAgdHQuanN4VGV4dCA9IG5ldyBUb2tlblR5cGUoImpzeFRleHQiLCB7IGJl
Zm9yZUV4cHI6IHRydWUgfSk7CisgICAgdHQuanN4VGFnU3RhcnQgPSBuZXcgVG9rZW5UeXBlKCJq
c3hUYWdTdGFydCIsIHsgc3RhcnRzRXhwcjogdHJ1ZSB9KTsKKyAgICB0dC5qc3hUYWdFbmQgPSBu
ZXcgVG9rZW5UeXBlKCJqc3hUYWdFbmQiKTsKKworICAgIHR0LmpzeFRhZ1N0YXJ0LnVwZGF0ZUNv
bnRleHQgPSBmdW5jdGlvbigpIHsKKyAgICAgIHRoaXMuc3RhdGUuY29udGV4dC5wdXNoKHRjLmpf
ZXhwcik7IC8vIHRyZWF0IGFzIGJlZ2lubmluZyBvZiBKU1ggZXhwcmVzc2lvbgorICAgICAgdGhp
cy5zdGF0ZS5jb250ZXh0LnB1c2godGMual9vVGFnKTsgLy8gc3RhcnQgb3BlbmluZyB0YWcgY29u
dGV4dAorICAgICAgdGhpcy5zdGF0ZS5leHByQWxsb3dlZCA9IGZhbHNlOworICAgIH07CisKKyAg
ICB0dC5qc3hUYWdFbmQudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKHByZXZUeXBlKSB7CisgICAg
ICBjb25zdCBvdXQgPSB0aGlzLnN0YXRlLmNvbnRleHQucG9wKCk7CisgICAgICBpZiAob3V0ID09
PSB0Yy5qX29UYWcgJiYgcHJldlR5cGUgPT09IHR0LnNsYXNoIHx8IG91dCA9PT0gdGMual9jVGFn
KSB7CisgICAgICAgIHRoaXMuc3RhdGUuY29udGV4dC5wb3AoKTsKKyAgICAgICAgdGhpcy5zdGF0
ZS5leHByQWxsb3dlZCA9IHRoaXMuY3VyQ29udGV4dCgpID09PSB0Yy5qX2V4cHI7CisgICAgICB9
IGVsc2UgeworICAgICAgICB0aGlzLnN0YXRlLmV4cHJBbGxvd2VkID0gdHJ1ZTsKKyAgICAgIH0K
KyAgICB9OworCisgICAgY29uc3QgcHAgPSBQYXJzZXIucHJvdG90eXBlOworCisgICAgLy8gUmVh
ZHMgaW5saW5lIEpTWCBjb250ZW50cyB0b2tlbi4KKworICAgIHBwLmpzeFJlYWRUb2tlbiA9IGZ1
bmN0aW9uKCkgeworICAgICAgbGV0IG91dCA9ICIiOworICAgICAgbGV0IGNodW5rU3RhcnQgPSB0
aGlzLnN0YXRlLnBvczsKKyAgICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKHRoaXMuc3RhdGUu
cG9zID49IHRoaXMuaW5wdXQubGVuZ3RoKSB7CisgICAgICAgICAgdGhpcy5yYWlzZSh0aGlzLnN0
YXRlLnN0YXJ0LCAiVW50ZXJtaW5hdGVkIEpTWCBjb250ZW50cyIpOworICAgICAgICB9CisKKyAg
ICAgICAgY29uc3QgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MpOwor
CisgICAgICAgIHN3aXRjaCAoY2gpIHsKKyAgICAgICAgICBjYXNlIDYwOiAvLyAiPCIKKyAgICAg
ICAgICBjYXNlIDEyMzogLy8gInsiCisgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5wb3MgPT09
IHRoaXMuc3RhdGUuc3RhcnQpIHsKKyAgICAgICAgICAgICAgaWYgKGNoID09PSA2MCAmJiB0aGlz
LnN0YXRlLmV4cHJBbGxvd2VkKSB7CisgICAgICAgICAgICAgICAgKyt0aGlzLnN0YXRlLnBvczsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0dC5qc3hUYWdTdGFydCk7
CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5Gcm9t
Q29kZShjaCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQgKz0gdGhpcy5pbnB1dC5z
bGljZShjaHVua1N0YXJ0LCB0aGlzLnN0YXRlLnBvcyk7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5maW5pc2hUb2tlbih0dC5qc3hUZXh0LCBvdXQpOworCisgICAgICAgICAgY2FzZSAzODogLy8g
IiYiCisgICAgICAgICAgICBvdXQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlz
LnN0YXRlLnBvcyk7CisgICAgICAgICAgICBvdXQgKz0gdGhpcy5qc3hSZWFkRW50aXR5KCk7Cisg
ICAgICAgICAgICBjaHVua1N0YXJ0ID0gdGhpcy5zdGF0ZS5wb3M7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoaXNOZXdMaW5lKGNoKSkg
eworICAgICAgICAgICAgICBvdXQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlz
LnN0YXRlLnBvcyk7CisgICAgICAgICAgICAgIG91dCArPSB0aGlzLmpzeFJlYWROZXdMaW5lKHRy
dWUpOworICAgICAgICAgICAgICBjaHVua1N0YXJ0ID0gdGhpcy5zdGF0ZS5wb3M7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICArK3RoaXMuc3RhdGUucG9zOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfTsKKworICAgIHBwLmpzeFJlYWROZXdMaW5l
ID0gZnVuY3Rpb24obm9ybWFsaXplQ1JMRikgeworICAgICAgY29uc3QgY2ggPSB0aGlzLmlucHV0
LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MpOworICAgICAgbGV0IG91dDsKKyAgICAgICsrdGhp
cy5zdGF0ZS5wb3M7CisgICAgICBpZiAoY2ggPT09IDEzICYmIHRoaXMuaW5wdXQuY2hhckNvZGVB
dCh0aGlzLnN0YXRlLnBvcykgPT09IDEwKSB7CisgICAgICAgICsrdGhpcy5zdGF0ZS5wb3M7Cisg
ICAgICAgIG91dCA9IG5vcm1hbGl6ZUNSTEYgPyAiXG4iIDogIlxyXG4iOworICAgICAgfSBlbHNl
IHsKKyAgICAgICAgb3V0ID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7CisgICAgICB9CisgICAg
ICArK3RoaXMuc3RhdGUuY3VyTGluZTsKKyAgICAgIHRoaXMuc3RhdGUubGluZVN0YXJ0ID0gdGhp
cy5zdGF0ZS5wb3M7CisKKyAgICAgIHJldHVybiBvdXQ7CisgICAgfTsKKworICAgIHBwLmpzeFJl
YWRTdHJpbmcgPSBmdW5jdGlvbihxdW90ZSkgeworICAgICAgbGV0IG91dCA9ICIiOworICAgICAg
bGV0IGNodW5rU3RhcnQgPSArK3RoaXMuc3RhdGUucG9zOworICAgICAgZm9yICg7OykgeworICAg
ICAgICBpZiAodGhpcy5zdGF0ZS5wb3MgPj0gdGhpcy5pbnB1dC5sZW5ndGgpIHsKKyAgICAgICAg
ICB0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsICJVbnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0
YW50Iik7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBjaCA9IHRoaXMuaW5wdXQuY2hhckNv
ZGVBdCh0aGlzLnN0YXRlLnBvcyk7CisgICAgICAgIGlmIChjaCA9PT0gcXVvdGUpIGJyZWFrOwor
ICAgICAgICBpZiAoY2ggPT09IDM4KSB7IC8vICImIgorICAgICAgICAgIG91dCArPSB0aGlzLmlu
cHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMuc3RhdGUucG9zKTsKKyAgICAgICAgICBvdXQgKz0g
dGhpcy5qc3hSZWFkRW50aXR5KCk7CisgICAgICAgICAgY2h1bmtTdGFydCA9IHRoaXMuc3RhdGUu
cG9zOworICAgICAgICB9IGVsc2UgaWYgKGlzTmV3TGluZShjaCkpIHsKKyAgICAgICAgICBvdXQg
Kz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnN0YXRlLnBvcyk7CisgICAgICAg
ICAgb3V0ICs9IHRoaXMuanN4UmVhZE5ld0xpbmUoZmFsc2UpOworICAgICAgICAgIGNodW5rU3Rh
cnQgPSB0aGlzLnN0YXRlLnBvczsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICArK3RoaXMu
c3RhdGUucG9zOworICAgICAgICB9CisgICAgICB9CisgICAgICBvdXQgKz0gdGhpcy5pbnB1dC5z
bGljZShjaHVua1N0YXJ0LCB0aGlzLnN0YXRlLnBvcysrKTsKKyAgICAgIHJldHVybiB0aGlzLmZp
bmlzaFRva2VuKHR0LnN0cmluZywgb3V0KTsKKyAgICB9OworCisgICAgcHAuanN4UmVhZEVudGl0
eSA9IGZ1bmN0aW9uKCkgeworICAgICAgbGV0IHN0ciA9ICIiOworICAgICAgbGV0IGNvdW50ID0g
MDsKKyAgICAgIGxldCBlbnRpdHk7CisgICAgICBsZXQgY2ggPSB0aGlzLmlucHV0W3RoaXMuc3Rh
dGUucG9zXTsKKworICAgICAgY29uc3Qgc3RhcnRQb3MgPSArK3RoaXMuc3RhdGUucG9zOworICAg
ICAgd2hpbGUgKHRoaXMuc3RhdGUucG9zIDwgdGhpcy5pbnB1dC5sZW5ndGggJiYgY291bnQrKyA8
IDEwKSB7CisgICAgICAgIGNoID0gdGhpcy5pbnB1dFt0aGlzLnN0YXRlLnBvcysrXTsKKyAgICAg
ICAgaWYgKGNoID09PSAiOyIpIHsKKyAgICAgICAgICBpZiAoc3RyWzBdID09PSAiIyIpIHsKKyAg
ICAgICAgICAgIGlmIChzdHJbMV0gPT09ICJ4IikgeworICAgICAgICAgICAgICBzdHIgPSBzdHIu
c3Vic3RyKDIpOworICAgICAgICAgICAgICBpZiAoSEVYX05VTUJFUi50ZXN0KHN0cikpCisgICAg
ICAgICAgICAgICAgZW50aXR5ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQoc3RyLCAx
NikpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0
cigxKTsKKyAgICAgICAgICAgICAgaWYgKERFQ0lNQUxfTlVNQkVSLnRlc3Qoc3RyKSkKKyAgICAg
ICAgICAgICAgICBlbnRpdHkgPSBTdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludChzdHIsIDEw
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVudGl0
eSA9IFhIVE1MRW50aXRpZXNbc3RyXTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgc3RyICs9IGNoOworICAgICAgfQorICAgICAgaWYgKCFlbnRpdHkp
IHsKKyAgICAgICAgdGhpcy5zdGF0ZS5wb3MgPSBzdGFydFBvczsKKyAgICAgICAgcmV0dXJuICIm
IjsKKyAgICAgIH0KKyAgICAgIHJldHVybiBlbnRpdHk7CisgICAgfTsKKworCisgICAgLy8gUmVh
ZCBhIEpTWCBpZGVudGlmaWVyICh2YWxpZCB0YWcgb3IgYXR0cmlidXRlIG5hbWUpLgorICAgIC8v
CisgICAgLy8gT3B0aW1pemVkIHZlcnNpb24gc2luY2UgSlNYIGlkZW50aWZpZXJzIGNhbiJ0IGNv
bnRhaW4KKyAgICAvLyBlc2NhcGUgY2hhcmFjdGVycyBhbmQgc28gY2FuIGJlIHJlYWQgYXMgc2lu
Z2xlIHNsaWNlLgorICAgIC8vIEFsc28gYXNzdW1lcyB0aGF0IGZpcnN0IGNoYXJhY3RlciB3YXMg
YWxyZWFkeSBjaGVja2VkCisgICAgLy8gYnkgaXNJZGVudGlmaWVyU3RhcnQgaW4gcmVhZFRva2Vu
LgorCisgICAgcHAuanN4UmVhZFdvcmQgPSBmdW5jdGlvbigpIHsKKyAgICAgIGxldCBjaDsKKyAg
ICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5zdGF0ZS5wb3M7CisgICAgICBkbyB7CisgICAgICAgIGNo
ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KCsrdGhpcy5zdGF0ZS5wb3MpOworICAgICAgfSB3aGls
ZSAoaXNJZGVudGlmaWVyQ2hhcihjaCkgfHwgY2ggPT09IDQ1KTsgLy8gIi0iCisgICAgICByZXR1
cm4gdGhpcy5maW5pc2hUb2tlbih0dC5qc3hOYW1lLCB0aGlzLmlucHV0LnNsaWNlKHN0YXJ0LCB0
aGlzLnN0YXRlLnBvcykpOworICAgIH07CisKKyAgICAvLyBUcmFuc2Zvcm1zIEpTWCBlbGVtZW50
IG5hbWUgdG8gc3RyaW5nLgorCisgICAgZnVuY3Rpb24gZ2V0UXVhbGlmaWVkSlNYTmFtZShvYmpl
Y3QpIHsKKyAgICAgIGlmIChvYmplY3QudHlwZSA9PT0gIkpTWElkZW50aWZpZXIiKSB7CisgICAg
ICAgIHJldHVybiBvYmplY3QubmFtZTsKKyAgICAgIH0KKworICAgICAgaWYgKG9iamVjdC50eXBl
ID09PSAiSlNYTmFtZXNwYWNlZE5hbWUiKSB7CisgICAgICAgIHJldHVybiBvYmplY3QubmFtZXNw
YWNlLm5hbWUgKyAiOiIgKyBvYmplY3QubmFtZS5uYW1lOworICAgICAgfQorCisgICAgICBpZiAo
b2JqZWN0LnR5cGUgPT09ICJKU1hNZW1iZXJFeHByZXNzaW9uIikgeworICAgICAgICByZXR1cm4g
Z2V0UXVhbGlmaWVkSlNYTmFtZShvYmplY3Qub2JqZWN0KSArICIuIiArIGdldFF1YWxpZmllZEpT
WE5hbWUob2JqZWN0LnByb3BlcnR5KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBQYXJzZSBu
ZXh0IHRva2VuIGFzIEpTWCBpZGVudGlmaWVyCisKKyAgICBwcC5qc3hQYXJzZUlkZW50aWZpZXIg
PSBmdW5jdGlvbigpIHsKKyAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpOworICAg
ICAgaWYgKHRoaXMubWF0Y2godHQuanN4TmFtZSkpIHsKKyAgICAgICAgbm9kZS5uYW1lID0gdGhp
cy5zdGF0ZS52YWx1ZTsKKyAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS50eXBlLmtleXdvcmQp
IHsKKyAgICAgICAgbm9kZS5uYW1lID0gdGhpcy5zdGF0ZS50eXBlLmtleXdvcmQ7CisgICAgICB9
IGVsc2UgeworICAgICAgICB0aGlzLnVuZXhwZWN0ZWQoKTsKKyAgICAgIH0KKyAgICAgIHRoaXMu
bmV4dCgpOworICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAiSlNYSWRlbnRpZmll
ciIpOworICAgIH07CisKKyAgICAvLyBQYXJzZSBuYW1lc3BhY2VkIGlkZW50aWZpZXIuCisKKyAg
ICBwcC5qc3hQYXJzZU5hbWVzcGFjZWROYW1lID0gZnVuY3Rpb24oKSB7CisgICAgICBjb25zdCBz
dGFydFBvcyA9IHRoaXMuc3RhdGUuc3RhcnQ7CisgICAgICBjb25zdCBzdGFydExvYyA9IHRoaXMu
c3RhdGUuc3RhcnRMb2M7CisgICAgICBjb25zdCBuYW1lID0gdGhpcy5qc3hQYXJzZUlkZW50aWZp
ZXIoKTsKKyAgICAgIGlmICghdGhpcy5lYXQodHQuY29sb24pKSByZXR1cm4gbmFtZTsKKworICAg
ICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTsKKyAg
ICAgIG5vZGUubmFtZXNwYWNlID0gbmFtZTsKKyAgICAgIG5vZGUubmFtZSA9IHRoaXMuanN4UGFy
c2VJZGVudGlmaWVyKCk7CisgICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJKU1hO
YW1lc3BhY2VkTmFtZSIpOworICAgIH07CisKKyAgICAvLyBQYXJzZXMgZWxlbWVudCBuYW1lIGlu
IGFueSBmb3JtIC0gbmFtZXNwYWNlZCwgbWVtYmVyCisgICAgLy8gb3Igc2luZ2xlIGlkZW50aWZp
ZXIuCisKKyAgICBwcC5qc3hQYXJzZUVsZW1lbnROYW1lID0gZnVuY3Rpb24oKSB7CisgICAgICBj
b25zdCBzdGFydFBvcyA9IHRoaXMuc3RhdGUuc3RhcnQ7CisgICAgICBjb25zdCBzdGFydExvYyA9
IHRoaXMuc3RhdGUuc3RhcnRMb2M7CisgICAgICBsZXQgbm9kZSA9IHRoaXMuanN4UGFyc2VOYW1l
c3BhY2VkTmFtZSgpOworICAgICAgd2hpbGUgKHRoaXMuZWF0KHR0LmRvdCkpIHsKKyAgICAgICAg
Y29uc3QgbmV3Tm9kZSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTsKKyAg
ICAgICAgbmV3Tm9kZS5vYmplY3QgPSBub2RlOworICAgICAgICBuZXdOb2RlLnByb3BlcnR5ID0g
dGhpcy5qc3hQYXJzZUlkZW50aWZpZXIoKTsKKyAgICAgICAgbm9kZSA9IHRoaXMuZmluaXNoTm9k
ZShuZXdOb2RlLCAiSlNYTWVtYmVyRXhwcmVzc2lvbiIpOworICAgICAgfQorICAgICAgcmV0dXJu
IG5vZGU7CisgICAgfTsKKworICAgIC8vIFBhcnNlcyBhbnkgdHlwZSBvZiBKU1ggYXR0cmlidXRl
IHZhbHVlLgorCisgICAgcHAuanN4UGFyc2VBdHRyaWJ1dGVWYWx1ZSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgbGV0IG5vZGU7CisgICAgICBzd2l0Y2ggKHRoaXMuc3RhdGUudHlwZSkgeworICAgICAg
ICBjYXNlIHR0LmJyYWNlTDoKKyAgICAgICAgICBub2RlID0gdGhpcy5qc3hQYXJzZUV4cHJlc3Np
b25Db250YWluZXIoKTsKKyAgICAgICAgICBpZiAobm9kZS5leHByZXNzaW9uLnR5cGUgPT09ICJK
U1hFbXB0eUV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICB0aGlzLnJhaXNlKG5vZGUuc3RhcnQs
ICJKU1ggYXR0cmlidXRlcyBtdXN0IG9ubHkgYmUgYXNzaWduZWQgYSBub24tZW1wdHkgZXhwcmVz
c2lvbiIpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAg
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSB0dC5qc3hUYWdTdGFydDoKKyAgICAgICAgY2FzZSB0
dC5zdHJpbmc6CisgICAgICAgICAgbm9kZSA9IHRoaXMucGFyc2VFeHByQXRvbSgpOworICAgICAg
ICAgIG5vZGUuZXh0cmEgPSBudWxsOworICAgICAgICAgIHJldHVybiBub2RlOworCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgdGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0LCAiSlNYIHZh
bHVlIHNob3VsZCBiZSBlaXRoZXIgYW4gZXhwcmVzc2lvbiBvciBhIHF1b3RlZCBKU1ggdGV4dCIp
OworICAgICAgfQorICAgIH07CisKKyAgICAvLyBKU1hFbXB0eUV4cHJlc3Npb24gaXMgdW5pcXVl
IHR5cGUgc2luY2UgaXQgZG9lc24ndCBhY3R1YWxseSBwYXJzZSBhbnl0aGluZywKKyAgICAvLyBh
bmQgc28gaXQgc2hvdWxkIHN0YXJ0IGF0IHRoZSBlbmQgb2YgbGFzdCByZWFkIHRva2VuIChsZWZ0
IGJyYWNlKSBhbmQgZmluaXNoCisgICAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBv
bmUgKHJpZ2h0IGJyYWNlKS4KKworICAgIHBwLmpzeFBhcnNlRW1wdHlFeHByZXNzaW9uID0gZnVu
Y3Rpb24oKSB7CisgICAgICBjb25zdCBub2RlID0gdGhpcy5zdGFydE5vZGVBdCh0aGlzLnN0YXRl
Lmxhc3RUb2tFbmQsIHRoaXMuc3RhdGUubGFzdFRva0VuZExvYyk7CisgICAgICByZXR1cm4gdGhp
cy5maW5pc2hOb2RlQXQobm9kZSwgIkpTWEVtcHR5RXhwcmVzc2lvbiIsIHRoaXMuc3RhdGUuc3Rh
cnQsIHRoaXMuc3RhdGUuc3RhcnRMb2MpOworICAgIH07CisKKyAgICAvLyBQYXJzZSBKU1ggc3By
ZWFkIGNoaWxkCisKKyAgICBwcC5qc3hQYXJzZVNwcmVhZENoaWxkID0gZnVuY3Rpb24oKSB7Cisg
ICAgICBjb25zdCBub2RlID0gdGhpcy5zdGFydE5vZGUoKTsKKyAgICAgIHRoaXMuZXhwZWN0KHR0
LmJyYWNlTCk7CisgICAgICB0aGlzLmV4cGVjdCh0dC5lbGxpcHNpcyk7CisgICAgICBub2RlLmV4
cHJlc3Npb24gPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOworICAgICAgdGhpcy5leHBlY3QodHQu
YnJhY2VSKTsKKworICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAiSlNYU3ByZWFk
Q2hpbGQiKTsKKyAgICB9OworCisgICAgLy8gUGFyc2VzIEpTWCBleHByZXNzaW9uIGVuY2xvc2Vk
IGludG8gY3VybHkgYnJhY2tldHMuCisKKworICAgIHBwLmpzeFBhcnNlRXhwcmVzc2lvbkNvbnRh
aW5lciA9IGZ1bmN0aW9uKCkgeworICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7
CisgICAgICB0aGlzLm5leHQoKTsKKyAgICAgIGlmICh0aGlzLm1hdGNoKHR0LmJyYWNlUikpIHsK
KyAgICAgICAgbm9kZS5leHByZXNzaW9uID0gdGhpcy5qc3hQYXJzZUVtcHR5RXhwcmVzc2lvbigp
OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbm9kZS5leHByZXNzaW9uID0gdGhpcy5wYXJzZUV4
cHJlc3Npb24oKTsKKyAgICAgIH0KKyAgICAgIHRoaXMuZXhwZWN0KHR0LmJyYWNlUik7CisgICAg
ICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsICJKU1hFeHByZXNzaW9uQ29udGFpbmVyIik7
CisgICAgfTsKKworICAgIC8vIFBhcnNlcyBmb2xsb3dpbmcgSlNYIGF0dHJpYnV0ZSBuYW1lLXZh
bHVlIHBhaXIuCisKKyAgICBwcC5qc3hQYXJzZUF0dHJpYnV0ZSA9IGZ1bmN0aW9uKCkgeworICAg
ICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7CisgICAgICBpZiAodGhpcy5lYXQodHQu
YnJhY2VMKSkgeworICAgICAgICB0aGlzLmV4cGVjdCh0dC5lbGxpcHNpcyk7CisgICAgICAgIG5v
ZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKTsKKyAgICAgICAgdGhpcy5leHBl
Y3QodHQuYnJhY2VSKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAiSlNY
U3ByZWFkQXR0cmlidXRlIik7CisgICAgICB9CisgICAgICBub2RlLm5hbWUgPSB0aGlzLmpzeFBh
cnNlTmFtZXNwYWNlZE5hbWUoKTsKKyAgICAgIG5vZGUudmFsdWUgPSB0aGlzLmVhdCh0dC5lcSkg
PyB0aGlzLmpzeFBhcnNlQXR0cmlidXRlVmFsdWUoKSA6IG51bGw7CisgICAgICByZXR1cm4gdGhp
cy5maW5pc2hOb2RlKG5vZGUsICJKU1hBdHRyaWJ1dGUiKTsKKyAgICB9OworCisgICAgLy8gUGFy
c2VzIEpTWCBvcGVuaW5nIHRhZyBzdGFydGluZyBhZnRlciAiPCIuCisKKyAgICBwcC5qc3hQYXJz
ZU9wZW5pbmdFbGVtZW50QXQgPSBmdW5jdGlvbihzdGFydFBvcywgc3RhcnRMb2MpIHsKKyAgICAg
IGNvbnN0IG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7CisgICAg
ICBub2RlLmF0dHJpYnV0ZXMgPSBbXTsKKyAgICAgIG5vZGUubmFtZSA9IHRoaXMuanN4UGFyc2VF
bGVtZW50TmFtZSgpOworICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKHR0LnNsYXNoKSAmJiAhdGhp
cy5tYXRjaCh0dC5qc3hUYWdFbmQpKSB7CisgICAgICAgIG5vZGUuYXR0cmlidXRlcy5wdXNoKHRo
aXMuanN4UGFyc2VBdHRyaWJ1dGUoKSk7CisgICAgICB9CisgICAgICBub2RlLnNlbGZDbG9zaW5n
ID0gdGhpcy5lYXQodHQuc2xhc2gpOworICAgICAgdGhpcy5leHBlY3QodHQuanN4VGFnRW5kKTsK
KyAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgIkpTWE9wZW5pbmdFbGVtZW50Iik7
CisgICAgfTsKKworICAgIC8vIFBhcnNlcyBKU1ggY2xvc2luZyB0YWcgc3RhcnRpbmcgYWZ0ZXIg
IjwvIi4KKworICAgIHBwLmpzeFBhcnNlQ2xvc2luZ0VsZW1lbnRBdCA9IGZ1bmN0aW9uKHN0YXJ0
UG9zLCBzdGFydExvYykgeworICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQoc3Rh
cnRQb3MsIHN0YXJ0TG9jKTsKKyAgICAgIG5vZGUubmFtZSA9IHRoaXMuanN4UGFyc2VFbGVtZW50
TmFtZSgpOworICAgICAgdGhpcy5leHBlY3QodHQuanN4VGFnRW5kKTsKKyAgICAgIHJldHVybiB0
aGlzLmZpbmlzaE5vZGUobm9kZSwgIkpTWENsb3NpbmdFbGVtZW50Iik7CisgICAgfTsKKworICAg
IC8vIFBhcnNlcyBlbnRpcmUgSlNYIGVsZW1lbnQsIGluY2x1ZGluZyBpdCJzIG9wZW5pbmcgdGFn
CisgICAgLy8gKHN0YXJ0aW5nIGFmdGVyICI8IiksIGF0dHJpYnV0ZXMsIGNvbnRlbnRzIGFuZCBj
bG9zaW5nIHRhZy4KKworICAgIHBwLmpzeFBhcnNlRWxlbWVudEF0ID0gZnVuY3Rpb24oc3RhcnRQ
b3MsIHN0YXJ0TG9jKSB7CisgICAgICBjb25zdCBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFy
dFBvcywgc3RhcnRMb2MpOworICAgICAgY29uc3QgY2hpbGRyZW4gPSBbXTsKKyAgICAgIGNvbnN0
IG9wZW5pbmdFbGVtZW50ID0gdGhpcy5qc3hQYXJzZU9wZW5pbmdFbGVtZW50QXQoc3RhcnRQb3Ms
IHN0YXJ0TG9jKTsKKyAgICAgIGxldCBjbG9zaW5nRWxlbWVudCA9IG51bGw7CisKKyAgICAgIGlm
ICghb3BlbmluZ0VsZW1lbnQuc2VsZkNsb3NpbmcpIHsKKyAgICAgICAgY29udGVudHM6IGZvciAo
OzspIHsKKyAgICAgICAgICBzd2l0Y2ggKHRoaXMuc3RhdGUudHlwZSkgeworICAgICAgICAgICAg
Y2FzZSB0dC5qc3hUYWdTdGFydDoKKyAgICAgICAgICAgICAgc3RhcnRQb3MgPSB0aGlzLnN0YXRl
LnN0YXJ0OyBzdGFydExvYyA9IHRoaXMuc3RhdGUuc3RhcnRMb2M7CisgICAgICAgICAgICAgIHRo
aXMubmV4dCgpOworICAgICAgICAgICAgICBpZiAodGhpcy5lYXQodHQuc2xhc2gpKSB7CisgICAg
ICAgICAgICAgICAgY2xvc2luZ0VsZW1lbnQgPSB0aGlzLmpzeFBhcnNlQ2xvc2luZ0VsZW1lbnRB
dChzdGFydFBvcywgc3RhcnRMb2MpOworICAgICAgICAgICAgICAgIGJyZWFrIGNvbnRlbnRzOwor
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2godGhpcy5qc3hQYXJz
ZUVsZW1lbnRBdChzdGFydFBvcywgc3RhcnRMb2MpKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgIGNhc2UgdHQuanN4VGV4dDoKKyAgICAgICAgICAgICAgY2hpbGRyZW4ucHVz
aCh0aGlzLnBhcnNlRXhwckF0b20oKSk7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICBjYXNlIHR0LmJyYWNlTDoKKyAgICAgICAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkKCku
dHlwZSA9PT0gdHQuZWxsaXBzaXMpIHsKKyAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHRo
aXMuanN4UGFyc2VTcHJlYWRDaGlsZCgpKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHRoaXMuanN4UGFyc2VFeHByZXNzaW9uQ29udGFpbmVy
KCkpOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gc2hvdWxkIG5ldmVyIGhhcHBlbgorICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgdGhpcy51bmV4cGVjdGVkKCk7CisgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGdldFF1YWxpZmllZEpTWE5hbWUoY2xvc2lu
Z0VsZW1lbnQubmFtZSkgIT09IGdldFF1YWxpZmllZEpTWE5hbWUob3BlbmluZ0VsZW1lbnQubmFt
ZSkpIHsKKyAgICAgICAgICB0aGlzLnJhaXNlKAorICAgICAgICAgICAgY2xvc2luZ0VsZW1lbnQu
c3RhcnQsCisgICAgICAgICAgICAiRXhwZWN0ZWQgY29ycmVzcG9uZGluZyBKU1ggY2xvc2luZyB0
YWcgZm9yIDwiICsgZ2V0UXVhbGlmaWVkSlNYTmFtZShvcGVuaW5nRWxlbWVudC5uYW1lKSArICI+
IgorICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgbm9kZS5vcGVuaW5n
RWxlbWVudCA9IG9wZW5pbmdFbGVtZW50OworICAgICAgbm9kZS5jbG9zaW5nRWxlbWVudCA9IGNs
b3NpbmdFbGVtZW50OworICAgICAgbm9kZS5jaGlsZHJlbiA9IGNoaWxkcmVuOworICAgICAgaWYg
KHRoaXMubWF0Y2godHQucmVsYXRpb25hbCkgJiYgdGhpcy5zdGF0ZS52YWx1ZSA9PT0gIjwiKSB7
CisgICAgICAgIHRoaXMucmFpc2UodGhpcy5zdGF0ZS5zdGFydCwgIkFkamFjZW50IEpTWCBlbGVt
ZW50cyBtdXN0IGJlIHdyYXBwZWQgaW4gYW4gZW5jbG9zaW5nIHRhZyIpOworICAgICAgfQorICAg
ICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAiSlNYRWxlbWVudCIpOworICAgIH07CisK
KyAgICAvLyBQYXJzZXMgZW50aXJlIEpTWCBlbGVtZW50IGZyb20gY3VycmVudCBwb3NpdGlvbi4K
KworICAgIHBwLmpzeFBhcnNlRWxlbWVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgY29uc3Qgc3Rh
cnRQb3MgPSB0aGlzLnN0YXRlLnN0YXJ0OworICAgICAgY29uc3Qgc3RhcnRMb2MgPSB0aGlzLnN0
YXRlLnN0YXJ0TG9jOworICAgICAgdGhpcy5uZXh0KCk7CisgICAgICByZXR1cm4gdGhpcy5qc3hQ
YXJzZUVsZW1lbnRBdChzdGFydFBvcywgc3RhcnRMb2MpOworICAgIH07CisKKyAgICAvL2V4cG9y
dCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7CisgICAgcGx1Z2luc0pzeEluZGV4SlMgPSBm
dW5jdGlvbihpbnN0YW5jZSkgeworICAgICAgaW5zdGFuY2UuZXh0ZW5kKCJwYXJzZUV4cHJBdG9t
IiwgZnVuY3Rpb24oaW5uZXIpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHJlZlNob3J0SGFu
ZERlZmF1bHRQb3MpIHsKKyAgICAgICAgICBpZiAodGhpcy5tYXRjaCh0dC5qc3hUZXh0KSkgewor
ICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMucGFyc2VMaXRlcmFsKHRoaXMuc3RhdGUudmFs
dWUsICJKU1hUZXh0Iik7CisgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmFiZWwv
YmFiZWwvaXNzdWVzLzIwNzgKKyAgICAgICAgICAgIG5vZGUuZXh0cmEgPSBudWxsOworICAgICAg
ICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1hdGNoKHR0Lmpz
eFRhZ1N0YXJ0KSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuanN4UGFyc2VFbGVtZW50KCk7
CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBpbm5lci5jYWxsKHRoaXMs
IHJlZlNob3J0SGFuZERlZmF1bHRQb3MpOworICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAg
IH0pOworCisgICAgICBpbnN0YW5jZS5leHRlbmQoInJlYWRUb2tlbiIsIGZ1bmN0aW9uKGlubmVy
KSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbihjb2RlKSB7CisgICAgICAgICAgaWYgKHRoaXMu
c3RhdGUuaW5Qcm9wZXJ0eU5hbWUpIHJldHVybiBpbm5lci5jYWxsKHRoaXMsIGNvZGUpOworCisg
ICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY3VyQ29udGV4dCgpOworCisgICAgICAgICAg
aWYgKGNvbnRleHQgPT09IHRjLmpfZXhwcikgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuanN4
UmVhZFRva2VuKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGNvbnRleHQgPT09IHRj
Lmpfb1RhZyB8fCBjb250ZXh0ID09PSB0Yy5qX2NUYWcpIHsKKyAgICAgICAgICAgIGlmIChpc0lk
ZW50aWZpZXJTdGFydChjb2RlKSkgeworICAgICAgICAgICAgICByZXR1cm4gdGhpcy5qc3hSZWFk
V29yZCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29kZSA9PT0gNjIpIHsK
KyAgICAgICAgICAgICAgKyt0aGlzLnN0YXRlLnBvczsKKyAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZmluaXNoVG9rZW4odHQuanN4VGFnRW5kKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKChjb2RlID09PSAzNCB8fCBjb2RlID09PSAzOSkgJiYgY29udGV4dCA9PT0gdGMual9v
VGFnKSB7CisgICAgICAgICAgICAgIHJldHVybiB0aGlzLmpzeFJlYWRTdHJpbmcoY29kZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGNvZGUgPT09IDYwICYm
IHRoaXMuc3RhdGUuZXhwckFsbG93ZWQpIHsKKyAgICAgICAgICAgICsrdGhpcy5zdGF0ZS5wb3M7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0dC5qc3hUYWdTdGFydCk7Cisg
ICAgICAgICAgfQorCisgICAgICAgICAgcmV0dXJuIGlubmVyLmNhbGwodGhpcywgY29kZSk7Cisg
ICAgICAgIH07CisgICAgICB9KTsKKworICAgICAgaW5zdGFuY2UuZXh0ZW5kKCJ1cGRhdGVDb250
ZXh0IiwgZnVuY3Rpb24oaW5uZXIpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHByZXZUeXBl
KSB7CisgICAgICAgICAgaWYgKHRoaXMubWF0Y2godHQuYnJhY2VMKSkgeworICAgICAgICAgICAg
Y29uc3QgY3VyQ29udGV4dCA9IHRoaXMuY3VyQ29udGV4dCgpOworICAgICAgICAgICAgaWYgKGN1
ckNvbnRleHQgPT09IHRjLmpfb1RhZykgeworICAgICAgICAgICAgICB0aGlzLnN0YXRlLmNvbnRl
eHQucHVzaCh0Yy5icmFjZUV4cHJlc3Npb24pOworICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJD
b250ZXh0ID09PSB0Yy5qX2V4cHIpIHsKKyAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0
LnB1c2godGMudGVtcGxhdGVRdWFzaSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICBpbm5lci5jYWxsKHRoaXMsIHByZXZUeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuc3RhdGUuZXhwckFsbG93ZWQgPSB0cnVlOworICAgICAgICAgIH0gZWxzZSBpZiAo
dGhpcy5tYXRjaCh0dC5zbGFzaCkgJiYgcHJldlR5cGUgPT09IHR0LmpzeFRhZ1N0YXJ0KSB7Cisg
ICAgICAgICAgICB0aGlzLnN0YXRlLmNvbnRleHQubGVuZ3RoIC09IDI7IC8vIGRvIG5vdCBjb25z
aWRlciBKU1ggZXhwciAtPiBKU1ggb3BlbiB0YWcgLT4gLi4uIGFueW1vcmUKKyAgICAgICAgICAg
IHRoaXMuc3RhdGUuY29udGV4dC5wdXNoKHRjLmpfY1RhZyk7IC8vIHJlY29uc2lkZXIgYXMgY2xv
c2luZyB0YWcgY29udGV4dAorICAgICAgICAgICAgdGhpcy5zdGF0ZS5leHByQWxsb3dlZCA9IGZh
bHNlOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gaW5uZXIuY2FsbCh0
aGlzLCBwcmV2VHlwZSk7CisgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgfSk7CisgICAg
fQorfQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9BUkVTLTYvQmFieWxvbi9pbnNwZWN0b3ItYmxv
Yi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0FSRVMtNi9CYWJ5bG9uL2luc3Bl
Y3Rvci1ibG9iLmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvQVJFUy02L0Jh
Ynlsb24vaW5zcGVjdG9yLWJsb2IuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTQ2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZSA9IGNsYXNz
IFNjcmlwdFN5bnRheFRyZWUgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0Cit7CisgICAgY29u
c3RydWN0b3Ioc291cmNlVGV4dCwgc2NyaXB0KQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKwor
ICAgICAgICBjb25zb2xlLmFzc2VydChzY3JpcHQgJiYgc2NyaXB0IGluc3RhbmNlb2YgV2ViSW5z
cGVjdG9yLlNjcmlwdCwgc2NyaXB0KTsKKworICAgICAgICB0aGlzLl9zY3JpcHQgPSBzY3JpcHQ7
CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxldCBzb3VyY2VUeXBlID0gdGhpcy5fc2Ny
aXB0LnNvdXJjZVR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHQuU291cmNlVHlwZS5Nb2R1bGUg
PyAibW9kdWxlIiA6ICJzY3JpcHQiOworICAgICAgICAgICAgbGV0IGVzcHJpbWFTeW50YXhUcmVl
ID0gZXNwcmltYS5wYXJzZShzb3VyY2VUZXh0LCB7cmFuZ2U6IHRydWUsIHNvdXJjZVR5cGV9KTsK
KyAgICAgICAgICAgIHRoaXMuX3N5bnRheFRyZWUgPSB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRh
eFRyZWUoZXNwcmltYVN5bnRheFRyZWUpOworICAgICAgICAgICAgdGhpcy5fcGFyc2VkU3VjY2Vz
c2Z1bGx5ID0gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgICAgIHRo
aXMuX3BhcnNlZFN1Y2Nlc3NmdWxseSA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5fc3ludGF4
VHJlZSA9IG51bGw7CisgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJDb3VsZG4ndCBwYXJzZSBK
YXZhU2NyaXB0IEZpbGU6ICIgKyBzY3JpcHQudXJsLCBlcnJvcik7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBQdWJsaWMKKworICAgIGdldCBwYXJzZWRTdWNjZXNzZnVsbHkoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlZFN1Y2Nlc3NmdWxseTsKKyAgICB9CisKKyAgICBm
b3JFYWNoTm9kZShjYWxsYmFjaykKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMu
X3BhcnNlZFN1Y2Nlc3NmdWxseSk7CisgICAgICAgIGlmICghdGhpcy5fcGFyc2VkU3VjY2Vzc2Z1
bGx5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX3JlY3Vyc2UodGhpcy5f
c3ludGF4VHJlZSwgY2FsbGJhY2ssIHRoaXMuX2RlZmF1bHRQYXJzZXJTdGF0ZSgpKTsKKyAgICB9
CisKKyAgICBmaWx0ZXIocHJlZGljYXRlLCBzdGFydE5vZGUpCisgICAgeworICAgICAgICBjb25z
b2xlLmFzc2VydChzdGFydE5vZGUgJiYgdGhpcy5fcGFyc2VkU3VjY2Vzc2Z1bGx5KTsKKyAgICAg
ICAgaWYgKCF0aGlzLl9wYXJzZWRTdWNjZXNzZnVsbHkpCisgICAgICAgICAgICByZXR1cm4gW107
CisKKyAgICAgICAgdmFyIG5vZGVzID0gW107CisgICAgICAgIGZ1bmN0aW9uIGZpbHRlcihub2Rl
LCBzdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHByZWRpY2F0ZShub2RlKSkKKyAg
ICAgICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHN0YXRlLnNraXBDaGlsZE5vZGVzID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIHRoaXMuX3JlY3Vyc2Uoc3RhcnROb2RlLCBmaWx0ZXIsIHRoaXMuX2RlZmF1bHRQYXJzZXJT
dGF0ZSgpKTsKKworICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgfQorCisgICAgY29udGFpbmVy
c09mT2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3Bh
cnNlZFN1Y2Nlc3NmdWxseSk7CisgICAgICAgIGlmICghdGhpcy5fcGFyc2VkU3VjY2Vzc2Z1bGx5
KQorICAgICAgICAgICAgcmV0dXJuIFtdOworCisgICAgICAgIGxldCBhbGxOb2RlcyA9IFtdOwor
ICAgICAgICBjb25zdCBzdGFydCA9IDA7CisgICAgICAgIGNvbnN0IGVuZCA9IDE7CisKKyAgICAg
ICAgdGhpcy5mb3JFYWNoTm9kZSgobm9kZSwgc3RhdGUpID0+IHsKKyAgICAgICAgICAgIGlmIChu
b2RlLnJhbmdlW2VuZF0gPCBvZmZzZXQpCisgICAgICAgICAgICAgICAgc3RhdGUuc2tpcENoaWxk
Tm9kZXMgPSB0cnVlOworICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2Vbc3RhcnRdID4gb2Zmc2V0
KQorICAgICAgICAgICAgICAgIHN0YXRlLnNob3VsZFN0b3BFYXJseSA9IHRydWU7CisgICAgICAg
ICAgICBpZiAobm9kZS5yYW5nZVtzdGFydF0gPD0gb2Zmc2V0ICYmIG5vZGUucmFuZ2VbZW5kXSA+
PSBvZmZzZXQpCisgICAgICAgICAgICAgICAgYWxsTm9kZXMucHVzaChub2RlKTsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgcmV0dXJuIGFsbE5vZGVzOworICAgIH0KKworICAgIGZpbHRlckJ5UmFu
Z2Uoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KHRoaXMuX3BhcnNlZFN1Y2Nlc3NmdWxseSk7CisgICAgICAgIGlmICghdGhpcy5fcGFyc2VkU3Vj
Y2Vzc2Z1bGx5KQorICAgICAgICAgICAgcmV0dXJuIFtdOworCisgICAgICAgIHZhciBhbGxOb2Rl
cyA9IFtdOworICAgICAgICB2YXIgc3RhcnQgPSAwOworICAgICAgICB2YXIgZW5kID0gMTsKKyAg
ICAgICAgZnVuY3Rpb24gZmlsdGVyRm9yTm9kZXNJblJhbmdlKG5vZGUsIHN0YXRlKQorICAgICAg
ICB7CisgICAgICAgICAgICAvLyBwcm9ncmFtIHN0YXJ0ICAgICAgICByYW5nZSAgICAgICAgICAg
IHByb2dyYW0gZW5kCisgICAgICAgICAgICAvLyBbICAgICAgICAgICAgICAgICBbICAgICAgICAg
XSAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIC8vICAgICAgICAgICAgWyBdICBbICAgWyAg
ICAgICAgXSBdICBbIF0KKworICAgICAgICAgICAgLy8gSWYgYSBub2RlJ3MgcmFuZ2UgZW5kcyBi
ZWZvcmUgdGhlIHJhbmdlIHdlJ3JlIGludGVyZXN0ZWQgaW4gc3RhcnRzLCB3ZSBkb24ndCBuZWVk
IHRvIHNlYXJjaCBhbnkgb2YgaXRzCisgICAgICAgICAgICAvLyBlbmNsb3NpbmcgcmFuZ2VzLCBi
ZWNhdXNlLCBieSBkZWZpbml0aW9uLCB0aG9zZSBlbmNsb3NpbmcgcmFuZ2VzIGFyZSBjb250YWlu
ZWQgd2l0aGluIHRoaXMgbm9kZSdzIHJhbmdlLgorICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2Vb
ZW5kXSA8IHN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgICAgIHN0YXRlLnNraXBDaGlsZE5vZGVz
ID0gdHJ1ZTsKKworICAgICAgICAgICAgLy8gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBub2Rl
cyB3aG9zZSBzdGFydCBwb3NpdGlvbiBpcyB3aXRoaW4gb3VyIHJhbmdlLgorICAgICAgICAgICAg
aWYgKHN0YXJ0T2Zmc2V0IDw9IG5vZGUucmFuZ2Vbc3RhcnRdICYmIG5vZGUucmFuZ2Vbc3RhcnRd
IDw9IGVuZE9mZnNldCkKKyAgICAgICAgICAgICAgICBhbGxOb2Rlcy5wdXNoKG5vZGUpOworCisg
ICAgICAgICAgICAvLyBPbmNlIHdlIHNlZSBub2RlcyB0aGF0IHN0YXJ0IGJleW9uZCBvdXIgcmFu
Z2UsIHdlIGNhbiBxdWl0IHRyYXZlcnNpbmcgdGhlIEFTVC4gV2UgY2FuIGRvIHRoaXMgc2FmZWx5
CisgICAgICAgICAgICAvLyBiZWNhdXNlIHdlIGtub3cgdGhlIEFTVCBpcyB0cmF2ZXJzZWQgdXNp
bmcgZGVwdGggZmlyc3Qgc2VhcmNoLCBzbyBpdCB3aWxsIHRyYXZlcnNlIGludG8gZW5jbG9zaW5n
IHJhbmdlcworICAgICAgICAgICAgLy8gYmVmb3JlIGl0IHRyYXZlcnNlcyBpbnRvIGFkamFjZW50
IHJhbmdlcy4KKyAgICAgICAgICAgIGlmIChub2RlLnJhbmdlW3N0YXJ0XSA+IGVuZE9mZnNldCkK
KyAgICAgICAgICAgICAgICBzdGF0ZS5zaG91bGRTdG9wRWFybHkgPSB0cnVlOworICAgICAgICB9
CisKKyAgICAgICAgdGhpcy5mb3JFYWNoTm9kZShmaWx0ZXJGb3JOb2Rlc0luUmFuZ2UpOworCisg
ICAgICAgIHJldHVybiBhbGxOb2RlczsKKyAgICB9CisKKyAgICBjb250YWluc05vbkVtcHR5UmV0
dXJuU3RhdGVtZW50KHN0YXJ0Tm9kZSkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHN0
YXJ0Tm9kZSAmJiB0aGlzLl9wYXJzZWRTdWNjZXNzZnVsbHkpOworICAgICAgICBpZiAoIXRoaXMu
X3BhcnNlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBpZiAoc3RhcnROb2RlLmF0dGFjaG1lbnRzLl9oYXNOb25FbXB0eVJldHVyblN0YXRlbWVudCAh
PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuIHN0YXJ0Tm9kZS5hdHRhY2htZW50cy5f
aGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQ7CisKKyAgICAgICAgZnVuY3Rpb24gcmVtb3ZlRnVu
Y3Rpb25zRmlsdGVyKG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBub2RlLnR5
cGUgIT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRXhw
cmVzc2lvbgorICAgICAgICAgICAgICAgICYmIG5vZGUudHlwZSAhPT0gV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25EZWNsYXJhdGlvbgorICAgICAgICAgICAg
ICAgICYmIG5vZGUudHlwZSAhPT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5
cGUuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb247CisgICAgICAgIH0KKworICAgICAgICB2YXIgbm9k
ZXMgPSB0aGlzLmZpbHRlcihyZW1vdmVGdW5jdGlvbnNGaWx0ZXIsIHN0YXJ0Tm9kZSk7CisgICAg
ICAgIHZhciBoYXNOb25FbXB0eVJldHVyblN0YXRlbWVudCA9IGZhbHNlOworICAgICAgICB2YXIg
cmV0dXJuU3RhdGVtZW50VHlwZSA9IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVU
eXBlLlJldHVyblN0YXRlbWVudDsKKyAgICAgICAgZm9yICh2YXIgbm9kZSBvZiBub2Rlcykgewor
ICAgICAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gcmV0dXJuU3RhdGVtZW50VHlwZSAmJiBub2Rl
LmFyZ3VtZW50KSB7CisgICAgICAgICAgICAgICAgaGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQg
PSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgc3RhcnROb2RlLmF0dGFjaG1lbnRzLl9oYXNOb25FbXB0eVJldHVyblN0YXRl
bWVudCA9IGhhc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50OworCisgICAgICAgIHJldHVybiBoYXNO
b25FbXB0eVJldHVyblN0YXRlbWVudDsKKyAgICB9CisKKyAgICBzdGF0aWMgZnVuY3Rpb25SZXR1
cm5EaXZvdChub2RlKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQobm9kZS50eXBlID09
PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkRlY2xhcmF0
aW9uIHx8IG5vZGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5
cGUuRnVuY3Rpb25FeHByZXNzaW9uIHx8IG5vZGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuTm9kZVR5cGUuTWV0aG9kRGVmaW5pdGlvbiB8fCBub2RlLnR5cGUgPT09IFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkFycm93RnVuY3Rpb25FeHByZXNz
aW9uKTsKKworICAgICAgICAvLyBDT01QQVRJQklMSVRZIChpT1MgOSk6IExlZ2FjeSBCYWNrZW5k
cyB2aWV3IHRoZSByZXR1cm4gdHlwZSBhcyBiZWluZyB0aGUgb3BlbmluZyAieyIgb2YgdGhlIGZ1
bmN0aW9uIGJvZHkuCisgICAgICAgIC8vIEFmdGVyIGlPUyA5LCB0aGlzIGlzIHRvIG1vdmUgdG8g
dGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiBzdGF0ZW1lbnQvZXhwcmVzc2lvbi4gU2VlIGJlbG93
OgorICAgICAgICAvLyBGSVhNRTogTmVlZCBhIGJldHRlciB3YXkgdG8gZGV0ZXJtaW5lIGJhY2tl
bmQgdmVyc2lvbnMuIFVzaW5nIERPTS5wc2V1ZG9FbGVtZW50IGJlY2F1c2UgdGhhdCB3YXMgYWRk
ZWQgYWZ0ZXIgaU9TIDkuCisgICAgICAgIGlmICghRE9NQWdlbnQuaGFzRXZlbnQoInBzZXVkb0Vs
ZW1lbnRBZGRlZCIpKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUuYm9keS5yYW5nZVswXTsKKwor
ICAgICAgICAvLyAiZiIgaW4gImZ1bmN0aW9uIi4gInMiIGluICJzZXQiLiAiZyIgaW4gImdldCIu
IEZpcnN0IGxldHRlciBpbiBhbnkgbWV0aG9kIG5hbWUgZm9yIGNsYXNzZXMgYW5kIG9iamVjdCBs
aXRlcmFscy4KKyAgICAgICAgLy8gVGhlICJbIiBmb3IgY29tcHV0ZWQgbWV0aG9kcyBpbiBjbGFz
c2VzIGFuZCBvYmplY3QgbGl0ZXJhbHMuCisgICAgICAgIHJldHVybiBub2RlLnR5cGVQcm9maWxp
bmdSZXR1cm5EaXZvdDsKKyAgICB9CisKKyAgICB1cGRhdGVUeXBlcyhub2Rlc1RvVXBkYXRlLCBj
YWxsYmFjaykKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KFJ1bnRpbWVBZ2VudC5nZXRS
dW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMpOworICAgICAgICBjb25zb2xlLmFzc2Vy
dChBcnJheS5pc0FycmF5KG5vZGVzVG9VcGRhdGUpICYmIHRoaXMuX3BhcnNlZFN1Y2Nlc3NmdWxs
eSk7CisKKyAgICAgICAgaWYgKCF0aGlzLl9wYXJzZWRTdWNjZXNzZnVsbHkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgdmFyIGFsbFJlcXVlc3RzID0gW107CisgICAgICAgIHZhciBh
bGxSZXF1ZXN0Tm9kZXMgPSBbXTsKKyAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc2NyaXB0
LmlkOworCisgICAgICAgIGZvciAodmFyIG5vZGUgb2Ygbm9kZXNUb1VwZGF0ZSkgeworICAgICAg
ICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25EZWNsYXJhdGlvbjoKKyAgICAgICAg
ICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25F
eHByZXNzaW9uOgorICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5Ob2RlVHlwZS5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICBmb3Ig
KHZhciBwYXJhbSBvZiBub2RlLnBhcmFtcykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZh
ciBpZGVudGlmaWVyIG9mIHRoaXMuX2dhdGhlcklkZW50aWZpZXJzSW5EZWNsYXJhdGlvbihwYXJh
bSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzLnB1c2goeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3I6IFdlYkluc3Bl
Y3Rvci5TY3JpcHRTeW50YXhUcmVlLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IuTm9ybWFs
RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VJRCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkaXZvdDogaWRlbnRpZmllci5yYW5nZVswXQorICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0
Tm9kZXMucHVzaChpZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzLnB1c2goeworICAgICAgICAg
ICAgICAgICAgICB0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yOiBXZWJJbnNwZWN0b3IuU2NyaXB0
U3ludGF4VHJlZS5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yLkZ1bmN0aW9uUmV0dXJuLAor
ICAgICAgICAgICAgICAgICAgICBzb3VyY2VJRCwKKyAgICAgICAgICAgICAgICAgICAgZGl2b3Q6
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLmZ1bmN0aW9uUmV0dXJuRGl2b3Qobm9kZSkK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0Tm9kZXMucHVz
aChub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdG9yOgorICAg
ICAgICAgICAgICAgIGZvciAodmFyIGlkZW50aWZpZXIgb2YgdGhpcy5fZ2F0aGVySWRlbnRpZmll
cnNJbkRlY2xhcmF0aW9uKG5vZGUuaWQpKSB7CisgICAgICAgICAgICAgICAgICAgIGFsbFJlcXVl
c3RzLnB1c2goeworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZUluZm9ybWF0aW9uRGVzY3Jp
cHRvcjogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuVHlwZVByb2ZpbGVyU2VhcmNoRGVz
Y3JpcHRvci5Ob3JtYWxFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNl
SUQsCisgICAgICAgICAgICAgICAgICAgICAgICBkaXZvdDogaWRlbnRpZmllci5yYW5nZVswXQor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgYWxsUmVxdWVzdE5v
ZGVzLnB1c2goaWRlbnRpZmllcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc29sZS5hc3Nl
cnQoYWxsUmVxdWVzdHMubGVuZ3RoID09PSBhbGxSZXF1ZXN0Tm9kZXMubGVuZ3RoKTsKKworICAg
ICAgICBmdW5jdGlvbiBoYW5kbGVUeXBlcyhlcnJvciwgdHlwZUluZm9ybWF0aW9uQXJyYXkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHR5cGVJbmZvcm1hdGlvbkFycmF5Lmxlbmd0
aCA9PT0gYWxsUmVxdWVzdHMubGVuZ3RoKTsKKworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0eXBlSW5mb3JtYXRpb25BcnJheS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAg
IHZhciBub2RlID0gYWxsUmVxdWVzdE5vZGVzW2ldOworICAgICAgICAgICAgICAgIHZhciB0eXBl
SW5mb3JtYXRpb24gPSBXZWJJbnNwZWN0b3IuVHlwZURlc2NyaXB0aW9uLmZyb21QYXlsb2FkKHR5
cGVJbmZvcm1hdGlvbkFycmF5W2ldKTsKKyAgICAgICAgICAgICAgICBpZiAoYWxsUmVxdWVzdHNb
aV0udHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvciA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRh
eFRyZWUuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5GdW5jdGlvblJldHVybikKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS5hdHRhY2htZW50cy5yZXR1cm5UeXBlcyA9IHR5cGVJbmZvcm1h
dGlvbjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5vZGUuYXR0
YWNobWVudHMudHlwZXMgPSB0eXBlSW5mb3JtYXRpb247CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGNhbGxiYWNrKGFsbFJlcXVlc3ROb2Rlcyk7CisgICAgICAgIH0KKworICAgICAgICB0
aGlzLl9zY3JpcHQudGFyZ2V0LlJ1bnRpbWVBZ2VudC5nZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJs
ZXNBdE9mZnNldHMoYWxsUmVxdWVzdHMsIGhhbmRsZVR5cGVzKTsKKyAgICB9CisKKyAgICAvLyBQ
cml2YXRlCisKKyAgICBfZ2F0aGVySWRlbnRpZmllcnNJbkRlY2xhcmF0aW9uKG5vZGUpCisgICAg
eworICAgICAgICBmdW5jdGlvbiBnYXRoZXJJZGVudGlmaWVycyhub2RlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuSWRlbnRpZmllcjoKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFtub2RlXTsKKyAgICAgICAgICAgICAgICBjYXNlIFdlYkluc3Bl
Y3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlByb3BlcnR5OgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2F0aGVySWRlbnRpZmllcnMobm9kZS52YWx1ZSk7CisgICAgICAgICAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5PYmplY3RQYXR0
ZXJuOgorICAgICAgICAgICAgICAgICAgICB2YXIgaWRlbnRpZmllcnMgPSBbXTsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgb2Ygbm9kZS5wcm9wZXJ0aWVzKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpZGVudGlmaWVyIG9mIGdhdGhlcklkZW50aWZp
ZXJzKHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVycy5w
dXNoKGlkZW50aWZpZXIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBpZGVudGlmaWVyczsKKyAgICAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkFycmF5UGF0dGVybjoKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGlkZW50aWZpZXJzID0gW107CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFy
IGVsZW1lbnQgb2Ygbm9kZS5lbGVtZW50cykgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaWRlbnRpZmllciBvZiBnYXRoZXJJZGVudGlmaWVycyhlbGVtZW50KSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyczsK
KyAgICAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVU
eXBlLkFzc2lnbm1lbnRQYXR0ZXJuOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2F0aGVy
SWRlbnRpZmllcnMobm9kZS5sZWZ0KTsKKyAgICAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlJlc3RFbGVtZW50OgorICAgICAgICAgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUmVzdFByb3BlcnR5
OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2F0aGVySWRlbnRpZmllcnMobm9kZS5hcmd1
bWVudCk7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgY29u
c29sZS5hc3NlcnQoZmFsc2UsICJVbmV4cGVjdGVkIG5vZGUgdHlwZSBpbiB2YXJpYWJsZSBkZWNs
YXJhdG9yOiAiICsgbm9kZS50eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc29sZS5hc3NlcnQobm9kZS50
eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JZGVudGlmaWVy
IHx8IG5vZGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUu
T2JqZWN0UGF0dGVybiB8fCBub2RlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhU
cmVlLk5vZGVUeXBlLkFycmF5UGF0dGVybiB8fCBub2RlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlJlc3RFbGVtZW50IHx8IG5vZGUudHlwZSA9PT0gV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUmVzdFByb3BlcnR5KTsKKworICAg
ICAgICByZXR1cm4gZ2F0aGVySWRlbnRpZmllcnMobm9kZSk7CisgICAgfQorCisgICAgX2RlZmF1
bHRQYXJzZXJTdGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgc2hv
dWxkU3RvcEVhcmx5OiBmYWxzZSwKKyAgICAgICAgICAgIHNraXBDaGlsZE5vZGVzOiBmYWxzZQor
ICAgICAgICB9OworICAgIH0KKworICAgIF9yZWN1cnNlKG5vZGUsIGNhbGxiYWNrLCBzdGF0ZSkK
KyAgICB7CisgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBpZiAoc3RhdGUuc2hvdWxkU3RvcEVhcmx5IHx8IHN0YXRlLnNraXBDaGlsZE5vZGVzKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKworICAg
ICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgeworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlLkFzc2lnbm1lbnRFeHByZXNzaW9uOgorICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLmxlZnQsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0
aGlzLl9yZWN1cnNlKG5vZGUucmlnaHQsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlw
ZS5BcnJheUV4cHJlc3Npb246CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRh
eFRyZWUuTm9kZVR5cGUuQXJyYXlQYXR0ZXJuOgorICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFy
cmF5KG5vZGUuZWxlbWVudHMsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Bc3Np
Z25tZW50UGF0dGVybjoKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5sZWZ0LCBjYWxs
YmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnJpZ2h0LCBjYWxs
YmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVj
dG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQXdhaXRFeHByZXNzaW9uOgorICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUu
Tm9kZVR5cGUuQmxvY2tTdGF0ZW1lbnQ6CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXko
bm9kZS5ib2R5LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQmluYXJ5RXhwcmVz
c2lvbjoKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5sZWZ0LCBjYWxsYmFjaywgc3Rh
dGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnJpZ2h0LCBjYWxsYmFjaywgc3Rh
dGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuTm9kZVR5cGUuQnJlYWtTdGF0ZW1lbnQ6CisgICAgICAgICAgICB0aGlzLl9y
ZWN1cnNlKG5vZGUubGFiZWwsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5DYXRj
aENsYXVzZToKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5wYXJhbSwgY2FsbGJhY2ss
IHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBjYWxsYmFjaywg
c3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQ2FsbEV4cHJlc3Npb246CisgICAgICAgICAgICB0aGlz
Ll9yZWN1cnNlKG5vZGUuY2FsbGVlLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhp
cy5fcmVjdXJzZUFycmF5KG5vZGUuYXJndW1lbnRzLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUu
Tm9kZVR5cGUuQ2xhc3NCb2R5OgorICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUu
Ym9keSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkNsYXNzRGVjbGFyYXRpb246
CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQ2xh
c3NFeHByZXNzaW9uOgorICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmlkLCBjYWxsYmFj
aywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnN1cGVyQ2xhc3MsIGNh
bGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgY2Fs
bGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3Bl
Y3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkNvbnRpbnVlU3RhdGVtZW50OgorICAgICAg
ICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxhYmVsLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUu
Tm9kZVR5cGUuRG9XaGlsZVN0YXRlbWVudDoKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9k
ZS5ib2R5LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LnRlc3QsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5FeHByZXNzaW9uU3RhdGVt
ZW50OgorICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmV4cHJlc3Npb24sIGNhbGxiYWNr
LCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Gb3JTdGF0ZW1lbnQ6CisgICAgICAgICAgICB0aGlz
Ll9yZWN1cnNlKG5vZGUuaW5pdCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMu
X3JlY3Vyc2Uobm9kZS50ZXN0LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5f
cmVjdXJzZShub2RlLnVwZGF0ZSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMu
X3JlY3Vyc2Uobm9kZS5ib2R5LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRm9y
SW5TdGF0ZW1lbnQ6CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUu
Tm9kZVR5cGUuRm9yT2ZTdGF0ZW1lbnQ6CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUu
bGVmdCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5y
aWdodCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5i
b2R5LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25EZWNsYXJhdGlv
bjoKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5G
dW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRh
eFRyZWUuTm9kZVR5cGUuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAgICB0aGlz
Ll9yZWN1cnNlKG5vZGUuaWQsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9y
ZWN1cnNlQXJyYXkobm9kZS5wYXJhbXMsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0
aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
LklmU3RhdGVtZW50OgorICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnRlc3QsIGNhbGxi
YWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuY29uc2VxdWVudCwg
Y2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hbHRlcm5h
dGUsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5MYWJlbGVkU3RhdGVtZW50Ogor
ICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxhYmVsLCBjYWxsYmFjaywgc3RhdGUpOwor
ICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGNhbGxiYWNrLCBzdGF0ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5Mb2dpY2FsRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2Uobm9kZS5sZWZ0LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJz
ZShub2RlLnJpZ2h0LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTWVtYmVyRXhw
cmVzc2lvbjoKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5vYmplY3QsIGNhbGxiYWNr
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucHJvcGVydHksIGNhbGxi
YWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5NZXRob2REZWZpbml0aW9uOgorICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZShub2RlLmtleSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS52YWx1ZSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVU
eXBlLk5ld0V4cHJlc3Npb246CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuY2FsbGVl
LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUu
YXJndW1lbnRzLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuT2JqZWN0RXhwcmVz
c2lvbjoKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlw
ZS5PYmplY3RQYXR0ZXJuOgorICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUucHJv
cGVydGllcywgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlByb2dyYW06CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5ib2R5LCBjYWxsYmFjaywgc3RhdGUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRh
eFRyZWUuTm9kZVR5cGUuUHJvcGVydHk6CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUu
a2V5LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnZh
bHVlLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUmVzdEVsZW1lbnQ6CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYXJndW1lbnQsIGNhbGxiYWNrLCBzdGF0ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5SZXN0UHJvcGVydHk6CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5v
ZGUuYXJndW1lbnQsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5SZXR1cm5TdGF0
ZW1lbnQ6CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYXJndW1lbnQsIGNhbGxiYWNr
LCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5TZXF1ZW5jZUV4cHJlc3Npb246CisgICAgICAgICAg
ICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5leHByZXNzaW9ucywgY2FsbGJhY2ssIHN0YXRlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50
YXhUcmVlLk5vZGVUeXBlLlNwcmVhZEVsZW1lbnQ6CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
KG5vZGUuYXJndW1lbnQsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5TcHJlYWRQ
cm9wZXJ0eToKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hcmd1bWVudCwgY2FsbGJh
Y2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlN3aXRjaFN0YXRlbWVudDoKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5kaXNjcmltaW5hbnQsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5jYXNlcywgY2FsbGJhY2ssIHN0YXRlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50
YXhUcmVlLk5vZGVUeXBlLlN3aXRjaENhc2U6CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5v
ZGUudGVzdCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJh
eShub2RlLmNvbnNlcXVlbnQsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Db25k
aXRpb25hbEV4cHJlc3Npb246CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUudGVzdCwg
Y2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5jb25zZXF1
ZW50LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFs
dGVybmF0ZSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlRhZ2dlZFRlbXBsYXRl
RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS50YWcsIGNhbGxiYWNr
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucXVhc2ksIGNhbGxiYWNr
LCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5UZW1wbGF0ZUxpdGVyYWw6CisgICAgICAgICAgICB0
aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5xdWFzaXMsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5leHByZXNzaW9ucywgY2FsbGJhY2ssIHN0YXRl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLlRocm93U3RhdGVtZW50OgorICAgICAgICAgICAgdGhpcy5fcmVj
dXJzZShub2RlLmFyZ3VtZW50LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVHJ5
U3RhdGVtZW50OgorICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJsb2NrLCBjYWxsYmFj
aywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmhhbmRsZXIsIGNhbGxi
YWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuZmluYWxpemVyLCBj
YWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVW5hcnlFeHByZXNzaW9uOgorICAgICAg
ICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBjYWxsYmFjaywgc3RhdGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUuTm9kZVR5cGUuVXBkYXRlRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZS5hcmd1bWVudCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlZhcmlhYmxl
RGVjbGFyYXRpb246CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5kZWNsYXJh
dGlvbnMsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0
b3I6CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuaWQsIGNhbGxiYWNrLCBzdGF0ZSk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuaW5pdCwgY2FsbGJhY2ssIHN0YXRlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50
YXhUcmVlLk5vZGVUeXBlLldoaWxlU3RhdGVtZW50OgorICAgICAgICAgICAgdGhpcy5fcmVjdXJz
ZShub2RlLnRlc3QsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
KG5vZGUuYm9keSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLldpdGhTdGF0ZW1l
bnQ6CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUub2JqZWN0LCBjYWxsYmFjaywgc3Rh
dGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGNhbGxiYWNrLCBzdGF0
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0
U3ludGF4VHJlZS5Ob2RlVHlwZS5ZaWVsZEV4cHJlc3Npb246CisgICAgICAgICAgICB0aGlzLl9y
ZWN1cnNlKG5vZGUuYXJndW1lbnQsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAvLyBNb2R1bGVzLgorCisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRXhwb3J0QWxsRGVjbGFyYXRpb246CisgICAgICAgICAg
ICB0aGlzLl9yZWN1cnNlKG5vZGUuc291cmNlLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuRXhwb3J0TmFtZWREZWNsYXJhdGlvbjoKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZS5kZWNsYXJhdGlvbiwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3Jl
Y3Vyc2VBcnJheShub2RlLnNwZWNpZmllcnMsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAg
ICB0aGlzLl9yZWN1cnNlKG5vZGUuc291cmNlLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOgorICAgICAgICAgICAgdGhpcy5fcmVjdXJz
ZShub2RlLmRlY2xhcmF0aW9uLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRXhw
b3J0U3BlY2lmaWVyOgorICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxvY2FsLCBjYWxs
YmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmV4cG9ydGVkLCBj
YWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuSW1wb3J0RGVjbGFyYXRpb246CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5zcGVjaWZpZXJzLCBjYWxsYmFjaywgc3Rh
dGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnNvdXJjZSwgY2FsbGJhY2ssIHN0
YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlLkltcG9ydERlZmF1bHRTcGVjaWZpZXI6CisgICAgICAgICAg
ICB0aGlzLl9yZWN1cnNlKG5vZGUubG9jYWwsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2Rl
VHlwZS5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI6CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
KG5vZGUubG9jYWwsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JbXBvcnRTcGVj
aWZpZXI6CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuaW1wb3J0ZWQsIGNhbGxiYWNr
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUubG9jYWwsIGNhbGxiYWNr
LCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBBbGwgdGhlIGxlYWYg
bm9kZXMgZ28gaGVyZS4KKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5Ob2RlVHlwZS5EZWJ1Z2dlclN0YXRlbWVudDoKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5FbXB0eVN0YXRlbWVudDoKKyAgICAgICAgY2FzZSBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JZGVudGlmaWVyOgorICAgICAg
ICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkltcG9ydDoKKyAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5MaXRlcmFs
OgorICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLk1l
dGFQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5TdXBlcjoKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5Ob2RlVHlwZS5UaGlzRXhwcmVzc2lvbjoKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5UZW1wbGF0ZUVsZW1lbnQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRlLnNraXBDaGlsZE5vZGVzID0gZmFsc2U7Cisg
ICAgfQorCisgICAgX3JlY3Vyc2VBcnJheShhcnJheSwgY2FsbGJhY2ssIHN0YXRlKQorICAgIHsK
KyAgICAgICAgZm9yICh2YXIgbm9kZSBvZiBhcnJheSkKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2Uobm9kZSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9u
IHRyYW5zbGF0ZXMgZnJvbSBlc3ByaW1hJ3MgQWJzdHJhY3QgU3ludGF4IFRyZWUgdG8gb3Vycy4K
KyAgICAvLyBNb3N0bHksIHRoaXMgaXMganVzdCB0aGUgaWRlbnRpdHkgZnVuY3Rpb24uIFdlJ3Zl
IGFkZGVkIGFuIGV4dHJhIHR5cGVQcm9maWxpbmdSZXR1cm5EaXZvdCBwcm9wZXJ0eSBmb3IgZnVu
Y3Rpb25zL21ldGhvZHMuCisgICAgLy8gT3VyIEFTVCBjb21wbGllcyB3aXRoIHRoZSBNb3ppbGxh
IHBhcnNlciBBUEk6CisgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMv
ZG9jcy9Nb3ppbGxhL1Byb2plY3RzL1NwaWRlck1vbmtleS9QYXJzZXJfQVBJCisgICAgX2NyZWF0
ZUludGVybmFsU3ludGF4VHJlZShub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFub2RlKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgdmFyIHJlc3VsdCA9IG51bGw7CisgICAg
ICAgIHN3aXRjaCAobm9kZS50eXBlKSB7CisgICAgICAgIGNhc2UgIkFycmF5RXhwcmVzc2lvbiI6
CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVj
dG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQXJyYXlFeHByZXNzaW9uLAorICAgICAgICAg
ICAgICAgIGVsZW1lbnRzOiBub2RlLmVsZW1lbnRzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5
bnRheFRyZWUsIHRoaXMpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgIkFycmF5UGF0dGVybiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAg
ICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQXJy
YXlQYXR0ZXJuLAorICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBub2RlLmVsZW1lbnRzLm1hcCh0
aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUsIHRoaXMpCisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkFycm93RnVuY3Rpb25FeHByZXNzaW9uIjoK
KyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiwKKyAg
ICAgICAgICAgICAgICBpZDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuaWQp
LAorICAgICAgICAgICAgICAgIHBhcmFtczogbm9kZS5wYXJhbXMubWFwKHRoaXMuX2NyZWF0ZUlu
dGVybmFsU3ludGF4VHJlZSwgdGhpcyksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3Jl
YXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSksCisgICAgICAgICAgICAgICAgZ2VuZXJh
dG9yOiBub2RlLmdlbmVyYXRvciwKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBub2RlLmV4
cHJlc3Npb24sIC8vIEJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgYm9keSBhIHNpbmdsZSBleHBy
ZXNzaW9uIG9yIGEgYmxvY2sgc3RhdGVtZW50LgorICAgICAgICAgICAgICAgIGFzeW5jOiBub2Rl
LmFzeW5jLAorICAgICAgICAgICAgICAgIHR5cGVQcm9maWxpbmdSZXR1cm5EaXZvdDogbm9kZS5y
YW5nZVswXQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICJBc3NpZ25tZW50RXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAg
ICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQXNz
aWdubWVudEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG5vZGUub3BlcmF0
b3IsCisgICAgICAgICAgICAgICAgbGVmdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVl
KG5vZGUubGVmdCksCisgICAgICAgICAgICAgICAgcmlnaHQ6IHRoaXMuX2NyZWF0ZUludGVybmFs
U3ludGF4VHJlZShub2RlLnJpZ2h0KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICJBc3NpZ25tZW50UGF0dGVybiI6CisgICAgICAgICAgICByZXN1bHQg
PSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUu
Tm9kZVR5cGUuQXNzaWdubWVudFBhdHRlcm4sCisgICAgICAgICAgICAgICAgbGVmdDogdGhpcy5f
Y3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUubGVmdCksCisgICAgICAgICAgICAgICAgcmln
aHQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnJpZ2h0KSwKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiQXdhaXRFeHByZXNzaW9u
IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Bd2FpdEV4cHJlc3Npb24sCisgICAgICAg
ICAgICAgICAgYXJndW1lbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmFy
Z3VtZW50KSwKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAiQmxvY2tTdGF0ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAg
ICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkJsb2NrU3Rh
dGVtZW50LAorICAgICAgICAgICAgICAgIGJvZHk6IG5vZGUuYm9keS5tYXAodGhpcy5fY3JlYXRl
SW50ZXJuYWxTeW50YXhUcmVlLCB0aGlzKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlICJCaW5hcnlFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5Ob2RlVHlwZS5CaW5hcnlFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBu
b2RlLm9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMuX2NyZWF0ZUludGVybmFs
U3ludGF4VHJlZShub2RlLmxlZnQpLAorICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVh
dGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5yaWdodCkKKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiQnJlYWtTdGF0ZW1lbnQiOgorICAgICAgICAgICAg
cmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50
YXhUcmVlLk5vZGVUeXBlLkJyZWFrU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxhYmVsOiB0
aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5sYWJlbCkKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiQ2FsbEV4cHJlc3Npb24iOgorICAg
ICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkNhbGxFeHByZXNzaW9uLAorICAgICAgICAgICAgICAg
IGNhbGxlZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuY2FsbGVlKSwKKyAg
ICAgICAgICAgICAgICBhcmd1bWVudHM6IG5vZGUuYXJndW1lbnRzLm1hcCh0aGlzLl9jcmVhdGVJ
bnRlcm5hbFN5bnRheFRyZWUsIHRoaXMpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgIkNhdGNoQ2xhdXNlIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2Rl
VHlwZS5DYXRjaENsYXVzZSwKKyAgICAgICAgICAgICAgICBwYXJhbTogdGhpcy5fY3JlYXRlSW50
ZXJuYWxTeW50YXhUcmVlKG5vZGUucGFyYW0pLAorICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMu
X2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJvZHkpCisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkNsYXNzQm9keSI6CisgICAgICAgICAgICBy
ZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRh
eFRyZWUuTm9kZVR5cGUuQ2xhc3NCb2R5LAorICAgICAgICAgICAgICAgIGJvZHk6IG5vZGUuYm9k
eS5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLCB0aGlzKQorICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJDbGFzc0RlY2xhcmF0aW9uIjoK
KyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5DbGFzc0RlY2xhcmF0aW9uLAorICAgICAgICAg
ICAgICAgIGlkOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5pZCksCisgICAg
ICAgICAgICAgICAgc3VwZXJDbGFzczogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5v
ZGUuc3VwZXJDbGFzcyksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJu
YWxTeW50YXhUcmVlKG5vZGUuYm9keSksCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgIkNsYXNzRXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQg
PSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUu
Tm9kZVR5cGUuQ2xhc3NFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGlkOiB0aGlzLl9jcmVh
dGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5pZCksCisgICAgICAgICAgICAgICAgc3VwZXJDbGFz
czogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuc3VwZXJDbGFzcyksCisgICAg
ICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9k
eSksCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkNv
bmRpdGlvbmFsRXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAg
ICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQ29uZGl0
aW9uYWxFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIHRlc3Q6IHRoaXMuX2NyZWF0ZUludGVy
bmFsU3ludGF4VHJlZShub2RlLnRlc3QpLAorICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQ6IHRo
aXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmNvbnNlcXVlbnQpLAorICAgICAgICAg
ICAgICAgIGFsdGVybmF0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYWx0
ZXJuYXRlKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICJDb250aW51ZVN0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAg
ICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQ29udGlu
dWVTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX2NyZWF0ZUludGVybmFs
U3ludGF4VHJlZShub2RlLmxhYmVsKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICJEb1doaWxlU3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5Eb1doaWxlU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2Ny
ZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJvZHkpLAorICAgICAgICAgICAgICAgIHRlc3Q6
IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnRlc3QpCisgICAgICAgICAgICB9
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkRlYnVnZ2VyU3RhdGVtZW50IjoK
KyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5EZWJ1Z2dlclN0YXRlbWVudAorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJFbXB0eVN0YXRlbWVudCI6
CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVj
dG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRW1wdHlTdGF0ZW1lbnQKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiRXhwcmVzc2lvblN0YXRlbWVu
dCI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRXhwcmVzc2lvblN0YXRlbWVudCwKKyAg
ICAgICAgICAgICAgICBleHByZXNzaW9uOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUo
bm9kZS5leHByZXNzaW9uKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICJGb3JTdGF0ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAg
ICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZv
clN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBpbml0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5
bnRheFRyZWUobm9kZS5pbml0KSwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0aGlzLl9jcmVhdGVJ
bnRlcm5hbFN5bnRheFRyZWUobm9kZS50ZXN0KSwKKyAgICAgICAgICAgICAgICB1cGRhdGU6IHRo
aXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnVwZGF0ZSksCisgICAgICAgICAgICAg
ICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSkKKyAgICAg
ICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiRm9ySW5TdGF0ZW1l
bnQiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZvckluU3RhdGVtZW50LAorICAgICAg
ICAgICAgICAgIGxlZnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmxlZnQp
LAorICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUo
bm9kZS5yaWdodCksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxT
eW50YXhUcmVlKG5vZGUuYm9keSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAiRm9yT2ZTdGF0ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0ID0gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVU
eXBlLkZvck9mU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMuX2NyZWF0ZUlu
dGVybmFsU3ludGF4VHJlZShub2RlLmxlZnQpLAorICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5yaWdodCksCisgICAgICAgICAgICAgICAg
Ym9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSkKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiRnVuY3Rpb25EZWNsYXJh
dGlvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25EZWNsYXJhdGlvbiwK
KyAgICAgICAgICAgICAgICBpZDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUu
aWQpLAorICAgICAgICAgICAgICAgIHBhcmFtczogbm9kZS5wYXJhbXMubWFwKHRoaXMuX2NyZWF0
ZUludGVybmFsU3ludGF4VHJlZSwgdGhpcyksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5f
Y3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSksCisgICAgICAgICAgICAgICAgZ2Vu
ZXJhdG9yOiBub2RlLmdlbmVyYXRvciwKKyAgICAgICAgICAgICAgICBhc3luYzogbm9kZS5hc3lu
YywKKyAgICAgICAgICAgICAgICB0eXBlUHJvZmlsaW5nUmV0dXJuRGl2b3Q6IG5vZGUucmFuZ2Vb
MF0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiRnVu
Y3Rpb25FeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAg
ICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkV4
cHJlc3Npb24sCisgICAgICAgICAgICAgICAgaWQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4
VHJlZShub2RlLmlkKSwKKyAgICAgICAgICAgICAgICBwYXJhbXM6IG5vZGUucGFyYW1zLm1hcCh0
aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUsIHRoaXMpLAorICAgICAgICAgICAgICAgIGJv
ZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJvZHkpLAorICAgICAgICAg
ICAgICAgIGdlbmVyYXRvcjogbm9kZS5nZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgYXN5bmM6
IG5vZGUuYXN5bmMsCisgICAgICAgICAgICAgICAgdHlwZVByb2ZpbGluZ1JldHVybkRpdm90OiBu
b2RlLnJhbmdlWzBdIC8vIFRoaXMgbWF5IGJlIG92ZXJyaWRkZW4gaW4gdGhlIFByb3BlcnR5IEFT
VCBub2RlLgorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICJJZGVudGlmaWVyIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JZGVudGlmaWVyLAor
ICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUubmFtZQorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlICJJZlN0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1
bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUuTm9kZVR5cGUuSWZTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgdGVzdDogdGhpcy5fY3Jl
YXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUudGVzdCksCisgICAgICAgICAgICAgICAgY29uc2Vx
dWVudDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuY29uc2VxdWVudCksCisg
ICAgICAgICAgICAgICAgYWx0ZXJuYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUo
bm9kZS5hbHRlcm5hdGUpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgIkxpdGVyYWwiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAg
ICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkxpdGVyYWws
CisgICAgICAgICAgICAgICAgdmFsdWU6IG5vZGUudmFsdWUsCisgICAgICAgICAgICAgICAgcmF3
OiBub2RlLnJhdworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlICJMYWJlbGVkU3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5MYWJl
bGVkU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl9jcmVhdGVJbnRlcm5h
bFN5bnRheFRyZWUobm9kZS5sYWJlbCksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3Jl
YXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSkKKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiTG9naWNhbEV4cHJlc3Npb24iOgorICAgICAgICAg
ICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLkxvZ2ljYWxFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGxl
ZnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmxlZnQpLAorICAgICAgICAg
ICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5yaWdodCks
CisgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG5vZGUub3BlcmF0b3IKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiTWVtYmVyRXhwcmVzc2lvbiI6Cisg
ICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9y
LlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTWVtYmVyRXhwcmVzc2lvbiwKKyAgICAgICAgICAg
ICAgICBvYmplY3Q6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLm9iamVjdCks
CisgICAgICAgICAgICAgICAgcHJvcGVydHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJl
ZShub2RlLnByb3BlcnR5KSwKKyAgICAgICAgICAgICAgICBjb21wdXRlZDogbm9kZS5jb21wdXRl
ZAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJNZXRh
UHJvcGVydHkiOgorICAgICAgICAgICAgLy8gaS5lOiBuZXcudGFyZ2V0IHByb2R1Y2VzIHttZXRh
OiAibmV3IiwgcHJvcGVydHk6ICJ0YXJnZXQifQorICAgICAgICAgICAgcmVzdWx0ID0geworICAg
ICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
Lk1ldGFQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICBtZXRhOiB0aGlzLl9jcmVhdGVJbnRlcm5h
bFN5bnRheFRyZWUobm9kZS5tZXRhKSwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eTogdGhpcy5f
Y3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUucHJvcGVydHkpLAorICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJNZXRob2REZWZpbml0aW9uIjoKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5NZXRob2REZWZpbml0aW9uLAorICAgICAgICAgICAg
ICAgIGtleTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUua2V5KSwKKyAgICAg
ICAgICAgICAgICB2YWx1ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUudmFs
dWUpLAorICAgICAgICAgICAgICAgIGNvbXB1dGVkOiBub2RlLmNvbXB1dGVkLAorICAgICAgICAg
ICAgICAgIGtpbmQ6IG5vZGUua2luZCwKKyAgICAgICAgICAgICAgICBzdGF0aWM6IG5vZGUuc3Rh
dGljCisgICAgICAgICAgICB9OworICAgICAgICAgICAgcmVzdWx0LnZhbHVlLnR5cGVQcm9maWxp
bmdSZXR1cm5EaXZvdCA9IG5vZGUucmFuZ2VbMF07IC8vICJnIiBpbiAiZ2V0IiBvciAicyIgaW4g
InNldCIgb3IgIlsiIGluICJbJ2NvbXB1dGVkJ10iIG9yICJtIiBpbiAibWV0aG9kTmFtZSIuCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiTmV3RXhwcmVzc2lvbiI6CisgICAgICAg
ICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuTm9kZVR5cGUuTmV3RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBjYWxs
ZWU6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmNhbGxlZSksCisgICAgICAg
ICAgICAgICAgYXJndW1lbnRzOiBub2RlLmFyZ3VtZW50cy5tYXAodGhpcy5fY3JlYXRlSW50ZXJu
YWxTeW50YXhUcmVlLCB0aGlzKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICJPYmplY3RFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2Rl
VHlwZS5PYmplY3RFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IG5vZGUu
cHJvcGVydGllcy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLCB0aGlzKQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJPYmplY3RQYXR0
ZXJuIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5PYmplY3RQYXR0ZXJuLAorICAgICAg
ICAgICAgICAgIHByb3BlcnRpZXM6IG5vZGUucHJvcGVydGllcy5tYXAodGhpcy5fY3JlYXRlSW50
ZXJuYWxTeW50YXhUcmVlLCB0aGlzKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICJQcm9ncmFtIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Q
cm9ncmFtLAorICAgICAgICAgICAgICAgIHNvdXJjZVR5cGU6IG5vZGUuc291cmNlVHlwZSwKKyAg
ICAgICAgICAgICAgICBib2R5OiBub2RlLmJvZHkubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3lu
dGF4VHJlZSwgdGhpcykKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAiUHJvcGVydHkiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAg
ICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlByb3BlcnR5
LAorICAgICAgICAgICAgICAgIGtleTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5v
ZGUua2V5KSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50
YXhUcmVlKG5vZGUudmFsdWUpLAorICAgICAgICAgICAgICAgIGtpbmQ6IG5vZGUua2luZCwKKyAg
ICAgICAgICAgICAgICBtZXRob2Q6IG5vZGUubWV0aG9kLAorICAgICAgICAgICAgICAgIGNvbXB1
dGVkOiBub2RlLmNvbXB1dGVkCisgICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKHJlc3Vs
dC5raW5kID09PSAiZ2V0IiB8fCByZXN1bHQua2luZCA9PT0gInNldCIgfHwgcmVzdWx0Lm1ldGhv
ZCkKKyAgICAgICAgICAgICAgICByZXN1bHQudmFsdWUudHlwZVByb2ZpbGluZ1JldHVybkRpdm90
ID0gbm9kZS5yYW5nZVswXTsgIC8vICJnIiBpbiAiZ2V0IiBvciAicyIgaW4gInNldCIgb3IgIlsi
IGluICJbJ2NvbXB1dGVkJ10iIG1ldGhvZCBvciAibSIgaW4gIm1ldGhvZE5hbWUiLgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIlJlc3RFbGVtZW50IjoKKyAgICAgICAgICAgIHJl
c3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5SZXN0RWxlbWVudCwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogdGhp
cy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYXJndW1lbnQpCisgICAgICAgICAgICB9
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIlJlc3RQcm9wZXJ0eSI6CisgICAg
ICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUmVzdFByb3BlcnR5LAorICAgICAgICAgICAgICAgIGFy
Z3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5hcmd1bWVudCksCisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIlJldHVyblN0
YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTog
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUmV0dXJuU3RhdGVtZW50LAor
ICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUo
bm9kZS5hcmd1bWVudCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAiU2VxdWVuY2VFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlw
ZS5TZXF1ZW5jZUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnM6IG5vZGUu
ZXhwcmVzc2lvbnMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZSwgdGhpcykKKyAg
ICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiU3ByZWFkRWxl
bWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuU3ByZWFkRWxlbWVudCwKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUu
YXJndW1lbnQpLAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlICJTcHJlYWRQcm9wZXJ0eSI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAg
ICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuU3ByZWFk
UHJvcGVydHksCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFs
U3ludGF4VHJlZShub2RlLmFyZ3VtZW50KSwKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAiU3VwZXIiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAg
ICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
LlN1cGVyCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
IlN3aXRjaFN0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAg
ICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuU3dpdGNoU3Rh
dGVtZW50LAorICAgICAgICAgICAgICAgIGRpc2NyaW1pbmFudDogdGhpcy5fY3JlYXRlSW50ZXJu
YWxTeW50YXhUcmVlKG5vZGUuZGlzY3JpbWluYW50KSwKKyAgICAgICAgICAgICAgICBjYXNlczog
bm9kZS5jYXNlcy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLCB0aGlzKQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJTd2l0Y2hDYXNl
IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Td2l0Y2hDYXNlLAorICAgICAgICAgICAg
ICAgIHRlc3Q6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnRlc3QpLAorICAg
ICAgICAgICAgICAgIGNvbnNlcXVlbnQ6IG5vZGUuY29uc2VxdWVudC5tYXAodGhpcy5fY3JlYXRl
SW50ZXJuYWxTeW50YXhUcmVlLCB0aGlzKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlICJUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24iOgorICAgICAgICAg
ICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiwKKyAgICAgICAgICAg
ICAgICB0YWc6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnRhZyksCisgICAg
ICAgICAgICAgICAgcXVhc2k6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnF1
YXNpKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJU
ZW1wbGF0ZUVsZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAg
IHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlRlbXBsYXRlRWxl
bWVudCwKKyAgICAgICAgICAgICAgICB2YWx1ZTogbm9kZS52YWx1ZSwKKyAgICAgICAgICAgICAg
ICB0YWlsOiBub2RlLnRhaWwKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAiVGVtcGxhdGVMaXRlcmFsIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlw
ZS5UZW1wbGF0ZUxpdGVyYWwsCisgICAgICAgICAgICAgICAgcXVhc2lzOiBub2RlLnF1YXNpcy5t
YXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLCB0aGlzKSwKKyAgICAgICAgICAgICAg
ICBleHByZXNzaW9uczogbm9kZS5leHByZXNzaW9ucy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxT
eW50YXhUcmVlLCB0aGlzKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICJUaGlzRXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAg
ICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUu
VGhpc0V4cHJlc3Npb24KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAiVGhyb3dTdGF0ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAg
ICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlRo
cm93U3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRl
cm5hbFN5bnRheFRyZWUobm9kZS5hcmd1bWVudCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAiVHJ5U3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5Ob2RlVHlwZS5UcnlTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYmxvY2s6IHRoaXMuX2Ny
ZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJsb2NrKSwKKyAgICAgICAgICAgICAgICBoYW5k
bGVyOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5oYW5kbGVyKSwKKyAgICAg
ICAgICAgICAgICBmaW5hbGl6ZXI6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2Rl
LmZpbmFsaXplcikKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAiVW5hcnlFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5VbmFy
eUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG5vZGUub3BlcmF0b3IsCisg
ICAgICAgICAgICAgICAgYXJndW1lbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShu
b2RlLmFyZ3VtZW50KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICJVcGRhdGVFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5V
cGRhdGVFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBub2RlLm9wZXJhdG9y
LAorICAgICAgICAgICAgICAgIHByZWZpeDogbm9kZS5wcmVmaXgsCisgICAgICAgICAgICAgICAg
YXJndW1lbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmFyZ3VtZW50KQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJWYXJpYWJs
ZURlY2xhcmF0aW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xh
cmF0aW9uLAorICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogbm9kZS5kZWNsYXJhdGlvbnMu
bWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZSwgdGhpcyksCisgICAgICAgICAgICAg
ICAga2luZDogbm9kZS5raW5kCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgIlZhcmlhYmxlRGVjbGFyYXRvciI6CisgICAgICAgICAgICByZXN1bHQgPSB7
CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuVmFyaWFibGVEZWNsYXJhdG9yLAorICAgICAgICAgICAgICAgIGlkOiB0aGlzLl9jcmVh
dGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5pZCksCisgICAgICAgICAgICAgICAgaW5pdDogdGhp
cy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuaW5pdCkKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiV2hpbGVTdGF0ZW1lbnQiOgorICAgICAg
ICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlLldoaWxlU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIHRl
c3Q6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnRlc3QpLAorICAgICAgICAg
ICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJvZHkpCisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIldpdGhTdGF0
ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLldpdGhTdGF0ZW1lbnQsCisgICAg
ICAgICAgICAgICAgb2JqZWN0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5v
YmplY3QpLAorICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4
VHJlZShub2RlLmJvZHkpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgIllpZWxkRXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAg
ICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUu
WWllbGRFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJ
bnRlcm5hbFN5bnRheFRyZWUobm9kZS5hcmd1bWVudCksCisgICAgICAgICAgICAgICAgZGVsZWdh
dGU6IG5vZGUuZGVsZWdhdGUKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAvLyBNb2R1bGVzLgorCisgICAgICAgIGNhc2UgIkV4cG9ydEFsbERlY2xhcmF0aW9u
IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5FeHBvcnRBbGxEZWNsYXJhdGlvbiwKKyAg
ICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2Rl
LnNvdXJjZSksCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgIkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAg
ICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
LkV4cG9ydE5hbWVkRGVjbGFyYXRpb24sCisgICAgICAgICAgICAgICAgZGVjbGFyYXRpb246IHRo
aXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmRlY2xhcmF0aW9uKSwKKyAgICAgICAg
ICAgICAgICBzcGVjaWZpZXJzOiBub2RlLnNwZWNpZmllcnMubWFwKHRoaXMuX2NyZWF0ZUludGVy
bmFsU3ludGF4VHJlZSwgdGhpcyksCisgICAgICAgICAgICAgICAgc291cmNlOiB0aGlzLl9jcmVh
dGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5zb3VyY2UpLAorICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24iOgor
ICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rv
ci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiwKKyAg
ICAgICAgICAgICAgICBkZWNsYXJhdGlvbjogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVl
KG5vZGUuZGVjbGFyYXRpb24pLAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICJFeHBvcnRTcGVjaWZpZXIiOgorICAgICAgICAgICAgcmVzdWx0ID0gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVU
eXBlLkV4cG9ydFNwZWNpZmllciwKKyAgICAgICAgICAgICAgICBsb2NhbDogdGhpcy5fY3JlYXRl
SW50ZXJuYWxTeW50YXhUcmVlKG5vZGUubG9jYWwpLAorICAgICAgICAgICAgICAgIGV4cG9ydGVk
OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5leHBvcnRlZCksCisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkltcG9ydCI6CisgICAg
ICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuSW1wb3J0LAorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlICJJbXBvcnREZWNsYXJhdGlvbiI6CisgICAgICAgICAg
ICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5
bnRheFRyZWUuTm9kZVR5cGUuSW1wb3J0RGVjbGFyYXRpb24sCisgICAgICAgICAgICAgICAgc3Bl
Y2lmaWVyczogbm9kZS5zcGVjaWZpZXJzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRy
ZWUsIHRoaXMpLAorICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxT
eW50YXhUcmVlKG5vZGUuc291cmNlKSwKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAiSW1wb3J0RGVmYXVsdFNwZWNpZmllciI6CisgICAgICAgICAgICBy
ZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRh
eFRyZWUuTm9kZVR5cGUuSW1wb3J0RGVmYXVsdFNwZWNpZmllciwKKyAgICAgICAgICAgICAgICBs
b2NhbDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUubG9jYWwpLAorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJJbXBvcnROYW1lc3Bh
Y2VTcGVjaWZpZXIiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5
cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkltcG9ydE5hbWVzcGFj
ZVNwZWNpZmllciwKKyAgICAgICAgICAgICAgICBsb2NhbDogdGhpcy5fY3JlYXRlSW50ZXJuYWxT
eW50YXhUcmVlKG5vZGUubG9jYWwpLAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICJJbXBvcnRTcGVjaWZpZXIiOgorICAgICAgICAgICAgcmVzdWx0ID0g
eworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLkltcG9ydFNwZWNpZmllciwKKyAgICAgICAgICAgICAgICBpbXBvcnRlZDogdGhpcy5f
Y3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuaW1wb3J0ZWQpLAorICAgICAgICAgICAgICAg
IGxvY2FsOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5sb2NhbCksCisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGNvbnNvbGUuZXJyb3IoIlVuc3VwcG9ydGVkIFN5bnRheCBUcmVlIE5vZGU6ICIgKyBu
b2RlLnR5cGUsIG5vZGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKwor
ICAgICAgICByZXN1bHQucmFuZ2UgPSBub2RlLnJhbmdlOworICAgICAgICAvLyBUaGlzIGlzIGFu
IG9iamVjdCBmb3Igd2hpY2ggeW91IGNhbiBhZGQgZmllbGRzIHRvIGFuIEFTVCBub2RlIHdpdGhv
dXQgd29ycnlpbmcgYWJvdXQgcG9sbHV0aW5nIHRoZSBzeW50YXgtcmVsYXRlZCBmaWVsZHMgb2Yg
dGhlIG5vZGUuCisgICAgICAgIHJlc3VsdC5hdHRhY2htZW50cyA9IHt9OworCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorfTsKKworLy8gVGhpcyBzaG91bGQgYmUga2VwdCBpbiBzeW5j
IHdpdGggYW4gZW51bSBpbiBKYXZhU2NpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmgKK1dl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3Ig
PSB7CisgICAgTm9ybWFsRXhwcmVzc2lvbjogMSwKKyAgICBGdW5jdGlvblJldHVybjogMgorfTsK
KworV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUgPSB7CisgICAgQXJyYXlF
eHByZXNzaW9uOiBTeW1ib2woImFycmF5LWV4cHJlc3Npb24iKSwKKyAgICBBcnJheVBhdHRlcm46
IFN5bWJvbCgiYXJyYXktcGF0dGVybiIpLAorICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBT
eW1ib2woImFycm93LWZ1bmN0aW9uLWV4cHJlc3Npb24iKSwKKyAgICBBc3NpZ25tZW50RXhwcmVz
c2lvbjogU3ltYm9sKCJhc3NpZ25tZW50LWV4cHJlc3Npb24iKSwKKyAgICBBc3NpZ25tZW50UGF0
dGVybjogU3ltYm9sKCJhc3NpZ25tZW50LXBhdHRlcm4iKSwKKyAgICBBd2FpdEV4cHJlc3Npb246
IFN5bWJvbCgiYXdhaXQtZXhwcmVzc2lvbiIpLAorICAgIEJpbmFyeUV4cHJlc3Npb246IFN5bWJv
bCgiYmluYXJ5LWV4cHJlc3Npb24iKSwKKyAgICBCbG9ja1N0YXRlbWVudDogU3ltYm9sKCJibG9j
ay1zdGF0ZW1lbnQiKSwKKyAgICBCcmVha1N0YXRlbWVudDogU3ltYm9sKCJicmVhay1zdGF0ZW1l
bnQiKSwKKyAgICBDYWxsRXhwcmVzc2lvbjogU3ltYm9sKCJjYWxsLWV4cHJlc3Npb24iKSwKKyAg
ICBDYXRjaENsYXVzZTogU3ltYm9sKCJjYXRjaC1jbGF1c2UiKSwKKyAgICBDbGFzc0JvZHk6IFN5
bWJvbCgiY2xhc3MtYm9keSIpLAorICAgIENsYXNzRGVjbGFyYXRpb246IFN5bWJvbCgiY2xhc3Mt
ZGVjbGFyYXRpb24iKSwKKyAgICBDbGFzc0V4cHJlc3Npb246IFN5bWJvbCgiY2xhc3MtZXhwcmVz
c2lvbiIpLAorICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogU3ltYm9sKCJjb25kaXRpb25hbC1l
eHByZXNzaW9uIiksCisgICAgQ29udGludWVTdGF0ZW1lbnQ6IFN5bWJvbCgiY29udGludWUtc3Rh
dGVtZW50IiksCisgICAgRGVidWdnZXJTdGF0ZW1lbnQ6IFN5bWJvbCgiZGVidWdnZXItc3RhdGVt
ZW50IiksCisgICAgRG9XaGlsZVN0YXRlbWVudDogU3ltYm9sKCJkby13aGlsZS1zdGF0ZW1lbnQi
KSwKKyAgICBFbXB0eVN0YXRlbWVudDogU3ltYm9sKCJlbXB0eS1zdGF0ZW1lbnQiKSwKKyAgICBF
eHBvcnRBbGxEZWNsYXJhdGlvbjogU3ltYm9sKCJleHBvcnQtYWxsLWRlY2xhcmF0aW9uIiksCisg
ICAgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiBTeW1ib2woImV4cG9ydC1kZWZhdWx0LWRlY2xh
cmF0aW9uIiksCisgICAgRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogU3ltYm9sKCJleHBvcnQtbmFt
ZWQtZGVjbGFyYXRpb24iKSwKKyAgICBFeHBvcnRTcGVjaWZpZXI6IFN5bWJvbCgiZXhwb3J0LXNw
ZWNpZmllciIpLAorICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6IFN5bWJvbCgiZXhwcmVzc2lvbi1z
dGF0ZW1lbnQiKSwKKyAgICBGb3JJblN0YXRlbWVudDogU3ltYm9sKCJmb3ItaW4tc3RhdGVtZW50
IiksCisgICAgRm9yT2ZTdGF0ZW1lbnQ6IFN5bWJvbCgiZm9yLW9mLXN0YXRlbWVudCIpLAorICAg
IEZvclN0YXRlbWVudDogU3ltYm9sKCJmb3Itc3RhdGVtZW50IiksCisgICAgRnVuY3Rpb25EZWNs
YXJhdGlvbjogU3ltYm9sKCJmdW5jdGlvbi1kZWNsYXJhdGlvbiIpLAorICAgIEZ1bmN0aW9uRXhw
cmVzc2lvbjogU3ltYm9sKCJmdW5jdGlvbi1leHByZXNzaW9uIiksCisgICAgSWRlbnRpZmllcjog
U3ltYm9sKCJpZGVudGlmaWVyIiksCisgICAgSWZTdGF0ZW1lbnQ6IFN5bWJvbCgiaWYtc3RhdGVt
ZW50IiksCisgICAgSW1wb3J0OiBTeW1ib2woImltcG9ydCIpLAorICAgIEltcG9ydERlY2xhcmF0
aW9uOiBTeW1ib2woImltcG9ydC1kZWNsYXJhdGlvbiIpLAorICAgIEltcG9ydERlZmF1bHRTcGVj
aWZpZXI6IFN5bWJvbCgiaW1wb3J0LWRlZmF1bHQtc3BlY2lmaWVyIiksCisgICAgSW1wb3J0TmFt
ZXNwYWNlU3BlY2lmaWVyOiBTeW1ib2woImltcG9ydC1uYW1lc3BhY2Utc3BlY2lmaWVyIiksCisg
ICAgSW1wb3J0U3BlY2lmaWVyOiBTeW1ib2woImltcG9ydC1zcGVjaWZpZXIiKSwKKyAgICBMYWJl
bGVkU3RhdGVtZW50OiBTeW1ib2woImxhYmVsZWQtc3RhdGVtZW50IiksCisgICAgTGl0ZXJhbDog
U3ltYm9sKCJsaXRlcmFsIiksCisgICAgTG9naWNhbEV4cHJlc3Npb246IFN5bWJvbCgibG9naWNh
bC1leHByZXNzaW9uIiksCisgICAgTWVtYmVyRXhwcmVzc2lvbjogU3ltYm9sKCJtZW1iZXItZXhw
cmVzc2lvbiIpLAorICAgIE1ldGFQcm9wZXJ0eTogU3ltYm9sKCJtZXRhLXByb3BlcnR5IiksCisg
ICAgTWV0aG9kRGVmaW5pdGlvbjogU3ltYm9sKCJtZXRob2QtZGVmaW5pdGlvbiIpLAorICAgIE5l
d0V4cHJlc3Npb246IFN5bWJvbCgibmV3LWV4cHJlc3Npb24iKSwKKyAgICBPYmplY3RFeHByZXNz
aW9uOiBTeW1ib2woIm9iamVjdC1leHByZXNzaW9uIiksCisgICAgT2JqZWN0UGF0dGVybjogU3lt
Ym9sKCJvYmplY3QtcGF0dGVybiIpLAorICAgIFByb2dyYW06IFN5bWJvbCgicHJvZ3JhbSIpLAor
ICAgIFByb3BlcnR5OiBTeW1ib2woInByb3BlcnR5IiksCisgICAgUmVzdEVsZW1lbnQ6IFN5bWJv
bCgicmVzdC1lbGVtZW50IiksCisgICAgUmVzdFByb3BlcnR5OiBTeW1ib2woInJlc3QtcHJvcGVy
dHkiKSwKKyAgICBSZXR1cm5TdGF0ZW1lbnQ6IFN5bWJvbCgicmV0dXJuLXN0YXRlbWVudCIpLAor
ICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogU3ltYm9sKCJzZXF1ZW5jZS1leHByZXNzaW9uIiksCisg
ICAgU3ByZWFkRWxlbWVudDogU3ltYm9sKCJzcHJlYWQtZWxlbWVudCIpLAorICAgIFNwcmVhZFBy
b3BlcnR5OiBTeW1ib2woInNwcmVhZC1wcm9wZXJ0eSIpLAorICAgIFN1cGVyOiBTeW1ib2woInN1
cGVyIiksCisgICAgU3dpdGNoQ2FzZTogU3ltYm9sKCJzd2l0Y2gtY2FzZSIpLAorICAgIFN3aXRj
aFN0YXRlbWVudDogU3ltYm9sKCJzd2l0Y2gtc3RhdGVtZW50IiksCisgICAgVGFnZ2VkVGVtcGxh
dGVFeHByZXNzaW9uOiBTeW1ib2woInRhZ2dlZC10ZW1wbGF0ZS1leHByZXNzaW9uIiksCisgICAg
VGVtcGxhdGVFbGVtZW50OiBTeW1ib2woInRlbXBsYXRlLWVsZW1lbnQiKSwKKyAgICBUZW1wbGF0
ZUxpdGVyYWw6IFN5bWJvbCgidGVtcGxhdGUtbGl0ZXJhbCIpLAorICAgIFRoaXNFeHByZXNzaW9u
OiBTeW1ib2woInRoaXMtZXhwcmVzc2lvbiIpLAorICAgIFRocm93U3RhdGVtZW50OiBTeW1ib2wo
InRocm93LXN0YXRlbWVudCIpLAorICAgIFRyeVN0YXRlbWVudDogU3ltYm9sKCJ0cnktc3RhdGVt
ZW50IiksCisgICAgVW5hcnlFeHByZXNzaW9uOiBTeW1ib2woInVuYXJ5LWV4cHJlc3Npb24iKSwK
KyAgICBVcGRhdGVFeHByZXNzaW9uOiBTeW1ib2woInVwZGF0ZS1leHByZXNzaW9uIiksCisgICAg
VmFyaWFibGVEZWNsYXJhdGlvbjogU3ltYm9sKCJ2YXJpYWJsZS1kZWNsYXJhdGlvbiIpLAorICAg
IFZhcmlhYmxlRGVjbGFyYXRvcjogU3ltYm9sKCJ2YXJpYWJsZS1kZWNsYXJhdG9yIiksCisgICAg
V2hpbGVTdGF0ZW1lbnQ6IFN5bWJvbCgid2hpbGUtc3RhdGVtZW50IiksCisgICAgV2l0aFN0YXRl
bWVudDogU3ltYm9sKCJ3aXRoLXN0YXRlbWVudCIpLAorICAgIFlpZWxkRXhwcmVzc2lvbjogU3lt
Ym9sKCJ5aWVsZC1leHByZXNzaW9uIiksCit9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>