Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1l1Mi8-00089J-F7 for pgadmin-hackers@arkaria.postgresql.org; Mon, 18 Jan 2021 05:04:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1l1Mi7-00088b-D9 for pgadmin-hackers@arkaria.postgresql.org; Mon, 18 Jan 2021 05:04:15 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1l1Mi6-00087Z-R9 for pgadmin-hackers@lists.postgresql.org; Mon, 18 Jan 2021 05:04:15 +0000 Received: from mail-lj1-x233.google.com ([2a00:1450:4864:20::233]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1l1Mi3-0003KB-GE for pgadmin-hackers@postgresql.org; Mon, 18 Jan 2021 05:04:13 +0000 Received: by mail-lj1-x233.google.com with SMTP id n11so16906202lji.5 for ; Sun, 17 Jan 2021 21:04:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=tVmo2CO2ayrp+lp748hV8Bu3/mVWVzbTJWeq7GR4BBY=; b=WFAbT+hh+2mD5ToOoutgu079xWuzTCIkmc66O1a42/X78BKlpxNmSy7K/zgonPSl4n BE9hJtTBq3cGt2NfkgcnuKAHs6J/aNmkGiE5rFZD/CcFvh1/UuwOdvW+Y0BwhjhkTuJG fm0cre6fOl4/1ggQ+d2aYwFHg7+RkMLtacUST8gY9sF7ZCzpgZ62f3IHIpbU2YIrHFlp jwW7oEDt07yTdxhV0i3pLVMTKT7JWuGr9Szczz3/LZaVEgeOVvpVfhF/RpTEHU6A052z 8S3MqY4fKRC13BYRSeSpsi+Q5+Cnf1WX3Dv8ZMPEmOt8ExCZft/uUYQ8lnvofhukjG8r nsUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=tVmo2CO2ayrp+lp748hV8Bu3/mVWVzbTJWeq7GR4BBY=; b=KY+hDqB5emgb6DL6EWIqs3Wj34AoZvyYdWYInTrTGBY4hkIJAs9HaW9YJ3zKAgBPXr rAXLjEyngWBmDEW60at8ENYj4a9cOhR2tktN2jhe+0Vp9lqMyWiHqx+u0VNEPBpcLn0/ gflubja96S4o71nejVfQaG0EXHxXGXDsbmmNyifczc+ahzXLN5sFC5cmhbZR2Had+cC/ 5pXPMhGCpC+TRr7CbIhXlrJPCHUKVxNaSul1WXQUyCHEKzsCDKq7luTV1D8iaYm3y41v /stz1Ugc0GI9YWodTVPWK3hrEDgeEcl8QdyyWjdee7U9TnecbsyLKmdZc22lypBTzbek A5oA== X-Gm-Message-State: AOAM533ERP8LlzbDZACVav/gYrV7uos68ep8IilyB7rNx500zFWgVuBf 86Pghod6nA4qC2KOQ7Hb/pm/B8483vjYV/VKRPXvHjryRFYRHKREKvQuTYyxPM08s5hu44hhUwu qSxt0Zf8hV0B82r7lIuxnovcwDNFS3RnyIdQRs36Yc/31mhKeDEU9cj3QGJcUTH3Kjr62ljRSO4 1NyRRAx5Zz0dViaZ+SzSEUz+Wt+brPmd0aqnSXxHVQ/wz2mMT1UKnQ7ILmbA== X-Google-Smtp-Source: ABdhPJzk0GT3oi7ldmuJde4X0kZ7k9wKu1he5B2sogUxlq6tERnRdVnwg5HFkyVmlPFLWLu21RqO4jlOmCWME3rurrA= X-Received: by 2002:a2e:8e98:: with SMTP id z24mr9869063ljk.83.1610946249462; Sun, 17 Jan 2021 21:04:09 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Aditya Toshniwal Date: Mon, 18 Jan 2021 10:33:32 +0530 Message-ID: Subject: Re: [pgAdmin][RM1802] ERD Tool (Beta) To: Akshay Joshi Cc: Khushboo Vashi , pgadmin-hackers Content-Type: multipart/mixed; boundary="000000000000f3c18605b925a6fb" X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --000000000000f3c18605b925a6fb Content-Type: multipart/alternative; boundary="000000000000f3c18305b925a6f9" --000000000000f3c18305b925a6f9 Content-Type: text/plain; charset="UTF-8" Hi Akshay, I forgot to remove few of the dependencies which are not required as of now (may be in future). Attached patch removes those dependencies from package.json. On Sat, Jan 16, 2021 at 5:08 PM Akshay Joshi wrote: > Thanks, patch applied. > > On Fri, Jan 15, 2021 at 7:01 PM Aditya Toshniwal < > aditya.toshniwal@enterprisedb.com> wrote: > >> Hi, >> >> I've fixed the issues. You can find the comments inline. >> I've also added PropTypes for the components for increased validation. >> >> On Tue, Jan 12, 2021 at 12:18 PM Khushboo Vashi < >> khushboo.vashi@enterprisedb.com> wrote: >> >>> Hi Aditya, >>> >>> The functionalities and the code looks good to me, however some of the comments as below: >>> >>> >>> - Correct the comments at some places (3 occurrences found in /erd/__init__.py) which mention Schema diff instead of ERD. >>> >>> Some comments in the JS/JSX file regarding components/functions (For example, IconButton (forwardRef), Bodywidget etc.) would >>> >>> be great help as we all are new to React. >>> >>> Done. Added comments to the components. >> >>> >>> - Remove the unused imports (for ex bad_request) in /erd/__init__.py >>> >>> Removed. >> >>> >>> - Remove commented code >>> >>> # req_args = request.args >>> # if ('recreate' in req_args and >>> # req_args['recreate'] == '1'): >>> # connect = False >>> >>> Removed. >> >>> >>> - TableNode.jsx, below two lines can be combined. >>> >>> import { PortModelAlignment, DefaultNodeModel } from >>> '@projectstorm/react-diagrams'; >>> import { PortWidget } from '@projectstorm/react-diagrams'; >>> >>> Done. >> >>> >>> - onImageClick function in BodyWidget.jsx is no use I think, so it should be removed. >>> >>> I wanted to keep the code as it will be used in future. Anyway, I've >> removed the code. >> >>> >>> - I got some console errors while adding/editing tables. Refer to the attached screenshot. >>> >>> I tried but I didn't get any. Looking at the screenshot, the error is >> from the underlying library. Can't do much in this. >> >>> >>> - In the column Edit Mode, while deleting the primary key, it gives the error, which does not go away with any further modifications. >>> >>> Fixed. >> >>> >>> - While generating the SQL, if the server is disconnected, a proper error message should be thrown, right now some server side error is coming. >>> >>> It will show connection lost error now. Fixed. >> >>> >>> - Please remove ... from the menu title (New ERD Project(Beta)...) as it is not opening a dialog. >>> >>> Done. >> >>> >>> - For large data sets, generate ERD hangs. >>> >>> It shows the spinner and waits for the response to come from the back >> end. I've used the existing table fetching code which is used at other >> places. I'll create an RM to improve the back end code for fetching the >> tables data which will help the schema diff tool as well. >> >>> >>> - Opening the ERD panel in a new window is not working, it opens in the same tab even if you have set the Preference "Open in new browser tab" to True. >>> >>> Fixed. Added the setting in "Tab settings". >> >>> >>> - No shortcut is provided to open the ERD Tool. >>> >>> A shortcut is helpful if we are using it frequently. ERD tool won't be >> used that frequently. We already have a limited number of keys available >> for shortcuts. I think we should roll out without shortcut for now. If >> there is a user demand for it then we can think of adding it. >> >>> >>> - SonarQube fixes required. >>> >>> Fixed. >> >>> >>> - >>> >>> *Suggestion:* >>> >>> While removal of the FK link, If any of the table is selected, it is being deleted with FK link. >>> Either we should warn the user OR make 2 different buttons for FK removal and table removal as the user may be confused if the selected table is also removed with the FK. >>> >>> I've added a confirmation dialog which will show the number of tables >> and links selected. This way user will know what he has selected before >> deleting. >> >>> *Observations:* >>> >>> Lodash has been used in this module in place of Underscore, though the >>> dependency is already introduced by another module, >>> but we have mentioned it in the package.json file, which is somewhat not >>> convincing to me. >>> Lodash is more advanced than Underscore but we should pick anyone as it >>> will be easy to manage. >>> >>> TL;DR; we cannot. >> lodash is a peer dependency for react-diagrams (and some existing modules >> in pgAdmin) so it will come to package.json without choice. We cannot >> remove underscore because it is a dependency of backbone. Underscore is >> outdated, and I cannot migrate the complete pgAdmin code. So, I decided >> to go with 100/0 method. All the new codes will use lodash only as we'll >> phase out underscore with time. Just like jQuery vs ReactJS. >> >>> >>> >>> Table dialog code is duplicate of the table node, as it was difficult to >>> extend it because it was attached to the tree. >>> So, we need to keep in mind that while implementing React in pgAdmin, >>> the nodes should be properly detached from the tree itself, so we can reuse >>> it. >>> >>> Yes. I agree. We need to separate out data source from UI going forward with >> React. >> >>> >>> Thanks, >>> Khushboo >>> >>> >>> On Mon, Dec 28, 2020 at 10:53 AM Khushboo Vashi < >>> khushboo.vashi@enterprisedb.com> wrote: >>> >>>> >>>> >>>> On Fri, Dec 25, 2020 at 4:34 PM Akshay Joshi < >>>> akshay.joshi@enterprisedb.com> wrote: >>>> >>>>> Hi Khushboo, >>>>> >>>>> Can you please review it? >>>>> >>>>> On it. >>>> >>>>> On Fri, Dec 25, 2020 at 3:31 PM Aditya Toshniwal < >>>>> aditya.toshniwal@enterprisedb.com> wrote: >>>>> >>>>>> Hi Hackers, >>>>>> >>>>>> Attached patch introduces ERD Tool(Beta) to pgAdmin. Below are the >>>>>> details: >>>>>> 1) Create a diagram from scratch or generate for an existing DB. >>>>>> 2) Generate "Create" DDL from the diagram. >>>>>> 3) Save the diagram and resume it later. >>>>>> 4) Supports basic table fields, one-to-many relationships, >>>>>> many-to-many relationships, adding notes. >>>>>> 5) Test cases added with 75-80% test coverage. >>>>>> >>>>>> Please review. >>>>>> >>>>>> -- >>>>>> Thanks, >>>>>> Aditya Toshniwal >>>>>> pgAdmin hacker | Sr. Software Engineer | *edbpostgres.com* >>>>>> >>>>>> "Don't Complain about Heat, Plant a TREE" >>>>>> >>>>> >>>>> >>>>> -- >>>>> *Thanks & Regards* >>>>> *Akshay Joshi* >>>>> *pgAdmin Hacker | Principal Software Architect* >>>>> *EDB Postgres * >>>>> >>>>> *Mobile: +91 976-788-8246* >>>>> >>>> >> >> -- >> Thanks, >> Aditya Toshniwal >> pgAdmin hacker | Sr. Software Engineer | *edbpostgres.com* >> >> "Don't Complain about Heat, Plant a TREE" >> > > > -- > *Thanks & Regards* > *Akshay Joshi* > *pgAdmin Hacker | Principal Software Architect* > *EDB Postgres * > > *Mobile: +91 976-788-8246* > -- Thanks, Aditya Toshniwal pgAdmin hacker | Sr. Software Engineer | *edbpostgres.com* "Don't Complain about Heat, Plant a TREE" --000000000000f3c18305b925a6f9 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Akshay,

I forgot to remove few of the dependencies whic= h are not required as of now (may be in future). Attached patch removes tho= se dependencies from package.json.

On Sat, Jan 16, 2021 at 5:08 PM Aks= hay Joshi <akshay.joshi= @enterprisedb.com> wrote:
Thanks, patch applied.

On Fri, Jan 15, 202= 1 at 7:01 PM Aditya Toshniwal <aditya.toshniwal@enterprisedb.com> wro= te:
Hi,

I've fixed the = issues. You can find the comments inline.
I've also added PropTypes for the components for increased validati= on.

On Tue, Jan 12, 2021 at 12:18 PM Khushboo Vashi <khushboo.= vashi@enterprisedb.com> wrote:
Hi Aditya,
The functionalit=
ies and the code looks good to me, however some of the comments as below:
  • Correct the comments at some places (3 occurrences found in /erd/__init__.py) which mention Sche= ma diff instead of ERD.
Some comments in the=
 JS/JSX file regarding components/functions (For example, IconButton (forwa=
rdRef), Bodywidget etc.) would
=
be great help as we all are new to React. =
Done. Added comments to= the components.
    <= li>Remove the unused imports (for ex bad_r= equest) in /erd/__init__.py
=
Removed.=C2=A0
    Remove commented code
<= font face=3D"arial, sans-serif"># req_args =3D request.args
# if ('r= ecreate' in req_args and
# =C2=A0 =C2=A0 req_args['recreate'= ] =3D=3D '1'):
# =C2=A0 =C2=A0 connect =3D False
Removed.=C2=A0
  • TableNode.jsx, below two lines c= an be combined.
import { = PortModelAlignment, DefaultNodeModel } from '@projectstorm/react-diagra= ms';
import { PortWidget } from '@projectstorm/react-diagrams= 9;;
Done.=C2=A0
  • onImageClick function in BodyWidget.jsx is no use I think, so it sho= uld be removed.
I wanted to= keep the code as it will be used in future. Anyway, I've removed the c= ode.
  • I got some console errors while adding/editing tabl= es. Refer to the attached screenshot.
I tried but I didn't get any. Looking at the screenshot, the= error is from the underlying library. Can't do much in this.=C2= =A0
  • In the column Edit Mode, while deleting the primary key, it= gives the error, which does not go away with any further modifications.
Fixed.=C2=A0
  • While generating the SQL, if the server is disconnected, a proper error = message should be thrown, right now some server side error is coming.
It will show connection lost er= ror now. Fixed.=C2=A0
  • Please remove ... from the menu = title (New ERD Project(Beta)...) as it is not opening a dialog.
  • =
Done.=C2=A0
=
  • For lar= ge data sets, generate ERD hangs.
It shows the spinner and waits for the response to come from the bac= k end. I've used the existing table fetching code which is used at othe= r places. I'll create an RM to improve the back end code for fetching t= he tables data which will help the schema diff tool as well.
  • Opening the ERD panel in a new window is not working, it opens in th= e same tab even if you have set the Preference "Open in new browser ta= b" to True.
Fixed. Add= ed the setting in "Tab settings".
  • No shortcu= t is provided to open the ERD Tool.
  • A shortcut is helpful if we are using it frequently. ERD tool won&= #39;t be used that frequently.=C2=A0We already have a limited number of = keys available for shortcuts. I think we should roll out without shortcut f= or now. If there is a user demand for it then we can think of adding it.
    • SonarQube fixes required.
    Fixed.=C2=A0
    Suggestion:=
    
    While removal of the FK link, If any of the table= is selected, it is being deleted with FK link.
    Either we should warn the= user OR make 2 different buttons for FK removal and table removal as the u= ser may be confused if the selected table is also removed with the FK.
    <= /font>
    I've added a co= nfirmation dialog which will show the number of tables and links selected. = This way user will know what he has selected before deleting.
    <= /font>
    Observations:
    Lodash has been used in this module in place of Unde= rscore, though the dependency is already introduced by another module,
    b= ut we have mentioned it in the package.json file, which is somewhat not con= vincing to me.
    Lodash is more advanced than Underscore but we should pic= k anyone as it will be easy to manage.
    TL;DR; we cannot.
    lodash is a peer dependency for react= -diagrams (and some existing modules in pgAdmin) so it will come to package= .json without choice. We cannot remove underscore because it is a dependenc= y of backbone. Underscore is outdated, and I cannot migrate the complete pg= Admin code.=C2=A0So, I decided to go with 100/0 method. All the new code= s will use lodash only as we'll phase out underscore with time. Just li= ke jQuery vs ReactJS.


    Table dialog code is duplicate of the = table node, as it was difficult to extend it because it was attached to the= tree.
    So, we need to keep in mind that while implementing React in pgAd= min, the nodes should be properly detached from the tree itself, so we can = reuse it.
    Yes. I agree. We need = to separate out data source from UI going forward=C2=A0with React.

    Thanks,
    Khushboo


    On Mon, Dec 28, 2020 at 10:53 AM Khush= boo Vashi <khushboo.vashi@enterprisedb.com> wrote:


    On Fri, Dec 25, 2020 at 4:= 34 PM Akshay Joshi <akshay.joshi@enterprisedb.com> wrote:
    Hi Khushboo,

    Can you plea= se review it?

    On it.=C2=A0
    = On Fri, Dec 25, 2020 at 3:31 PM Aditya Toshniwal <aditya.toshniwal@enterpris= edb.com> wrote:
    Hi Hac= kers,

    Attached patch introduces ERD Tool(Beta= ) to pgAdmin. Below are the details:
    1) Create a diagram from scratch or generate for an existing DB= .
    2) Generate "Creat= e" DDL from the diagram.
    3) Save the diagram and resume it later.
    4) Supports basic table fields, one-to-many relation= ships, many-to-many relationships, adding notes.
    5) Test cases added with 75-80% test coverage.

    Please review.

    --
    Thanks,
    Ad= itya Toshniwal
    <= /font>
    pgAdmin hacker=C2=A0| = Sr. Software Engineer | edbpostgres.com
    "Don't Complain about Heat, Plant a TREE"


    --
    Thanks & Regards
    Akshay Joshi
    = pgAdmin Hacker | Principal Software Ar= chitect
    EDB Po= stgres
    Mobile: +91 976-788-8246

    <= /div>


    --
    Thanks,
    Aditya Toshniwal=
    pgAdmin hacker=C2=A0| Sr. Software Engineer | edbpostgres.com
    &quo= t;Don't Complain about Heat, Plant a TREE"


    --
    Thank= s & Regards
    Akshay Joshi
    pgAdmin Hacker | Principal Softw= are Architect
    EDB Po= stgres
    Mobile: +91 976-788-8246



    --
    Thanks,
    Aditya Toshniwal
    pgAdmin hacker=C2=A0| Sr. Softwa= re Engineer | edbpostgres.com<= /font>
    "Don't Complain about Heat, Plant a TREE&qu= ot;
    --000000000000f3c18305b925a6f9-- --000000000000f3c18605b925a6fb Content-Type: application/octet-stream; name="RM1802.removedeps.patch" Content-Disposition: attachment; filename="RM1802.removedeps.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kk23s35p0 ZGlmZiAtLWdpdCBhL3dlYi9wYWNrYWdlLmpzb24gYi93ZWIvcGFja2FnZS5qc29uCmluZGV4IGMx Y2M1YzQ5Mi4uOWQ0YzA2MGRjIDEwMDY0NAotLS0gYS93ZWIvcGFja2FnZS5qc29uCisrKyBiL3dl Yi9wYWNrYWdlLmpzb24KQEAgLTc5LDcgKzc5LDYgQEAKICAgICAiYm9vdHN0cmFwNC10b2dnbGUi OiAiMy40LjAiLAogICAgICJib3dzZXIiOiAiMi4xLjIiLAogICAgICJicm93c2VyaWZ5IjogIn4x Ni4yLjMiLAotICAgICJjYW52ZyI6ICJeMy4wLjciLAogICAgICJjaGFydC5qcyI6ICJeMi45LjMi LAogICAgICJjbG9zZXN0IjogIl4wLjAuMSIsCiAgICAgImNvZGVtaXJyb3IiOiAiXjUuNTQuMCIs CkBAIC04OCw4ICs4Nyw2IEBACiAgICAgImRhZ3JlIjogIl4wLjguNCIsCiAgICAgImRyb3B6b25l IjogIl41LjUuMSIsCiAgICAgImV4cG9ydHMtbG9hZGVyIjogIn4wLjcuMCIsCi0gICAgImh0bWwt dG8taW1hZ2UiOiAiXjAuMS4xIiwKLSAgICAiaHRtbDJjYW52YXMiOiAiXjEuMC4wLXJjLjciLAog ICAgICJpbW11dGFiaWxpdHktaGVscGVyIjogIl4zLjAuMCIsCiAgICAgImltcG9ydHMtbG9hZGVy IjogIl4wLjguMCIsCiAgICAgImlwLWFkZHJlc3MiOiAiXjUuOC45IiwKZGlmZiAtLWdpdCBhL3dl Yi95YXJuLmxvY2sgYi93ZWIveWFybi5sb2NrCmluZGV4IGFkYTk2MmU5NC4uNTUxMjEzYTI3IDEw MDY0NAotLS0gYS93ZWIveWFybi5sb2NrCisrKyBiL3dlYi95YXJuLmxvY2sKQEAgLTgyNSwxNCAr ODI1LDYgQEAKICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtanN4LWRldmVsb3Bt ZW50IiAiXjcuMTIuNyIKICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtcHVyZS1h bm5vdGF0aW9ucyIgIl43LjEyLjEiCiAKLSJAYmFiZWwvcnVudGltZS1jb3JlanMzQF43LjkuNiI6 Ci0gIHZlcnNpb24gIjcuMTIuNSIKLSAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBr Zy5jb20vQGJhYmVsL3J1bnRpbWUtY29yZWpzMy8tL3J1bnRpbWUtY29yZWpzMy03LjEyLjUudGd6 I2ZmZWU5MWRhMGViNGM2ZGFlMDgwNzc0ZTk0YmE2MDYzNjhlNDE0ZjQiCi0gIGludGVncml0eSBz aGE1MTItcm9HcjU0Q3NUbU5QUHpab0NQMUFtRFh1Qm9OYW83dG5TQTgzVFhUd3QrVUs1UVZ5aDFE SUpucmdZUlBXS0NGMmZscVpRWHdhN1lyOHY3Vm1MekYwWVE9PQotICBkZXBlbmRlbmNpZXM6Ci0g ICAgY29yZS1qcy1wdXJlICJeMy4wLjAiCi0gICAgcmVnZW5lcmF0b3ItcnVudGltZSAiXjAuMTMu NCIKLQogIkBiYWJlbC9ydW50aW1lQF43LjUuNSIsICJAYmFiZWwvcnVudGltZUBeNy43LjIiLCAi QGJhYmVsL3J1bnRpbWVAXjcuOC40IjoKICAgdmVyc2lvbiAiNy4xMi41IgogICByZXNvbHZlZCAi aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9AYmFiZWwvcnVudGltZS8tL3J1bnRpbWUtNy4x Mi41LnRneiM0MTBlN2U0ODc0NDFlMWIzNjBjMjliZTcxNWQ4NzBkOWI5ODU4ODJlIgpAQCAtMTA4 MCwxMSArMTA3Miw2IEBACiAgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t L0B0eXBlcy9xLy0vcS0xLjUuNC50Z3ojMTU5MjU0MTRlMGFkMmNkNzY1YmZlZjU4ODQyZjdlMjZh N2FjY2IyNCIKICAgaW50ZWdyaXR5IHNoYTUxMi0xSGNEYXM4U0VqNHoxV2M2OTZ0SDU2RzhPbFJh SC9zcVpPeW5OTkIrSEYwV09lWFBheFR0Yll6Slkyb0VmaVV4alNLamhDS3IrTXZSN2RDSGNFZWx1 Zz09CiAKLSJAdHlwZXMvcmFmQF4zLjQuMCI6Ci0gIHZlcnNpb24gIjMuNC4wIgotICByZXNvbHZl ZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9AdHlwZXMvcmFmLy0vcmFmLTMuNC4wLnRn eiMyYjcyY2JkNTU0MDVlMDcxZjFjNGQyOTk5MjYzOGUwMjJiMjBhY2MyIgotICBpbnRlZ3JpdHkg c2hhNTEyLXRhVzUvV1lxbzM2TjdWMzlvWXlIUDlJcGZkNXBORnZHVElRc05Hajg2eFY4OFlRN0du STMwL3lNZktERjdaZ2luMG0zZStpa1g4OEZ2SW1uSzRSakd3PT0KLQogIkB3ZWJhc3NlbWJseWpz L2FzdEAxLjkuMCI6CiAgIHZlcnNpb24gIjEuOS4wIgogICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdp c3RyeS55YXJucGtnLmNvbS9Ad2ViYXNzZW1ibHlqcy9hc3QvLS9hc3QtMS45LjAudGd6I2JkODUw NjA0YjQwNDI0NTlhNWE0MWNkN2QzMzhjYmVkNjk1ZWQ5NjQiCkBAIC0xODI2LDExICsxODEzLDYg QEAgYmFzZTY0LWFycmF5YnVmZmVyQDAuMS41OgogICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3Ry eS55YXJucGtnLmNvbS9iYXNlNjQtYXJyYXlidWZmZXIvLS9iYXNlNjQtYXJyYXlidWZmZXItMC4x LjUudGd6IzczOTI2NzcxOTIzYjVhMTk3NDdhZDY2NmFhNWNkNGJmOWM2ZTljZTgiCiAgIGludGVn cml0eSBzaGExLWM1Sm5jWkk3V2hsMGV0Wm1xbHpVdjV4dW5PZz0KIAotYmFzZTY0LWFycmF5YnVm ZmVyQF4wLjIuMDoKLSAgdmVyc2lvbiAiMC4yLjAiCi0gIHJlc29sdmVkICJodHRwczovL3JlZ2lz dHJ5Lnlhcm5wa2cuY29tL2Jhc2U2NC1hcnJheWJ1ZmZlci8tL2Jhc2U2NC1hcnJheWJ1ZmZlci0w LjIuMC50Z3ojNGI5NDRmYWMwMTkxYWE1OTA3YWZlMmQ4Yzk5OWNjYzU3Y2U4MGY0NSIKLSAgaW50 ZWdyaXR5IHNoYTUxMi03ZW15Q3N1MS94aUJYZ1FacnNjdy84S1BSVDQ0STRZcTlQZTZFR3MzYVBS VHNXdWdnTUwxLzFEVHVaVXVJYUpQSW0xRlREVVZYbDR4L3lXOHMwa1FEUT09Ci0KIGJhc2U2NC1q c0BeMS4wLjIsIGJhc2U2NC1qc0BeMS4zLjE6CiAgIHZlcnNpb24gIjEuNS4xIgogICByZXNvbHZl ZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9iYXNlNjQtanMvLS9iYXNlNjQtanMtMS41 LjEudGd6IzFiMWI0NDAxNjBhNWJmN2FkNDBiNjUwZjA5NTk2MzQ4MTkwMzkzMGEiCkBAIC0yNDgw LDE4ICsyNDYyLDYgQEAgY2FuaXVzZS1saXRlQF4xLjAuMCwgY2FuaXVzZS1saXRlQF4xLjAuMzAw MDExMDksIGNhbml1c2UtbGl0ZUBeMS4wLjMwMDAxMTY1OgogICByZXNvbHZlZCAiaHR0cHM6Ly9y ZWdpc3RyeS55YXJucGtnLmNvbS9jYW5pdXNlLWxpdGUvLS9jYW5pdXNlLWxpdGUtMS4wLjMwMDAx MTcwLnRneiMwMDg4YmZlY2M2YTE0Njk0OTY5ZTM5MWNjMjlkN2ViNjM2MmNhNmE3IgogICBpbnRl Z3JpdHkgc2hhNTEyLURkNGQvKzB0c0swVU5MclpzM0N2TnVrcWFsblZUUnJ4YjVtY1FtOHJITDQ5 dDdWNVphVHlnd1hrcnErRkIrZFZEZisrNHJpOGVKbkZFSkFCODMzMlBBPT0KIAotY2FudmdAXjMu MC43OgotICB2ZXJzaW9uICIzLjAuNyIKLSAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFy bnBrZy5jb20vY2FudmcvLS9jYW52Zy0zLjAuNy50Z3ojZTQ1Yjg3YTY0MTE2YWY5MDY5MTdmN2Nh ZDU3ZDM3MGVhMzcyZDY4MiIKLSAgaW50ZWdyaXR5IHNoYTUxMi00c3E2aUw1UTRWT1hTM1BMMUJh cGlYSVpJdHB4WXlBTlZ6c0FLcFRQUzVvcTR1M1NLYkdmVWNiWmgyZ2RMQ1EzaldwRy95NXdSa01s QkJBSmhYZWlaQT09Ci0gIGRlcGVuZGVuY2llczoKLSAgICAiQGJhYmVsL3J1bnRpbWUtY29yZWpz MyIgIl43LjkuNiIKLSAgICAiQHR5cGVzL3JhZiIgIl4zLjQuMCIKLSAgICByYWYgIl4zLjQuMSIK LSAgICByZ2Jjb2xvciAiXjEuMC4xIgotICAgIHN0YWNrYmx1ci1jYW52YXMgIl4yLjAuMCIKLSAg ICBzdmctcGF0aGRhdGEgIl41LjAuNSIKLQogY2F3QF4yLjAuMCwgY2F3QF4yLjAuMToKICAgdmVy c2lvbiAiMi4wLjEiCiAgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2Nh dy8tL2Nhdy0yLjAuMS50Z3ojNmMzY2EwNzFmYzE5NDcyMDg4M2MyZGM1ZGE5YjA3NGJmYzdlOWU5 NSIKQEAgLTI5NTcsMTEgKzI5MjcsNiBAQCBjb3JlLWpzLWNvbXBhdEBeMy44LjA6CiAgICAgYnJv d3NlcnNsaXN0ICJeNC4xNS4wIgogICAgIHNlbXZlciAiNy4wLjAiCiAKLWNvcmUtanMtcHVyZUBe My4wLjA6Ci0gIHZlcnNpb24gIjMuOC4xIgotICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55 YXJucGtnLmNvbS9jb3JlLWpzLXB1cmUvLS9jb3JlLWpzLXB1cmUtMy44LjEudGd6IzIzZjg0MDQ4 ZjM2NmZkZmNmNTJkM2ZkMWM2OGZlYzM0OTE3N2QxMTkiCi0gIGludGVncml0eSBzaGE1MTItU2Ur TGF4cVhsVlhHdm1leEtHUHZuVUlZQzFqd1h1MUg2UGt5YjN1Qk01ZDgvTkVMTVlDSHMvNC9yb0Q3 NzIxTnhyVEx5djdlNW5YZDUvUUxCTysxMGc9PQotCiBjb3JlLWpzQF4yLjQuMDoKICAgdmVyc2lv biAiMi42LjEyIgogICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jb3Jl LWpzLy0vY29yZS1qcy0yLjYuMTIudGd6I2Q5MzMzZGZhN2IwNjVlMzQ3Y2M1NjgyMjE5ZDZmNjkw ODU5Y2MyZWMiCkBAIC0zMDg2LDEzICszMDUxLDYgQEAgY3NzLWRlY2xhcmF0aW9uLXNvcnRlckBe NC4wLjE6CiAgICAgcG9zdGNzcyAiXjcuMC4xIgogICAgIHRpbXNvcnQgIl4wLjMuMCIKIAotY3Nz LWxpbmUtYnJlYWtAMS4xLjE6Ci0gIHZlcnNpb24gIjEuMS4xIgotICByZXNvbHZlZCAiaHR0cHM6 Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jc3MtbGluZS1icmVhay8tL2Nzcy1saW5lLWJyZWFrLTEu MS4xLnRneiNkNWU5YmRkMjk3ODQwMDk5ZWIwNTAzYzczMTBmZDM0OTI3YTAyNmVmIgotICBpbnRl Z3JpdHkgc2hhNTEyLTFmZU5WYU00Rnl6ZGo0bUtQSVFOTDJuNzBNbXVZekFYWjFheXRsUk9GWDFK c09vMDcwT3N1Z3dHamo3bmw2am5ESldIRE04elJac3drbWVZVldaSlFBPT0KLSAgZGVwZW5kZW5j aWVzOgotICAgIGJhc2U2NC1hcnJheWJ1ZmZlciAiXjAuMi4wIgotCiBjc3MtbG9hZGVyQDIuMS4w OgogICB2ZXJzaW9uICIyLjEuMCIKICAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBr Zy5jb20vY3NzLWxvYWRlci8tL2Nzcy1sb2FkZXItMi4xLjAudGd6IzQyOTUyYWMyMmJjYTVkMDc2 OTc4NjM4ZTk4MTNhYmNlNDliOGYwY2MiCkBAIC01MDI0LDE4ICs0OTgyLDYgQEAgaHRtbC1lc2Nh cGVyQF4yLjAuMDoKICAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaHRt bC1lc2NhcGVyLy0vaHRtbC1lc2NhcGVyLTIuMC4yLnRneiNkZmQ2MDAyN2RhMzZhMzZkZmNiZTIz NjI2MmMwMGE1ODIyNjgxNDUzIgogICBpbnRlZ3JpdHkgc2hhNTEyLUgyaU10ZDBJNE10NWVZaWFw UmRJRGpwK1h6ZWxYUTB0RkU0SlM3WUZ3RmV2WFhNbU9wOW15TnJVdkNnMEQ2d3M4aXFrUlBCZktI Z2J3aWcxU21sTGZnPT0KIAotaHRtbC10by1pbWFnZUBeMC4xLjE6Ci0gIHZlcnNpb24gIjAuMS4z IgotICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9odG1sLXRvLWltYWdl Ly0vaHRtbC10by1pbWFnZS0wLjEuMy50Z3ojOTY2MWE1NGMzMGVkOWM0YjI2OWY0NjEyNDE2YjFj N2U4ODdkZTNhNyIKLSAgaW50ZWdyaXR5IHNoYTUxMi04SlRHRUFBZEpHTC9ubHAzd2IvV0k4ZkxN eDJkSEtPRlpNZHN2ZG9uMjNENDVaZHRzWERlUm0zOVdkZGYwNGx1ZFFlM09QbXZqTUo5blBqSS83 aFBsZz09Ci0KLWh0bWwyY2FudmFzQF4xLjAuMC1yYy43OgotICB2ZXJzaW9uICIxLjAuMC1yYy43 IgotICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9odG1sMmNhbnZhcy8t L2h0bWwyY2FudmFzLTEuMC4wLXJjLjcudGd6IzcwYzE1OWNlMGU2Mzk1NGE5MTE2OTUzMTg5NGQw OGFkNTYyN2FjOTgiCi0gIGludGVncml0eSBzaGE1MTIteXZQTlpHZWpCMktPeUtsZVpzcGpLL05y dVhWUXVvd3U4Tm5WMkhZRzdnVzd5dHpsK3VtZmZidFVJNjJ2MmRDSFFMRGRzSzZISUR0eUpaMFcz bmVlckE9PQotICBkZXBlbmRlbmNpZXM6Ci0gICAgY3NzLWxpbmUtYnJlYWsgIjEuMS4xIgotCiBo dG1sZXNjYXBlQF4xLjEuMDoKICAgdmVyc2lvbiAiMS4xLjEiCiAgIHJlc29sdmVkICJodHRwczov L3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2h0bWxlc2NhcGUvLS9odG1sZXNjYXBlLTEuMS4xLnRneiMz YTAzZWRjMjIxNGJjYTNiNjY0MjRhM2U3OTU5MzQ5NTA5Y2IwMzUxIgpAQCAtODQ4MSwxMSArODQy Nyw2IEBAIHJnYmEtcmVnZXhAXjEuMC4wOgogICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55 YXJucGtnLmNvbS9yZ2JhLXJlZ2V4Ly0vcmdiYS1yZWdleC0xLjAuMC50Z3ojNDMzNzRlMmUyY2Ew OTY4YjBlZjE1MjM0NjBiN2Q3MzBmZjIyZWViMyIKICAgaW50ZWdyaXR5IHNoYTEtUXpkT0xpeWds b3NPOFZJMFlMZlhNUDhpN3JNPQogCi1yZ2Jjb2xvckBeMS4wLjE6Ci0gIHZlcnNpb24gIjEuMC4x IgotICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9yZ2Jjb2xvci8tL3Jn YmNvbG9yLTEuMC4xLnRneiNkNjUwNWVjZGIzMDRhNjU5NWRhMjZmYTRiNDMzMDczMDY3NzU5NDVk IgotICBpbnRlZ3JpdHkgc2hhMS0xbEJlemJNRXBsbGRvbStrdERNSE1HZDFsRjA9Ci0KIHJpbXJh ZkAyLjYuMzoKICAgdmVyc2lvbiAiMi42LjMiCiAgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5 Lnlhcm5wa2cuY29tL3JpbXJhZi8tL3JpbXJhZi0yLjYuMy50Z3ojYjJkMTA0ZmUwZDhmYjI3Y2Y5 ZTBhMWNkYTgyNjJkZDM4MzNjNmNhYiIKQEAgLTkwNzAsMTEgKzkwMTEsNiBAQCBzdGFibGVAXjAu MS44OgogICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9zdGFibGUvLS9z dGFibGUtMC4xLjgudGd6IzgzNmViM2M4MzgyZmUyOTM2ZmVhZjU0NDYzMTAxN2NlN2Q0N2EzY2Yi CiAgIGludGVncml0eSBzaGE1MTItamk5cXhSbk9WZmN1TER5U2o5cXpoR1NFRlZvYnl0MWtJT1Nr ajFxWnpZTHpxN1Rvcy9vVVVXdm90VVBRTGxyc2lkcXNLNnRCSDg5QmM5a0w1ekhBNnc9PQogCi1z dGFja2JsdXItY2FudmFzQF4yLjAuMDoKLSAgdmVyc2lvbiAiMi40LjAiCi0gIHJlc29sdmVkICJo dHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3N0YWNrYmx1ci1jYW52YXMvLS9zdGFja2JsdXIt Y2FudmFzLTIuNC4wLnRneiMyYjJlYmE5MTBjYjQ2ZjZmZWFlOTE4ZTFjNDAyZjg2M2Q2MDJjMDFi IgotICBpbnRlZ3JpdHkgc2hhNTEyLVorSGl4ZmdZVjBzczNDMzQyRHhQd2MrVXZOMVNZV3FvejdX c2kzeEVEV0VuYUJrU0NMM0V5MjFnRjRpbytXbExtOC9SSXJTbkNyREJJRWNINE8rcTVRPT0KLQog c3RhdGljLWV4dGVuZEBeMC4xLjE6CiAgIHZlcnNpb24gIjAuMS4yIgogICByZXNvbHZlZCAiaHR0 cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9zdGF0aWMtZXh0ZW5kLy0vc3RhdGljLWV4dGVuZC0w LjEuMi50Z3ojNjA4MDljMzljYmZmNTUzMzcyMjZmZDVlMGI1MjBmMzQxZjFmYjVjNiIKQEAgLTkz NTUsNyArOTI5MSw3IEBAIHN1cHBvcnRzLWNvbG9yQF43LjAuMCwgc3VwcG9ydHMtY29sb3JAXjcu MS4wOgogICBkZXBlbmRlbmNpZXM6CiAgICAgaGFzLWZsYWcgIl40LjAuMCIKIAotc3ZnLXBhdGhk YXRhQF41LjAuMCwgc3ZnLXBhdGhkYXRhQF41LjAuNToKK3N2Zy1wYXRoZGF0YUBeNS4wLjA6CiAg IHZlcnNpb24gIjUuMC41IgogICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv bS9zdmctcGF0aGRhdGEvLS9zdmctcGF0aGRhdGEtNS4wLjUudGd6IzY1ZThkNzY1NjQyYmExNWZl MTU0MzQ0NDQwODdkMDgyYmM1MjZiMjkiCiAgIGludGVncml0eSBzaGE1MTItVEFBdkxOU0UzZkVo eWwvRGExOUpXZk1BZGhTWFRZZXZpWHNMU29EVDFVTTc2QURqNW5kd0FQWDFGS1FFZ0IvZ0ZNUGF2 T3k2dE9xZmFsWEtVaVhyb3c9PQo= --000000000000f3c18605b925a6fb--