<?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>179154</bug_id>
          
          <creation_ts>2017-11-01 21:02:43 -0700</creation_ts>
          <short_desc>[WPE][GTK] Avoid duplicating code for dist and distcheck targets</short_desc>
          <delta_ts>2017-11-15 12:07:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WPE WebKit</component>
          <version>Other</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>178894</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Michael Catanzaro">mcatanzaro</assigned_to>
          <cc>aperez</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1367191</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-01 21:02:43 -0700</bug_when>
    <thetext>Avoid duplicating code for dist and distcheck targets between GTK and WPE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367226</commentid>
    <comment_count>1</comment_count>
      <attachid>325682</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-01 22:39:26 -0700</bug_when>
    <thetext>Created attachment 325682
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367227</commentid>
    <comment_count>2</comment_count>
      <attachid>325683</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-01 22:40:15 -0700</bug_when>
    <thetext>Created attachment 325683
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367245</commentid>
    <comment_count>3</comment_count>
      <attachid>325683</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-11-01 23:35:24 -0700</bug_when>
    <thetext>Comment on attachment 325683
Patch

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

&gt; Tools/Scripts/make-dist:1
&gt; +#!/usr/bin/env python2

Why did you change this? Does this fail to run with python3?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367307</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-02 05:19:02 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #3)
&gt; Comment on attachment 325683 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=325683&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/make-dist:1
&gt; &gt; +#!/usr/bin/env python2
&gt; 
&gt; Why did you change this? Does this fail to run with python3?

I didn&apos;t try, but I assume all our scripts will fail to run with python3 unless tested otherwise. I can leave it as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367308</commentid>
    <comment_count>5</comment_count>
      <attachid>325683</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-02 05:19:40 -0700</bug_when>
    <thetext>Comment on attachment 325683
Patch

Both EWS are broken</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367311</commentid>
    <comment_count>6</comment_count>
      <attachid>325710</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-02 05:28:09 -0700</bug_when>
    <thetext>Created attachment 325710
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367312</commentid>
    <comment_count>7</comment_count>
      <attachid>325711</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-02 05:28:46 -0700</bug_when>
    <thetext>Created attachment 325711
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367320</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-11-02 06:32:30 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #4)
&gt; I didn&apos;t try, but I assume all our scripts will fail to run with python3
&gt; unless tested otherwise. I can leave it as-is.

This is a change that can be done in another bug. You can for example seize and globally replace &quot;python&quot; with &quot;python-2.7&quot; in all python shebang (as we discussed a while ago on the webkit-dev mailing lists).

On Debian, the python namespace still defaults to 2.7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367328</commentid>
    <comment_count>9</comment_count>
      <attachid>325711</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-02 07:38:50 -0700</bug_when>
    <thetext>Comment on attachment 325711
Patch

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

&gt; Tools/Scripts/make-dist:1
&gt; +#!/usr/bin/env python

I switched it back, since I agree it&apos;s a problem for another bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367517</commentid>
    <comment_count>10</comment_count>
      <attachid>325711</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2017-11-02 13:35:26 -0700</bug_when>
    <thetext>Comment on attachment 325711
Patch

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

Informally reviewing: Looks good to me / r+.

&gt; Source/cmake/WebKitDist.cmake:24
&gt; +        VERBATIM

#TIL about “VERBATIM” — certainly nicer that interspersing double-quote
characters all around :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367521</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-02 13:42:01 -0700</bug_when>
    <thetext>(In reply to Adrian Perez from comment #10) 
&gt; #TIL about “VERBATIM” — certainly nicer that interspersing double-quote
&gt; characters all around :-)

Yeah, Konstantin wants us to always use it for all custom targets and commands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1368039</commentid>
    <comment_count>12</comment_count>
      <attachid>325711</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-03 11:42:58 -0700</bug_when>
    <thetext>Comment on attachment 325711
Patch

Clearing flags on attachment: 325711

Committed r224410: &lt;https://trac.webkit.org/changeset/224410&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1368040</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-03 11:43:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325682</attachid>
            <date>2017-11-01 22:39:26 -0700</date>
            <delta_ts>2017-11-01 22:40:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179154-20171102003925.patch</filename>
            <type>text/plain</type>
            <size>34211</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0Mjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm1H
VEsuY21ha2UgYi9Tb3VyY2UvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggMDQxYzY3YTBjMzRiNGRl
NmJkNzJiNmM1YmFhZThiMjdmZTMyZGI1Ny4uYzQyY2UzNDY5NTU0NzNjNjI5YmNmN2JiM2IzYTYx
YWM1ZmUzZTFiYyAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMSwzICsxLDUgQEAKK2luY2x1ZGUoV2ViS2l0RGlz
dCkKKwogYWRkX3N1YmRpcmVjdG9yeSgke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ndGsvcG8pCiAK
ICMgVGhpcyBhbGxvd3MgZXhwb3NpbmcgYSAnZ2lyJyB0YXJnZXQgd2hpY2ggYnVpbGRzIGFsbCBH
T2JqZWN0IGludHJvc3BlY3Rpb24gZmlsZXMuCkBAIC01Miw0NSArNTQsNiBAQCBhZGRfY3VzdG9t
X3RhcmdldChjaGVjawogKQogCiBpZiAoREVWRUxPUEVSX01PREUpCi0gICAgY29uZmlndXJlX2Zp
bGUoCi0gICAgICAgICR7VE9PTFNfRElSfS9ndGsvbWFuaWZlc3QudHh0LmluCi0gICAgICAgICR7
Q01BS0VfQklOQVJZX0RJUn0vbWFuaWZlc3QudHh0Ci0gICAgKQotCi0gICAgYWRkX2N1c3RvbV9j
b21tYW5kKAotICAgICAgICBPVVRQVVQgJHtDTUFLRV9CSU5BUllfRElSfS93ZWJraXRndGstJHtQ
Uk9KRUNUX1ZFUlNJT059LnRhcgotICAgICAgICBERVBFTkRTICR7VE9PTFNfRElSfS9ndGsvbWFr
ZS1kaXN0LnB5Ci0gICAgICAgIERFUEVORFMgJHtDTUFLRV9CSU5BUllfRElSfS9tYW5pZmVzdC50
eHQKLSAgICAgICAgREVQRU5EUyBXZWJLaXQKLSAgICAgICAgREVQRU5EUyBndGtkb2MKLSAgICAg
ICAgQ09NTUFORCAke1RPT0xTX0RJUn0vZ3RrL21ha2UtZGlzdC5weQotICAgICAgICAgICAgICAg
IC0tc291cmNlLWRpcj0ke0NNQUtFX1NPVVJDRV9ESVJ9Ci0gICAgICAgICAgICAgICAgLS1idWls
ZC1kaXI9JHtDTUFLRV9CSU5BUllfRElSfQotICAgICAgICAgICAgICAgIC0tdmVyc2lvbj0ke1BS
T0pFQ1RfVkVSU0lPTn0KLSAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L21hbmlm
ZXN0LnR4dAotICAgICkKLQotICAgIGFkZF9jdXN0b21fY29tbWFuZCgKLSAgICAgICAgT1VUUFVU
ICR7Q01BS0VfQklOQVJZX0RJUn0vd2Via2l0Z3RrLSR7UFJPSkVDVF9WRVJTSU9OfS50YXIueHoK
LSAgICAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L3dlYmtpdGd0ay0ke1BST0pFQ1Rf
VkVSU0lPTn0udGFyCi0gICAgICAgIENPTU1BTkQgeHogLWYgJHtDTUFLRV9CSU5BUllfRElSfS93
ZWJraXRndGstJHtQUk9KRUNUX1ZFUlNJT059LnRhcgotICAgICkKLQotICAgIGFkZF9jdXN0b21f
dGFyZ2V0KGRpc3QKLSAgICAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L3dlYmtpdGd0
ay0ke1BST0pFQ1RfVkVSU0lPTn0udGFyLnh6Ci0gICAgKQotCi0gICAgYWRkX2N1c3RvbV90YXJn
ZXQoZGlzdGNoZWNrCi0gICAgICAgIERFUEVORFMgJHtUT09MU19ESVJ9L2d0ay9tYWtlLWRpc3Qu
cHkKLSAgICAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L21hbmlmZXN0LnR4dAotICAg
ICAgICBERVBFTkRTIFdlYktpdAotICAgICAgICBERVBFTkRTIGd0a2RvYwotICAgICAgICBDT01N
QU5EICR7VE9PTFNfRElSfS9ndGsvbWFrZS1kaXN0LnB5Ci0gICAgICAgICAgICAgICAgLS1jaGVj
awotICAgICAgICAgICAgICAgIC0tc291cmNlLWRpcj0ke0NNQUtFX1NPVVJDRV9ESVJ9Ci0gICAg
ICAgICAgICAgICAgLS1idWlsZC1kaXI9JHtDTUFLRV9CSU5BUllfRElSfQotICAgICAgICAgICAg
ICAgIC0tdmVyc2lvbj0ke1BST0pFQ1RfVkVSU0lPTn0KLSAgICAgICAgICAgICAgICAke0NNQUtF
X0JJTkFSWV9ESVJ9L21hbmlmZXN0LnR4dAotICAgICAgICBDT01NQU5EIHh6IC1mICR7Q01BS0Vf
QklOQVJZX0RJUn0vd2Via2l0Z3RrLSR7UFJPSkVDVF9WRVJTSU9OfS50YXIKLSAgICApCisgICAg
YWRkX2N1c3RvbV90YXJnZXQoRG9jdW1lbnRhdGlvbiBERVBFTkRTIGd0a2RvYykKKyAgICBXRUJL
SVRfREVDTEFSRV9ESVNUX1RBUkdFVFMoR1RLIHdlYmtpdGd0ayAke1RPT0xTX0RJUn0vZ3RrL21h
bmlmZXN0LnR4dC5pbikKIGVuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm1XUEUu
Y21ha2UgYi9Tb3VyY2UvUGxhdGZvcm1XUEUuY21ha2UKaW5kZXggMjE1OTZiZmMwNDAzZGY5Zjhm
ODQ0MjI3ZGZiOTdhYzU0NDhkY2ViZS4uMzg2NDJlMDc4MmNjMzNiZjk0NzVlNmVlNDdlZTk3NzE4
NTM1NzU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtV1BFLmNtYWtlCisrKyBiL1NvdXJj
ZS9QbGF0Zm9ybVdQRS5jbWFrZQpAQCAtMSw0NCArMSw3IEBACi1pZiAoREVWRUxPUEVSX01PREUp
Ci0gICAgZmluZF9wYWNrYWdlKFh6IFJFUVVJUkVEKQotCi0gICAgY29uZmlndXJlX2ZpbGUoCi0g
ICAgICAgICR7VE9PTFNfRElSfS93cGUvbWFuaWZlc3QudHh0LmluCi0gICAgICAgICR7Q01BS0Vf
QklOQVJZX0RJUn0vbWFuaWZlc3QudHh0Ci0gICAgKQotCi0gICAgYWRkX2N1c3RvbV90YXJnZXQo
ZGlzdGNoZWNrCi0gICAgICAgIENPTU1FTlQgIkNoZWNraW5nIHJlbGVhc2UgdGFyYmFsbDogd3Bl
d2Via2l0LSR7UFJPSkVDVF9WRVJTSU9OfS50YXIiCi0gICAgICAgIERFUEVORFMgIiR7Q01BS0Vf
QklOQVJZX0RJUn0vbWFuaWZlc3QudHh0IgotICAgICAgICAgICAgICAgICIke1RPT0xTX0RJUn0v
Z3RrL21ha2UtZGlzdC5weSIKLSAgICAgICAgQ09NTUFORCAiJHtUT09MU19ESVJ9L2d0ay9tYWtl
LWRpc3QucHkiCi0gICAgICAgICAgICAgICAgIi0tY2hlY2siICItLXBvcnQ9V1BFIgotICAgICAg
ICAgICAgICAgICItLXRhcmJhbGwtbmFtZT13cGV3ZWJraXQiCi0gICAgICAgICAgICAgICAgIi0t
c291cmNlLWRpcj0ke0NNQUtFX1NPVVJDRV9ESVJ9IgotICAgICAgICAgICAgICAgICItLWJ1aWxk
LWRpcj0ke0NNQUtFX0JJTkFSWV9ESVJ9IgotICAgICAgICAgICAgICAgICItLXZlcnNpb249JHtQ
Uk9KRUNUX1ZFUlNJT059IgotICAgICAgICAgICAgICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9L21h
bmlmZXN0LnR4dCIKLSAgICAgICAgQ09NTUFORCAiJHtYWl9FWEVDVVRBQkxFfSIgIi1ldmZRIgot
ICAgICAgICAgICAgICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9L3dwZXdlYmtpdC0ke1BST0pFQ1Rf
VkVSU0lPTn0udGFyIgotICAgICAgICBVU0VTX1RFUk1JTkFMCi0gICAgKQoraW5jbHVkZShXZWJL
aXREaXN0KQogCi0gICAgYWRkX2N1c3RvbV9jb21tYW5kKAotICAgICAgICBDT01NRU5UICJDcmVh
dGluZyByZWxlYXNlIHRhcmJhbGw6IHdwZXdlYmtpdC0ke1BST0pFQ1RfVkVSU0lPTn0udGFyLnh6
IgotICAgICAgICBPVVRQVVQgIiR7Q01BS0VfQklOQVJZX0RJUn0vd3Bld2Via2l0LSR7UFJPSkVD
VF9WRVJTSU9OfS50YXIueHoiCi0gICAgICAgIE1BSU5fREVQRU5ERU5DWSAiJHtDTUFLRV9CSU5B
UllfRElSfS9tYW5pZmVzdC50eHQiCi0gICAgICAgIERFUEVORFMgIiR7VE9PTFNfRElSfS9ndGsv
bWFrZS1kaXN0LnB5IgotICAgICAgICBDT01NQU5EICIke1RPT0xTX0RJUn0vZ3RrL21ha2UtZGlz
dC5weSIKLSAgICAgICAgICAgICAgICAiLS10YXJiYWxsLW5hbWU9d3Bld2Via2l0IgotICAgICAg
ICAgICAgICAgICItLXNvdXJjZS1kaXI9JHtDTUFLRV9TT1VSQ0VfRElSfSIKLSAgICAgICAgICAg
ICAgICAiLS1idWlsZC1kaXI9JHtDTUFLRV9CSU5BUllfRElSfSIKLSAgICAgICAgICAgICAgICAi
LS12ZXJzaW9uPSR7UFJPSkVDVF9WRVJTSU9OfSIKLSAgICAgICAgICAgICAgICAiJHtDTUFLRV9C
SU5BUllfRElSfS9tYW5pZmVzdC50eHQiCi0gICAgICAgIENPTU1BTkQgIiR7WFpfRVhFQ1VUQUJM
RX0iICItZXZmUSIKLSAgICAgICAgICAgICAgICAiJHtDTUFLRV9CSU5BUllfRElSfS93cGV3ZWJr
aXQtJHtQUk9KRUNUX1ZFUlNJT059LnRhciIKLSAgICAgICAgVVNFU19URVJNSU5BTAotICAgICkK
LQotICAgIGFkZF9jdXN0b21fdGFyZ2V0KGRpc3QKLSAgICAgICAgREVQRU5EUyAiJHtDTUFLRV9C
SU5BUllfRElSfS93cGV3ZWJraXQtJHtQUk9KRUNUX1ZFUlNJT059LnRhci54eiIKLSAgICApCitp
ZiAoREVWRUxPUEVSX01PREUpCisgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgZGVwZW5kIG9uIGEg
Z3RrZG9jIHRhcmdldAorICAgIGFkZF9jdXN0b21fdGFyZ2V0KERvY3VtZW50YXRpb24pCisgICAg
V0VCS0lUX0RFQ0xBUkVfRElTVF9UQVJHRVRTKFdQRSB3cGV3ZWJraXQgJHtUT09MU19ESVJ9L3dw
ZS9tYW5pZmVzdC50eHQuaW4pCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL1dl
YktpdERpc3QuY21ha2UgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RGlzdC5jbWFrZQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yMjc3NjYwZTAwN2QzYzc2ODI4NzU1YmJlMzc4ZGMxY2FmNzU2NmMzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL2NtYWtlL1dlYktpdERpc3QuY21ha2UKQEAgLTAsMCArMSw0NyBAQAorbWFj
cm8oV0VCS0lUX0RFQ0xBUkVfRElTVF9UQVJHRVRTIF9wb3J0IF90YXJiYWxsX3ByZWZpeCBfbWFu
aWZlc3QpCisgICAgZmluZF9wYWNrYWdlKFh6IFJFUVVJUkVEKQorCisgICAgY29uZmlndXJlX2Zp
bGUoCisgICAgICAgICR7X21hbmlmZXN0fQorICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L21h
bmlmZXN0LnR4dAorICAgICkKKworICAgIGFkZF9jdXN0b21fdGFyZ2V0KGRpc3RjaGVjaworICAg
ICAgICBDT01NRU5UICJDaGVja2luZyByZWxlYXNlIHRhcmJhbGw6ICR7X3RhcmJhbGxfcHJlZml4
fS0ke1BST0pFQ1RfVkVSU0lPTn0udGFyIgorICAgICAgICBERVBFTkRTICR7Q01BS0VfQklOQVJZ
X0RJUn0vbWFuaWZlc3QudHh0CisgICAgICAgIERFUEVORFMgV2ViS2l0CisgICAgICAgIENPTU1B
TkQgJHtUT09MU19ESVJ9L1NjcmlwdHMvbWFrZS1kaXN0CisgICAgICAgICAgICAgICAgLS1jaGVj
ayAtLXBvcnQ9JHtfcG9ydH0KKyAgICAgICAgICAgICAgICAtLXRhcmJhbGwtbmFtZT0ke190YXJi
YWxsX3ByZWZpeH0KKyAgICAgICAgICAgICAgICAtLXNvdXJjZS1kaXI9JHtDTUFLRV9TT1VSQ0Vf
RElSfQorICAgICAgICAgICAgICAgIC0tYnVpbGQtZGlyPSR7Q01BS0VfQklOQVJZX0RJUn0KKyAg
ICAgICAgICAgICAgICAtLXZlcnNpb249JHtQUk9KRUNUX1ZFUlNJT059CisgICAgICAgICAgICAg
ICAgJHtDTUFLRV9CSU5BUllfRElSfS9tYW5pZmVzdC50eHQKKyAgICAgICAgQ09NTUFORCAke1ha
X0VYRUNVVEFCTEV9IiAiLWV2ZlEKKyAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9
LyR7X3RhcmJhbGxfcHJlZml4fS0ke1BST0pFQ1RfVkVSU0lPTn0udGFyCisgICAgICAgIFVTRVNf
VEVSTUlOQUwKKyAgICAgICAgVkVSQkFUSU0KKyAgICApCisKKyAgICBhZGRfY3VzdG9tX2NvbW1h
bmQoCisgICAgICAgIENPTU1FTlQgIkNyZWF0aW5nIHJlbGVhc2UgdGFyYmFsbDogJHtfdGFyYmFs
bF9wcmVmaXh9LSR7UFJPSkVDVF9WRVJTSU9OfS50YXIueHoiCisgICAgICAgIE9VVFBVVCAke0NN
QUtFX0JJTkFSWV9ESVJ9LyR7X3RhcmJhbGxfcHJlZml4fS0ke1BST0pFQ1RfVkVSU0lPTn0udGFy
Lnh6CisgICAgICAgIE1BSU5fREVQRU5ERU5DWSAke0NNQUtFX0JJTkFSWV9ESVJ9L21hbmlmZXN0
LnR4dAorICAgICAgICBDT01NQU5EICR7VE9PTFNfRElSfS9TY3JpcHRzL21ha2UtZGlzdAorICAg
ICAgICAgICAgICAgIC0tdGFyYmFsbC1uYW1lPSR7X3RhcmJhbGxfcHJlZml4fQorICAgICAgICAg
ICAgICAgIC0tc291cmNlLWRpcj0ke0NNQUtFX1NPVVJDRV9ESVJ9CisgICAgICAgICAgICAgICAg
LS1idWlsZC1kaXI9JHtDTUFLRV9CSU5BUllfRElSfQorICAgICAgICAgICAgICAgIC0tdmVyc2lv
bj0ke1BST0pFQ1RfVkVSU0lPTn0KKyAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9
L21hbmlmZXN0LnR4dAorICAgICAgICBDT01NQU5EICR7WFpfRVhFQ1VUQUJMRX0iIC1ldmZRCisg
ICAgICAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfS8ke190YXJiYWxsX3ByZWZpeH0tJHtQ
Uk9KRUNUX1ZFUlNJT059LnRhcgorICAgICAgICBVU0VTX1RFUk1JTkFMCisgICAgICAgIFZFUkJB
VElNCisgICAgKQorCisgICAgYWRkX2N1c3RvbV90YXJnZXQoZGlzdAorICAgICAgICBERVBFTkRT
ICIke0NNQUtFX0JJTkFSWV9ESVJ9LyR7X3RhcmJhbGxfcHJlZml4fS0ke1BST0pFQ1RfVkVSU0lP
Tn0udGFyLnh6IgorICAgICAgICBERVBFTkRTIFdlYktpdAorICAgICAgICBERVBFTkRTIERvY3Vt
ZW50YXRpb24KKyAgICApCitlbmRtYWNybygpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODJlNjExNGMxYWJjYzNjZjllNWNkMDU5YTRmNGIyZWYx
NDYzMGM4ZC4uMmI3MDkyZjIzNDBiNTRkYjdhZjIzYTZkYjQ4NzdjYTZmMDAyYzJkMSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1
IEBACisyMDE3LTExLTAxICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNv
bT4KKworICAgICAgICBbV1BFXVtHVEtdIEF2b2lkIGR1cGxpY2F0aW5nIGNvZGUgZm9yIGRpc3Qg
YW5kIGRpc3RjaGVjayB0YXJnZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzkxNTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNb3ZlIHRoZSBzY3JpcHQgb3V0IG9mIFRvb2xzL2d0ayBiZWNhdXNlIGl0
IGlzIGFscmVhZHkgdXNlZCBieSBXUEUuIEFsc28sIGRyb3AgdGhlIC5weQorICAgICAgICBwcmVm
aXggYmVjYXVzZSBpdCBpcyBleGVjdXRhYmxlLgorCisgICAgICAgICogU2NyaXB0cy9tYWtlLWRp
c3Q6IFJlbmFtZWQgZnJvbSBUb29scy9ndGsvbWFrZS1kaXN0LnB5LgorCiAyMDE3LTEwLTMxICBS
b3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiBBZGQgSW5zcGVjdG9yIG1lbnUgaXRlbXMgdG8gTWFjIE1pbmlCcm93c2VyCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL21ha2UtZGlzdCBiL1Rvb2xzL1NjcmlwdHMvbWFrZS1kaXN0
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjBiN2U2NWQwY2RmMjU3OTAyZjdiMGY4MzdjNzU1YjNhMjRlNzAyOTQKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL21ha2UtZGlzdApAQCAtMCwwICsxLDMzMyBA
QAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMgorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMu
TC4KKyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorIyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2Zyb20gY29udGV4
dGxpYiBpbXBvcnQgY2xvc2luZworCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBlcnJubworaW1w
b3J0IG11bHRpcHJvY2Vzc2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwK
K2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGFyZmlsZQorCisKK2RlZiBlbnVtKCoqZW51bXMp
OgorICAgIHJldHVybiB0eXBlKCdFbnVtJywgKCksIGVudW1zKQorCisKK2NsYXNzIFJ1bGUob2Jq
ZWN0KToKKyAgICBSZXN1bHQgPSBlbnVtKElOQ0xVREU9MSwgRVhDTFVERT0yLCBOT19NQVRDSD0z
KQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGUsIHBhdHRlcm4pOgorICAgICAgICBzZWxm
LnR5cGUgPSB0eXBlCisgICAgICAgIHNlbGYub3JpZ2luYWxfcGF0dGVybiA9IHBhdHRlcm4KKyAg
ICAgICAgc2VsZi5wYXR0ZXJuID0gcmUuY29tcGlsZShwYXR0ZXJuKQorCisgICAgZGVmIHRlc3Qo
c2VsZiwgZmlsZSk6CisgICAgICAgIGlmIG5vdChzZWxmLnBhdHRlcm4uc2VhcmNoKGZpbGUpKToK
KyAgICAgICAgICAgIHJldHVybiBSdWxlLlJlc3VsdC5OT19NQVRDSAorICAgICAgICByZXR1cm4g
c2VsZi50eXBlCisKKworY2xhc3MgUnVsZXNldChvYmplY3QpOgorICAgIF9nbG9iYWxfcnVsZXMg
PSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICMgQnkgZGVmYXVsdCwg
YWNjZXB0IGFsbCBmaWxlcy4KKyAgICAgICAgc2VsZi5ydWxlcyA9IFtSdWxlKFJ1bGUuUmVzdWx0
LklOQ0xVREUsICcuKicpXQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdsb2JhbF9ydWxl
cyhjbHMpOgorICAgICAgICBpZiBub3QgY2xzLl9nbG9iYWxfcnVsZXM6CisgICAgICAgICAgICBj
bHMuX2dsb2JhbF9ydWxlcyA9IFJ1bGVzZXQoKQorICAgICAgICByZXR1cm4gY2xzLl9nbG9iYWxf
cnVsZXMKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBhZGRfZ2xvYmFsX3J1bGUoY2xzLCBy
dWxlKToKKyAgICAgICAgY2xzLmdsb2JhbF9ydWxlcygpLmFkZF9ydWxlKHJ1bGUpCisKKyAgICBk
ZWYgYWRkX3J1bGUoc2VsZiwgcnVsZSk6CisgICAgICAgIHNlbGYucnVsZXMuYXBwZW5kKHJ1bGUp
CisKKyAgICBkZWYgcGFzc2VzKHNlbGYsIGZpbGUpOgorICAgICAgICBhbGxvd2VkID0gRmFsc2UK
KyAgICAgICAgZm9yIHJ1bGUgaW4gc2VsZi5ydWxlczoKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1
bGUudGVzdChmaWxlKQorICAgICAgICAgICAgaWYgcmVzdWx0ID09IFJ1bGUuUmVzdWx0Lk5PX01B
VENIOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBhbGxvd2VkID0gUnVs
ZS5SZXN1bHQuSU5DTFVERSA9PSByZXN1bHQKKyAgICAgICAgcmV0dXJuIGFsbG93ZWQKKworCitj
bGFzcyBGaWxlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZV9yb290LCB0
YXJiYWxsX3Jvb3QpOgorICAgICAgICBzZWxmLnNvdXJjZV9yb290ID0gc291cmNlX3Jvb3QKKyAg
ICAgICAgc2VsZi50YXJiYWxsX3Jvb3QgPSB0YXJiYWxsX3Jvb3QKKworICAgIGRlZiBzaG91bGRf
c2tpcF9maWxlKHNlbGYsIHBhdGgpOgorICAgICAgICAjIERvIG5vdCBza2lwIGZpbGVzIGV4cGxp
Y2l0bHkgYWRkZWQgZnJvbSB0aGUgbWFuaWZlc3QuCisgICAgICAgIHJldHVybiBGYWxzZQorCisg
ICAgZGVmIGdldF9maWxlcyhzZWxmKToKKyAgICAgICAgeWllbGQgKHNlbGYuc291cmNlX3Jvb3Qs
IHNlbGYudGFyYmFsbF9yb290KQorCisKK2NsYXNzIERpcmVjdG9yeShvYmplY3QpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBzb3VyY2Vfcm9vdCwgdGFyYmFsbF9yb290KToKKyAgICAgICAgc2Vs
Zi5zb3VyY2Vfcm9vdCA9IHNvdXJjZV9yb290CisgICAgICAgIHNlbGYudGFyYmFsbF9yb290ID0g
dGFyYmFsbF9yb290CisgICAgICAgIHNlbGYucnVsZXMgPSBSdWxlc2V0KCkKKworICAgICAgICBz
ZWxmLmZpbGVzX2luX3ZlcnNpb25fY29udHJvbCA9IHNlbGYubGlzdF9maWxlc19pbl92ZXJzaW9u
X2NvbnRyb2woKQorCisgICAgZGVmIGFkZF9ydWxlKHNlbGYsIHJ1bGUpOgorICAgICAgICBzZWxm
LnJ1bGVzLmFkZF9ydWxlKHJ1bGUpCisKKyAgICBkZWYgZ2V0X3RhcmJhbGxfcGF0aChzZWxmLCBm
aWxlbmFtZSk6CisgICAgICAgIHJldHVybiBmaWxlbmFtZS5yZXBsYWNlKHNlbGYuc291cmNlX3Jv
b3QsIHNlbGYudGFyYmFsbF9yb290LCAxKQorCisgICAgZGVmIGxpc3RfZmlsZXNfaW5fdmVyc2lv
bl9jb250cm9sKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBPbmx5IGdpdCBpcyBzdXBwb3J0ZWQg
Zm9yIG5vdy4KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWydnaXQnLCAnbHMtdHJlZScs
ICctcicsICctLW5hbWUtb25seScsICdIRUFEJywgc2VsZi5zb3VyY2Vfcm9vdF0sIHN0ZG91dD1z
dWJwcm9jZXNzLlBJUEUpCisgICAgICAgIG91dCA9IHAuY29tbXVuaWNhdGUoKVswXQorICAgICAg
ICBpZiBub3Qgb3V0OgorICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIHJldHVybiBvdXQu
cnN0cmlwKCdcbicpLnNwbGl0KCdcbicpCisKKyAgICBkZWYgc2hvdWxkX3NraXBfZmlsZShzZWxm
LCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHBhdGggbm90IGluIHNlbGYuZmlsZXNfaW5fdmVyc2lv
bl9jb250cm9sCisKKyAgICBkZWYgZ2V0X2ZpbGVzKHNlbGYpOgorICAgICAgICBmb3Igcm9vdCwg
ZGlycywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnNvdXJjZV9yb290KToKKworICAgICAgICAgICAg
ZGVmIHBhc3Nlc19hbGxfcnVsZXMoZW50cnkpOgorICAgICAgICAgICAgICAgIHJldHVybiBSdWxl
c2V0Lmdsb2JhbF9ydWxlcygpLnBhc3NlcyhlbnRyeSkgYW5kIHNlbGYucnVsZXMucGFzc2VzKGVu
dHJ5KQorCisgICAgICAgICAgICB0b19rZWVwID0gZmlsdGVyKHBhc3Nlc19hbGxfcnVsZXMsIGRp
cnMpCisgICAgICAgICAgICBkZWwgZGlyc1s6XQorICAgICAgICAgICAgZGlycy5leHRlbmQodG9f
a2VlcCkKKworICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAg
ZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBmaWxlKQorICAgICAgICAgICAgICAgIGlmIG5vdCBw
YXNzZXNfYWxsX3J1bGVzKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAg
ICAgICAgICAgICAgIHlpZWxkIChmaWxlLCBzZWxmLmdldF90YXJiYWxsX3BhdGgoZmlsZSkpCisK
KworY2xhc3MgTWFuaWZlc3Qob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFuaWZl
c3RfZmlsZW5hbWUsIHNvdXJjZV9yb290LCBidWlsZF9yb290LCB0YXJiYWxsX3Jvb3Q9Jy8nKToK
KyAgICAgICAgc2VsZi5jdXJyZW50X2RpcmVjdG9yeSA9IE5vbmUKKyAgICAgICAgc2VsZi5kaXJl
Y3RvcmllcyA9IFtdCisgICAgICAgIHNlbGYudGFyYmFsbF9yb290ID0gdGFyYmFsbF9yb290Cisg
ICAgICAgIHNlbGYuc291cmNlX3Jvb3QgPSBzb3VyY2Vfcm9vdAorICAgICAgICBzZWxmLmJ1aWxk
X3Jvb3QgPSBidWlsZF9yb290CisKKyAgICAgICAgIyBOb3JtYWxpemUgdGhlIHRhcmJhbGwgcm9v
dCBzbyB0aGF0IGl0IHN0YXJ0cyBhbmQgZW5kcyB3aXRoIGEgc2xhc2guCisgICAgICAgIGlmIG5v
dCBzZWxmLnRhcmJhbGxfcm9vdC5lbmRzd2l0aCgnLycpOgorICAgICAgICAgICAgc2VsZi50YXJi
YWxsX3Jvb3QgPSBzZWxmLnRhcmJhbGxfcm9vdCArICcvJworICAgICAgICBpZiBub3Qgc2VsZi50
YXJiYWxsX3Jvb3Quc3RhcnRzd2l0aCgnLycpOgorICAgICAgICAgICAgc2VsZi50YXJiYWxsX3Jv
b3QgPSAnLycgKyBzZWxmLnRhcmJhbGxfcm9vdAorCisgICAgICAgIHdpdGggb3BlbihtYW5pZmVz
dF9maWxlbmFtZSwgJ3InKSBhcyBmaWxlOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmlsZS5y
ZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfbGluZShsaW5lKQorCisg
ICAgZGVmIGFkZF9ydWxlKHNlbGYsIHJ1bGUpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZGly
ZWN0b3J5IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X2RpcmVjdG9yeS5h
ZGRfcnVsZShydWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgUnVsZXNldC5hZGRfZ2xv
YmFsX3J1bGUocnVsZSkKKworICAgIGRlZiBhZGRfZGlyZWN0b3J5KHNlbGYsIGRpcmVjdG9yeSk6
CisgICAgICAgIHNlbGYuY3VycmVudF9kaXJlY3RvcnkgPSBkaXJlY3RvcnkKKyAgICAgICAgc2Vs
Zi5kaXJlY3Rvcmllcy5hcHBlbmQoZGlyZWN0b3J5KQorCisgICAgZGVmIGdldF9mdWxsX3NvdXJj
ZV9wYXRoKHNlbGYsIHNvdXJjZV9wYXRoKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3Rz
KHNvdXJjZV9wYXRoKToKKyAgICAgICAgICAgIHNvdXJjZV9wYXRoID0gb3MucGF0aC5qb2luKHNl
bGYuc291cmNlX3Jvb3QsIHNvdXJjZV9wYXRoKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlz
dHMoc291cmNlX3BhdGgpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdDb3VsZCBub3Qg
ZmluZCBkaXJlY3RvcnkgJXMnICUgc291cmNlX3BhdGgpCisgICAgICAgIHJldHVybiBzb3VyY2Vf
cGF0aAorCisgICAgZGVmIGdldF9mdWxsX3RhcmJhbGxfcGF0aChzZWxmLCBwYXRoKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYudGFyYmFsbF9yb290ICsgcGF0aAorCisgICAgZGVmIGdldF9zb3VyY2Vf
YW5kX3RhcmJhbGxfcGF0aHNfZnJvbV9wYXJ0cyhzZWxmLCBwYXJ0cyk6CisgICAgICAgIGZ1bGxf
c291cmNlX3BhdGggPSBzZWxmLmdldF9mdWxsX3NvdXJjZV9wYXRoKHBhcnRzWzFdKQorICAgICAg
ICBpZiBsZW4ocGFydHMpID4gMjoKKyAgICAgICAgICAgIGZ1bGxfdGFyYmFsbF9wYXRoID0gc2Vs
Zi5nZXRfZnVsbF90YXJiYWxsX3BhdGgocGFydHNbMl0pCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBmdWxsX3RhcmJhbGxfcGF0aCA9IHNlbGYuZ2V0X2Z1bGxfdGFyYmFsbF9wYXRoKHBhcnRz
WzFdKQorICAgICAgICByZXR1cm4gKGZ1bGxfc291cmNlX3BhdGgsIGZ1bGxfdGFyYmFsbF9wYXRo
KQorCisgICAgZGVmIHByb2Nlc3NfbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgcGFydHMgPSBs
aW5lLnNwbGl0KCkKKyAgICAgICAgaWYgbm90IHBhcnRzOgorICAgICAgICAgICAgcmV0dXJuCisg
ICAgICAgIGlmIHBhcnRzWzBdLnN0YXJ0c3dpdGgoIiMiKToKKyAgICAgICAgICAgIHJldHVybgor
CisgICAgICAgIGlmIHBhcnRzWzBdID09ICJkaXJlY3RvcnkiIGFuZCBsZW4ocGFydHMpID4gMToK
KyAgICAgICAgICAgIHNlbGYuYWRkX2RpcmVjdG9yeShEaXJlY3RvcnkoKnNlbGYuZ2V0X3NvdXJj
ZV9hbmRfdGFyYmFsbF9wYXRoc19mcm9tX3BhcnRzKHBhcnRzKSkpCisgICAgICAgIGVsaWYgcGFy
dHNbMF0gPT0gImZpbGUiIGFuZCBsZW4ocGFydHMpID4gMToKKyAgICAgICAgICAgIHNlbGYuYWRk
X2RpcmVjdG9yeShGaWxlKCpzZWxmLmdldF9zb3VyY2VfYW5kX3RhcmJhbGxfcGF0aHNfZnJvbV9w
YXJ0cyhwYXJ0cykpKQorICAgICAgICBlbGlmIHBhcnRzWzBdID09ICJleGNsdWRlIiBhbmQgbGVu
KHBhcnRzKSA+IDE6CisgICAgICAgICAgICBzZWxmLmFkZF9ydWxlKFJ1bGUoUnVsZS5SZXN1bHQu
RVhDTFVERSwgcGFydHNbMV0pKQorICAgICAgICBlbGlmIHBhcnRzWzBdID09ICJpbmNsdWRlIiBh
bmQgbGVuKHBhcnRzKSA+IDE6CisgICAgICAgICAgICBzZWxmLmFkZF9ydWxlKFJ1bGUoUnVsZS5S
ZXN1bHQuSU5DTFVERSwgcGFydHNbMV0pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFp
c2UgRXhjZXB0aW9uKCdMaW5lIGRvZXMgbm90IGJlZ2luIHdpdGggYSBjb3JyZWN0IHJ1bGU6XG5c
dCcgKyBsaW5lKQorCisgICAgZGVmIHNob3VsZF9za2lwX2ZpbGUoc2VsZiwgZGlyZWN0b3J5LCBm
aWxlbmFtZSk6CisgICAgICAgICMgT25seSBhbGxvdyBmaWxlcyB0aGF0IGFyZSBub3QgaW4gdmVy
c2lvbiBjb250cm9sIHdoZW4gdGhleSBhcmUgZXhwbGljaXRseSBpbmNsdWRlZCBpbiB0aGUgbWFu
aWZlc3QgZnJvbSB0aGUgYnVpbGQgZGlyLgorICAgICAgICBpZiBmaWxlbmFtZS5zdGFydHN3aXRo
KHNlbGYuYnVpbGRfcm9vdCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBy
ZXR1cm4gZGlyZWN0b3J5LnNob3VsZF9za2lwX2ZpbGUoZmlsZW5hbWUpCisKKyAgICBkZWYgZ2V0
X2ZpbGVzKHNlbGYpOgorICAgICAgICBmb3IgZGlyZWN0b3J5IGluIHNlbGYuZGlyZWN0b3JpZXM6
CisgICAgICAgICAgICBmb3IgZmlsZV90dXBsZSBpbiBkaXJlY3RvcnkuZ2V0X2ZpbGVzKCk6Cisg
ICAgICAgICAgICAgICAgaWYgc2VsZi5zaG91bGRfc2tpcF9maWxlKGRpcmVjdG9yeSwgZmlsZV90
dXBsZVswXSk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAg
eWllbGQgZmlsZV90dXBsZQorCisgICAgZGVmIGNyZWF0ZV90YXJmaWxlKHNlbGYsIG91dHB1dCk6
CisgICAgICAgIGNvdW50ID0gMAorICAgICAgICBmb3IgZmlsZV90dXBsZSBpbiBzZWxmLmdldF9m
aWxlcygpOgorICAgICAgICAgICAgY291bnQgPSBjb3VudCArIDEKKworICAgICAgICB3aXRoIGNs
b3NpbmcodGFyZmlsZS5vcGVuKG91dHB1dCwgJ3cnKSkgYXMgdGFyYmFsbDoKKyAgICAgICAgICAg
IGZvciBpLCAoZmlsZV9wYXRoLCB0YXJiYWxsX3BhdGgpIGluIGVudW1lcmF0ZShzZWxmLmdldF9m
aWxlcygpLCBzdGFydD0xKToKKyAgICAgICAgICAgICAgICBwcmludCgnVGFycmluZyBmaWxlIHsw
fSBvZiB7MX0nLmZvcm1hdChpLCBjb3VudCkubGp1c3QoNDApLCBlbmQ9J1xyJykKKyAgICAgICAg
ICAgICAgICB0YXJiYWxsLmFkZChmaWxlX3BhdGgsIHRhcmJhbGxfcGF0aCkKKyAgICAgICAgcHJp
bnQoIldyb3RlIHswfSIuZm9ybWF0KG91dHB1dCkubGp1c3QoNDApKQorCisKK2NsYXNzIERpc3Rj
aGVjayhvYmplY3QpOgorICAgIEJVSUxEX0RJUkVDVE9SWV9OQU1FID0gIl9idWlsZCIKKyAgICBJ
TlNUQUxMX0RJUkVDVE9SWV9OQU1FID0gIl9pbnN0YWxsIgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHNvdXJjZV9yb290LCBidWlsZF9yb290KToKKyAgICAgICAgc2VsZi5zb3VyY2Vfcm9vdCA9
IHNvdXJjZV9yb290CisgICAgICAgIHNlbGYuYnVpbGRfcm9vdCA9IGJ1aWxkX3Jvb3QKKworICAg
IGRlZiBleHRyYWN0X3RhcmJhbGwoc2VsZiwgdGFyYmFsbF9wYXRoKToKKyAgICAgICAgd2l0aCBj
bG9zaW5nKHRhcmZpbGUub3Blbih0YXJiYWxsX3BhdGgsICdyJykpIGFzIHRhcmJhbGw6CisgICAg
ICAgICAgICB0YXJiYWxsLmV4dHJhY3RhbGwoc2VsZi5idWlsZF9yb290KQorCisgICAgZGVmIGNv
bmZpZ3VyZShzZWxmLCBkaXN0X2RpciwgYnVpbGRfZGlyLCBpbnN0YWxsX2RpciwgcG9ydCk6Cisg
ICAgICAgIGRlZiBjcmVhdGVfZGlyKGRpcmVjdG9yeSwgZGlyZWN0b3J5X3R5cGUpOgorICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLm1rZGlyKGRpcmVjdG9yeSkKKyAgICAgICAg
ICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJy
bm8uRUVYSVNUIG9yIG5vdCBvcy5wYXRoLmlzZGlyKGRpcmVjdG9yeSk6CisgICAgICAgICAgICAg
ICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ291bGQgbm90IGNyZWF0ZSAlcyBkaXIgYXQgJXM6ICVz
IiAlIChkaXJlY3RvcnlfdHlwZSwgZGlyZWN0b3J5LCBzdHIoZSkpKQorCisgICAgICAgIGNyZWF0
ZV9kaXIoYnVpbGRfZGlyLCAiYnVpbGQiKQorICAgICAgICBjcmVhdGVfZGlyKGluc3RhbGxfZGly
LCAiaW5zdGFsbCIpCisKKyAgICAgICAgY29tbWFuZCA9IFsnY21ha2UnLCAnLURQT1JUPSVzJyAl
IHBvcnQsICctRENNQUtFX0lOU1RBTExfUFJFRklYPSVzJyAlIGluc3RhbGxfZGlyLCAnLURDTUFL
RV9CVUlMRF9UWVBFPVJlbGVhc2UnLCBkaXN0X2Rpcl0KKyAgICAgICAgc3VicHJvY2Vzcy5jaGVj
a19jYWxsKGNvbW1hbmQsIGN3ZD1idWlsZF9kaXIpCisKKyAgICBkZWYgYnVpbGQoc2VsZiwgYnVp
bGRfZGlyKToKKyAgICAgICAgY29tbWFuZCA9IFsnbWFrZSddCisgICAgICAgIG1ha2VfYXJncyA9
IG9zLmdldGVudignTUFLRV9BUkdTJykKKyAgICAgICAgaWYgbWFrZV9hcmdzOgorICAgICAgICAg
ICAgY29tbWFuZC5leHRlbmQobWFrZV9hcmdzLnNwbGl0KCcgJykpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBjb21tYW5kLmFwcGVuZCgnLWolZCcgJSBtdWx0aXByb2Nlc3NpbmcuY3B1X2Nv
dW50KCkpCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjb21tYW5kLCBjd2Q9YnVpbGRf
ZGlyKQorCisgICAgZGVmIGluc3RhbGwoc2VsZiwgYnVpbGRfZGlyKToKKyAgICAgICAgc3VicHJv
Y2Vzcy5jaGVja19jYWxsKFsnbWFrZScsICdpbnN0YWxsJ10sIGN3ZD1idWlsZF9kaXIpCisKKyAg
ICBkZWYgY2xlYW4oc2VsZiwgZGlzdF9kaXIpOgorICAgICAgICBzaHV0aWwucm10cmVlKGRpc3Rf
ZGlyKQorCisgICAgZGVmIGNoZWNrKHNlbGYsIHRhcmJhbGwsIHBvcnQpOgorICAgICAgICB0YXJi
YWxsX25hbWUsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZSh0YXJiYWxs
KSkKKyAgICAgICAgZGlzdF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9yb290LCB0YXJi
YWxsX25hbWUpCisgICAgICAgIGJ1aWxkX2RpciA9IG9zLnBhdGguam9pbihkaXN0X2Rpciwgc2Vs
Zi5CVUlMRF9ESVJFQ1RPUllfTkFNRSkKKyAgICAgICAgaW5zdGFsbF9kaXIgPSBvcy5wYXRoLmpv
aW4oZGlzdF9kaXIsIHNlbGYuSU5TVEFMTF9ESVJFQ1RPUllfTkFNRSkKKworICAgICAgICBzZWxm
LmV4dHJhY3RfdGFyYmFsbCh0YXJiYWxsKQorICAgICAgICBzZWxmLmNvbmZpZ3VyZShkaXN0X2Rp
ciwgYnVpbGRfZGlyLCBpbnN0YWxsX2RpciwgcG9ydCkKKyAgICAgICAgc2VsZi5idWlsZChidWls
ZF9kaXIpCisgICAgICAgIHNlbGYuaW5zdGFsbChidWlsZF9kaXIpCisgICAgICAgIHNlbGYuY2xl
YW4oZGlzdF9kaXIpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgY2xhc3MgRmls
ZVBhdGhBY3Rpb24oYXJncGFyc2UuQWN0aW9uKToKKyAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYs
IHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAg
ICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgc2VsZi5kZXN0LCBvcy5wYXRoLmFic3BhdGgodmFsdWVz
KSkKKworICAgIGRlZiBlbnN1cmVfdmVyc2lvbl9pZl9wb3NzaWJsZShhcmd1bWVudHMpOgorICAg
ICAgICBpZiBhcmd1bWVudHMudmVyc2lvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVy
bgorCisgICAgICAgIHBrZ2NvbmZpZ19maWxlID0gb3MucGF0aC5qb2luKGFyZ3VtZW50cy5idWls
ZF9kaXIsICJTb3VyY2UvV2ViS2l0L3dlYmtpdDJndGstNC4wLnBjIikKKyAgICAgICAgaWYgb3Mu
cGF0aC5pc2ZpbGUocGtnY29uZmlnX2ZpbGUpOgorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3Mu
UG9wZW4oWydwa2ctY29uZmlnJywgJy0tbW9kdmVyc2lvbicsIHBrZ2NvbmZpZ19maWxlXSwgc3Rk
b3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgIHZlcnNpb24gPSBwLmNvbW11bmljYXRl
KClbMF0KKyAgICAgICAgICAgIGlmIHZlcnNpb246CisgICAgICAgICAgICAgICAgYXJndW1lbnRz
LnZlcnNpb24gPSB2ZXJzaW9uLnJzdHJpcCgnXG4nKQorCisKKyAgICBkZWYgZ2V0X3RhcmJhbGxf
cm9vdF9hbmRfb3V0cHV0X2ZpbGVuYW1lX2Zyb21fYXJndW1lbnRzKGFyZ3VtZW50cyk6CisgICAg
ICAgIHRhcmJhbGxfcm9vdCA9IGFyZ3VtZW50cy50YXJiYWxsX25hbWUKKyAgICAgICAgaWYgYXJn
dW1lbnRzLnZlcnNpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0YXJiYWxsX3Jvb3QgKz0g
Jy0nICsgYXJndW1lbnRzLnZlcnNpb24KKworICAgICAgICBvdXRwdXRfZmlsZW5hbWUgPSBvcy5w
YXRoLmpvaW4oYXJndW1lbnRzLmJ1aWxkX2RpciwgdGFyYmFsbF9yb290ICsgIi50YXIiKQorICAg
ICAgICByZXR1cm4gdGFyYmFsbF9yb290LCBvdXRwdXRfZmlsZW5hbWUKKworICAgIHBhcnNlciA9
IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdCdWlsZCBhIGRpc3RyaWJ1dGlv
biBidW5kbGUuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYycsICctLWNoZWNrJywgYWN0
aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NoZWNrIHRo
ZSB0YXJiYWxsJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcycsICctLXNvdXJjZS1kaXIn
LCB0eXBlPXN0ciwgYWN0aW9uPUZpbGVQYXRoQWN0aW9uLCBkZWZhdWx0PW9zLmdldGN3ZCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgb2Yg
dGhlIHNvdXJjZSBkaXN0cmlidXRpb24uICcgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnRGlyZWN0b3J5IGZvciByZWxhdGl2ZSBwYXRocy4gRGVmYXVsdHMgdG8gY3VycmVudCBk
aXJlY3RvcnkuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXZlcnNpb24nLCB0eXBlPXN0
ciwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGhlIHZlcnNp
b24gb2YgdGhlIHRhcmJhbGwgdG8gZ2VuZXJhdGUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQo
Jy1iJywgJy0tYnVpbGQtZGlyJywgdHlwZT1zdHIsIGFjdGlvbj1GaWxlUGF0aEFjdGlvbiwgZGVm
YXVsdD1vcy5nZXRjd2QoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RoZSB0b3At
bGV2ZWwgcGF0aCBvZiBkaXJlY3Rvcnkgb2YgdGhlIGJ1aWxkIHJvb3QuICcgKyBcCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnQnkgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBkaXJlY3Rv
cnkuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdCcsICctLXRhcmJhbGwtbmFtZScsIHR5
cGU9c3RyLCBkZWZhdWx0PSd3ZWJraXRndGsnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0nQmFzZSBuYW1lIG9mIHRhcmJhbGwuIERlZmF1bHRzIHRvICJ3ZWJraXRndGsiLicpCisgICAg
cGFyc2VyLmFkZF9hcmd1bWVudCgnLXAnLCAnLS1wb3J0JywgdHlwZT1zdHIsIGRlZmF1bHQ9J0dU
SycsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQb3J0IHRvIGJlIGJ1aWx0IGluIHRh
cmJhbGwgY2hlY2suIERlZmF1bHRzIHRvICJHVEsiLicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVu
dCgnbWFuaWZlc3RfZmlsZW5hbWUnLCBtZXRhdmFyPSJtYW5pZmVzdCIsIHR5cGU9c3RyLCBhY3Rp
b249RmlsZVBhdGhBY3Rpb24sIGhlbHA9J1RoZSBwYXRoIHRvIHRoZSBtYW5pZmVzdCBmaWxlLicp
CisKKyAgICBhcmd1bWVudHMgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICAjIFBhdGhzIGlu
IHRoZSBtYW5pZmVzdCBhcmUgcmVsYXRpdmUgdG8gdGhlIHNvdXJjZSBkaXJlY3RvcnksIGFuZCB0
aGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQKKyAgICAjIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkg
aXMgdGhlIHNvdXJjZSBkaXJlY3RvcnksIHNvIGNoYW5nZSB0aGUgY3VycmVudCB3b3JraW5nIGRp
cmVjdG9yeQorICAgICMgdG8gYmUgdGhlIHNvdXJjZSBkaXJlY3RvcnkuCisgICAgb3MuY2hkaXIo
YXJndW1lbnRzLnNvdXJjZV9kaXIpCisKKyAgICBlbnN1cmVfdmVyc2lvbl9pZl9wb3NzaWJsZShh
cmd1bWVudHMpCisgICAgdGFyYmFsbF9yb290LCBvdXRwdXRfZmlsZW5hbWUgPSBnZXRfdGFyYmFs
bF9yb290X2FuZF9vdXRwdXRfZmlsZW5hbWVfZnJvbV9hcmd1bWVudHMoYXJndW1lbnRzKQorCisg
ICAgbWFuaWZlc3QgPSBNYW5pZmVzdChhcmd1bWVudHMubWFuaWZlc3RfZmlsZW5hbWUsIGFyZ3Vt
ZW50cy5zb3VyY2VfZGlyLCBhcmd1bWVudHMuYnVpbGRfZGlyLCB0YXJiYWxsX3Jvb3QpCisgICAg
bWFuaWZlc3QuY3JlYXRlX3RhcmZpbGUob3V0cHV0X2ZpbGVuYW1lKQorCisgICAgaWYgYXJndW1l
bnRzLmNoZWNrOgorICAgICAgICBEaXN0Y2hlY2soYXJndW1lbnRzLnNvdXJjZV9kaXIsIGFyZ3Vt
ZW50cy5idWlsZF9kaXIpLmNoZWNrKG91dHB1dF9maWxlbmFtZSwgYXJndW1lbnRzLnBvcnQpCmRp
ZmYgLS1naXQgYS9Ub29scy9ndGsvbWFrZS1kaXN0LnB5IGIvVG9vbHMvZ3RrL21ha2UtZGlzdC5w
eQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNmZkN2Q1YmM0MWEzMmYzZGM1MmEzNGIz
OGRlMjBjZDQ0YjE5NzRhZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Ub29scy9ndGsvbWFrZS1kaXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzMzICsw
LDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlh
IFMuTC4KLSMKLSMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0jIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotIyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0jIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCi0KLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KLWZyb20gY29u
dGV4dGxpYiBpbXBvcnQgY2xvc2luZwotCi1pbXBvcnQgYXJncGFyc2UKLWltcG9ydCBlcnJubwot
aW1wb3J0IG11bHRpcHJvY2Vzc2luZwotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBzaHV0
aWwKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgdGFyZmlsZQotCi0KLWRlZiBlbnVtKCoqZW51
bXMpOgotICAgIHJldHVybiB0eXBlKCdFbnVtJywgKCksIGVudW1zKQotCi0KLWNsYXNzIFJ1bGUo
b2JqZWN0KToKLSAgICBSZXN1bHQgPSBlbnVtKElOQ0xVREU9MSwgRVhDTFVERT0yLCBOT19NQVRD
SD0zKQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGUsIHBhdHRlcm4pOgotICAgICAgICBz
ZWxmLnR5cGUgPSB0eXBlCi0gICAgICAgIHNlbGYub3JpZ2luYWxfcGF0dGVybiA9IHBhdHRlcm4K
LSAgICAgICAgc2VsZi5wYXR0ZXJuID0gcmUuY29tcGlsZShwYXR0ZXJuKQotCi0gICAgZGVmIHRl
c3Qoc2VsZiwgZmlsZSk6Ci0gICAgICAgIGlmIG5vdChzZWxmLnBhdHRlcm4uc2VhcmNoKGZpbGUp
KToKLSAgICAgICAgICAgIHJldHVybiBSdWxlLlJlc3VsdC5OT19NQVRDSAotICAgICAgICByZXR1
cm4gc2VsZi50eXBlCi0KLQotY2xhc3MgUnVsZXNldChvYmplY3QpOgotICAgIF9nbG9iYWxfcnVs
ZXMgPSBOb25lCi0KLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgICMgQnkgZGVmYXVs
dCwgYWNjZXB0IGFsbCBmaWxlcy4KLSAgICAgICAgc2VsZi5ydWxlcyA9IFtSdWxlKFJ1bGUuUmVz
dWx0LklOQ0xVREUsICcuKicpXQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGdsb2JhbF9y
dWxlcyhjbHMpOgotICAgICAgICBpZiBub3QgY2xzLl9nbG9iYWxfcnVsZXM6Ci0gICAgICAgICAg
ICBjbHMuX2dsb2JhbF9ydWxlcyA9IFJ1bGVzZXQoKQotICAgICAgICByZXR1cm4gY2xzLl9nbG9i
YWxfcnVsZXMKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBhZGRfZ2xvYmFsX3J1bGUoY2xz
LCBydWxlKToKLSAgICAgICAgY2xzLmdsb2JhbF9ydWxlcygpLmFkZF9ydWxlKHJ1bGUpCi0KLSAg
ICBkZWYgYWRkX3J1bGUoc2VsZiwgcnVsZSk6Ci0gICAgICAgIHNlbGYucnVsZXMuYXBwZW5kKHJ1
bGUpCi0KLSAgICBkZWYgcGFzc2VzKHNlbGYsIGZpbGUpOgotICAgICAgICBhbGxvd2VkID0gRmFs
c2UKLSAgICAgICAgZm9yIHJ1bGUgaW4gc2VsZi5ydWxlczoKLSAgICAgICAgICAgIHJlc3VsdCA9
IHJ1bGUudGVzdChmaWxlKQotICAgICAgICAgICAgaWYgcmVzdWx0ID09IFJ1bGUuUmVzdWx0Lk5P
X01BVENIOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBhbGxvd2VkID0g
UnVsZS5SZXN1bHQuSU5DTFVERSA9PSByZXN1bHQKLSAgICAgICAgcmV0dXJuIGFsbG93ZWQKLQot
Ci1jbGFzcyBGaWxlKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZV9yb290
LCB0YXJiYWxsX3Jvb3QpOgotICAgICAgICBzZWxmLnNvdXJjZV9yb290ID0gc291cmNlX3Jvb3QK
LSAgICAgICAgc2VsZi50YXJiYWxsX3Jvb3QgPSB0YXJiYWxsX3Jvb3QKLQotICAgIGRlZiBzaG91
bGRfc2tpcF9maWxlKHNlbGYsIHBhdGgpOgotICAgICAgICAjIERvIG5vdCBza2lwIGZpbGVzIGV4
cGxpY2l0bHkgYWRkZWQgZnJvbSB0aGUgbWFuaWZlc3QuCi0gICAgICAgIHJldHVybiBGYWxzZQot
Ci0gICAgZGVmIGdldF9maWxlcyhzZWxmKToKLSAgICAgICAgeWllbGQgKHNlbGYuc291cmNlX3Jv
b3QsIHNlbGYudGFyYmFsbF9yb290KQotCi0KLWNsYXNzIERpcmVjdG9yeShvYmplY3QpOgotICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2Vfcm9vdCwgdGFyYmFsbF9yb290KToKLSAgICAgICAg
c2VsZi5zb3VyY2Vfcm9vdCA9IHNvdXJjZV9yb290Ci0gICAgICAgIHNlbGYudGFyYmFsbF9yb290
ID0gdGFyYmFsbF9yb290Ci0gICAgICAgIHNlbGYucnVsZXMgPSBSdWxlc2V0KCkKLQotICAgICAg
ICBzZWxmLmZpbGVzX2luX3ZlcnNpb25fY29udHJvbCA9IHNlbGYubGlzdF9maWxlc19pbl92ZXJz
aW9uX2NvbnRyb2woKQotCi0gICAgZGVmIGFkZF9ydWxlKHNlbGYsIHJ1bGUpOgotICAgICAgICBz
ZWxmLnJ1bGVzLmFkZF9ydWxlKHJ1bGUpCi0KLSAgICBkZWYgZ2V0X3RhcmJhbGxfcGF0aChzZWxm
LCBmaWxlbmFtZSk6Ci0gICAgICAgIHJldHVybiBmaWxlbmFtZS5yZXBsYWNlKHNlbGYuc291cmNl
X3Jvb3QsIHNlbGYudGFyYmFsbF9yb290LCAxKQotCi0gICAgZGVmIGxpc3RfZmlsZXNfaW5fdmVy
c2lvbl9jb250cm9sKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBPbmx5IGdpdCBpcyBzdXBwb3J0
ZWQgZm9yIG5vdy4KLSAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWydnaXQnLCAnbHMtdHJl
ZScsICctcicsICctLW5hbWUtb25seScsICdIRUFEJywgc2VsZi5zb3VyY2Vfcm9vdF0sIHN0ZG91
dD1zdWJwcm9jZXNzLlBJUEUpCi0gICAgICAgIG91dCA9IHAuY29tbXVuaWNhdGUoKVswXQotICAg
ICAgICBpZiBub3Qgb3V0OgotICAgICAgICAgICAgcmV0dXJuIFtdCi0gICAgICAgIHJldHVybiBv
dXQucnN0cmlwKCdcbicpLnNwbGl0KCdcbicpCi0KLSAgICBkZWYgc2hvdWxkX3NraXBfZmlsZShz
ZWxmLCBwYXRoKToKLSAgICAgICAgcmV0dXJuIHBhdGggbm90IGluIHNlbGYuZmlsZXNfaW5fdmVy
c2lvbl9jb250cm9sCi0KLSAgICBkZWYgZ2V0X2ZpbGVzKHNlbGYpOgotICAgICAgICBmb3Igcm9v
dCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnNvdXJjZV9yb290KToKLQotICAgICAgICAg
ICAgZGVmIHBhc3Nlc19hbGxfcnVsZXMoZW50cnkpOgotICAgICAgICAgICAgICAgIHJldHVybiBS
dWxlc2V0Lmdsb2JhbF9ydWxlcygpLnBhc3NlcyhlbnRyeSkgYW5kIHNlbGYucnVsZXMucGFzc2Vz
KGVudHJ5KQotCi0gICAgICAgICAgICB0b19rZWVwID0gZmlsdGVyKHBhc3Nlc19hbGxfcnVsZXMs
IGRpcnMpCi0gICAgICAgICAgICBkZWwgZGlyc1s6XQotICAgICAgICAgICAgZGlycy5leHRlbmQo
dG9fa2VlcCkKLQotICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6Ci0gICAgICAgICAgICAg
ICAgZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBmaWxlKQotICAgICAgICAgICAgICAgIGlmIG5v
dCBwYXNzZXNfYWxsX3J1bGVzKGZpbGUpOgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQot
ICAgICAgICAgICAgICAgIHlpZWxkIChmaWxlLCBzZWxmLmdldF90YXJiYWxsX3BhdGgoZmlsZSkp
Ci0KLQotY2xhc3MgTWFuaWZlc3Qob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFu
aWZlc3RfZmlsZW5hbWUsIHNvdXJjZV9yb290LCBidWlsZF9yb290LCB0YXJiYWxsX3Jvb3Q9Jy8n
KToKLSAgICAgICAgc2VsZi5jdXJyZW50X2RpcmVjdG9yeSA9IE5vbmUKLSAgICAgICAgc2VsZi5k
aXJlY3RvcmllcyA9IFtdCi0gICAgICAgIHNlbGYudGFyYmFsbF9yb290ID0gdGFyYmFsbF9yb290
Ci0gICAgICAgIHNlbGYuc291cmNlX3Jvb3QgPSBzb3VyY2Vfcm9vdAotICAgICAgICBzZWxmLmJ1
aWxkX3Jvb3QgPSBidWlsZF9yb290Ci0KLSAgICAgICAgIyBOb3JtYWxpemUgdGhlIHRhcmJhbGwg
cm9vdCBzbyB0aGF0IGl0IHN0YXJ0cyBhbmQgZW5kcyB3aXRoIGEgc2xhc2guCi0gICAgICAgIGlm
IG5vdCBzZWxmLnRhcmJhbGxfcm9vdC5lbmRzd2l0aCgnLycpOgotICAgICAgICAgICAgc2VsZi50
YXJiYWxsX3Jvb3QgPSBzZWxmLnRhcmJhbGxfcm9vdCArICcvJwotICAgICAgICBpZiBub3Qgc2Vs
Zi50YXJiYWxsX3Jvb3Quc3RhcnRzd2l0aCgnLycpOgotICAgICAgICAgICAgc2VsZi50YXJiYWxs
X3Jvb3QgPSAnLycgKyBzZWxmLnRhcmJhbGxfcm9vdAotCi0gICAgICAgIHdpdGggb3BlbihtYW5p
ZmVzdF9maWxlbmFtZSwgJ3InKSBhcyBmaWxlOgotICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmls
ZS5yZWFkbGluZXMoKToKLSAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfbGluZShsaW5lKQot
Ci0gICAgZGVmIGFkZF9ydWxlKHNlbGYsIHJ1bGUpOgotICAgICAgICBpZiBzZWxmLmN1cnJlbnRf
ZGlyZWN0b3J5IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5jdXJyZW50X2RpcmVjdG9y
eS5hZGRfcnVsZShydWxlKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgUnVsZXNldC5hZGRf
Z2xvYmFsX3J1bGUocnVsZSkKLQotICAgIGRlZiBhZGRfZGlyZWN0b3J5KHNlbGYsIGRpcmVjdG9y
eSk6Ci0gICAgICAgIHNlbGYuY3VycmVudF9kaXJlY3RvcnkgPSBkaXJlY3RvcnkKLSAgICAgICAg
c2VsZi5kaXJlY3Rvcmllcy5hcHBlbmQoZGlyZWN0b3J5KQotCi0gICAgZGVmIGdldF9mdWxsX3Nv
dXJjZV9wYXRoKHNlbGYsIHNvdXJjZV9wYXRoKToKLSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhp
c3RzKHNvdXJjZV9wYXRoKToKLSAgICAgICAgICAgIHNvdXJjZV9wYXRoID0gb3MucGF0aC5qb2lu
KHNlbGYuc291cmNlX3Jvb3QsIHNvdXJjZV9wYXRoKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5l
eGlzdHMoc291cmNlX3BhdGgpOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdDb3VsZCBu
b3QgZmluZCBkaXJlY3RvcnkgJXMnICUgc291cmNlX3BhdGgpCi0gICAgICAgIHJldHVybiBzb3Vy
Y2VfcGF0aAotCi0gICAgZGVmIGdldF9mdWxsX3RhcmJhbGxfcGF0aChzZWxmLCBwYXRoKToKLSAg
ICAgICAgcmV0dXJuIHNlbGYudGFyYmFsbF9yb290ICsgcGF0aAotCi0gICAgZGVmIGdldF9zb3Vy
Y2VfYW5kX3RhcmJhbGxfcGF0aHNfZnJvbV9wYXJ0cyhzZWxmLCBwYXJ0cyk6Ci0gICAgICAgIGZ1
bGxfc291cmNlX3BhdGggPSBzZWxmLmdldF9mdWxsX3NvdXJjZV9wYXRoKHBhcnRzWzFdKQotICAg
ICAgICBpZiBsZW4ocGFydHMpID4gMjoKLSAgICAgICAgICAgIGZ1bGxfdGFyYmFsbF9wYXRoID0g
c2VsZi5nZXRfZnVsbF90YXJiYWxsX3BhdGgocGFydHNbMl0pCi0gICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICBmdWxsX3RhcmJhbGxfcGF0aCA9IHNlbGYuZ2V0X2Z1bGxfdGFyYmFsbF9wYXRoKHBh
cnRzWzFdKQotICAgICAgICByZXR1cm4gKGZ1bGxfc291cmNlX3BhdGgsIGZ1bGxfdGFyYmFsbF9w
YXRoKQotCi0gICAgZGVmIHByb2Nlc3NfbGluZShzZWxmLCBsaW5lKToKLSAgICAgICAgcGFydHMg
PSBsaW5lLnNwbGl0KCkKLSAgICAgICAgaWYgbm90IHBhcnRzOgotICAgICAgICAgICAgcmV0dXJu
Ci0gICAgICAgIGlmIHBhcnRzWzBdLnN0YXJ0c3dpdGgoIiMiKToKLSAgICAgICAgICAgIHJldHVy
bgotCi0gICAgICAgIGlmIHBhcnRzWzBdID09ICJkaXJlY3RvcnkiIGFuZCBsZW4ocGFydHMpID4g
MToKLSAgICAgICAgICAgIHNlbGYuYWRkX2RpcmVjdG9yeShEaXJlY3RvcnkoKnNlbGYuZ2V0X3Nv
dXJjZV9hbmRfdGFyYmFsbF9wYXRoc19mcm9tX3BhcnRzKHBhcnRzKSkpCi0gICAgICAgIGVsaWYg
cGFydHNbMF0gPT0gImZpbGUiIGFuZCBsZW4ocGFydHMpID4gMToKLSAgICAgICAgICAgIHNlbGYu
YWRkX2RpcmVjdG9yeShGaWxlKCpzZWxmLmdldF9zb3VyY2VfYW5kX3RhcmJhbGxfcGF0aHNfZnJv
bV9wYXJ0cyhwYXJ0cykpKQotICAgICAgICBlbGlmIHBhcnRzWzBdID09ICJleGNsdWRlIiBhbmQg
bGVuKHBhcnRzKSA+IDE6Ci0gICAgICAgICAgICBzZWxmLmFkZF9ydWxlKFJ1bGUoUnVsZS5SZXN1
bHQuRVhDTFVERSwgcGFydHNbMV0pKQotICAgICAgICBlbGlmIHBhcnRzWzBdID09ICJpbmNsdWRl
IiBhbmQgbGVuKHBhcnRzKSA+IDE6Ci0gICAgICAgICAgICBzZWxmLmFkZF9ydWxlKFJ1bGUoUnVs
ZS5SZXN1bHQuSU5DTFVERSwgcGFydHNbMV0pKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAg
cmFpc2UgRXhjZXB0aW9uKCdMaW5lIGRvZXMgbm90IGJlZ2luIHdpdGggYSBjb3JyZWN0IHJ1bGU6
XG5cdCcgKyBsaW5lKQotCi0gICAgZGVmIHNob3VsZF9za2lwX2ZpbGUoc2VsZiwgZGlyZWN0b3J5
LCBmaWxlbmFtZSk6Ci0gICAgICAgICMgT25seSBhbGxvdyBmaWxlcyB0aGF0IGFyZSBub3QgaW4g
dmVyc2lvbiBjb250cm9sIHdoZW4gdGhleSBhcmUgZXhwbGljaXRseSBpbmNsdWRlZCBpbiB0aGUg
bWFuaWZlc3QgZnJvbSB0aGUgYnVpbGQgZGlyLgotICAgICAgICBpZiBmaWxlbmFtZS5zdGFydHN3
aXRoKHNlbGYuYnVpbGRfcm9vdCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAg
ICByZXR1cm4gZGlyZWN0b3J5LnNob3VsZF9za2lwX2ZpbGUoZmlsZW5hbWUpCi0KLSAgICBkZWYg
Z2V0X2ZpbGVzKHNlbGYpOgotICAgICAgICBmb3IgZGlyZWN0b3J5IGluIHNlbGYuZGlyZWN0b3Jp
ZXM6Ci0gICAgICAgICAgICBmb3IgZmlsZV90dXBsZSBpbiBkaXJlY3RvcnkuZ2V0X2ZpbGVzKCk6
Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5zaG91bGRfc2tpcF9maWxlKGRpcmVjdG9yeSwgZmls
ZV90dXBsZVswXSk6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAg
ICAgeWllbGQgZmlsZV90dXBsZQotCi0gICAgZGVmIGNyZWF0ZV90YXJmaWxlKHNlbGYsIG91dHB1
dCk6Ci0gICAgICAgIGNvdW50ID0gMAotICAgICAgICBmb3IgZmlsZV90dXBsZSBpbiBzZWxmLmdl
dF9maWxlcygpOgotICAgICAgICAgICAgY291bnQgPSBjb3VudCArIDEKLQotICAgICAgICB3aXRo
IGNsb3NpbmcodGFyZmlsZS5vcGVuKG91dHB1dCwgJ3cnKSkgYXMgdGFyYmFsbDoKLSAgICAgICAg
ICAgIGZvciBpLCAoZmlsZV9wYXRoLCB0YXJiYWxsX3BhdGgpIGluIGVudW1lcmF0ZShzZWxmLmdl
dF9maWxlcygpLCBzdGFydD0xKToKLSAgICAgICAgICAgICAgICBwcmludCgnVGFycmluZyBmaWxl
IHswfSBvZiB7MX0nLmZvcm1hdChpLCBjb3VudCkubGp1c3QoNDApLCBlbmQ9J1xyJykKLSAgICAg
ICAgICAgICAgICB0YXJiYWxsLmFkZChmaWxlX3BhdGgsIHRhcmJhbGxfcGF0aCkKLSAgICAgICAg
cHJpbnQoIldyb3RlIHswfSIuZm9ybWF0KG91dHB1dCkubGp1c3QoNDApKQotCi0KLWNsYXNzIERp
c3RjaGVjayhvYmplY3QpOgotICAgIEJVSUxEX0RJUkVDVE9SWV9OQU1FID0gIl9idWlsZCIKLSAg
ICBJTlNUQUxMX0RJUkVDVE9SWV9OQU1FID0gIl9pbnN0YWxsIgotCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIHNvdXJjZV9yb290LCBidWlsZF9yb290KToKLSAgICAgICAgc2VsZi5zb3VyY2Vfcm9v
dCA9IHNvdXJjZV9yb290Ci0gICAgICAgIHNlbGYuYnVpbGRfcm9vdCA9IGJ1aWxkX3Jvb3QKLQot
ICAgIGRlZiBleHRyYWN0X3RhcmJhbGwoc2VsZiwgdGFyYmFsbF9wYXRoKToKLSAgICAgICAgd2l0
aCBjbG9zaW5nKHRhcmZpbGUub3Blbih0YXJiYWxsX3BhdGgsICdyJykpIGFzIHRhcmJhbGw6Ci0g
ICAgICAgICAgICB0YXJiYWxsLmV4dHJhY3RhbGwoc2VsZi5idWlsZF9yb290KQotCi0gICAgZGVm
IGNvbmZpZ3VyZShzZWxmLCBkaXN0X2RpciwgYnVpbGRfZGlyLCBpbnN0YWxsX2RpciwgcG9ydCk6
Ci0gICAgICAgIGRlZiBjcmVhdGVfZGlyKGRpcmVjdG9yeSwgZGlyZWN0b3J5X3R5cGUpOgotICAg
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zLm1rZGlyKGRpcmVjdG9yeSkKLSAgICAg
ICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0g
ZXJybm8uRUVYSVNUIG9yIG5vdCBvcy5wYXRoLmlzZGlyKGRpcmVjdG9yeSk6Ci0gICAgICAgICAg
ICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ291bGQgbm90IGNyZWF0ZSAlcyBkaXIgYXQgJXM6
ICVzIiAlIChkaXJlY3RvcnlfdHlwZSwgZGlyZWN0b3J5LCBzdHIoZSkpKQotCi0gICAgICAgIGNy
ZWF0ZV9kaXIoYnVpbGRfZGlyLCAiYnVpbGQiKQotICAgICAgICBjcmVhdGVfZGlyKGluc3RhbGxf
ZGlyLCAiaW5zdGFsbCIpCi0KLSAgICAgICAgY29tbWFuZCA9IFsnY21ha2UnLCAnLURQT1JUPSVz
JyAlIHBvcnQsICctRENNQUtFX0lOU1RBTExfUFJFRklYPSVzJyAlIGluc3RhbGxfZGlyLCAnLURD
TUFLRV9CVUlMRF9UWVBFPVJlbGVhc2UnLCBkaXN0X2Rpcl0KLSAgICAgICAgc3VicHJvY2Vzcy5j
aGVja19jYWxsKGNvbW1hbmQsIGN3ZD1idWlsZF9kaXIpCi0KLSAgICBkZWYgYnVpbGQoc2VsZiwg
YnVpbGRfZGlyKToKLSAgICAgICAgY29tbWFuZCA9IFsnbWFrZSddCi0gICAgICAgIG1ha2VfYXJn
cyA9IG9zLmdldGVudignTUFLRV9BUkdTJykKLSAgICAgICAgaWYgbWFrZV9hcmdzOgotICAgICAg
ICAgICAgY29tbWFuZC5leHRlbmQobWFrZV9hcmdzLnNwbGl0KCcgJykpCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICBjb21tYW5kLmFwcGVuZCgnLWolZCcgJSBtdWx0aXByb2Nlc3NpbmcuY3B1
X2NvdW50KCkpCi0gICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjb21tYW5kLCBjd2Q9YnVp
bGRfZGlyKQotCi0gICAgZGVmIGluc3RhbGwoc2VsZiwgYnVpbGRfZGlyKToKLSAgICAgICAgc3Vi
cHJvY2Vzcy5jaGVja19jYWxsKFsnbWFrZScsICdpbnN0YWxsJ10sIGN3ZD1idWlsZF9kaXIpCi0K
LSAgICBkZWYgY2xlYW4oc2VsZiwgZGlzdF9kaXIpOgotICAgICAgICBzaHV0aWwucm10cmVlKGRp
c3RfZGlyKQotCi0gICAgZGVmIGNoZWNrKHNlbGYsIHRhcmJhbGwsIHBvcnQpOgotICAgICAgICB0
YXJiYWxsX25hbWUsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZSh0YXJi
YWxsKSkKLSAgICAgICAgZGlzdF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9yb290LCB0
YXJiYWxsX25hbWUpCi0gICAgICAgIGJ1aWxkX2RpciA9IG9zLnBhdGguam9pbihkaXN0X2Rpciwg
c2VsZi5CVUlMRF9ESVJFQ1RPUllfTkFNRSkKLSAgICAgICAgaW5zdGFsbF9kaXIgPSBvcy5wYXRo
LmpvaW4oZGlzdF9kaXIsIHNlbGYuSU5TVEFMTF9ESVJFQ1RPUllfTkFNRSkKLQotICAgICAgICBz
ZWxmLmV4dHJhY3RfdGFyYmFsbCh0YXJiYWxsKQotICAgICAgICBzZWxmLmNvbmZpZ3VyZShkaXN0
X2RpciwgYnVpbGRfZGlyLCBpbnN0YWxsX2RpciwgcG9ydCkKLSAgICAgICAgc2VsZi5idWlsZChi
dWlsZF9kaXIpCi0gICAgICAgIHNlbGYuaW5zdGFsbChidWlsZF9kaXIpCi0gICAgICAgIHNlbGYu
Y2xlYW4oZGlzdF9kaXIpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgY2xhc3Mg
RmlsZVBhdGhBY3Rpb24oYXJncGFyc2UuQWN0aW9uKToKLSAgICAgICAgZGVmIF9fY2FsbF9fKHNl
bGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6Ci0gICAg
ICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgc2VsZi5kZXN0LCBvcy5wYXRoLmFic3BhdGgodmFs
dWVzKSkKLQotICAgIGRlZiBlbnN1cmVfdmVyc2lvbl9pZl9wb3NzaWJsZShhcmd1bWVudHMpOgot
ICAgICAgICBpZiBhcmd1bWVudHMudmVyc2lvbiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJl
dHVybgotCi0gICAgICAgIHBrZ2NvbmZpZ19maWxlID0gb3MucGF0aC5qb2luKGFyZ3VtZW50cy5i
dWlsZF9kaXIsICJTb3VyY2UvV2ViS2l0L3dlYmtpdDJndGstNC4wLnBjIikKLSAgICAgICAgaWYg
b3MucGF0aC5pc2ZpbGUocGtnY29uZmlnX2ZpbGUpOgotICAgICAgICAgICAgcCA9IHN1YnByb2Nl
c3MuUG9wZW4oWydwa2ctY29uZmlnJywgJy0tbW9kdmVyc2lvbicsIHBrZ2NvbmZpZ19maWxlXSwg
c3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKLSAgICAgICAgICAgIHZlcnNpb24gPSBwLmNvbW11bmlj
YXRlKClbMF0KLSAgICAgICAgICAgIGlmIHZlcnNpb246Ci0gICAgICAgICAgICAgICAgYXJndW1l
bnRzLnZlcnNpb24gPSB2ZXJzaW9uLnJzdHJpcCgnXG4nKQotCi0KLSAgICBkZWYgZ2V0X3RhcmJh
bGxfcm9vdF9hbmRfb3V0cHV0X2ZpbGVuYW1lX2Zyb21fYXJndW1lbnRzKGFyZ3VtZW50cyk6Ci0g
ICAgICAgIHRhcmJhbGxfcm9vdCA9IGFyZ3VtZW50cy50YXJiYWxsX25hbWUKLSAgICAgICAgaWYg
YXJndW1lbnRzLnZlcnNpb24gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0YXJiYWxsX3Jvb3Qg
Kz0gJy0nICsgYXJndW1lbnRzLnZlcnNpb24KLQotICAgICAgICBvdXRwdXRfZmlsZW5hbWUgPSBv
cy5wYXRoLmpvaW4oYXJndW1lbnRzLmJ1aWxkX2RpciwgdGFyYmFsbF9yb290ICsgIi50YXIiKQot
ICAgICAgICByZXR1cm4gdGFyYmFsbF9yb290LCBvdXRwdXRfZmlsZW5hbWUKLQotICAgIHBhcnNl
ciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdCdWlsZCBhIGRpc3RyaWJ1
dGlvbiBidW5kbGUuJykKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYycsICctLWNoZWNrJywg
YWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NoZWNr
IHRoZSB0YXJiYWxsJykKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcycsICctLXNvdXJjZS1k
aXInLCB0eXBlPXN0ciwgYWN0aW9uPUZpbGVQYXRoQWN0aW9uLCBkZWZhdWx0PW9zLmdldGN3ZCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkg
b2YgdGhlIHNvdXJjZSBkaXN0cmlidXRpb24uICcgKyBcCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnRGlyZWN0b3J5IGZvciByZWxhdGl2ZSBwYXRocy4gRGVmYXVsdHMgdG8gY3VycmVu
dCBkaXJlY3RvcnkuJykKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXZlcnNpb24nLCB0eXBl
PXN0ciwgZGVmYXVsdD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGhlIHZl
cnNpb24gb2YgdGhlIHRhcmJhbGwgdG8gZ2VuZXJhdGUnKQotICAgIHBhcnNlci5hZGRfYXJndW1l
bnQoJy1iJywgJy0tYnVpbGQtZGlyJywgdHlwZT1zdHIsIGFjdGlvbj1GaWxlUGF0aEFjdGlvbiwg
ZGVmYXVsdD1vcy5nZXRjd2QoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RoZSB0
b3AtbGV2ZWwgcGF0aCBvZiBkaXJlY3Rvcnkgb2YgdGhlIGJ1aWxkIHJvb3QuICcgKyBcCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnQnkgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBkaXJl
Y3RvcnkuJykKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdCcsICctLXRhcmJhbGwtbmFtZScs
IHR5cGU9c3RyLCBkZWZhdWx0PSd3ZWJraXRndGsnLAotICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0nQmFzZSBuYW1lIG9mIHRhcmJhbGwuIERlZmF1bHRzIHRvICJ3ZWJraXRndGsiLicpCi0g
ICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXAnLCAnLS1wb3J0JywgdHlwZT1zdHIsIGRlZmF1bHQ9
J0dUSycsCi0gICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQb3J0IHRvIGJlIGJ1aWx0IGlu
IHRhcmJhbGwgY2hlY2suIERlZmF1bHRzIHRvICJHVEsiLicpCi0gICAgcGFyc2VyLmFkZF9hcmd1
bWVudCgnbWFuaWZlc3RfZmlsZW5hbWUnLCBtZXRhdmFyPSJtYW5pZmVzdCIsIHR5cGU9c3RyLCBh
Y3Rpb249RmlsZVBhdGhBY3Rpb24sIGhlbHA9J1RoZSBwYXRoIHRvIHRoZSBtYW5pZmVzdCBmaWxl
LicpCi0KLSAgICBhcmd1bWVudHMgPSBwYXJzZXIucGFyc2VfYXJncygpCi0KLSAgICAjIFBhdGhz
IGluIHRoZSBtYW5pZmVzdCBhcmUgcmVsYXRpdmUgdG8gdGhlIHNvdXJjZSBkaXJlY3RvcnksIGFu
ZCB0aGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQKLSAgICAjIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rv
cnkgaXMgdGhlIHNvdXJjZSBkaXJlY3RvcnksIHNvIGNoYW5nZSB0aGUgY3VycmVudCB3b3JraW5n
IGRpcmVjdG9yeQotICAgICMgdG8gYmUgdGhlIHNvdXJjZSBkaXJlY3RvcnkuCi0gICAgb3MuY2hk
aXIoYXJndW1lbnRzLnNvdXJjZV9kaXIpCi0KLSAgICBlbnN1cmVfdmVyc2lvbl9pZl9wb3NzaWJs
ZShhcmd1bWVudHMpCi0gICAgdGFyYmFsbF9yb290LCBvdXRwdXRfZmlsZW5hbWUgPSBnZXRfdGFy
YmFsbF9yb290X2FuZF9vdXRwdXRfZmlsZW5hbWVfZnJvbV9hcmd1bWVudHMoYXJndW1lbnRzKQot
Ci0gICAgbWFuaWZlc3QgPSBNYW5pZmVzdChhcmd1bWVudHMubWFuaWZlc3RfZmlsZW5hbWUsIGFy
Z3VtZW50cy5zb3VyY2VfZGlyLCBhcmd1bWVudHMuYnVpbGRfZGlyLCB0YXJiYWxsX3Jvb3QpCi0g
ICAgbWFuaWZlc3QuY3JlYXRlX3RhcmZpbGUob3V0cHV0X2ZpbGVuYW1lKQotCi0gICAgaWYgYXJn
dW1lbnRzLmNoZWNrOgotICAgICAgICBEaXN0Y2hlY2soYXJndW1lbnRzLnNvdXJjZV9kaXIsIGFy
Z3VtZW50cy5idWlsZF9kaXIpLmNoZWNrKG91dHB1dF9maWxlbmFtZSwgYXJndW1lbnRzLnBvcnQp
CmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggM2Y2ZjY5OWE2NDQ1ZDk0
MDBiZDZiYjUzYTU5M2FhYzJmOGEwYzM3MC4uNWNiOTk0MzY2YzVjNTdhZmIwNDAwMjVmOWM5Njc2
ODRlOWJmZWNmZiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE2IEBACisyMDE3LTExLTAxICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdh
bGlhLmNvbT4KKworICAgICAgICBbV1BFXVtHVEtdIEF2b2lkIGR1cGxpY2F0aW5nIGNvZGUgZm9y
IGRpc3QgYW5kIGRpc3RjaGVjayB0YXJnZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzkxNTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGNvbW1pdCBqdXN0IHJlZHVjZXMgc29tZSBDTWFrZSBj
b2RlIGR1cGxpY2F0aW9uIGJldHdlZW4gR1RLIGFuZCBXUEUuCisKKyAgICAgICAgKiBTb3VyY2Uv
UGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogU291cmNlL1BsYXRmb3JtV1BFLmNtYWtlOgor
ICAgICAgICAqIFNvdXJjZS9jbWFrZS9XZWJLaXREaXN0LmNtYWtlOiBBZGRlZC4KKwogMjAxNy0x
MC0zMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZC4gVXBkYXRlIE9wdGlvbnNHVEsuY21ha2UgYW5kIE5FV1MgZm9yIDIuMTku
MSByZWxlYXNlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325683</attachid>
            <date>2017-11-01 22:40:15 -0700</date>
            <delta_ts>2017-11-02 05:28:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179154-20171102004015.patch</filename>
            <type>text/plain</type>
            <size>34242</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0Mjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm1H
VEsuY21ha2UgYi9Tb3VyY2UvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggMDQxYzY3YTBjMzRiNGRl
NmJkNzJiNmM1YmFhZThiMjdmZTMyZGI1Ny4uYzQyY2UzNDY5NTU0NzNjNjI5YmNmN2JiM2IzYTYx
YWM1ZmUzZTFiYyAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMSwzICsxLDUgQEAKK2luY2x1ZGUoV2ViS2l0RGlz
dCkKKwogYWRkX3N1YmRpcmVjdG9yeSgke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ndGsvcG8pCiAK
ICMgVGhpcyBhbGxvd3MgZXhwb3NpbmcgYSAnZ2lyJyB0YXJnZXQgd2hpY2ggYnVpbGRzIGFsbCBH
T2JqZWN0IGludHJvc3BlY3Rpb24gZmlsZXMuCkBAIC01Miw0NSArNTQsNiBAQCBhZGRfY3VzdG9t
X3RhcmdldChjaGVjawogKQogCiBpZiAoREVWRUxPUEVSX01PREUpCi0gICAgY29uZmlndXJlX2Zp
bGUoCi0gICAgICAgICR7VE9PTFNfRElSfS9ndGsvbWFuaWZlc3QudHh0LmluCi0gICAgICAgICR7
Q01BS0VfQklOQVJZX0RJUn0vbWFuaWZlc3QudHh0Ci0gICAgKQotCi0gICAgYWRkX2N1c3RvbV9j
b21tYW5kKAotICAgICAgICBPVVRQVVQgJHtDTUFLRV9CSU5BUllfRElSfS93ZWJraXRndGstJHtQ
Uk9KRUNUX1ZFUlNJT059LnRhcgotICAgICAgICBERVBFTkRTICR7VE9PTFNfRElSfS9ndGsvbWFr
ZS1kaXN0LnB5Ci0gICAgICAgIERFUEVORFMgJHtDTUFLRV9CSU5BUllfRElSfS9tYW5pZmVzdC50
eHQKLSAgICAgICAgREVQRU5EUyBXZWJLaXQKLSAgICAgICAgREVQRU5EUyBndGtkb2MKLSAgICAg
ICAgQ09NTUFORCAke1RPT0xTX0RJUn0vZ3RrL21ha2UtZGlzdC5weQotICAgICAgICAgICAgICAg
IC0tc291cmNlLWRpcj0ke0NNQUtFX1NPVVJDRV9ESVJ9Ci0gICAgICAgICAgICAgICAgLS1idWls
ZC1kaXI9JHtDTUFLRV9CSU5BUllfRElSfQotICAgICAgICAgICAgICAgIC0tdmVyc2lvbj0ke1BS
T0pFQ1RfVkVSU0lPTn0KLSAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L21hbmlm
ZXN0LnR4dAotICAgICkKLQotICAgIGFkZF9jdXN0b21fY29tbWFuZCgKLSAgICAgICAgT1VUUFVU
ICR7Q01BS0VfQklOQVJZX0RJUn0vd2Via2l0Z3RrLSR7UFJPSkVDVF9WRVJTSU9OfS50YXIueHoK
LSAgICAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L3dlYmtpdGd0ay0ke1BST0pFQ1Rf
VkVSU0lPTn0udGFyCi0gICAgICAgIENPTU1BTkQgeHogLWYgJHtDTUFLRV9CSU5BUllfRElSfS93
ZWJraXRndGstJHtQUk9KRUNUX1ZFUlNJT059LnRhcgotICAgICkKLQotICAgIGFkZF9jdXN0b21f
dGFyZ2V0KGRpc3QKLSAgICAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L3dlYmtpdGd0
ay0ke1BST0pFQ1RfVkVSU0lPTn0udGFyLnh6Ci0gICAgKQotCi0gICAgYWRkX2N1c3RvbV90YXJn
ZXQoZGlzdGNoZWNrCi0gICAgICAgIERFUEVORFMgJHtUT09MU19ESVJ9L2d0ay9tYWtlLWRpc3Qu
cHkKLSAgICAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L21hbmlmZXN0LnR4dAotICAg
ICAgICBERVBFTkRTIFdlYktpdAotICAgICAgICBERVBFTkRTIGd0a2RvYwotICAgICAgICBDT01N
QU5EICR7VE9PTFNfRElSfS9ndGsvbWFrZS1kaXN0LnB5Ci0gICAgICAgICAgICAgICAgLS1jaGVj
awotICAgICAgICAgICAgICAgIC0tc291cmNlLWRpcj0ke0NNQUtFX1NPVVJDRV9ESVJ9Ci0gICAg
ICAgICAgICAgICAgLS1idWlsZC1kaXI9JHtDTUFLRV9CSU5BUllfRElSfQotICAgICAgICAgICAg
ICAgIC0tdmVyc2lvbj0ke1BST0pFQ1RfVkVSU0lPTn0KLSAgICAgICAgICAgICAgICAke0NNQUtF
X0JJTkFSWV9ESVJ9L21hbmlmZXN0LnR4dAotICAgICAgICBDT01NQU5EIHh6IC1mICR7Q01BS0Vf
QklOQVJZX0RJUn0vd2Via2l0Z3RrLSR7UFJPSkVDVF9WRVJTSU9OfS50YXIKLSAgICApCisgICAg
YWRkX2N1c3RvbV90YXJnZXQoRG9jdW1lbnRhdGlvbiBERVBFTkRTIGd0a2RvYykKKyAgICBXRUJL
SVRfREVDTEFSRV9ESVNUX1RBUkdFVFMoR1RLIHdlYmtpdGd0ayAke1RPT0xTX0RJUn0vZ3RrL21h
bmlmZXN0LnR4dC5pbikKIGVuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm1XUEUu
Y21ha2UgYi9Tb3VyY2UvUGxhdGZvcm1XUEUuY21ha2UKaW5kZXggMjE1OTZiZmMwNDAzZGY5Zjhm
ODQ0MjI3ZGZiOTdhYzU0NDhkY2ViZS4uMzg2NDJlMDc4MmNjMzNiZjk0NzVlNmVlNDdlZTk3NzE4
NTM1NzU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtV1BFLmNtYWtlCisrKyBiL1NvdXJj
ZS9QbGF0Zm9ybVdQRS5jbWFrZQpAQCAtMSw0NCArMSw3IEBACi1pZiAoREVWRUxPUEVSX01PREUp
Ci0gICAgZmluZF9wYWNrYWdlKFh6IFJFUVVJUkVEKQotCi0gICAgY29uZmlndXJlX2ZpbGUoCi0g
ICAgICAgICR7VE9PTFNfRElSfS93cGUvbWFuaWZlc3QudHh0LmluCi0gICAgICAgICR7Q01BS0Vf
QklOQVJZX0RJUn0vbWFuaWZlc3QudHh0Ci0gICAgKQotCi0gICAgYWRkX2N1c3RvbV90YXJnZXQo
ZGlzdGNoZWNrCi0gICAgICAgIENPTU1FTlQgIkNoZWNraW5nIHJlbGVhc2UgdGFyYmFsbDogd3Bl
d2Via2l0LSR7UFJPSkVDVF9WRVJTSU9OfS50YXIiCi0gICAgICAgIERFUEVORFMgIiR7Q01BS0Vf
QklOQVJZX0RJUn0vbWFuaWZlc3QudHh0IgotICAgICAgICAgICAgICAgICIke1RPT0xTX0RJUn0v
Z3RrL21ha2UtZGlzdC5weSIKLSAgICAgICAgQ09NTUFORCAiJHtUT09MU19ESVJ9L2d0ay9tYWtl
LWRpc3QucHkiCi0gICAgICAgICAgICAgICAgIi0tY2hlY2siICItLXBvcnQ9V1BFIgotICAgICAg
ICAgICAgICAgICItLXRhcmJhbGwtbmFtZT13cGV3ZWJraXQiCi0gICAgICAgICAgICAgICAgIi0t
c291cmNlLWRpcj0ke0NNQUtFX1NPVVJDRV9ESVJ9IgotICAgICAgICAgICAgICAgICItLWJ1aWxk
LWRpcj0ke0NNQUtFX0JJTkFSWV9ESVJ9IgotICAgICAgICAgICAgICAgICItLXZlcnNpb249JHtQ
Uk9KRUNUX1ZFUlNJT059IgotICAgICAgICAgICAgICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9L21h
bmlmZXN0LnR4dCIKLSAgICAgICAgQ09NTUFORCAiJHtYWl9FWEVDVVRBQkxFfSIgIi1ldmZRIgot
ICAgICAgICAgICAgICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9L3dwZXdlYmtpdC0ke1BST0pFQ1Rf
VkVSU0lPTn0udGFyIgotICAgICAgICBVU0VTX1RFUk1JTkFMCi0gICAgKQoraW5jbHVkZShXZWJL
aXREaXN0KQogCi0gICAgYWRkX2N1c3RvbV9jb21tYW5kKAotICAgICAgICBDT01NRU5UICJDcmVh
dGluZyByZWxlYXNlIHRhcmJhbGw6IHdwZXdlYmtpdC0ke1BST0pFQ1RfVkVSU0lPTn0udGFyLnh6
IgotICAgICAgICBPVVRQVVQgIiR7Q01BS0VfQklOQVJZX0RJUn0vd3Bld2Via2l0LSR7UFJPSkVD
VF9WRVJTSU9OfS50YXIueHoiCi0gICAgICAgIE1BSU5fREVQRU5ERU5DWSAiJHtDTUFLRV9CSU5B
UllfRElSfS9tYW5pZmVzdC50eHQiCi0gICAgICAgIERFUEVORFMgIiR7VE9PTFNfRElSfS9ndGsv
bWFrZS1kaXN0LnB5IgotICAgICAgICBDT01NQU5EICIke1RPT0xTX0RJUn0vZ3RrL21ha2UtZGlz
dC5weSIKLSAgICAgICAgICAgICAgICAiLS10YXJiYWxsLW5hbWU9d3Bld2Via2l0IgotICAgICAg
ICAgICAgICAgICItLXNvdXJjZS1kaXI9JHtDTUFLRV9TT1VSQ0VfRElSfSIKLSAgICAgICAgICAg
ICAgICAiLS1idWlsZC1kaXI9JHtDTUFLRV9CSU5BUllfRElSfSIKLSAgICAgICAgICAgICAgICAi
LS12ZXJzaW9uPSR7UFJPSkVDVF9WRVJTSU9OfSIKLSAgICAgICAgICAgICAgICAiJHtDTUFLRV9C
SU5BUllfRElSfS9tYW5pZmVzdC50eHQiCi0gICAgICAgIENPTU1BTkQgIiR7WFpfRVhFQ1VUQUJM
RX0iICItZXZmUSIKLSAgICAgICAgICAgICAgICAiJHtDTUFLRV9CSU5BUllfRElSfS93cGV3ZWJr
aXQtJHtQUk9KRUNUX1ZFUlNJT059LnRhciIKLSAgICAgICAgVVNFU19URVJNSU5BTAotICAgICkK
LQotICAgIGFkZF9jdXN0b21fdGFyZ2V0KGRpc3QKLSAgICAgICAgREVQRU5EUyAiJHtDTUFLRV9C
SU5BUllfRElSfS93cGV3ZWJraXQtJHtQUk9KRUNUX1ZFUlNJT059LnRhci54eiIKLSAgICApCitp
ZiAoREVWRUxPUEVSX01PREUpCisgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgZGVwZW5kIG9uIGEg
Z3RrZG9jIHRhcmdldAorICAgIGFkZF9jdXN0b21fdGFyZ2V0KERvY3VtZW50YXRpb24pCisgICAg
V0VCS0lUX0RFQ0xBUkVfRElTVF9UQVJHRVRTKFdQRSB3cGV3ZWJraXQgJHtUT09MU19ESVJ9L3dw
ZS9tYW5pZmVzdC50eHQuaW4pCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL1dl
YktpdERpc3QuY21ha2UgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RGlzdC5jbWFrZQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lMDEyMjlkYzA1MjExNzVlNTA0NzlmYmJkOGUyYWRlODJjODI4ZDZiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL2NtYWtlL1dlYktpdERpc3QuY21ha2UKQEAgLTAsMCArMSw0OCBAQAorbWFj
cm8oV0VCS0lUX0RFQ0xBUkVfRElTVF9UQVJHRVRTIF9wb3J0IF90YXJiYWxsX3ByZWZpeCBfbWFu
aWZlc3QpCisgICAgZmluZF9wYWNrYWdlKFh6IFJFUVVJUkVEKQorCisgICAgY29uZmlndXJlX2Zp
bGUoCisgICAgICAgICR7X21hbmlmZXN0fQorICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L21h
bmlmZXN0LnR4dAorICAgICkKKworICAgIGFkZF9jdXN0b21fdGFyZ2V0KGRpc3RjaGVjaworICAg
ICAgICBDT01NRU5UICJDaGVja2luZyByZWxlYXNlIHRhcmJhbGw6ICR7X3RhcmJhbGxfcHJlZml4
fS0ke1BST0pFQ1RfVkVSU0lPTn0udGFyIgorICAgICAgICBERVBFTkRTICR7Q01BS0VfQklOQVJZ
X0RJUn0vbWFuaWZlc3QudHh0CisgICAgICAgIERFUEVORFMgV2ViS2l0CisgICAgICAgIERFUEVO
RFMgRG9jdW1lbnRhdGlvbgorICAgICAgICBDT01NQU5EICR7VE9PTFNfRElSfS9TY3JpcHRzL21h
a2UtZGlzdAorICAgICAgICAgICAgICAgIC0tY2hlY2sgLS1wb3J0PSR7X3BvcnR9CisgICAgICAg
ICAgICAgICAgLS10YXJiYWxsLW5hbWU9JHtfdGFyYmFsbF9wcmVmaXh9CisgICAgICAgICAgICAg
ICAgLS1zb3VyY2UtZGlyPSR7Q01BS0VfU09VUkNFX0RJUn0KKyAgICAgICAgICAgICAgICAtLWJ1
aWxkLWRpcj0ke0NNQUtFX0JJTkFSWV9ESVJ9CisgICAgICAgICAgICAgICAgLS12ZXJzaW9uPSR7
UFJPSkVDVF9WRVJTSU9OfQorICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vbWFu
aWZlc3QudHh0CisgICAgICAgIENPTU1BTkQgJHtYWl9FWEVDVVRBQkxFfSIgIi1ldmZRCisgICAg
ICAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfS8ke190YXJiYWxsX3ByZWZpeH0tJHtQUk9K
RUNUX1ZFUlNJT059LnRhcgorICAgICAgICBVU0VTX1RFUk1JTkFMCisgICAgICAgIFZFUkJBVElN
CisgICAgKQorCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKAorICAgICAgICBDT01NRU5UICJDcmVh
dGluZyByZWxlYXNlIHRhcmJhbGw6ICR7X3RhcmJhbGxfcHJlZml4fS0ke1BST0pFQ1RfVkVSU0lP
Tn0udGFyLnh6IgorICAgICAgICBPVVRQVVQgJHtDTUFLRV9CSU5BUllfRElSfS8ke190YXJiYWxs
X3ByZWZpeH0tJHtQUk9KRUNUX1ZFUlNJT059LnRhci54egorICAgICAgICBNQUlOX0RFUEVOREVO
Q1kgJHtDTUFLRV9CSU5BUllfRElSfS9tYW5pZmVzdC50eHQKKyAgICAgICAgQ09NTUFORCAke1RP
T0xTX0RJUn0vU2NyaXB0cy9tYWtlLWRpc3QKKyAgICAgICAgICAgICAgICAtLXRhcmJhbGwtbmFt
ZT0ke190YXJiYWxsX3ByZWZpeH0KKyAgICAgICAgICAgICAgICAtLXNvdXJjZS1kaXI9JHtDTUFL
RV9TT1VSQ0VfRElSfQorICAgICAgICAgICAgICAgIC0tYnVpbGQtZGlyPSR7Q01BS0VfQklOQVJZ
X0RJUn0KKyAgICAgICAgICAgICAgICAtLXZlcnNpb249JHtQUk9KRUNUX1ZFUlNJT059CisgICAg
ICAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9tYW5pZmVzdC50eHQKKyAgICAgICAgQ09N
TUFORCAke1haX0VYRUNVVEFCTEV9IiAtZXZmUQorICAgICAgICAgICAgICAgICR7Q01BS0VfQklO
QVJZX0RJUn0vJHtfdGFyYmFsbF9wcmVmaXh9LSR7UFJPSkVDVF9WRVJTSU9OfS50YXIKKyAgICAg
ICAgVVNFU19URVJNSU5BTAorICAgICAgICBWRVJCQVRJTQorICAgICkKKworICAgIGFkZF9jdXN0
b21fdGFyZ2V0KGRpc3QKKyAgICAgICAgREVQRU5EUyAiJHtDTUFLRV9CSU5BUllfRElSfS8ke190
YXJiYWxsX3ByZWZpeH0tJHtQUk9KRUNUX1ZFUlNJT059LnRhci54eiIKKyAgICAgICAgREVQRU5E
UyBXZWJLaXQKKyAgICAgICAgREVQRU5EUyBEb2N1bWVudGF0aW9uCisgICAgKQorZW5kbWFjcm8o
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDgy
ZTYxMTRjMWFiY2MzY2Y5ZTVjZDA1OWE0ZjRiMmVmMTQ2MzBjOGQuLjJiNzA5MmYyMzQwYjU0ZGI3
YWYyM2E2ZGI0ODc3Y2E2ZjAwMmMyZDEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNy0xMS0wMSAgTWljaGFlbCBD
YXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1dQRV1bR1RLXSBB
dm9pZCBkdXBsaWNhdGluZyBjb2RlIGZvciBkaXN0IGFuZCBkaXN0Y2hlY2sgdGFyZ2V0cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5MTU0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgc2Ny
aXB0IG91dCBvZiBUb29scy9ndGsgYmVjYXVzZSBpdCBpcyBhbHJlYWR5IHVzZWQgYnkgV1BFLiBB
bHNvLCBkcm9wIHRoZSAucHkKKyAgICAgICAgcHJlZml4IGJlY2F1c2UgaXQgaXMgZXhlY3V0YWJs
ZS4KKworICAgICAgICAqIFNjcmlwdHMvbWFrZS1kaXN0OiBSZW5hbWVkIGZyb20gVG9vbHMvZ3Rr
L21ha2UtZGlzdC5weS4KKwogMjAxNy0xMC0zMSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xp
bmdAc29ueS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIEluc3BlY3RvciBtZW51
IGl0ZW1zIHRvIE1hYyBNaW5pQnJvd3NlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9tYWtl
LWRpc3QgYi9Ub29scy9TY3JpcHRzL21ha2UtZGlzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYjdlNjVkMGNkZjI1
NzkwMmY3YjBmODM3Yzc1NWIzYTI0ZTcwMjk0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2Ny
aXB0cy9tYWtlLWRpc3QKQEAgLTAsMCArMSwzMzMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjIK
KyMgQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisjCisjIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyMgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorIworIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorCitmcm9tIF9fZnV0dXJlX18gaW1w
b3J0IHByaW50X2Z1bmN0aW9uCitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNsb3NpbmcKKworaW1w
b3J0IGFyZ3BhcnNlCitpbXBvcnQgZXJybm8KK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9y
dCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0
IHRhcmZpbGUKKworCitkZWYgZW51bSgqKmVudW1zKToKKyAgICByZXR1cm4gdHlwZSgnRW51bScs
ICgpLCBlbnVtcykKKworCitjbGFzcyBSdWxlKG9iamVjdCk6CisgICAgUmVzdWx0ID0gZW51bShJ
TkNMVURFPTEsIEVYQ0xVREU9MiwgTk9fTUFUQ0g9MykKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCB0eXBlLCBwYXR0ZXJuKToKKyAgICAgICAgc2VsZi50eXBlID0gdHlwZQorICAgICAgICBzZWxm
Lm9yaWdpbmFsX3BhdHRlcm4gPSBwYXR0ZXJuCisgICAgICAgIHNlbGYucGF0dGVybiA9IHJlLmNv
bXBpbGUocGF0dGVybikKKworICAgIGRlZiB0ZXN0KHNlbGYsIGZpbGUpOgorICAgICAgICBpZiBu
b3Qoc2VsZi5wYXR0ZXJuLnNlYXJjaChmaWxlKSk6CisgICAgICAgICAgICByZXR1cm4gUnVsZS5S
ZXN1bHQuTk9fTUFUQ0gKKyAgICAgICAgcmV0dXJuIHNlbGYudHlwZQorCisKK2NsYXNzIFJ1bGVz
ZXQob2JqZWN0KToKKyAgICBfZ2xvYmFsX3J1bGVzID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYpOgorICAgICAgICAjIEJ5IGRlZmF1bHQsIGFjY2VwdCBhbGwgZmlsZXMuCisgICAgICAg
IHNlbGYucnVsZXMgPSBbUnVsZShSdWxlLlJlc3VsdC5JTkNMVURFLCAnLionKV0KKworICAgIEBj
bGFzc21ldGhvZAorICAgIGRlZiBnbG9iYWxfcnVsZXMoY2xzKToKKyAgICAgICAgaWYgbm90IGNs
cy5fZ2xvYmFsX3J1bGVzOgorICAgICAgICAgICAgY2xzLl9nbG9iYWxfcnVsZXMgPSBSdWxlc2V0
KCkKKyAgICAgICAgcmV0dXJuIGNscy5fZ2xvYmFsX3J1bGVzCisKKyAgICBAY2xhc3NtZXRob2QK
KyAgICBkZWYgYWRkX2dsb2JhbF9ydWxlKGNscywgcnVsZSk6CisgICAgICAgIGNscy5nbG9iYWxf
cnVsZXMoKS5hZGRfcnVsZShydWxlKQorCisgICAgZGVmIGFkZF9ydWxlKHNlbGYsIHJ1bGUpOgor
ICAgICAgICBzZWxmLnJ1bGVzLmFwcGVuZChydWxlKQorCisgICAgZGVmIHBhc3NlcyhzZWxmLCBm
aWxlKToKKyAgICAgICAgYWxsb3dlZCA9IEZhbHNlCisgICAgICAgIGZvciBydWxlIGluIHNlbGYu
cnVsZXM6CisgICAgICAgICAgICByZXN1bHQgPSBydWxlLnRlc3QoZmlsZSkKKyAgICAgICAgICAg
IGlmIHJlc3VsdCA9PSBSdWxlLlJlc3VsdC5OT19NQVRDSDoKKyAgICAgICAgICAgICAgICBjb250
aW51ZQorICAgICAgICAgICAgYWxsb3dlZCA9IFJ1bGUuUmVzdWx0LklOQ0xVREUgPT0gcmVzdWx0
CisgICAgICAgIHJldHVybiBhbGxvd2VkCisKKworY2xhc3MgRmlsZShvYmplY3QpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBzb3VyY2Vfcm9vdCwgdGFyYmFsbF9yb290KToKKyAgICAgICAgc2Vs
Zi5zb3VyY2Vfcm9vdCA9IHNvdXJjZV9yb290CisgICAgICAgIHNlbGYudGFyYmFsbF9yb290ID0g
dGFyYmFsbF9yb290CisKKyAgICBkZWYgc2hvdWxkX3NraXBfZmlsZShzZWxmLCBwYXRoKToKKyAg
ICAgICAgIyBEbyBub3Qgc2tpcCBmaWxlcyBleHBsaWNpdGx5IGFkZGVkIGZyb20gdGhlIG1hbmlm
ZXN0LgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBnZXRfZmlsZXMoc2VsZik6Cisg
ICAgICAgIHlpZWxkIChzZWxmLnNvdXJjZV9yb290LCBzZWxmLnRhcmJhbGxfcm9vdCkKKworCitj
bGFzcyBEaXJlY3Rvcnkob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlX3Jv
b3QsIHRhcmJhbGxfcm9vdCk6CisgICAgICAgIHNlbGYuc291cmNlX3Jvb3QgPSBzb3VyY2Vfcm9v
dAorICAgICAgICBzZWxmLnRhcmJhbGxfcm9vdCA9IHRhcmJhbGxfcm9vdAorICAgICAgICBzZWxm
LnJ1bGVzID0gUnVsZXNldCgpCisKKyAgICAgICAgc2VsZi5maWxlc19pbl92ZXJzaW9uX2NvbnRy
b2wgPSBzZWxmLmxpc3RfZmlsZXNfaW5fdmVyc2lvbl9jb250cm9sKCkKKworICAgIGRlZiBhZGRf
cnVsZShzZWxmLCBydWxlKToKKyAgICAgICAgc2VsZi5ydWxlcy5hZGRfcnVsZShydWxlKQorCisg
ICAgZGVmIGdldF90YXJiYWxsX3BhdGgoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICByZXR1cm4g
ZmlsZW5hbWUucmVwbGFjZShzZWxmLnNvdXJjZV9yb290LCBzZWxmLnRhcmJhbGxfcm9vdCwgMSkK
KworICAgIGRlZiBsaXN0X2ZpbGVzX2luX3ZlcnNpb25fY29udHJvbChzZWxmKToKKyAgICAgICAg
IyBGSVhNRTogT25seSBnaXQgaXMgc3VwcG9ydGVkIGZvciBub3cuCisgICAgICAgIHAgPSBzdWJw
cm9jZXNzLlBvcGVuKFsnZ2l0JywgJ2xzLXRyZWUnLCAnLXInLCAnLS1uYW1lLW9ubHknLCAnSEVB
RCcsIHNlbGYuc291cmNlX3Jvb3RdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBv
dXQgPSBwLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgaWYgbm90IG91dDoKKyAgICAgICAgICAg
IHJldHVybiBbXQorICAgICAgICByZXR1cm4gb3V0LnJzdHJpcCgnXG4nKS5zcGxpdCgnXG4nKQor
CisgICAgZGVmIHNob3VsZF9za2lwX2ZpbGUoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBw
YXRoIG5vdCBpbiBzZWxmLmZpbGVzX2luX3ZlcnNpb25fY29udHJvbAorCisgICAgZGVmIGdldF9m
aWxlcyhzZWxmKToKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc2Vs
Zi5zb3VyY2Vfcm9vdCk6CisKKyAgICAgICAgICAgIGRlZiBwYXNzZXNfYWxsX3J1bGVzKGVudHJ5
KToKKyAgICAgICAgICAgICAgICByZXR1cm4gUnVsZXNldC5nbG9iYWxfcnVsZXMoKS5wYXNzZXMo
ZW50cnkpIGFuZCBzZWxmLnJ1bGVzLnBhc3NlcyhlbnRyeSkKKworICAgICAgICAgICAgdG9fa2Vl
cCA9IGZpbHRlcihwYXNzZXNfYWxsX3J1bGVzLCBkaXJzKQorICAgICAgICAgICAgZGVsIGRpcnNb
Ol0KKyAgICAgICAgICAgIGRpcnMuZXh0ZW5kKHRvX2tlZXApCisKKyAgICAgICAgICAgIGZvciBm
aWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwg
ZmlsZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgcGFzc2VzX2FsbF9ydWxlcyhmaWxlKToKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB5aWVsZCAoZmlsZSwg
c2VsZi5nZXRfdGFyYmFsbF9wYXRoKGZpbGUpKQorCisKK2NsYXNzIE1hbmlmZXN0KG9iamVjdCk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hbmlmZXN0X2ZpbGVuYW1lLCBzb3VyY2Vfcm9vdCwg
YnVpbGRfcm9vdCwgdGFyYmFsbF9yb290PScvJyk6CisgICAgICAgIHNlbGYuY3VycmVudF9kaXJl
Y3RvcnkgPSBOb25lCisgICAgICAgIHNlbGYuZGlyZWN0b3JpZXMgPSBbXQorICAgICAgICBzZWxm
LnRhcmJhbGxfcm9vdCA9IHRhcmJhbGxfcm9vdAorICAgICAgICBzZWxmLnNvdXJjZV9yb290ID0g
c291cmNlX3Jvb3QKKyAgICAgICAgc2VsZi5idWlsZF9yb290ID0gYnVpbGRfcm9vdAorCisgICAg
ICAgICMgTm9ybWFsaXplIHRoZSB0YXJiYWxsIHJvb3Qgc28gdGhhdCBpdCBzdGFydHMgYW5kIGVu
ZHMgd2l0aCBhIHNsYXNoLgorICAgICAgICBpZiBub3Qgc2VsZi50YXJiYWxsX3Jvb3QuZW5kc3dp
dGgoJy8nKToKKyAgICAgICAgICAgIHNlbGYudGFyYmFsbF9yb290ID0gc2VsZi50YXJiYWxsX3Jv
b3QgKyAnLycKKyAgICAgICAgaWYgbm90IHNlbGYudGFyYmFsbF9yb290LnN0YXJ0c3dpdGgoJy8n
KToKKyAgICAgICAgICAgIHNlbGYudGFyYmFsbF9yb290ID0gJy8nICsgc2VsZi50YXJiYWxsX3Jv
b3QKKworICAgICAgICB3aXRoIG9wZW4obWFuaWZlc3RfZmlsZW5hbWUsICdyJykgYXMgZmlsZToK
KyAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbGUucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAg
ICAgc2VsZi5wcm9jZXNzX2xpbmUobGluZSkKKworICAgIGRlZiBhZGRfcnVsZShzZWxmLCBydWxl
KToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2RpcmVjdG9yeSBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgIHNlbGYuY3VycmVudF9kaXJlY3RvcnkuYWRkX3J1bGUocnVsZSkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIFJ1bGVzZXQuYWRkX2dsb2JhbF9ydWxlKHJ1bGUpCisKKyAgICBkZWYg
YWRkX2RpcmVjdG9yeShzZWxmLCBkaXJlY3RvcnkpOgorICAgICAgICBzZWxmLmN1cnJlbnRfZGly
ZWN0b3J5ID0gZGlyZWN0b3J5CisgICAgICAgIHNlbGYuZGlyZWN0b3JpZXMuYXBwZW5kKGRpcmVj
dG9yeSkKKworICAgIGRlZiBnZXRfZnVsbF9zb3VyY2VfcGF0aChzZWxmLCBzb3VyY2VfcGF0aCk6
CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzb3VyY2VfcGF0aCk6CisgICAgICAgICAg
ICBzb3VyY2VfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnNvdXJjZV9yb290LCBzb3VyY2VfcGF0
aCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNvdXJjZV9wYXRoKToKKyAgICAgICAg
ICAgIHJhaXNlIEV4Y2VwdGlvbignQ291bGQgbm90IGZpbmQgZGlyZWN0b3J5ICVzJyAlIHNvdXJj
ZV9wYXRoKQorICAgICAgICByZXR1cm4gc291cmNlX3BhdGgKKworICAgIGRlZiBnZXRfZnVsbF90
YXJiYWxsX3BhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLnRhcmJhbGxfcm9v
dCArIHBhdGgKKworICAgIGRlZiBnZXRfc291cmNlX2FuZF90YXJiYWxsX3BhdGhzX2Zyb21fcGFy
dHMoc2VsZiwgcGFydHMpOgorICAgICAgICBmdWxsX3NvdXJjZV9wYXRoID0gc2VsZi5nZXRfZnVs
bF9zb3VyY2VfcGF0aChwYXJ0c1sxXSkKKyAgICAgICAgaWYgbGVuKHBhcnRzKSA+IDI6CisgICAg
ICAgICAgICBmdWxsX3RhcmJhbGxfcGF0aCA9IHNlbGYuZ2V0X2Z1bGxfdGFyYmFsbF9wYXRoKHBh
cnRzWzJdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnVsbF90YXJiYWxsX3BhdGggPSBz
ZWxmLmdldF9mdWxsX3RhcmJhbGxfcGF0aChwYXJ0c1sxXSkKKyAgICAgICAgcmV0dXJuIChmdWxs
X3NvdXJjZV9wYXRoLCBmdWxsX3RhcmJhbGxfcGF0aCkKKworICAgIGRlZiBwcm9jZXNzX2xpbmUo
c2VsZiwgbGluZSk6CisgICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgpCisgICAgICAgIGlmIG5v
dCBwYXJ0czoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBwYXJ0c1swXS5zdGFydHN3
aXRoKCIjIik6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBwYXJ0c1swXSA9PSAi
ZGlyZWN0b3J5IiBhbmQgbGVuKHBhcnRzKSA+IDE6CisgICAgICAgICAgICBzZWxmLmFkZF9kaXJl
Y3RvcnkoRGlyZWN0b3J5KCpzZWxmLmdldF9zb3VyY2VfYW5kX3RhcmJhbGxfcGF0aHNfZnJvbV9w
YXJ0cyhwYXJ0cykpKQorICAgICAgICBlbGlmIHBhcnRzWzBdID09ICJmaWxlIiBhbmQgbGVuKHBh
cnRzKSA+IDE6CisgICAgICAgICAgICBzZWxmLmFkZF9kaXJlY3RvcnkoRmlsZSgqc2VsZi5nZXRf
c291cmNlX2FuZF90YXJiYWxsX3BhdGhzX2Zyb21fcGFydHMocGFydHMpKSkKKyAgICAgICAgZWxp
ZiBwYXJ0c1swXSA9PSAiZXhjbHVkZSIgYW5kIGxlbihwYXJ0cykgPiAxOgorICAgICAgICAgICAg
c2VsZi5hZGRfcnVsZShSdWxlKFJ1bGUuUmVzdWx0LkVYQ0xVREUsIHBhcnRzWzFdKSkKKyAgICAg
ICAgZWxpZiBwYXJ0c1swXSA9PSAiaW5jbHVkZSIgYW5kIGxlbihwYXJ0cykgPiAxOgorICAgICAg
ICAgICAgc2VsZi5hZGRfcnVsZShSdWxlKFJ1bGUuUmVzdWx0LklOQ0xVREUsIHBhcnRzWzFdKSkK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignTGluZSBkb2VzIG5v
dCBiZWdpbiB3aXRoIGEgY29ycmVjdCBydWxlOlxuXHQnICsgbGluZSkKKworICAgIGRlZiBzaG91
bGRfc2tpcF9maWxlKHNlbGYsIGRpcmVjdG9yeSwgZmlsZW5hbWUpOgorICAgICAgICAjIE9ubHkg
YWxsb3cgZmlsZXMgdGhhdCBhcmUgbm90IGluIHZlcnNpb24gY29udHJvbCB3aGVuIHRoZXkgYXJl
IGV4cGxpY2l0bHkgaW5jbHVkZWQgaW4gdGhlIG1hbmlmZXN0IGZyb20gdGhlIGJ1aWxkIGRpci4K
KyAgICAgICAgaWYgZmlsZW5hbWUuc3RhcnRzd2l0aChzZWxmLmJ1aWxkX3Jvb3QpOgorICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgcmV0dXJuIGRpcmVjdG9yeS5zaG91bGRfc2tp
cF9maWxlKGZpbGVuYW1lKQorCisgICAgZGVmIGdldF9maWxlcyhzZWxmKToKKyAgICAgICAgZm9y
IGRpcmVjdG9yeSBpbiBzZWxmLmRpcmVjdG9yaWVzOgorICAgICAgICAgICAgZm9yIGZpbGVfdHVw
bGUgaW4gZGlyZWN0b3J5LmdldF9maWxlcygpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuc2hv
dWxkX3NraXBfZmlsZShkaXJlY3RvcnksIGZpbGVfdHVwbGVbMF0pOgorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHlpZWxkIGZpbGVfdHVwbGUKKworICAgIGRl
ZiBjcmVhdGVfdGFyZmlsZShzZWxmLCBvdXRwdXQpOgorICAgICAgICBjb3VudCA9IDAKKyAgICAg
ICAgZm9yIGZpbGVfdHVwbGUgaW4gc2VsZi5nZXRfZmlsZXMoKToKKyAgICAgICAgICAgIGNvdW50
ID0gY291bnQgKyAxCisKKyAgICAgICAgd2l0aCBjbG9zaW5nKHRhcmZpbGUub3BlbihvdXRwdXQs
ICd3JykpIGFzIHRhcmJhbGw6CisgICAgICAgICAgICBmb3IgaSwgKGZpbGVfcGF0aCwgdGFyYmFs
bF9wYXRoKSBpbiBlbnVtZXJhdGUoc2VsZi5nZXRfZmlsZXMoKSwgc3RhcnQ9MSk6CisgICAgICAg
ICAgICAgICAgcHJpbnQoJ1RhcnJpbmcgZmlsZSB7MH0gb2YgezF9Jy5mb3JtYXQoaSwgY291bnQp
LmxqdXN0KDQwKSwgZW5kPSdccicpCisgICAgICAgICAgICAgICAgdGFyYmFsbC5hZGQoZmlsZV9w
YXRoLCB0YXJiYWxsX3BhdGgpCisgICAgICAgIHByaW50KCJXcm90ZSB7MH0iLmZvcm1hdChvdXRw
dXQpLmxqdXN0KDQwKSkKKworCitjbGFzcyBEaXN0Y2hlY2sob2JqZWN0KToKKyAgICBCVUlMRF9E
SVJFQ1RPUllfTkFNRSA9ICJfYnVpbGQiCisgICAgSU5TVEFMTF9ESVJFQ1RPUllfTkFNRSA9ICJf
aW5zdGFsbCIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2Vfcm9vdCwgYnVpbGRfcm9v
dCk6CisgICAgICAgIHNlbGYuc291cmNlX3Jvb3QgPSBzb3VyY2Vfcm9vdAorICAgICAgICBzZWxm
LmJ1aWxkX3Jvb3QgPSBidWlsZF9yb290CisKKyAgICBkZWYgZXh0cmFjdF90YXJiYWxsKHNlbGYs
IHRhcmJhbGxfcGF0aCk6CisgICAgICAgIHdpdGggY2xvc2luZyh0YXJmaWxlLm9wZW4odGFyYmFs
bF9wYXRoLCAncicpKSBhcyB0YXJiYWxsOgorICAgICAgICAgICAgdGFyYmFsbC5leHRyYWN0YWxs
KHNlbGYuYnVpbGRfcm9vdCkKKworICAgIGRlZiBjb25maWd1cmUoc2VsZiwgZGlzdF9kaXIsIGJ1
aWxkX2RpciwgaW5zdGFsbF9kaXIsIHBvcnQpOgorICAgICAgICBkZWYgY3JlYXRlX2RpcihkaXJl
Y3RvcnksIGRpcmVjdG9yeV90eXBlKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICBvcy5ta2RpcihkaXJlY3RvcnkpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAg
ICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVCBvciBub3Qgb3MucGF0aC5p
c2RpcihkaXJlY3RvcnkpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNv
dWxkIG5vdCBjcmVhdGUgJXMgZGlyIGF0ICVzOiAlcyIgJSAoZGlyZWN0b3J5X3R5cGUsIGRpcmVj
dG9yeSwgc3RyKGUpKSkKKworICAgICAgICBjcmVhdGVfZGlyKGJ1aWxkX2RpciwgImJ1aWxkIikK
KyAgICAgICAgY3JlYXRlX2RpcihpbnN0YWxsX2RpciwgImluc3RhbGwiKQorCisgICAgICAgIGNv
bW1hbmQgPSBbJ2NtYWtlJywgJy1EUE9SVD0lcycgJSBwb3J0LCAnLURDTUFLRV9JTlNUQUxMX1BS
RUZJWD0lcycgJSBpbnN0YWxsX2RpciwgJy1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlJywgZGlz
dF9kaXJdCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjb21tYW5kLCBjd2Q9YnVpbGRf
ZGlyKQorCisgICAgZGVmIGJ1aWxkKHNlbGYsIGJ1aWxkX2Rpcik6CisgICAgICAgIGNvbW1hbmQg
PSBbJ21ha2UnXQorICAgICAgICBtYWtlX2FyZ3MgPSBvcy5nZXRlbnYoJ01BS0VfQVJHUycpCisg
ICAgICAgIGlmIG1ha2VfYXJnczoKKyAgICAgICAgICAgIGNvbW1hbmQuZXh0ZW5kKG1ha2VfYXJn
cy5zcGxpdCgnICcpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29tbWFuZC5hcHBlbmQo
Jy1qJWQnICUgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpKQorICAgICAgICBzdWJwcm9jZXNz
LmNoZWNrX2NhbGwoY29tbWFuZCwgY3dkPWJ1aWxkX2RpcikKKworICAgIGRlZiBpbnN0YWxsKHNl
bGYsIGJ1aWxkX2Rpcik6CisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJ21ha2UnLCAn
aW5zdGFsbCddLCBjd2Q9YnVpbGRfZGlyKQorCisgICAgZGVmIGNsZWFuKHNlbGYsIGRpc3RfZGly
KToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShkaXN0X2RpcikKKworICAgIGRlZiBjaGVjayhzZWxm
LCB0YXJiYWxsLCBwb3J0KToKKyAgICAgICAgdGFyYmFsbF9uYW1lLCBleHQgPSBvcy5wYXRoLnNw
bGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUodGFyYmFsbCkpCisgICAgICAgIGRpc3RfZGlyID0gb3Mu
cGF0aC5qb2luKHNlbGYuYnVpbGRfcm9vdCwgdGFyYmFsbF9uYW1lKQorICAgICAgICBidWlsZF9k
aXIgPSBvcy5wYXRoLmpvaW4oZGlzdF9kaXIsIHNlbGYuQlVJTERfRElSRUNUT1JZX05BTUUpCisg
ICAgICAgIGluc3RhbGxfZGlyID0gb3MucGF0aC5qb2luKGRpc3RfZGlyLCBzZWxmLklOU1RBTExf
RElSRUNUT1JZX05BTUUpCisKKyAgICAgICAgc2VsZi5leHRyYWN0X3RhcmJhbGwodGFyYmFsbCkK
KyAgICAgICAgc2VsZi5jb25maWd1cmUoZGlzdF9kaXIsIGJ1aWxkX2RpciwgaW5zdGFsbF9kaXIs
IHBvcnQpCisgICAgICAgIHNlbGYuYnVpbGQoYnVpbGRfZGlyKQorICAgICAgICBzZWxmLmluc3Rh
bGwoYnVpbGRfZGlyKQorICAgICAgICBzZWxmLmNsZWFuKGRpc3RfZGlyKQorCitpZiBfX25hbWVf
XyA9PSAiX19tYWluX18iOgorICAgIGNsYXNzIEZpbGVQYXRoQWN0aW9uKGFyZ3BhcnNlLkFjdGlv
bik6CisgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVz
LCBvcHRpb25fc3RyaW5nPU5vbmUpOgorICAgICAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIHNl
bGYuZGVzdCwgb3MucGF0aC5hYnNwYXRoKHZhbHVlcykpCisKKyAgICBkZWYgZW5zdXJlX3ZlcnNp
b25faWZfcG9zc2libGUoYXJndW1lbnRzKToKKyAgICAgICAgaWYgYXJndW1lbnRzLnZlcnNpb24g
aXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwa2djb25maWdfZmls
ZSA9IG9zLnBhdGguam9pbihhcmd1bWVudHMuYnVpbGRfZGlyLCAiU291cmNlL1dlYktpdC93ZWJr
aXQyZ3RrLTQuMC5wYyIpCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBrZ2NvbmZpZ19maWxl
KToKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsncGtnLWNvbmZpZycsICctLW1v
ZHZlcnNpb24nLCBwa2djb25maWdfZmlsZV0sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAg
ICAgICAgICB2ZXJzaW9uID0gcC5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAgICBpZiB2ZXJz
aW9uOgorICAgICAgICAgICAgICAgIGFyZ3VtZW50cy52ZXJzaW9uID0gdmVyc2lvbi5yc3RyaXAo
J1xuJykKKworCisgICAgZGVmIGdldF90YXJiYWxsX3Jvb3RfYW5kX291dHB1dF9maWxlbmFtZV9m
cm9tX2FyZ3VtZW50cyhhcmd1bWVudHMpOgorICAgICAgICB0YXJiYWxsX3Jvb3QgPSBhcmd1bWVu
dHMudGFyYmFsbF9uYW1lCisgICAgICAgIGlmIGFyZ3VtZW50cy52ZXJzaW9uIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgdGFyYmFsbF9yb290ICs9ICctJyArIGFyZ3VtZW50cy52ZXJzaW9uCisK
KyAgICAgICAgb3V0cHV0X2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKGFyZ3VtZW50cy5idWlsZF9k
aXIsIHRhcmJhbGxfcm9vdCArICIudGFyIikKKyAgICAgICAgcmV0dXJuIHRhcmJhbGxfcm9vdCwg
b3V0cHV0X2ZpbGVuYW1lCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihk
ZXNjcmlwdGlvbj0nQnVpbGQgYSBkaXN0cmlidXRpb24gYnVuZGxlLicpCisgICAgcGFyc2VyLmFk
ZF9hcmd1bWVudCgnLWMnLCAnLS1jaGVjaycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSdDaGVjayB0aGUgdGFyYmFsbCcpCisgICAgcGFyc2VyLmFk
ZF9hcmd1bWVudCgnLXMnLCAnLS1zb3VyY2UtZGlyJywgdHlwZT1zdHIsIGFjdGlvbj1GaWxlUGF0
aEFjdGlvbiwgZGVmYXVsdD1vcy5nZXRjd2QoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHA9J1RoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uLiAn
ICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RpcmVjdG9yeSBmb3IgcmVsYXRp
dmUgcGF0aHMuIERlZmF1bHRzIHRvIGN1cnJlbnQgZGlyZWN0b3J5LicpCisgICAgcGFyc2VyLmFk
ZF9hcmd1bWVudCgnLS12ZXJzaW9uJywgdHlwZT1zdHIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J1RoZSB2ZXJzaW9uIG9mIHRoZSB0YXJiYWxsIHRvIGdlbmVy
YXRlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYicsICctLWJ1aWxkLWRpcicsIHR5cGU9
c3RyLCBhY3Rpb249RmlsZVBhdGhBY3Rpb24sIGRlZmF1bHQ9b3MuZ2V0Y3dkKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSdUaGUgdG9wLWxldmVsIHBhdGggb2YgZGlyZWN0b3J5IG9m
IHRoZSBidWlsZCByb290LiAnICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0J5
IGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LicpCisgICAgcGFyc2VyLmFkZF9hcmd1
bWVudCgnLXQnLCAnLS10YXJiYWxsLW5hbWUnLCB0eXBlPXN0ciwgZGVmYXVsdD0nd2Via2l0Z3Rr
JywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0Jhc2UgbmFtZSBvZiB0YXJiYWxsLiBE
ZWZhdWx0cyB0byAid2Via2l0Z3RrIi4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1wJywg
Jy0tcG9ydCcsIHR5cGU9c3RyLCBkZWZhdWx0PSdHVEsnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscD0nUG9ydCB0byBiZSBidWlsdCBpbiB0YXJiYWxsIGNoZWNrLiBEZWZhdWx0cyB0byAi
R1RLIi4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ21hbmlmZXN0X2ZpbGVuYW1lJywgbWV0
YXZhcj0ibWFuaWZlc3QiLCB0eXBlPXN0ciwgYWN0aW9uPUZpbGVQYXRoQWN0aW9uLCBoZWxwPSdU
aGUgcGF0aCB0byB0aGUgbWFuaWZlc3QgZmlsZS4nKQorCisgICAgYXJndW1lbnRzID0gcGFyc2Vy
LnBhcnNlX2FyZ3MoKQorCisgICAgIyBQYXRocyBpbiB0aGUgbWFuaWZlc3QgYXJlIHJlbGF0aXZl
IHRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5LCBhbmQgdGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0Cisg
ICAgIyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHRoZSBzb3VyY2UgZGlyZWN0b3J5LCBz
byBjaGFuZ2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKyAgICAjIHRvIGJlIHRoZSBz
b3VyY2UgZGlyZWN0b3J5LgorICAgIG9zLmNoZGlyKGFyZ3VtZW50cy5zb3VyY2VfZGlyKQorCisg
ICAgZW5zdXJlX3ZlcnNpb25faWZfcG9zc2libGUoYXJndW1lbnRzKQorICAgIHRhcmJhbGxfcm9v
dCwgb3V0cHV0X2ZpbGVuYW1lID0gZ2V0X3RhcmJhbGxfcm9vdF9hbmRfb3V0cHV0X2ZpbGVuYW1l
X2Zyb21fYXJndW1lbnRzKGFyZ3VtZW50cykKKworICAgIG1hbmlmZXN0ID0gTWFuaWZlc3QoYXJn
dW1lbnRzLm1hbmlmZXN0X2ZpbGVuYW1lLCBhcmd1bWVudHMuc291cmNlX2RpciwgYXJndW1lbnRz
LmJ1aWxkX2RpciwgdGFyYmFsbF9yb290KQorICAgIG1hbmlmZXN0LmNyZWF0ZV90YXJmaWxlKG91
dHB1dF9maWxlbmFtZSkKKworICAgIGlmIGFyZ3VtZW50cy5jaGVjazoKKyAgICAgICAgRGlzdGNo
ZWNrKGFyZ3VtZW50cy5zb3VyY2VfZGlyLCBhcmd1bWVudHMuYnVpbGRfZGlyKS5jaGVjayhvdXRw
dXRfZmlsZW5hbWUsIGFyZ3VtZW50cy5wb3J0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3RrL21ha2Ut
ZGlzdC5weSBiL1Rvb2xzL2d0ay9tYWtlLWRpc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1
CmluZGV4IDZmZDdkNWJjNDFhMzJmM2RjNTJhMzRiMzhkZTIwY2Q0NGIxOTc0YWYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvZ3RrL21ha2UtZGlz
dC5weQorKysgL2Rldi9udWxsCkBAIC0xLDMzMyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRo
b24KLSMgQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCi0jCi0jIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSMgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotIyBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSMgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSMgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
IyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotCi1mcm9tIF9fZnV0dXJlX18g
aW1wb3J0IHByaW50X2Z1bmN0aW9uCi1mcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNsb3NpbmcKLQot
aW1wb3J0IGFyZ3BhcnNlCi1pbXBvcnQgZXJybm8KLWltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLWlt
cG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgc3VicHJvY2VzcwotaW1w
b3J0IHRhcmZpbGUKLQotCi1kZWYgZW51bSgqKmVudW1zKToKLSAgICByZXR1cm4gdHlwZSgnRW51
bScsICgpLCBlbnVtcykKLQotCi1jbGFzcyBSdWxlKG9iamVjdCk6Ci0gICAgUmVzdWx0ID0gZW51
bShJTkNMVURFPTEsIEVYQ0xVREU9MiwgTk9fTUFUQ0g9MykKLQotICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCB0eXBlLCBwYXR0ZXJuKToKLSAgICAgICAgc2VsZi50eXBlID0gdHlwZQotICAgICAgICBz
ZWxmLm9yaWdpbmFsX3BhdHRlcm4gPSBwYXR0ZXJuCi0gICAgICAgIHNlbGYucGF0dGVybiA9IHJl
LmNvbXBpbGUocGF0dGVybikKLQotICAgIGRlZiB0ZXN0KHNlbGYsIGZpbGUpOgotICAgICAgICBp
ZiBub3Qoc2VsZi5wYXR0ZXJuLnNlYXJjaChmaWxlKSk6Ci0gICAgICAgICAgICByZXR1cm4gUnVs
ZS5SZXN1bHQuTk9fTUFUQ0gKLSAgICAgICAgcmV0dXJuIHNlbGYudHlwZQotCi0KLWNsYXNzIFJ1
bGVzZXQob2JqZWN0KToKLSAgICBfZ2xvYmFsX3J1bGVzID0gTm9uZQotCi0gICAgZGVmIF9faW5p
dF9fKHNlbGYpOgotICAgICAgICAjIEJ5IGRlZmF1bHQsIGFjY2VwdCBhbGwgZmlsZXMuCi0gICAg
ICAgIHNlbGYucnVsZXMgPSBbUnVsZShSdWxlLlJlc3VsdC5JTkNMVURFLCAnLionKV0KLQotICAg
IEBjbGFzc21ldGhvZAotICAgIGRlZiBnbG9iYWxfcnVsZXMoY2xzKToKLSAgICAgICAgaWYgbm90
IGNscy5fZ2xvYmFsX3J1bGVzOgotICAgICAgICAgICAgY2xzLl9nbG9iYWxfcnVsZXMgPSBSdWxl
c2V0KCkKLSAgICAgICAgcmV0dXJuIGNscy5fZ2xvYmFsX3J1bGVzCi0KLSAgICBAY2xhc3NtZXRo
b2QKLSAgICBkZWYgYWRkX2dsb2JhbF9ydWxlKGNscywgcnVsZSk6Ci0gICAgICAgIGNscy5nbG9i
YWxfcnVsZXMoKS5hZGRfcnVsZShydWxlKQotCi0gICAgZGVmIGFkZF9ydWxlKHNlbGYsIHJ1bGUp
OgotICAgICAgICBzZWxmLnJ1bGVzLmFwcGVuZChydWxlKQotCi0gICAgZGVmIHBhc3NlcyhzZWxm
LCBmaWxlKToKLSAgICAgICAgYWxsb3dlZCA9IEZhbHNlCi0gICAgICAgIGZvciBydWxlIGluIHNl
bGYucnVsZXM6Ci0gICAgICAgICAgICByZXN1bHQgPSBydWxlLnRlc3QoZmlsZSkKLSAgICAgICAg
ICAgIGlmIHJlc3VsdCA9PSBSdWxlLlJlc3VsdC5OT19NQVRDSDoKLSAgICAgICAgICAgICAgICBj
b250aW51ZQotICAgICAgICAgICAgYWxsb3dlZCA9IFJ1bGUuUmVzdWx0LklOQ0xVREUgPT0gcmVz
dWx0Ci0gICAgICAgIHJldHVybiBhbGxvd2VkCi0KLQotY2xhc3MgRmlsZShvYmplY3QpOgotICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2Vfcm9vdCwgdGFyYmFsbF9yb290KToKLSAgICAgICAg
c2VsZi5zb3VyY2Vfcm9vdCA9IHNvdXJjZV9yb290Ci0gICAgICAgIHNlbGYudGFyYmFsbF9yb290
ID0gdGFyYmFsbF9yb290Ci0KLSAgICBkZWYgc2hvdWxkX3NraXBfZmlsZShzZWxmLCBwYXRoKToK
LSAgICAgICAgIyBEbyBub3Qgc2tpcCBmaWxlcyBleHBsaWNpdGx5IGFkZGVkIGZyb20gdGhlIG1h
bmlmZXN0LgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBnZXRfZmlsZXMoc2VsZik6
Ci0gICAgICAgIHlpZWxkIChzZWxmLnNvdXJjZV9yb290LCBzZWxmLnRhcmJhbGxfcm9vdCkKLQot
Ci1jbGFzcyBEaXJlY3Rvcnkob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNl
X3Jvb3QsIHRhcmJhbGxfcm9vdCk6Ci0gICAgICAgIHNlbGYuc291cmNlX3Jvb3QgPSBzb3VyY2Vf
cm9vdAotICAgICAgICBzZWxmLnRhcmJhbGxfcm9vdCA9IHRhcmJhbGxfcm9vdAotICAgICAgICBz
ZWxmLnJ1bGVzID0gUnVsZXNldCgpCi0KLSAgICAgICAgc2VsZi5maWxlc19pbl92ZXJzaW9uX2Nv
bnRyb2wgPSBzZWxmLmxpc3RfZmlsZXNfaW5fdmVyc2lvbl9jb250cm9sKCkKLQotICAgIGRlZiBh
ZGRfcnVsZShzZWxmLCBydWxlKToKLSAgICAgICAgc2VsZi5ydWxlcy5hZGRfcnVsZShydWxlKQot
Ci0gICAgZGVmIGdldF90YXJiYWxsX3BhdGgoc2VsZiwgZmlsZW5hbWUpOgotICAgICAgICByZXR1
cm4gZmlsZW5hbWUucmVwbGFjZShzZWxmLnNvdXJjZV9yb290LCBzZWxmLnRhcmJhbGxfcm9vdCwg
MSkKLQotICAgIGRlZiBsaXN0X2ZpbGVzX2luX3ZlcnNpb25fY29udHJvbChzZWxmKToKLSAgICAg
ICAgIyBGSVhNRTogT25seSBnaXQgaXMgc3VwcG9ydGVkIGZvciBub3cuCi0gICAgICAgIHAgPSBz
dWJwcm9jZXNzLlBvcGVuKFsnZ2l0JywgJ2xzLXRyZWUnLCAnLXInLCAnLS1uYW1lLW9ubHknLCAn
SEVBRCcsIHNlbGYuc291cmNlX3Jvb3RdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQotICAgICAg
ICBvdXQgPSBwLmNvbW11bmljYXRlKClbMF0KLSAgICAgICAgaWYgbm90IG91dDoKLSAgICAgICAg
ICAgIHJldHVybiBbXQotICAgICAgICByZXR1cm4gb3V0LnJzdHJpcCgnXG4nKS5zcGxpdCgnXG4n
KQotCi0gICAgZGVmIHNob3VsZF9za2lwX2ZpbGUoc2VsZiwgcGF0aCk6Ci0gICAgICAgIHJldHVy
biBwYXRoIG5vdCBpbiBzZWxmLmZpbGVzX2luX3ZlcnNpb25fY29udHJvbAotCi0gICAgZGVmIGdl
dF9maWxlcyhzZWxmKToKLSAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGso
c2VsZi5zb3VyY2Vfcm9vdCk6Ci0KLSAgICAgICAgICAgIGRlZiBwYXNzZXNfYWxsX3J1bGVzKGVu
dHJ5KToKLSAgICAgICAgICAgICAgICByZXR1cm4gUnVsZXNldC5nbG9iYWxfcnVsZXMoKS5wYXNz
ZXMoZW50cnkpIGFuZCBzZWxmLnJ1bGVzLnBhc3NlcyhlbnRyeSkKLQotICAgICAgICAgICAgdG9f
a2VlcCA9IGZpbHRlcihwYXNzZXNfYWxsX3J1bGVzLCBkaXJzKQotICAgICAgICAgICAgZGVsIGRp
cnNbOl0KLSAgICAgICAgICAgIGRpcnMuZXh0ZW5kKHRvX2tlZXApCi0KLSAgICAgICAgICAgIGZv
ciBmaWxlIGluIGZpbGVzOgotICAgICAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ocm9v
dCwgZmlsZSkKLSAgICAgICAgICAgICAgICBpZiBub3QgcGFzc2VzX2FsbF9ydWxlcyhmaWxlKToK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICB5aWVsZCAoZmls
ZSwgc2VsZi5nZXRfdGFyYmFsbF9wYXRoKGZpbGUpKQotCi0KLWNsYXNzIE1hbmlmZXN0KG9iamVj
dCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hbmlmZXN0X2ZpbGVuYW1lLCBzb3VyY2Vfcm9v
dCwgYnVpbGRfcm9vdCwgdGFyYmFsbF9yb290PScvJyk6Ci0gICAgICAgIHNlbGYuY3VycmVudF9k
aXJlY3RvcnkgPSBOb25lCi0gICAgICAgIHNlbGYuZGlyZWN0b3JpZXMgPSBbXQotICAgICAgICBz
ZWxmLnRhcmJhbGxfcm9vdCA9IHRhcmJhbGxfcm9vdAotICAgICAgICBzZWxmLnNvdXJjZV9yb290
ID0gc291cmNlX3Jvb3QKLSAgICAgICAgc2VsZi5idWlsZF9yb290ID0gYnVpbGRfcm9vdAotCi0g
ICAgICAgICMgTm9ybWFsaXplIHRoZSB0YXJiYWxsIHJvb3Qgc28gdGhhdCBpdCBzdGFydHMgYW5k
IGVuZHMgd2l0aCBhIHNsYXNoLgotICAgICAgICBpZiBub3Qgc2VsZi50YXJiYWxsX3Jvb3QuZW5k
c3dpdGgoJy8nKToKLSAgICAgICAgICAgIHNlbGYudGFyYmFsbF9yb290ID0gc2VsZi50YXJiYWxs
X3Jvb3QgKyAnLycKLSAgICAgICAgaWYgbm90IHNlbGYudGFyYmFsbF9yb290LnN0YXJ0c3dpdGgo
Jy8nKToKLSAgICAgICAgICAgIHNlbGYudGFyYmFsbF9yb290ID0gJy8nICsgc2VsZi50YXJiYWxs
X3Jvb3QKLQotICAgICAgICB3aXRoIG9wZW4obWFuaWZlc3RfZmlsZW5hbWUsICdyJykgYXMgZmls
ZToKLSAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbGUucmVhZGxpbmVzKCk6Ci0gICAgICAgICAg
ICAgICAgc2VsZi5wcm9jZXNzX2xpbmUobGluZSkKLQotICAgIGRlZiBhZGRfcnVsZShzZWxmLCBy
dWxlKToKLSAgICAgICAgaWYgc2VsZi5jdXJyZW50X2RpcmVjdG9yeSBpcyBub3QgTm9uZToKLSAg
ICAgICAgICAgIHNlbGYuY3VycmVudF9kaXJlY3RvcnkuYWRkX3J1bGUocnVsZSkKLSAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIFJ1bGVzZXQuYWRkX2dsb2JhbF9ydWxlKHJ1bGUpCi0KLSAgICBk
ZWYgYWRkX2RpcmVjdG9yeShzZWxmLCBkaXJlY3RvcnkpOgotICAgICAgICBzZWxmLmN1cnJlbnRf
ZGlyZWN0b3J5ID0gZGlyZWN0b3J5Ci0gICAgICAgIHNlbGYuZGlyZWN0b3JpZXMuYXBwZW5kKGRp
cmVjdG9yeSkKLQotICAgIGRlZiBnZXRfZnVsbF9zb3VyY2VfcGF0aChzZWxmLCBzb3VyY2VfcGF0
aCk6Ci0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzb3VyY2VfcGF0aCk6Ci0gICAgICAg
ICAgICBzb3VyY2VfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnNvdXJjZV9yb290LCBzb3VyY2Vf
cGF0aCkKLSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNvdXJjZV9wYXRoKToKLSAgICAg
ICAgICAgIHJhaXNlIEV4Y2VwdGlvbignQ291bGQgbm90IGZpbmQgZGlyZWN0b3J5ICVzJyAlIHNv
dXJjZV9wYXRoKQotICAgICAgICByZXR1cm4gc291cmNlX3BhdGgKLQotICAgIGRlZiBnZXRfZnVs
bF90YXJiYWxsX3BhdGgoc2VsZiwgcGF0aCk6Ci0gICAgICAgIHJldHVybiBzZWxmLnRhcmJhbGxf
cm9vdCArIHBhdGgKLQotICAgIGRlZiBnZXRfc291cmNlX2FuZF90YXJiYWxsX3BhdGhzX2Zyb21f
cGFydHMoc2VsZiwgcGFydHMpOgotICAgICAgICBmdWxsX3NvdXJjZV9wYXRoID0gc2VsZi5nZXRf
ZnVsbF9zb3VyY2VfcGF0aChwYXJ0c1sxXSkKLSAgICAgICAgaWYgbGVuKHBhcnRzKSA+IDI6Ci0g
ICAgICAgICAgICBmdWxsX3RhcmJhbGxfcGF0aCA9IHNlbGYuZ2V0X2Z1bGxfdGFyYmFsbF9wYXRo
KHBhcnRzWzJdKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZnVsbF90YXJiYWxsX3BhdGgg
PSBzZWxmLmdldF9mdWxsX3RhcmJhbGxfcGF0aChwYXJ0c1sxXSkKLSAgICAgICAgcmV0dXJuIChm
dWxsX3NvdXJjZV9wYXRoLCBmdWxsX3RhcmJhbGxfcGF0aCkKLQotICAgIGRlZiBwcm9jZXNzX2xp
bmUoc2VsZiwgbGluZSk6Ci0gICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgpCi0gICAgICAgIGlm
IG5vdCBwYXJ0czoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBwYXJ0c1swXS5zdGFy
dHN3aXRoKCIjIik6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBpZiBwYXJ0c1swXSA9
PSAiZGlyZWN0b3J5IiBhbmQgbGVuKHBhcnRzKSA+IDE6Ci0gICAgICAgICAgICBzZWxmLmFkZF9k
aXJlY3RvcnkoRGlyZWN0b3J5KCpzZWxmLmdldF9zb3VyY2VfYW5kX3RhcmJhbGxfcGF0aHNfZnJv
bV9wYXJ0cyhwYXJ0cykpKQotICAgICAgICBlbGlmIHBhcnRzWzBdID09ICJmaWxlIiBhbmQgbGVu
KHBhcnRzKSA+IDE6Ci0gICAgICAgICAgICBzZWxmLmFkZF9kaXJlY3RvcnkoRmlsZSgqc2VsZi5n
ZXRfc291cmNlX2FuZF90YXJiYWxsX3BhdGhzX2Zyb21fcGFydHMocGFydHMpKSkKLSAgICAgICAg
ZWxpZiBwYXJ0c1swXSA9PSAiZXhjbHVkZSIgYW5kIGxlbihwYXJ0cykgPiAxOgotICAgICAgICAg
ICAgc2VsZi5hZGRfcnVsZShSdWxlKFJ1bGUuUmVzdWx0LkVYQ0xVREUsIHBhcnRzWzFdKSkKLSAg
ICAgICAgZWxpZiBwYXJ0c1swXSA9PSAiaW5jbHVkZSIgYW5kIGxlbihwYXJ0cykgPiAxOgotICAg
ICAgICAgICAgc2VsZi5hZGRfcnVsZShSdWxlKFJ1bGUuUmVzdWx0LklOQ0xVREUsIHBhcnRzWzFd
KSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignTGluZSBkb2Vz
IG5vdCBiZWdpbiB3aXRoIGEgY29ycmVjdCBydWxlOlxuXHQnICsgbGluZSkKLQotICAgIGRlZiBz
aG91bGRfc2tpcF9maWxlKHNlbGYsIGRpcmVjdG9yeSwgZmlsZW5hbWUpOgotICAgICAgICAjIE9u
bHkgYWxsb3cgZmlsZXMgdGhhdCBhcmUgbm90IGluIHZlcnNpb24gY29udHJvbCB3aGVuIHRoZXkg
YXJlIGV4cGxpY2l0bHkgaW5jbHVkZWQgaW4gdGhlIG1hbmlmZXN0IGZyb20gdGhlIGJ1aWxkIGRp
ci4KLSAgICAgICAgaWYgZmlsZW5hbWUuc3RhcnRzd2l0aChzZWxmLmJ1aWxkX3Jvb3QpOgotICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgcmV0dXJuIGRpcmVjdG9yeS5zaG91bGRf
c2tpcF9maWxlKGZpbGVuYW1lKQotCi0gICAgZGVmIGdldF9maWxlcyhzZWxmKToKLSAgICAgICAg
Zm9yIGRpcmVjdG9yeSBpbiBzZWxmLmRpcmVjdG9yaWVzOgotICAgICAgICAgICAgZm9yIGZpbGVf
dHVwbGUgaW4gZGlyZWN0b3J5LmdldF9maWxlcygpOgotICAgICAgICAgICAgICAgIGlmIHNlbGYu
c2hvdWxkX3NraXBfZmlsZShkaXJlY3RvcnksIGZpbGVfdHVwbGVbMF0pOgotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIHlpZWxkIGZpbGVfdHVwbGUKLQotICAg
IGRlZiBjcmVhdGVfdGFyZmlsZShzZWxmLCBvdXRwdXQpOgotICAgICAgICBjb3VudCA9IDAKLSAg
ICAgICAgZm9yIGZpbGVfdHVwbGUgaW4gc2VsZi5nZXRfZmlsZXMoKToKLSAgICAgICAgICAgIGNv
dW50ID0gY291bnQgKyAxCi0KLSAgICAgICAgd2l0aCBjbG9zaW5nKHRhcmZpbGUub3BlbihvdXRw
dXQsICd3JykpIGFzIHRhcmJhbGw6Ci0gICAgICAgICAgICBmb3IgaSwgKGZpbGVfcGF0aCwgdGFy
YmFsbF9wYXRoKSBpbiBlbnVtZXJhdGUoc2VsZi5nZXRfZmlsZXMoKSwgc3RhcnQ9MSk6Ci0gICAg
ICAgICAgICAgICAgcHJpbnQoJ1RhcnJpbmcgZmlsZSB7MH0gb2YgezF9Jy5mb3JtYXQoaSwgY291
bnQpLmxqdXN0KDQwKSwgZW5kPSdccicpCi0gICAgICAgICAgICAgICAgdGFyYmFsbC5hZGQoZmls
ZV9wYXRoLCB0YXJiYWxsX3BhdGgpCi0gICAgICAgIHByaW50KCJXcm90ZSB7MH0iLmZvcm1hdChv
dXRwdXQpLmxqdXN0KDQwKSkKLQotCi1jbGFzcyBEaXN0Y2hlY2sob2JqZWN0KToKLSAgICBCVUlM
RF9ESVJFQ1RPUllfTkFNRSA9ICJfYnVpbGQiCi0gICAgSU5TVEFMTF9ESVJFQ1RPUllfTkFNRSA9
ICJfaW5zdGFsbCIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2Vfcm9vdCwgYnVpbGRf
cm9vdCk6Ci0gICAgICAgIHNlbGYuc291cmNlX3Jvb3QgPSBzb3VyY2Vfcm9vdAotICAgICAgICBz
ZWxmLmJ1aWxkX3Jvb3QgPSBidWlsZF9yb290Ci0KLSAgICBkZWYgZXh0cmFjdF90YXJiYWxsKHNl
bGYsIHRhcmJhbGxfcGF0aCk6Ci0gICAgICAgIHdpdGggY2xvc2luZyh0YXJmaWxlLm9wZW4odGFy
YmFsbF9wYXRoLCAncicpKSBhcyB0YXJiYWxsOgotICAgICAgICAgICAgdGFyYmFsbC5leHRyYWN0
YWxsKHNlbGYuYnVpbGRfcm9vdCkKLQotICAgIGRlZiBjb25maWd1cmUoc2VsZiwgZGlzdF9kaXIs
IGJ1aWxkX2RpciwgaW5zdGFsbF9kaXIsIHBvcnQpOgotICAgICAgICBkZWYgY3JlYXRlX2Rpcihk
aXJlY3RvcnksIGRpcmVjdG9yeV90eXBlKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAg
ICAgICBvcy5ta2RpcihkaXJlY3RvcnkpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZToK
LSAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVCBvciBub3Qgb3MucGF0
aC5pc2RpcihkaXJlY3RvcnkpOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24o
IkNvdWxkIG5vdCBjcmVhdGUgJXMgZGlyIGF0ICVzOiAlcyIgJSAoZGlyZWN0b3J5X3R5cGUsIGRp
cmVjdG9yeSwgc3RyKGUpKSkKLQotICAgICAgICBjcmVhdGVfZGlyKGJ1aWxkX2RpciwgImJ1aWxk
IikKLSAgICAgICAgY3JlYXRlX2RpcihpbnN0YWxsX2RpciwgImluc3RhbGwiKQotCi0gICAgICAg
IGNvbW1hbmQgPSBbJ2NtYWtlJywgJy1EUE9SVD0lcycgJSBwb3J0LCAnLURDTUFLRV9JTlNUQUxM
X1BSRUZJWD0lcycgJSBpbnN0YWxsX2RpciwgJy1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlJywg
ZGlzdF9kaXJdCi0gICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjb21tYW5kLCBjd2Q9YnVp
bGRfZGlyKQotCi0gICAgZGVmIGJ1aWxkKHNlbGYsIGJ1aWxkX2Rpcik6Ci0gICAgICAgIGNvbW1h
bmQgPSBbJ21ha2UnXQotICAgICAgICBtYWtlX2FyZ3MgPSBvcy5nZXRlbnYoJ01BS0VfQVJHUycp
Ci0gICAgICAgIGlmIG1ha2VfYXJnczoKLSAgICAgICAgICAgIGNvbW1hbmQuZXh0ZW5kKG1ha2Vf
YXJncy5zcGxpdCgnICcpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY29tbWFuZC5hcHBl
bmQoJy1qJWQnICUgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpKQotICAgICAgICBzdWJwcm9j
ZXNzLmNoZWNrX2NhbGwoY29tbWFuZCwgY3dkPWJ1aWxkX2RpcikKLQotICAgIGRlZiBpbnN0YWxs
KHNlbGYsIGJ1aWxkX2Rpcik6Ci0gICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJ21ha2Un
LCAnaW5zdGFsbCddLCBjd2Q9YnVpbGRfZGlyKQotCi0gICAgZGVmIGNsZWFuKHNlbGYsIGRpc3Rf
ZGlyKToKLSAgICAgICAgc2h1dGlsLnJtdHJlZShkaXN0X2RpcikKLQotICAgIGRlZiBjaGVjayhz
ZWxmLCB0YXJiYWxsLCBwb3J0KToKLSAgICAgICAgdGFyYmFsbF9uYW1lLCBleHQgPSBvcy5wYXRo
LnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUodGFyYmFsbCkpCi0gICAgICAgIGRpc3RfZGlyID0g
b3MucGF0aC5qb2luKHNlbGYuYnVpbGRfcm9vdCwgdGFyYmFsbF9uYW1lKQotICAgICAgICBidWls
ZF9kaXIgPSBvcy5wYXRoLmpvaW4oZGlzdF9kaXIsIHNlbGYuQlVJTERfRElSRUNUT1JZX05BTUUp
Ci0gICAgICAgIGluc3RhbGxfZGlyID0gb3MucGF0aC5qb2luKGRpc3RfZGlyLCBzZWxmLklOU1RB
TExfRElSRUNUT1JZX05BTUUpCi0KLSAgICAgICAgc2VsZi5leHRyYWN0X3RhcmJhbGwodGFyYmFs
bCkKLSAgICAgICAgc2VsZi5jb25maWd1cmUoZGlzdF9kaXIsIGJ1aWxkX2RpciwgaW5zdGFsbF9k
aXIsIHBvcnQpCi0gICAgICAgIHNlbGYuYnVpbGQoYnVpbGRfZGlyKQotICAgICAgICBzZWxmLmlu
c3RhbGwoYnVpbGRfZGlyKQotICAgICAgICBzZWxmLmNsZWFuKGRpc3RfZGlyKQotCi1pZiBfX25h
bWVfXyA9PSAiX19tYWluX18iOgotICAgIGNsYXNzIEZpbGVQYXRoQWN0aW9uKGFyZ3BhcnNlLkFj
dGlvbik6Ci0gICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFs
dWVzLCBvcHRpb25fc3RyaW5nPU5vbmUpOgotICAgICAgICAgICAgc2V0YXR0cihuYW1lc3BhY2Us
IHNlbGYuZGVzdCwgb3MucGF0aC5hYnNwYXRoKHZhbHVlcykpCi0KLSAgICBkZWYgZW5zdXJlX3Zl
cnNpb25faWZfcG9zc2libGUoYXJndW1lbnRzKToKLSAgICAgICAgaWYgYXJndW1lbnRzLnZlcnNp
b24gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBwa2djb25maWdf
ZmlsZSA9IG9zLnBhdGguam9pbihhcmd1bWVudHMuYnVpbGRfZGlyLCAiU291cmNlL1dlYktpdC93
ZWJraXQyZ3RrLTQuMC5wYyIpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBrZ2NvbmZpZ19m
aWxlKToKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsncGtnLWNvbmZpZycsICct
LW1vZHZlcnNpb24nLCBwa2djb25maWdfZmlsZV0sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCi0g
ICAgICAgICAgICB2ZXJzaW9uID0gcC5jb21tdW5pY2F0ZSgpWzBdCi0gICAgICAgICAgICBpZiB2
ZXJzaW9uOgotICAgICAgICAgICAgICAgIGFyZ3VtZW50cy52ZXJzaW9uID0gdmVyc2lvbi5yc3Ry
aXAoJ1xuJykKLQotCi0gICAgZGVmIGdldF90YXJiYWxsX3Jvb3RfYW5kX291dHB1dF9maWxlbmFt
ZV9mcm9tX2FyZ3VtZW50cyhhcmd1bWVudHMpOgotICAgICAgICB0YXJiYWxsX3Jvb3QgPSBhcmd1
bWVudHMudGFyYmFsbF9uYW1lCi0gICAgICAgIGlmIGFyZ3VtZW50cy52ZXJzaW9uIGlzIG5vdCBO
b25lOgotICAgICAgICAgICAgdGFyYmFsbF9yb290ICs9ICctJyArIGFyZ3VtZW50cy52ZXJzaW9u
Ci0KLSAgICAgICAgb3V0cHV0X2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKGFyZ3VtZW50cy5idWls
ZF9kaXIsIHRhcmJhbGxfcm9vdCArICIudGFyIikKLSAgICAgICAgcmV0dXJuIHRhcmJhbGxfcm9v
dCwgb3V0cHV0X2ZpbGVuYW1lCi0KLSAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNl
cihkZXNjcmlwdGlvbj0nQnVpbGQgYSBkaXN0cmlidXRpb24gYnVuZGxlLicpCi0gICAgcGFyc2Vy
LmFkZF9hcmd1bWVudCgnLWMnLCAnLS1jaGVjaycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBoZWxwPSdDaGVjayB0aGUgdGFyYmFsbCcpCi0gICAgcGFyc2Vy
LmFkZF9hcmd1bWVudCgnLXMnLCAnLS1zb3VyY2UtZGlyJywgdHlwZT1zdHIsIGFjdGlvbj1GaWxl
UGF0aEFjdGlvbiwgZGVmYXVsdD1vcy5nZXRjd2QoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGhlbHA9J1RoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9u
LiAnICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RpcmVjdG9yeSBmb3IgcmVs
YXRpdmUgcGF0aHMuIERlZmF1bHRzIHRvIGN1cnJlbnQgZGlyZWN0b3J5LicpCi0gICAgcGFyc2Vy
LmFkZF9hcmd1bWVudCgnLS12ZXJzaW9uJywgdHlwZT1zdHIsIGRlZmF1bHQ9Tm9uZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9J1RoZSB2ZXJzaW9uIG9mIHRoZSB0YXJiYWxsIHRvIGdl
bmVyYXRlJykKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYicsICctLWJ1aWxkLWRpcicsIHR5
cGU9c3RyLCBhY3Rpb249RmlsZVBhdGhBY3Rpb24sIGRlZmF1bHQ9b3MuZ2V0Y3dkKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICBoZWxwPSdUaGUgdG9wLWxldmVsIHBhdGggb2YgZGlyZWN0b3J5
IG9mIHRoZSBidWlsZCByb290LiAnICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J0J5IGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LicpCi0gICAgcGFyc2VyLmFkZF9h
cmd1bWVudCgnLXQnLCAnLS10YXJiYWxsLW5hbWUnLCB0eXBlPXN0ciwgZGVmYXVsdD0nd2Via2l0
Z3RrJywKLSAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0Jhc2UgbmFtZSBvZiB0YXJiYWxs
LiBEZWZhdWx0cyB0byAid2Via2l0Z3RrIi4nKQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1w
JywgJy0tcG9ydCcsIHR5cGU9c3RyLCBkZWZhdWx0PSdHVEsnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscD0nUG9ydCB0byBiZSBidWlsdCBpbiB0YXJiYWxsIGNoZWNrLiBEZWZhdWx0cyB0
byAiR1RLIi4nKQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ21hbmlmZXN0X2ZpbGVuYW1lJywg
bWV0YXZhcj0ibWFuaWZlc3QiLCB0eXBlPXN0ciwgYWN0aW9uPUZpbGVQYXRoQWN0aW9uLCBoZWxw
PSdUaGUgcGF0aCB0byB0aGUgbWFuaWZlc3QgZmlsZS4nKQotCi0gICAgYXJndW1lbnRzID0gcGFy
c2VyLnBhcnNlX2FyZ3MoKQotCi0gICAgIyBQYXRocyBpbiB0aGUgbWFuaWZlc3QgYXJlIHJlbGF0
aXZlIHRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5LCBhbmQgdGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0
Ci0gICAgIyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHRoZSBzb3VyY2UgZGlyZWN0b3J5
LCBzbyBjaGFuZ2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKLSAgICAjIHRvIGJlIHRo
ZSBzb3VyY2UgZGlyZWN0b3J5LgotICAgIG9zLmNoZGlyKGFyZ3VtZW50cy5zb3VyY2VfZGlyKQot
Ci0gICAgZW5zdXJlX3ZlcnNpb25faWZfcG9zc2libGUoYXJndW1lbnRzKQotICAgIHRhcmJhbGxf
cm9vdCwgb3V0cHV0X2ZpbGVuYW1lID0gZ2V0X3RhcmJhbGxfcm9vdF9hbmRfb3V0cHV0X2ZpbGVu
YW1lX2Zyb21fYXJndW1lbnRzKGFyZ3VtZW50cykKLQotICAgIG1hbmlmZXN0ID0gTWFuaWZlc3Qo
YXJndW1lbnRzLm1hbmlmZXN0X2ZpbGVuYW1lLCBhcmd1bWVudHMuc291cmNlX2RpciwgYXJndW1l
bnRzLmJ1aWxkX2RpciwgdGFyYmFsbF9yb290KQotICAgIG1hbmlmZXN0LmNyZWF0ZV90YXJmaWxl
KG91dHB1dF9maWxlbmFtZSkKLQotICAgIGlmIGFyZ3VtZW50cy5jaGVjazoKLSAgICAgICAgRGlz
dGNoZWNrKGFyZ3VtZW50cy5zb3VyY2VfZGlyLCBhcmd1bWVudHMuYnVpbGRfZGlyKS5jaGVjayhv
dXRwdXRfZmlsZW5hbWUsIGFyZ3VtZW50cy5wb3J0KQpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIv
Q2hhbmdlTG9nCmluZGV4IDNmNmY2OTlhNjQ0NWQ5NDAwYmQ2YmI1M2E1OTNhYWMyZjhhMGMzNzAu
LjVjYjk5NDM2NmM1YzU3YWZiMDQwMDI1ZjljOTY3Njg0ZTliZmVjZmYgMTAwNjQ0Ci0tLSBhL0No
YW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0xMS0wMSAgTWlj
aGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1dQRV1b
R1RLXSBBdm9pZCBkdXBsaWNhdGluZyBjb2RlIGZvciBkaXN0IGFuZCBkaXN0Y2hlY2sgdGFyZ2V0
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5MTU0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBj
b21taXQganVzdCByZWR1Y2VzIHNvbWUgQ01ha2UgY29kZSBkdXBsaWNhdGlvbiBiZXR3ZWVuIEdU
SyBhbmQgV1BFLgorCisgICAgICAgICogU291cmNlL1BsYXRmb3JtR1RLLmNtYWtlOgorICAgICAg
ICAqIFNvdXJjZS9QbGF0Zm9ybVdQRS5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvV2Vi
S2l0RGlzdC5jbWFrZTogQWRkZWQuCisKIDIwMTctMTAtMzEgIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFVwZGF0ZSBPcHRp
b25zR1RLLmNtYWtlIGFuZCBORVdTIGZvciAyLjE5LjEgcmVsZWFzZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325710</attachid>
            <date>2017-11-02 05:28:09 -0700</date>
            <delta_ts>2017-11-02 05:28:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179154-20171102072809.patch</filename>
            <type>text/plain</type>
            <size>34237</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0Mjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm1H
VEsuY21ha2UgYi9Tb3VyY2UvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggMDQxYzY3YTBjMzRiNGRl
NmJkNzJiNmM1YmFhZThiMjdmZTMyZGI1Ny4uYzQyY2UzNDY5NTU0NzNjNjI5YmNmN2JiM2IzYTYx
YWM1ZmUzZTFiYyAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMSwzICsxLDUgQEAKK2luY2x1ZGUoV2ViS2l0RGlz
dCkKKwogYWRkX3N1YmRpcmVjdG9yeSgke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ndGsvcG8pCiAK
ICMgVGhpcyBhbGxvd3MgZXhwb3NpbmcgYSAnZ2lyJyB0YXJnZXQgd2hpY2ggYnVpbGRzIGFsbCBH
T2JqZWN0IGludHJvc3BlY3Rpb24gZmlsZXMuCkBAIC01Miw0NSArNTQsNiBAQCBhZGRfY3VzdG9t
X3RhcmdldChjaGVjawogKQogCiBpZiAoREVWRUxPUEVSX01PREUpCi0gICAgY29uZmlndXJlX2Zp
bGUoCi0gICAgICAgICR7VE9PTFNfRElSfS9ndGsvbWFuaWZlc3QudHh0LmluCi0gICAgICAgICR7
Q01BS0VfQklOQVJZX0RJUn0vbWFuaWZlc3QudHh0Ci0gICAgKQotCi0gICAgYWRkX2N1c3RvbV9j
b21tYW5kKAotICAgICAgICBPVVRQVVQgJHtDTUFLRV9CSU5BUllfRElSfS93ZWJraXRndGstJHtQ
Uk9KRUNUX1ZFUlNJT059LnRhcgotICAgICAgICBERVBFTkRTICR7VE9PTFNfRElSfS9ndGsvbWFr
ZS1kaXN0LnB5Ci0gICAgICAgIERFUEVORFMgJHtDTUFLRV9CSU5BUllfRElSfS9tYW5pZmVzdC50
eHQKLSAgICAgICAgREVQRU5EUyBXZWJLaXQKLSAgICAgICAgREVQRU5EUyBndGtkb2MKLSAgICAg
ICAgQ09NTUFORCAke1RPT0xTX0RJUn0vZ3RrL21ha2UtZGlzdC5weQotICAgICAgICAgICAgICAg
IC0tc291cmNlLWRpcj0ke0NNQUtFX1NPVVJDRV9ESVJ9Ci0gICAgICAgICAgICAgICAgLS1idWls
ZC1kaXI9JHtDTUFLRV9CSU5BUllfRElSfQotICAgICAgICAgICAgICAgIC0tdmVyc2lvbj0ke1BS
T0pFQ1RfVkVSU0lPTn0KLSAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L21hbmlm
ZXN0LnR4dAotICAgICkKLQotICAgIGFkZF9jdXN0b21fY29tbWFuZCgKLSAgICAgICAgT1VUUFVU
ICR7Q01BS0VfQklOQVJZX0RJUn0vd2Via2l0Z3RrLSR7UFJPSkVDVF9WRVJTSU9OfS50YXIueHoK
LSAgICAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L3dlYmtpdGd0ay0ke1BST0pFQ1Rf
VkVSU0lPTn0udGFyCi0gICAgICAgIENPTU1BTkQgeHogLWYgJHtDTUFLRV9CSU5BUllfRElSfS93
ZWJraXRndGstJHtQUk9KRUNUX1ZFUlNJT059LnRhcgotICAgICkKLQotICAgIGFkZF9jdXN0b21f
dGFyZ2V0KGRpc3QKLSAgICAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L3dlYmtpdGd0
ay0ke1BST0pFQ1RfVkVSU0lPTn0udGFyLnh6Ci0gICAgKQotCi0gICAgYWRkX2N1c3RvbV90YXJn
ZXQoZGlzdGNoZWNrCi0gICAgICAgIERFUEVORFMgJHtUT09MU19ESVJ9L2d0ay9tYWtlLWRpc3Qu
cHkKLSAgICAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L21hbmlmZXN0LnR4dAotICAg
ICAgICBERVBFTkRTIFdlYktpdAotICAgICAgICBERVBFTkRTIGd0a2RvYwotICAgICAgICBDT01N
QU5EICR7VE9PTFNfRElSfS9ndGsvbWFrZS1kaXN0LnB5Ci0gICAgICAgICAgICAgICAgLS1jaGVj
awotICAgICAgICAgICAgICAgIC0tc291cmNlLWRpcj0ke0NNQUtFX1NPVVJDRV9ESVJ9Ci0gICAg
ICAgICAgICAgICAgLS1idWlsZC1kaXI9JHtDTUFLRV9CSU5BUllfRElSfQotICAgICAgICAgICAg
ICAgIC0tdmVyc2lvbj0ke1BST0pFQ1RfVkVSU0lPTn0KLSAgICAgICAgICAgICAgICAke0NNQUtF
X0JJTkFSWV9ESVJ9L21hbmlmZXN0LnR4dAotICAgICAgICBDT01NQU5EIHh6IC1mICR7Q01BS0Vf
QklOQVJZX0RJUn0vd2Via2l0Z3RrLSR7UFJPSkVDVF9WRVJTSU9OfS50YXIKLSAgICApCisgICAg
YWRkX2N1c3RvbV90YXJnZXQoRG9jdW1lbnRhdGlvbiBERVBFTkRTIGd0a2RvYykKKyAgICBXRUJL
SVRfREVDTEFSRV9ESVNUX1RBUkdFVFMoR1RLIHdlYmtpdGd0ayAke1RPT0xTX0RJUn0vZ3RrL21h
bmlmZXN0LnR4dC5pbikKIGVuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm1XUEUu
Y21ha2UgYi9Tb3VyY2UvUGxhdGZvcm1XUEUuY21ha2UKaW5kZXggMjE1OTZiZmMwNDAzZGY5Zjhm
ODQ0MjI3ZGZiOTdhYzU0NDhkY2ViZS4uMzg2NDJlMDc4MmNjMzNiZjk0NzVlNmVlNDdlZTk3NzE4
NTM1NzU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtV1BFLmNtYWtlCisrKyBiL1NvdXJj
ZS9QbGF0Zm9ybVdQRS5jbWFrZQpAQCAtMSw0NCArMSw3IEBACi1pZiAoREVWRUxPUEVSX01PREUp
Ci0gICAgZmluZF9wYWNrYWdlKFh6IFJFUVVJUkVEKQotCi0gICAgY29uZmlndXJlX2ZpbGUoCi0g
ICAgICAgICR7VE9PTFNfRElSfS93cGUvbWFuaWZlc3QudHh0LmluCi0gICAgICAgICR7Q01BS0Vf
QklOQVJZX0RJUn0vbWFuaWZlc3QudHh0Ci0gICAgKQotCi0gICAgYWRkX2N1c3RvbV90YXJnZXQo
ZGlzdGNoZWNrCi0gICAgICAgIENPTU1FTlQgIkNoZWNraW5nIHJlbGVhc2UgdGFyYmFsbDogd3Bl
d2Via2l0LSR7UFJPSkVDVF9WRVJTSU9OfS50YXIiCi0gICAgICAgIERFUEVORFMgIiR7Q01BS0Vf
QklOQVJZX0RJUn0vbWFuaWZlc3QudHh0IgotICAgICAgICAgICAgICAgICIke1RPT0xTX0RJUn0v
Z3RrL21ha2UtZGlzdC5weSIKLSAgICAgICAgQ09NTUFORCAiJHtUT09MU19ESVJ9L2d0ay9tYWtl
LWRpc3QucHkiCi0gICAgICAgICAgICAgICAgIi0tY2hlY2siICItLXBvcnQ9V1BFIgotICAgICAg
ICAgICAgICAgICItLXRhcmJhbGwtbmFtZT13cGV3ZWJraXQiCi0gICAgICAgICAgICAgICAgIi0t
c291cmNlLWRpcj0ke0NNQUtFX1NPVVJDRV9ESVJ9IgotICAgICAgICAgICAgICAgICItLWJ1aWxk
LWRpcj0ke0NNQUtFX0JJTkFSWV9ESVJ9IgotICAgICAgICAgICAgICAgICItLXZlcnNpb249JHtQ
Uk9KRUNUX1ZFUlNJT059IgotICAgICAgICAgICAgICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9L21h
bmlmZXN0LnR4dCIKLSAgICAgICAgQ09NTUFORCAiJHtYWl9FWEVDVVRBQkxFfSIgIi1ldmZRIgot
ICAgICAgICAgICAgICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9L3dwZXdlYmtpdC0ke1BST0pFQ1Rf
VkVSU0lPTn0udGFyIgotICAgICAgICBVU0VTX1RFUk1JTkFMCi0gICAgKQoraW5jbHVkZShXZWJL
aXREaXN0KQogCi0gICAgYWRkX2N1c3RvbV9jb21tYW5kKAotICAgICAgICBDT01NRU5UICJDcmVh
dGluZyByZWxlYXNlIHRhcmJhbGw6IHdwZXdlYmtpdC0ke1BST0pFQ1RfVkVSU0lPTn0udGFyLnh6
IgotICAgICAgICBPVVRQVVQgIiR7Q01BS0VfQklOQVJZX0RJUn0vd3Bld2Via2l0LSR7UFJPSkVD
VF9WRVJTSU9OfS50YXIueHoiCi0gICAgICAgIE1BSU5fREVQRU5ERU5DWSAiJHtDTUFLRV9CSU5B
UllfRElSfS9tYW5pZmVzdC50eHQiCi0gICAgICAgIERFUEVORFMgIiR7VE9PTFNfRElSfS9ndGsv
bWFrZS1kaXN0LnB5IgotICAgICAgICBDT01NQU5EICIke1RPT0xTX0RJUn0vZ3RrL21ha2UtZGlz
dC5weSIKLSAgICAgICAgICAgICAgICAiLS10YXJiYWxsLW5hbWU9d3Bld2Via2l0IgotICAgICAg
ICAgICAgICAgICItLXNvdXJjZS1kaXI9JHtDTUFLRV9TT1VSQ0VfRElSfSIKLSAgICAgICAgICAg
ICAgICAiLS1idWlsZC1kaXI9JHtDTUFLRV9CSU5BUllfRElSfSIKLSAgICAgICAgICAgICAgICAi
LS12ZXJzaW9uPSR7UFJPSkVDVF9WRVJTSU9OfSIKLSAgICAgICAgICAgICAgICAiJHtDTUFLRV9C
SU5BUllfRElSfS9tYW5pZmVzdC50eHQiCi0gICAgICAgIENPTU1BTkQgIiR7WFpfRVhFQ1VUQUJM
RX0iICItZXZmUSIKLSAgICAgICAgICAgICAgICAiJHtDTUFLRV9CSU5BUllfRElSfS93cGV3ZWJr
aXQtJHtQUk9KRUNUX1ZFUlNJT059LnRhciIKLSAgICAgICAgVVNFU19URVJNSU5BTAotICAgICkK
LQotICAgIGFkZF9jdXN0b21fdGFyZ2V0KGRpc3QKLSAgICAgICAgREVQRU5EUyAiJHtDTUFLRV9C
SU5BUllfRElSfS93cGV3ZWJraXQtJHtQUk9KRUNUX1ZFUlNJT059LnRhci54eiIKLSAgICApCitp
ZiAoREVWRUxPUEVSX01PREUpCisgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgZGVwZW5kIG9uIGEg
Z3RrZG9jIHRhcmdldAorICAgIGFkZF9jdXN0b21fdGFyZ2V0KERvY3VtZW50YXRpb24pCisgICAg
V0VCS0lUX0RFQ0xBUkVfRElTVF9UQVJHRVRTKFdQRSB3cGV3ZWJraXQgJHtUT09MU19ESVJ9L3dw
ZS9tYW5pZmVzdC50eHQuaW4pCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL1dl
YktpdERpc3QuY21ha2UgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RGlzdC5jbWFrZQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lODIwZTNlMTI3OGI2OGFhZjJkNDExYTZmMWQ5ZWEwMWEyYTc0NDhjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL2NtYWtlL1dlYktpdERpc3QuY21ha2UKQEAgLTAsMCArMSw0OCBAQAorbWFj
cm8oV0VCS0lUX0RFQ0xBUkVfRElTVF9UQVJHRVRTIF9wb3J0IF90YXJiYWxsX3ByZWZpeCBfbWFu
aWZlc3QpCisgICAgZmluZF9wYWNrYWdlKFh6IFJFUVVJUkVEKQorCisgICAgY29uZmlndXJlX2Zp
bGUoCisgICAgICAgICR7X21hbmlmZXN0fQorICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L21h
bmlmZXN0LnR4dAorICAgICkKKworICAgIGFkZF9jdXN0b21fdGFyZ2V0KGRpc3RjaGVjaworICAg
ICAgICBDT01NRU5UICJDaGVja2luZyByZWxlYXNlIHRhcmJhbGw6ICR7X3RhcmJhbGxfcHJlZml4
fS0ke1BST0pFQ1RfVkVSU0lPTn0udGFyIgorICAgICAgICBERVBFTkRTICR7Q01BS0VfQklOQVJZ
X0RJUn0vbWFuaWZlc3QudHh0CisgICAgICAgIERFUEVORFMgV2ViS2l0CisgICAgICAgIERFUEVO
RFMgRG9jdW1lbnRhdGlvbgorICAgICAgICBDT01NQU5EICR7VE9PTFNfRElSfS9TY3JpcHRzL21h
a2UtZGlzdAorICAgICAgICAgICAgICAgIC0tY2hlY2sgLS1wb3J0PSR7X3BvcnR9CisgICAgICAg
ICAgICAgICAgLS10YXJiYWxsLW5hbWU9JHtfdGFyYmFsbF9wcmVmaXh9CisgICAgICAgICAgICAg
ICAgLS1zb3VyY2UtZGlyPSR7Q01BS0VfU09VUkNFX0RJUn0KKyAgICAgICAgICAgICAgICAtLWJ1
aWxkLWRpcj0ke0NNQUtFX0JJTkFSWV9ESVJ9CisgICAgICAgICAgICAgICAgLS12ZXJzaW9uPSR7
UFJPSkVDVF9WRVJTSU9OfQorICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vbWFu
aWZlc3QudHh0CisgICAgICAgIENPTU1BTkQgJHtYWl9FWEVDVVRBQkxFfSAtZXZmUQorICAgICAg
ICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vJHtfdGFyYmFsbF9wcmVmaXh9LSR7UFJPSkVD
VF9WRVJTSU9OfS50YXIKKyAgICAgICAgVVNFU19URVJNSU5BTAorICAgICAgICBWRVJCQVRJTQor
ICAgICkKKworICAgIGFkZF9jdXN0b21fY29tbWFuZCgKKyAgICAgICAgQ09NTUVOVCAiQ3JlYXRp
bmcgcmVsZWFzZSB0YXJiYWxsOiAke190YXJiYWxsX3ByZWZpeH0tJHtQUk9KRUNUX1ZFUlNJT059
LnRhci54eiIKKyAgICAgICAgT1VUUFVUICR7Q01BS0VfQklOQVJZX0RJUn0vJHtfdGFyYmFsbF9w
cmVmaXh9LSR7UFJPSkVDVF9WRVJTSU9OfS50YXIueHoKKyAgICAgICAgTUFJTl9ERVBFTkRFTkNZ
ICR7Q01BS0VfQklOQVJZX0RJUn0vbWFuaWZlc3QudHh0CisgICAgICAgIENPTU1BTkQgJHtUT09M
U19ESVJ9L1NjcmlwdHMvbWFrZS1kaXN0CisgICAgICAgICAgICAgICAgLS10YXJiYWxsLW5hbWU9
JHtfdGFyYmFsbF9wcmVmaXh9CisgICAgICAgICAgICAgICAgLS1zb3VyY2UtZGlyPSR7Q01BS0Vf
U09VUkNFX0RJUn0KKyAgICAgICAgICAgICAgICAtLWJ1aWxkLWRpcj0ke0NNQUtFX0JJTkFSWV9E
SVJ9CisgICAgICAgICAgICAgICAgLS12ZXJzaW9uPSR7UFJPSkVDVF9WRVJTSU9OfQorICAgICAg
ICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vbWFuaWZlc3QudHh0CisgICAgICAgIENPTU1B
TkQgJHtYWl9FWEVDVVRBQkxFfSAtZXZmUQorICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZ
X0RJUn0vJHtfdGFyYmFsbF9wcmVmaXh9LSR7UFJPSkVDVF9WRVJTSU9OfS50YXIKKyAgICAgICAg
VVNFU19URVJNSU5BTAorICAgICAgICBWRVJCQVRJTQorICAgICkKKworICAgIGFkZF9jdXN0b21f
dGFyZ2V0KGRpc3QKKyAgICAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9LyR7X3RhcmJh
bGxfcHJlZml4fS0ke1BST0pFQ1RfVkVSU0lPTn0udGFyLnh6CisgICAgICAgIERFUEVORFMgV2Vi
S2l0CisgICAgICAgIERFUEVORFMgRG9jdW1lbnRhdGlvbgorICAgICkKK2VuZG1hY3JvKCkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4MmU2MTE0
YzFhYmNjM2NmOWU1Y2QwNTlhNGY0YjJlZjE0NjMwYzhkLi5hMzE2OTg1Zjg3YTJlMWNhNGJkMWYx
MzRkODczY2FhNzY1ODE4ZjA4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTctMTEtMDIgIE1pY2hhZWwgQ2F0YW56
YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtXUEVdW0dUS10gQXZvaWQg
ZHVwbGljYXRpbmcgY29kZSBmb3IgZGlzdCBhbmQgZGlzdGNoZWNrIHRhcmdldHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTE1NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdGhlIHNjcmlwdCBv
dXQgb2YgVG9vbHMvZ3RrIGJlY2F1c2UgaXQgaXMgYWxyZWFkeSB1c2VkIGJ5IFdQRS4gQWxzbywg
ZHJvcCB0aGUgLnB5CisgICAgICAgIHByZWZpeCBiZWNhdXNlIGl0IGlzIGV4ZWN1dGFibGUuCisK
KyAgICAgICAgKiBTY3JpcHRzL21ha2UtZGlzdDogUmVuYW1lZCBmcm9tIFRvb2xzL2d0ay9tYWtl
LWRpc3QucHkuCisKIDIwMTctMTAtMzEgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNv
bnkuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCBJbnNwZWN0b3IgbWVudSBpdGVt
cyB0byBNYWMgTWluaUJyb3dzZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvbWFrZS1kaXN0
IGIvVG9vbHMvU2NyaXB0cy9tYWtlLWRpc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI3ZTY1ZDBjZGYyNTc5MDJm
N2IwZjgzN2M3NTViM2EyNGU3MDI5NAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMv
bWFrZS1kaXN0CkBAIC0wLDAgKzEsMzMzIEBACisjIS91c3IvYmluL2VudiBweXRob24yCisjIENv
cHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorIworIyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisjIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBw
cmludF9mdW5jdGlvbgorZnJvbSBjb250ZXh0bGliIGltcG9ydCBjbG9zaW5nCisKK2ltcG9ydCBh
cmdwYXJzZQoraW1wb3J0IGVycm5vCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgb3MK
K2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0YXJm
aWxlCisKKworZGVmIGVudW0oKiplbnVtcyk6CisgICAgcmV0dXJuIHR5cGUoJ0VudW0nLCAoKSwg
ZW51bXMpCisKKworY2xhc3MgUnVsZShvYmplY3QpOgorICAgIFJlc3VsdCA9IGVudW0oSU5DTFVE
RT0xLCBFWENMVURFPTIsIE5PX01BVENIPTMpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlw
ZSwgcGF0dGVybik6CisgICAgICAgIHNlbGYudHlwZSA9IHR5cGUKKyAgICAgICAgc2VsZi5vcmln
aW5hbF9wYXR0ZXJuID0gcGF0dGVybgorICAgICAgICBzZWxmLnBhdHRlcm4gPSByZS5jb21waWxl
KHBhdHRlcm4pCisKKyAgICBkZWYgdGVzdChzZWxmLCBmaWxlKToKKyAgICAgICAgaWYgbm90KHNl
bGYucGF0dGVybi5zZWFyY2goZmlsZSkpOgorICAgICAgICAgICAgcmV0dXJuIFJ1bGUuUmVzdWx0
Lk5PX01BVENICisgICAgICAgIHJldHVybiBzZWxmLnR5cGUKKworCitjbGFzcyBSdWxlc2V0KG9i
amVjdCk6CisgICAgX2dsb2JhbF9ydWxlcyA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
KToKKyAgICAgICAgIyBCeSBkZWZhdWx0LCBhY2NlcHQgYWxsIGZpbGVzLgorICAgICAgICBzZWxm
LnJ1bGVzID0gW1J1bGUoUnVsZS5SZXN1bHQuSU5DTFVERSwgJy4qJyldCisKKyAgICBAY2xhc3Nt
ZXRob2QKKyAgICBkZWYgZ2xvYmFsX3J1bGVzKGNscyk6CisgICAgICAgIGlmIG5vdCBjbHMuX2ds
b2JhbF9ydWxlczoKKyAgICAgICAgICAgIGNscy5fZ2xvYmFsX3J1bGVzID0gUnVsZXNldCgpCisg
ICAgICAgIHJldHVybiBjbHMuX2dsb2JhbF9ydWxlcworCisgICAgQGNsYXNzbWV0aG9kCisgICAg
ZGVmIGFkZF9nbG9iYWxfcnVsZShjbHMsIHJ1bGUpOgorICAgICAgICBjbHMuZ2xvYmFsX3J1bGVz
KCkuYWRkX3J1bGUocnVsZSkKKworICAgIGRlZiBhZGRfcnVsZShzZWxmLCBydWxlKToKKyAgICAg
ICAgc2VsZi5ydWxlcy5hcHBlbmQocnVsZSkKKworICAgIGRlZiBwYXNzZXMoc2VsZiwgZmlsZSk6
CisgICAgICAgIGFsbG93ZWQgPSBGYWxzZQorICAgICAgICBmb3IgcnVsZSBpbiBzZWxmLnJ1bGVz
OgorICAgICAgICAgICAgcmVzdWx0ID0gcnVsZS50ZXN0KGZpbGUpCisgICAgICAgICAgICBpZiBy
ZXN1bHQgPT0gUnVsZS5SZXN1bHQuTk9fTUFUQ0g6CisgICAgICAgICAgICAgICAgY29udGludWUK
KyAgICAgICAgICAgIGFsbG93ZWQgPSBSdWxlLlJlc3VsdC5JTkNMVURFID09IHJlc3VsdAorICAg
ICAgICByZXR1cm4gYWxsb3dlZAorCisKK2NsYXNzIEZpbGUob2JqZWN0KToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgc291cmNlX3Jvb3QsIHRhcmJhbGxfcm9vdCk6CisgICAgICAgIHNlbGYuc291
cmNlX3Jvb3QgPSBzb3VyY2Vfcm9vdAorICAgICAgICBzZWxmLnRhcmJhbGxfcm9vdCA9IHRhcmJh
bGxfcm9vdAorCisgICAgZGVmIHNob3VsZF9za2lwX2ZpbGUoc2VsZiwgcGF0aCk6CisgICAgICAg
ICMgRG8gbm90IHNraXAgZmlsZXMgZXhwbGljaXRseSBhZGRlZCBmcm9tIHRoZSBtYW5pZmVzdC4K
KyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgZ2V0X2ZpbGVzKHNlbGYpOgorICAgICAg
ICB5aWVsZCAoc2VsZi5zb3VyY2Vfcm9vdCwgc2VsZi50YXJiYWxsX3Jvb3QpCisKKworY2xhc3Mg
RGlyZWN0b3J5KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZV9yb290LCB0
YXJiYWxsX3Jvb3QpOgorICAgICAgICBzZWxmLnNvdXJjZV9yb290ID0gc291cmNlX3Jvb3QKKyAg
ICAgICAgc2VsZi50YXJiYWxsX3Jvb3QgPSB0YXJiYWxsX3Jvb3QKKyAgICAgICAgc2VsZi5ydWxl
cyA9IFJ1bGVzZXQoKQorCisgICAgICAgIHNlbGYuZmlsZXNfaW5fdmVyc2lvbl9jb250cm9sID0g
c2VsZi5saXN0X2ZpbGVzX2luX3ZlcnNpb25fY29udHJvbCgpCisKKyAgICBkZWYgYWRkX3J1bGUo
c2VsZiwgcnVsZSk6CisgICAgICAgIHNlbGYucnVsZXMuYWRkX3J1bGUocnVsZSkKKworICAgIGRl
ZiBnZXRfdGFyYmFsbF9wYXRoKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgcmV0dXJuIGZpbGVu
YW1lLnJlcGxhY2Uoc2VsZi5zb3VyY2Vfcm9vdCwgc2VsZi50YXJiYWxsX3Jvb3QsIDEpCisKKyAg
ICBkZWYgbGlzdF9maWxlc19pbl92ZXJzaW9uX2NvbnRyb2woc2VsZik6CisgICAgICAgICMgRklY
TUU6IE9ubHkgZ2l0IGlzIHN1cHBvcnRlZCBmb3Igbm93LgorICAgICAgICBwID0gc3VicHJvY2Vz
cy5Qb3BlbihbJ2dpdCcsICdscy10cmVlJywgJy1yJywgJy0tbmFtZS1vbmx5JywgJ0hFQUQnLCBz
ZWxmLnNvdXJjZV9yb290XSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgb3V0ID0g
cC5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgIGlmIG5vdCBvdXQ6CisgICAgICAgICAgICByZXR1
cm4gW10KKyAgICAgICAgcmV0dXJuIG91dC5yc3RyaXAoJ1xuJykuc3BsaXQoJ1xuJykKKworICAg
IGRlZiBzaG91bGRfc2tpcF9maWxlKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gcGF0aCBu
b3QgaW4gc2VsZi5maWxlc19pbl92ZXJzaW9uX2NvbnRyb2wKKworICAgIGRlZiBnZXRfZmlsZXMo
c2VsZik6CisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNlbGYuc291
cmNlX3Jvb3QpOgorCisgICAgICAgICAgICBkZWYgcGFzc2VzX2FsbF9ydWxlcyhlbnRyeSk6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFJ1bGVzZXQuZ2xvYmFsX3J1bGVzKCkucGFzc2VzKGVudHJ5
KSBhbmQgc2VsZi5ydWxlcy5wYXNzZXMoZW50cnkpCisKKyAgICAgICAgICAgIHRvX2tlZXAgPSBm
aWx0ZXIocGFzc2VzX2FsbF9ydWxlcywgZGlycykKKyAgICAgICAgICAgIGRlbCBkaXJzWzpdCisg
ICAgICAgICAgICBkaXJzLmV4dGVuZCh0b19rZWVwKQorCisgICAgICAgICAgICBmb3IgZmlsZSBp
biBmaWxlczoKKyAgICAgICAgICAgICAgICBmaWxlID0gb3MucGF0aC5qb2luKHJvb3QsIGZpbGUp
CisgICAgICAgICAgICAgICAgaWYgbm90IHBhc3Nlc19hbGxfcnVsZXMoZmlsZSk6CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgeWllbGQgKGZpbGUsIHNlbGYu
Z2V0X3RhcmJhbGxfcGF0aChmaWxlKSkKKworCitjbGFzcyBNYW5pZmVzdChvYmplY3QpOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBtYW5pZmVzdF9maWxlbmFtZSwgc291cmNlX3Jvb3QsIGJ1aWxk
X3Jvb3QsIHRhcmJhbGxfcm9vdD0nLycpOgorICAgICAgICBzZWxmLmN1cnJlbnRfZGlyZWN0b3J5
ID0gTm9uZQorICAgICAgICBzZWxmLmRpcmVjdG9yaWVzID0gW10KKyAgICAgICAgc2VsZi50YXJi
YWxsX3Jvb3QgPSB0YXJiYWxsX3Jvb3QKKyAgICAgICAgc2VsZi5zb3VyY2Vfcm9vdCA9IHNvdXJj
ZV9yb290CisgICAgICAgIHNlbGYuYnVpbGRfcm9vdCA9IGJ1aWxkX3Jvb3QKKworICAgICAgICAj
IE5vcm1hbGl6ZSB0aGUgdGFyYmFsbCByb290IHNvIHRoYXQgaXQgc3RhcnRzIGFuZCBlbmRzIHdp
dGggYSBzbGFzaC4KKyAgICAgICAgaWYgbm90IHNlbGYudGFyYmFsbF9yb290LmVuZHN3aXRoKCcv
Jyk6CisgICAgICAgICAgICBzZWxmLnRhcmJhbGxfcm9vdCA9IHNlbGYudGFyYmFsbF9yb290ICsg
Jy8nCisgICAgICAgIGlmIG5vdCBzZWxmLnRhcmJhbGxfcm9vdC5zdGFydHN3aXRoKCcvJyk6Cisg
ICAgICAgICAgICBzZWxmLnRhcmJhbGxfcm9vdCA9ICcvJyArIHNlbGYudGFyYmFsbF9yb290CisK
KyAgICAgICAgd2l0aCBvcGVuKG1hbmlmZXN0X2ZpbGVuYW1lLCAncicpIGFzIGZpbGU6CisgICAg
ICAgICAgICBmb3IgbGluZSBpbiBmaWxlLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgIHNl
bGYucHJvY2Vzc19saW5lKGxpbmUpCisKKyAgICBkZWYgYWRkX3J1bGUoc2VsZiwgcnVsZSk6Cisg
ICAgICAgIGlmIHNlbGYuY3VycmVudF9kaXJlY3RvcnkgaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICBzZWxmLmN1cnJlbnRfZGlyZWN0b3J5LmFkZF9ydWxlKHJ1bGUpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBSdWxlc2V0LmFkZF9nbG9iYWxfcnVsZShydWxlKQorCisgICAgZGVmIGFkZF9k
aXJlY3Rvcnkoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgc2VsZi5jdXJyZW50X2RpcmVjdG9y
eSA9IGRpcmVjdG9yeQorICAgICAgICBzZWxmLmRpcmVjdG9yaWVzLmFwcGVuZChkaXJlY3Rvcnkp
CisKKyAgICBkZWYgZ2V0X2Z1bGxfc291cmNlX3BhdGgoc2VsZiwgc291cmNlX3BhdGgpOgorICAg
ICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc291cmNlX3BhdGgpOgorICAgICAgICAgICAgc291
cmNlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5zb3VyY2Vfcm9vdCwgc291cmNlX3BhdGgpCisg
ICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzb3VyY2VfcGF0aCk6CisgICAgICAgICAgICBy
YWlzZSBFeGNlcHRpb24oJ0NvdWxkIG5vdCBmaW5kIGRpcmVjdG9yeSAlcycgJSBzb3VyY2VfcGF0
aCkKKyAgICAgICAgcmV0dXJuIHNvdXJjZV9wYXRoCisKKyAgICBkZWYgZ2V0X2Z1bGxfdGFyYmFs
bF9wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi50YXJiYWxsX3Jvb3QgKyBw
YXRoCisKKyAgICBkZWYgZ2V0X3NvdXJjZV9hbmRfdGFyYmFsbF9wYXRoc19mcm9tX3BhcnRzKHNl
bGYsIHBhcnRzKToKKyAgICAgICAgZnVsbF9zb3VyY2VfcGF0aCA9IHNlbGYuZ2V0X2Z1bGxfc291
cmNlX3BhdGgocGFydHNbMV0pCisgICAgICAgIGlmIGxlbihwYXJ0cykgPiAyOgorICAgICAgICAg
ICAgZnVsbF90YXJiYWxsX3BhdGggPSBzZWxmLmdldF9mdWxsX3RhcmJhbGxfcGF0aChwYXJ0c1sy
XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1bGxfdGFyYmFsbF9wYXRoID0gc2VsZi5n
ZXRfZnVsbF90YXJiYWxsX3BhdGgocGFydHNbMV0pCisgICAgICAgIHJldHVybiAoZnVsbF9zb3Vy
Y2VfcGF0aCwgZnVsbF90YXJiYWxsX3BhdGgpCisKKyAgICBkZWYgcHJvY2Vzc19saW5lKHNlbGYs
IGxpbmUpOgorICAgICAgICBwYXJ0cyA9IGxpbmUuc3BsaXQoKQorICAgICAgICBpZiBub3QgcGFy
dHM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgcGFydHNbMF0uc3RhcnRzd2l0aCgi
IyIpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgcGFydHNbMF0gPT0gImRpcmVj
dG9yeSIgYW5kIGxlbihwYXJ0cykgPiAxOgorICAgICAgICAgICAgc2VsZi5hZGRfZGlyZWN0b3J5
KERpcmVjdG9yeSgqc2VsZi5nZXRfc291cmNlX2FuZF90YXJiYWxsX3BhdGhzX2Zyb21fcGFydHMo
cGFydHMpKSkKKyAgICAgICAgZWxpZiBwYXJ0c1swXSA9PSAiZmlsZSIgYW5kIGxlbihwYXJ0cykg
PiAxOgorICAgICAgICAgICAgc2VsZi5hZGRfZGlyZWN0b3J5KEZpbGUoKnNlbGYuZ2V0X3NvdXJj
ZV9hbmRfdGFyYmFsbF9wYXRoc19mcm9tX3BhcnRzKHBhcnRzKSkpCisgICAgICAgIGVsaWYgcGFy
dHNbMF0gPT0gImV4Y2x1ZGUiIGFuZCBsZW4ocGFydHMpID4gMToKKyAgICAgICAgICAgIHNlbGYu
YWRkX3J1bGUoUnVsZShSdWxlLlJlc3VsdC5FWENMVURFLCBwYXJ0c1sxXSkpCisgICAgICAgIGVs
aWYgcGFydHNbMF0gPT0gImluY2x1ZGUiIGFuZCBsZW4ocGFydHMpID4gMToKKyAgICAgICAgICAg
IHNlbGYuYWRkX3J1bGUoUnVsZShSdWxlLlJlc3VsdC5JTkNMVURFLCBwYXJ0c1sxXSkpCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0xpbmUgZG9lcyBub3QgYmVn
aW4gd2l0aCBhIGNvcnJlY3QgcnVsZTpcblx0JyArIGxpbmUpCisKKyAgICBkZWYgc2hvdWxkX3Nr
aXBfZmlsZShzZWxmLCBkaXJlY3RvcnksIGZpbGVuYW1lKToKKyAgICAgICAgIyBPbmx5IGFsbG93
IGZpbGVzIHRoYXQgYXJlIG5vdCBpbiB2ZXJzaW9uIGNvbnRyb2wgd2hlbiB0aGV5IGFyZSBleHBs
aWNpdGx5IGluY2x1ZGVkIGluIHRoZSBtYW5pZmVzdCBmcm9tIHRoZSBidWlsZCBkaXIuCisgICAg
ICAgIGlmIGZpbGVuYW1lLnN0YXJ0c3dpdGgoc2VsZi5idWlsZF9yb290KToKKyAgICAgICAgICAg
IHJldHVybiBGYWxzZQorCisgICAgICAgIHJldHVybiBkaXJlY3Rvcnkuc2hvdWxkX3NraXBfZmls
ZShmaWxlbmFtZSkKKworICAgIGRlZiBnZXRfZmlsZXMoc2VsZik6CisgICAgICAgIGZvciBkaXJl
Y3RvcnkgaW4gc2VsZi5kaXJlY3RvcmllczoKKyAgICAgICAgICAgIGZvciBmaWxlX3R1cGxlIGlu
IGRpcmVjdG9yeS5nZXRfZmlsZXMoKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNob3VsZF9z
a2lwX2ZpbGUoZGlyZWN0b3J5LCBmaWxlX3R1cGxlWzBdKToKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWUKKyAgICAgICAgICAgICAgICB5aWVsZCBmaWxlX3R1cGxlCisKKyAgICBkZWYgY3Jl
YXRlX3RhcmZpbGUoc2VsZiwgb3V0cHV0KToKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGZv
ciBmaWxlX3R1cGxlIGluIHNlbGYuZ2V0X2ZpbGVzKCk6CisgICAgICAgICAgICBjb3VudCA9IGNv
dW50ICsgMQorCisgICAgICAgIHdpdGggY2xvc2luZyh0YXJmaWxlLm9wZW4ob3V0cHV0LCAndycp
KSBhcyB0YXJiYWxsOgorICAgICAgICAgICAgZm9yIGksIChmaWxlX3BhdGgsIHRhcmJhbGxfcGF0
aCkgaW4gZW51bWVyYXRlKHNlbGYuZ2V0X2ZpbGVzKCksIHN0YXJ0PTEpOgorICAgICAgICAgICAg
ICAgIHByaW50KCdUYXJyaW5nIGZpbGUgezB9IG9mIHsxfScuZm9ybWF0KGksIGNvdW50KS5sanVz
dCg0MCksIGVuZD0nXHInKQorICAgICAgICAgICAgICAgIHRhcmJhbGwuYWRkKGZpbGVfcGF0aCwg
dGFyYmFsbF9wYXRoKQorICAgICAgICBwcmludCgiV3JvdGUgezB9Ii5mb3JtYXQob3V0cHV0KS5s
anVzdCg0MCkpCisKKworY2xhc3MgRGlzdGNoZWNrKG9iamVjdCk6CisgICAgQlVJTERfRElSRUNU
T1JZX05BTUUgPSAiX2J1aWxkIgorICAgIElOU1RBTExfRElSRUNUT1JZX05BTUUgPSAiX2luc3Rh
bGwiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlX3Jvb3QsIGJ1aWxkX3Jvb3QpOgor
ICAgICAgICBzZWxmLnNvdXJjZV9yb290ID0gc291cmNlX3Jvb3QKKyAgICAgICAgc2VsZi5idWls
ZF9yb290ID0gYnVpbGRfcm9vdAorCisgICAgZGVmIGV4dHJhY3RfdGFyYmFsbChzZWxmLCB0YXJi
YWxsX3BhdGgpOgorICAgICAgICB3aXRoIGNsb3NpbmcodGFyZmlsZS5vcGVuKHRhcmJhbGxfcGF0
aCwgJ3InKSkgYXMgdGFyYmFsbDoKKyAgICAgICAgICAgIHRhcmJhbGwuZXh0cmFjdGFsbChzZWxm
LmJ1aWxkX3Jvb3QpCisKKyAgICBkZWYgY29uZmlndXJlKHNlbGYsIGRpc3RfZGlyLCBidWlsZF9k
aXIsIGluc3RhbGxfZGlyLCBwb3J0KToKKyAgICAgICAgZGVmIGNyZWF0ZV9kaXIoZGlyZWN0b3J5
LCBkaXJlY3RvcnlfdHlwZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3Mu
bWtkaXIoZGlyZWN0b3J5KQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAg
ICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Qgb3Igbm90IG9zLnBhdGguaXNkaXIo
ZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb3VsZCBu
b3QgY3JlYXRlICVzIGRpciBhdCAlczogJXMiICUgKGRpcmVjdG9yeV90eXBlLCBkaXJlY3Rvcnks
IHN0cihlKSkpCisKKyAgICAgICAgY3JlYXRlX2RpcihidWlsZF9kaXIsICJidWlsZCIpCisgICAg
ICAgIGNyZWF0ZV9kaXIoaW5zdGFsbF9kaXIsICJpbnN0YWxsIikKKworICAgICAgICBjb21tYW5k
ID0gWydjbWFrZScsICctRFBPUlQ9JXMnICUgcG9ydCwgJy1EQ01BS0VfSU5TVEFMTF9QUkVGSVg9
JXMnICUgaW5zdGFsbF9kaXIsICctRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZScsIGRpc3RfZGly
XQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoY29tbWFuZCwgY3dkPWJ1aWxkX2RpcikK
KworICAgIGRlZiBidWlsZChzZWxmLCBidWlsZF9kaXIpOgorICAgICAgICBjb21tYW5kID0gWydt
YWtlJ10KKyAgICAgICAgbWFrZV9hcmdzID0gb3MuZ2V0ZW52KCdNQUtFX0FSR1MnKQorICAgICAg
ICBpZiBtYWtlX2FyZ3M6CisgICAgICAgICAgICBjb21tYW5kLmV4dGVuZChtYWtlX2FyZ3Muc3Bs
aXQoJyAnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbW1hbmQuYXBwZW5kKCctaiVk
JyAlIG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSkKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVj
a19jYWxsKGNvbW1hbmQsIGN3ZD1idWlsZF9kaXIpCisKKyAgICBkZWYgaW5zdGFsbChzZWxmLCBi
dWlsZF9kaXIpOgorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWydtYWtlJywgJ2luc3Rh
bGwnXSwgY3dkPWJ1aWxkX2RpcikKKworICAgIGRlZiBjbGVhbihzZWxmLCBkaXN0X2Rpcik6Cisg
ICAgICAgIHNodXRpbC5ybXRyZWUoZGlzdF9kaXIpCisKKyAgICBkZWYgY2hlY2soc2VsZiwgdGFy
YmFsbCwgcG9ydCk6CisgICAgICAgIHRhcmJhbGxfbmFtZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4
dChvcy5wYXRoLmJhc2VuYW1lKHRhcmJhbGwpKQorICAgICAgICBkaXN0X2RpciA9IG9zLnBhdGgu
am9pbihzZWxmLmJ1aWxkX3Jvb3QsIHRhcmJhbGxfbmFtZSkKKyAgICAgICAgYnVpbGRfZGlyID0g
b3MucGF0aC5qb2luKGRpc3RfZGlyLCBzZWxmLkJVSUxEX0RJUkVDVE9SWV9OQU1FKQorICAgICAg
ICBpbnN0YWxsX2RpciA9IG9zLnBhdGguam9pbihkaXN0X2Rpciwgc2VsZi5JTlNUQUxMX0RJUkVD
VE9SWV9OQU1FKQorCisgICAgICAgIHNlbGYuZXh0cmFjdF90YXJiYWxsKHRhcmJhbGwpCisgICAg
ICAgIHNlbGYuY29uZmlndXJlKGRpc3RfZGlyLCBidWlsZF9kaXIsIGluc3RhbGxfZGlyLCBwb3J0
KQorICAgICAgICBzZWxmLmJ1aWxkKGJ1aWxkX2RpcikKKyAgICAgICAgc2VsZi5pbnN0YWxsKGJ1
aWxkX2RpcikKKyAgICAgICAgc2VsZi5jbGVhbihkaXN0X2RpcikKKworaWYgX19uYW1lX18gPT0g
Il9fbWFpbl9fIjoKKyAgICBjbGFzcyBGaWxlUGF0aEFjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgor
ICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgcGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVlcywgb3B0
aW9uX3N0cmluZz1Ob25lKToKKyAgICAgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRl
c3QsIG9zLnBhdGguYWJzcGF0aCh2YWx1ZXMpKQorCisgICAgZGVmIGVuc3VyZV92ZXJzaW9uX2lm
X3Bvc3NpYmxlKGFyZ3VtZW50cyk6CisgICAgICAgIGlmIGFyZ3VtZW50cy52ZXJzaW9uIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcGtnY29uZmlnX2ZpbGUgPSBv
cy5wYXRoLmpvaW4oYXJndW1lbnRzLmJ1aWxkX2RpciwgIlNvdXJjZS9XZWJLaXQvd2Via2l0Mmd0
ay00LjAucGMiKQorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShwa2djb25maWdfZmlsZSk6Cisg
ICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbJ3BrZy1jb25maWcnLCAnLS1tb2R2ZXJz
aW9uJywgcGtnY29uZmlnX2ZpbGVdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAg
ICAgdmVyc2lvbiA9IHAuY29tbXVuaWNhdGUoKVswXQorICAgICAgICAgICAgaWYgdmVyc2lvbjoK
KyAgICAgICAgICAgICAgICBhcmd1bWVudHMudmVyc2lvbiA9IHZlcnNpb24ucnN0cmlwKCdcbicp
CisKKworICAgIGRlZiBnZXRfdGFyYmFsbF9yb290X2FuZF9vdXRwdXRfZmlsZW5hbWVfZnJvbV9h
cmd1bWVudHMoYXJndW1lbnRzKToKKyAgICAgICAgdGFyYmFsbF9yb290ID0gYXJndW1lbnRzLnRh
cmJhbGxfbmFtZQorICAgICAgICBpZiBhcmd1bWVudHMudmVyc2lvbiBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgIHRhcmJhbGxfcm9vdCArPSAnLScgKyBhcmd1bWVudHMudmVyc2lvbgorCisgICAg
ICAgIG91dHB1dF9maWxlbmFtZSA9IG9zLnBhdGguam9pbihhcmd1bWVudHMuYnVpbGRfZGlyLCB0
YXJiYWxsX3Jvb3QgKyAiLnRhciIpCisgICAgICAgIHJldHVybiB0YXJiYWxsX3Jvb3QsIG91dHB1
dF9maWxlbmFtZQorCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3Jp
cHRpb249J0J1aWxkIGEgZGlzdHJpYnV0aW9uIGJ1bmRsZS4nKQorICAgIHBhcnNlci5hZGRfYXJn
dW1lbnQoJy1jJywgJy0tY2hlY2snLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0nQ2hlY2sgdGhlIHRhcmJhbGwnKQorICAgIHBhcnNlci5hZGRfYXJn
dW1lbnQoJy1zJywgJy0tc291cmNlLWRpcicsIHR5cGU9c3RyLCBhY3Rpb249RmlsZVBhdGhBY3Rp
b24sIGRlZmF1bHQ9b3MuZ2V0Y3dkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdU
aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbi4gJyArIFwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEaXJlY3RvcnkgZm9yIHJlbGF0aXZlIHBh
dGhzLiBEZWZhdWx0cyB0byBjdXJyZW50IGRpcmVjdG9yeS4nKQorICAgIHBhcnNlci5hZGRfYXJn
dW1lbnQoJy0tdmVyc2lvbicsIHR5cGU9c3RyLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAg
ICAgICAgICAgICBoZWxwPSdUaGUgdmVyc2lvbiBvZiB0aGUgdGFyYmFsbCB0byBnZW5lcmF0ZScp
CisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWInLCAnLS1idWlsZC1kaXInLCB0eXBlPXN0ciwg
YWN0aW9uPUZpbGVQYXRoQWN0aW9uLCBkZWZhdWx0PW9zLmdldGN3ZCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0nVGhlIHRvcC1sZXZlbCBwYXRoIG9mIGRpcmVjdG9yeSBvZiB0aGUg
YnVpbGQgcm9vdC4gJyArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCeSBkZWZh
dWx0IGlzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQo
Jy10JywgJy0tdGFyYmFsbC1uYW1lJywgdHlwZT1zdHIsIGRlZmF1bHQ9J3dlYmtpdGd0aycsCisg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdCYXNlIG5hbWUgb2YgdGFyYmFsbC4gRGVmYXVs
dHMgdG8gIndlYmtpdGd0ayIuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcCcsICctLXBv
cnQnLCB0eXBlPXN0ciwgZGVmYXVsdD0nR1RLJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHA9J1BvcnQgdG8gYmUgYnVpbHQgaW4gdGFyYmFsbCBjaGVjay4gRGVmYXVsdHMgdG8gIkdUSyIu
JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdtYW5pZmVzdF9maWxlbmFtZScsIG1ldGF2YXI9
Im1hbmlmZXN0IiwgdHlwZT1zdHIsIGFjdGlvbj1GaWxlUGF0aEFjdGlvbiwgaGVscD0nVGhlIHBh
dGggdG8gdGhlIG1hbmlmZXN0IGZpbGUuJykKKworICAgIGFyZ3VtZW50cyA9IHBhcnNlci5wYXJz
ZV9hcmdzKCkKKworICAgICMgUGF0aHMgaW4gdGhlIG1hbmlmZXN0IGFyZSByZWxhdGl2ZSB0byB0
aGUgc291cmNlIGRpcmVjdG9yeSwgYW5kIHRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdAorICAgICMg
Y3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB0aGUgc291cmNlIGRpcmVjdG9yeSwgc28gY2hh
bmdlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisgICAgIyB0byBiZSB0aGUgc291cmNl
IGRpcmVjdG9yeS4KKyAgICBvcy5jaGRpcihhcmd1bWVudHMuc291cmNlX2RpcikKKworICAgIGVu
c3VyZV92ZXJzaW9uX2lmX3Bvc3NpYmxlKGFyZ3VtZW50cykKKyAgICB0YXJiYWxsX3Jvb3QsIG91
dHB1dF9maWxlbmFtZSA9IGdldF90YXJiYWxsX3Jvb3RfYW5kX291dHB1dF9maWxlbmFtZV9mcm9t
X2FyZ3VtZW50cyhhcmd1bWVudHMpCisKKyAgICBtYW5pZmVzdCA9IE1hbmlmZXN0KGFyZ3VtZW50
cy5tYW5pZmVzdF9maWxlbmFtZSwgYXJndW1lbnRzLnNvdXJjZV9kaXIsIGFyZ3VtZW50cy5idWls
ZF9kaXIsIHRhcmJhbGxfcm9vdCkKKyAgICBtYW5pZmVzdC5jcmVhdGVfdGFyZmlsZShvdXRwdXRf
ZmlsZW5hbWUpCisKKyAgICBpZiBhcmd1bWVudHMuY2hlY2s6CisgICAgICAgIERpc3RjaGVjayhh
cmd1bWVudHMuc291cmNlX2RpciwgYXJndW1lbnRzLmJ1aWxkX2RpcikuY2hlY2sob3V0cHV0X2Zp
bGVuYW1lLCBhcmd1bWVudHMucG9ydCkKZGlmZiAtLWdpdCBhL1Rvb2xzL2d0ay9tYWtlLWRpc3Qu
cHkgYi9Ub29scy9ndGsvbWFrZS1kaXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCA2ZmQ3ZDViYzQxYTMyZjNkYzUyYTM0YjM4ZGUyMGNkNDRiMTk3NGFmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL2d0ay9tYWtlLWRpc3QucHkK
KysrIC9kZXYvbnVsbApAQCAtMSwzMzMgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0j
IENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgotIwotIyBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0jIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSMgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0j
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSMKLSMgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSMgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLQotZnJvbSBfX2Z1dHVyZV9fIGltcG9y
dCBwcmludF9mdW5jdGlvbgotZnJvbSBjb250ZXh0bGliIGltcG9ydCBjbG9zaW5nCi0KLWltcG9y
dCBhcmdwYXJzZQotaW1wb3J0IGVycm5vCi1pbXBvcnQgbXVsdGlwcm9jZXNzaW5nCi1pbXBvcnQg
b3MKLWltcG9ydCByZQotaW1wb3J0IHNodXRpbAotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCB0
YXJmaWxlCi0KLQotZGVmIGVudW0oKiplbnVtcyk6Ci0gICAgcmV0dXJuIHR5cGUoJ0VudW0nLCAo
KSwgZW51bXMpCi0KLQotY2xhc3MgUnVsZShvYmplY3QpOgotICAgIFJlc3VsdCA9IGVudW0oSU5D
TFVERT0xLCBFWENMVURFPTIsIE5PX01BVENIPTMpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwg
dHlwZSwgcGF0dGVybik6Ci0gICAgICAgIHNlbGYudHlwZSA9IHR5cGUKLSAgICAgICAgc2VsZi5v
cmlnaW5hbF9wYXR0ZXJuID0gcGF0dGVybgotICAgICAgICBzZWxmLnBhdHRlcm4gPSByZS5jb21w
aWxlKHBhdHRlcm4pCi0KLSAgICBkZWYgdGVzdChzZWxmLCBmaWxlKToKLSAgICAgICAgaWYgbm90
KHNlbGYucGF0dGVybi5zZWFyY2goZmlsZSkpOgotICAgICAgICAgICAgcmV0dXJuIFJ1bGUuUmVz
dWx0Lk5PX01BVENICi0gICAgICAgIHJldHVybiBzZWxmLnR5cGUKLQotCi1jbGFzcyBSdWxlc2V0
KG9iamVjdCk6Ci0gICAgX2dsb2JhbF9ydWxlcyA9IE5vbmUKLQotICAgIGRlZiBfX2luaXRfXyhz
ZWxmKToKLSAgICAgICAgIyBCeSBkZWZhdWx0LCBhY2NlcHQgYWxsIGZpbGVzLgotICAgICAgICBz
ZWxmLnJ1bGVzID0gW1J1bGUoUnVsZS5SZXN1bHQuSU5DTFVERSwgJy4qJyldCi0KLSAgICBAY2xh
c3NtZXRob2QKLSAgICBkZWYgZ2xvYmFsX3J1bGVzKGNscyk6Ci0gICAgICAgIGlmIG5vdCBjbHMu
X2dsb2JhbF9ydWxlczoKLSAgICAgICAgICAgIGNscy5fZ2xvYmFsX3J1bGVzID0gUnVsZXNldCgp
Ci0gICAgICAgIHJldHVybiBjbHMuX2dsb2JhbF9ydWxlcwotCi0gICAgQGNsYXNzbWV0aG9kCi0g
ICAgZGVmIGFkZF9nbG9iYWxfcnVsZShjbHMsIHJ1bGUpOgotICAgICAgICBjbHMuZ2xvYmFsX3J1
bGVzKCkuYWRkX3J1bGUocnVsZSkKLQotICAgIGRlZiBhZGRfcnVsZShzZWxmLCBydWxlKToKLSAg
ICAgICAgc2VsZi5ydWxlcy5hcHBlbmQocnVsZSkKLQotICAgIGRlZiBwYXNzZXMoc2VsZiwgZmls
ZSk6Ci0gICAgICAgIGFsbG93ZWQgPSBGYWxzZQotICAgICAgICBmb3IgcnVsZSBpbiBzZWxmLnJ1
bGVzOgotICAgICAgICAgICAgcmVzdWx0ID0gcnVsZS50ZXN0KGZpbGUpCi0gICAgICAgICAgICBp
ZiByZXN1bHQgPT0gUnVsZS5SZXN1bHQuTk9fTUFUQ0g6Ci0gICAgICAgICAgICAgICAgY29udGlu
dWUKLSAgICAgICAgICAgIGFsbG93ZWQgPSBSdWxlLlJlc3VsdC5JTkNMVURFID09IHJlc3VsdAot
ICAgICAgICByZXR1cm4gYWxsb3dlZAotCi0KLWNsYXNzIEZpbGUob2JqZWN0KToKLSAgICBkZWYg
X19pbml0X18oc2VsZiwgc291cmNlX3Jvb3QsIHRhcmJhbGxfcm9vdCk6Ci0gICAgICAgIHNlbGYu
c291cmNlX3Jvb3QgPSBzb3VyY2Vfcm9vdAotICAgICAgICBzZWxmLnRhcmJhbGxfcm9vdCA9IHRh
cmJhbGxfcm9vdAotCi0gICAgZGVmIHNob3VsZF9za2lwX2ZpbGUoc2VsZiwgcGF0aCk6Ci0gICAg
ICAgICMgRG8gbm90IHNraXAgZmlsZXMgZXhwbGljaXRseSBhZGRlZCBmcm9tIHRoZSBtYW5pZmVz
dC4KLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgZ2V0X2ZpbGVzKHNlbGYpOgotICAg
ICAgICB5aWVsZCAoc2VsZi5zb3VyY2Vfcm9vdCwgc2VsZi50YXJiYWxsX3Jvb3QpCi0KLQotY2xh
c3MgRGlyZWN0b3J5KG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZV9yb290
LCB0YXJiYWxsX3Jvb3QpOgotICAgICAgICBzZWxmLnNvdXJjZV9yb290ID0gc291cmNlX3Jvb3QK
LSAgICAgICAgc2VsZi50YXJiYWxsX3Jvb3QgPSB0YXJiYWxsX3Jvb3QKLSAgICAgICAgc2VsZi5y
dWxlcyA9IFJ1bGVzZXQoKQotCi0gICAgICAgIHNlbGYuZmlsZXNfaW5fdmVyc2lvbl9jb250cm9s
ID0gc2VsZi5saXN0X2ZpbGVzX2luX3ZlcnNpb25fY29udHJvbCgpCi0KLSAgICBkZWYgYWRkX3J1
bGUoc2VsZiwgcnVsZSk6Ci0gICAgICAgIHNlbGYucnVsZXMuYWRkX3J1bGUocnVsZSkKLQotICAg
IGRlZiBnZXRfdGFyYmFsbF9wYXRoKHNlbGYsIGZpbGVuYW1lKToKLSAgICAgICAgcmV0dXJuIGZp
bGVuYW1lLnJlcGxhY2Uoc2VsZi5zb3VyY2Vfcm9vdCwgc2VsZi50YXJiYWxsX3Jvb3QsIDEpCi0K
LSAgICBkZWYgbGlzdF9maWxlc19pbl92ZXJzaW9uX2NvbnRyb2woc2VsZik6Ci0gICAgICAgICMg
RklYTUU6IE9ubHkgZ2l0IGlzIHN1cHBvcnRlZCBmb3Igbm93LgotICAgICAgICBwID0gc3VicHJv
Y2Vzcy5Qb3BlbihbJ2dpdCcsICdscy10cmVlJywgJy1yJywgJy0tbmFtZS1vbmx5JywgJ0hFQUQn
LCBzZWxmLnNvdXJjZV9yb290XSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKLSAgICAgICAgb3V0
ID0gcC5jb21tdW5pY2F0ZSgpWzBdCi0gICAgICAgIGlmIG5vdCBvdXQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gW10KLSAgICAgICAgcmV0dXJuIG91dC5yc3RyaXAoJ1xuJykuc3BsaXQoJ1xuJykKLQot
ICAgIGRlZiBzaG91bGRfc2tpcF9maWxlKHNlbGYsIHBhdGgpOgotICAgICAgICByZXR1cm4gcGF0
aCBub3QgaW4gc2VsZi5maWxlc19pbl92ZXJzaW9uX2NvbnRyb2wKLQotICAgIGRlZiBnZXRfZmls
ZXMoc2VsZik6Ci0gICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNlbGYu
c291cmNlX3Jvb3QpOgotCi0gICAgICAgICAgICBkZWYgcGFzc2VzX2FsbF9ydWxlcyhlbnRyeSk6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFJ1bGVzZXQuZ2xvYmFsX3J1bGVzKCkucGFzc2VzKGVu
dHJ5KSBhbmQgc2VsZi5ydWxlcy5wYXNzZXMoZW50cnkpCi0KLSAgICAgICAgICAgIHRvX2tlZXAg
PSBmaWx0ZXIocGFzc2VzX2FsbF9ydWxlcywgZGlycykKLSAgICAgICAgICAgIGRlbCBkaXJzWzpd
Ci0gICAgICAgICAgICBkaXJzLmV4dGVuZCh0b19rZWVwKQotCi0gICAgICAgICAgICBmb3IgZmls
ZSBpbiBmaWxlczoKLSAgICAgICAgICAgICAgICBmaWxlID0gb3MucGF0aC5qb2luKHJvb3QsIGZp
bGUpCi0gICAgICAgICAgICAgICAgaWYgbm90IHBhc3Nlc19hbGxfcnVsZXMoZmlsZSk6Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgeWllbGQgKGZpbGUsIHNl
bGYuZ2V0X3RhcmJhbGxfcGF0aChmaWxlKSkKLQotCi1jbGFzcyBNYW5pZmVzdChvYmplY3QpOgot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYW5pZmVzdF9maWxlbmFtZSwgc291cmNlX3Jvb3QsIGJ1
aWxkX3Jvb3QsIHRhcmJhbGxfcm9vdD0nLycpOgotICAgICAgICBzZWxmLmN1cnJlbnRfZGlyZWN0
b3J5ID0gTm9uZQotICAgICAgICBzZWxmLmRpcmVjdG9yaWVzID0gW10KLSAgICAgICAgc2VsZi50
YXJiYWxsX3Jvb3QgPSB0YXJiYWxsX3Jvb3QKLSAgICAgICAgc2VsZi5zb3VyY2Vfcm9vdCA9IHNv
dXJjZV9yb290Ci0gICAgICAgIHNlbGYuYnVpbGRfcm9vdCA9IGJ1aWxkX3Jvb3QKLQotICAgICAg
ICAjIE5vcm1hbGl6ZSB0aGUgdGFyYmFsbCByb290IHNvIHRoYXQgaXQgc3RhcnRzIGFuZCBlbmRz
IHdpdGggYSBzbGFzaC4KLSAgICAgICAgaWYgbm90IHNlbGYudGFyYmFsbF9yb290LmVuZHN3aXRo
KCcvJyk6Ci0gICAgICAgICAgICBzZWxmLnRhcmJhbGxfcm9vdCA9IHNlbGYudGFyYmFsbF9yb290
ICsgJy8nCi0gICAgICAgIGlmIG5vdCBzZWxmLnRhcmJhbGxfcm9vdC5zdGFydHN3aXRoKCcvJyk6
Ci0gICAgICAgICAgICBzZWxmLnRhcmJhbGxfcm9vdCA9ICcvJyArIHNlbGYudGFyYmFsbF9yb290
Ci0KLSAgICAgICAgd2l0aCBvcGVuKG1hbmlmZXN0X2ZpbGVuYW1lLCAncicpIGFzIGZpbGU6Ci0g
ICAgICAgICAgICBmb3IgbGluZSBpbiBmaWxlLnJlYWRsaW5lcygpOgotICAgICAgICAgICAgICAg
IHNlbGYucHJvY2Vzc19saW5lKGxpbmUpCi0KLSAgICBkZWYgYWRkX3J1bGUoc2VsZiwgcnVsZSk6
Ci0gICAgICAgIGlmIHNlbGYuY3VycmVudF9kaXJlY3RvcnkgaXMgbm90IE5vbmU6Ci0gICAgICAg
ICAgICBzZWxmLmN1cnJlbnRfZGlyZWN0b3J5LmFkZF9ydWxlKHJ1bGUpCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICBSdWxlc2V0LmFkZF9nbG9iYWxfcnVsZShydWxlKQotCi0gICAgZGVmIGFk
ZF9kaXJlY3Rvcnkoc2VsZiwgZGlyZWN0b3J5KToKLSAgICAgICAgc2VsZi5jdXJyZW50X2RpcmVj
dG9yeSA9IGRpcmVjdG9yeQotICAgICAgICBzZWxmLmRpcmVjdG9yaWVzLmFwcGVuZChkaXJlY3Rv
cnkpCi0KLSAgICBkZWYgZ2V0X2Z1bGxfc291cmNlX3BhdGgoc2VsZiwgc291cmNlX3BhdGgpOgot
ICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc291cmNlX3BhdGgpOgotICAgICAgICAgICAg
c291cmNlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5zb3VyY2Vfcm9vdCwgc291cmNlX3BhdGgp
Ci0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzb3VyY2VfcGF0aCk6Ci0gICAgICAgICAg
ICByYWlzZSBFeGNlcHRpb24oJ0NvdWxkIG5vdCBmaW5kIGRpcmVjdG9yeSAlcycgJSBzb3VyY2Vf
cGF0aCkKLSAgICAgICAgcmV0dXJuIHNvdXJjZV9wYXRoCi0KLSAgICBkZWYgZ2V0X2Z1bGxfdGFy
YmFsbF9wYXRoKHNlbGYsIHBhdGgpOgotICAgICAgICByZXR1cm4gc2VsZi50YXJiYWxsX3Jvb3Qg
KyBwYXRoCi0KLSAgICBkZWYgZ2V0X3NvdXJjZV9hbmRfdGFyYmFsbF9wYXRoc19mcm9tX3BhcnRz
KHNlbGYsIHBhcnRzKToKLSAgICAgICAgZnVsbF9zb3VyY2VfcGF0aCA9IHNlbGYuZ2V0X2Z1bGxf
c291cmNlX3BhdGgocGFydHNbMV0pCi0gICAgICAgIGlmIGxlbihwYXJ0cykgPiAyOgotICAgICAg
ICAgICAgZnVsbF90YXJiYWxsX3BhdGggPSBzZWxmLmdldF9mdWxsX3RhcmJhbGxfcGF0aChwYXJ0
c1syXSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZ1bGxfdGFyYmFsbF9wYXRoID0gc2Vs
Zi5nZXRfZnVsbF90YXJiYWxsX3BhdGgocGFydHNbMV0pCi0gICAgICAgIHJldHVybiAoZnVsbF9z
b3VyY2VfcGF0aCwgZnVsbF90YXJiYWxsX3BhdGgpCi0KLSAgICBkZWYgcHJvY2Vzc19saW5lKHNl
bGYsIGxpbmUpOgotICAgICAgICBwYXJ0cyA9IGxpbmUuc3BsaXQoKQotICAgICAgICBpZiBub3Qg
cGFydHM6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgcGFydHNbMF0uc3RhcnRzd2l0
aCgiIyIpOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgaWYgcGFydHNbMF0gPT0gImRp
cmVjdG9yeSIgYW5kIGxlbihwYXJ0cykgPiAxOgotICAgICAgICAgICAgc2VsZi5hZGRfZGlyZWN0
b3J5KERpcmVjdG9yeSgqc2VsZi5nZXRfc291cmNlX2FuZF90YXJiYWxsX3BhdGhzX2Zyb21fcGFy
dHMocGFydHMpKSkKLSAgICAgICAgZWxpZiBwYXJ0c1swXSA9PSAiZmlsZSIgYW5kIGxlbihwYXJ0
cykgPiAxOgotICAgICAgICAgICAgc2VsZi5hZGRfZGlyZWN0b3J5KEZpbGUoKnNlbGYuZ2V0X3Nv
dXJjZV9hbmRfdGFyYmFsbF9wYXRoc19mcm9tX3BhcnRzKHBhcnRzKSkpCi0gICAgICAgIGVsaWYg
cGFydHNbMF0gPT0gImV4Y2x1ZGUiIGFuZCBsZW4ocGFydHMpID4gMToKLSAgICAgICAgICAgIHNl
bGYuYWRkX3J1bGUoUnVsZShSdWxlLlJlc3VsdC5FWENMVURFLCBwYXJ0c1sxXSkpCi0gICAgICAg
IGVsaWYgcGFydHNbMF0gPT0gImluY2x1ZGUiIGFuZCBsZW4ocGFydHMpID4gMToKLSAgICAgICAg
ICAgIHNlbGYuYWRkX3J1bGUoUnVsZShSdWxlLlJlc3VsdC5JTkNMVURFLCBwYXJ0c1sxXSkpCi0g
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0xpbmUgZG9lcyBub3Qg
YmVnaW4gd2l0aCBhIGNvcnJlY3QgcnVsZTpcblx0JyArIGxpbmUpCi0KLSAgICBkZWYgc2hvdWxk
X3NraXBfZmlsZShzZWxmLCBkaXJlY3RvcnksIGZpbGVuYW1lKToKLSAgICAgICAgIyBPbmx5IGFs
bG93IGZpbGVzIHRoYXQgYXJlIG5vdCBpbiB2ZXJzaW9uIGNvbnRyb2wgd2hlbiB0aGV5IGFyZSBl
eHBsaWNpdGx5IGluY2x1ZGVkIGluIHRoZSBtYW5pZmVzdCBmcm9tIHRoZSBidWlsZCBkaXIuCi0g
ICAgICAgIGlmIGZpbGVuYW1lLnN0YXJ0c3dpdGgoc2VsZi5idWlsZF9yb290KToKLSAgICAgICAg
ICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIHJldHVybiBkaXJlY3Rvcnkuc2hvdWxkX3NraXBf
ZmlsZShmaWxlbmFtZSkKLQotICAgIGRlZiBnZXRfZmlsZXMoc2VsZik6Ci0gICAgICAgIGZvciBk
aXJlY3RvcnkgaW4gc2VsZi5kaXJlY3RvcmllczoKLSAgICAgICAgICAgIGZvciBmaWxlX3R1cGxl
IGluIGRpcmVjdG9yeS5nZXRfZmlsZXMoKToKLSAgICAgICAgICAgICAgICBpZiBzZWxmLnNob3Vs
ZF9za2lwX2ZpbGUoZGlyZWN0b3J5LCBmaWxlX3R1cGxlWzBdKToKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWUKLSAgICAgICAgICAgICAgICB5aWVsZCBmaWxlX3R1cGxlCi0KLSAgICBkZWYg
Y3JlYXRlX3RhcmZpbGUoc2VsZiwgb3V0cHV0KToKLSAgICAgICAgY291bnQgPSAwCi0gICAgICAg
IGZvciBmaWxlX3R1cGxlIGluIHNlbGYuZ2V0X2ZpbGVzKCk6Ci0gICAgICAgICAgICBjb3VudCA9
IGNvdW50ICsgMQotCi0gICAgICAgIHdpdGggY2xvc2luZyh0YXJmaWxlLm9wZW4ob3V0cHV0LCAn
dycpKSBhcyB0YXJiYWxsOgotICAgICAgICAgICAgZm9yIGksIChmaWxlX3BhdGgsIHRhcmJhbGxf
cGF0aCkgaW4gZW51bWVyYXRlKHNlbGYuZ2V0X2ZpbGVzKCksIHN0YXJ0PTEpOgotICAgICAgICAg
ICAgICAgIHByaW50KCdUYXJyaW5nIGZpbGUgezB9IG9mIHsxfScuZm9ybWF0KGksIGNvdW50KS5s
anVzdCg0MCksIGVuZD0nXHInKQotICAgICAgICAgICAgICAgIHRhcmJhbGwuYWRkKGZpbGVfcGF0
aCwgdGFyYmFsbF9wYXRoKQotICAgICAgICBwcmludCgiV3JvdGUgezB9Ii5mb3JtYXQob3V0cHV0
KS5sanVzdCg0MCkpCi0KLQotY2xhc3MgRGlzdGNoZWNrKG9iamVjdCk6Ci0gICAgQlVJTERfRElS
RUNUT1JZX05BTUUgPSAiX2J1aWxkIgotICAgIElOU1RBTExfRElSRUNUT1JZX05BTUUgPSAiX2lu
c3RhbGwiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlX3Jvb3QsIGJ1aWxkX3Jvb3Qp
OgotICAgICAgICBzZWxmLnNvdXJjZV9yb290ID0gc291cmNlX3Jvb3QKLSAgICAgICAgc2VsZi5i
dWlsZF9yb290ID0gYnVpbGRfcm9vdAotCi0gICAgZGVmIGV4dHJhY3RfdGFyYmFsbChzZWxmLCB0
YXJiYWxsX3BhdGgpOgotICAgICAgICB3aXRoIGNsb3NpbmcodGFyZmlsZS5vcGVuKHRhcmJhbGxf
cGF0aCwgJ3InKSkgYXMgdGFyYmFsbDoKLSAgICAgICAgICAgIHRhcmJhbGwuZXh0cmFjdGFsbChz
ZWxmLmJ1aWxkX3Jvb3QpCi0KLSAgICBkZWYgY29uZmlndXJlKHNlbGYsIGRpc3RfZGlyLCBidWls
ZF9kaXIsIGluc3RhbGxfZGlyLCBwb3J0KToKLSAgICAgICAgZGVmIGNyZWF0ZV9kaXIoZGlyZWN0
b3J5LCBkaXJlY3RvcnlfdHlwZSk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAg
b3MubWtkaXIoZGlyZWN0b3J5KQotICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6Ci0gICAg
ICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Qgb3Igbm90IG9zLnBhdGguaXNk
aXIoZGlyZWN0b3J5KToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb3Vs
ZCBub3QgY3JlYXRlICVzIGRpciBhdCAlczogJXMiICUgKGRpcmVjdG9yeV90eXBlLCBkaXJlY3Rv
cnksIHN0cihlKSkpCi0KLSAgICAgICAgY3JlYXRlX2RpcihidWlsZF9kaXIsICJidWlsZCIpCi0g
ICAgICAgIGNyZWF0ZV9kaXIoaW5zdGFsbF9kaXIsICJpbnN0YWxsIikKLQotICAgICAgICBjb21t
YW5kID0gWydjbWFrZScsICctRFBPUlQ9JXMnICUgcG9ydCwgJy1EQ01BS0VfSU5TVEFMTF9QUkVG
SVg9JXMnICUgaW5zdGFsbF9kaXIsICctRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZScsIGRpc3Rf
ZGlyXQotICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoY29tbWFuZCwgY3dkPWJ1aWxkX2Rp
cikKLQotICAgIGRlZiBidWlsZChzZWxmLCBidWlsZF9kaXIpOgotICAgICAgICBjb21tYW5kID0g
WydtYWtlJ10KLSAgICAgICAgbWFrZV9hcmdzID0gb3MuZ2V0ZW52KCdNQUtFX0FSR1MnKQotICAg
ICAgICBpZiBtYWtlX2FyZ3M6Ci0gICAgICAgICAgICBjb21tYW5kLmV4dGVuZChtYWtlX2FyZ3Mu
c3BsaXQoJyAnKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNvbW1hbmQuYXBwZW5kKCct
aiVkJyAlIG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSkKLSAgICAgICAgc3VicHJvY2Vzcy5j
aGVja19jYWxsKGNvbW1hbmQsIGN3ZD1idWlsZF9kaXIpCi0KLSAgICBkZWYgaW5zdGFsbChzZWxm
LCBidWlsZF9kaXIpOgotICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWydtYWtlJywgJ2lu
c3RhbGwnXSwgY3dkPWJ1aWxkX2RpcikKLQotICAgIGRlZiBjbGVhbihzZWxmLCBkaXN0X2Rpcik6
Ci0gICAgICAgIHNodXRpbC5ybXRyZWUoZGlzdF9kaXIpCi0KLSAgICBkZWYgY2hlY2soc2VsZiwg
dGFyYmFsbCwgcG9ydCk6Ci0gICAgICAgIHRhcmJhbGxfbmFtZSwgZXh0ID0gb3MucGF0aC5zcGxp
dGV4dChvcy5wYXRoLmJhc2VuYW1lKHRhcmJhbGwpKQotICAgICAgICBkaXN0X2RpciA9IG9zLnBh
dGguam9pbihzZWxmLmJ1aWxkX3Jvb3QsIHRhcmJhbGxfbmFtZSkKLSAgICAgICAgYnVpbGRfZGly
ID0gb3MucGF0aC5qb2luKGRpc3RfZGlyLCBzZWxmLkJVSUxEX0RJUkVDVE9SWV9OQU1FKQotICAg
ICAgICBpbnN0YWxsX2RpciA9IG9zLnBhdGguam9pbihkaXN0X2Rpciwgc2VsZi5JTlNUQUxMX0RJ
UkVDVE9SWV9OQU1FKQotCi0gICAgICAgIHNlbGYuZXh0cmFjdF90YXJiYWxsKHRhcmJhbGwpCi0g
ICAgICAgIHNlbGYuY29uZmlndXJlKGRpc3RfZGlyLCBidWlsZF9kaXIsIGluc3RhbGxfZGlyLCBw
b3J0KQotICAgICAgICBzZWxmLmJ1aWxkKGJ1aWxkX2RpcikKLSAgICAgICAgc2VsZi5pbnN0YWxs
KGJ1aWxkX2RpcikKLSAgICAgICAgc2VsZi5jbGVhbihkaXN0X2RpcikKLQotaWYgX19uYW1lX18g
PT0gIl9fbWFpbl9fIjoKLSAgICBjbGFzcyBGaWxlUGF0aEFjdGlvbihhcmdwYXJzZS5BY3Rpb24p
OgotICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgcGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVlcywg
b3B0aW9uX3N0cmluZz1Ob25lKToKLSAgICAgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBzZWxm
LmRlc3QsIG9zLnBhdGguYWJzcGF0aCh2YWx1ZXMpKQotCi0gICAgZGVmIGVuc3VyZV92ZXJzaW9u
X2lmX3Bvc3NpYmxlKGFyZ3VtZW50cyk6Ci0gICAgICAgIGlmIGFyZ3VtZW50cy52ZXJzaW9uIGlz
IG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgcGtnY29uZmlnX2ZpbGUg
PSBvcy5wYXRoLmpvaW4oYXJndW1lbnRzLmJ1aWxkX2RpciwgIlNvdXJjZS9XZWJLaXQvd2Via2l0
Mmd0ay00LjAucGMiKQotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShwa2djb25maWdfZmlsZSk6
Ci0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbJ3BrZy1jb25maWcnLCAnLS1tb2R2
ZXJzaW9uJywgcGtnY29uZmlnX2ZpbGVdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQotICAgICAg
ICAgICAgdmVyc2lvbiA9IHAuY29tbXVuaWNhdGUoKVswXQotICAgICAgICAgICAgaWYgdmVyc2lv
bjoKLSAgICAgICAgICAgICAgICBhcmd1bWVudHMudmVyc2lvbiA9IHZlcnNpb24ucnN0cmlwKCdc
bicpCi0KLQotICAgIGRlZiBnZXRfdGFyYmFsbF9yb290X2FuZF9vdXRwdXRfZmlsZW5hbWVfZnJv
bV9hcmd1bWVudHMoYXJndW1lbnRzKToKLSAgICAgICAgdGFyYmFsbF9yb290ID0gYXJndW1lbnRz
LnRhcmJhbGxfbmFtZQotICAgICAgICBpZiBhcmd1bWVudHMudmVyc2lvbiBpcyBub3QgTm9uZToK
LSAgICAgICAgICAgIHRhcmJhbGxfcm9vdCArPSAnLScgKyBhcmd1bWVudHMudmVyc2lvbgotCi0g
ICAgICAgIG91dHB1dF9maWxlbmFtZSA9IG9zLnBhdGguam9pbihhcmd1bWVudHMuYnVpbGRfZGly
LCB0YXJiYWxsX3Jvb3QgKyAiLnRhciIpCi0gICAgICAgIHJldHVybiB0YXJiYWxsX3Jvb3QsIG91
dHB1dF9maWxlbmFtZQotCi0gICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVz
Y3JpcHRpb249J0J1aWxkIGEgZGlzdHJpYnV0aW9uIGJ1bmRsZS4nKQotICAgIHBhcnNlci5hZGRf
YXJndW1lbnQoJy1jJywgJy0tY2hlY2snLCBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgaGVscD0nQ2hlY2sgdGhlIHRhcmJhbGwnKQotICAgIHBhcnNlci5hZGRf
YXJndW1lbnQoJy1zJywgJy0tc291cmNlLWRpcicsIHR5cGU9c3RyLCBhY3Rpb249RmlsZVBhdGhB
Y3Rpb24sIGRlZmF1bHQ9b3MuZ2V0Y3dkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSdUaGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbi4gJyAr
IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEaXJlY3RvcnkgZm9yIHJlbGF0aXZl
IHBhdGhzLiBEZWZhdWx0cyB0byBjdXJyZW50IGRpcmVjdG9yeS4nKQotICAgIHBhcnNlci5hZGRf
YXJndW1lbnQoJy0tdmVyc2lvbicsIHR5cGU9c3RyLCBkZWZhdWx0PU5vbmUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSdUaGUgdmVyc2lvbiBvZiB0aGUgdGFyYmFsbCB0byBnZW5lcmF0
ZScpCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWInLCAnLS1idWlsZC1kaXInLCB0eXBlPXN0
ciwgYWN0aW9uPUZpbGVQYXRoQWN0aW9uLCBkZWZhdWx0PW9zLmdldGN3ZCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgaGVscD0nVGhlIHRvcC1sZXZlbCBwYXRoIG9mIGRpcmVjdG9yeSBvZiB0
aGUgYnVpbGQgcm9vdC4gJyArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCeSBk
ZWZhdWx0IGlzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4nKQotICAgIHBhcnNlci5hZGRfYXJndW1l
bnQoJy10JywgJy0tdGFyYmFsbC1uYW1lJywgdHlwZT1zdHIsIGRlZmF1bHQ9J3dlYmtpdGd0aycs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdCYXNlIG5hbWUgb2YgdGFyYmFsbC4gRGVm
YXVsdHMgdG8gIndlYmtpdGd0ayIuJykKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcCcsICct
LXBvcnQnLCB0eXBlPXN0ciwgZGVmYXVsdD0nR1RLJywKLSAgICAgICAgICAgICAgICAgICAgICAg
IGhlbHA9J1BvcnQgdG8gYmUgYnVpbHQgaW4gdGFyYmFsbCBjaGVjay4gRGVmYXVsdHMgdG8gIkdU
SyIuJykKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdtYW5pZmVzdF9maWxlbmFtZScsIG1ldGF2
YXI9Im1hbmlmZXN0IiwgdHlwZT1zdHIsIGFjdGlvbj1GaWxlUGF0aEFjdGlvbiwgaGVscD0nVGhl
IHBhdGggdG8gdGhlIG1hbmlmZXN0IGZpbGUuJykKLQotICAgIGFyZ3VtZW50cyA9IHBhcnNlci5w
YXJzZV9hcmdzKCkKLQotICAgICMgUGF0aHMgaW4gdGhlIG1hbmlmZXN0IGFyZSByZWxhdGl2ZSB0
byB0aGUgc291cmNlIGRpcmVjdG9yeSwgYW5kIHRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdAotICAg
ICMgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB0aGUgc291cmNlIGRpcmVjdG9yeSwgc28g
Y2hhbmdlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Ci0gICAgIyB0byBiZSB0aGUgc291
cmNlIGRpcmVjdG9yeS4KLSAgICBvcy5jaGRpcihhcmd1bWVudHMuc291cmNlX2RpcikKLQotICAg
IGVuc3VyZV92ZXJzaW9uX2lmX3Bvc3NpYmxlKGFyZ3VtZW50cykKLSAgICB0YXJiYWxsX3Jvb3Qs
IG91dHB1dF9maWxlbmFtZSA9IGdldF90YXJiYWxsX3Jvb3RfYW5kX291dHB1dF9maWxlbmFtZV9m
cm9tX2FyZ3VtZW50cyhhcmd1bWVudHMpCi0KLSAgICBtYW5pZmVzdCA9IE1hbmlmZXN0KGFyZ3Vt
ZW50cy5tYW5pZmVzdF9maWxlbmFtZSwgYXJndW1lbnRzLnNvdXJjZV9kaXIsIGFyZ3VtZW50cy5i
dWlsZF9kaXIsIHRhcmJhbGxfcm9vdCkKLSAgICBtYW5pZmVzdC5jcmVhdGVfdGFyZmlsZShvdXRw
dXRfZmlsZW5hbWUpCi0KLSAgICBpZiBhcmd1bWVudHMuY2hlY2s6Ci0gICAgICAgIERpc3RjaGVj
ayhhcmd1bWVudHMuc291cmNlX2RpciwgYXJndW1lbnRzLmJ1aWxkX2RpcikuY2hlY2sob3V0cHV0
X2ZpbGVuYW1lLCBhcmd1bWVudHMucG9ydCkKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCAzZjZmNjk5YTY0NDVkOTQwMGJkNmJiNTNhNTkzYWFjMmY4YTBjMzcwLi41N2M0
NWNjZGEzNWU4ODEzYzc0MTRkMWMwZTIxZTY5YjU5MTNiMTJmIDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTctMTEtMDIgIE1pY2hhZWwg
Q2F0YW56YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtXUEVdW0dUS10g
QXZvaWQgZHVwbGljYXRpbmcgY29kZSBmb3IgZGlzdCBhbmQgZGlzdGNoZWNrIHRhcmdldHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTE1NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY29tbWl0
IGp1c3QgcmVkdWNlcyBzb21lIENNYWtlIGNvZGUgZHVwbGljYXRpb24gYmV0d2VlbiBHVEsgYW5k
IFdQRS4KKworICAgICAgICAqIFNvdXJjZS9QbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBT
b3VyY2UvUGxhdGZvcm1XUEUuY21ha2U6CisgICAgICAgICogU291cmNlL2NtYWtlL1dlYktpdERp
c3QuY21ha2U6IEFkZGVkLgorCiAyMDE3LTEwLTMxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBVcGRhdGUgT3B0aW9uc0dU
Sy5jbWFrZSBhbmQgTkVXUyBmb3IgMi4xOS4xIHJlbGVhc2UuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325711</attachid>
            <date>2017-11-02 05:28:46 -0700</date>
            <delta_ts>2017-11-03 11:42:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179154-20171102072845.patch</filename>
            <type>text/plain</type>
            <size>34236</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0Mjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm1H
VEsuY21ha2UgYi9Tb3VyY2UvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggMDQxYzY3YTBjMzRiNGRl
NmJkNzJiNmM1YmFhZThiMjdmZTMyZGI1Ny4uYzQyY2UzNDY5NTU0NzNjNjI5YmNmN2JiM2IzYTYx
YWM1ZmUzZTFiYyAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMSwzICsxLDUgQEAKK2luY2x1ZGUoV2ViS2l0RGlz
dCkKKwogYWRkX3N1YmRpcmVjdG9yeSgke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ndGsvcG8pCiAK
ICMgVGhpcyBhbGxvd3MgZXhwb3NpbmcgYSAnZ2lyJyB0YXJnZXQgd2hpY2ggYnVpbGRzIGFsbCBH
T2JqZWN0IGludHJvc3BlY3Rpb24gZmlsZXMuCkBAIC01Miw0NSArNTQsNiBAQCBhZGRfY3VzdG9t
X3RhcmdldChjaGVjawogKQogCiBpZiAoREVWRUxPUEVSX01PREUpCi0gICAgY29uZmlndXJlX2Zp
bGUoCi0gICAgICAgICR7VE9PTFNfRElSfS9ndGsvbWFuaWZlc3QudHh0LmluCi0gICAgICAgICR7
Q01BS0VfQklOQVJZX0RJUn0vbWFuaWZlc3QudHh0Ci0gICAgKQotCi0gICAgYWRkX2N1c3RvbV9j
b21tYW5kKAotICAgICAgICBPVVRQVVQgJHtDTUFLRV9CSU5BUllfRElSfS93ZWJraXRndGstJHtQ
Uk9KRUNUX1ZFUlNJT059LnRhcgotICAgICAgICBERVBFTkRTICR7VE9PTFNfRElSfS9ndGsvbWFr
ZS1kaXN0LnB5Ci0gICAgICAgIERFUEVORFMgJHtDTUFLRV9CSU5BUllfRElSfS9tYW5pZmVzdC50
eHQKLSAgICAgICAgREVQRU5EUyBXZWJLaXQKLSAgICAgICAgREVQRU5EUyBndGtkb2MKLSAgICAg
ICAgQ09NTUFORCAke1RPT0xTX0RJUn0vZ3RrL21ha2UtZGlzdC5weQotICAgICAgICAgICAgICAg
IC0tc291cmNlLWRpcj0ke0NNQUtFX1NPVVJDRV9ESVJ9Ci0gICAgICAgICAgICAgICAgLS1idWls
ZC1kaXI9JHtDTUFLRV9CSU5BUllfRElSfQotICAgICAgICAgICAgICAgIC0tdmVyc2lvbj0ke1BS
T0pFQ1RfVkVSU0lPTn0KLSAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L21hbmlm
ZXN0LnR4dAotICAgICkKLQotICAgIGFkZF9jdXN0b21fY29tbWFuZCgKLSAgICAgICAgT1VUUFVU
ICR7Q01BS0VfQklOQVJZX0RJUn0vd2Via2l0Z3RrLSR7UFJPSkVDVF9WRVJTSU9OfS50YXIueHoK
LSAgICAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L3dlYmtpdGd0ay0ke1BST0pFQ1Rf
VkVSU0lPTn0udGFyCi0gICAgICAgIENPTU1BTkQgeHogLWYgJHtDTUFLRV9CSU5BUllfRElSfS93
ZWJraXRndGstJHtQUk9KRUNUX1ZFUlNJT059LnRhcgotICAgICkKLQotICAgIGFkZF9jdXN0b21f
dGFyZ2V0KGRpc3QKLSAgICAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L3dlYmtpdGd0
ay0ke1BST0pFQ1RfVkVSU0lPTn0udGFyLnh6Ci0gICAgKQotCi0gICAgYWRkX2N1c3RvbV90YXJn
ZXQoZGlzdGNoZWNrCi0gICAgICAgIERFUEVORFMgJHtUT09MU19ESVJ9L2d0ay9tYWtlLWRpc3Qu
cHkKLSAgICAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L21hbmlmZXN0LnR4dAotICAg
ICAgICBERVBFTkRTIFdlYktpdAotICAgICAgICBERVBFTkRTIGd0a2RvYwotICAgICAgICBDT01N
QU5EICR7VE9PTFNfRElSfS9ndGsvbWFrZS1kaXN0LnB5Ci0gICAgICAgICAgICAgICAgLS1jaGVj
awotICAgICAgICAgICAgICAgIC0tc291cmNlLWRpcj0ke0NNQUtFX1NPVVJDRV9ESVJ9Ci0gICAg
ICAgICAgICAgICAgLS1idWlsZC1kaXI9JHtDTUFLRV9CSU5BUllfRElSfQotICAgICAgICAgICAg
ICAgIC0tdmVyc2lvbj0ke1BST0pFQ1RfVkVSU0lPTn0KLSAgICAgICAgICAgICAgICAke0NNQUtF
X0JJTkFSWV9ESVJ9L21hbmlmZXN0LnR4dAotICAgICAgICBDT01NQU5EIHh6IC1mICR7Q01BS0Vf
QklOQVJZX0RJUn0vd2Via2l0Z3RrLSR7UFJPSkVDVF9WRVJTSU9OfS50YXIKLSAgICApCisgICAg
YWRkX2N1c3RvbV90YXJnZXQoRG9jdW1lbnRhdGlvbiBERVBFTkRTIGd0a2RvYykKKyAgICBXRUJL
SVRfREVDTEFSRV9ESVNUX1RBUkdFVFMoR1RLIHdlYmtpdGd0ayAke1RPT0xTX0RJUn0vZ3RrL21h
bmlmZXN0LnR4dC5pbikKIGVuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm1XUEUu
Y21ha2UgYi9Tb3VyY2UvUGxhdGZvcm1XUEUuY21ha2UKaW5kZXggMjE1OTZiZmMwNDAzZGY5Zjhm
ODQ0MjI3ZGZiOTdhYzU0NDhkY2ViZS4uMzg2NDJlMDc4MmNjMzNiZjk0NzVlNmVlNDdlZTk3NzE4
NTM1NzU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtV1BFLmNtYWtlCisrKyBiL1NvdXJj
ZS9QbGF0Zm9ybVdQRS5jbWFrZQpAQCAtMSw0NCArMSw3IEBACi1pZiAoREVWRUxPUEVSX01PREUp
Ci0gICAgZmluZF9wYWNrYWdlKFh6IFJFUVVJUkVEKQotCi0gICAgY29uZmlndXJlX2ZpbGUoCi0g
ICAgICAgICR7VE9PTFNfRElSfS93cGUvbWFuaWZlc3QudHh0LmluCi0gICAgICAgICR7Q01BS0Vf
QklOQVJZX0RJUn0vbWFuaWZlc3QudHh0Ci0gICAgKQotCi0gICAgYWRkX2N1c3RvbV90YXJnZXQo
ZGlzdGNoZWNrCi0gICAgICAgIENPTU1FTlQgIkNoZWNraW5nIHJlbGVhc2UgdGFyYmFsbDogd3Bl
d2Via2l0LSR7UFJPSkVDVF9WRVJTSU9OfS50YXIiCi0gICAgICAgIERFUEVORFMgIiR7Q01BS0Vf
QklOQVJZX0RJUn0vbWFuaWZlc3QudHh0IgotICAgICAgICAgICAgICAgICIke1RPT0xTX0RJUn0v
Z3RrL21ha2UtZGlzdC5weSIKLSAgICAgICAgQ09NTUFORCAiJHtUT09MU19ESVJ9L2d0ay9tYWtl
LWRpc3QucHkiCi0gICAgICAgICAgICAgICAgIi0tY2hlY2siICItLXBvcnQ9V1BFIgotICAgICAg
ICAgICAgICAgICItLXRhcmJhbGwtbmFtZT13cGV3ZWJraXQiCi0gICAgICAgICAgICAgICAgIi0t
c291cmNlLWRpcj0ke0NNQUtFX1NPVVJDRV9ESVJ9IgotICAgICAgICAgICAgICAgICItLWJ1aWxk
LWRpcj0ke0NNQUtFX0JJTkFSWV9ESVJ9IgotICAgICAgICAgICAgICAgICItLXZlcnNpb249JHtQ
Uk9KRUNUX1ZFUlNJT059IgotICAgICAgICAgICAgICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9L21h
bmlmZXN0LnR4dCIKLSAgICAgICAgQ09NTUFORCAiJHtYWl9FWEVDVVRBQkxFfSIgIi1ldmZRIgot
ICAgICAgICAgICAgICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9L3dwZXdlYmtpdC0ke1BST0pFQ1Rf
VkVSU0lPTn0udGFyIgotICAgICAgICBVU0VTX1RFUk1JTkFMCi0gICAgKQoraW5jbHVkZShXZWJL
aXREaXN0KQogCi0gICAgYWRkX2N1c3RvbV9jb21tYW5kKAotICAgICAgICBDT01NRU5UICJDcmVh
dGluZyByZWxlYXNlIHRhcmJhbGw6IHdwZXdlYmtpdC0ke1BST0pFQ1RfVkVSU0lPTn0udGFyLnh6
IgotICAgICAgICBPVVRQVVQgIiR7Q01BS0VfQklOQVJZX0RJUn0vd3Bld2Via2l0LSR7UFJPSkVD
VF9WRVJTSU9OfS50YXIueHoiCi0gICAgICAgIE1BSU5fREVQRU5ERU5DWSAiJHtDTUFLRV9CSU5B
UllfRElSfS9tYW5pZmVzdC50eHQiCi0gICAgICAgIERFUEVORFMgIiR7VE9PTFNfRElSfS9ndGsv
bWFrZS1kaXN0LnB5IgotICAgICAgICBDT01NQU5EICIke1RPT0xTX0RJUn0vZ3RrL21ha2UtZGlz
dC5weSIKLSAgICAgICAgICAgICAgICAiLS10YXJiYWxsLW5hbWU9d3Bld2Via2l0IgotICAgICAg
ICAgICAgICAgICItLXNvdXJjZS1kaXI9JHtDTUFLRV9TT1VSQ0VfRElSfSIKLSAgICAgICAgICAg
ICAgICAiLS1idWlsZC1kaXI9JHtDTUFLRV9CSU5BUllfRElSfSIKLSAgICAgICAgICAgICAgICAi
LS12ZXJzaW9uPSR7UFJPSkVDVF9WRVJTSU9OfSIKLSAgICAgICAgICAgICAgICAiJHtDTUFLRV9C
SU5BUllfRElSfS9tYW5pZmVzdC50eHQiCi0gICAgICAgIENPTU1BTkQgIiR7WFpfRVhFQ1VUQUJM
RX0iICItZXZmUSIKLSAgICAgICAgICAgICAgICAiJHtDTUFLRV9CSU5BUllfRElSfS93cGV3ZWJr
aXQtJHtQUk9KRUNUX1ZFUlNJT059LnRhciIKLSAgICAgICAgVVNFU19URVJNSU5BTAotICAgICkK
LQotICAgIGFkZF9jdXN0b21fdGFyZ2V0KGRpc3QKLSAgICAgICAgREVQRU5EUyAiJHtDTUFLRV9C
SU5BUllfRElSfS93cGV3ZWJraXQtJHtQUk9KRUNUX1ZFUlNJT059LnRhci54eiIKLSAgICApCitp
ZiAoREVWRUxPUEVSX01PREUpCisgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgZGVwZW5kIG9uIGEg
Z3RrZG9jIHRhcmdldAorICAgIGFkZF9jdXN0b21fdGFyZ2V0KERvY3VtZW50YXRpb24pCisgICAg
V0VCS0lUX0RFQ0xBUkVfRElTVF9UQVJHRVRTKFdQRSB3cGV3ZWJraXQgJHtUT09MU19ESVJ9L3dw
ZS9tYW5pZmVzdC50eHQuaW4pCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL1dl
YktpdERpc3QuY21ha2UgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RGlzdC5jbWFrZQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lODIwZTNlMTI3OGI2OGFhZjJkNDExYTZmMWQ5ZWEwMWEyYTc0NDhjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL2NtYWtlL1dlYktpdERpc3QuY21ha2UKQEAgLTAsMCArMSw0OCBAQAorbWFj
cm8oV0VCS0lUX0RFQ0xBUkVfRElTVF9UQVJHRVRTIF9wb3J0IF90YXJiYWxsX3ByZWZpeCBfbWFu
aWZlc3QpCisgICAgZmluZF9wYWNrYWdlKFh6IFJFUVVJUkVEKQorCisgICAgY29uZmlndXJlX2Zp
bGUoCisgICAgICAgICR7X21hbmlmZXN0fQorICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L21h
bmlmZXN0LnR4dAorICAgICkKKworICAgIGFkZF9jdXN0b21fdGFyZ2V0KGRpc3RjaGVjaworICAg
ICAgICBDT01NRU5UICJDaGVja2luZyByZWxlYXNlIHRhcmJhbGw6ICR7X3RhcmJhbGxfcHJlZml4
fS0ke1BST0pFQ1RfVkVSU0lPTn0udGFyIgorICAgICAgICBERVBFTkRTICR7Q01BS0VfQklOQVJZ
X0RJUn0vbWFuaWZlc3QudHh0CisgICAgICAgIERFUEVORFMgV2ViS2l0CisgICAgICAgIERFUEVO
RFMgRG9jdW1lbnRhdGlvbgorICAgICAgICBDT01NQU5EICR7VE9PTFNfRElSfS9TY3JpcHRzL21h
a2UtZGlzdAorICAgICAgICAgICAgICAgIC0tY2hlY2sgLS1wb3J0PSR7X3BvcnR9CisgICAgICAg
ICAgICAgICAgLS10YXJiYWxsLW5hbWU9JHtfdGFyYmFsbF9wcmVmaXh9CisgICAgICAgICAgICAg
ICAgLS1zb3VyY2UtZGlyPSR7Q01BS0VfU09VUkNFX0RJUn0KKyAgICAgICAgICAgICAgICAtLWJ1
aWxkLWRpcj0ke0NNQUtFX0JJTkFSWV9ESVJ9CisgICAgICAgICAgICAgICAgLS12ZXJzaW9uPSR7
UFJPSkVDVF9WRVJTSU9OfQorICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vbWFu
aWZlc3QudHh0CisgICAgICAgIENPTU1BTkQgJHtYWl9FWEVDVVRBQkxFfSAtZXZmUQorICAgICAg
ICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vJHtfdGFyYmFsbF9wcmVmaXh9LSR7UFJPSkVD
VF9WRVJTSU9OfS50YXIKKyAgICAgICAgVVNFU19URVJNSU5BTAorICAgICAgICBWRVJCQVRJTQor
ICAgICkKKworICAgIGFkZF9jdXN0b21fY29tbWFuZCgKKyAgICAgICAgQ09NTUVOVCAiQ3JlYXRp
bmcgcmVsZWFzZSB0YXJiYWxsOiAke190YXJiYWxsX3ByZWZpeH0tJHtQUk9KRUNUX1ZFUlNJT059
LnRhci54eiIKKyAgICAgICAgT1VUUFVUICR7Q01BS0VfQklOQVJZX0RJUn0vJHtfdGFyYmFsbF9w
cmVmaXh9LSR7UFJPSkVDVF9WRVJTSU9OfS50YXIueHoKKyAgICAgICAgTUFJTl9ERVBFTkRFTkNZ
ICR7Q01BS0VfQklOQVJZX0RJUn0vbWFuaWZlc3QudHh0CisgICAgICAgIENPTU1BTkQgJHtUT09M
U19ESVJ9L1NjcmlwdHMvbWFrZS1kaXN0CisgICAgICAgICAgICAgICAgLS10YXJiYWxsLW5hbWU9
JHtfdGFyYmFsbF9wcmVmaXh9CisgICAgICAgICAgICAgICAgLS1zb3VyY2UtZGlyPSR7Q01BS0Vf
U09VUkNFX0RJUn0KKyAgICAgICAgICAgICAgICAtLWJ1aWxkLWRpcj0ke0NNQUtFX0JJTkFSWV9E
SVJ9CisgICAgICAgICAgICAgICAgLS12ZXJzaW9uPSR7UFJPSkVDVF9WRVJTSU9OfQorICAgICAg
ICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vbWFuaWZlc3QudHh0CisgICAgICAgIENPTU1B
TkQgJHtYWl9FWEVDVVRBQkxFfSAtZXZmUQorICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZ
X0RJUn0vJHtfdGFyYmFsbF9wcmVmaXh9LSR7UFJPSkVDVF9WRVJTSU9OfS50YXIKKyAgICAgICAg
VVNFU19URVJNSU5BTAorICAgICAgICBWRVJCQVRJTQorICAgICkKKworICAgIGFkZF9jdXN0b21f
dGFyZ2V0KGRpc3QKKyAgICAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9LyR7X3RhcmJh
bGxfcHJlZml4fS0ke1BST0pFQ1RfVkVSU0lPTn0udGFyLnh6CisgICAgICAgIERFUEVORFMgV2Vi
S2l0CisgICAgICAgIERFUEVORFMgRG9jdW1lbnRhdGlvbgorICAgICkKK2VuZG1hY3JvKCkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4MmU2MTE0
YzFhYmNjM2NmOWU1Y2QwNTlhNGY0YjJlZjE0NjMwYzhkLi5hMzE2OTg1Zjg3YTJlMWNhNGJkMWYx
MzRkODczY2FhNzY1ODE4ZjA4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTctMTEtMDIgIE1pY2hhZWwgQ2F0YW56
YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtXUEVdW0dUS10gQXZvaWQg
ZHVwbGljYXRpbmcgY29kZSBmb3IgZGlzdCBhbmQgZGlzdGNoZWNrIHRhcmdldHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTE1NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdGhlIHNjcmlwdCBv
dXQgb2YgVG9vbHMvZ3RrIGJlY2F1c2UgaXQgaXMgYWxyZWFkeSB1c2VkIGJ5IFdQRS4gQWxzbywg
ZHJvcCB0aGUgLnB5CisgICAgICAgIHByZWZpeCBiZWNhdXNlIGl0IGlzIGV4ZWN1dGFibGUuCisK
KyAgICAgICAgKiBTY3JpcHRzL21ha2UtZGlzdDogUmVuYW1lZCBmcm9tIFRvb2xzL2d0ay9tYWtl
LWRpc3QucHkuCisKIDIwMTctMTAtMzEgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNv
bnkuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCBJbnNwZWN0b3IgbWVudSBpdGVt
cyB0byBNYWMgTWluaUJyb3dzZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvbWFrZS1kaXN0
IGIvVG9vbHMvU2NyaXB0cy9tYWtlLWRpc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmZkN2Q1YmM0MWEzMmYzZGM1
MmEzNGIzOGRlMjBjZDQ0YjE5NzRhZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMv
bWFrZS1kaXN0CkBAIC0wLDAgKzEsMzMzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29w
eXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisjCisjIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorIworIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHBy
aW50X2Z1bmN0aW9uCitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNsb3NpbmcKKworaW1wb3J0IGFy
Z3BhcnNlCitpbXBvcnQgZXJybm8KK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCBvcwor
aW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRhcmZp
bGUKKworCitkZWYgZW51bSgqKmVudW1zKToKKyAgICByZXR1cm4gdHlwZSgnRW51bScsICgpLCBl
bnVtcykKKworCitjbGFzcyBSdWxlKG9iamVjdCk6CisgICAgUmVzdWx0ID0gZW51bShJTkNMVURF
PTEsIEVYQ0xVREU9MiwgTk9fTUFUQ0g9MykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBl
LCBwYXR0ZXJuKToKKyAgICAgICAgc2VsZi50eXBlID0gdHlwZQorICAgICAgICBzZWxmLm9yaWdp
bmFsX3BhdHRlcm4gPSBwYXR0ZXJuCisgICAgICAgIHNlbGYucGF0dGVybiA9IHJlLmNvbXBpbGUo
cGF0dGVybikKKworICAgIGRlZiB0ZXN0KHNlbGYsIGZpbGUpOgorICAgICAgICBpZiBub3Qoc2Vs
Zi5wYXR0ZXJuLnNlYXJjaChmaWxlKSk6CisgICAgICAgICAgICByZXR1cm4gUnVsZS5SZXN1bHQu
Tk9fTUFUQ0gKKyAgICAgICAgcmV0dXJuIHNlbGYudHlwZQorCisKK2NsYXNzIFJ1bGVzZXQob2Jq
ZWN0KToKKyAgICBfZ2xvYmFsX3J1bGVzID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYp
OgorICAgICAgICAjIEJ5IGRlZmF1bHQsIGFjY2VwdCBhbGwgZmlsZXMuCisgICAgICAgIHNlbGYu
cnVsZXMgPSBbUnVsZShSdWxlLlJlc3VsdC5JTkNMVURFLCAnLionKV0KKworICAgIEBjbGFzc21l
dGhvZAorICAgIGRlZiBnbG9iYWxfcnVsZXMoY2xzKToKKyAgICAgICAgaWYgbm90IGNscy5fZ2xv
YmFsX3J1bGVzOgorICAgICAgICAgICAgY2xzLl9nbG9iYWxfcnVsZXMgPSBSdWxlc2V0KCkKKyAg
ICAgICAgcmV0dXJuIGNscy5fZ2xvYmFsX3J1bGVzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBk
ZWYgYWRkX2dsb2JhbF9ydWxlKGNscywgcnVsZSk6CisgICAgICAgIGNscy5nbG9iYWxfcnVsZXMo
KS5hZGRfcnVsZShydWxlKQorCisgICAgZGVmIGFkZF9ydWxlKHNlbGYsIHJ1bGUpOgorICAgICAg
ICBzZWxmLnJ1bGVzLmFwcGVuZChydWxlKQorCisgICAgZGVmIHBhc3NlcyhzZWxmLCBmaWxlKToK
KyAgICAgICAgYWxsb3dlZCA9IEZhbHNlCisgICAgICAgIGZvciBydWxlIGluIHNlbGYucnVsZXM6
CisgICAgICAgICAgICByZXN1bHQgPSBydWxlLnRlc3QoZmlsZSkKKyAgICAgICAgICAgIGlmIHJl
c3VsdCA9PSBSdWxlLlJlc3VsdC5OT19NQVRDSDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQor
ICAgICAgICAgICAgYWxsb3dlZCA9IFJ1bGUuUmVzdWx0LklOQ0xVREUgPT0gcmVzdWx0CisgICAg
ICAgIHJldHVybiBhbGxvd2VkCisKKworY2xhc3MgRmlsZShvYmplY3QpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBzb3VyY2Vfcm9vdCwgdGFyYmFsbF9yb290KToKKyAgICAgICAgc2VsZi5zb3Vy
Y2Vfcm9vdCA9IHNvdXJjZV9yb290CisgICAgICAgIHNlbGYudGFyYmFsbF9yb290ID0gdGFyYmFs
bF9yb290CisKKyAgICBkZWYgc2hvdWxkX3NraXBfZmlsZShzZWxmLCBwYXRoKToKKyAgICAgICAg
IyBEbyBub3Qgc2tpcCBmaWxlcyBleHBsaWNpdGx5IGFkZGVkIGZyb20gdGhlIG1hbmlmZXN0Lgor
ICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBnZXRfZmlsZXMoc2VsZik6CisgICAgICAg
IHlpZWxkIChzZWxmLnNvdXJjZV9yb290LCBzZWxmLnRhcmJhbGxfcm9vdCkKKworCitjbGFzcyBE
aXJlY3Rvcnkob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlX3Jvb3QsIHRh
cmJhbGxfcm9vdCk6CisgICAgICAgIHNlbGYuc291cmNlX3Jvb3QgPSBzb3VyY2Vfcm9vdAorICAg
ICAgICBzZWxmLnRhcmJhbGxfcm9vdCA9IHRhcmJhbGxfcm9vdAorICAgICAgICBzZWxmLnJ1bGVz
ID0gUnVsZXNldCgpCisKKyAgICAgICAgc2VsZi5maWxlc19pbl92ZXJzaW9uX2NvbnRyb2wgPSBz
ZWxmLmxpc3RfZmlsZXNfaW5fdmVyc2lvbl9jb250cm9sKCkKKworICAgIGRlZiBhZGRfcnVsZShz
ZWxmLCBydWxlKToKKyAgICAgICAgc2VsZi5ydWxlcy5hZGRfcnVsZShydWxlKQorCisgICAgZGVm
IGdldF90YXJiYWxsX3BhdGgoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICByZXR1cm4gZmlsZW5h
bWUucmVwbGFjZShzZWxmLnNvdXJjZV9yb290LCBzZWxmLnRhcmJhbGxfcm9vdCwgMSkKKworICAg
IGRlZiBsaXN0X2ZpbGVzX2luX3ZlcnNpb25fY29udHJvbChzZWxmKToKKyAgICAgICAgIyBGSVhN
RTogT25seSBnaXQgaXMgc3VwcG9ydGVkIGZvciBub3cuCisgICAgICAgIHAgPSBzdWJwcm9jZXNz
LlBvcGVuKFsnZ2l0JywgJ2xzLXRyZWUnLCAnLXInLCAnLS1uYW1lLW9ubHknLCAnSEVBRCcsIHNl
bGYuc291cmNlX3Jvb3RdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBvdXQgPSBw
LmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgaWYgbm90IG91dDoKKyAgICAgICAgICAgIHJldHVy
biBbXQorICAgICAgICByZXR1cm4gb3V0LnJzdHJpcCgnXG4nKS5zcGxpdCgnXG4nKQorCisgICAg
ZGVmIHNob3VsZF9za2lwX2ZpbGUoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBwYXRoIG5v
dCBpbiBzZWxmLmZpbGVzX2luX3ZlcnNpb25fY29udHJvbAorCisgICAgZGVmIGdldF9maWxlcyhz
ZWxmKToKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc2VsZi5zb3Vy
Y2Vfcm9vdCk6CisKKyAgICAgICAgICAgIGRlZiBwYXNzZXNfYWxsX3J1bGVzKGVudHJ5KToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gUnVsZXNldC5nbG9iYWxfcnVsZXMoKS5wYXNzZXMoZW50cnkp
IGFuZCBzZWxmLnJ1bGVzLnBhc3NlcyhlbnRyeSkKKworICAgICAgICAgICAgdG9fa2VlcCA9IGZp
bHRlcihwYXNzZXNfYWxsX3J1bGVzLCBkaXJzKQorICAgICAgICAgICAgZGVsIGRpcnNbOl0KKyAg
ICAgICAgICAgIGRpcnMuZXh0ZW5kKHRvX2tlZXApCisKKyAgICAgICAgICAgIGZvciBmaWxlIGlu
IGZpbGVzOgorICAgICAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZSkK
KyAgICAgICAgICAgICAgICBpZiBub3QgcGFzc2VzX2FsbF9ydWxlcyhmaWxlKToKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB5aWVsZCAoZmlsZSwgc2VsZi5n
ZXRfdGFyYmFsbF9wYXRoKGZpbGUpKQorCisKK2NsYXNzIE1hbmlmZXN0KG9iamVjdCk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG1hbmlmZXN0X2ZpbGVuYW1lLCBzb3VyY2Vfcm9vdCwgYnVpbGRf
cm9vdCwgdGFyYmFsbF9yb290PScvJyk6CisgICAgICAgIHNlbGYuY3VycmVudF9kaXJlY3Rvcnkg
PSBOb25lCisgICAgICAgIHNlbGYuZGlyZWN0b3JpZXMgPSBbXQorICAgICAgICBzZWxmLnRhcmJh
bGxfcm9vdCA9IHRhcmJhbGxfcm9vdAorICAgICAgICBzZWxmLnNvdXJjZV9yb290ID0gc291cmNl
X3Jvb3QKKyAgICAgICAgc2VsZi5idWlsZF9yb290ID0gYnVpbGRfcm9vdAorCisgICAgICAgICMg
Tm9ybWFsaXplIHRoZSB0YXJiYWxsIHJvb3Qgc28gdGhhdCBpdCBzdGFydHMgYW5kIGVuZHMgd2l0
aCBhIHNsYXNoLgorICAgICAgICBpZiBub3Qgc2VsZi50YXJiYWxsX3Jvb3QuZW5kc3dpdGgoJy8n
KToKKyAgICAgICAgICAgIHNlbGYudGFyYmFsbF9yb290ID0gc2VsZi50YXJiYWxsX3Jvb3QgKyAn
LycKKyAgICAgICAgaWYgbm90IHNlbGYudGFyYmFsbF9yb290LnN0YXJ0c3dpdGgoJy8nKToKKyAg
ICAgICAgICAgIHNlbGYudGFyYmFsbF9yb290ID0gJy8nICsgc2VsZi50YXJiYWxsX3Jvb3QKKwor
ICAgICAgICB3aXRoIG9wZW4obWFuaWZlc3RfZmlsZW5hbWUsICdyJykgYXMgZmlsZToKKyAgICAg
ICAgICAgIGZvciBsaW5lIGluIGZpbGUucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgc2Vs
Zi5wcm9jZXNzX2xpbmUobGluZSkKKworICAgIGRlZiBhZGRfcnVsZShzZWxmLCBydWxlKToKKyAg
ICAgICAgaWYgc2VsZi5jdXJyZW50X2RpcmVjdG9yeSBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
IHNlbGYuY3VycmVudF9kaXJlY3RvcnkuYWRkX3J1bGUocnVsZSkKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIFJ1bGVzZXQuYWRkX2dsb2JhbF9ydWxlKHJ1bGUpCisKKyAgICBkZWYgYWRkX2Rp
cmVjdG9yeShzZWxmLCBkaXJlY3RvcnkpOgorICAgICAgICBzZWxmLmN1cnJlbnRfZGlyZWN0b3J5
ID0gZGlyZWN0b3J5CisgICAgICAgIHNlbGYuZGlyZWN0b3JpZXMuYXBwZW5kKGRpcmVjdG9yeSkK
KworICAgIGRlZiBnZXRfZnVsbF9zb3VyY2VfcGF0aChzZWxmLCBzb3VyY2VfcGF0aCk6CisgICAg
ICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzb3VyY2VfcGF0aCk6CisgICAgICAgICAgICBzb3Vy
Y2VfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnNvdXJjZV9yb290LCBzb3VyY2VfcGF0aCkKKyAg
ICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNvdXJjZV9wYXRoKToKKyAgICAgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbignQ291bGQgbm90IGZpbmQgZGlyZWN0b3J5ICVzJyAlIHNvdXJjZV9wYXRo
KQorICAgICAgICByZXR1cm4gc291cmNlX3BhdGgKKworICAgIGRlZiBnZXRfZnVsbF90YXJiYWxs
X3BhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLnRhcmJhbGxfcm9vdCArIHBh
dGgKKworICAgIGRlZiBnZXRfc291cmNlX2FuZF90YXJiYWxsX3BhdGhzX2Zyb21fcGFydHMoc2Vs
ZiwgcGFydHMpOgorICAgICAgICBmdWxsX3NvdXJjZV9wYXRoID0gc2VsZi5nZXRfZnVsbF9zb3Vy
Y2VfcGF0aChwYXJ0c1sxXSkKKyAgICAgICAgaWYgbGVuKHBhcnRzKSA+IDI6CisgICAgICAgICAg
ICBmdWxsX3RhcmJhbGxfcGF0aCA9IHNlbGYuZ2V0X2Z1bGxfdGFyYmFsbF9wYXRoKHBhcnRzWzJd
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnVsbF90YXJiYWxsX3BhdGggPSBzZWxmLmdl
dF9mdWxsX3RhcmJhbGxfcGF0aChwYXJ0c1sxXSkKKyAgICAgICAgcmV0dXJuIChmdWxsX3NvdXJj
ZV9wYXRoLCBmdWxsX3RhcmJhbGxfcGF0aCkKKworICAgIGRlZiBwcm9jZXNzX2xpbmUoc2VsZiwg
bGluZSk6CisgICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgpCisgICAgICAgIGlmIG5vdCBwYXJ0
czoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBwYXJ0c1swXS5zdGFydHN3aXRoKCIj
Iik6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBwYXJ0c1swXSA9PSAiZGlyZWN0
b3J5IiBhbmQgbGVuKHBhcnRzKSA+IDE6CisgICAgICAgICAgICBzZWxmLmFkZF9kaXJlY3Rvcnko
RGlyZWN0b3J5KCpzZWxmLmdldF9zb3VyY2VfYW5kX3RhcmJhbGxfcGF0aHNfZnJvbV9wYXJ0cyhw
YXJ0cykpKQorICAgICAgICBlbGlmIHBhcnRzWzBdID09ICJmaWxlIiBhbmQgbGVuKHBhcnRzKSA+
IDE6CisgICAgICAgICAgICBzZWxmLmFkZF9kaXJlY3RvcnkoRmlsZSgqc2VsZi5nZXRfc291cmNl
X2FuZF90YXJiYWxsX3BhdGhzX2Zyb21fcGFydHMocGFydHMpKSkKKyAgICAgICAgZWxpZiBwYXJ0
c1swXSA9PSAiZXhjbHVkZSIgYW5kIGxlbihwYXJ0cykgPiAxOgorICAgICAgICAgICAgc2VsZi5h
ZGRfcnVsZShSdWxlKFJ1bGUuUmVzdWx0LkVYQ0xVREUsIHBhcnRzWzFdKSkKKyAgICAgICAgZWxp
ZiBwYXJ0c1swXSA9PSAiaW5jbHVkZSIgYW5kIGxlbihwYXJ0cykgPiAxOgorICAgICAgICAgICAg
c2VsZi5hZGRfcnVsZShSdWxlKFJ1bGUuUmVzdWx0LklOQ0xVREUsIHBhcnRzWzFdKSkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignTGluZSBkb2VzIG5vdCBiZWdp
biB3aXRoIGEgY29ycmVjdCBydWxlOlxuXHQnICsgbGluZSkKKworICAgIGRlZiBzaG91bGRfc2tp
cF9maWxlKHNlbGYsIGRpcmVjdG9yeSwgZmlsZW5hbWUpOgorICAgICAgICAjIE9ubHkgYWxsb3cg
ZmlsZXMgdGhhdCBhcmUgbm90IGluIHZlcnNpb24gY29udHJvbCB3aGVuIHRoZXkgYXJlIGV4cGxp
Y2l0bHkgaW5jbHVkZWQgaW4gdGhlIG1hbmlmZXN0IGZyb20gdGhlIGJ1aWxkIGRpci4KKyAgICAg
ICAgaWYgZmlsZW5hbWUuc3RhcnRzd2l0aChzZWxmLmJ1aWxkX3Jvb3QpOgorICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisKKyAgICAgICAgcmV0dXJuIGRpcmVjdG9yeS5zaG91bGRfc2tpcF9maWxl
KGZpbGVuYW1lKQorCisgICAgZGVmIGdldF9maWxlcyhzZWxmKToKKyAgICAgICAgZm9yIGRpcmVj
dG9yeSBpbiBzZWxmLmRpcmVjdG9yaWVzOgorICAgICAgICAgICAgZm9yIGZpbGVfdHVwbGUgaW4g
ZGlyZWN0b3J5LmdldF9maWxlcygpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuc2hvdWxkX3Nr
aXBfZmlsZShkaXJlY3RvcnksIGZpbGVfdHVwbGVbMF0pOgorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZQorICAgICAgICAgICAgICAgIHlpZWxkIGZpbGVfdHVwbGUKKworICAgIGRlZiBjcmVh
dGVfdGFyZmlsZShzZWxmLCBvdXRwdXQpOgorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZm9y
IGZpbGVfdHVwbGUgaW4gc2VsZi5nZXRfZmlsZXMoKToKKyAgICAgICAgICAgIGNvdW50ID0gY291
bnQgKyAxCisKKyAgICAgICAgd2l0aCBjbG9zaW5nKHRhcmZpbGUub3BlbihvdXRwdXQsICd3Jykp
IGFzIHRhcmJhbGw6CisgICAgICAgICAgICBmb3IgaSwgKGZpbGVfcGF0aCwgdGFyYmFsbF9wYXRo
KSBpbiBlbnVtZXJhdGUoc2VsZi5nZXRfZmlsZXMoKSwgc3RhcnQ9MSk6CisgICAgICAgICAgICAg
ICAgcHJpbnQoJ1RhcnJpbmcgZmlsZSB7MH0gb2YgezF9Jy5mb3JtYXQoaSwgY291bnQpLmxqdXN0
KDQwKSwgZW5kPSdccicpCisgICAgICAgICAgICAgICAgdGFyYmFsbC5hZGQoZmlsZV9wYXRoLCB0
YXJiYWxsX3BhdGgpCisgICAgICAgIHByaW50KCJXcm90ZSB7MH0iLmZvcm1hdChvdXRwdXQpLmxq
dXN0KDQwKSkKKworCitjbGFzcyBEaXN0Y2hlY2sob2JqZWN0KToKKyAgICBCVUlMRF9ESVJFQ1RP
UllfTkFNRSA9ICJfYnVpbGQiCisgICAgSU5TVEFMTF9ESVJFQ1RPUllfTkFNRSA9ICJfaW5zdGFs
bCIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2Vfcm9vdCwgYnVpbGRfcm9vdCk6Cisg
ICAgICAgIHNlbGYuc291cmNlX3Jvb3QgPSBzb3VyY2Vfcm9vdAorICAgICAgICBzZWxmLmJ1aWxk
X3Jvb3QgPSBidWlsZF9yb290CisKKyAgICBkZWYgZXh0cmFjdF90YXJiYWxsKHNlbGYsIHRhcmJh
bGxfcGF0aCk6CisgICAgICAgIHdpdGggY2xvc2luZyh0YXJmaWxlLm9wZW4odGFyYmFsbF9wYXRo
LCAncicpKSBhcyB0YXJiYWxsOgorICAgICAgICAgICAgdGFyYmFsbC5leHRyYWN0YWxsKHNlbGYu
YnVpbGRfcm9vdCkKKworICAgIGRlZiBjb25maWd1cmUoc2VsZiwgZGlzdF9kaXIsIGJ1aWxkX2Rp
ciwgaW5zdGFsbF9kaXIsIHBvcnQpOgorICAgICAgICBkZWYgY3JlYXRlX2RpcihkaXJlY3Rvcnks
IGRpcmVjdG9yeV90eXBlKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5t
a2RpcihkaXJlY3RvcnkpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAg
ICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVCBvciBub3Qgb3MucGF0aC5pc2Rpcihk
aXJlY3RvcnkpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNvdWxkIG5v
dCBjcmVhdGUgJXMgZGlyIGF0ICVzOiAlcyIgJSAoZGlyZWN0b3J5X3R5cGUsIGRpcmVjdG9yeSwg
c3RyKGUpKSkKKworICAgICAgICBjcmVhdGVfZGlyKGJ1aWxkX2RpciwgImJ1aWxkIikKKyAgICAg
ICAgY3JlYXRlX2RpcihpbnN0YWxsX2RpciwgImluc3RhbGwiKQorCisgICAgICAgIGNvbW1hbmQg
PSBbJ2NtYWtlJywgJy1EUE9SVD0lcycgJSBwb3J0LCAnLURDTUFLRV9JTlNUQUxMX1BSRUZJWD0l
cycgJSBpbnN0YWxsX2RpciwgJy1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlJywgZGlzdF9kaXJd
CisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjb21tYW5kLCBjd2Q9YnVpbGRfZGlyKQor
CisgICAgZGVmIGJ1aWxkKHNlbGYsIGJ1aWxkX2Rpcik6CisgICAgICAgIGNvbW1hbmQgPSBbJ21h
a2UnXQorICAgICAgICBtYWtlX2FyZ3MgPSBvcy5nZXRlbnYoJ01BS0VfQVJHUycpCisgICAgICAg
IGlmIG1ha2VfYXJnczoKKyAgICAgICAgICAgIGNvbW1hbmQuZXh0ZW5kKG1ha2VfYXJncy5zcGxp
dCgnICcpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29tbWFuZC5hcHBlbmQoJy1qJWQn
ICUgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNr
X2NhbGwoY29tbWFuZCwgY3dkPWJ1aWxkX2RpcikKKworICAgIGRlZiBpbnN0YWxsKHNlbGYsIGJ1
aWxkX2Rpcik6CisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJ21ha2UnLCAnaW5zdGFs
bCddLCBjd2Q9YnVpbGRfZGlyKQorCisgICAgZGVmIGNsZWFuKHNlbGYsIGRpc3RfZGlyKToKKyAg
ICAgICAgc2h1dGlsLnJtdHJlZShkaXN0X2RpcikKKworICAgIGRlZiBjaGVjayhzZWxmLCB0YXJi
YWxsLCBwb3J0KToKKyAgICAgICAgdGFyYmFsbF9uYW1lLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0
KG9zLnBhdGguYmFzZW5hbWUodGFyYmFsbCkpCisgICAgICAgIGRpc3RfZGlyID0gb3MucGF0aC5q
b2luKHNlbGYuYnVpbGRfcm9vdCwgdGFyYmFsbF9uYW1lKQorICAgICAgICBidWlsZF9kaXIgPSBv
cy5wYXRoLmpvaW4oZGlzdF9kaXIsIHNlbGYuQlVJTERfRElSRUNUT1JZX05BTUUpCisgICAgICAg
IGluc3RhbGxfZGlyID0gb3MucGF0aC5qb2luKGRpc3RfZGlyLCBzZWxmLklOU1RBTExfRElSRUNU
T1JZX05BTUUpCisKKyAgICAgICAgc2VsZi5leHRyYWN0X3RhcmJhbGwodGFyYmFsbCkKKyAgICAg
ICAgc2VsZi5jb25maWd1cmUoZGlzdF9kaXIsIGJ1aWxkX2RpciwgaW5zdGFsbF9kaXIsIHBvcnQp
CisgICAgICAgIHNlbGYuYnVpbGQoYnVpbGRfZGlyKQorICAgICAgICBzZWxmLmluc3RhbGwoYnVp
bGRfZGlyKQorICAgICAgICBzZWxmLmNsZWFuKGRpc3RfZGlyKQorCitpZiBfX25hbWVfXyA9PSAi
X19tYWluX18iOgorICAgIGNsYXNzIEZpbGVQYXRoQWN0aW9uKGFyZ3BhcnNlLkFjdGlvbik6Cisg
ICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRp
b25fc3RyaW5nPU5vbmUpOgorICAgICAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIHNlbGYuZGVz
dCwgb3MucGF0aC5hYnNwYXRoKHZhbHVlcykpCisKKyAgICBkZWYgZW5zdXJlX3ZlcnNpb25faWZf
cG9zc2libGUoYXJndW1lbnRzKToKKyAgICAgICAgaWYgYXJndW1lbnRzLnZlcnNpb24gaXMgbm90
IE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwa2djb25maWdfZmlsZSA9IG9z
LnBhdGguam9pbihhcmd1bWVudHMuYnVpbGRfZGlyLCAiU291cmNlL1dlYktpdC93ZWJraXQyZ3Rr
LTQuMC5wYyIpCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBrZ2NvbmZpZ19maWxlKToKKyAg
ICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsncGtnLWNvbmZpZycsICctLW1vZHZlcnNp
b24nLCBwa2djb25maWdfZmlsZV0sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAg
ICB2ZXJzaW9uID0gcC5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAgICBpZiB2ZXJzaW9uOgor
ICAgICAgICAgICAgICAgIGFyZ3VtZW50cy52ZXJzaW9uID0gdmVyc2lvbi5yc3RyaXAoJ1xuJykK
KworCisgICAgZGVmIGdldF90YXJiYWxsX3Jvb3RfYW5kX291dHB1dF9maWxlbmFtZV9mcm9tX2Fy
Z3VtZW50cyhhcmd1bWVudHMpOgorICAgICAgICB0YXJiYWxsX3Jvb3QgPSBhcmd1bWVudHMudGFy
YmFsbF9uYW1lCisgICAgICAgIGlmIGFyZ3VtZW50cy52ZXJzaW9uIGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgdGFyYmFsbF9yb290ICs9ICctJyArIGFyZ3VtZW50cy52ZXJzaW9uCisKKyAgICAg
ICAgb3V0cHV0X2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKGFyZ3VtZW50cy5idWlsZF9kaXIsIHRh
cmJhbGxfcm9vdCArICIudGFyIikKKyAgICAgICAgcmV0dXJuIHRhcmJhbGxfcm9vdCwgb3V0cHV0
X2ZpbGVuYW1lCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlw
dGlvbj0nQnVpbGQgYSBkaXN0cmlidXRpb24gYnVuZGxlLicpCisgICAgcGFyc2VyLmFkZF9hcmd1
bWVudCgnLWMnLCAnLS1jaGVjaycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAg
ICAgICAgICAgICBoZWxwPSdDaGVjayB0aGUgdGFyYmFsbCcpCisgICAgcGFyc2VyLmFkZF9hcmd1
bWVudCgnLXMnLCAnLS1zb3VyY2UtZGlyJywgdHlwZT1zdHIsIGFjdGlvbj1GaWxlUGF0aEFjdGlv
biwgZGVmYXVsdD1vcy5nZXRjd2QoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1Ro
ZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uLiAnICsgXAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RpcmVjdG9yeSBmb3IgcmVsYXRpdmUgcGF0
aHMuIERlZmF1bHRzIHRvIGN1cnJlbnQgZGlyZWN0b3J5LicpCisgICAgcGFyc2VyLmFkZF9hcmd1
bWVudCgnLS12ZXJzaW9uJywgdHlwZT1zdHIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9J1RoZSB2ZXJzaW9uIG9mIHRoZSB0YXJiYWxsIHRvIGdlbmVyYXRlJykK
KyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYicsICctLWJ1aWxkLWRpcicsIHR5cGU9c3RyLCBh
Y3Rpb249RmlsZVBhdGhBY3Rpb24sIGRlZmF1bHQ9b3MuZ2V0Y3dkKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBoZWxwPSdUaGUgdG9wLWxldmVsIHBhdGggb2YgZGlyZWN0b3J5IG9mIHRoZSBi
dWlsZCByb290LiAnICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0J5IGRlZmF1
bHQgaXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgn
LXQnLCAnLS10YXJiYWxsLW5hbWUnLCB0eXBlPXN0ciwgZGVmYXVsdD0nd2Via2l0Z3RrJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0Jhc2UgbmFtZSBvZiB0YXJiYWxsLiBEZWZhdWx0
cyB0byAid2Via2l0Z3RrIi4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1wJywgJy0tcG9y
dCcsIHR5cGU9c3RyLCBkZWZhdWx0PSdHVEsnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0nUG9ydCB0byBiZSBidWlsdCBpbiB0YXJiYWxsIGNoZWNrLiBEZWZhdWx0cyB0byAiR1RLIi4n
KQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ21hbmlmZXN0X2ZpbGVuYW1lJywgbWV0YXZhcj0i
bWFuaWZlc3QiLCB0eXBlPXN0ciwgYWN0aW9uPUZpbGVQYXRoQWN0aW9uLCBoZWxwPSdUaGUgcGF0
aCB0byB0aGUgbWFuaWZlc3QgZmlsZS4nKQorCisgICAgYXJndW1lbnRzID0gcGFyc2VyLnBhcnNl
X2FyZ3MoKQorCisgICAgIyBQYXRocyBpbiB0aGUgbWFuaWZlc3QgYXJlIHJlbGF0aXZlIHRvIHRo
ZSBzb3VyY2UgZGlyZWN0b3J5LCBhbmQgdGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0CisgICAgIyBj
dXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHRoZSBzb3VyY2UgZGlyZWN0b3J5LCBzbyBjaGFu
Z2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKyAgICAjIHRvIGJlIHRoZSBzb3VyY2Ug
ZGlyZWN0b3J5LgorICAgIG9zLmNoZGlyKGFyZ3VtZW50cy5zb3VyY2VfZGlyKQorCisgICAgZW5z
dXJlX3ZlcnNpb25faWZfcG9zc2libGUoYXJndW1lbnRzKQorICAgIHRhcmJhbGxfcm9vdCwgb3V0
cHV0X2ZpbGVuYW1lID0gZ2V0X3RhcmJhbGxfcm9vdF9hbmRfb3V0cHV0X2ZpbGVuYW1lX2Zyb21f
YXJndW1lbnRzKGFyZ3VtZW50cykKKworICAgIG1hbmlmZXN0ID0gTWFuaWZlc3QoYXJndW1lbnRz
Lm1hbmlmZXN0X2ZpbGVuYW1lLCBhcmd1bWVudHMuc291cmNlX2RpciwgYXJndW1lbnRzLmJ1aWxk
X2RpciwgdGFyYmFsbF9yb290KQorICAgIG1hbmlmZXN0LmNyZWF0ZV90YXJmaWxlKG91dHB1dF9m
aWxlbmFtZSkKKworICAgIGlmIGFyZ3VtZW50cy5jaGVjazoKKyAgICAgICAgRGlzdGNoZWNrKGFy
Z3VtZW50cy5zb3VyY2VfZGlyLCBhcmd1bWVudHMuYnVpbGRfZGlyKS5jaGVjayhvdXRwdXRfZmls
ZW5hbWUsIGFyZ3VtZW50cy5wb3J0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3RrL21ha2UtZGlzdC5w
eSBiL1Rvb2xzL2d0ay9tYWtlLWRpc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4
IDZmZDdkNWJjNDFhMzJmM2RjNTJhMzRiMzhkZTIwY2Q0NGIxOTc0YWYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvZ3RrL21ha2UtZGlzdC5weQor
KysgL2Rldi9udWxsCkBAIC0xLDMzMyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMg
Q29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCi0jCi0jIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSMgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotIyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSMg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotIwotIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSMgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotIyBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0
IHByaW50X2Z1bmN0aW9uCi1mcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNsb3NpbmcKLQotaW1wb3J0
IGFyZ3BhcnNlCi1pbXBvcnQgZXJybm8KLWltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLWltcG9ydCBv
cwotaW1wb3J0IHJlCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHRh
cmZpbGUKLQotCi1kZWYgZW51bSgqKmVudW1zKToKLSAgICByZXR1cm4gdHlwZSgnRW51bScsICgp
LCBlbnVtcykKLQotCi1jbGFzcyBSdWxlKG9iamVjdCk6Ci0gICAgUmVzdWx0ID0gZW51bShJTkNM
VURFPTEsIEVYQ0xVREU9MiwgTk9fTUFUQ0g9MykKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0
eXBlLCBwYXR0ZXJuKToKLSAgICAgICAgc2VsZi50eXBlID0gdHlwZQotICAgICAgICBzZWxmLm9y
aWdpbmFsX3BhdHRlcm4gPSBwYXR0ZXJuCi0gICAgICAgIHNlbGYucGF0dGVybiA9IHJlLmNvbXBp
bGUocGF0dGVybikKLQotICAgIGRlZiB0ZXN0KHNlbGYsIGZpbGUpOgotICAgICAgICBpZiBub3Qo
c2VsZi5wYXR0ZXJuLnNlYXJjaChmaWxlKSk6Ci0gICAgICAgICAgICByZXR1cm4gUnVsZS5SZXN1
bHQuTk9fTUFUQ0gKLSAgICAgICAgcmV0dXJuIHNlbGYudHlwZQotCi0KLWNsYXNzIFJ1bGVzZXQo
b2JqZWN0KToKLSAgICBfZ2xvYmFsX3J1bGVzID0gTm9uZQotCi0gICAgZGVmIF9faW5pdF9fKHNl
bGYpOgotICAgICAgICAjIEJ5IGRlZmF1bHQsIGFjY2VwdCBhbGwgZmlsZXMuCi0gICAgICAgIHNl
bGYucnVsZXMgPSBbUnVsZShSdWxlLlJlc3VsdC5JTkNMVURFLCAnLionKV0KLQotICAgIEBjbGFz
c21ldGhvZAotICAgIGRlZiBnbG9iYWxfcnVsZXMoY2xzKToKLSAgICAgICAgaWYgbm90IGNscy5f
Z2xvYmFsX3J1bGVzOgotICAgICAgICAgICAgY2xzLl9nbG9iYWxfcnVsZXMgPSBSdWxlc2V0KCkK
LSAgICAgICAgcmV0dXJuIGNscy5fZ2xvYmFsX3J1bGVzCi0KLSAgICBAY2xhc3NtZXRob2QKLSAg
ICBkZWYgYWRkX2dsb2JhbF9ydWxlKGNscywgcnVsZSk6Ci0gICAgICAgIGNscy5nbG9iYWxfcnVs
ZXMoKS5hZGRfcnVsZShydWxlKQotCi0gICAgZGVmIGFkZF9ydWxlKHNlbGYsIHJ1bGUpOgotICAg
ICAgICBzZWxmLnJ1bGVzLmFwcGVuZChydWxlKQotCi0gICAgZGVmIHBhc3NlcyhzZWxmLCBmaWxl
KToKLSAgICAgICAgYWxsb3dlZCA9IEZhbHNlCi0gICAgICAgIGZvciBydWxlIGluIHNlbGYucnVs
ZXM6Ci0gICAgICAgICAgICByZXN1bHQgPSBydWxlLnRlc3QoZmlsZSkKLSAgICAgICAgICAgIGlm
IHJlc3VsdCA9PSBSdWxlLlJlc3VsdC5OT19NQVRDSDoKLSAgICAgICAgICAgICAgICBjb250aW51
ZQotICAgICAgICAgICAgYWxsb3dlZCA9IFJ1bGUuUmVzdWx0LklOQ0xVREUgPT0gcmVzdWx0Ci0g
ICAgICAgIHJldHVybiBhbGxvd2VkCi0KLQotY2xhc3MgRmlsZShvYmplY3QpOgotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBzb3VyY2Vfcm9vdCwgdGFyYmFsbF9yb290KToKLSAgICAgICAgc2VsZi5z
b3VyY2Vfcm9vdCA9IHNvdXJjZV9yb290Ci0gICAgICAgIHNlbGYudGFyYmFsbF9yb290ID0gdGFy
YmFsbF9yb290Ci0KLSAgICBkZWYgc2hvdWxkX3NraXBfZmlsZShzZWxmLCBwYXRoKToKLSAgICAg
ICAgIyBEbyBub3Qgc2tpcCBmaWxlcyBleHBsaWNpdGx5IGFkZGVkIGZyb20gdGhlIG1hbmlmZXN0
LgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBnZXRfZmlsZXMoc2VsZik6Ci0gICAg
ICAgIHlpZWxkIChzZWxmLnNvdXJjZV9yb290LCBzZWxmLnRhcmJhbGxfcm9vdCkKLQotCi1jbGFz
cyBEaXJlY3Rvcnkob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlX3Jvb3Qs
IHRhcmJhbGxfcm9vdCk6Ci0gICAgICAgIHNlbGYuc291cmNlX3Jvb3QgPSBzb3VyY2Vfcm9vdAot
ICAgICAgICBzZWxmLnRhcmJhbGxfcm9vdCA9IHRhcmJhbGxfcm9vdAotICAgICAgICBzZWxmLnJ1
bGVzID0gUnVsZXNldCgpCi0KLSAgICAgICAgc2VsZi5maWxlc19pbl92ZXJzaW9uX2NvbnRyb2wg
PSBzZWxmLmxpc3RfZmlsZXNfaW5fdmVyc2lvbl9jb250cm9sKCkKLQotICAgIGRlZiBhZGRfcnVs
ZShzZWxmLCBydWxlKToKLSAgICAgICAgc2VsZi5ydWxlcy5hZGRfcnVsZShydWxlKQotCi0gICAg
ZGVmIGdldF90YXJiYWxsX3BhdGgoc2VsZiwgZmlsZW5hbWUpOgotICAgICAgICByZXR1cm4gZmls
ZW5hbWUucmVwbGFjZShzZWxmLnNvdXJjZV9yb290LCBzZWxmLnRhcmJhbGxfcm9vdCwgMSkKLQot
ICAgIGRlZiBsaXN0X2ZpbGVzX2luX3ZlcnNpb25fY29udHJvbChzZWxmKToKLSAgICAgICAgIyBG
SVhNRTogT25seSBnaXQgaXMgc3VwcG9ydGVkIGZvciBub3cuCi0gICAgICAgIHAgPSBzdWJwcm9j
ZXNzLlBvcGVuKFsnZ2l0JywgJ2xzLXRyZWUnLCAnLXInLCAnLS1uYW1lLW9ubHknLCAnSEVBRCcs
IHNlbGYuc291cmNlX3Jvb3RdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQotICAgICAgICBvdXQg
PSBwLmNvbW11bmljYXRlKClbMF0KLSAgICAgICAgaWYgbm90IG91dDoKLSAgICAgICAgICAgIHJl
dHVybiBbXQotICAgICAgICByZXR1cm4gb3V0LnJzdHJpcCgnXG4nKS5zcGxpdCgnXG4nKQotCi0g
ICAgZGVmIHNob3VsZF9za2lwX2ZpbGUoc2VsZiwgcGF0aCk6Ci0gICAgICAgIHJldHVybiBwYXRo
IG5vdCBpbiBzZWxmLmZpbGVzX2luX3ZlcnNpb25fY29udHJvbAotCi0gICAgZGVmIGdldF9maWxl
cyhzZWxmKToKLSAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc2VsZi5z
b3VyY2Vfcm9vdCk6Ci0KLSAgICAgICAgICAgIGRlZiBwYXNzZXNfYWxsX3J1bGVzKGVudHJ5KToK
LSAgICAgICAgICAgICAgICByZXR1cm4gUnVsZXNldC5nbG9iYWxfcnVsZXMoKS5wYXNzZXMoZW50
cnkpIGFuZCBzZWxmLnJ1bGVzLnBhc3NlcyhlbnRyeSkKLQotICAgICAgICAgICAgdG9fa2VlcCA9
IGZpbHRlcihwYXNzZXNfYWxsX3J1bGVzLCBkaXJzKQotICAgICAgICAgICAgZGVsIGRpcnNbOl0K
LSAgICAgICAgICAgIGRpcnMuZXh0ZW5kKHRvX2tlZXApCi0KLSAgICAgICAgICAgIGZvciBmaWxl
IGluIGZpbGVzOgotICAgICAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZmls
ZSkKLSAgICAgICAgICAgICAgICBpZiBub3QgcGFzc2VzX2FsbF9ydWxlcyhmaWxlKToKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICB5aWVsZCAoZmlsZSwgc2Vs
Zi5nZXRfdGFyYmFsbF9wYXRoKGZpbGUpKQotCi0KLWNsYXNzIE1hbmlmZXN0KG9iamVjdCk6Ci0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hbmlmZXN0X2ZpbGVuYW1lLCBzb3VyY2Vfcm9vdCwgYnVp
bGRfcm9vdCwgdGFyYmFsbF9yb290PScvJyk6Ci0gICAgICAgIHNlbGYuY3VycmVudF9kaXJlY3Rv
cnkgPSBOb25lCi0gICAgICAgIHNlbGYuZGlyZWN0b3JpZXMgPSBbXQotICAgICAgICBzZWxmLnRh
cmJhbGxfcm9vdCA9IHRhcmJhbGxfcm9vdAotICAgICAgICBzZWxmLnNvdXJjZV9yb290ID0gc291
cmNlX3Jvb3QKLSAgICAgICAgc2VsZi5idWlsZF9yb290ID0gYnVpbGRfcm9vdAotCi0gICAgICAg
ICMgTm9ybWFsaXplIHRoZSB0YXJiYWxsIHJvb3Qgc28gdGhhdCBpdCBzdGFydHMgYW5kIGVuZHMg
d2l0aCBhIHNsYXNoLgotICAgICAgICBpZiBub3Qgc2VsZi50YXJiYWxsX3Jvb3QuZW5kc3dpdGgo
Jy8nKToKLSAgICAgICAgICAgIHNlbGYudGFyYmFsbF9yb290ID0gc2VsZi50YXJiYWxsX3Jvb3Qg
KyAnLycKLSAgICAgICAgaWYgbm90IHNlbGYudGFyYmFsbF9yb290LnN0YXJ0c3dpdGgoJy8nKToK
LSAgICAgICAgICAgIHNlbGYudGFyYmFsbF9yb290ID0gJy8nICsgc2VsZi50YXJiYWxsX3Jvb3QK
LQotICAgICAgICB3aXRoIG9wZW4obWFuaWZlc3RfZmlsZW5hbWUsICdyJykgYXMgZmlsZToKLSAg
ICAgICAgICAgIGZvciBsaW5lIGluIGZpbGUucmVhZGxpbmVzKCk6Ci0gICAgICAgICAgICAgICAg
c2VsZi5wcm9jZXNzX2xpbmUobGluZSkKLQotICAgIGRlZiBhZGRfcnVsZShzZWxmLCBydWxlKToK
LSAgICAgICAgaWYgc2VsZi5jdXJyZW50X2RpcmVjdG9yeSBpcyBub3QgTm9uZToKLSAgICAgICAg
ICAgIHNlbGYuY3VycmVudF9kaXJlY3RvcnkuYWRkX3J1bGUocnVsZSkKLSAgICAgICAgZWxzZToK
LSAgICAgICAgICAgIFJ1bGVzZXQuYWRkX2dsb2JhbF9ydWxlKHJ1bGUpCi0KLSAgICBkZWYgYWRk
X2RpcmVjdG9yeShzZWxmLCBkaXJlY3RvcnkpOgotICAgICAgICBzZWxmLmN1cnJlbnRfZGlyZWN0
b3J5ID0gZGlyZWN0b3J5Ci0gICAgICAgIHNlbGYuZGlyZWN0b3JpZXMuYXBwZW5kKGRpcmVjdG9y
eSkKLQotICAgIGRlZiBnZXRfZnVsbF9zb3VyY2VfcGF0aChzZWxmLCBzb3VyY2VfcGF0aCk6Ci0g
ICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzb3VyY2VfcGF0aCk6Ci0gICAgICAgICAgICBz
b3VyY2VfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnNvdXJjZV9yb290LCBzb3VyY2VfcGF0aCkK
LSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNvdXJjZV9wYXRoKToKLSAgICAgICAgICAg
IHJhaXNlIEV4Y2VwdGlvbignQ291bGQgbm90IGZpbmQgZGlyZWN0b3J5ICVzJyAlIHNvdXJjZV9w
YXRoKQotICAgICAgICByZXR1cm4gc291cmNlX3BhdGgKLQotICAgIGRlZiBnZXRfZnVsbF90YXJi
YWxsX3BhdGgoc2VsZiwgcGF0aCk6Ci0gICAgICAgIHJldHVybiBzZWxmLnRhcmJhbGxfcm9vdCAr
IHBhdGgKLQotICAgIGRlZiBnZXRfc291cmNlX2FuZF90YXJiYWxsX3BhdGhzX2Zyb21fcGFydHMo
c2VsZiwgcGFydHMpOgotICAgICAgICBmdWxsX3NvdXJjZV9wYXRoID0gc2VsZi5nZXRfZnVsbF9z
b3VyY2VfcGF0aChwYXJ0c1sxXSkKLSAgICAgICAgaWYgbGVuKHBhcnRzKSA+IDI6Ci0gICAgICAg
ICAgICBmdWxsX3RhcmJhbGxfcGF0aCA9IHNlbGYuZ2V0X2Z1bGxfdGFyYmFsbF9wYXRoKHBhcnRz
WzJdKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZnVsbF90YXJiYWxsX3BhdGggPSBzZWxm
LmdldF9mdWxsX3RhcmJhbGxfcGF0aChwYXJ0c1sxXSkKLSAgICAgICAgcmV0dXJuIChmdWxsX3Nv
dXJjZV9wYXRoLCBmdWxsX3RhcmJhbGxfcGF0aCkKLQotICAgIGRlZiBwcm9jZXNzX2xpbmUoc2Vs
ZiwgbGluZSk6Ci0gICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgpCi0gICAgICAgIGlmIG5vdCBw
YXJ0czoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBwYXJ0c1swXS5zdGFydHN3aXRo
KCIjIik6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBpZiBwYXJ0c1swXSA9PSAiZGly
ZWN0b3J5IiBhbmQgbGVuKHBhcnRzKSA+IDE6Ci0gICAgICAgICAgICBzZWxmLmFkZF9kaXJlY3Rv
cnkoRGlyZWN0b3J5KCpzZWxmLmdldF9zb3VyY2VfYW5kX3RhcmJhbGxfcGF0aHNfZnJvbV9wYXJ0
cyhwYXJ0cykpKQotICAgICAgICBlbGlmIHBhcnRzWzBdID09ICJmaWxlIiBhbmQgbGVuKHBhcnRz
KSA+IDE6Ci0gICAgICAgICAgICBzZWxmLmFkZF9kaXJlY3RvcnkoRmlsZSgqc2VsZi5nZXRfc291
cmNlX2FuZF90YXJiYWxsX3BhdGhzX2Zyb21fcGFydHMocGFydHMpKSkKLSAgICAgICAgZWxpZiBw
YXJ0c1swXSA9PSAiZXhjbHVkZSIgYW5kIGxlbihwYXJ0cykgPiAxOgotICAgICAgICAgICAgc2Vs
Zi5hZGRfcnVsZShSdWxlKFJ1bGUuUmVzdWx0LkVYQ0xVREUsIHBhcnRzWzFdKSkKLSAgICAgICAg
ZWxpZiBwYXJ0c1swXSA9PSAiaW5jbHVkZSIgYW5kIGxlbihwYXJ0cykgPiAxOgotICAgICAgICAg
ICAgc2VsZi5hZGRfcnVsZShSdWxlKFJ1bGUuUmVzdWx0LklOQ0xVREUsIHBhcnRzWzFdKSkKLSAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignTGluZSBkb2VzIG5vdCBi
ZWdpbiB3aXRoIGEgY29ycmVjdCBydWxlOlxuXHQnICsgbGluZSkKLQotICAgIGRlZiBzaG91bGRf
c2tpcF9maWxlKHNlbGYsIGRpcmVjdG9yeSwgZmlsZW5hbWUpOgotICAgICAgICAjIE9ubHkgYWxs
b3cgZmlsZXMgdGhhdCBhcmUgbm90IGluIHZlcnNpb24gY29udHJvbCB3aGVuIHRoZXkgYXJlIGV4
cGxpY2l0bHkgaW5jbHVkZWQgaW4gdGhlIG1hbmlmZXN0IGZyb20gdGhlIGJ1aWxkIGRpci4KLSAg
ICAgICAgaWYgZmlsZW5hbWUuc3RhcnRzd2l0aChzZWxmLmJ1aWxkX3Jvb3QpOgotICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgcmV0dXJuIGRpcmVjdG9yeS5zaG91bGRfc2tpcF9m
aWxlKGZpbGVuYW1lKQotCi0gICAgZGVmIGdldF9maWxlcyhzZWxmKToKLSAgICAgICAgZm9yIGRp
cmVjdG9yeSBpbiBzZWxmLmRpcmVjdG9yaWVzOgotICAgICAgICAgICAgZm9yIGZpbGVfdHVwbGUg
aW4gZGlyZWN0b3J5LmdldF9maWxlcygpOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuc2hvdWxk
X3NraXBfZmlsZShkaXJlY3RvcnksIGZpbGVfdHVwbGVbMF0pOgotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZQotICAgICAgICAgICAgICAgIHlpZWxkIGZpbGVfdHVwbGUKLQotICAgIGRlZiBj
cmVhdGVfdGFyZmlsZShzZWxmLCBvdXRwdXQpOgotICAgICAgICBjb3VudCA9IDAKLSAgICAgICAg
Zm9yIGZpbGVfdHVwbGUgaW4gc2VsZi5nZXRfZmlsZXMoKToKLSAgICAgICAgICAgIGNvdW50ID0g
Y291bnQgKyAxCi0KLSAgICAgICAgd2l0aCBjbG9zaW5nKHRhcmZpbGUub3BlbihvdXRwdXQsICd3
JykpIGFzIHRhcmJhbGw6Ci0gICAgICAgICAgICBmb3IgaSwgKGZpbGVfcGF0aCwgdGFyYmFsbF9w
YXRoKSBpbiBlbnVtZXJhdGUoc2VsZi5nZXRfZmlsZXMoKSwgc3RhcnQ9MSk6Ci0gICAgICAgICAg
ICAgICAgcHJpbnQoJ1RhcnJpbmcgZmlsZSB7MH0gb2YgezF9Jy5mb3JtYXQoaSwgY291bnQpLmxq
dXN0KDQwKSwgZW5kPSdccicpCi0gICAgICAgICAgICAgICAgdGFyYmFsbC5hZGQoZmlsZV9wYXRo
LCB0YXJiYWxsX3BhdGgpCi0gICAgICAgIHByaW50KCJXcm90ZSB7MH0iLmZvcm1hdChvdXRwdXQp
LmxqdXN0KDQwKSkKLQotCi1jbGFzcyBEaXN0Y2hlY2sob2JqZWN0KToKLSAgICBCVUlMRF9ESVJF
Q1RPUllfTkFNRSA9ICJfYnVpbGQiCi0gICAgSU5TVEFMTF9ESVJFQ1RPUllfTkFNRSA9ICJfaW5z
dGFsbCIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2Vfcm9vdCwgYnVpbGRfcm9vdCk6
Ci0gICAgICAgIHNlbGYuc291cmNlX3Jvb3QgPSBzb3VyY2Vfcm9vdAotICAgICAgICBzZWxmLmJ1
aWxkX3Jvb3QgPSBidWlsZF9yb290Ci0KLSAgICBkZWYgZXh0cmFjdF90YXJiYWxsKHNlbGYsIHRh
cmJhbGxfcGF0aCk6Ci0gICAgICAgIHdpdGggY2xvc2luZyh0YXJmaWxlLm9wZW4odGFyYmFsbF9w
YXRoLCAncicpKSBhcyB0YXJiYWxsOgotICAgICAgICAgICAgdGFyYmFsbC5leHRyYWN0YWxsKHNl
bGYuYnVpbGRfcm9vdCkKLQotICAgIGRlZiBjb25maWd1cmUoc2VsZiwgZGlzdF9kaXIsIGJ1aWxk
X2RpciwgaW5zdGFsbF9kaXIsIHBvcnQpOgotICAgICAgICBkZWYgY3JlYXRlX2RpcihkaXJlY3Rv
cnksIGRpcmVjdG9yeV90eXBlKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBv
cy5ta2RpcihkaXJlY3RvcnkpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKLSAgICAg
ICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVCBvciBub3Qgb3MucGF0aC5pc2Rp
cihkaXJlY3RvcnkpOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNvdWxk
IG5vdCBjcmVhdGUgJXMgZGlyIGF0ICVzOiAlcyIgJSAoZGlyZWN0b3J5X3R5cGUsIGRpcmVjdG9y
eSwgc3RyKGUpKSkKLQotICAgICAgICBjcmVhdGVfZGlyKGJ1aWxkX2RpciwgImJ1aWxkIikKLSAg
ICAgICAgY3JlYXRlX2RpcihpbnN0YWxsX2RpciwgImluc3RhbGwiKQotCi0gICAgICAgIGNvbW1h
bmQgPSBbJ2NtYWtlJywgJy1EUE9SVD0lcycgJSBwb3J0LCAnLURDTUFLRV9JTlNUQUxMX1BSRUZJ
WD0lcycgJSBpbnN0YWxsX2RpciwgJy1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlJywgZGlzdF9k
aXJdCi0gICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjb21tYW5kLCBjd2Q9YnVpbGRfZGly
KQotCi0gICAgZGVmIGJ1aWxkKHNlbGYsIGJ1aWxkX2Rpcik6Ci0gICAgICAgIGNvbW1hbmQgPSBb
J21ha2UnXQotICAgICAgICBtYWtlX2FyZ3MgPSBvcy5nZXRlbnYoJ01BS0VfQVJHUycpCi0gICAg
ICAgIGlmIG1ha2VfYXJnczoKLSAgICAgICAgICAgIGNvbW1hbmQuZXh0ZW5kKG1ha2VfYXJncy5z
cGxpdCgnICcpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY29tbWFuZC5hcHBlbmQoJy1q
JWQnICUgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpKQotICAgICAgICBzdWJwcm9jZXNzLmNo
ZWNrX2NhbGwoY29tbWFuZCwgY3dkPWJ1aWxkX2RpcikKLQotICAgIGRlZiBpbnN0YWxsKHNlbGYs
IGJ1aWxkX2Rpcik6Ci0gICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJ21ha2UnLCAnaW5z
dGFsbCddLCBjd2Q9YnVpbGRfZGlyKQotCi0gICAgZGVmIGNsZWFuKHNlbGYsIGRpc3RfZGlyKToK
LSAgICAgICAgc2h1dGlsLnJtdHJlZShkaXN0X2RpcikKLQotICAgIGRlZiBjaGVjayhzZWxmLCB0
YXJiYWxsLCBwb3J0KToKLSAgICAgICAgdGFyYmFsbF9uYW1lLCBleHQgPSBvcy5wYXRoLnNwbGl0
ZXh0KG9zLnBhdGguYmFzZW5hbWUodGFyYmFsbCkpCi0gICAgICAgIGRpc3RfZGlyID0gb3MucGF0
aC5qb2luKHNlbGYuYnVpbGRfcm9vdCwgdGFyYmFsbF9uYW1lKQotICAgICAgICBidWlsZF9kaXIg
PSBvcy5wYXRoLmpvaW4oZGlzdF9kaXIsIHNlbGYuQlVJTERfRElSRUNUT1JZX05BTUUpCi0gICAg
ICAgIGluc3RhbGxfZGlyID0gb3MucGF0aC5qb2luKGRpc3RfZGlyLCBzZWxmLklOU1RBTExfRElS
RUNUT1JZX05BTUUpCi0KLSAgICAgICAgc2VsZi5leHRyYWN0X3RhcmJhbGwodGFyYmFsbCkKLSAg
ICAgICAgc2VsZi5jb25maWd1cmUoZGlzdF9kaXIsIGJ1aWxkX2RpciwgaW5zdGFsbF9kaXIsIHBv
cnQpCi0gICAgICAgIHNlbGYuYnVpbGQoYnVpbGRfZGlyKQotICAgICAgICBzZWxmLmluc3RhbGwo
YnVpbGRfZGlyKQotICAgICAgICBzZWxmLmNsZWFuKGRpc3RfZGlyKQotCi1pZiBfX25hbWVfXyA9
PSAiX19tYWluX18iOgotICAgIGNsYXNzIEZpbGVQYXRoQWN0aW9uKGFyZ3BhcnNlLkFjdGlvbik6
Ci0gICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBv
cHRpb25fc3RyaW5nPU5vbmUpOgotICAgICAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIHNlbGYu
ZGVzdCwgb3MucGF0aC5hYnNwYXRoKHZhbHVlcykpCi0KLSAgICBkZWYgZW5zdXJlX3ZlcnNpb25f
aWZfcG9zc2libGUoYXJndW1lbnRzKToKLSAgICAgICAgaWYgYXJndW1lbnRzLnZlcnNpb24gaXMg
bm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBwa2djb25maWdfZmlsZSA9
IG9zLnBhdGguam9pbihhcmd1bWVudHMuYnVpbGRfZGlyLCAiU291cmNlL1dlYktpdC93ZWJraXQy
Z3RrLTQuMC5wYyIpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBrZ2NvbmZpZ19maWxlKToK
LSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsncGtnLWNvbmZpZycsICctLW1vZHZl
cnNpb24nLCBwa2djb25maWdfZmlsZV0sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCi0gICAgICAg
ICAgICB2ZXJzaW9uID0gcC5jb21tdW5pY2F0ZSgpWzBdCi0gICAgICAgICAgICBpZiB2ZXJzaW9u
OgotICAgICAgICAgICAgICAgIGFyZ3VtZW50cy52ZXJzaW9uID0gdmVyc2lvbi5yc3RyaXAoJ1xu
JykKLQotCi0gICAgZGVmIGdldF90YXJiYWxsX3Jvb3RfYW5kX291dHB1dF9maWxlbmFtZV9mcm9t
X2FyZ3VtZW50cyhhcmd1bWVudHMpOgotICAgICAgICB0YXJiYWxsX3Jvb3QgPSBhcmd1bWVudHMu
dGFyYmFsbF9uYW1lCi0gICAgICAgIGlmIGFyZ3VtZW50cy52ZXJzaW9uIGlzIG5vdCBOb25lOgot
ICAgICAgICAgICAgdGFyYmFsbF9yb290ICs9ICctJyArIGFyZ3VtZW50cy52ZXJzaW9uCi0KLSAg
ICAgICAgb3V0cHV0X2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKGFyZ3VtZW50cy5idWlsZF9kaXIs
IHRhcmJhbGxfcm9vdCArICIudGFyIikKLSAgICAgICAgcmV0dXJuIHRhcmJhbGxfcm9vdCwgb3V0
cHV0X2ZpbGVuYW1lCi0KLSAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNj
cmlwdGlvbj0nQnVpbGQgYSBkaXN0cmlidXRpb24gYnVuZGxlLicpCi0gICAgcGFyc2VyLmFkZF9h
cmd1bWVudCgnLWMnLCAnLS1jaGVjaycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSdDaGVjayB0aGUgdGFyYmFsbCcpCi0gICAgcGFyc2VyLmFkZF9h
cmd1bWVudCgnLXMnLCAnLS1zb3VyY2UtZGlyJywgdHlwZT1zdHIsIGFjdGlvbj1GaWxlUGF0aEFj
dGlvbiwgZGVmYXVsdD1vcy5nZXRjd2QoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
J1RoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uLiAnICsg
XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RpcmVjdG9yeSBmb3IgcmVsYXRpdmUg
cGF0aHMuIERlZmF1bHRzIHRvIGN1cnJlbnQgZGlyZWN0b3J5LicpCi0gICAgcGFyc2VyLmFkZF9h
cmd1bWVudCgnLS12ZXJzaW9uJywgdHlwZT1zdHIsIGRlZmF1bHQ9Tm9uZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGhlbHA9J1RoZSB2ZXJzaW9uIG9mIHRoZSB0YXJiYWxsIHRvIGdlbmVyYXRl
JykKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYicsICctLWJ1aWxkLWRpcicsIHR5cGU9c3Ry
LCBhY3Rpb249RmlsZVBhdGhBY3Rpb24sIGRlZmF1bHQ9b3MuZ2V0Y3dkKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSdUaGUgdG9wLWxldmVsIHBhdGggb2YgZGlyZWN0b3J5IG9mIHRo
ZSBidWlsZCByb290LiAnICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0J5IGRl
ZmF1bHQgaXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LicpCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVu
dCgnLXQnLCAnLS10YXJiYWxsLW5hbWUnLCB0eXBlPXN0ciwgZGVmYXVsdD0nd2Via2l0Z3RrJywK
LSAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0Jhc2UgbmFtZSBvZiB0YXJiYWxsLiBEZWZh
dWx0cyB0byAid2Via2l0Z3RrIi4nKQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1wJywgJy0t
cG9ydCcsIHR5cGU9c3RyLCBkZWZhdWx0PSdHVEsnLAotICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0nUG9ydCB0byBiZSBidWlsdCBpbiB0YXJiYWxsIGNoZWNrLiBEZWZhdWx0cyB0byAiR1RL
Ii4nKQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ21hbmlmZXN0X2ZpbGVuYW1lJywgbWV0YXZh
cj0ibWFuaWZlc3QiLCB0eXBlPXN0ciwgYWN0aW9uPUZpbGVQYXRoQWN0aW9uLCBoZWxwPSdUaGUg
cGF0aCB0byB0aGUgbWFuaWZlc3QgZmlsZS4nKQotCi0gICAgYXJndW1lbnRzID0gcGFyc2VyLnBh
cnNlX2FyZ3MoKQotCi0gICAgIyBQYXRocyBpbiB0aGUgbWFuaWZlc3QgYXJlIHJlbGF0aXZlIHRv
IHRoZSBzb3VyY2UgZGlyZWN0b3J5LCBhbmQgdGhpcyBzY3JpcHQgYXNzdW1lcyB0aGF0Ci0gICAg
IyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHRoZSBzb3VyY2UgZGlyZWN0b3J5LCBzbyBj
aGFuZ2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKLSAgICAjIHRvIGJlIHRoZSBzb3Vy
Y2UgZGlyZWN0b3J5LgotICAgIG9zLmNoZGlyKGFyZ3VtZW50cy5zb3VyY2VfZGlyKQotCi0gICAg
ZW5zdXJlX3ZlcnNpb25faWZfcG9zc2libGUoYXJndW1lbnRzKQotICAgIHRhcmJhbGxfcm9vdCwg
b3V0cHV0X2ZpbGVuYW1lID0gZ2V0X3RhcmJhbGxfcm9vdF9hbmRfb3V0cHV0X2ZpbGVuYW1lX2Zy
b21fYXJndW1lbnRzKGFyZ3VtZW50cykKLQotICAgIG1hbmlmZXN0ID0gTWFuaWZlc3QoYXJndW1l
bnRzLm1hbmlmZXN0X2ZpbGVuYW1lLCBhcmd1bWVudHMuc291cmNlX2RpciwgYXJndW1lbnRzLmJ1
aWxkX2RpciwgdGFyYmFsbF9yb290KQotICAgIG1hbmlmZXN0LmNyZWF0ZV90YXJmaWxlKG91dHB1
dF9maWxlbmFtZSkKLQotICAgIGlmIGFyZ3VtZW50cy5jaGVjazoKLSAgICAgICAgRGlzdGNoZWNr
KGFyZ3VtZW50cy5zb3VyY2VfZGlyLCBhcmd1bWVudHMuYnVpbGRfZGlyKS5jaGVjayhvdXRwdXRf
ZmlsZW5hbWUsIGFyZ3VtZW50cy5wb3J0KQpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdl
TG9nCmluZGV4IDNmNmY2OTlhNjQ0NWQ5NDAwYmQ2YmI1M2E1OTNhYWMyZjhhMGMzNzAuLjU3YzQ1
Y2NkYTM1ZTg4MTNjNzQxNGQxYzBlMjFlNjliNTkxM2IxMmYgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxv
ZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0xMS0wMiAgTWljaGFlbCBD
YXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1dQRV1bR1RLXSBB
dm9pZCBkdXBsaWNhdGluZyBjb2RlIGZvciBkaXN0IGFuZCBkaXN0Y2hlY2sgdGFyZ2V0cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5MTU0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjb21taXQg
anVzdCByZWR1Y2VzIHNvbWUgQ01ha2UgY29kZSBkdXBsaWNhdGlvbiBiZXR3ZWVuIEdUSyBhbmQg
V1BFLgorCisgICAgICAgICogU291cmNlL1BsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFNv
dXJjZS9QbGF0Zm9ybVdQRS5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvV2ViS2l0RGlz
dC5jbWFrZTogQWRkZWQuCisKIDIwMTctMTAtMzEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFVwZGF0ZSBPcHRpb25zR1RL
LmNtYWtlIGFuZCBORVdTIGZvciAyLjE5LjEgcmVsZWFzZS4K
</data>

          </attachment>
      

    </bug>

</bugzilla>