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 1nYkeN-00079T-KK for pgadmin-hackers@arkaria.postgresql.org; Mon, 28 Mar 2022 08:22:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nYkeM-00063D-HU for pgadmin-hackers@arkaria.postgresql.org; Mon, 28 Mar 2022 08:22:54 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nYkeL-000633-Qg for pgadmin-hackers@lists.postgresql.org; Mon, 28 Mar 2022 08:22:54 +0000 Received: from mail-ot1-x332.google.com ([2607:f8b0:4864:20::332]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nYkeG-00062Q-Ol for pgadmin-hackers@postgresql.org; Mon, 28 Mar 2022 08:22:53 +0000 Received: by mail-ot1-x332.google.com with SMTP id a17-20020a9d3e11000000b005cb483c500dso10172017otd.6 for ; Mon, 28 Mar 2022 01:22:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; h=mime-version:from:date:message-id:subject:to; bh=Mnv2Hp89Jj4Ccb0EdrITQp8wKc+1xIRgMU4/XaRuDGQ=; b=ScCZsAnnoRqgbzOVNDQdoH409ICfsq1Bj3zGTda3K3MS/HXRVC0h/m0Imcu9L6Hnpd BYzGN8bCjqcYLS6BQcZKtMQGqI5thSOc6p37oazdevRMkrt99E5STiEG0k6Rqzb1429N t3KnhHfnuj6e87X0iqVFDGpYivbNbKCqqFYFP1qjGDBuXzcuVr3Uf8zBwbySWpVVtSb/ pZIut3xYe6uknUlvMvpFyvxdCn3NhshcCCBz6VABMScIU0BC6JXqQVGBNm7TZG7cyY6A JhgcfuB0WNz03+J32YS7LDo9UD06Kig+J6I9jpzWcW19NozIx7NKwNZQF7qT9DUR559I 2Ccg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=Mnv2Hp89Jj4Ccb0EdrITQp8wKc+1xIRgMU4/XaRuDGQ=; b=sYAqlTGoWs+iIcapkJlLWySynDdhkqzt6QJ6Of/nrJrbWlxm5rdYEBYK580c7sh1DP a4PtO4IPU7h5YkYZqx8HZeILnTVEgJDy3p1HaEKj3rKSAgJwty/hHG0AgsqONs0yMutg n368ullAOXuUZyQ8HfMQutDlpgvmHaAeWQQVhCIxJa+UeF0bSsnaizcqZd8g9mPwInyD 9I43RK/d/Ps+GDRB7CEME+NS0mkq5PAC5ZZbXY+q3SadjUpVlrLfWCfgU1kJuWk+uHS7 SjyluicdWgWoDP1jN4PFlTxxeHbWZHij/Y5bbzjR42/mmydKZplru13U0K6z1jwGb657 iR0A== X-Gm-Message-State: AOAM533LXvjWbjwlC9Vblf67zA/viOqiinCjaK0fLrrzcGugLXeH/VP5 Q2uZA95eoNG9A4/nyGJ1yKS/4qzkArC8EzpAcyUloDcGjI+TVni2Zj5kqid5vH3mn9GLE/gVUUb 2Ae8yqyoTKHcEEDc/RxH4q/4Te05907Iqeqf56UyvxZLE2MG0TZ9Hcf6+YJRHawNy1fpgVDFQOo wh53OokJ2S68kLGFrmtrbPgQRgqWl5rHuhMqzq3kZLcu/upIb8SsojFPRUwzG/Ra1Fcw== X-Google-Smtp-Source: ABdhPJzRtIeI6kkqWTjGs9mFnfIMy9o147hrv/yPlmjX553RxKma42G/R0azxW4+ey8327W4XDIJtVZte7DDNU0GH4E= X-Received: by 2002:a9d:66cd:0:b0:5b2:3cf2:2e21 with SMTP id t13-20020a9d66cd000000b005b23cf22e21mr9357747otm.5.1648455766346; Mon, 28 Mar 2022 01:22:46 -0700 (PDT) MIME-Version: 1.0 From: Aditya Toshniwal Date: Mon, 28 Mar 2022 13:52:10 +0530 Message-ID: Subject: [pgAdmin][RM7249] Support Unique Key in ERD To: pgadmin-hackers Content-Type: multipart/mixed; boundary="000000000000620f3105db43046b" 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: Archived-At: Precedence: bulk --000000000000620f3105db43046b Content-Type: multipart/alternative; boundary="000000000000620f2f05db430469" --000000000000620f2f05db430469 Content-Type: text/plain; charset="UTF-8" Hi Hackers, Attached patch adds support for unique keys in ERD and also fixes a bug where foreign key relationships do not update when the primary key is modified #7197. Please review. -- Thanks, Aditya Toshniwal pgAdmin Hacker | Software Architect | *edbpostgres.com* "Don't Complain about Heat, Plant a TREE" --000000000000620f2f05db430469 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Hackers,

Attached patch adds support = for unique keys in ERD and also fixes a bug where foreign key relationships= do not update when the primary key is modified #7197.

Please review.<= /div>

--
Thanks,
Aditya Toshniwal
pgAdmin Hacker=C2=A0| <= /font>Softwar= e Architect=C2=A0| edbpostgres.com=
"Don't Complain about Heat, Plant a TREE= "
--000000000000620f2f05db430469-- --000000000000620f3105db43046b Content-Type: application/octet-stream; name="RM7249_7197.patch" Content-Disposition: attachment; filename="RM7249_7197.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1afz6510 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9pbmRleF9jb25zdHJhaW50L3N0YXRp Yy9pbWcvdW5pcXVlX2NvbnN0cmFpbnQuc3ZnIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2luZGV4 X2NvbnN0cmFpbnQvc3RhdGljL2ltZy91bmlxdWVfY29uc3RyYWludC5zdmcKaW5kZXggMmZiMzFl MzU4Li43YTFmNDJiODggMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dy b3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9pbmRleF9j b25zdHJhaW50L3N0YXRpYy9pbWcvdW5pcXVlX2NvbnN0cmFpbnQuc3ZnCisrKyBiL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxl cy9jb25zdHJhaW50cy9pbmRleF9jb25zdHJhaW50L3N0YXRpYy9pbWcvdW5pcXVlX2NvbnN0cmFp bnQuc3ZnCkBAIC0xICsxIEBACi08c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2 ZyIgdmlld0JveD0iMCAwIDE2IDE2Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2NiZTdmNjt9 LmNscy0xLC5jbHMtMntzdHJva2U6IzJjNjZiZDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2Ut bGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjAuNzVweDt9LmNscy0ye2ZvbnQtc2l6ZTo4cHg7 ZmlsbDojMmM2NmJkO2ZvbnQtZmFtaWx5Okdlb3JnaWEsIEdlb3JnaWE7fTwvc3R5bGU+PC9kZWZz Pjx0aXRsZT51bmlxdWVfY29uc3RyYWludDwvdGl0bGU+PGcgaWQ9Il8yIiBkYXRhLW5hbWU9IjIi PjxjaXJjbGUgY2xhc3M9ImNscy0xIiBjeD0iOCIgY3k9IjgiIHI9IjUuNCIvPjx0ZXh0IGNsYXNz PSJjbHMtMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNi4yOCAxMC4xNykiPjE8L3RleHQ+PC9nPjwv c3ZnPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cu dzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTYgMTYiIHdpZHRoPSIyMCIgaGVpZ2h0PSIy MCI+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOiNjYmU3ZjY7fS5jbHMtMSwuY2xzLTJ7c3Ryb2tl OiMyYzY2YmQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9r ZS13aWR0aDowLjc1cHg7fS5jbHMtMntmb250LXNpemU6OHB4O2ZpbGw6IzJjNjZiZDtmb250LWZh bWlseTpHZW9yZ2lhLCBHZW9yZ2lhO308L3N0eWxlPjwvZGVmcz48dGl0bGU+dW5pcXVlX2NvbnN0 cmFpbnQ8L3RpdGxlPjxnIGlkPSJfMiIgZGF0YS1uYW1lPSIyIj48Y2lyY2xlIGNsYXNzPSJjbHMt MSIgY3g9IjgiIGN5PSI4IiByPSI1LjQiLz48dGV4dCBjbGFzcz0iY2xzLTIiIHRyYW5zZm9ybT0i dHJhbnNsYXRlKDYuMjggMTAuMTcpIj4xPC90ZXh0PjwvZz48L3N2Zz4KZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFz L3RhYmxlcy9zdGF0aWMvanMvdGFibGUudWkuanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvc3RhdGljL2pzL3RhYmxl LnVpLmpzCmluZGV4IDkzZmUwMjcxMi4uMDE5N2Y2NjcxIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1p bi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMv c3RhdGljL2pzL3RhYmxlLnVpLmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dy b3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9zdGF0aWMvanMvdGFibGUudWku anMKQEAgLTg3LDggKzg3LDggQEAgZXhwb3J0IGNsYXNzIENvbnN0cmFpbnRzU2NoZW1hIGV4dGVu ZHMgQmFzZVVJU2NoZW1hIHsKICAgY2hhbmdlQ29sdW1uT3B0aW9ucyhjb2xPcHRpb25zKSB7CiAg ICAgdGhpcy5wcmltYXJ5S2V5T2JqLmNoYW5nZUNvbHVtbk9wdGlvbnMoY29sT3B0aW9ucyk7CiAg ICAgdGhpcy5ma09iai5jaGFuZ2VDb2x1bW5PcHRpb25zKGNvbE9wdGlvbnMpOworICAgIHRoaXMu dW5pcXVlQ29uc09iai5jaGFuZ2VDb2x1bW5PcHRpb25zKGNvbE9wdGlvbnMpOwogICAgIGlmKCF0 aGlzLmluRXJkKSB7Ci0gICAgICB0aGlzLnVuaXF1ZUNvbnNPYmouY2hhbmdlQ29sdW1uT3B0aW9u cyhjb2xPcHRpb25zKTsKICAgICAgIHRoaXMuZXhDb25zT2JqLmNoYW5nZUNvbHVtbk9wdGlvbnMo Y29sT3B0aW9ucyk7CiAgICAgfQogICB9CkBAIC0xNjMsNyArMTYzLDcgQEAgZXhwb3J0IGNsYXNz IENvbnN0cmFpbnRzU2NoZW1hIGV4dGVuZHMgQmFzZVVJU2NoZW1hIHsKICAgICAgIGNvbHVtbnMg OiBbJ25hbWUnLCAnY29uc3JjJ10sCiAgICAgICBkaXNhYmxlZDogdGhpcy5pbkNhdGFsb2csCiAg ICAgfSx7Ci0gICAgICBpZDogJ3VuaXF1ZV9ncm91cCcsIHR5cGU6ICdncm91cCcsIGxhYmVsOiBn ZXR0ZXh0KCdVbmlxdWUnKSwgdmlzaWJsZTogIXRoaXMuaW5FcmQsCisgICAgICBpZDogJ3VuaXF1 ZV9ncm91cCcsIHR5cGU6ICdncm91cCcsIGxhYmVsOiBnZXR0ZXh0KCdVbmlxdWUnKSwKICAgICB9 LHsKICAgICAgIGlkOiAndW5pcXVlX2NvbnN0cmFpbnQnLCBsYWJlbDogJycsCiAgICAgICBzY2hl bWE6IHRoaXMudW5pcXVlQ29uc09iaiwKQEAgLTMzOCw3ICszMzgsNyBAQCBleHBvcnQgZGVmYXVs dCBjbGFzcyBUYWJsZVNjaGVtYSBleHRlbmRzIEJhc2VVSVNjaGVtYSB7CiAgICAgY29uc3QgU1VQ UE9SVEVEX0tFWVMgPSBbCiAgICAgICAnbmFtZScsICdzY2hlbWEnLCAnZGVzY3JpcHRpb24nLCAn cmxzcG9saWN5JywgJ2ZvcmNlcmxzcG9saWN5JywgJ2ZpbGxmYWN0b3InLAogICAgICAgJ3RvYXN0 X3R1cGxlX3RhcmdldCcsICdwYXJhbGxlbF93b3JrZXJzJywgJ3JlbGhhc29pZHMnLCAncmVscGVy c2lzdGVuY2UnLAotICAgICAgJ2NvbHVtbnMnLCAncHJpbWFyeV9rZXknLCAnZm9yZWlnbl9rZXkn LAorICAgICAgJ2NvbHVtbnMnLCAncHJpbWFyeV9rZXknLCAnZm9yZWlnbl9rZXknLCAndW5pcXVl X2NvbnN0cmFpbnQnLAogICAgIF07CiAgICAgbmV3RGF0YSA9IF8ucGljayhuZXdEYXRhLCBTVVBQ T1JURURfS0VZUyk7CiAKQEAgLTk3NSw3ICs5NzUsNyBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBU YWJsZVNjaGVtYSBleHRlbmRzIEJhc2VVSVNjaGVtYSB7CiAgICAgICBpZDogJ3NlY2xhYmVscycs IGxhYmVsOiBnZXR0ZXh0KCdTZWN1cml0eSBsYWJlbHMnKSwgY2FuRWRpdDogZmFsc2UsCiAgICAg ICBzY2hlbWE6IG5ldyBTZWNMYWJlbFNjaGVtYSgpLCBlZGl0YWJsZTogZmFsc2UsIGNhbkFkZDog dHJ1ZSwKICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJywgbWluX3ZlcnNpb246IDkwMTAwLCBtb2Rl OiBbJ2VkaXQnLCAnY3JlYXRlJ10sCi0gICAgICBncm91cDogJ3NlY3VyaXR5X2dyb3VwJywgY2Fu RGVsZXRlOiB0cnVlLCBjb250cm9sOiAndW5pcXVlLWNvbC1jb2xsZWN0aW9uJywKKyAgICAgIGdy b3VwOiAnc2VjdXJpdHlfZ3JvdXAnLCBjYW5EZWxldGU6IHRydWUsCiAgICAgfSx7CiAgICAgICBp ZDogJ3ZhY3V1bV9zZXR0aW5nc19zdHInLCBsYWJlbDogZ2V0dGV4dCgnU3RvcmFnZSBzZXR0aW5n cycpLAogICAgICAgdHlwZTogJ211bHRpbGluZScsIGdyb3VwOiAnYWR2YW5jZWQnLCBtb2RlOiBb J3Byb3BlcnRpZXMnXSwKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9UaGVtZS9p bmRleC5qc3ggYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvVGhlbWUvaW5kZXguanN4CmluZGV4IGRh NThmYWZhOC4uZDJhMDcwZjE1IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvVGhl bWUvaW5kZXguanN4CisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9UaGVtZS9pbmRleC5qc3gK QEAgLTIwMCw3ICsyMDAsNyBAQCBiYXNpY1NldHRpbmdzID0gY3JlYXRlTXVpVGhlbWUoYmFzaWNT ZXR0aW5ncywgewogICAgIGNyZWF0ZTogKCkgPT4gJ25vbmUnLAogICB9LAogICB6SW5kZXg6IHsK LSAgICBtb2RhbDogMjAwMCwKKyAgICBtb2RhbDogMzAwMSwKICAgfSwKICAgcHJvcHM6IHsKICAg ICBNdWlUZXh0RmllbGQ6IHsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2VyZC9zdGF0 aWMvanMvZXJkX3Rvb2wvRVJEQ29yZS5qcyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2VyZC9zdGF0aWMv anMvZXJkX3Rvb2wvRVJEQ29yZS5qcwppbmRleCAwMjY1NjY4YTkuLjUwNDhmZmIzYyAxMDA2NDQK LS0tIGEvd2ViL3BnYWRtaW4vdG9vbHMvZXJkL3N0YXRpYy9qcy9lcmRfdG9vbC9FUkRDb3JlLmpz CisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2VyZC9zdGF0aWMvanMvZXJkX3Rvb2wvRVJEQ29yZS5q cwpAQCAtMjY4LDEwICsyNjgsNTUgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgRVJEQ29yZSB7CiAg IH0KIAogICBzeW5jVGFibGVMaW5rcyh0YWJsZU5vZGUsIG9sZFRhYmxlRGF0YSkgeworICAgIGxl dCBzZWxmID0gdGhpczsKICAgICBsZXQgdGFibGVEYXRhID0gdGFibGVOb2RlLmdldERhdGEoKTsK LSAgICBsZXQgdGFibGVOb2Rlc0RpY3QgPSB0aGlzLmdldE1vZGVsKCkuZ2V0Tm9kZXNEaWN0KCk7 CisgICAgY29uc3QgdGFibGVOb2Rlc0RpY3QgPSB0aGlzLmdldE1vZGVsKCkuZ2V0Tm9kZXNEaWN0 KCk7CisKKyAgICAvKiBSZW1vdmUgdGhlIGxpbmtzIGlmIGNvbHVtbiBkcm9wcGVkIG9yIHByaW1h cnkga2V5IHJlbW92ZWQgKi8KKyAgICBfLmRpZmZlcmVuY2VXaXRoKG9sZFRhYmxlRGF0YS5jb2x1 bW5zLCB0YWJsZURhdGEuY29sdW1ucywgZnVuY3Rpb24oZXhpc3RpbmcsIGluY29taW5nKSB7Cisg ICAgICBpZihleGlzdGluZy5hdHRudW0gPT0gaW5jb21pbmcuYXR0bnVtICYmIGV4aXN0aW5nLmlz X3ByaW1hcnlfa2V5ICYmICFpbmNvbWluZy5pc19wcmltYXJ5X2tleSkgeworICAgICAgICByZXR1 cm4gZmFsc2U7CisgICAgICB9CisgICAgICByZXR1cm4gZXhpc3RpbmcuYXR0bnVtID09IGluY29t aW5nLmF0dG51bTsKKyAgICB9KS5mb3JFYWNoKChjb2wpPT57CisgICAgICBsZXQgZXhpc3RQb3J0 ID0gdGFibGVOb2RlLmdldFBvcnQodGFibGVOb2RlLmdldFBvcnROYW1lKGNvbC5hdHRudW0pKTsK KyAgICAgIGlmKGV4aXN0UG9ydCkgeworICAgICAgICBPYmplY3QudmFsdWVzKGV4aXN0UG9ydC5n ZXRMaW5rcygpKS5mb3JFYWNoKChsaW5rKT0+eworICAgICAgICAgIHNlbGYucmVtb3ZlT25lVG9N YW55TGluayhsaW5rKTsKKyAgICAgICAgfSk7CisgICAgICB9CisgICAgICB0YWJsZU5vZGUucmVt b3ZlUG9ydChleGlzdFBvcnQpOworICAgIH0pOworCisgICAgLyogU3luYyB0aGUgbmFtZSBjaGFu Z2VzIGluIHJlZmVyZW5jZXMgRksgKi8KKyAgICBPYmplY3QudmFsdWVzKHRhYmxlTm9kZS5nZXRQ b3J0cygpKS5mb3JFYWNoKChwb3J0KT0+eworICAgICAgaWYocG9ydC5nZXRTdWJ0eXBlKCkgIT0g J29uZScpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgT2JqZWN0LnZhbHVlcyhw b3J0LmdldExpbmtzKCkpLmZvckVhY2goKGxpbmspPT57CisgICAgICAgIGxldCBsaW5rRGF0YSA9 IGxpbmsuZ2V0RGF0YSgpOworICAgICAgICBsZXQgZmtUYWJsZU5vZGUgPSB0aGlzLmdldE1vZGVs KCkuZ2V0Tm9kZXNEaWN0KClbbGlua0RhdGEubG9jYWxfdGFibGVfdWlkXTsKKworICAgICAgICBs ZXQgbmV3Rm9yZWluZ0tleXMgPSBbXTsKKyAgICAgICAgZmtUYWJsZU5vZGUuZ2V0RGF0YSgpLmZv cmVpZ25fa2V5Py5mb3JFYWNoKCh0aGVGa1Jvdyk9PnsKKyAgICAgICAgICBmb3IobGV0IGZrQ29s dW1uIG9mIHRoZUZrUm93LmNvbHVtbnMpIHsKKyAgICAgICAgICAgIGxldCBhdHRudW0gPSBfLmZp bmQob2xkVGFibGVEYXRhLmNvbHVtbnMsIChjKT0+Yy5uYW1lPT1ma0NvbHVtbi5yZWZlcmVuY2Vk KS5hdHRudW07CisgICAgICAgICAgICBma0NvbHVtbi5yZWZlcmVuY2VkID0gXy5maW5kKHRhYmxl RGF0YS5jb2x1bW5zLCAoY29sbSk9PmNvbG0uYXR0bnVtPT1hdHRudW0pLm5hbWU7CisgICAgICAg ICAgICBma0NvbHVtbi5yZWZlcmVuY2VzX3RhYmxlX25hbWUgPSB0YWJsZURhdGEubmFtZTsKKyAg ICAgICAgICB9CisgICAgICAgICAgbmV3Rm9yZWluZ0tleXMucHVzaCh0aGVGa1Jvdyk7CisgICAg ICAgIH0pOworICAgICAgICBma1RhYmxlTm9kZS5zZXREYXRhKHsKKyAgICAgICAgICAuLi5ma1Rh YmxlTm9kZS5nZXREYXRhKCksCisgICAgICAgICAgZm9yZWlnbl9rZXk6IG5ld0ZvcmVpbmdLZXlz LAorICAgICAgICB9KTsKKyAgICAgIH0pOworICAgIH0pOwogCisgICAgLyogU3luYyB0aGUgY2hh bmdlZC9yZW1vdmVkL2FkZGVkIGZvcmVpZ24ga2V5cyAqLworICAgIHRhYmxlRGF0YSA9IHRhYmxl Tm9kZS5nZXREYXRhKCk7CiAgICAgY29uc3QgYWRkTGluayA9ICh0aGVGayk9PnsKKyAgICAgIGlm KCF0aGVGaykgcmV0dXJuOwogICAgICAgbGV0IG5ld0RhdGEgPSB7CiAgICAgICAgIGxvY2FsX3Rh YmxlX3VpZDogdGFibGVOb2RlLmdldElEKCksCiAgICAgICAgIGxvY2FsX2NvbHVtbl9hdHRudW06 IHVuZGVmaW5lZCwKQEAgLTI4Nyw2ICszMzIsNyBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBFUkRD b3JlIHsKICAgICB9OwogCiAgICAgY29uc3QgcmVtb3ZlTGluayA9ICh0aGVGayk9PnsKKyAgICAg IGlmKCF0aGVGaykgcmV0dXJuOwogICAgICAgbGV0IGF0dG51bSA9IF8uZmluZCh0YWJsZU5vZGUu Z2V0Q29sdW1ucygpLCAoY29sKT0+Y29sLm5hbWU9PXRoZUZrLmxvY2FsX2NvbHVtbikuYXR0bnVt OwogICAgICAgbGV0IGV4aXN0UG9ydCA9IHRhYmxlTm9kZS5nZXRQb3J0KHRhYmxlTm9kZS5nZXRQ b3J0TmFtZShhdHRudW0pKTsKICAgICAgIGlmKGV4aXN0UG9ydCAmJiBleGlzdFBvcnQuZ2V0U3Vi dHlwZSgpID09ICdtYW55JykgewpAQCAtMzE2LDkgKzM2MiwxMiBAQCBleHBvcnQgZGVmYXVsdCBj bGFzcyBFUkRDb3JlIHsKICAgICAgICAgICB0YWJsZURhdGEuZm9yZWlnbl9rZXlbcm93SW5keF0u Y29sdW1ucywKICAgICAgICAgICAnY2lkJwogICAgICAgICApOwotICAgICAgICBpZihjaGFuZ2VE aWZmQ29scy5yZW1vdmVkLmxlbmd0aCA+IDAgfHwgY2hhbmdlRGlmZkNvbHMuYWRkZWQubGVuZ3Ro ID4gMCkgewotICAgICAgICAgIHJlbW92ZUxpbmsoY2hhbmdlRGlmZkNvbHMucmVtb3ZlZFswXSk7 Ci0gICAgICAgICAgYWRkTGluayhjaGFuZ2VEaWZmQ29scy5hZGRlZFswXSk7CisgICAgICAgIGlm KGNoYW5nZURpZmZDb2xzLnJlbW92ZWQubGVuZ3RoID4gMCkgeworICAgICAgICAgIC8qIGFueSBj aGFuZ2UgaW4gY29sdW1ucyBsZW5ndGggcmVtb3ZlIGFsbCBhbmQgY3JlYXRlIG5ldyBsaW5rICov CisgICAgICAgICAgb2xkVGFibGVEYXRhLmZvcmVpZ25fa2V5W3Jvd0luZHhdLmNvbHVtbnMuZm9y RWFjaCgoY29sKT0+eworICAgICAgICAgICAgcmVtb3ZlTGluayhjb2wpOworICAgICAgICAgIH0p OworICAgICAgICAgIGFkZExpbmsodGFibGVEYXRhLmZvcmVpZ25fa2V5W3Jvd0luZHhdLmNvbHVt bnNbMF0pOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vdG9vbHMvZXJkL3N0YXRpYy9qcy9lcmRfdG9vbC9ub2Rlcy9UYWJsZU5vZGUuanN4IGIvd2Vi L3BnYWRtaW4vdG9vbHMvZXJkL3N0YXRpYy9qcy9lcmRfdG9vbC9ub2Rlcy9UYWJsZU5vZGUuanN4 CmluZGV4IDdkY2ZlNWFhMy4uOGMzNjg2ZjA5IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi90b29s cy9lcmQvc3RhdGljL2pzL2VyZF90b29sL25vZGVzL1RhYmxlTm9kZS5qc3gKKysrIGIvd2ViL3Bn YWRtaW4vdG9vbHMvZXJkL3N0YXRpYy9qcy9lcmRfdG9vbC9ub2Rlcy9UYWJsZU5vZGUuanN4CkBA IC0xNyw2ICsxNyw3IEBAIGltcG9ydCBUYWJsZUljb24gZnJvbSAndG9wL2Jyb3dzZXIvc2VydmVy X2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlCiBpbXBvcnQgUHJpbWFyeUtl eUljb24gZnJvbSAndG9wL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9z Y2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9pbmRleF9jb25zdHJhaW50L3N0YXRpYy9pbWcvcHJp bWFyeV9rZXkuc3ZnJzsKIGltcG9ydCBGb3JlaWduS2V5SWNvbiBmcm9tICd0b3AvYnJvd3Nlci9z ZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRz L2ZvcmVpZ25fa2V5L3N0YXRpYy9pbWcvZm9yZWlnbl9rZXkuc3ZnJzsKIGltcG9ydCBDb2x1bW5J Y29uIGZyb20gJ3RvcC9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2No ZW1hcy90YWJsZXMvY29sdW1ucy9zdGF0aWMvaW1nL2NvbHVtbi5zdmcnOworaW1wb3J0IFVuaXF1 ZUtleUljb24gZnJvbSAndG9wL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNl cy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9pbmRleF9jb25zdHJhaW50L3N0YXRpYy9pbWcv dW5pcXVlX2NvbnN0cmFpbnQuc3ZnJzsKIGltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBl cyc7CiBpbXBvcnQgZ2V0dGV4dCBmcm9tICdzb3VyY2VzL2dldHRleHQnOwogCkBAIC05NCwxNyAr OTUsNiBAQCBleHBvcnQgY2xhc3MgVGFibGVOb2RlTW9kZWwgZXh0ZW5kcyBEZWZhdWx0Tm9kZU1v ZGVsIHsKICAgfQogCiAgIHNldERhdGEoZGF0YSkgewotICAgIGxldCBzZWxmID0gdGhpczsKLSAg ICAvKiBSZW1vdmUgdGhlIGxpbmtzIGlmIGNvbHVtbiBkcm9wcGVkIG9yIHByaW1hcnkga2V5IHJl bW92ZWQgKi8KLSAgICBfLmRpZmZlcmVuY2VXaXRoKHRoaXMuX2RhdGEuY29sdW1ucywgZGF0YS5j b2x1bW5zLCBmdW5jdGlvbihleGlzdGluZywgaW5jb21pbmcpIHsKLSAgICAgIHJldHVybiBleGlz dGluZy5hdHRudW0gPT0gaW5jb21pbmcuYXR0bnVtICYmIGluY29taW5nLmlzX3ByaW1hcnlfa2V5 ID09IHRydWU7Ci0gICAgfSkuZm9yRWFjaCgoY29sKT0+ewotICAgICAgbGV0IGV4aXN0UG9ydCA9 IHNlbGYuZ2V0UG9ydChzZWxmLmdldFBvcnROYW1lKGNvbC5hdHRudW0pKTsKLSAgICAgIGlmKGV4 aXN0UG9ydCAmJiBleGlzdFBvcnQuZ2V0U3VidHlwZSgpID09ICdvbmUnKSB7Ci0gICAgICAgIGV4 aXN0UG9ydC5yZW1vdmVBbGxMaW5rcygpOwotICAgICAgICBzZWxmLnJlbW92ZVBvcnQoZXhpc3RQ b3J0KTsKLSAgICAgIH0KLSAgICB9KTsKICAgICB0aGlzLl9kYXRhID0gZGF0YTsKICAgICB0aGlz LmZpcmVFdmVudCh7fSwgJ25vZGVVcGRhdGVkJyk7CiAgIH0KQEAgLTE3MiwxOCArMTYyLDIzIEBA IGV4cG9ydCBjbGFzcyBUYWJsZU5vZGVXaWRnZXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgewog ICAgIH0pOwogICB9CiAKLSAgZ2VuZXJhdGVDb2x1bW4oY29sLCB0YWJsZURhdGEpIHsKKyAgZ2Vu ZXJhdGVDb2x1bW4oY29sLCBsb2NhbEZrQ29scywgbG9jYWxVa0NvbHMpIHsKICAgICBsZXQgcG9y dCA9IHRoaXMucHJvcHMubm9kZS5nZXRQb3J0KHRoaXMucHJvcHMubm9kZS5nZXRQb3J0TmFtZShj b2wuYXR0bnVtKSk7CiAgICAgbGV0IGljb24gPSBDb2x1bW5JY29uOwotICAgIGxldCBsb2NhbEZr Q29scyA9IFtdOwotICAgICh0YWJsZURhdGEuZm9yZWlnbl9rZXl8fFtdKS5mb3JFYWNoKChmayk9 PnsKLSAgICAgIGxvY2FsRmtDb2xzLnB1c2goLi4uZmsuY29sdW1ucy5tYXAoKGMpPT5jLmxvY2Fs X2NvbHVtbikpOwotICAgIH0pOworICAgIC8qIExlc3MgcHJpb3JpdHkgKi8KKyAgICBpZihsb2Nh bFVrQ29scy5pbmRleE9mKGNvbC5uYW1lKSA+IC0xKSB7CisgICAgICBpY29uID0gVW5pcXVlS2V5 SWNvbjsKKyAgICB9CiAgICAgaWYoY29sLmlzX3ByaW1hcnlfa2V5KSB7CiAgICAgICBpY29uID0g UHJpbWFyeUtleUljb247CiAgICAgfSBlbHNlIGlmKGxvY2FsRmtDb2xzLmluZGV4T2YoY29sLm5h bWUpID4gLTEpIHsKICAgICAgIGljb24gPSBGb3JlaWduS2V5SWNvbjsKICAgICB9CisKKyAgICBs ZXQgY2x0eXBlID0gY29sLmNsdHlwZTsKKyAgICBpZihjb2wuYXR0bGVuKSB7CisgICAgICBjbHR5 cGUgKz0gJygnKyBjb2wuYXR0bGVuICsgKGNvbC5hdHRwcmVjaXNpb24gPyAnLCcgKyBjb2wuYXR0 cHJlY2lzaW9uIDogJycpICsnKSc7CisgICAgfQogICAgIHJldHVybiAoCiAgICAgICA8ZGl2IGNs YXNzTmFtZT0nZC1mbGV4IGNvbC1yb3cnIGtleT17Y29sLmF0dG51bX0+CiAgICAgICAgIDxkaXYg Y2xhc3NOYW1lPSdkLWZsZXggY29sLXJvdy1kYXRhJz4KQEAgLTE5MSw3ICsxODYsNyBAQCBleHBv cnQgY2xhc3MgVGFibGVOb2RlV2lkZ2V0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHsKICAgICAg ICAgICA8ZGl2IGNsYXNzTmFtZT0ibXktYXV0byI+CiAgICAgICAgICAgICA8c3BhbiBjbGFzc05h bWU9J2NvbC1uYW1lJz57Y29sLm5hbWV9PC9zcGFuPiZuYnNwOwogICAgICAgICAgICAge3RoaXMu c3RhdGUuc2hvd19kZXRhaWxzICYmCi0gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J2NvbC1k YXRhdHlwZSc+e2NvbC5jbHR5cGV9e2NvbC5hdHRsZW4gPyAoJygnKyBjb2wuYXR0bGVuICsgKGNv bC5hdHRwcmVjaXNpb24gPyAnLCcrY29sLmF0dHByZWNpc2lvbiA6ICcnKSArJyknKSA6ICcnfTwv c3Bhbj59CisgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J2NvbC1kYXRhdHlwZSc+e2NsdHlw ZX08L3NwYW4+fQogICAgICAgICAgIDwvZGl2PgogICAgICAgICA8L2Rpdj4KICAgICAgICAgPGRp diBjbGFzc05hbWU9Im1sLWF1dG8gY29sLXJvdy1wb3J0Ij57dGhpcy5nZW5lcmF0ZVBvcnQocG9y dCl9PC9kaXY+CkBAIC0yMTYsNiArMjExLDE0IEBAIGV4cG9ydCBjbGFzcyBUYWJsZU5vZGVXaWRn ZXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgewogICByZW5kZXIoKSB7CiAgICAgbGV0IHRhYmxl RGF0YSA9IHRoaXMucHJvcHMubm9kZS5nZXREYXRhKCk7CiAgICAgbGV0IHRhYmxlTWV0YURhdGEg PSB0aGlzLnByb3BzLm5vZGUuZ2V0TWV0YWRhdGEoKTsKKyAgICBsZXQgbG9jYWxGa0NvbHMgPSBb XTsKKyAgICAodGFibGVEYXRhLmZvcmVpZ25fa2V5fHxbXSkuZm9yRWFjaCgoZmspPT57CisgICAg ICBsb2NhbEZrQ29scy5wdXNoKC4uLmZrLmNvbHVtbnMubWFwKChjKT0+Yy5sb2NhbF9jb2x1bW4p KTsKKyAgICB9KTsKKyAgICBsZXQgbG9jYWxVa0NvbHMgPSBbXTsKKyAgICAodGFibGVEYXRhLnVu aXF1ZV9jb25zdHJhaW50fHxbXSkuZm9yRWFjaCgodWspPT57CisgICAgICBsb2NhbFVrQ29scy5w dXNoKC4uLnVrLmNvbHVtbnMubWFwKChjKT0+Yy5jb2x1bW4pKTsKKyAgICB9KTsKICAgICByZXR1 cm4gKAogICAgICAgPGRpdiBjbGFzc05hbWU9eyd0YWJsZS1ub2RlICcgKyAodGhpcy5wcm9wcy5u b2RlLmlzU2VsZWN0ZWQoKSA/ICdzZWxlY3RlZCc6ICcnKSB9IG9uRG91YmxlQ2xpY2s9eygpPT57 dGhpcy5wcm9wcy5ub2RlLmZpcmVFdmVudCh7fSwgJ2VkaXRUYWJsZScpO319PgogICAgICAgICA8 ZGl2IGNsYXNzTmFtZT0idGFibGUtdG9vbGJhciI+CkBAIC0yNDMsNyArMjQ2LDcgQEAgZXhwb3J0 IGNsYXNzIFRhYmxlTm9kZVdpZGdldCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7CiAgICAgICAg ICAgICA8ZGl2IGNsYXNzTmFtZT0idGFibGUtbmFtZSBteS1hdXRvIj57dGFibGVEYXRhLm5hbWV9 PC9kaXY+CiAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9InRhYmxl LWNvbHMiPgotICAgICAgICAgICAge18ubWFwKHRhYmxlRGF0YS5jb2x1bW5zLCAoY29sKT0+dGhp cy5nZW5lcmF0ZUNvbHVtbihjb2wsIHRhYmxlRGF0YSkpfQorICAgICAgICAgICAge18ubWFwKHRh YmxlRGF0YS5jb2x1bW5zLCAoY29sKT0+dGhpcy5nZW5lcmF0ZUNvbHVtbihjb2wsIGxvY2FsRmtD b2xzLCBsb2NhbFVrQ29scykpfQogICAgICAgICAgIDwvZGl2PgogICAgICAgICA8Lz59CiAgICAg ICA8L2Rpdj4KZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvZXJkL2Zha2Vf aXRlbS5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvZXJkL2Zha2VfaXRlbS5qcwppbmRl eCA0NzJjNjI2ZmEuLjk0YjUxMGM4ZCAxMDA2NDQKLS0tIGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNj cmlwdC9lcmQvZmFrZV9pdGVtLmpzCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvZXJk L2Zha2VfaXRlbS5qcwpAQCAtNDgsNiArNDgsNSBAQCBleHBvcnQgY2xhc3MgRmFrZUxpbmsgewog fQogCiBleHBvcnQgY2xhc3MgRmFrZVBvcnQgewotICBjb25zdHJ1Y3RvcigpIHt9CiAgIGdldExp bmtzKCkge3JldHVybiBudWxsO30KIH0KZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFz Y3JpcHQvZXJkL3RhYmxlX25vZGVfc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQv ZXJkL3RhYmxlX25vZGVfc3BlYy5qcwppbmRleCA0M2U0NWVmYjcuLjA0ZmE0Yzc1YyAxMDA2NDQK LS0tIGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9lcmQvdGFibGVfbm9kZV9zcGVjLmpzCisr KyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvZXJkL3RhYmxlX25vZGVfc3BlYy5qcwpAQCAt MTM1LDMxICsxMzUsNiBAQCBkZXNjcmliZSgnRVJEIFRhYmxlTm9kZU1vZGVsJywgKCk9PnsKICAg ICAgIH0pOwogICAgICAgZXhwZWN0KGV4aXN0UG9ydC5yZW1vdmVBbGxMaW5rcykubm90LnRvSGF2 ZUJlZW5DYWxsZWQoKTsKICAgICB9KTsKLQotICAgIGl0KCdyZW1vdmUgY29sdW1ucycsICgpPT57 Ci0gICAgICBzcHlPbihleGlzdFBvcnQsICdnZXRTdWJ0eXBlJykuYW5kLnJldHVyblZhbHVlKCdv bmUnKTsKLSAgICAgIGV4aXN0UG9ydC5yZW1vdmVBbGxMaW5rcy5jYWxscy5yZXNldCgpOwotICAg ICAgbW9kZWxPYmouc2V0RGF0YSh7Ci0gICAgICAgIG5hbWU6ICdub25hbWUnLAotICAgICAgICBz Y2hlbWE6ICdlcmQnLAotICAgICAgICBjb2x1bW5zOiBbCi0gICAgICAgICAge25hbWU6ICdjb2wy Jywgbm90X251bGw6ZmFsc2UsIGF0dG51bTogMX0sCi0gICAgICAgICAge25hbWU6ICdjb2wzJywg bm90X251bGw6ZmFsc2UsIGF0dG51bTogMn0sCi0gICAgICAgIF0sCi0gICAgICB9KTsKLSAgICAg IGV4cGVjdChtb2RlbE9iai5nZXREYXRhKCkpLnRvRXF1YWwoewotICAgICAgICBuYW1lOiAnbm9u YW1lJywKLSAgICAgICAgc2NoZW1hOiAnZXJkJywKLSAgICAgICAgY29sdW1uczogWwotICAgICAg ICAgIHtuYW1lOiAnY29sMicsIG5vdF9udWxsOmZhbHNlLCBhdHRudW06IDF9LAotICAgICAgICAg IHtuYW1lOiAnY29sMycsIG5vdF9udWxsOmZhbHNlLCBhdHRudW06IDJ9LAotICAgICAgICBdLAot ICAgICAgfSk7Ci0KLSAgICAgIGV4cGVjdChtb2RlbE9iai5nZXRQb3J0TmFtZSkudG9IYXZlQmVl bkNhbGxlZFdpdGgoMCk7Ci0gICAgICBleHBlY3QoZXhpc3RQb3J0LnJlbW92ZUFsbExpbmtzKS50 b0hhdmVCZWVuQ2FsbGVkKCk7Ci0gICAgICBleHBlY3QobW9kZWxPYmoucmVtb3ZlUG9ydCkudG9I YXZlQmVlbkNhbGxlZFdpdGgoZXhpc3RQb3J0KTsKLSAgICB9KTsKICAgfSk7CiAKICAgaXQoJ2dl dFNjaGVtYVRhYmxlTmFtZScsICgpPT57CmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9qYXZh c2NyaXB0L2VyZC91aV9jb21wb25lbnRzL2JvZHlfd2lkZ2V0X3NwZWMuanMgYi93ZWIvcmVncmVz c2lvbi9qYXZhc2NyaXB0L2VyZC91aV9jb21wb25lbnRzL2JvZHlfd2lkZ2V0X3NwZWMuanMKaW5k ZXggM2ZiMmNmMGJkLi4xOWViMGQzNGYgMTAwNjQ0Ci0tLSBhL3dlYi9yZWdyZXNzaW9uL2phdmFz Y3JpcHQvZXJkL3VpX2NvbXBvbmVudHMvYm9keV93aWRnZXRfc3BlYy5qcworKysgYi93ZWIvcmVn cmVzc2lvbi9qYXZhc2NyaXB0L2VyZC91aV9jb21wb25lbnRzL2JvZHlfd2lkZ2V0X3NwZWMuanMK QEAgLTI1Nyw2ICsyNTcsNyBAQCBkZXNjcmliZSgnRVJEIEJvZHlXaWRnZXQnLCAoKT0+ewogICAg ICAgJ2dldE5vZGVzRGljdCc6ICgpPT5ub2Rlc0RpY3QsCiAgICAgfSk7CiAgICAgc3B5T24oYm9k eUluc3RhbmNlLmRpYWdyYW0sICdhZGRMaW5rJyk7CisgICAgc3B5T24oYm9keUluc3RhbmNlLmRp YWdyYW0sICdzeW5jVGFibGVMaW5rcycpOwogICAgIC8qIE5ldyAqLwogICAgIHRhYmxlRGlhbG9n LnNob3cuY2FsbHMucmVzZXQoKTsKICAgICBib2R5SW5zdGFuY2UuYWRkRWRpdFRhYmxlKCk7Cg== --000000000000620f3105db43046b--