Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1b3iE5-000148-Uz for pgadmin-hackers@arkaria.postgresql.org; Fri, 20 May 2016 11:04:18 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1b3iE5-0007aD-C6 for pgadmin-hackers@arkaria.postgresql.org; Fri, 20 May 2016 11:04:17 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1b3iE1-0007ZZ-Ef for pgadmin-hackers@postgresql.org; Fri, 20 May 2016 11:04:14 +0000 Received: from mail-wm0-x22c.google.com ([2a00:1450:400c:c09::22c]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1b3iDs-0004zp-M6 for pgadmin-hackers@postgresql.org; Fri, 20 May 2016 11:04:12 +0000 Received: by mail-wm0-x22c.google.com with SMTP id n129so266637214wmn.1 for ; Fri, 20 May 2016 04:04:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=bQo6aMcQCgGw88pyGO0uzbr9E1Hko4OJWVax3nvWHVM=; b=1Uz0OodHmhXQRQELu8UqiU1wlhkfSHMMEwpBsNHIZU4UCIZVRiDVpGUBP4sadOc4kv q/joPLPn1u2TVvRrh0Zc1C7bvCHl7AgaDWkd2Xh+geqdu7XY+V73q3UVB+tSKIXMTVW2 77p3hzYCcoiexJuRbtEBS5uRYpbirjbxSy/hdlH2WgubzINfX8njjMDgq64apJ4nvmAV DuacAAHNKd51r5lJPuBu2iHxTfUwODD3+WZbH0nC7Xmpzk9mVrBg13doojDZBCr1oZb+ dVQsehR3ML4a/5L+6uLsXs7Pz58eoujSw6je70JbXpFGJuswi9mvM1Dtb/RN0rTOkUjw 8q2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=bQo6aMcQCgGw88pyGO0uzbr9E1Hko4OJWVax3nvWHVM=; b=kPj1Bwo9OY58i5pYHv0KKmQvzMgDxyA96VvXCaxfjCdOB2GZ84xanSf6MtaGOR3gXz BISFcAkn64CmLtr1WHXl98LtD1yHkKjjnNe/KlvClIHDs7vy3Y40Tz0rFNxQLUSxUDLF BJZy0Lx9M/dqodW5coDu7hREUFNKUYQFb4u2lwtehQlHqCuICBDa83NbP7lXP71akGhn VyVv5+1/EEFNXh1EkH1e+Jj5YYL779WnWc1G77ACw/g/yFT5IAZSj/CGWIrUMyLn2jgN gKEtRBKnJ8Zje1sArQ8PKdRwid5SnmPzEdVGYq1QhgdnEW1IZz9CMrXNlgClpQ9AYFPz LQ2w== X-Gm-Message-State: AOPr4FWerTtWpMcUle0C7Xql+NMajpm53SZQ7h44TzG0Q5ZGq8wKkP8gxV6vJv9k6e4fSZhPIXWrU9u+JFk/ruM5 X-Received: by 10.28.126.133 with SMTP id z127mr2992538wmc.68.1463742241859; Fri, 20 May 2016 04:04:01 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.14.212 with HTTP; Fri, 20 May 2016 04:03:31 -0700 (PDT) In-Reply-To: References: From: Surinder Kumar Date: Fri, 20 May 2016 16:33:31 +0530 Message-ID: Subject: Re: [pgAdmin4][Patch]: File Manager & Backform FileControl To: pgadmin-hackers Content-Type: multipart/mixed; boundary=001a114178565e98530533440cc9 X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --001a114178565e98530533440cc9 Content-Type: multipart/alternative; boundary=001a114178565e984f0533440cc7 --001a114178565e984f0533440cc7 Content-Type: text/plain; charset=UTF-8 Hi, Please find patch with following issues/changes fixed: 1. Rename file/folder not working in list view. 2. Selection folder only should not allow to select file. 3. Ui changes in *table list* to match with the pgadmin color styles. 4. Custom *STORAGE_DIR* path don't list files/folders when opened in window system. 5. Code cleanup, formatting & did proper commenting. 6. In file selection mode, the value typed in text box not setting into backbone model. 7. Removed create file code, it should be handled on module using it. 8. Written a common function to make ajax request, instead of writing individual functions for same task. *Issue to be fixed*: When FileControl is used with 'nested' type, it redirects to some url when it is opened up. Once it gets fixed. I will send patch for this issue. Thanks Surinder Kumar On Sat, May 14, 2016 at 12:40 AM, Ashesh Vashi < ashesh.vashi@enterprisedb.com> wrote: > Thanks - committed with some tweaks! > > -- > > Thanks & Regards, > > Ashesh Vashi > EnterpriseDB INDIA: Enterprise PostgreSQL Company > > > > *http://www.linkedin.com/in/asheshvashi* > > > On Fri, May 13, 2016 at 7:36 PM, Surinder Kumar < > surinder.kumar@enterprisedb.com> wrote: > >> Hi, >> >> PFA patch with changes: >> 1. Line of code shouldn't exceed greater than 80. >> 2. Can't consider boolean as string while comparing. >> >> On Fri, May 13, 2016 at 4:33 PM, Surinder Kumar < >> surinder.kumar@enterprisedb.com> wrote: >> >>> Hi, >>> >>> Please find the patch for the following improvements: >>> 1. FileManager won't show Volumes on Windows when STORAGE_DIR is set to >>> None. >>> >>> >>> On Fri, May 13, 2016 at 12:24 AM, Ashesh Vashi < >>> ashesh.vashi@enterprisedb.com> wrote: >>> >>>> Hi Surinder, >>>> >>>> Thanks - it was committed! >>>> >>>> As discussed personally, there are few improvement needed. >>>> >>>> * Do not show non applicable buttons, whenever no files/directory >>>> available in the storage root directory. >>>> >>> Done >>> >>>> * In crate mode, use dimmer with the overwrite warning, so that - it >>>> does not allow to deselect the current selection. >>>> >>> Done >>> >>>> * The default selection for the file type selection combo box should be >>>> other than 'All Files'. >>>> >>> Done >>> >>>> * File type selection combo box should support file type description. >>>> i.e. >>>> Query/SQL File (*.sql) >>>> CSV File (*.csv) >>>> All Files (*.* | *) >>>> >>>> Please put that in the TODO file, we will handle that in future. >>>> >>> I have added it into TODO file. >>> >>>> >>>> I must apologies for a mistake for not giving you the credit for the >>>> work, I forgot to set the author while committing it. >>>> I tried setting it again to set the author without any success. :-( >>>> >>>> Thanks for the patch. >>>> I will be more careful next time. >>>> >>>> -- >>>> >>>> Thanks & Regards, >>>> >>>> Ashesh Vashi >>>> EnterpriseDB INDIA: Enterprise PostgreSQL Company >>>> >>>> >>>> >>>> *http://www.linkedin.com/in/asheshvashi* >>>> >>>> >>>> On Thu, May 12, 2016 at 12:18 AM, Surinder Kumar < >>>> surinder.kumar@enterprisedb.com> wrote: >>>> >>>>> Hi, >>>>> >>>>> PFA updated patch with following issues fixed: >>>>> 1. not listing files based on default file type selected. >>>>> 2. load css file using 'get_own_stylesheets' method instead of loading >>>>> from 'base.html'. >>>>> 3. setting custom dialog title and button not working. >>>>> >>>>> On Wed, May 11, 2016 at 3:03 PM, Surinder Kumar < >>>>> surinder.kumar@enterprisedb.com> wrote: >>>>> >>>>>> >>>>>> ---------- Forwarded message ---------- >>>>>> From: Surinder Kumar >>>>>> Date: Tue, May 10, 2016 at 11:43 PM >>>>>> Subject: Re: [pgadmin-hackers][pgAdmin4][Patch]: File Manager & >>>>>> Backform FileControl >>>>>> To: Neel Patel >>>>>> Cc: pgadmin-hackers >>>>>> >>>>>> >>>>>> Hi, >>>>>> >>>>>> Please find updated path with couple of review comments given by >>>>>> Ashesh Vashi. >>>>>> 1. Add variable *STORAGE_DIR* in configuration settings which >>>>>> decides the directory to list when *File manager* is opens, >>>>>> previously >>>>>> we have provided this option in preferences which is removed due to >>>>>> security issues. >>>>>> 2. List all available Volumes by default when *STORAGE_DIR *is set >>>>>> to empty for *Windows* platform. >>>>>> 3. Also, added support to allow user to provide >>>>>> *Dialog title and custom name for primary(OK) button,* >>>>>> >>>>>> Usage: >>>>>> >>>>>> 1. Set variable *STORAGE_DIR *to some value in config.py. >>>>>> 2. Import it in your module as following: >>>>>> * import config* >>>>>> * config.**STORAGE_DIR* >>>>>> >>>>>> *Usage*: Backform FilleControl >>>>>> >>>>>> schema:[{ >>>>>> id: 'select_file', label: '{{ _('Select File')}}', >>>>>> type: 'text', *control*: *Backform.FileControl*, >>>>>> *dialog_type: '*select_file*'*, *supp_types: [*'*', 'pdf', 'text', >>>>>> 'patch', 'py'*],* >>>>>> * dialog_title: '*Title to appear on dialog*", * >>>>>> * btn_primary: '*Save File*'* >>>>>> }] >>>>>> >>>>>> Please review the patch. >>>>>> >>>>>> On Wed, May 4, 2016 at 6:35 PM, Surinder Kumar < >>>>>> surinder.kumar@enterprisedb.com> wrote: >>>>>> >>>>>>> Hi >>>>>>> >>>>>>> PFA updated patch with resolved review comments. >>>>>>> >>>>>>> On Thu, Apr 28, 2016 at 6:39 PM, Neel Patel < >>>>>>> neel.patel@enterprisedb.com> wrote: >>>>>>> >>>>>>>> Hi Surinder, >>>>>>>> >>>>>>>> Please find additional comments as below. >>>>>>>> >>>>>>>> 1. In Windows OS, when we try to open the dialog with default >>>>>>>> preference value then it gives error as below. >>>>>>>> >>>>>>>> 2016-04-28 13:07:44,716: ERROR pgadmin: Exception on >>>>>>>> /file_manager/filemanager/2530270/ [POST] >>>>>>>> Traceback (most recent call last): >>>>>>>> File >>>>>>>> "C:\Projects\venv_python_2_7\Lib\site-packages\flask\app.py", line 1817, in >>>>>>>> wsgi_app >>>>>>>> response = self.full_dispatch_request() >>>>>>>> File >>>>>>>> "C:\Projects\venv_python_2_7\Lib\site-packages\flask\app.py", line 1477, in >>>>>>>> full_dispatch_request >>>>>>>> rv = self.handle_user_exception(e) >>>>>>>> File >>>>>>>> "C:\Projects\venv_python_2_7\Lib\site-packages\flask\app.py", line 1381, in >>>>>>>> handle_user_exception >>>>>>>> reraise(exc_type, exc_value, tb) >>>>>>>> File >>>>>>>> "C:\Projects\venv_python_2_7\Lib\site-packages\flask\app.py", line 1475, in >>>>>>>> full_dispatch_request >>>>>>>> rv = self.dispatch_request() >>>>>>>> File >>>>>>>> "C:\Projects\venv_python_2_7\Lib\site-packages\flask\app.py", line 1461, in >>>>>>>> dispatch_request >>>>>>>> return self.view_functions[rule.endpoint](**req.view_args) >>>>>>>> File >>>>>>>> "C:\Projects\venv_python_2_7\Lib\site-packages\flask_login.py", line 758, >>>>>>>> in decorated_view >>>>>>>> return func(*args, **kwargs) >>>>>>>> File >>>>>>>> "C:\Projects\pgadmin4\web\pgadmin\misc\file_manager\__init__.py", line 629, >>>>>>>> in file_manager >>>>>>>> return getattr(myFilemanager, mode)(**kwargs) >>>>>>>> File >>>>>>>> "C:\Projects\pgadmin4\web\pgadmin\misc\file_manager\__init__.py", line 421, >>>>>>>> in getfolder >>>>>>>> filelist = self.list_filesystem(dir, path, trans_data, >>>>>>>> file_type) >>>>>>>> File >>>>>>>> "C:\Projects\pgadmin4\web\pgadmin\misc\file_manager\__init__.py", line 331, >>>>>>>> in list_filesystem >>>>>>>> for f in sorted(os.listdir(orig_path)): >>>>>>>> WindowsError: [Error 161] The specified path is invalid: '//*.*' >>>>>>>> >>>>>>>> Now the default path will always be the users directory. I have >>>>>>> used *os.path.expanduser('~') *which prints user directory. It >>>>>>> works for all operating systems. >>>>>>> >>>>>>>> >>>>>>>> 2. Folder having write only permission should not allow to read the >>>>>>>> directory. Same way read only permission folder should not allow to create >>>>>>>> the folder. Currently it gives below error. >>>>>>>> >>>>>>>> PermissionError: [Errno 13] Permission denied: >>>>>>>> '/home/neel/Projects/pgadmin4_file_manager/write_only_premission/' >>>>>>>> >>>>>>> Fixed. >>>>>>> >>>>>>>> >>>>>>>> 3. In Windows OS, when we open the file manager dialog, no >>>>>>>> directories listed though we have directories in the folder. Due to that we >>>>>>>> are not able to >>>>>>>> test all the functionality in windows. Once we fix this issue >>>>>>>> then we test all the functionality in windows OS. >>>>>>>> >>>>>>>> We debug the issue and found that issue is with the json >>>>>>>> response which includes the HTML tags. >>>>>>>> >>>>>>> Fixed. It still have issues in very older browsers. I will fix it. >>>>>>> >>>>>>>> >>>>>>>> 4. In Windows OS, file manager dialog have issue with layout. We >>>>>>>> are getting some margin at top before buttons. >>>>>>>> >>>>>>> Fixed. >>>>>>> >>>>>>>> >>>>>>>> 5. When we give any special characters to folder name that it gives >>>>>>>> error saying "Folder does not exist". >>>>>>>> Same is applicable when we give dialog_type to create_file >>>>>>>> >>>>>>> Fixed. >>>>>>> >>>>>>>> >>>>>>>> 6. In create_file mode, after giving the filename it should display >>>>>>>> the name of the file to text control. >>>>>>>> >>>>>>> Fixed. >>>>>>> >>>>>>>> >>>>>>>> 7. In create_file mode, when user gives the filename and click on >>>>>>>> the any blank area of dialog then name is getting cleared. >>>>>>>> >>>>>>> Fixed. >>>>>>> >>>>>>>> >>>>>>>> 8. When we upload the new file through file manager then it is not >>>>>>>> showing in the list though we have selected "All files" options. >>>>>>>> >>>>>>> Fixed. >>>>>>> >>>>>>>> >>>>>>>> 9. When we rename the folder in "Table mode" then font-family gets >>>>>>>> changed. It is not happened in "Grid" mode. >>>>>>>> >>>>>>> Fixed. >>>>>>> >>>>>>>> >>>>>>>> 10. When we try to download the file then it goes into loop and >>>>>>>> opens up 20-30 dialogs at the same time. >>>>>>>> >>>>>>> Fixed. >>>>>>> >>>>>>>> >>>>>>>> 11. "Rename" button is enabled even though we have not selected the >>>>>>>> files/folder to rename and when we click on the "Rename" button it gives >>>>>>>> below >>>>>>>> error. >>>>>>>> >>>>>>>> TypeError: orig_value is undefined >>>>>>>> >>>>>>> Fixed. >>>>>>> >>>>>>>> 12. "Delete" button is enabled even though we have not selected the >>>>>>>> files/folder to delete and when we click on the "Delete" button it gives >>>>>>>> below error. >>>>>>>> TypeError: path is undefined >>>>>>>> >>>>>>> Fixed. >>>>>>> >>>>>>>> >>>>>>>> Do let us know if you have queries. >>>>>>>> >>>>>>>> Thanks, >>>>>>>> Neel Patel >>>>>>>> >>>>>>>> On Wed, Apr 27, 2016 at 9:15 PM, Neel Patel < >>>>>>>> neel.patel@enterprisedb.com> wrote: >>>>>>>> >>>>>>>>> Hi Surinder, >>>>>>>>> >>>>>>>>> I have applied the patch file and below are some observations. >>>>>>>>> >>>>>>>>> - When we create the new folder and hit the enter then we are >>>>>>>>> getting the below error. >>>>>>>>> >>>>>>>>> TypeError: argument of type 'NoneType' is not >>>>>>>>> iterable >>>>>>>>> >>>>>>>>> - I have just added the new control in "Import" dialog and >>>>>>>>> observed that new control is getting added in new tab called "General". I >>>>>>>>> think it should not create the new "General" tab. >>>>>>>>> - "Select" and "Cancel" buttons font is different then other >>>>>>>>> dialogs. >>>>>>>>> >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> Neel Patel >>>>>>>>> >>>>>>>>> On Wed, Apr 27, 2016 at 6:18 PM, Surinder Kumar < >>>>>>>>> surinder.kumar@enterprisedb.com> wrote: >>>>>>>>> >>>>>>>>>> Hi, >>>>>>>>>> >>>>>>>>>> The patch is for *File Manager and Backform FileControl*. >>>>>>>>>> >>>>>>>>>> *File Manager:* It allows user to store their files at one >>>>>>>>>> place. The user can set path to this directory in preferences which file >>>>>>>>>> manger will use. >>>>>>>>>> >>>>>>>>>> It will be used by various modules of pgAdmin4 such as >>>>>>>>>> *import data from file, query tool, backup & recovery tool* so >>>>>>>>>> on.. It allows user to perform various operations such as: >>>>>>>>>> >>>>>>>>>> - File deletion >>>>>>>>>> - File upload >>>>>>>>>> - Create new directory >>>>>>>>>> - File rename >>>>>>>>>> - File download and >>>>>>>>>> - List files & folders in list and grid view. >>>>>>>>>> >>>>>>>>>> *FileControl: *This control is used with *File Manager. *It can >>>>>>>>>> be used for: >>>>>>>>>> >>>>>>>>>> - File Selection >>>>>>>>>> - Folder Selection >>>>>>>>>> - File Creation >>>>>>>>>> - Storage Manager Dialog.( it supports all operations listed >>>>>>>>>> above). >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Usage*:* >>>>>>>>>> >>>>>>>>>> schema:[{ >>>>>>>>>> id: 'select_file', label: '{{ _('Select File')}}', >>>>>>>>>> type: 'text', *control*: *Backform.FileControl*, >>>>>>>>>> *dialog_type: 'select_file'*, *supp_types: ['*', 'pdf', >>>>>>>>>> 'text', 'patch', 'py']* >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> Where: >>>>>>>>>> >>>>>>>>>> - *control* - It should be *Backform.FileControl* >>>>>>>>>> - *dialog_type *- the type of dialog to use. >>>>>>>>>> - options can be: *select_file, select_folder, create_file & >>>>>>>>>> storage_dialog*. >>>>>>>>>> - *supp_types(*not mandatory) - the types of files allowed to >>>>>>>>>> show and upload. >>>>>>>>>> >>>>>>>>>> Please review the patch and let me know for the review comments. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Thanks >>>>>>>>>> Surinder Kumar >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Sent via pgadmin-hackers mailing list ( >>>>>>>>>> pgadmin-hackers@postgresql.org) >>>>>>>>>> To make changes to your subscription: >>>>>>>>>> http://www.postgresql.org/mailpref/pgadmin-hackers >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) >>>>> To make changes to your subscription: >>>>> http://www.postgresql.org/mailpref/pgadmin-hackers >>>>> >>>>> >>>> >>> >> > --001a114178565e984f0533440cc7 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,

Please find patch with following is= sues/changes fixed:

1. Rename file/folder not work= ing in list view.
2. Selection folder only should not allow to se= lect file.
3. Ui changes in table list to match with the p= gadmin color styles.
4. Custom STORAGE_DIR path don't = list files/folders when opened in window system.
5. Code cleanup,= formatting & did proper commenting.
6. In file selection mod= e, the value typed in text box not setting into backbone model.
7= . Removed create file code, it should be handled on module using it.
<= div>8. Written a common function to make ajax request, instead of writing i= ndividual functions for same task.

Issue to be = fixed: When FileControl is used with 'nested' type, it redirect= s to some url when it is opened up.
Once it gets fixed. I will se= nd patch for this issue.


Thanks
Surinder Kumar

On Sat, May 14, 2016 at 12:40 AM, Ashesh Vashi = <ashe= sh.vashi@enterprisedb.com> wrote:
Thanks - committed with some tweaks!

--

Th= anks & Regards,

Ashesh Vashi
Enterpri= seDB INDIA: Enterprise PostgreSQL Company

<= br>

<= a href=3D"http://www.linkedin.com/in/asheshvashi" target=3D"_blank">http= ://www.linkedin.com/in/asheshvashi


On Fri, May 13= , 2016 at 7:36 PM, Surinder Kumar <surinder.kumar@enterprise= db.com> wrote:
Hi,

PFA patch with changes:
1. Line of co= de shouldn't exceed greater than 80.
2. Can't consider bo= olean as string while comparing.

On Fri, May 13, 2016 at 4:33 PM, Surin= der Kumar <surinder.kumar@enterprisedb.com> wr= ote:
Hi,

<= div>Please find the patch for the following improvements:
1. File= Manager won't show Volumes on Windows when STORAGE_DIR is set to None.<= /div>


On Fri, May 13, 2016 at 12:24 AM, Ashesh Vashi <ashesh.vash= i@enterprisedb.com> wrote:
Hi Surinder,

Thanks - it = was committed!

As discussed personally, there are = few improvement needed.

* Do not show non applicab= le buttons, whenever no files/directory available in the storage root direc= tory.
Done=C2=A0
* In crate mode, use dimmer with = the overwrite warning, so that - it does not allow to deselect the current = selection.
Done=C2=A0
* The default selection for = the file type selection combo box should be other than 'All Files'.=
Done=C2=A0
* File type selection combo box should= support file type description.
=C2=A0 i.e.
Query/SQL F= ile (*.sql)
CSV File (*.csv)
All Files (*.* | *)
<= div>
Please put that in the TODO file, we will handle that in= future.
I have added it into TODO file= .=C2=A0

I must apologies for a mistake for not giving you the credi= t for the work, I forgot to set the author while committing it.
I tried setting it again to set the author without any success. :-(

Thanks for the patch.
I will be more careful= next time.

--

Thanks & Regards,

Ashesh Vashi<= /span>
Ent= erpriseDB INDIA: Enterprise PostgreSQL Company

<= br>

<= a href=3D"http://www.linkedin.com/in/asheshvashi" target=3D"_blank">http= ://www.linkedin.com/in/asheshvashi

<= div>

On Thu, May 12, 2016 at 12:18 AM, Surinder K= umar <surinder.kumar@enterprisedb.com> wrote:<= br>
Hi,

P= FA updated patch with following issues fixed:
1. not listing file= s based on default file type selected.
2. load css file using = 9;get_own_stylesheets' method instead of loading from 'base.html= 9;.
3. setting custom dialog title and button not working.
<= /div>

On= Wed, May 11, 2016 at 3:03 PM, Surinder Kumar <surinder.kuma= r@enterprisedb.com> wrote:
=

---------- Forwar= ded message ----------
From: Surinder Kuma= r <surinder.kumar@enterprisedb.com>
Dat= e: Tue, May 10, 2016 at 11:43 PM
Subject: Re: [pgadmin-hackers][pgAdmin4= ][Patch]: File Manager & Backform FileControl
To: Neel Patel <neel.patel@en= terprisedb.com>
Cc: pgadmin-hackers <pgadmin-hackers@postgresql.org>


Hi,

Please find updat= ed path with couple of review comments given by Ashesh Vashi.
1. = Add variable STORAGE_DIR in configuration settings which decides the= directory to list when File manager is opens, previously
= we have provided this option in preferences which is removed due to securit= y issues.
2. List all available Volumes by default when=C2=A0S= TORAGE_DIR is set to empty for Windows platform.
3. Al= so, added support to allow user to provide
Dialog title and cu= stom name for primary(OK) button,

Usage= :

1. Set variable=C2=A0STORAGE_DIR to some = value=C2=A0in config.py.
2. Import it in your module as following= :
=C2=A0 =C2=A0import config
=C2=A0 =C2=A0con= fig.STORAGE_DIR

Usage: Backform= =C2=A0FilleControl

schema:[{
=C2=A0 id: 'select_fi= le', label: '{{ _('Select File')}}',=C2=A0
=
=C2=A0 type= : 'text',=C2=A0control:=C2=A0Backform.FileControl,
=C2=A0=C2=A0dialog_type: 'select_file',=C2=A0supp_types: ['*', 'pdf', 'text', 'patch= 9;, 'py'],
=C2=A0 dialog_title: 'Title to appear= on dialog",=C2=A0
=C2=A0 btn_primary: 'Save File'
}]

Please review the patch.
<= div>

On Wed, May 4= , 2016 at 6:35 PM, Surinder Kumar <surinder.kumar@enterprise= db.com> wrote:
Hi

PFA updated patch with resolved review comments.=

On Th= u, Apr 28, 2016 at 6:39 PM, Neel Patel <neel.patel@enterprisedb.= com> wrote:
Hi Su= rinder,

Please find additional comments as below.<= /div>

1.=C2=A0 In Windows OS, when we try to open t= he dialog with default preference value then it gives error as below.
=

2016-04-28 13:07:44,716: ERROR =C2=A0pgadmin: =C2=A0 = =C2=A0 =C2=A0 =C2=A0Exception on /file_manager/filemanager/2530270/ [POST]<= /div>
Traceback (most recent call last):
=C2=A0 File "C:= \Projects\venv_python_2_7\Lib\site-packages\flask\app.py", line 1817, = in wsgi_app
=C2=A0 =C2=A0 response =3D self.full_dispatch_request= ()
=C2=A0 File "C:\Projects\venv_python_2_7\Lib\site-package= s\flask\app.py", line 1477, in full_dispatch_request
=C2=A0 = =C2=A0 rv =3D self.handle_user_exception(e)
=C2=A0 File "C:\= Projects\venv_python_2_7\Lib\site-packages\flask\app.py", line 1381, i= n handle_user_exception
=C2=A0 =C2=A0 reraise(exc_type, exc_value= , tb)
=C2=A0 File "C:\Projects\venv_python_2_7\Lib\site-pack= ages\flask\app.py", line 1475, in full_dispatch_request
=C2= =A0 =C2=A0 rv =3D self.dispatch_request()
=C2=A0 File "C:\Pr= ojects\venv_python_2_7\Lib\site-packages\flask\app.py", line 1461, in = dispatch_request
=C2=A0 =C2=A0 return self.view_functions[rule.en= dpoint](**req.view_args)
=C2=A0 File "C:\Projects\venv_pytho= n_2_7\Lib\site-packages\flask_login.py", line 758, in decorated_view
=C2=A0 =C2=A0 return func(*args, **kwargs)
=C2=A0 File &= quot;C:\Projects\pgadmin4\web\pgadmin\misc\file_manager\__init__.py", = line 629, in file_manager
=C2=A0 =C2=A0 return getattr(myFilemana= ger, mode)(**kwargs)
=C2=A0 File "C:\Projects\pgadmin4\web\p= gadmin\misc\file_manager\__init__.py", line 421, in getfolder
=C2=A0 =C2=A0 filelist =3D self.list_filesystem(dir, path, trans_data, fi= le_type)
=C2=A0 File "C:\Projects\pgadmin4\web\pgadmin\misc\= file_manager\__init__.py", line 331, in list_filesystem
=C2= =A0 =C2=A0 for f in sorted(os.listdir(orig_path)):
WindowsError: = [Error 161] The specified path is invalid: '//*.*'

Now the default path will always b= e the users directory. I have used os.path.expanduser('~') w= hich prints user directory.=C2=A0It works for all operating systems.=C2=A0<= /div>

2. Folder having write only permission should not allow to read the d= irectory. Same way read only permission folder should not allow to create t= he folder. =C2=A0 =C2=A0 Currently it gives below error.

=C2=A0 =C2=A0PermissionError: [Errno 13] Permission denied: '/ho= me/neel/Projects/pgadmin4_file_manager/write_only_premission/'
Fixed.=C2=A0
=

3. In Windows OS, when we open th= e file manager dialog, no directories listed though we have directories in = the folder. Due to that we are not able to=C2=A0
=C2=A0 =C2=A0 te= st all the functionality in windows. Once we fix this issue then we test al= l the functionality in windows OS.
=C2=A0 =C2=A0
=C2=A0= =C2=A0We debug the issue and found that issue is with the json response wh= ich includes the HTML tags.
Fixed= . It still have issues in very older browsers. I will fix it.

4. In Windows OS, = file manager dialog have issue with layout. We are getting some margin at t= op before buttons.
Fixed.=C2=A0

5. Whe= n we give any special characters to folder name that it gives error saying = "Folder does not exist".
=C2=A0 =C2=A0 Same is applicab= le when we give dialog_type to create_file
Fixed.=C2=A0
=
=C2=A0 =C2=A0
6. In create_file mode, after giving the filen= ame it should display the name of the file to text control.
Fixed.=C2=A0

7. In create_file mode, when user gives = the filename and click on the any blank area of dialog then name is getting= cleared.
Fixed.=C2=A0

8. When we uplo= ad the new file through file manager then it is not showing in the list tho= ugh we have selected "All files" options.
Fixed.=C2=A0

9. When we rename the folder in "Table mode= " then font-family gets changed. It is not happened in "Grid"= ; mode.
Fixed.=C2=A0
<= blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l= eft-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;pa= dding-left:1ex">

10. When we try t= o download the file then it goes into loop and opens up 20-30 dialogs at th= e same time.
Fixed.=C2=A0

11. "Re= name" button is enabled even though we have not selected the files/fol= der to rename and when we click on the "Rename" button it gives b= elow=C2=A0
=C2=A0 =C2=A0 =C2=A0error.

= =C2=A0 =C2=A0 TypeError: orig_value is undefined
Fixed.=C2=A0
<= div>
12. "= Delete" button is enabled even though we have not selected the files/f= older to delete and when we click on the "Delete" button it gives= below error.
=C2=A0 =C2=A0 =C2=A0TypeError: path is undefined
Fixed.=C2=A0

Do let us know if you h= ave queries.

Thanks,
Neel Patel

On Wed, Apr 27, 2016 at 9:15 PM, Neel Patel <neel.patel@enterp= risedb.com> wrote:
Hi Su= rinder,

I have applied the patch file and below are some= observations.
  • When we create the new folder and hit the = enter then we are getting the below error.
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0TypeError: argument of t= ype 'NoneType' is not iterable
  • I have just = added the new control in "Import" dialog and observed that new co= ntrol is getting added in new tab called "General". I think it sh= ould not create the new "General" tab.
  • "Select"= and "Cancel" buttons font is different then other dialogs.
  • <= /ul>

Thanks,
Neel Patel

On Wed, Apr = 27, 2016 at 6:18 PM, Surinder Kumar <surinder.kumar@enterpri= sedb.com> wrote:
Hi,

The patch is for File Manager and = Backform=C2=A0FileControl.

File Manager<= /u>:=C2=A0It allows user to store their files at one place. The user ca= n set path to this directory in preferences which file manger will use.

It will be used by various modules of pgAdmin4 such a= s
import data from file, query tool, backup & recovery too= l=C2=A0so on.. It allows user to perform various operations such as:=C2= =A0
  • File deletion
  • File upload
  • Create = new directory
  • File rename
  • File download and=C2=A0
  • <= li>List files & folders in list and grid view.
= FileControl:=C2=A0This control is used with=C2=A0File Mana= ger.=C2=A0It=C2=A0can be used for:
  • File Selection =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
  • Folder=C2=A0Selection=C2= =A0 =C2=A0 =C2=A0=C2=A0
  • File Creation =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0=C2=A0
  • Storage Manager Dialog.( it supports al= l operations listed above).

Usage:

schema:[{
=C2=A0 id: 'select_file', label: '{{ _('Select File')}= }',=C2=A0
=C2=A0 typ= e: 'text',=C2=A0control:=C2=A0Backform.FileControl,
=C2=A0=C2=A0dialog_typ= e: 'select_file',=C2=A0supp_types: ['*', 'pdf= 9;, 'text', 'patch', 'py']
}

Wher= e:
  • control=C2=A0- It should be=C2=A0Backform.FileControl
  • dialog= _type=C2=A0- the type of dialog to use.
  • options can be:=C2= =A0=C2=A0select_file, select_folder, create_file & storage_dialog.
  • supp_types(not mandatory)=C2=A0- the types of = files allowed to show and upload.
Please re= view the patch and let me know for the review comments.


Thanks
Surinde= r Kumar


--
Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers=









--
Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers=






--001a114178565e984f0533440cc7-- --001a114178565e98530533440cc9 Content-Type: application/octet-stream; name="FileManager_fixes.patch" Content-Disposition: attachment; filename="FileManager_fixes.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iofmcevg0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2MvZmlsZV9tYW5hZ2VyL19f aW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFnZXIvX19p bml0X18ucHkKaW5kZXggYmM2N2E1OS4uOTZmNjFjOCAxMDA2NDQKLS0tIGEv d2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFnZXIvX19pbml0X18ucHkKKysr IGIvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFnZXIvX19pbml0X18ucHkK QEAgLTY3Nyw2ICs2NzcsNyBAQCBjbGFzcyBGaWxlbWFuYWdlcihvYmplY3Qp OgogICAgICAgICBkaXIgPSBzZWxmLmRpcgogICAgICAgICBlcnJfbXNnID0g JycKICAgICAgICAgY29kZSA9IDEKKyAgICAgICAgbmFtZSA9IHVucXVvdGUo bmFtZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3JpZ19wYXRoID0g InswfXsxfSIuZm9ybWF0KGRpciwgcGF0aCkKICAgICAgICAgICAgIG5ld05h bWUgPSAnezB9ezF9Jy5mb3JtYXQob3JpZ19wYXRoLCBuYW1lKQpAQCAtNjg5 LDQwICs2OTAsNyBAQCBjbGFzcyBGaWxlbWFuYWdlcihvYmplY3QpOgoKICAg ICAgICAgcmVzdWx0ID0gewogICAgICAgICAgICAgJ1BhdGgnOiBwYXRoLAot ICAgICAgICAgICAgJ05hbWUnOiBuZXdOYW1lLAotICAgICAgICAgICAgJ0Vy cm9yJzogZXJyX21zZywKLSAgICAgICAgICAgICdDb2RlJzogY29kZQotICAg ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgZGVmIGNy ZWF0ZV9maWxlKHNlbGYsIHBhdGgsIG5hbWUsIHJlcT1Ob25lKToKLSAgICAg ICAgIiIiCi0gICAgICAgIENyZWF0ZSBuZXcgZmlsZSBmdW5jdGlvbmFsaXR5 Ci0gICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc2VsZi52YWxpZGF0ZV9y ZXF1ZXN0KCdjcmVhdGUnKToKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAg ICAgICAgICAgJ0Vycm9yJzogZ2V0dGV4dCgnTm90IGFsbG93ZWQnKSwKLSAg ICAgICAgICAgICAnQ29kZSc6IDEKLSAgICAgICAgICAgIH0KLQotICAgICAg ICBkaXIgPSBzZWxmLmRpcgotICAgICAgICBlcnJfbXNnID0gJycKLSAgICAg ICAgY29kZSA9IDEKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3JpZ19w YXRoID0gInswfXsxfSIuZm9ybWF0KGRpciwgcGF0aCkKLSAgICAgICAgICAg IG5ld05hbWUgPSAnezB9ezF9Jy5mb3JtYXQob3JpZ19wYXRoLCBuYW1lKQot ICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG5ld05hbWUpOgot ICAgICAgICAgICAgICAgIG9wZW4obmV3TmFtZSwgJ3cnKQotICAgICAgICAg ICAgICAgIGNvZGUgPSAwCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAg ICAgICAgIGVycl9tc2cgPSBnZXR0ZXh0KCJFcnJvcjogRmlsZSBhbHJlYWR5 IGV4aXN0cyIpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAg ICAgICAgICAgIGVycl9tc2cgPSAiRXJyb3I6IHswfSIuZm9ybWF0KGUuc3Ry ZXJyb3IpCi0KLSAgICAgICAgcmVzdWx0ID0gewotICAgICAgICAgICAgJ1Bh dGgnOiBwYXRoLAotICAgICAgICAgICAgJ05hbWUnOiBuZXdOYW1lLAorICAg ICAgICAgICAgJ05hbWUnOiBuYW1lLAogICAgICAgICAgICAgJ0Vycm9yJzog ZXJyX21zZywKICAgICAgICAgICAgICdDb2RlJzogY29kZQogICAgICAgICB9 CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci9z dGF0aWMvY3NzL2ZpbGVfbWFuYWdlci5jc3MgYi93ZWIvcGdhZG1pbi9taXNj L2ZpbGVfbWFuYWdlci9zdGF0aWMvY3NzL2ZpbGVfbWFuYWdlci5jc3MKaW5k ZXggMDY5ZDAwMy4uNmQ1MzhmMyAxMDA3NTUKLS0tIGEvd2ViL3BnYWRtaW4v bWlzYy9maWxlX21hbmFnZXIvc3RhdGljL2Nzcy9maWxlX21hbmFnZXIuY3Nz CisrKyBiL3dlYi9wZ2FkbWluL21pc2MvZmlsZV9tYW5hZ2VyL3N0YXRpYy9j c3MvZmlsZV9tYW5hZ2VyLmNzcwpAQCAtNDAsOSArNDAsMTIgQEAKICAgb3Zl cmZsb3c6IGF1dG87CiAgIC8qIG5vIG1hcmdpbiBvciBib3JkZXIgYWxsb3dl ZCAqLwogfQorLmZpbGVfbGlzdGluZyAjY29udGVudHMuZ3JpZCBsaS5zZWxl Y3RlZCB7CisgIGJvcmRlcjogMXB4IHNvbGlkICNEOUVERjc7Cit9CgotLmZp bGVpbmZvICNjb250ZW50cyBsaS5zZWxlY3RlZCwgLmZpbGVpbmZvICNjb250 ZW50cyB0Ym9keSB0ci5zZWxlY3RlZCB7Ci0gIGJhY2tncm91bmQ6ICNEOUVE Rjc7CisuZmlsZV9saXN0aW5nICNjb250ZW50cy5ncmlkIGxpLnNlbGVjdGVk LCAuZmlsZWluZm8gI2NvbnRlbnRzIHRib2R5IHRyLnNlbGVjdGVkIHsKKyAg YmFja2dyb3VuZDogI0Q5RURGNyAhaW1wb3J0YW50OwogfQoKIC5maWxlaW5m byAjY29udGVudHMgbGkgLmZtX2ZpbGVfcmVuYW1lLApAQCAtNTQsNiArNTcs MTcgQEAKICAgaGVpZ2h0OiAxN3B4OwogfQoKKy5maWxlaW5mbyAjY29udGVu dHMgbGkgcCA+IHNwYW4ubGVzc190ZXh0LAorLmZpbGVpbmZvIHRhYmxlI2Nv bnRlbnRzIHRyIHRkOmZpcnN0LWNoaWxkIHAgc3Bhbi5sZXNzX3RleHQgewor ICB3aWR0aDogMTAwJTsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICB0 ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKKyAgb3ZlcmZsb3c6IGhpZGRlbjsK KyAgdGV4dC1hbGlnbjogY2VudGVyOworICB3aGl0ZS1zcGFjZTogbm93cmFw OworICBwYWRkaW5nOiAwIDEwcHg7Cit9CisKIC5maWxlaW5mbyB0YWJsZSNj b250ZW50cyB0ciB0ZCBwIHsKICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwog ICBtYXJnaW4tYm90dG9tOiAwOwpAQCAtMTY0LDEzICsxNzgsMTQgQEAgeDot by1wcmVmb2N1cywgLmZpbGUtaW5wdXQtY29udGFpbmVyIHt0b3A6MTZweDt3 aWR0aDoxOThweDt9CiAgIGRpc3BsYXk6IGJsb2NrOwogICBmbG9hdDogbGVm dDsKICAgd2lkdGg6IDEwMHB4OwotICBtaW4taGVpZ2h0OiA4MHB4OworICBo ZWlnaHQ6IDgwcHg7CiAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgb3ZlcmZs b3c6IGhpZGRlbjsKICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgLXdlYmtp dC1ib3JkZXItcmFkaXVzOiAycHg7CiAgIC1tb3otYm9yZGVyLXJhZGl1czog MnB4OwogICBib3JkZXItcmFkaXVzOiAycHg7CisgIGJvcmRlcjogMXB4IHNv bGlkICNmZmY7CiB9CgogZGl2LmNsaXAgewpAQCAtMTk5LDEyICsyMTQsMTIg QEAgZGl2LmNsaXAgewoKIC5maWxlX2xpc3RpbmcgI2NvbnRlbnRzLmxpc3Qg dGhlYWQgewogICBiYWNrZ3JvdW5kOiByZ2IoMjQ0LDI0MSwyMzcpOyAvKiBP bGQgYnJvd3NlcnMgKi8KLSAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3Jh ZGllbnQodG9wLCByZ2JhKDI0NCwyNDEsMjM3LDEpIDAlLCByZ2JhKDIxNCwy MTIsMjA5LDEpIDEwMCUpOyAvKiBGRjMuNisgKi8KLSAgYmFja2dyb3VuZDog LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRv bSwgY29sb3Itc3RvcCgwJSxyZ2JhKDI0NCwyNDEsMjM3LDEpKSwgY29sb3It c3RvcCgxMDAlLHJnYmEoMjE0LDIxMiwyMDksMSkpKTsgLyogQ2hyb21lLFNh ZmFyaTQrICovCi0gIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRp ZW50KHRvcCwgcmdiYSgyNDQsMjQxLDIzNywxKSAwJSxyZ2JhKDIxNCwyMTIs MjA5LDEpIDEwMCUpOyAvKiBDaHJvbWUxMCssU2FmYXJpNS4xKyAqLwotICBi YWNrZ3JvdW5kOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDI0NCwy NDEsMjM3LDEpIDAlLHJnYmEoMjE0LDIxMiwyMDksMSkgMTAwJSk7IC8qIE9w ZXJhIDExLjEwKyAqLwotICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRp ZW50KHRvcCwgcmdiYSgyNDQsMjQxLDIzNywxKSAwJSxyZ2JhKDIxNCwyMTIs MjA5LDEpIDEwMCUpOyAvKiBJRTEwKyAqLwotICBiYWNrZ3JvdW5kOiBsaW5l YXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI0NCwyNDEsMjM3LDEpIDAl LHJnYmEoMjE0LDIxMiwyMDksMSkgMTAwJSk7IC8qIFczQyAqLworICBiYWNr Z3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoNDQsIDEx OCwgMTgwLCAwLjcxKSAwJSwgcmdiYSg0NCwgMTE4LCAxODAsIDAuOTgpIDEw MCUpOyAvKiBGRjMuNisgKi8KKyAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFk aWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3Rv cCgwJSxyZ2JhKDQ0LCAxMTgsIDE4MCwgMC43MSkpLCBjb2xvci1zdG9wKDEw MCUscmdiYSg0NCwgMTE4LCAxODAsIDAuOTgpKSk7IC8qIENocm9tZSxTYWZh cmk0KyAqLworICBiYWNrZ3JvdW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVu dCh0b3AsIHJnYmEoNDQsIDExOCwgMTgwLCAwLjcxKSAwJSxyZ2JhKDQ0LCAx MTgsIDE4MCwgMC45OCkgMTAwJSk7IC8qIENocm9tZTEwKyxTYWZhcmk1LjEr ICovCisgIGJhY2tncm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsIHJn YmEoNDQsIDExOCwgMTgwLCAwLjcxKSAwJSxyZ2JhKDQ0LCAxMTgsIDE4MCwg MC45OCkgMTAwJSk7IC8qIE9wZXJhIDExLjEwKyAqLworICBiYWNrZ3JvdW5k OiAtbXMtbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSg0NCwgMTE4LCAxODAs IDAuNzEpIDAlLHJnYmEoNDQsIDExOCwgMTgwLCAwLjk4KSAxMDAlKTsgLyog SUUxMCsgKi8KKyAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJv dHRvbSwgcmdiYSg0NCwgMTE4LCAxODAsIDAuNzEpIDAlLHJnYmEoNDQsIDEx OCwgMTgwLCAwLjk4KSAxMDAlKQogICBib3JkZXItYm90dG9tOiAxcHggc29s aWQgI2NjYzsKICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICB3aWR0aDog MTAwJTsKQEAgLTIxMyw2ICsyMjgsNyBAQCBkaXYuY2xpcCB7CiAuZmlsZV9s aXN0aW5nICNjb250ZW50cy5saXN0IHRoIHsKICAgZm9udC13ZWlnaHQ6IGJv bGQ7CiAgIGN1cnNvcjogcG9pbnRlcjsKKyAgY29sb3I6ICNmZmY7CiB9Cgog LmZpbGVfbGlzdGluZyAjY29udGVudHMubGlzdCB0aC50YWJsZXNvcnRlci1o ZWFkZXJBc2MsCkBAIC0yMjYsMTUgKzI0MiwxMSBAQCBkaXYuY2xpcCB7CiAg IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEo MjE0LDIxMiwyMDksMSkgMCUscmdiYSgyNDQsMjQxLDIzNywxKSAxMDAlKTsg LyogVzNDICovCiB9CgotLmZpbGVfbGlzdGluZyAjY29udGVudHMubGlzdCB0 ZCB7Ci0gIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgI2NjYzsKLX0KLQog LmZpbGVfbGlzdGluZyAjY29udGVudHMubGlzdCB0ZDpmaXJzdC1jaGlsZCB7 CiAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgIHBhZGRpbmctbGVmdDogMDsK ICAgd2lkdGg6IDEwMCU7Ci0gIHBhZGRpbmctbGVmdDogMjJweDsKKyAgcGFk ZGluZy1sZWZ0OiAxMnB4OwogICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVw ZWF0OwogICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAzcHggY2VudGVyOwogfQpA QCAtMjUzLDE2ICsyNjUsMTUgQEAgZGl2LmNsaXAgewogICBtYXJnaW4tcmln aHQ6IDVweDsKIH0KCi0uZmlsZV9saXN0aW5nICNjb250ZW50cy5saXN0IHRi b2R5IHRyOmhvdmVyIHsKLSAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKLSAg Y3Vyc29yOiBwb2ludGVyOworLmZpbGVfbGlzdGluZyAjY29udGVudHMubGlz dCB0Ym9keSB0cjpudGgtY2hpbGQoZXZlbik6aG92ZXIgeworICBiYWNrZ3Jv dW5kLWNvbG9yOiAjZjVmNWY1ICFpbXBvcnRhbnQ7CiB9CgogLmZpbGVfbGlz dGluZyAjY29udGVudHMuZ3JpZCBsaTpob3ZlciB7CiAgIGJvcmRlcjogMXB4 IHNvbGlkICNFNUU1RTU7CiAgIGJhY2tncm91bmQtY29sb3I6ICNGN0Y3Rjc7 CiAgIGN1cnNvcjogcG9pbnRlcjsKLSAgbWF4LWhlaWdodDogNzhweDsKKyAg aGVpZ2h0OiA4MHB4OwogfQoKIC5tZXRhIHsKQEAgLTMyMCw3ICszMzEsOCBA QCBidXR0b24ubGlzdCBzcGFuIHsKICAgdG9wOiAwOwogfQoKLS5idG4tZ3Jv dXAuZmlsZW1hbmFnZXItYnRuLWdyb3VwIC5idG46bm90KDpmaXJzdC1jaGls ZCk6bm90KDpsYXN0LWNoaWxkKSB7CisuYnRuLWdyb3VwLmZpbGVtYW5hZ2Vy LWJ0bi1ncm91cCAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1j aGlsZCksCisuYnRuLWdyb3VwLmZpbGVtYW5hZ2VyLXBhdGgtZ3JvdXAgLmJ0 bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpIHsKICAgYm9y ZGVyLWxlZnQ6IDFweCBzb2xpZCAjQTlBOUE5OwogfQoKQEAgLTM3Nyw2ICsz ODksMTQgQEAgYnV0dG9uLmxpc3Qgc3BhbiB7CiAgIHdpZHRoOiAxMDAlOwog fQoKKy5maWxlX21hbmFnZXIgLmZpbGVpbmZvICNjb250ZW50cyB0Ym9keSB0 cjpudGgtY2hpbGQoZXZlbikgeworICBiYWNrZ3JvdW5kOiAjZWVlOworfQor CisuZmlsZV9tYW5hZ2VyIC5maWxlaW5mbyAjY29udGVudHMgdGhlYWQgdHIg dGg6bm90KDpmaXJzdC1jaGlsZCkgeworICBib3JkZXItbGVmdDogMXB4IHNv bGlkICNmZmY7Cit9CisKIC5maWxlX21hbmFnZXIgLmZpbGVpbmZvICNjb250 ZW50cyB0aGVhZCB0ciB0aDpudGgtY2hpbGQoMSksCiAuZmlsZV9tYW5hZ2Vy IC5maWxlaW5mbyAjY29udGVudHMgdGJvZHkgdHIgdGQ6bnRoLWNoaWxkKDEp IHsKICAgcG9zaXRpb246IHJlbGF0aXZlOwpAQCAtMzg5LDYgKzQwOSw3IEBA IGJ1dHRvbi5saXN0IHNwYW4gewogICB3aWR0aDogMTUycHg7CiAgIG1pbi13 aWR0aDogMTUycHg7CiAgIG1heC13aWR0aDogMTUycHg7CisgIHBhZGRpbmct bGVmdDogMTBweDsKIH0KCiAuZmlsZV9tYW5hZ2VyIC5maWxlaW5mbyAjY29u dGVudHMgdGJvZHkgdHIgdGQ6bnRoLWNoaWxkKDIpIHsKQEAgLTQwMSwxMiAr NDIyLDEzIEBAIGJ1dHRvbi5saXN0IHNwYW4gewogICB3aWR0aDogMTk3cHg7 CiAgIG1pbi13aWR0aDogMTk3cHg7CiAgIG1heC13aWR0aDogMTk3cHg7Cisg IHBhZGRpbmctbGVmdDogMTBweDsKIH0KCiAuZmlsZV9tYW5hZ2VyIC5maWxl aW5mbyAjY29udGVudHMgdGJvZHkgdHIgdGQ6bnRoLWNoaWxkKDMpIHsKLSAg d2lkdGg6IDE4MHB4OwotICBtaW4td2lkdGg6IDE4MHB4OwotICBtYXgtd2lk dGg6IDE4MHB4OworICB3aWR0aDogMTc3cHg7CisgIG1pbi13aWR0aDogMTc3 cHg7CisgIG1heC13aWR0aDogMTc3cHg7CiB9CgogLmZpbGVfbWFuYWdlciAu ZmlsZWluZm8gI2NvbnRlbnRzIHRib2R5IHsKQEAgLTQxNSwxMCArNDM3LDEy IEBAIGJ1dHRvbi5saXN0IHNwYW4gewogICB3aWR0aDogMTAwJTsKICAgaGVp Z2h0OiBjYWxjKDEwMCUgLSAzMHB4KTsKIH0KKwogLmZpbGVfbWFuYWdlciAu ZmlsZWluZm8gI2NvbnRlbnRzIHRib2R5IHRyewotICBkaXNwbGF5OiB0YWJs ZTsKKyAgLypkaXNwbGF5OiB0YWJsZTsqLwogICBtYXgtd2lkdGg6IDEwMCU7 CiAgIHdpZHRoOiAxMDAlOworICBjdXJzb3I6IHBvaW50ZXI7CiB9CgogLmZp bGVfbWFuYWdlciAudXBsb2FkX2ZpbGUgewpAQCAtNDU3LDExICs0ODEsMTQg QEAgYnV0dG9uLmxpc3Qgc3BhbiB7CiB9CgogLmZpbGVfbWFuYWdlciAjdXBs b2FkZXIgLmJ0bi1ncm91cCAuc2hvd19zZWxlY3RlZF9maWxlIHsKLSAgZmxv YXQ6IGxlZnQ7Ci0gIHRleHQtYWxpZ246IGxlZnQ7CiAgIHZlcnRpY2FsLWFs aWduOiBtaWRkbGU7CisgIHRleHQtYWxpZ246IGxlZnQ7CiAgIHBhZGRpbmc6 IDRweCAwIDAgNXB4OwotICBoZWlnaHQ6IDEwMCU7CisgIGRpc3BsYXk6IGlu bGluZS1ibG9jazsKKyAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgd2lkdGg6IGNh bGMoMTAwJSAtIDczcHgpOworICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsK KyAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKIH0KCiAuZmlsZWluZm8gLmZpbGVf bGlzdGluZyB7CkBAIC01NTksNiArNTg2LDcgQEAgYnV0dG9uLmxpc3Qgc3Bh biB7CiB9CgogLmZpbGVfdXBsb2FkX21haW4gLmR6LXByb2dyZXNzIHsKKyAg aGVpZ2h0OiAyMXB4ICFpbXBvcnRhbnQ7CiAgIHRvcDogODNweCAhaW1wb3J0 YW50OwogICBib3JkZXI6IDFweCBzb2xpZCAjOGE2ZDNiOwogICBib3JkZXIt cmFkaXVzOiAwICFpbXBvcnRhbnQ7CkBAIC02NTUsNyArNjgzLDcgQEAgYS5k ei1yZW1vdmUgewogLmZpbGVfbWFuYWdlciAuZmlsZWluZm8gI2NvbnRlbnRz IC5mYS1sb2NrLnRibF9sb2NrX2ljb24gewogICBjb2xvcjogcmVkOwogICBw b3NpdGlvbjogYWJzb2x1dGU7Ci0gIGxlZnQ6IDI5cHg7CisgIGxlZnQ6IDE5 cHg7CiAgIHRvcDogNXB4OwogICBmb250LXNpemU6IDEwcHg7CiB9CkBAIC02 NzYsOCArNzA0LDkgQEAgYS5kei1yZW1vdmUgewogLmZpbGVfbGlzdGluZyAu bm9fZm9sZGVyX2ZvdW5kIHsKICAgdGV4dC1hbGlnbjogY2VudGVyOwogICBw b3NpdGlvbjogYWJzb2x1dGU7Ci0gIHRvcDogMzU7CisgIHRvcDogMzVweDsK ICAgd2lkdGg6IDEwMCU7CisgIGZvbnQtc2l6ZTogMTRweDsKIH0KCiAuZmls ZWluZm8gLmlzX2ZpbGVfcmVwbGFjZSB7CmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1wbGF0ZXMvZmlsZV9tYW5hZ2Vy L2pzL2ZpbGVfbWFuYWdlci5qcyBiL3dlYi9wZ2FkbWluL21pc2MvZmlsZV9t YW5hZ2VyL3RlbXBsYXRlcy9maWxlX21hbmFnZXIvanMvZmlsZV9tYW5hZ2Vy LmpzCmluZGV4IGJmNzE3MWYuLjVhYjc3YzEgMTAwNjQ0Ci0tLSBhL3dlYi9w Z2FkbWluL21pc2MvZmlsZV9tYW5hZ2VyL3RlbXBsYXRlcy9maWxlX21hbmFn ZXIvanMvZmlsZV9tYW5hZ2VyLmpzCisrKyBiL3dlYi9wZ2FkbWluL21pc2Mv ZmlsZV9tYW5hZ2VyL3RlbXBsYXRlcy9maWxlX21hbmFnZXIvanMvZmlsZV9t YW5hZ2VyLmpzCkBAIC0xMzEsNyArMTMxLDcgQEAgZGVmaW5lKFsKICAgICAg ICAgICAgICAgICAvL2Nsb3NlRXZlbnQuY2FuY2VsID0gdHJ1ZTsKICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoY2xvc2VFdmVudC5idXR0 b24udGV4dCA9PSAie3sgXygnU2VsZWN0JykgfX0iKSB7Ci0gICAgICAgICAg ICAgICAgaWYoJCgnLmZpbGVpbmZvJykuZGF0YSgndmlldycpID09ICdncmlk Jyl7CisgICAgICAgICAgICAgICAgaWYoJCgnLmZpbGVpbmZvJykuZGF0YSgn dmlldycpID09ICdncmlkJykgewogICAgICAgICAgICAgICAgICAgc2VsX2Zp bGUgPSAkKCcuZmlsZWluZm8nKS5maW5kKCcjY29udGVudHMgbGkuc2VsZWN0 ZWQgcCBzcGFuJykuYXR0cigndGl0bGUnKTsKICAgICAgICAgICAgICAgICB9 IGVsc2UgewogICAgICAgICAgICAgICAgICAgc2VsX2ZpbGUgPSAkKCcuZmls ZWluZm8gdGJvZHkgdHIuc2VsZWN0ZWQgdGQgcCBzcGFuJykuYXR0cigndGl0 bGUnKTsKQEAgLTIzOSw3ICsyMzksNyBAQCBkZWZpbmUoWwogICAgICAgICAg ICAgfSwKICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbihjbG9zZUV2 ZW50KSB7CiAgICAgICAgICAgICAgIGlmIChjbG9zZUV2ZW50LmJ1dHRvbi50 ZXh0ID09ICJ7eyBfKCdTZWxlY3QnKSB9fSIpIHsKLSAgICAgICAgICAgICAg ICBpZigkKCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3JykgPT0gJ2dyaWQnKXsK KyAgICAgICAgICAgICAgICBpZigkKCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3 JykgPT0gJ2dyaWQnKSB7CiAgICAgICAgICAgICAgICAgICBzZWxfZmlsZSA9 ICQoJy5maWxlaW5mbycpLmZpbmQoJyNjb250ZW50cyBsaS5zZWxlY3RlZCAg cCBzcGFuJykuYXR0cigndGl0bGUnKTsKICAgICAgICAgICAgICAgICB9IGVs c2UgewogICAgICAgICAgICAgICAgICAgc2VsX2ZpbGUgPSAkKCcuZmlsZWlu Zm8gdGJvZHkgdHIuc2VsZWN0ZWQgdGQgcCBzcGFuJykuYXR0cigndGl0bGUn KTsKQEAgLTM0Niw3ICszNDYsNyBAQCBkZWZpbmUoWwogICAgICAgICAgICAg fSwKICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbihjbG9zZUV2ZW50 KSB7CiAgICAgICAgICAgICAgIGlmIChjbG9zZUV2ZW50LmJ1dHRvbi50ZXh0 ID09ICJ7eyBfKCdTZWxlY3QnKSB9fSIpIHsKLSAgICAgICAgICAgICAgICBp ZigkKCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3JykgPT0gJ2dyaWQnKXsKKyAg ICAgICAgICAgICAgICBpZigkKCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3Jykg PT0gJ2dyaWQnKSB7CiAgICAgICAgICAgICAgICAgICBzZWxfZmlsZSA9ICQo Jy5maWxlaW5mbycpLmZpbmQoJyNjb250ZW50cyBsaS5zZWxlY3RlZCBwIHNw YW4nKS5hdHRyKCd0aXRsZScpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7 CiAgICAgICAgICAgICAgICAgICBzZWxfZmlsZSA9ICQoJy5maWxlaW5mbyB0 Ym9keSB0ci5zZWxlY3RlZCB0ZCBwIHNwYW4nKS5hdHRyKCd0aXRsZScpOwpA QCAtNDgxLDkgKzQ4MSw5IEBAIGRlZmluZShbCiAgICAgICAgICAgICAgICAg ZGF0YVR5cGU6ICdqc29uJywKICAgICAgICAgICAgICAgICBjb250ZW50VHlw ZTogImFwcGxpY2F0aW9uL3gtZG93bmxvYWQ7IGNoYXJzZXQ9dXRmLTgiLAog ICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwKLSAgICAgICAgICAgICAg ICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwKXsKKyAgICAgICAgICAgICAgICBz dWNjZXNzOiBmdW5jdGlvbihyZXNwKSB7CiAgICAgICAgICAgICAgICAgICBk YXRhID0gcmVzcC5kYXRhLnJlc3VsdDsKLSAgICAgICAgICAgICAgICAgIGlm KGRhdGFbJ0NvZGUnXSA9PT0gMCl7CisgICAgICAgICAgICAgICAgICBpZihk YXRhWydDb2RlJ10gPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgaXNf ZXhpc3QgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg ICAgICAgICAgICAgICAgICAgaXNfZXhpc3QgPSBmYWxzZTsKQEAgLTQ5Miwz OSArNDkyLDggQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgfSk7CiAgICAg ICAgICAgICAgIHJldHVybiBpc19leGlzdDsKICAgICAgICAgICAgIH0sCi0g ICAgICAgICAgICBjcmVhdGVfZmlsZTogZnVuY3Rpb24oKSB7Ci0gICAgICAg ICAgICAgIHZhciBzZWxlY3RlZF9pdGVtID0gJCgnLmFsbG93ZWRfZmlsZV90 eXBlcyAuY3JlYXRlX2lucHV0IGlucHV0W3R5cGU9InRleHQiXScpLnZhbCgp LAotICAgICAgICAgICAgICAgICAgaXNfZXhpc3QgPSBmYWxzZSwKLSAgICAg ICAgICAgICAgICAgIGlzX2NyZWF0ZWQgPSBmYWxzZTsKLQotICAgICAgICAg ICAgICB2YXIgcG9zdF9kYXRhID0gewotICAgICAgICAgICAgICAgICdwYXRo JzogJCgnLmN1cnJlbnRwYXRoJykudmFsKCksCi0gICAgICAgICAgICAgICAg J25hbWUnOiBzZWxlY3RlZF9pdGVtLAotICAgICAgICAgICAgICAgICdtb2Rl JzogJ2NyZWF0ZV9maWxlJwotICAgICAgICAgICAgICB9OwotCi0gICAgICAg ICAgICAgICQuYWpheCh7Ci0gICAgICAgICAgICAgICAgdHlwZTogJ1BPU1Qn LAotICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHBvc3Rf ZGF0YSksCi0gICAgICAgICAgICAgICAgdXJsOiBmaWxlQ29ubmVjdG9yICsg dHJhbnNfaWQrJy8nLAotICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNv bicsCi0gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ICJhcHBsaWNhdGlv bi94LWRvd25sb2FkOyBjaGFyc2V0PXV0Zi04IiwKLSAgICAgICAgICAgICAg ICBhc3luYzogZmFsc2UsCi0gICAgICAgICAgICAgICAgc3VjY2VzczogZnVu Y3Rpb24ocmVzcCl7Ci0gICAgICAgICAgICAgICAgICBkYXRhID0gcmVzcC5k YXRhLnJlc3VsdDsKLSAgICAgICAgICAgICAgICAgIGlmKGRhdGFbJ0NvZGUn XSA9PT0gMCl7Ci0gICAgICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LnN1Y2Nl c3MoIk5ldyBGaWxlIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LiIpOwotICAgICAg ICAgICAgICAgICAgICBpc19jcmVhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGFsZXJ0aWZ5 LmVycm9yKGRhdGFbJ0Vycm9yJ10pOwotICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgcmV0 dXJuIGlzX2NyZWF0ZWQ7Ci0gICAgICAgICAgICB9LAogICAgICAgICAgICAg Y2FsbGJhY2s6IGZ1bmN0aW9uKGNsb3NlRXZlbnQpIHsKLSAgICAgICAgICAg ICAgaWYgKGNsb3NlRXZlbnQuYnV0dG9uLnRleHQgPT0gInt7IF8oJ0NyZWF0 ZScpIH19Iil7CisgICAgICAgICAgICAgIGlmIChjbG9zZUV2ZW50LmJ1dHRv bi50ZXh0ID09ICJ7eyBfKCdDcmVhdGUnKSB9fSIpIHsKICAgICAgICAgICAg ICAgICB2YXIgc2VsZWN0ZWRfaXRlbSA9ICQoJy5hbGxvd2VkX2ZpbGVfdHlw ZXMgLmNyZWF0ZV9pbnB1dCBpbnB1dFt0eXBlPSJ0ZXh0Il0nKS52YWwoKTsK ICAgICAgICAgICAgICAgICB2YXIgbmV3RmlsZSA9ICQoJy5jdXJyZW50cGF0 aCcpLnZhbCgpICsgc2VsZWN0ZWRfaXRlbTsKICAgICAgICAgICAgICAgICBu ZXdGaWxlID0gbmV3RmlsZS5zdWJzdHIoMSk7CkBAIC01MzMsMTcgKzUwMiwx MSBAQCBkZWZpbmUoWwogICAgICAgICAgICAgICAgICAgY2xvc2VFdmVudC5j YW5jZWwgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIHZhciBpc19jcmVhdGVk ID0gdGhpcy5jcmVhdGVfZmlsZSgpOwotICAgICAgICAgICAgICAgICAgaWYg KGlzX2NyZWF0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcGdBZG1pbi5C cm93c2VyLkV2ZW50cy50cmlnZ2VyKCdwZ2FkbWluLXN0b3JhZ2U6ZmluaXNo X2J0bjpjcmVhdGVfZmlsZScsIG5ld0ZpbGUpOwotICAgICAgICAgICAgICAg ICAgICByZW1vdmVUcmFuc0lkKHRyYW5zX2lkKTsKLSAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg ICAgICAgICBjbG9zZUV2ZW50LmNhbmNlbCA9IHRydWU7Ci0gICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICBwZ0FkbWluLkJyb3dzZXIu RXZlbnRzLnRyaWdnZXIoJ3BnYWRtaW4tc3RvcmFnZTpmaW5pc2hfYnRuOmNy ZWF0ZV9maWxlJywgbmV3RmlsZSk7CisgICAgICAgICAgICAgICAgICByZW1v dmVUcmFuc0lkKHRyYW5zX2lkKTsKICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYgKGNsb3NlRXZlbnQuYnV0 dG9uLnRleHQgPT0gInt7IF8oJ0NhbmNlbCcpIH19Iil7CisgICAgICAgICAg ICAgIGlmIChjbG9zZUV2ZW50LmJ1dHRvbi50ZXh0ID09ICJ7eyBfKCdDYW5j ZWwnKSB9fSIpIHsKICAgICAgICAgICAgICAgICByZW1vdmVUcmFuc0lkKHRy YW5zX2lkKTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSwKZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2MvZmlsZV9tYW5hZ2VyL3RlbXBs YXRlcy9maWxlX21hbmFnZXIvanMvdXRpbGl0eS5qcyBiL3dlYi9wZ2FkbWlu L21pc2MvZmlsZV9tYW5hZ2VyL3RlbXBsYXRlcy9maWxlX21hbmFnZXIvanMv dXRpbGl0eS5qcwppbmRleCBmMGI0NWFjLi4zZGM3MGJiIDEwMDc1NQotLS0g YS93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1wbGF0ZXMvZmls ZV9tYW5hZ2VyL2pzL3V0aWxpdHkuanMKKysrIGIvd2ViL3BnYWRtaW4vbWlz Yy9maWxlX21hbmFnZXIvdGVtcGxhdGVzL2ZpbGVfbWFuYWdlci9qcy91dGls aXR5LmpzCkBAIC0xMiwxMDggKzEyLDU0IEBACiAoZnVuY3Rpb24oJCkgewog InVzZSBzdHJpY3QiOwoKLS8vIFVzZXIgYWxlcnRpZnkgb2JqZWN0Ci12YXIg YWxlcnRpZnkgPSByZXF1aXJlKCJhbGVydGlmeSIpOwotCisvLyB1c2UgYWxl cnRpZnkgYW5kIHVuZGVyc2NvcmUganMKK3ZhciBhbGVydGlmeSA9IHJlcXVp cmUoImFsZXJ0aWZ5IiksCisgICAgXyA9IHJlcXVpcmUoInVuZGVyc2NvcmUi KTsKCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogICBEZWZpbmUgZnVuY3Rpb25zIHVzZWQg Zm9yIHZhcmlvdXMgb3BlcmF0aW9ucwogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCi0vLyBm dW5jdGlvbiB0byByZXRyaWV2ZSBHRVQgcGFyYW1zCi0kLnVybFBhcmFtID0g ZnVuY3Rpb24obmFtZSkgewotICB2YXIgcmVzdWx0cyA9IG5ldyBSZWdFeHAo J1tcXD8mXScgKyBuYW1lICsgJz0oW14mI10qKScpLmV4ZWMod2luZG93Lmxv Y2F0aW9uLmhyZWYpOwotICBpZiAocmVzdWx0cykgewotICAgIHJldHVybiBy ZXN1bHRzWzFdOwotICB9IGVsc2UgewotICAgIHJldHVybiAwOwotICB9Ci19 OwotCisvLyByZXR1cm4gZmlsZSBleHRlbnNpb24KIHZhciBnZXRGaWxlRXh0 ZW5zaW9uID0gZnVuY3Rpb24obmFtZSkgewotICAgIHZhciBmb3VuZCA9IG5h bWUubGFzdEluZGV4T2YoJy4nKSArIDE7Ci0gICAgcmV0dXJuIChmb3VuZCA+ IDAgPyBuYW1lLnN1YnN0cihmb3VuZCkgOiAiIik7CisgIHZhciBmb3VuZCA9 IG5hbWUubGFzdEluZGV4T2YoJy4nKSArIDE7CisgIHJldHVybiAoZm91bmQg PiAwID8gbmFtZS5zdWJzdHIoZm91bmQpIDogIiIpOwogfTsKCisvLyByZXR1 cm5zIGZpbGVuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uCiB2YXIgZ2V0RmlsZU5h bWUgPSBmdW5jdGlvbihuYW1lKSB7CiAgIHZhciBmbV9maWxlbmFtZSA9IG5h bWU7CiAgIGlmIChmbV9maWxlbmFtZS5sZW5ndGggPiAxNSApIHsKLSAgICAg IGZtX2ZpbGVuYW1lID0gbmFtZS5zdWJzdHIoMCwgMTApICsnLi4uJzsKKyAg ICBmbV9maWxlbmFtZSA9IG5hbWUuc3Vic3RyKDAsIDEwKSArJy4uLic7CiAg IH0KICAgcmV0dXJuIGZtX2ZpbGVuYW1lOwogfTsKCi0vLyBzZW5kIGEgcmVx dWVzdCB0byBnZXQgdHJhbnNhY3Rpb24gaWQKLXZhciBnZXRUcmFuc0lkID0g ZnVuY3Rpb24oKSB7Ci0gIHJldHVybiAkLmFqYXgoewotICAgIGFzeW5jOiBm YWxzZSwKLSAgICB1cmw6ICJ7eyB1cmxfZm9yKCdmaWxlX21hbmFnZXIuaW5k ZXgnKSB9fWdldF90cmFuc19pZCIsCi0gICAgZGF0YVR5cGU6ICJqc29ucCIK LSAgfSk7Ci19OwotCi0vLyBMb2FkIGxhbmd1YWdlIGZpbGUKLXZhciBsb2Fk TGFuZ0ZpbGUgPSBmdW5jdGlvbihlbmpzKSB7Ci0gIGlmICgkLnVybFBhcmFt KCdsYW5nQ29kZScpICE9PSAwICYmIGZpbGVfZXhpc3RzIChlbmpzKSkgewot ICAgIGN1bHR1cmUgPSAkLnVybFBhcmFtKCdsYW5nQ29kZScpOwotICB9Ci0g IHJldHVybiAkLmFqYXgoewotICAgIGFzeW5jOiBmYWxzZSwKLSAgICB1cmw6 IGVuanMsCi0gICAgZGF0YVR5cGU6ICdqc29ucCcsCi0gICAgY29udGVudFR5 cGU6ICJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04IgotICB9KTsK LX07Ci0KLXZhciB1c2VyY29uZmlnID0gZmlsZV9tYW5hZ2VyX2NvbmZpZ19q c29uOwotCi0vLyBXZSByZXRyaWV2ZSBjb25maWcgc2V0dGluZ3MgZnJvbSBm aWxlbWFuYWdlci5jb25maWcuanMKLXZhciBsb2FkQ29uZmlnRmlsZSA9IGZ1 bmN0aW9uICh0eXBlKSB7Ci0gIHR5cGUgPSAodHlwZW9mIHR5cGUgPT09ICJ1 bmRlZmluZWQiKSA/ICJ1c2VyIiA6IHR5cGU7Ci0gIHZhciB1cmw7Ci0gIGlm ICh0eXBlID09ICd1c2VyJykgewotICAgIHVybCA9IGZpbGVfbWFuYWdlcl9j b25maWdfanNvbjsKLSAgfQorLyogQ29tbW9uIGZ1bmN0aW9uIHRvIGxvYWQ6 CisgKiBlbi5qcyBsYW5ndWFnZSBmaWxlCisgKiBmaWxlX21hbmFnZXJfY29u ZmlnLmpzIGNvbmZpZyBmaWxlCisgKiByZXR1cm4gdHJhbnNhY3Rpb24gaWQK KyAqLwordmFyIGxvYWREYXRhID0gZnVuY3Rpb24odXJsKSB7CiAgIHJldHVy biAkLmFqYXgoewogICAgIGFzeW5jOiBmYWxzZSwKICAgICB1cmw6IHVybCwK LSAgICBkYXRhVHlwZTogImpzb25wIiwKKyAgICBkYXRhVHlwZTogJ2pzb25w JywKICAgICBjb250ZW50VHlwZTogImFwcGxpY2F0aW9uL2pzb247IGNoYXJz ZXQ9dXRmLTgiCiAgIH0pOwogfTsKCi0vKgotICogRm9yY2VzIGNvbHVtbnMg dG8gZmlsbCB0aGUgbGF5b3V0IHZlcnRpY2FsbHkuCi0gKiBDYWxsZWQgb24g aW5pdGlhbCBwYWdlIGxvYWQgYW5kIG9uIHJlc2l6ZS4KLSAqLwotdmFyIHNl dERpbWVuc2lvbnMgPSBmdW5jdGlvbigpIHsKLSAgdmFyIG1haW5fY29udGFp bmVyX2hlaWdodCA9ICggJCh3aW5kb3cpLmhlaWdodCgpICkgLyAyICsgMzU7 Ci0gIHZhciBuZXdIID0gbWFpbl9jb250YWluZXJfaGVpZ2h0IC0gJCgnI3Vw bG9hZGVyJykuaGVpZ2h0KCkgLSAzMDsKLX07Ci0KLS8vIERpc3BsYXkgTWlu IFBhdGgKLXZhciBkaXNwbGF5UGF0aCA9IGZ1bmN0aW9uKHBhdGgpIHsKLSAg aWYgKGNvbmZpZy5vcHRpb25zLnNob3dGdWxsUGF0aCA9PT0gZmFsc2UpIHsK LSAgICAvLyBpZiBhICJkaXNwbGF5UGF0aERlY29yYXRvciIgZnVuY3Rpb24g aXMgZGVmaW5lZCwgdXNlIGl0IHRvIGRlY29yYXRlIHBhdGgKLSAgICByZXR1 cm4gJ2Z1bmN0aW9uJyA9PT0gKHR5cGVvZiBkaXNwbGF5UGF0aERlY29yYXRv cikKLSAgICAgICAgID8gZGlzcGxheVBhdGhEZWNvcmF0b3IocGF0aCkKLSAg ICAgICAgIDogcGF0aC5yZXBsYWNlKGZpbGVSb290LCAiLyIpOworLy8gU2V0 IGVuYWJsZS9kaXNhYmxlIHN0YXRlIG9mIGxpc3QgYW5kIGdyaWQgdmlldwor dmFyIHNldFZpZXdCdXR0b25zRm9yID0gZnVuY3Rpb24odmlld01vZGUpIHsK KyAgaWYgKHZpZXdNb2RlID09ICdncmlkJykgeworICAgICAgJCgnLmdyaWQn KS5hZGRDbGFzcygnT04nKTsKKyAgICAgICQoJy5saXN0JykucmVtb3ZlQ2xh c3MoJ09OJyk7CiAgIH0gZWxzZSB7Ci0gICAgcmV0dXJuIHBhdGg7CisgICAg ICAkKCcubGlzdCcpLmFkZENsYXNzKCdPTicpOworICAgICAgJCgnLmdyaWQn KS5yZW1vdmVDbGFzcygnT04nKTsKICAgfQogfTsKCi0vLyBTZXQgdGhlIHZp ZXcgYnV0dG9ucyBzdGF0ZQotdmFyIHNldFZpZXdCdXR0b25zRm9yID0gZnVu Y3Rpb24odmlld01vZGUpIHsKLSAgICBpZiAodmlld01vZGUgPT0gJ2dyaWQn KSB7Ci0gICAgICAgICQoJy5ncmlkJykuYWRkQ2xhc3MoJ09OJyk7Ci0gICAg ICAgICQoJy5saXN0JykucmVtb3ZlQ2xhc3MoJ09OJyk7Ci0gICAgfSBlbHNl IHsKLSAgICAgICAgJCgnLmxpc3QnKS5hZGRDbGFzcygnT04nKTsKLSAgICAg ICAgJCgnLmdyaWQnKS5yZW1vdmVDbGFzcygnT04nKTsKLSAgICB9Ci19Owot CiAvKgogICogcHJlZ19yZXBsYWNlCiAgKi8KQEAgLTE5MywxMCArMTM5LDcg QEAgdmFyIGZvcm1hdEJ5dGVzID0gZnVuY3Rpb24oYnl0ZXMpIHsKICAgfQog fTsKCi0vKgotICogSGFuZGxlIEVycm9yLiBGcmVlemUgaW50ZXJhY3RpdmUg YnV0dG9ucyBhbmQgZGlzcGxheQotICogZXJyb3IgbWVzc2FnZS4gQWxzbyBj YWxsZWQgd2hlbiBhdXRoKCkgZnVuY3Rpb24gcmV0dXJuIGZhbHNlIChDb2Rl ID09ICItMSIpCi0gKi8KKy8vIEZyZWV6ZSB0b29sYmFyIGJ1dHRvbnMgYW5k IGRpc3BsYXkgZXJyb3JzCiB2YXIgaGFuZGxlRXJyb3IgPSBmdW5jdGlvbihl cnJNc2cpIHsKICAgJCgnLnN0b3JhZ2VfZGlhbG9nIC5uZXdmaWxlJykuYXR0 cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKICAgJCgnLnN0b3JhZ2VfZGlh bG9nIC51cGxvYWQnKS5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOwpA QCAtMjA3LDI3ICsxNTAsMTIgQEAgdmFyIGhhbmRsZUVycm9yID0gZnVuY3Rp b24oZXJyTXNnKSB7CiAgKiBUZXN0IGlmIERhdGEgc3RydWN0dXJlIGhhcyB0 aGUgJ2NhcCcgY2FwYWJpbGl0eQogICogJ2NhcCcgaXMgb25lIG9mICdzZWxl Y3QnLCAncmVuYW1lJywgJ2RlbGV0ZScsICdkb3dubG9hZCcKICAqLwotZnVu Y3Rpb24gaGFzX2NhcGFiaWxpdHkoZGF0YSwgY2FwKSB7Cit2YXIgaGFzX2Nh cGFiaWxpdHkgPSBmdW5jdGlvbihkYXRhLCBjYXApIHsKICAgaWYgKHR5cGVv ZihkYXRhLkNhcGFiaWxpdGllcykgPT0gInVuZGVmaW5lZCIpIHsKICAgICBy ZXR1cm4gdHJ1ZTsKICAgfSBlbHNlIHsKICAgICByZXR1cm4gKCQuaW5BcnJh eShjYXAsIGRhdGEuQ2FwYWJpbGl0aWVzKSA+IC0xKTsKICAgfQotfQotCi0v LyBUZXN0IGlmIGZpbGUgaXMgYXV0aG9yaXplZAotdmFyIGlzQXV0aG9yaXpl ZEZpbGUgPSBmdW5jdGlvbihmaWxlbmFtZSkgewotICByZXR1cm4gKCgKLSAg ICBjb25maWcuc2VjdXJpdHkudXBsb2FkUG9saWN5ID09ICdESVNBTExPV19B TEwnICYmCi0gICAgJC5pbkFycmF5KAotICAgICAgZ2V0RXh0ZW5zaW9uKGZp bGVuYW1lKSwgY29uZmlnLnNlY3VyaXR5LnVwbG9hZFJlc3RyaWN0aW9ucwot ICAgICkgIT0gLTEKLSAgKSB8fCAoCi0gICAgY29uZmlnLnNlY3VyaXR5LnVw bG9hZFBvbGljeSA9PSAnQUxMT1dfQUxMJyAmJgotICAgICQuaW5BcnJheSgK LSAgICAgIGdldEV4dGVuc2lvbihmaWxlbmFtZSksIGNvbmZpZy5zZWN1cml0 eS51cGxvYWRSZXN0cmljdGlvbnMKLSAgICApID09IC0xCi0gICkpOwogfTsK CiAvLyByZXR1cm4gZmlsZW5hbWUgZXh0ZW5zaW9uCkBAIC0yMzgsNyArMTY2 LDcgQEAgdmFyIGdldEV4dGVuc2lvbiA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7 CiAgIHJldHVybiBmaWxlbmFtZS5zcGxpdCgnLicpLnBvcCgpOwogfTsKCi0v LyByZXR1cm4gZmlsZW5hbWUgd2l0aG91dCBleHRlbnNpb24geworLy8gcmV0 dXJuIGZpbGVuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uCiB2YXIgZ2V0RmlsZW5h bWUgPSBmdW5jdGlvbihmaWxlbmFtZSkgewogICBpZiAoZmlsZW5hbWUubGFz dEluZGV4T2YoJy4nKSAhPSAtMSkgewogICAgIHJldHVybiBmaWxlbmFtZS5z dWJzdHJpbmcoMCwgZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKSk7CkBAIC0y NTAsNyArMTc4LDggQEAgdmFyIGdldEZpbGVuYW1lID0gZnVuY3Rpb24oZmls ZW5hbWUpIHsKIC8vIGhlbHBmdWwgaW4gc2hvdy9oaWRlIHRvb2xiYXIgYnV0 dG9uIGZvciBXaW5kb3dzCiB2YXIgaGlkZUJ1dHRvbnMgPSBmdW5jdGlvbigp IHsKICAgICByZXR1cm4gKAotICAgICAgY29uZmlnLm9wdGlvbnMucGxhdGZv cm1fdHlwZSA9PSAnd2luMzInICYmICQoJy5jdXJyZW50cGF0aCcpLnZhbCgp ID09ICcnCisgICAgICBjb25maWcub3B0aW9ucy5wbGF0Zm9ybV90eXBlID09 ICd3aW4zMicgJiYKKyAgICAgICQoJy5jdXJyZW50cGF0aCcpLnZhbCgpID09 PSAnJwogICAgICk7CiB9OwoKQEAgLTI2NSw3ICsxOTQsNyBAQCB2YXIgc2V0 VXBsb2FkZXIgPSBmdW5jdGlvbihwYXRoKSB7CgogICBwYXRoID0gZGVjb2Rl VVJJKHBhdGgpOwoKLSAgdmFyIGRpc3BsYXlfc3RyaW5nID0gZGlzcGxheVBh dGgocGF0aCksCisgIHZhciBkaXNwbGF5X3N0cmluZyA9IHBhdGgsCiAgICAg ICBteXBhdGggPSAnJzsKCiAgIC8vIHNwbGl0IHBhdGgKQEAgLTQwMSw3ICsz MzAsNyBAQCB2YXIgc2V0VXBsb2FkZXIgPSBmdW5jdGlvbihwYXRoKSB7CiAg ICAgICBpZiAoZm5hbWUgIT0gJycpIHsKICAgICAgICAgZm9sZGVybmFtZSA9 IGNsZWFuU3RyaW5nKGZuYW1lKTsKICAgICAgICAgdmFyIGQgPSBuZXcgRGF0 ZSgpOyAvLyB0byBwcmV2ZW50IElFIGNhY2hlIGlzc3VlcwotICAgICAgICAk LmdldEpTT04oZmlsZUNvbm5lY3RvciArICc/bW9kZT1hZGRmb2xkZXImcGF0 aD0nICsgJCgnLmN1cnJlbnRwYXRoJykudmFsKCkgKyAnJm5hbWU9JyArIGZv bGRlcm5hbWUgKyAnJnRpbWU9JyArIGQuZ2V0TWlsbGlzZWNvbmRzKCksIGZ1 bmN0aW9uKHJlc3ApIHsKKyAgICAgICAgJC5nZXRKU09OKGZpbGVDb25uZWN0 b3IgKyAnP21vZGU9YWRkZm9sZGVyJnBhdGg9JyArICQoJy5jdXJyZW50cGF0 aCcpLnZhbCgpICsgJyZuYW1lPScgKyBmb2xkZXJuYW1lLCBmdW5jdGlvbihy ZXNwKSB7CiAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3AuZGF0YS5yZXN1 bHQ7CiAgICAgICAgICAgaWYgKHJlc3VsdC5Db2RlID09PSAwKSB7CiAgICAg ICAgICAgICBhbGVydGlmeS5zdWNjZXNzKGxnLnN1Y2Nlc3NmdWxfYWRkZWRf Zm9sZGVyKTsKQEAgLTQyMywxNiArMzUyLDE4IEBAIHZhciBzZXRVcGxvYWRl ciA9IGZ1bmN0aW9uKHBhdGgpIHsKICAqIGFuZCBzaG93L2hpZGUgYnV0dG9u cwogICovCiB2YXIgYmluZFRvb2xiYXIgPSBmdW5jdGlvbihkYXRhKSB7Ci0g IGlmICghaGFzX2NhcGFiaWxpdHkoZGF0YSwgJ3VwbG9hZCcpIHx8IGhpZGVC dXR0b25zKCkpIHsKLSAgICAkKCcuZmlsZV9tYW5hZ2VyJykuZmluZCgnYnV0 dG9uLnVwbG9hZCcpLmhpZGUoKTsKLSAgfSBlbHNlIHsKLSAgICAkKCcuZmls ZV9tYW5hZ2VyJykuZmluZCgnYnV0dG9uLnVwbG9hZCcpLnNob3coKTsKLSAg fQoKLSAgaWYgKCFoYXNfY2FwYWJpbGl0eShkYXRhLCAnY3JlYXRlJykgfHwg aGlkZUJ1dHRvbnMoKSkgewotICAgICQoJy5maWxlX21hbmFnZXInKS5maW5k KCdidXR0b24uY3JlYXRlJykuaGlkZSgpOwotICB9IGVsc2UgewotICAgICAg JCgnLmZpbGVfbWFuYWdlcicpLmZpbmQoJ2J1dHRvbi5jcmVhdGUnKS5zaG93 KCk7CisgIC8vIGhpZGUvc2hvdyByZW5hbWUsIHVwbG9hZCBhbmQgY3JlYXRl IGJ1dHRvbgorICBpZihfLmhhcyhkYXRhLCAnQ2FwYWJpbGl0aWVzJykpIHsK KyAgICBfLmVhY2goZGF0YS5DYXBhYmlsaXRpZXMsIGZ1bmN0aW9uKGNhcCkg eworICAgICAgdmFyIHRhcmdldF9idG4gPSAnYnV0dG9uLicgKyBjYXAsCisg ICAgICAgICAgJHRhcmdldF9lbCA9ICQoJy5maWxlX21hbmFnZXInKS5maW5k KHRhcmdldF9idG4pOworICAgICAgaWYgKCFoYXNfY2FwYWJpbGl0eShkYXRh LCBjYXApIHx8IGhpZGVCdXR0b25zKCkpIHsKKyAgICAgICAgJHRhcmdldF9l bC5oaWRlKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICAkdGFyZ2V0X2Vs LnNob3coKTsKKyAgICAgIH0KKyAgICB9KTsKICAgfQoKICAgaWYgKCFoYXNf Y2FwYWJpbGl0eShkYXRhLCAnZGVsZXRlJykgfHwgaGlkZUJ1dHRvbnMoKSkg ewpAQCAtNDg0LDEyICs0MTUsNiBAQCB2YXIgYmluZFRvb2xiYXIgPSBmdW5j dGlvbihkYXRhKSB7CiAgICAgICB9CiAgICAgfSk7CiAgIH0KLQotICBpZiAo IWhhc19jYXBhYmlsaXR5KGRhdGEsICdyZW5hbWUnKSB8fCBoaWRlQnV0dG9u cygpKSB7Ci0gICAgJCgnLmZpbGVfbWFuYWdlcicpLmZpbmQoJ2J1dHRvbi5y ZW5hbWUnKS5oaWRlKCk7Ci0gIH0gZWxzZSB7Ci0gICAgICAkKCcuZmlsZV9t YW5hZ2VyJykuZmluZCgnYnV0dG9uLnJlbmFtZScpLnNob3coKTsKLSAgfQog fTsKCiAvLyBlbmFibGUvZGlzYWJsZSBidXR0b24gd2hlbiBmaWxlcy9mb2xk ZXIgYXJlIGxvYWRlZApAQCAtNTIyLDI2ICs0NDcsNiBAQCB2YXIgZW5hYmxl X2Rpc2FibGVfYnRuID0gZnVuY3Rpb24oKSB7CiAgICQoJy5maWxlX21hbmFn ZXIgI3VwbG9hZGVyIC5zaG93X3NlbGVjdGVkX2ZpbGUnKS5yZW1vdmUoKTsK IH07CgotLy8gc3dpdGNoIHRvIGZvbGRlciB2aWV3Ci0kKCcuZmlsZV9tYW5h Z2VyIC5maWxlaW5mbycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKLSAg ZW5hYmxlX2Rpc2FibGVfYnRuKCk7Ci19KTsKLQotCi0vLyByZWZyZXNoIGN1 cnJlbnQgZGlyZWN0b3J5Ci0kKCcuZmlsZV9tYW5hZ2VyIC5yZWZyZXNoJyku b24oJ2NsaWNrJywgZnVuY3Rpb24oZSkgewotICBlbmFibGVfZGlzYWJsZV9i dG4oKTsKLSAgdmFyIGN1cnJfcGF0aCA9ICQoJy5jdXJyZW50cGF0aCcpLnZh bCgpLAotICAgICAgcGF0aCA9IGN1cnJfcGF0aC5zdWJzdHJpbmcoCi0gICAg ICAgIDAsIGN1cnJfcGF0aC5sYXN0SW5kZXhPZigiLyIpCi0gICAgICApICsg Ii8iOwotICBnZXRGb2xkZXJJbmZvKHBhdGgpOwotfSk7Ci0KLS8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0gIEl0ZW0gQWN0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogLyoK ICAqIFJlbmFtZSB0aGUgY3VycmVudCBpdGVtIGFuZCByZXR1cm5zIHRoZSBu ZXcgbmFtZS4KICAqIGJ5IGRvdWJsZSBjbGlja2luZyBvciBieSBjbGlja2lu ZyB0aGUgIlJlbmFtZSIgYnV0dG9uIGluCkBAIC02NjAsMTIgKzU2NSw2IEBA IHZhciBkZWxldGVJdGVtID0gZnVuY3Rpb24oZGF0YSkgewogICByZXR1cm4g aXNEZWxldGVkOwogfTsKCi0KLS8vIGhpZGUgbWVzc2FnZSBwcm9tcHQgYW5k IGRpbW1lciBpZiBjbGlja2VkIG5vCi0kKCcuZGVsZXRlX2l0ZW0gYnV0dG9u LmJ0bl9ubycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgewotICAkKCcuZGVs ZXRlX2l0ZW0sIC5maWxlaW5mbyAuZm1fZGltbWVyJykuaGlkZSgpOwotfSk7 Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAgIEZ1bmN0aW9ucyB0byBSZXRyaWV2ZSBG aWxlIGFuZCBGb2xkZXIgRGV0YWlscwogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTc3 MSwxMiArNjcwLDYgQEAgdmFyIGdldEZvbGRlckluZm8gPSBmdW5jdGlvbihw YXRoLCBmaWxlX3R5cGUpIHsKICAgICAiPGltZyBzcmM9J3t7IHVybF9mb3Io J2Jyb3dzZXIuc3RhdGljJywgZmlsZW5hbWU9J2Nzcy9hY2lUcmVlL2ltYWdl L2xvYWQtcm9vdC5naWYnKSB9fSc+IgogICApOwoKLSAgLy8gUmV0cmlldmUg dGhlIGRhdGEgYW5kIGdlbmVyYXRlIHRoZSBtYXJrdXAuCi0gIHZhciBkID0g bmV3IERhdGUoKTsgLy8gdG8gcHJldmVudCBJRSBjYWNoZSBpc3N1ZXMKLSAg aWYgKCQudXJsUGFyYW0oJ3R5cGUnKSkgewotICAgIHVybCArPSAnJnR5cGU9 JyArICQudXJsUGFyYW0oJ3R5cGUnKTsKLSAgfQotCiAgIHZhciBwb3N0X2Rh dGEgPSB7CiAgICAgJ3BhdGgnOiBwYXRoLAogICAgICdtb2RlJzogJ2dldGZv bGRlcicsCkBAIC04NDgsNyArNzQxLDcgQEAgdmFyIGdldEZvbGRlckluZm8g PSBmdW5jdGlvbihwYXRoLCBmaWxlX3R5cGUpIHsKICAgICAgICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgICAgIHJlc3VsdCArPQogICAgICAgICAgICAg ICAgICc8cD48aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZtX2ZpbGVfcmVu YW1lIiAvPicgKwotICAgICAgICAgICAgICAgICc8c3BhbiB0aXRsZT0iJyAr IGZpbGVfbmFtZV9vcmlnaW5hbCsnIj4nICsgZm1fZmlsZW5hbWUgKworICAg ICAgICAgICAgICAgICc8c3BhbiBjbGFzcz0ibGVzc190ZXh0IiB0aXRsZT0i JyArIGZpbGVfbmFtZV9vcmlnaW5hbCsnIj4nICsgZm1fZmlsZW5hbWUgKwog ICAgICAgICAgICAgICAgICc8L3NwYW4+PC9wPic7CiAgICAgICAgICAgICB9 CiAgICAgICAgICAgICBpZiAocHJvcHMuV2lkdGggJiYgcHJvcHMuV2lkdGgg IT0gJycpIHsKQEAgLTkxOSw3ICs4MTIsNyBAQCB2YXIgZ2V0Rm9sZGVySW5m byA9IGZ1bmN0aW9uKHBhdGgsIGZpbGVfdHlwZSkgewogICAgICAgICAgICAg ICByZXN1bHQgKz0gJzxzcGFuIHRpdGxlPSInICsgKGRhdGFba2V5XSkuRmls ZW5hbWUgKyAnIj4nICsKICAgICAgICAgICAgICAgICBmbV9maWxlbmFtZSAr ICc8L3NwYW4+PC90ZD4nOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgICAgcmVzdWx0ICs9ICc8cD48aW5wdXQgdHlwZT0idGV4dCIgY2xh c3M9ImZtX2ZpbGVfcmVuYW1lIi8+PHNwYW4gdGl0bGU9IicgKworICAgICAg ICAgICAgICByZXN1bHQgKz0gJzxwPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFz cz0iZm1fZmlsZV9yZW5hbWUiLz48c3BhbiBjbGFzcz0ibGVzc190ZXh0IiB0 aXRsZT0iJyArCiAgICAgICAgICAgICAgICAgZmlsZV9uYW1lX29yaWdpbmFs ICsgJyI+JyArIGZtX2ZpbGVuYW1lICsgJzwvc3Bhbj48L3A+PC90ZD4nOwog ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHByb3BzLlNpemUgJiYg cHJvcHMuU2l6ZSAhPSAnJykgewpAQCAtOTk0LDExICs4ODcsMTIgQEAgdmFy IGdldEZvbGRlckluZm8gPSBmdW5jdGlvbihwYXRoLCBmaWxlX3R5cGUpIHsK ICAgICAgICAgICAgICAgICAndGFibGUjY29udGVudHMgdGJvZHkgdHIuc2Vs ZWN0ZWQgdGQ6Zmlyc3QtY2hpbGQgcCcKICAgICAgICAgICAgICAgKSwKICAg ICAgICAgICAgICAgb3JpZ192YWx1ZSA9IGRlY29kZVVSSSgkdGhpcy5maW5k KCdzcGFuJykuaHRtbCgpKSwKLSAgICAgICAgICAgICAgbmV3dmFsdWUgPSBv cmlnX3ZhbHVlLnN1YnN0cmluZygwLCBvcmlnX3ZhbHVlLmluZGV4T2YoJy4n KSk7CisgICAgICAgICAgICAgIG5ld3ZhbHVlID0gb3JpZ192YWx1ZS5zdWJz dHJpbmcoMCwgb3JpZ192YWx1ZS5sYXN0SW5kZXhPZignLicpKTsKCi0gICAg ICAgICAgaWYgKG5ld3ZhbHVlID09PSAnJykgewotICAgICAgICAgICBuZXd2 YWx1ZSA9IG9yaWdfdmFsdWU7CisgICAgICAgICAgaWYgKG9yaWdfdmFsdWUu bGFzdEluZGV4T2YoJy8nKSA9PSBvcmlnX3ZhbHVlLmxlbmd0aCAtIDEgfHwg bmV3dmFsdWUgPT09ICcnKSB7CisgICAgICAgICAgICBuZXd2YWx1ZSA9IGRl Y29kZVVSSShvcmlnX3ZhbHVlKTsKICAgICAgICAgICB9CisKICAgICAgICAg ICAkdGhpcy5maW5kKCdpbnB1dCcpLnRvZ2dsZSgpLnZhbChuZXd2YWx1ZSku Zm9jdXMoKTsKICAgICAgICAgICAkdGhpcy5maW5kKCdzcGFuJykudG9nZ2xl KCk7CgpAQCAtMTExNiwxNCArMTAxMCwxMyBAQCB2YXIgZ2V0Rm9sZGVySW5m byA9IGZ1bmN0aW9uKHBhdGgsIGZpbGVfdHlwZSkgewoKICAgICAgICQoJy5m aWxlaW5mbyB0YWJsZSNjb250ZW50cyB0ciB0ZCBwJykub24oJ2RibGNsaWNr JywgZnVuY3Rpb24oZSkgewogICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigp OwotICAgICAgICAvLyBQcm9tcHQgdG8gcmVuYW1lIGZpbGUvZm9sZGVyCiAg ICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyksCiAgICAgICAgICAgICBvcmln X3ZhbHVlID0gZGVjb2RlVVJJKAogICAgICAgICAgICAgICAkdGhpcy5maW5k KCdzcGFuJykuYXR0cigndGl0bGUnKQotICAgICAgICAgICAgKSwKLSAgICAg ICAgICAgIG5ld3ZhbHVlID0gb3JpZ192YWx1ZS5zdWJzdHJpbmcoMCwgb3Jp Z192YWx1ZS5pbmRleE9mKCcuJykpOworICAgICAgICAgICAgKTsKCi0gICAg ICAgIGlmIChuZXd2YWx1ZSA9PT0gJycpIHsKKyAgICAgICAgdmFyIG5ld3Zh bHVlID0gb3JpZ192YWx1ZS5zdWJzdHJpbmcoMCwgb3JpZ192YWx1ZS5sYXN0 SW5kZXhPZignLicpKTsKKyAgICAgICAgaWYgKG9yaWdfdmFsdWUubGFzdElu ZGV4T2YoJy8nKSA9PSBvcmlnX3ZhbHVlLmxlbmd0aCAtIDEgfHwgbmV3dmFs dWUgPT09ICcnKSB7CiAgICAgICAgICAgbmV3dmFsdWUgPSBvcmlnX3ZhbHVl OwogICAgICAgICB9CgpAQCAtMTE4MSw2ICsxMDc0LDcgQEAgdmFyIGdldEZv bGRlckluZm8gPSBmdW5jdGlvbihwYXRoLCBmaWxlX3R5cGUpIHsKICAgICAg IH0pOwoKICAgICAgIHZhciBkYXRhX2NhcCA9IHt9OworICAgICAgZGF0YV9j YXAuQ2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzOwogICAgICAgLyoKICAg ICAgICAqIEJpbmQgY2xpY2sgZXZlbnRzCiAgICAgICAgKiBTZWxlY3QgaXRl bXMgLSBhZm9sZGVyIGRibGNsaWNrCkBAIC0xMjEyLDcgKzExMDYsNiBAQCB2 YXIgZ2V0Rm9sZGVySW5mbyA9IGZ1bmN0aW9uKHBhdGgsIGZpbGVfdHlwZSkg ewogICAgICAgICAgIH0KICAgICAgICAgfSk7CgotICAgICAgICBkYXRhX2Nh cC5DYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXRpZXM7CiAgICAgICAgICQoJy5m aWxlaW5mbycpLmZpbmQoJyNjb250ZW50cyBsaScpLmNsaWNrKGZ1bmN0aW9u KGUpIHsKICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAg ICAgIHZhciBwYXRoID0gZGVjb2RlVVJJKCQodGhpcykuZmluZCgnLmNsaXAg c3BhbicpLmF0dHIoJ2RhdGEtYWx0JykpLApAQCAtMTI0Myw3ICsxMTM2LDYg QEAgdmFyIGdldEZvbGRlckluZm8gPSBmdW5jdGlvbihwYXRoLCBmaWxlX3R5 cGUpIHsKICAgICAgICAgICAgICAgICAnLmZpbGVfbWFuYWdlciAjdXBsb2Fk ZXIgLmZpbGVtYW5hZ2VyLXBhdGgtZ3JvdXAnCiAgICAgICAgICAgICAgICk7 CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIC8vZ2V0Rm9sZGVySW5m byhwYXRoKTsKICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYg KAogICAgICAgICAgICAgICBoYXNfY2FwYWJpbGl0eShkYXRhX2NhcCwgJ3Nl bGVjdF9maWxlJykgJiYKQEAgLTEyOTEsMTIgKzExODMsMTQgQEAgdmFyIGdl dEZvbGRlckluZm8gPSBmdW5jdGlvbihwYXRoLCBmaWxlX3R5cGUpIHsKICAg ICAgICAgICAgICAgJCgnLmZpbGVfbWFuYWdlcl9vaycpLnJlbW92ZUNsYXNz KCdkaXNhYmxlZCcpOwogICAgICAgICAgICAgICAkKCcuZmlsZV9tYW5hZ2Vy IGJ1dHRvbi5kb3dubG9hZCcpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVk Jyk7CiAgICAgICAgICAgICAgICQoJy5maWxlX21hbmFnZXIgYnV0dG9uLmRl bGV0ZSwgLmZpbGVfbWFuYWdlciBidXR0b24ucmVuYW1lJykucmVtb3ZlQXR0 cignZGlzYWJsZWQnKTsKKwogICAgICAgICAgICAgICAvLyBzZXQgc2VsZWN0 ZWQgZm9sZGVyIG5hbWUgaW4gYnJlYWRjcnVtcwogICAgICAgICAgICAgICAk KCcuZmlsZV9tYW5hZ2VyICN1cGxvYWRlciBoMScpLmhpZGUoKTsKICAgICAg ICAgICAgICAgJCgnLmZpbGVfbWFuYWdlciAjdXBsb2FkZXIgLnNob3dfc2Vs ZWN0ZWRfZmlsZScpLnJlbW92ZSgpOwotICAgICAgICAgICAgICAkKCc8c3Bh biBjbGFzcz0ic2hvd19zZWxlY3RlZF9maWxlIj4nK3BhdGgrJzwvc3Bhbj4n KS5hcHBlbmRUbygnLmZpbGVfbWFuYWdlciAjdXBsb2FkZXIgLmZpbGVtYW5h Z2VyLXBhdGgtZ3JvdXAnKTsKKyAgICAgICAgICAgICAgJCgnPHNwYW4gY2xh c3M9InNob3dfc2VsZWN0ZWRfZmlsZSI+JytwYXRoKyc8L3NwYW4+JykuYXBw ZW5kVG8oCisgICAgICAgICAgICAgICAgJy5maWxlX21hbmFnZXIgI3VwbG9h ZGVyIC5maWxlbWFuYWdlci1wYXRoLWdyb3VwJworICAgICAgICAgICAgICAp OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgLy9nZXRGb2xkZXJJbmZv KHBhdGgpOwogICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAo aGFzX2NhcGFiaWxpdHkoZGF0YV9jYXAsICdzZWxlY3RfZmlsZScpICYmIGlz X3Byb3RlY3RlZCA9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgJCh0 aGlzKS5wYXJlbnQoKS5maW5kKCd0ci5zZWxlY3RlZCcpLnJlbW92ZUNsYXNz KCdzZWxlY3RlZCcpOwpAQCAtMTM0OCw3ICsxMjQyLDYgQEAgdmFyIGdldEZv bGRlckluZm8gPSBmdW5jdGlvbihwYXRoLCBmaWxlX3R5cGUpIHsKCiAvLyBF bmFibGUvRGlzYWJsZSBsZXZlbCB1cCBidXR0b24KIHZhciBlbmFiX2Rpc19s ZXZlbF91cCA9IGZ1bmN0aW9uKCkgewotCiAgICQoJy5maWxlX21hbmFnZXIg I3VwbG9hZGVyIGgxJykuc2hvdygpOwogICAkKCcuc2hvd19zZWxlY3RlZF9m aWxlJykucmVtb3ZlKCk7CgpAQCAtMTM2NywxMSArMTI2MCwxNiBAQCB2YXIg ZW5hYl9kaXNfbGV2ZWxfdXAgPSBmdW5jdGlvbigpIHsKICAgfSwgMTAwKTsK IH07CgotLy8gR2V0IHRyYW5zYWN0aW9uIGlkIHRvIGdlbmVyYXRlIHJlcXVl c3QgdXJsIGFuZAotLy8gdG8gZ2VuZXJhdGUgY29uZmlnIGZpbGVzIG9uIHJ1 bnRpbWUKLXZhciB0cmFuc0lkID0gZ2V0VHJhbnNJZCgpLAotICAgIHRfaWQg PSAnJywKLSAgICB0X3JlczsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEluaXRpYWxp emF0aW9uIC0gRW50cnkgcG9pbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICog Z2V0IHRyYW5zYWN0aW9uIGlkIHRvIGdlbmVyYXRlIHJlcXVlc3QgdXJsIGFu ZAorICogdG8gZ2VuZXJhdGUgY29uZmlnIGZpbGVzIG9uIHJ1bnRpbWUKKyAq LwordmFyIGZtX3VybCA9ICJ7eyB1cmxfZm9yKCdmaWxlX21hbmFnZXIuaW5k ZXgnKSB9fWdldF90cmFuc19pZCIsCisgICAgdHJhbnNJZCA9IGxvYWREYXRh KGZtX3VybCksCisgICAgdF9pZCA9ICcnOwoKIGlmICh0cmFuc0lkLnJlYWR5 U3RhdGUgPT0gNCkgewogICB0X3JlcyA9IEpTT04ucGFyc2UodHJhbnNJZC5y ZXNwb25zZVRleHQpOwpAQCAtMTM4Miw3ICsxMjgwLDcgQEAgdmFyIHJvb3Rf dXJsID0gJ3t7IHVybF9mb3IoImZpbGVfbWFuYWdlci5pbmRleCIpIH19JywK ICAgICBmaWxlX21hbmFnZXJfY29uZmlnX2pzb24gPSByb290X3VybCt0X2lk KycvZmlsZV9tYW5hZ2VyX2NvbmZpZy5qc29uJywKICAgICBmaWxlX21hbmFn ZXJfY29uZmlnX2pzID0gcm9vdF91cmwrJ2ZpbGVfbWFuYWdlcl9jb25maWcu anMnLAogICAgIGZpbGVDb25uZWN0b3IgPSByb290X3VybCsnZmlsZW1hbmFn ZXIvJyt0X2lkKycvJywKLSAgICBjZmcgPSBsb2FkQ29uZmlnRmlsZSgpLAor ICAgIGNmZyA9IGxvYWREYXRhKGZpbGVfbWFuYWdlcl9jb25maWdfanNvbiks CiAgICAgY29uZmlnOwoKIC8vIGxvYWQgdXNlciBjb25maWd1cmF0aW9uIGZp bGUKQEAgLTEzOTAsNiArMTI4OCw3IEBAIGlmIChjZmcucmVhZHlTdGF0ZSA9 PSA0KSB7CiAgIGNvbmZpZyA9IEpTT04ucGFyc2UoY2ZnLnJlc3BvbnNlVGV4 dCk7CiB9CgorLy8gc2V0IG1haW4gdXJsIHRvIGZpbGVtYW5hZ2VyIGFuZCBp dHMgY2FwYWJpbGl0ZXMKIHZhciBmaWxlUm9vdCA9IGNvbmZpZy5vcHRpb25z LmZpbGVSb290LAogICAgIGNhcGFiaWxpdGllcyA9IGNvbmZpZy5vcHRpb25z LmNhcGFiaWxpdGllczsKCkBAIC0xMzk5LDE2ICsxMjk4LDEzIEBAIHZhciBm aWxlUm9vdCA9IGNvbmZpZy5vcHRpb25zLmZpbGVSb290LAogICovCiB2YXIg bGcgPSBbXSwKICAgICBlbmpzID0gJ3t7IHVybF9mb3IoImZpbGVfbWFuYWdl ci5pbmRleCIpIH19JyArICJlbi5qcyIsCi0gICAgbGdmID0gbG9hZExhbmdG aWxlKGVuanMpOworICAgIGxnZiA9IGxvYWREYXRhKGVuanMpOwoKIGlmIChs Z2YucmVhZHlTdGF0ZSA9PSA0KSB7CiAgIGxnID0gSlNPTi5wYXJzZShsZ2Yu cmVzcG9uc2VUZXh0KTsKIH0KCi0vLyBEaXNhYmxlIGhvbWUgYnV0dG9uIG9u IGxvYWQKLSQoJy5maWxlX21hbmFnZXInKS5maW5kKCdidXR0b24uaG9tZScp LmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7Ci0kKCcuZmlsZV9tYW5h Z2VyJykuZmluZCgnYnV0dG9uLnJlbmFtZScpLmF0dHIoJ2Rpc2FibGVkJywg J2Rpc2FibGVkJyk7Ci0KKy8vIGNyZWF0ZSBhbmQgZW5hYmxlIHVzZXIgdG8g Y3JlYXRlIG5ldyBmaWxlCiBpZiAoCiAgIGNvbmZpZy5vcHRpb25zLmRpYWxv Z190eXBlID09ICdzZWxlY3RfZmlsZScgfHwKICAgY29uZmlnLm9wdGlvbnMu ZGlhbG9nX3R5cGUgPT0gJ2NyZWF0ZV9maWxlJyB8fApAQCAtMTQzNiwxNCAr MTMzMiwxNCBAQCBpZiAoCiAgICAgICAgIGhhdmVfYWxsX3R5cGVzID0gKGhh dmVfYWxsX3R5cGVzIHx8ICh0ID09ICcqJykpOwogICAgICAgfSBlbHNlIHsK ICAgICAgICAgc2VsZWN0X2JveCArPSAnPG9wdGlvbiB2YWx1ZT0iJyArIHQg KyciPicgKwotICAgICAgICAgICh0ID09ICcqJyA/ICd7eyBfKCdBbGwgRmls ZXMnKSB9fScgOiB0KSArICI8L29wdGlvbj4iOworICAgICAgICAgICh0ID09 ICcqJyA/ICd7eyBfKCJBbGwgRmlsZXMiKSB9fScgOiB0KSArICI8L29wdGlv bj4iOwogICAgICAgICBoYXZlX2FsbF90eXBlcyA9IChoYXZlX2FsbF90eXBl cyB8fCAodCA9PSAnKicpKTsKICAgICAgIH0KICAgICAgIGkrKzsKICAgICB9 CgogICAgIGlmICghaGF2ZV9hbGxfdHlwZXMpIHsKLSAgICAgIHNlbGVjdF9i b3ggKz0gJzxvcHRpb24gdmFsdWU9IioiPnt7IF8oJ0FsbCBGaWxlcycpIH19 PC9vcHRpb24+JzsKKyAgICAgIHNlbGVjdF9ib3ggKz0gJzxvcHRpb24gdmFs dWU9IioiPnt7IF8oIkFsbCBGaWxlcyIpIH19PC9vcHRpb24+JzsKICAgICB9 CiAgICAgc2VsZWN0X2JveCArPSAiPC9zZWxlY3Q+PGxhYmVsPnt7IF8oJ0Zv cm1hdCcpIH19OiA8L2xhYmVsPjwvZGl2PiI7CiAgIH0KQEAgLTE0NjQsNyAr MTM2MCw2IEBAIGlmIChjb25maWcub3B0aW9ucy5kaWFsb2dfdHlwZSA9PSAn Y3JlYXRlX2ZpbGUnKSB7CiAgICAgJzwvZGl2Pic7CgogICAkKCcuY3JlYXRl X21vZGVfZGxnJykuZmluZCgnLmFsbG93ZWRfZmlsZV90eXBlcycpLnByZXBl bmQoY3JlYXRlX2ZpbGVfaHRtbCk7Ci0KICAgJCgnLmNyZWF0ZV9pbnB1dCBp bnB1dFt0eXBlPSJ0ZXh0Il0nKS5vbigna2V5cHJlc3MsIGtleWRvd24nLCBm dW5jdGlvbigpIHsKICAgICB2YXIgaW5wdXRfdGV4dF9sZW4gPSAkKHRoaXMp LnZhbCgpLmxlbmd0aDsKICAgICBpZiAoaW5wdXRfdGV4dF9sZW4gPiAwICkg ewpAQCAtMTQ3NCwyNTggKzEzNjksMjE4IEBAIGlmIChjb25maWcub3B0aW9u cy5kaWFsb2dfdHlwZSA9PSAnY3JlYXRlX2ZpbGUnKSB7CiAgICAgfQogICB9 KTsKIH0KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgSW5pdGlhbGl6YXRpb24KKyAg SXRlbSBBY3Rpb25zIC0gT2JqZWN0IGV2ZW50cwogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K Ci0kKGZ1bmN0aW9uKCkgewotICB2YXIgZXhwYW5kZWRGb2xkZXIgPSAnJzsK LQotICBpZiAoY29uZmlnLmV4dHJhX2pzKSB7Ci0gICAgZm9yKHZhciBpPTA7 IGk8IGNvbmZpZy5leHRyYV9qcy5sZW5ndGg7IGkrKykgewotICAgICAgJC5h amF4KHsKLSAgICAgICAgdXJsOiBjb25maWcuZXh0cmFfanNbaV0sCi0gICAg ICAgIGRhdGFUeXBlOiAic2NyaXB0IiwKLSAgICAgICAgYXN5bmM6IGV4dHJh X2pzX2FzeW5jCi0gICAgICB9KTsKLSAgICB9Ci0gIH0KKy8vIHN3aXRjaCB0 byBmb2xkZXIgdmlldworJCgnLmZpbGVfbWFuYWdlciAuZmlsZWluZm8nKS5v bignY2xpY2snLCBmdW5jdGlvbihlKSB7CisgIGVuYWJsZV9kaXNhYmxlX2J0 bigpOworfSk7CgotICBpZiAoJC51cmxQYXJhbSgnZXhwYW5kZWRGb2xkZXIn KSAhPSAwKSB7Ci0gICAgZXhwYW5kZWRGb2xkZXIgPSAkLnVybFBhcmFtKCdl eHBhbmRlZEZvbGRlcicpOwotICB9CisvLyByZWZyZXNoIGN1cnJlbnQgZGly ZWN0b3J5CiskKCcuZmlsZV9tYW5hZ2VyIC5yZWZyZXNoJykub24oJ2NsaWNr JywgZnVuY3Rpb24oZSkgeworICBlbmFibGVfZGlzYWJsZV9idG4oKTsKKyAg dmFyIGN1cnJfcGF0aCA9ICQoJy5jdXJyZW50cGF0aCcpLnZhbCgpLAorICAg ICAgcGF0aCA9IGN1cnJfcGF0aC5zdWJzdHJpbmcoCisgICAgICAgIDAsIGN1 cnJfcGF0aC5sYXN0SW5kZXhPZigiLyIpCisgICAgICApICsgIi8iOworICBn ZXRGb2xkZXJJbmZvKHBhdGgpOworfSk7CgotICAvLyBBZGp1c3QgbGF5b3V0 LgotICBzZXREaW1lbnNpb25zKCk7Ci0KLSAgLy8gd2UgZmluYWxpemUgdGhl IEZpbGVNYW5hZ2VyIFVJIGluaXRpYWxpemF0aW9uCi0gIC8vIHdpdGggbG9j YWxpemVkIHRleHQgaWYgbmVjZXNzYXJ5Ci0gIGlmIChjb25maWcuYXV0b2xv YWQgPT0gdHJ1ZSkgewotICAgICQoJy51cGxvYWQnKS5hcHBlbmQobGcudXBs b2FkKTsKLSAgICAkKCcuY3JlYXRlJykuYXBwZW5kKGxnLm5ld19mb2xkZXIp OwotICAgICQoJy5ncmlkJykuYXR0cigndGl0bGUnLCBsZy5ncmlkX3ZpZXcp OwotICAgICQoJy5saXN0JykuYXR0cigndGl0bGUnLCBsZy5saXN0X3ZpZXcp OwotICAgICQoJy5maWxlaW5mbyBoMScpLmFwcGVuZChsZy5zZWxlY3RfZnJv bV9sZWZ0KTsKLSAgICAkKCcjaXRlbU9wdGlvbnMgYVtocmVmJD0iI3NlbGVj dCJdJykuYXBwZW5kKGxnLnNlbGVjdCk7Ci0gICAgJCgnI2l0ZW1PcHRpb25z IGFbaHJlZiQ9Ii5kb3dubG9hZCJdJykuYXBwZW5kKGxnLmRvd25sb2FkKTsK LSAgICAkKCcjaXRlbU9wdGlvbnMgYVtocmVmJD0iLnJlbmFtZSJdJykuYXBw ZW5kKGxnLnJlbmFtZSk7Ci0gICAgJCgnI2l0ZW1PcHRpb25zIGFbaHJlZiQ9 Ii5kZWxldGUiXScpLmFwcGVuZChsZy5kZWwpOwotICAgIC8qKiBJbnB1dCBm aWxlIFJlcGxhY2VtZW50ICovCi0gICAgJCgnLmJyb3dzZScpLmFwcGVuZCgn KycpOwotCi0gICAgJCgnLmJyb3dzZScpLmF0dHIoJ3RpdGxlJywgbGcuYnJv d3NlKTsKLQotICAgICQoIi5uZXdmaWxlIikuY2hhbmdlKGZ1bmN0aW9uKCkg ewotICAgICAgJCgiLmZpbGVwYXRoIikudmFsKCQodGhpcykudmFsKCkpOwot ICAgIH0pOwotICAgIC8qKiBJbnB1dCBmaWxlIFJlcGxhY2VtZW50IC0gZW5k ICovCi0gIH0KKy8vIGhpZGUgbWVzc2FnZSBwcm9tcHQgYW5kIGRpbW1lciBp ZiBjbGlja2VkIG5vCiskKCcuZGVsZXRlX2l0ZW0gYnV0dG9uLmJ0bl9ubycp Lm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgeworICAkKCcuZGVsZXRlX2l0ZW0s IC5maWxlaW5mbyAuZm1fZGltbWVyJykuaGlkZSgpOworfSk7CgotICAvLyBz dG9wIGNsaWNrIGV2ZW50IG9uIGRpbW1lciBjbGljawotICAkKCcuZmlsZWlu Zm8gLmZtX2RpbW1lcicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKLSAg ICBlLnN0b3BQcm9wYWdhdGlvbigpOwotICB9KTsKKy8vIERpc2FibGUgaG9t ZSBidXR0b24gb24gbG9hZAorJCgnLmZpbGVfbWFuYWdlcicpLmZpbmQoJ2J1 dHRvbi5ob21lJykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKKyQo Jy5maWxlX21hbmFnZXInKS5maW5kKCdidXR0b24ucmVuYW1lJykuYXR0cign ZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKCi0gICQoJy5maWxlaW5mbyAucmVw bGFjZV9maWxlJykubm90KAotICAgICQodGhpcykuZmluZCgnc3Bhbi5wdWxs LXJpZ2h0JykKLSAgKS5vbigKLSAgJ2NsaWNrJywgZnVuY3Rpb24oZSkgewot ICAgICQoJyN1cGxvYWRlciAuZmlsZW1hbmFnZXItYnRuLWdyb3VwJykudW5i aW5kKCkub24oCi0gICAgICAnY2xpY2snLCBmdW5jdGlvbigpIHsKLSAgICAg ICAgJCgnLmZpbGVpbmZvIC5kZWxldGVfaXRlbSwgLmZpbGVpbmZvIC5yZXBs YWNlX2ZpbGUsIC5maWxlaW5mbyAuZm1fZGltbWVyJykuaGlkZSgpOwotICAg ICAgfSk7Ci0gICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKLSAgfSk7CisvLyBz dG9wIGNsaWNrIGV2ZW50IG9uIGRpbW1lciBjbGljaworJCgnLmZpbGVpbmZv IC5mbV9kaW1tZXInKS5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7CisgIGUu c3RvcFByb3BhZ2F0aW9uKCk7Cit9KTsKCi0gIC8vIFNldCBpbml0aWFsIHZp ZXcgc3RhdGUuCi0gICQoJy5maWxlaW5mbycpLmRhdGEoJ3ZpZXcnLCBjb25m aWcub3B0aW9ucy5kZWZhdWx0Vmlld01vZGUpOwotICBzZXRWaWV3QnV0dG9u c0Zvcihjb25maWcub3B0aW9ucy5kZWZhdWx0Vmlld01vZGUpOwotCi0gIC8v IFVwbG9hZCBjbGljayBldmVudAotICAkKCcuZmlsZV9tYW5hZ2VyIC51cGxv YWRlcicpLm9uKCdjbGljaycsICdhJywgZnVuY3Rpb24oZSkgewotICAgIGUu cHJldmVudERlZmF1bHQoKTsKLSAgICB2YXIgYiA9ICQoJy5jdXJyZW50cGF0 aCcpLnZhbCgpOwotICAgIHZhciBub2RlX3ZhbCA9ICQodGhpcykubmV4dCgp LnRleHQoKTsKLSAgICBwYXJlbnQgPSBiLnN1YnN0cmluZygwLCBiLnNsaWNl KDAsIC0xKS5sYXN0SW5kZXhPZihub2RlX3ZhbCkpOwotICAgIGdldEZvbGRl ckluZm8ocGFyZW50KTsKLSAgfSk7CiskKCcuZmlsZWluZm8gLnJlcGxhY2Vf ZmlsZScpLm5vdCgKKyAgJCh0aGlzKS5maW5kKCdzcGFuLnB1bGwtcmlnaHQn KQorKS5vbigKKydjbGljaycsIGZ1bmN0aW9uKGUpIHsKKyAgJCgnI3VwbG9h ZGVyIC5maWxlbWFuYWdlci1idG4tZ3JvdXAnKS51bmJpbmQoKS5vbigKKyAg ICAnY2xpY2snLCBmdW5jdGlvbigpIHsKKyAgICAgICQoJy5maWxlaW5mbyAu ZGVsZXRlX2l0ZW0sIC5maWxlaW5mbyAucmVwbGFjZV9maWxlLCAuZmlsZWlu Zm8gLmZtX2RpbW1lcicpLmhpZGUoKTsKKyAgICB9KTsKKyAgZS5zdG9wUHJv cGFnYXRpb24oKTsKK30pOwoKLSAgLy8gcmUtcmVuZGVyIHRoZSBob21lIHZp ZXcKLSAgJCgnLmZpbGVfbWFuYWdlciAuaG9tZScpLmNsaWNrKGZ1bmN0aW9u KCkgewotICAgIHZhciBjdXJyZW50Vmlld01vZGUgPSAkKCcuZmlsZWluZm8n KS5kYXRhKCd2aWV3Jyk7Ci0gICAgJCgnLmZpbGVpbmZvJykuZGF0YSgndmll dycsIGN1cnJlbnRWaWV3TW9kZSk7Ci0gICAgZ2V0Rm9sZGVySW5mbyhmaWxl Um9vdCk7Ci0gICAgZW5hYl9kaXNfbGV2ZWxfdXAoKTsKLSAgfSk7CisvLyBT ZXQgaW5pdGlhbCB2aWV3IHN0YXRlLgorJCgnLmZpbGVpbmZvJykuZGF0YSgn dmlldycsIGNvbmZpZy5vcHRpb25zLmRlZmF1bHRWaWV3TW9kZSk7CitzZXRW aWV3QnV0dG9uc0Zvcihjb25maWcub3B0aW9ucy5kZWZhdWx0Vmlld01vZGUp OworCisvLyBVcGxvYWQgY2xpY2sgZXZlbnQKKyQoJy5maWxlX21hbmFnZXIg LnVwbG9hZGVyJykub24oJ2NsaWNrJywgJ2EnLCBmdW5jdGlvbihlKSB7Cisg IGUucHJldmVudERlZmF1bHQoKTsKKyAgdmFyIGIgPSAkKCcuY3VycmVudHBh dGgnKS52YWwoKTsKKyAgdmFyIG5vZGVfdmFsID0gJCh0aGlzKS5uZXh0KCku dGV4dCgpOworICBwYXJlbnQgPSBiLnN1YnN0cmluZygwLCBiLnNsaWNlKDAs IC0xKS5sYXN0SW5kZXhPZihub2RlX3ZhbCkpOworICBnZXRGb2xkZXJJbmZv KHBhcmVudCk7Cit9KTsKCi0gIC8vIEdvIG9uZSBkaXJlY3RvcnkgYmFjawot ICAkKCIuZmlsZV9tYW5hZ2VyIC5sZXZlbC11cCIpLmNsaWNrKGZ1bmN0aW9u KCkgewotICAgIHZhciBiID0gJCgnLmN1cnJlbnRwYXRoJykudmFsKCk7Cisv LyByZS1yZW5kZXIgdGhlIGhvbWUgdmlldworJCgnLmZpbGVfbWFuYWdlciAu aG9tZScpLmNsaWNrKGZ1bmN0aW9uKCkgeworICB2YXIgY3VycmVudFZpZXdN b2RlID0gJCgnLmZpbGVpbmZvJykuZGF0YSgndmlldycpOworICAkKCcuZmls ZWluZm8nKS5kYXRhKCd2aWV3JywgY3VycmVudFZpZXdNb2RlKTsKKyAgZ2V0 Rm9sZGVySW5mbyhmaWxlUm9vdCk7CisgIGVuYWJfZGlzX2xldmVsX3VwKCk7 Cit9KTsKCi0gICAgLy8gRW5hYmxlL0Rpc2FibGUgbGV2ZWwgdXAgYnV0dG9u Ci0gICAgZW5hYl9kaXNfbGV2ZWxfdXAoKTsKKy8vIEdvIG9uZSBkaXJlY3Rv cnkgYmFjaworJCgiLmZpbGVfbWFuYWdlciAubGV2ZWwtdXAiKS5jbGljayhm dW5jdGlvbigpIHsKKyAgdmFyIGIgPSAkKCcuY3VycmVudHBhdGgnKS52YWwo KTsKCi0gICAgaWYgKGIgIT0gZmlsZVJvb3QpIHsKLSAgICAgICAgcGFyZW50 ID0gYi5zdWJzdHJpbmcoMCwgYi5zbGljZSgwLCAtMSkubGFzdEluZGV4T2Yo Ii8iKSkgKyAiLyI7Ci0gICAgICAgIHZhciBkID0gJCgiLmZpbGVpbmZvIiku ZGF0YSgidmlldyIpOwotICAgICAgICAkKCIuZmlsZWluZm8iKS5kYXRhKCJ2 aWV3IiwgZCk7Ci0gICAgICAgIGdldEZvbGRlckluZm8ocGFyZW50KTsKLSAg ICB9Ci0gIH0pOworICAvLyBFbmFibGUvRGlzYWJsZSBsZXZlbCB1cCBidXR0 b24KKyAgZW5hYl9kaXNfbGV2ZWxfdXAoKTsKCi0gIC8vIHNldCBidXR0b25z IHRvIHN3aXRjaCBiZXR3ZWVuIGdyaWQgYW5kIGxpc3Qgdmlld3MuCi0gICQo Jy5maWxlX21hbmFnZXIgLmdyaWQnKS5jbGljayhmdW5jdGlvbigpIHsKLSAg ICBzZXRWaWV3QnV0dG9uc0ZvcignZ3JpZCcpOwotICAgICQoJy5maWxlaW5m bycpLmRhdGEoJ3ZpZXcnLCAnZ3JpZCcpOwotICAgIGVuYWJsZV9kaXNhYmxl X2J0bigpOwotICAgIGdldEZvbGRlckluZm8oJCgnLmN1cnJlbnRwYXRoJyku dmFsKCkpOwotICB9KTsKKyAgaWYgKGIgIT0gZmlsZVJvb3QpIHsKKyAgICAg IHBhcmVudCA9IGIuc3Vic3RyaW5nKDAsIGIuc2xpY2UoMCwgLTEpLmxhc3RJ bmRleE9mKCIvIikpICsgIi8iOworICAgICAgdmFyIGQgPSAkKCIuZmlsZWlu Zm8iKS5kYXRhKCJ2aWV3Iik7CisgICAgICAkKCIuZmlsZWluZm8iKS5kYXRh KCJ2aWV3IiwgZCk7CisgICAgICBnZXRGb2xkZXJJbmZvKHBhcmVudCk7Cisg IH0KK30pOwoKLSAgLy8gU2hvdyBsaXN0IG1vZGUKLSAgJCgnLmZpbGVfbWFu YWdlciAubGlzdCcpLmNsaWNrKGZ1bmN0aW9uKCkgewotICAgIHNldFZpZXdC dXR0b25zRm9yKCdsaXN0Jyk7Ci0gICAgJCgnLmZpbGVpbmZvJykuZGF0YSgn dmlldycsICdsaXN0Jyk7Ci0gICAgZW5hYmxlX2Rpc2FibGVfYnRuKCk7Ci0g ICAgZ2V0Rm9sZGVySW5mbygkKCcuY3VycmVudHBhdGgnKS52YWwoKSk7Ci0g IH0pOworLy8gc2V0IGJ1dHRvbnMgdG8gc3dpdGNoIGJldHdlZW4gZ3JpZCBh bmQgbGlzdCB2aWV3cy4KKyQoJy5maWxlX21hbmFnZXIgLmdyaWQnKS5jbGlj ayhmdW5jdGlvbigpIHsKKyAgc2V0Vmlld0J1dHRvbnNGb3IoJ2dyaWQnKTsK KyAgJCgnLmZpbGVpbmZvJykuZGF0YSgndmlldycsICdncmlkJyk7CisgIGVu YWJsZV9kaXNhYmxlX2J0bigpOworICBnZXRGb2xkZXJJbmZvKCQoJy5jdXJy ZW50cGF0aCcpLnZhbCgpKTsKK30pOwoKLSAgLy8gUHJvdmlkZSBpbml0aWFs IHZhbHVlcyBmb3IgdXBsb2FkIGZvcm0sIHN0YXR1cywgZXRjLgotICBzZXRV cGxvYWRlcihmaWxlUm9vdCk7CisvLyBTaG93IGxpc3QgbW9kZQorJCgnLmZp bGVfbWFuYWdlciAubGlzdCcpLmNsaWNrKGZ1bmN0aW9uKCkgeworICBzZXRW aWV3QnV0dG9uc0ZvcignbGlzdCcpOworICAkKCcuZmlsZWluZm8nKS5kYXRh KCd2aWV3JywgJ2xpc3QnKTsKKyAgZW5hYmxlX2Rpc2FibGVfYnRuKCk7Cisg IGdldEZvbGRlckluZm8oJCgnLmN1cnJlbnRwYXRoJykudmFsKCkpOworfSk7 CgotICAkKCcjdXBsb2FkZXInKS5hdHRyKCdhY3Rpb24nLCBmaWxlQ29ubmVj dG9yKTsKKy8vIFByb3ZpZGUgaW5pdGlhbCB2YWx1ZXMgZm9yIHVwbG9hZCBm b3JtLCBzdGF0dXMsIGV0Yy4KK3NldFVwbG9hZGVyKGZpbGVSb290KTsKCi0g IHZhciBkYXRhID0gewotICAgICdDYXBhYmlsaXRpZXMnOiBjYXBhYmlsaXRp ZXMKLSAgfTsKKyQoJyN1cGxvYWRlcicpLmF0dHIoJ2FjdGlvbicsIGZpbGVD b25uZWN0b3IpOwoKLSAgaWYgKGhhc19jYXBhYmlsaXR5KGRhdGEsICd1cGxv YWQnKSkgewotICAgIERyb3B6b25lLmF1dG9EaXNjb3ZlciA9IGZhbHNlOwot ICAgIC8vIHdlIHJlbW92ZSBzaW1wbGUgZmlsZSB1cGxvYWQgZWxlbWVudAot ICAgICQoJy5maWxlLWlucHV0LWNvbnRhaW5lcicpLnJlbW92ZSgpOwotICAg ICQoJy51cGxvYWQnKS5yZW1vdmUoKTsKLSAgICAkKCAiLmNyZWF0ZSIgKS5i ZWZvcmUoICc8YnV0dG9uIHZhbHVlPSJVcGxvYWQiIHR5cGU9ImJ1dHRvbiIg dGl0bGU9IlVwbG9hZCBGaWxlIiBuYW1lPSJ1cGxvYWQiIGlkPSJ1cGxvYWQi IGNsYXNzPSJidG4gZmEgZmEtdXBsb2FkIHVwbG9hZCI+PHNwYW4+PC9zcGFu PjwvYnV0dG9uPiAnICk7Ci0KLSAgICAkKCcudXBsb2FkJykudW5iaW5kKCku Y2xpY2soZnVuY3Rpb24oKSB7Ci0gICAgICAvLyB3ZSBjcmVhdGUgcHJvbXB0 Ci0gICAgICB2YXIgbXNnICA9ICc8ZGl2IGlkPSJkcm9wem9uZS1jb250YWlu ZXIiPicgKwotICAgICAgICAgICAgJzxidXR0b24gY2xhc3M9ImZhIGZhLXRp bWVzIGR6X2Nyb3NzX2J0biI+PC9idXR0b24+JyArCi0gICAgICAgICAgICAn PGRpdiBpZD0ibXVsdGlwbGUtdXBsb2FkcyIgY2xhc3M9ImRyb3B6b25lIj48 L2Rpdj4nICsKLSAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJwcm9tcHQtaW5m byI+JyArIGxnLmZpbGVfc2l6ZV9saW1pdCArCi0gICAgICAgICAgICBjb25m aWcudXBsb2FkLmZpbGVTaXplTGltaXQgKyAnICcgKyBsZy5tYiArICcuPC9k aXY+JywKLSAgICAgICAgICAgIGVycm9yX2ZsYWcgPSBmYWxzZSwKLSAgICAg ICAgICAgIHBhdGggPSAkKCcuY3VycmVudHBhdGgnKS52YWwoKSwKLSAgICAg ICAgICAgIGZpbGVzaXplbGltaXQgPSBjb25maWcudXBsb2FkLmZpbGVTaXpl TGltaXQsCi0gICAgICAgICAgICAvLyBkZWZhdWx0IGRyb3B6b25lIHZhbHVl Ci0gICAgICAgICAgICBmaWxlU2l6ZSA9IChmaWxlc2l6ZWxpbWl0ICE9ICdh dXRvJykgPyBmaWxlc2l6ZWxpbWl0IDogMjU2LAotICAgICAgICAgICAgYWNj ZXB0RmlsZXM7Ci0KLSAgICAgIGlmIChjb25maWcuc2VjdXJpdHkudXBsb2Fk UG9saWN5ID09ICdESVNBTExPV19BTEwnKSB7Ci0gICAgICAgIGFjY2VwdEZp bGVzID0gJy4nICsgY29uZmlnLnNlY3VyaXR5LnVwbG9hZFJlc3RyaWN0aW9u cy5qb2luKCcsLicpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gV2Ug YWxsb3cgYW55IGV4dGVuc2lvbiBzaW5jZSB3ZSBoYXZlIG5vIGVhc3kgd2F5 IHRvIGhhbmRsZSB0aGUgdGhlCi0gICAgICAgIC8vIGJ1aWx0LWluIGBhY2Nl cHRlZEZpbGVzYCBwYXJhbXMgd291bGQgYmUgaGFuZGxlZCBsYXRlciBieSB0 aGUKLSAgICAgICAgLy8gY29ubmVjdG9yLgotICAgICAgICBhY2NlcHRGaWxl cyA9IG51bGw7Ci0gICAgICB9Cit2YXIgZGF0YSA9IHsKKyAgJ0NhcGFiaWxp dGllcyc6IGNhcGFiaWxpdGllcworfTsKCi0gICAgICBpZiAoJC51cmxQYXJh bSgndHlwZScpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSAnaW1hZ2Vz JyB8fCBjb25maWcudXBsb2FkLmltYWdlc09ubHkpIHsKLSAgICAgICAgYWNj ZXB0RmlsZXMgPSAnLicgKyBjb25maWcuaW1hZ2VzLmltYWdlc0V4dC5qb2lu KCcsLicpOwotICAgICAgfQorLy8gVXBsb2FkIGZpbGUKK2lmIChoYXNfY2Fw YWJpbGl0eShkYXRhLCAndXBsb2FkJykpIHsKKyAgRHJvcHpvbmUuYXV0b0Rp c2NvdmVyID0gZmFsc2U7CisgIC8vIHdlIHJlbW92ZSBzaW1wbGUgZmlsZSB1 cGxvYWQgZWxlbWVudAorICAkKCcuZmlsZS1pbnB1dC1jb250YWluZXInKS5y ZW1vdmUoKTsKKyAgJCgnLnVwbG9hZCcpLnJlbW92ZSgpOworICAkKCAiLmNy ZWF0ZSIgKS5iZWZvcmUoICc8YnV0dG9uIHZhbHVlPSJVcGxvYWQiIHR5cGU9 ImJ1dHRvbiIgdGl0bGU9IlVwbG9hZCBGaWxlIiBuYW1lPSJ1cGxvYWQiIGlk PSJ1cGxvYWQiIGNsYXNzPSJidG4gZmEgZmEtdXBsb2FkIHVwbG9hZCI+PHNw YW4+PC9zcGFuPjwvYnV0dG9uPiAnICk7CisKKyAgJCgnLnVwbG9hZCcpLnVu YmluZCgpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgIC8vIHdlIGNyZWF0ZSBw cm9tcHQKKyAgICB2YXIgbXNnICA9ICc8ZGl2IGlkPSJkcm9wem9uZS1jb250 YWluZXIiPicgKworICAgICAgICAgICc8YnV0dG9uIGNsYXNzPSJmYSBmYS10 aW1lcyBkel9jcm9zc19idG4iPjwvYnV0dG9uPicgKworICAgICAgICAgICc8 ZGl2IGlkPSJtdWx0aXBsZS11cGxvYWRzIiBjbGFzcz0iZHJvcHpvbmUiPjwv ZGl2PicgKworICAgICAgICAgICc8ZGl2IGNsYXNzPSJwcm9tcHQtaW5mbyI+ JyArIGxnLmZpbGVfc2l6ZV9saW1pdCArCisgICAgICAgICAgY29uZmlnLnVw bG9hZC5maWxlU2l6ZUxpbWl0ICsgJyAnICsgbGcubWIgKyAnLjwvZGl2Pics CisgICAgICAgICAgZXJyb3JfZmxhZyA9IGZhbHNlLAorICAgICAgICAgIHBh dGggPSAkKCcuY3VycmVudHBhdGgnKS52YWwoKSwKKyAgICAgICAgICBmaWxl c2l6ZWxpbWl0ID0gY29uZmlnLnVwbG9hZC5maWxlU2l6ZUxpbWl0LAorICAg ICAgICAgIC8vIGRlZmF1bHQgZHJvcHpvbmUgdmFsdWUKKyAgICAgICAgICBm aWxlU2l6ZSA9IChmaWxlc2l6ZWxpbWl0ICE9ICdhdXRvJykgPyBmaWxlc2l6 ZWxpbWl0IDogMjU2LAorICAgICAgICAgIGFjY2VwdEZpbGVzOworCisgICAg aWYgKGNvbmZpZy5zZWN1cml0eS51cGxvYWRQb2xpY3kgPT0gJ0RJU0FMTE9X X0FMTCcpIHsKKyAgICAgIGFjY2VwdEZpbGVzID0gJy4nICsgY29uZmlnLnNl Y3VyaXR5LnVwbG9hZFJlc3RyaWN0aW9ucy5qb2luKCcsLicpOworICAgIH0g ZWxzZSB7CisgICAgICAvLyBXZSBhbGxvdyBhbnkgZXh0ZW5zaW9uIHNpbmNl IHdlIGhhdmUgbm8gZWFzeSB3YXkgdG8gaGFuZGxlIHRoZSB0aGUKKyAgICAg IC8vIGJ1aWx0LWluIGBhY2NlcHRlZEZpbGVzYCBwYXJhbXMgd291bGQgYmUg aGFuZGxlZCBsYXRlciBieSB0aGUKKyAgICAgIC8vIGNvbm5lY3Rvci4KKyAg ICAgIGFjY2VwdEZpbGVzID0gbnVsbDsKKyAgICB9CgotICAgICAgJCgnLmZp bGVfbWFuYWdlciAudXBsb2FkX2ZpbGUnKS50b2dnbGUoKTsKLSAgICAgICQo Jy5maWxlX21hbmFnZXIgLnVwbG9hZF9maWxlJykuaHRtbChtc2cpOwotCi0g ICAgICAvL3ZhciBwcmV2aWV3VGVtcGxhdGUgPSAnPGRpdiBpZD0iZHJvcHpv bmUtY29udGFpbmVyIj4nOwotICAgICAgdmFyIHByZXZpZXdUZW1wbGF0ZSA9 ICc8ZGl2IGNsYXNzPSJmaWxlX3VwbG9hZF9tYWluIGR6LXByZXZpZXcgZHot ZmlsZS1wcmV2aWV3Ij4nKwotICAgICAgICAgICAgJzxkaXYgY2xhc3M9InNo b3dfZXJyb3IiPicgKwotICAgICAgICAgICAgJzxwIGNsYXNzPSJzaXplIGR6 LXNpemUiIGRhdGEtZHotc2l6ZT48L3A+JyArCi0gICAgICAgICAgICAnPHAg Y2xhc3M9Im5hbWUgZHotZmlsZW5hbWUiIGRhdGEtZHotbmFtZT48L3A+JyAr Ci0gICAgICAgICAgICAnPC9kaXY+JyArCi0gICAgICAgICAgICAnPGRpdiBj bGFzcz0iZHotcHJvZ3Jlc3MiPjxzcGFuIGNsYXNzPSJkei11cGxvYWQiIGRh dGEtZHotdXBsb2FkcHJvZ3Jlc3M+PC9zcGFuPjwvZGl2PicgKwotICAgICAg ICAgICAgJzxkaXYgY2xhc3M9ImR6LXN1Y2Nlc3MtbWFyayI+PHNwYW4+PC9z cGFuPjwvZGl2PicgKwotICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImR6LWVy cm9yLW1hcmsiPjxzcGFuPjwvc3Bhbj48L2Rpdj4nICsKLSAgICAgICAgICAg ICc8ZGl2IGNsYXNzPSJkei1lcnJvci1tZXNzYWdlIj48c3BhbiBkYXRhLWR6 LWVycm9ybWVzc2FnZT48L3NwYW4+PC9kaXY+JyArCi0gICAgICAgICAgICAn PGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgY2xhc3M9ImZhIGZhLXRy YXNoIGR6X2ZpbGVfcmVtb3ZlIiBkYXRhLWR6LXJlbW92ZT48L2E+JyArCi0g ICAgICAgICAgICAnPC9kaXY+JzsKLQotICAgICAgJCgiZGl2I211bHRpcGxl LXVwbG9hZHMiKS5kcm9wem9uZSh7Ci0gICAgICAgIHBhcmFtTmFtZTogIm5l d2ZpbGUiLAotICAgICAgICB1cmw6IGZpbGVDb25uZWN0b3IgKyAnP2NvbmZp Zz0nICsgdXNlcmNvbmZpZywKLSAgICAgICAgbWF4RmlsZXNpemU6IGZpbGVT aXplLAotICAgICAgICBtYXhGaWxlczogY29uZmlnLnVwbG9hZC5udW1iZXIs Ci0gICAgICAgIGFkZFJlbW92ZUxpbmtzOiB0cnVlLAotICAgICAgICBwcmV2 aWV3VGVtcGxhdGU6IHByZXZpZXdUZW1wbGF0ZSwKLSAgICAgICAgcGFyYWxs ZWxVcGxvYWRzOiBjb25maWcudXBsb2FkLm51bWJlciwKLSAgICAgICAgZGlj dE1heEZpbGVzRXhjZWVkZWQ6IGxnLmR6X2RpY3RNYXhGaWxlc0V4Y2VlZGVk LnJlcGxhY2UoCi0gICAgICAgICAgIiVzIiwgY29uZmlnLnVwbG9hZC5udW1i ZXIKLSAgICAgICAgKSwKLSAgICAgICAgZGljdERlZmF1bHRNZXNzYWdlOiBs Zy5kel9kaWN0RGVmYXVsdE1lc3NhZ2UsCi0gICAgICAgIGRpY3RJbnZhbGlk RmlsZVR5cGU6IGxnLmR6X2RpY3RJbnZhbGlkRmlsZVR5cGUsCi0gICAgICAg IGRpY3RGaWxlVG9vQmlnOiBsZy5maWxlX3Rvb19iaWcgKyAnICcgKyBsZy5m aWxlX3NpemVfbGltaXQgKwotICAgICAgICAgIGNvbmZpZy51cGxvYWQuZmls ZVNpemVMaW1pdCArICcgJyArIGxnLm1iLAotICAgICAgICBhY2NlcHRlZEZp bGVzOiBhY2NlcHRGaWxlcywKLSAgICAgICAgYXV0b1Byb2Nlc3NRdWV1ZTog dHJ1ZSwKLSAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg dmFyIGRyb3B6b25lID0gdGhpczsKLQotICAgICAgICAgICQoJy5kel9jcm9z c19idG4nKS51bmJpbmQoKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsKLSAg ICAgICAgICAgICQoJy5maWxlX21hbmFnZXIgLnVwbG9hZF9maWxlJykudG9n Z2xlKCk7Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0gICAgICAgIHNl bmRpbmc6IGZ1bmN0aW9uKGZpbGUsIHhociwgZm9ybURhdGEpIHsKLSAgICAg ICAgICBmb3JtRGF0YS5hcHBlbmQoIm1vZGUiLCAiYWRkIik7Ci0gICAgICAg ICAgZm9ybURhdGEuYXBwZW5kKCJjdXJyZW50cGF0aCIsIHBhdGgpOwotICAg ICAgICAgICQoJy51cGxvYWRfZmlsZSAuZHpfY3Jvc3NfYnRuJykuYXR0cign ZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKLSAgICAgICAgICBzZXRUaW1lb3V0 KGZ1bmN0aW9uKCkge30sIDEwMDAwKTsKLSAgICAgICAgfSwKLSAgICAgICAg c3VjY2VzczogZnVuY3Rpb24oZmlsZSwgcmVzcG9uc2UpIHsKLSAgICAgICAg ICB2YXIgcmVzcG9uc2UgPSBqUXVlcnkucGFyc2VKU09OKHJlc3BvbnNlKSwK LSAgICAgICAgICAgICAgZGF0YSA9IHJlc3BvbnNlLmRhdGEucmVzdWx0LAot ICAgICAgICAgICAgICAkdGhpcyA9ICQoZmlsZS5wcmV2aWV3VGVtcGxhdGUp OwotCi0gICAgICAgICAgaWYgKGRhdGEuQ29kZSA9PSAwKSB7Ci0gICAgICAg ICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAk dGhpcy5maW5kKCIuZHotdXBsb2FkIikuYWRkQ2xhc3MoInN1Y2Nlc3MiKTsK LSAgICAgICAgICAgIH0sIDEwMDApOwotICAgICAgICAgICAgJHRoaXMuZmlu ZCgiLmR6LXVwbG9hZCIpLmNzcygnd2lkdGgnLCAiMTAwJSIpLmh0bWwoIjEw MCUiKTsKLSAgICAgICAgICAgIGFsZXJ0aWZ5LnN1Y2Nlc3MobGcudXBsb2Fk X3N1Y2Nlc3MpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAk dGhpcy5maW5kKCIuZHotdXBsb2FkIikuYWRkQ2xhc3MoImVycm9yIik7Ci0g ICAgICAgICAgICAkdGhpcy5maW5kKCIuZHotdXBsb2FkIikuY3NzKCd3aWR0 aCcsICIwJSIpLmh0bWwoIjAlIik7Ci0gICAgICAgICAgICBhbGVydGlmeS5l cnJvcihkYXRhLkVycm9yKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ2V0 Rm9sZGVySW5mbyhwYXRoKTsKLSAgICAgICAgfSwKLSAgICAgICAgdG90YWx1 cGxvYWRwcm9ncmVzczogZnVuY3Rpb24ocHJvZ3Jlc3MpIHt9LAotICAgICAg ICBjb21wbGV0ZTogZnVuY3Rpb24oZmlsZSkgewotICAgICAgICAgIGlmICgK LSAgICAgICAgICAgIHRoaXMuZ2V0VXBsb2FkaW5nRmlsZXMoKS5sZW5ndGgg PT09IDAgJiYKLSAgICAgICAgICAgIHRoaXMuZ2V0UXVldWVkRmlsZXMoKS5s ZW5ndGggPT09IDAKLSAgICAgICAgICApIHt9Ci0gICAgICAgICAgaWYgKGZp bGUuc3RhdHVzID09ICJlcnJvciIpIHsKLSAgICAgICAgICAgIGFsZXJ0aWZ5 LmVycm9yKGxnLkVSUk9SX1VQTE9BRElOR19GSUxFKTsKLSAgICAgICAgICB9 Ci0gICAgICAgICAgJCgnLnVwbG9hZF9maWxlIC5kel9jcm9zc19idG4nKS5y ZW1vdmVBdHRyKCdkaXNhYmxlZCcpOwotICAgICAgICAgIGdldEZvbGRlcklu Zm8ocGF0aCk7CisgICAgJCgnLmZpbGVfbWFuYWdlciAudXBsb2FkX2ZpbGUn KS50b2dnbGUoKTsKKyAgICAkKCcuZmlsZV9tYW5hZ2VyIC51cGxvYWRfZmls ZScpLmh0bWwobXNnKTsKKworICAgIC8vdmFyIHByZXZpZXdUZW1wbGF0ZSA9 ICc8ZGl2IGlkPSJkcm9wem9uZS1jb250YWluZXIiPic7CisgICAgdmFyIHBy ZXZpZXdUZW1wbGF0ZSA9ICc8ZGl2IGNsYXNzPSJmaWxlX3VwbG9hZF9tYWlu IGR6LXByZXZpZXcgZHotZmlsZS1wcmV2aWV3Ij4nKworICAgICAgICAgICc8 ZGl2IGNsYXNzPSJzaG93X2Vycm9yIj4nICsKKyAgICAgICAgICAnPHAgY2xh c3M9InNpemUgZHotc2l6ZSIgZGF0YS1kei1zaXplPjwvcD4nICsKKyAgICAg ICAgICAnPHAgY2xhc3M9Im5hbWUgZHotZmlsZW5hbWUiIGRhdGEtZHotbmFt ZT48L3A+JyArCisgICAgICAgICAgJzwvZGl2PicgKworICAgICAgICAgICc8 ZGl2IGNsYXNzPSJkei1wcm9ncmVzcyI+PHNwYW4gY2xhc3M9ImR6LXVwbG9h ZCIgZGF0YS1kei11cGxvYWRwcm9ncmVzcz48L3NwYW4+PC9kaXY+JyArCisg ICAgICAgICAgJzxkaXYgY2xhc3M9ImR6LXN1Y2Nlc3MtbWFyayI+PHNwYW4+ PC9zcGFuPjwvZGl2PicgKworICAgICAgICAgICc8ZGl2IGNsYXNzPSJkei1l cnJvci1tYXJrIj48c3Bhbj48L3NwYW4+PC9kaXY+JyArCisgICAgICAgICAg JzxkaXYgY2xhc3M9ImR6LWVycm9yLW1lc3NhZ2UiPjxzcGFuIGRhdGEtZHot ZXJyb3JtZXNzYWdlPjwvc3Bhbj48L2Rpdj4nICsKKyAgICAgICAgICAnPGEg aHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgY2xhc3M9ImZhIGZhLXRyYXNo IGR6X2ZpbGVfcmVtb3ZlIiBkYXRhLWR6LXJlbW92ZT48L2E+JyArCisgICAg ICAgICAgJzwvZGl2Pic7CisKKyAgICAkKCJkaXYjbXVsdGlwbGUtdXBsb2Fk cyIpLmRyb3B6b25lKHsKKyAgICAgIHBhcmFtTmFtZTogIm5ld2ZpbGUiLAor ICAgICAgdXJsOiBmaWxlQ29ubmVjdG9yLAorICAgICAgbWF4RmlsZXNpemU6 IGZpbGVTaXplLAorICAgICAgbWF4RmlsZXM6IGNvbmZpZy51cGxvYWQubnVt YmVyLAorICAgICAgYWRkUmVtb3ZlTGlua3M6IHRydWUsCisgICAgICBwcmV2 aWV3VGVtcGxhdGU6IHByZXZpZXdUZW1wbGF0ZSwKKyAgICAgIHBhcmFsbGVs VXBsb2FkczogY29uZmlnLnVwbG9hZC5udW1iZXIsCisgICAgICBkaWN0TWF4 RmlsZXNFeGNlZWRlZDogbGcuZHpfZGljdE1heEZpbGVzRXhjZWVkZWQucmVw bGFjZSgKKyAgICAgICAgIiVzIiwgY29uZmlnLnVwbG9hZC5udW1iZXIKKyAg ICAgICksCisgICAgICBkaWN0RGVmYXVsdE1lc3NhZ2U6IGxnLmR6X2RpY3RE ZWZhdWx0TWVzc2FnZSwKKyAgICAgIGRpY3RJbnZhbGlkRmlsZVR5cGU6IGxn LmR6X2RpY3RJbnZhbGlkRmlsZVR5cGUsCisgICAgICBkaWN0RmlsZVRvb0Jp ZzogbGcuZmlsZV90b29fYmlnICsgJyAnICsgbGcuZmlsZV9zaXplX2xpbWl0 ICsKKyAgICAgICAgY29uZmlnLnVwbG9hZC5maWxlU2l6ZUxpbWl0ICsgJyAn ICsgbGcubWIsCisgICAgICBhY2NlcHRlZEZpbGVzOiBhY2NlcHRGaWxlcywK KyAgICAgIGF1dG9Qcm9jZXNzUXVldWU6IHRydWUsCisgICAgICBpbml0OiBm dW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGRyb3B6b25lID0gdGhpczsKKwor ICAgICAgICAkKCcuZHpfY3Jvc3NfYnRuJykudW5iaW5kKCkub24oJ2NsaWNr JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgJCgnLmZpbGVfbWFuYWdlciAu dXBsb2FkX2ZpbGUnKS50b2dnbGUoKTsKKyAgICAgICAgfSk7CisgICAgICB9 LAorICAgICAgc2VuZGluZzogZnVuY3Rpb24oZmlsZSwgeGhyLCBmb3JtRGF0 YSkgeworICAgICAgICBmb3JtRGF0YS5hcHBlbmQoIm1vZGUiLCAiYWRkIik7 CisgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgiY3VycmVudHBhdGgiLCBwYXRo KTsKKyAgICAgICAgJCgnLnVwbG9hZF9maWxlIC5kel9jcm9zc19idG4nKS5h dHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOworICAgICAgICBzZXRUaW1l b3V0KGZ1bmN0aW9uKCkge30sIDEwMDAwKTsKKyAgICAgIH0sCisgICAgICBz dWNjZXNzOiBmdW5jdGlvbihmaWxlLCByZXNwb25zZSkgeworICAgICAgICB2 YXIgcmVzcG9uc2UgPSBqUXVlcnkucGFyc2VKU09OKHJlc3BvbnNlKSwKKyAg ICAgICAgICAgIGRhdGEgPSByZXNwb25zZS5kYXRhLnJlc3VsdCwKKyAgICAg ICAgICAgICR0aGlzID0gJChmaWxlLnByZXZpZXdUZW1wbGF0ZSk7CisKKyAg ICAgICAgaWYgKGRhdGEuQ29kZSA9PSAwKSB7CisgICAgICAgICAgc2V0VGlt ZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICR0aGlzLmZpbmQoIi5k ei11cGxvYWQiKS5hZGRDbGFzcygic3VjY2VzcyIpOworICAgICAgICAgIH0s IDEwMDApOworICAgICAgICAgICR0aGlzLmZpbmQoIi5kei11cGxvYWQiKS5j c3MoJ3dpZHRoJywgIjEwMCUiKS5odG1sKCIxMDAlIik7CisgICAgICAgICAg YWxlcnRpZnkuc3VjY2VzcyhsZy51cGxvYWRfc3VjY2Vzcyk7CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgJHRoaXMuZmluZCgiLmR6LXVwbG9hZCIp LmFkZENsYXNzKCJlcnJvciIpOworICAgICAgICAgICR0aGlzLmZpbmQoIi5k ei11cGxvYWQiKS5jc3MoJ3dpZHRoJywgIjAlIikuaHRtbCgiMCUiKTsKKyAg ICAgICAgICBhbGVydGlmeS5lcnJvcihkYXRhLkVycm9yKTsKICAgICAgICAg fQotICAgICAgfSk7CisgICAgICAgIGdldEZvbGRlckluZm8ocGF0aCk7Cisg ICAgICB9LAorICAgICAgdG90YWx1cGxvYWRwcm9ncmVzczogZnVuY3Rpb24o cHJvZ3Jlc3MpIHt9LAorICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKGZpbGUp IHsKKyAgICAgICAgaWYgKGZpbGUuc3RhdHVzID09ICJlcnJvciIpIHsKKyAg ICAgICAgICBhbGVydGlmeS5lcnJvcihsZy5FUlJPUl9VUExPQURJTkdfRklM RSk7CisgICAgICAgIH0KKyAgICAgICAgJCgnLnVwbG9hZF9maWxlIC5kel9j cm9zc19idG4nKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOworICAgICAgICBn ZXRGb2xkZXJJbmZvKHBhdGgpOworICAgICAgfQogICAgIH0pOwotICB9Ci0K LSAgLy8gRGlzYWJsZSBzZWxlY3QgZnVuY3Rpb24gaWYgbm8gd2luZG93Lm9w ZW5lcgotICBpZiAoISAod2luZG93Lm9wZW5lciB8fCB3aW5kb3cudGlueU1D RVBvcHVwKSApIHsKLSAgICAkKCcjaXRlbU9wdGlvbnMgYVtocmVmJD0iI3Nl bGVjdCJdJykucmVtb3ZlKCk7Ci0gIH0KLSAgLy8gS2VlcCBvbmx5IGJyb3dz ZU9ubHkgZmVhdHVyZXMgaWYgbmVlZGVkCi0gIGlmIChjb25maWcub3B0aW9u cy5icm93c2VPbmx5ID09IHRydWUpIHsKLSAgICAkKCcubmV3ZmlsZScpLnJl bW92ZSgpOwotICAgICQoJy51cGxvYWQnKS5yZW1vdmUoKTsKLSAgICAkKCcu Y3JlYXRlJykucmVtb3ZlKCk7Ci0gICAgJCgnI3Rvb2xiYXInKS5yZW1vdmUo Jy5yZW5hbWUnKTsKLSAgICAkKCcuY29udGV4dE1lbnUgLnJlbmFtZScpLnJl bW92ZSgpOwotICAgICQoJy5jb250ZXh0TWVudSAuZGVsZXRlJykucmVtb3Zl KCk7Ci0gIH0KLSAgZ2V0RGV0YWlsVmlldyhmaWxlUm9vdCArIGV4cGFuZGVk Rm9sZGVyKTsKLX0pOwotCisgIH0pOworfQorZ2V0RGV0YWlsVmlldyhmaWxl Um9vdCk7CiB9KShqUXVlcnkpOworLy9AIHNvdXJjZVVSTD11dGlsaXR5Lmpz CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja2Zvcm0u cGdhZG1pbi5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9iYWNrZm9ybS5w Z2FkbWluLmpzCmluZGV4IDRhODE0MTEuLjkwZDg4ODAgMTAwNjQ0Ci0tLSBh L3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9iYWNrZm9ybS5wZ2FkbWluLmpzCisr KyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9iYWNrZm9ybS5wZ2FkbWluLmpz CkBAIC0yMDgwLDggKzIwODAsMTEgQEAKICAgICAgICAgJzwvZGl2PicsCiAg ICAgICAnPC9kaXY+JwogICAgIF0uam9pbigiXG4iKSksCi0gICAgZXZlbnRz OiB7Ci0gICAgICAiY2xpY2sgLnNlbGVjdF9pdGVtIjogIm9uU2VsZWN0IiwK KyAgICBldmVudHM6IGZ1bmN0aW9uKCkgeworICAgICAgLy8gSW5oZXJpdCBh bGwgZGVmYXVsdCBldmVudHMgb2YgSW5wdXRDb250cm9sCisgICAgICByZXR1 cm4gXy5leHRlbmQoe30sIEJhY2tmb3JtLklucHV0Q29udHJvbC5wcm90b3R5 cGUuZXZlbnRzLCB7CisgICAgICAgICJjbGljayAuc2VsZWN0X2l0ZW0iOiAi b25TZWxlY3QiCisgICAgICB9KTsKICAgICB9LAogICAgIG9uU2VsZWN0OiBm dW5jdGlvbihlKSB7CiAgICAgICB2YXIgZGlhbG9nX3R5cGUgPSB0aGlzLmZp ZWxkLmdldCgnZGlhbG9nX3R5cGUnKTsK --001a114178565e98530533440cc9 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers --001a114178565e98530533440cc9--