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 1nRCPO-0007r7-W2 for pgadmin-hackers@arkaria.postgresql.org; Mon, 07 Mar 2022 12:24:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nRCPN-0003Hp-TW for pgadmin-hackers@arkaria.postgresql.org; Mon, 07 Mar 2022 12:24:13 +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 1nRCPM-0003EP-FA for pgadmin-hackers@lists.postgresql.org; Mon, 07 Mar 2022 12:24:13 +0000 Received: from mail-yw1-x112a.google.com ([2607:f8b0:4864:20::112a]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nRCPJ-0004yo-AD for pgadmin-hackers@postgresql.org; Mon, 07 Mar 2022 12:24:11 +0000 Received: by mail-yw1-x112a.google.com with SMTP id 00721157ae682-2dbd8777564so161858757b3.0 for ; Mon, 07 Mar 2022 04:24:09 -0800 (PST) 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=SBzU8malEyaKM1nO8doEyjUfF/GKC4XRryEX5y99hl4=; b=XL9Sq3NDDho4dQL3RwA/f4VEhnFVXSw84x+NBs7vkwOTf+BqeY574OiZdldzGW0Hus xmuqefEH2mrPidZG38globtIywrbvw1n5aOru6WcwYxedHfkQBseOCmwe74xn3cYxwUg hBZ8y1cfBJ+6BglZz7sEq+tclYiJWXtH0ljQI8x1hoYzqEmk7UbmNFC99vi31NkoFzwS p5vSaWkSQfQXgZyi/y+Z3Ita85ewPUA6rw6fRzfFdTmVQ9ICgaswItwRu4J10DG31ipf SFnIUKkgMBqcsfhFBmbC6ILixobBNHv8Ivj+ewobr0HAP+deksQcXJ0BPkMbnpcic2iU zkTA== 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=SBzU8malEyaKM1nO8doEyjUfF/GKC4XRryEX5y99hl4=; b=3pZB4NhLy62AKPMKXo45QcZRz1xxxvmwy9eJKggrQ5zf0g3+yseXSEl8ePPf1P1dRl N4qySCjkpPUCWSFlV3JD//GdG9VBVF03LAZobomj+97cm6NGitBsPF0rT6Kr6fCtCCgn hAekdZO97y0gTGxzIHmN1IR5eis95s2XVC6l23wcyOHr0JEQ77vg5iwpPFJRfPO9Pmb1 uB8ykxFYijcxi7wUDBnKBKR44xiFmtIbWoY7kiJBAwM06k8kj3fE1KtVIXF4y0ki0mwG 9zh6IAtpiJVSV5UwWbaobakSr5pljhdfQ9WInUV7oWEgcBPeLFOd2jVlsRq+HM5fIo1l Xk/g== X-Gm-Message-State: AOAM530SRnipEr3E78WM7mWcjonrMScpSclqEh51eVwAWrd9DhdsWVOt KNLfJKVTHyzJimBDnHEr4Z3JJ9N75aQW4pY/cBZ6cWOL/r8DG2nGef4tQlpDvYFO5sKpBb1APGM zR2a/PouKwJYhxp2VprUmG1d9llJYsOrDnaD1iEZqViwCSjphKVXFNkYyab1RzcqeQRehpORep9 yUGniCrlI51/14aQjeJj8oUwm6K7APeNHj+jx3xuaHYsGVAGHGByXSnJUCKmqx1WBP5g== X-Google-Smtp-Source: ABdhPJyel3UoPUICXoMKliHNxHjaPRR9vM1jgk5KUaWdkRKFDuT18UzsSZ8sXM5Y7sEhq56Or/8Gumq23qOvmgAK9BA= X-Received: by 2002:a0d:ec50:0:b0:2dc:1984:5eec with SMTP id r16-20020a0dec50000000b002dc19845eecmr7914986ywn.511.1646655848227; Mon, 07 Mar 2022 04:24:08 -0800 (PST) MIME-Version: 1.0 From: Nikhil Mohite Date: Mon, 7 Mar 2022 17:53:57 +0530 Message-ID: Subject: [pgAdmin][RM-7149]: [React] Port preferences dialog to React. To: pgadmin-hackers Content-Type: multipart/mixed; boundary="000000000000e70f2705d99ff064" 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 --000000000000e70f2705d99ff064 Content-Type: multipart/alternative; boundary="000000000000e70f2305d99ff062" --000000000000e70f2305d99ff062 Content-Type: text/plain; charset="UTF-8" Hi Hackers, Please find attached the patch for RM-7149 : [React] Port preferences dialog to React. -- *Thanks & Regards,* *Nikhil Mohite* *Senior Software Engineer.* *EDB Postgres* *Mob.No: +91-7798364578.* --000000000000e70f2305d99ff062 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Hackers,

Please find attached the pa= tch for=C2=A0RM-7149= : [React] Port preferences dialog to React.

--
=
Thanks & Regard= s,
Nikhil Mohite<= /b>
Senior Software Engineer.=
EDB Postgres
Mob.No: +91-7798364578.
--000000000000e70f2305d99ff062-- --000000000000e70f2705d99ff064 Content-Type: application/octet-stream; name="RM-7149.patch" Content-Disposition: attachment; filename="RM-7149.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l0gocchv0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvcmVnaXN0ZXJfYnJvd3Nlcl9wcmVmZXJl bmNlcy5weSBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvcmVnaXN0ZXJfYnJvd3Nlcl9wcmVmZXJlbmNl cy5weQppbmRleCBhZjdkYzRmMi4uMGIwMjI0YjMgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jy b3dzZXIvcmVnaXN0ZXJfYnJvd3Nlcl9wcmVmZXJlbmNlcy5weQorKysgYi93ZWIvcGdhZG1pbi9i cm93c2VyL3JlZ2lzdGVyX2Jyb3dzZXJfcHJlZmVyZW5jZXMucHkKQEAgLTUxOSw3ICs1MTksNyBA QCBkZWYgcmVnaXN0ZXJfYnJvd3Nlcl9wcmVmZXJlbmNlcyhzZWxmKToKIAogICAgIHNlbGYub3Bl bl9pbl9uZXdfdGFiID0gc2VsZi5wcmVmZXJlbmNlLnJlZ2lzdGVyKAogICAgICAgICAndGFiX3Nl dHRpbmdzJywgJ25ld19icm93c2VyX3RhYl9vcGVuJywKLSAgICAgICAgZ2V0dGV4dCgiT3BlbiBp biBuZXcgYnJvd3NlciB0YWIiKSwgJ3NlbGVjdDInLCBOb25lLAorICAgICAgICBnZXR0ZXh0KCJP cGVuIGluIG5ldyBicm93c2VyIHRhYiIpLCAnc2VsZWN0JywgTm9uZSwKICAgICAgICAgY2F0ZWdv cnlfbGFiZWw9UFJFRl9MQUJFTF9PUFRJT05TLAogICAgICAgICBvcHRpb25zPW9wZV9uZXdfdGFi X29wdGlvbnMsCiAgICAgICAgIGhlbHBfc3RyPWdldHRleHQoCkBAIC01MjcsNyArNTI3LDcgQEAg ZGVmIHJlZ2lzdGVyX2Jyb3dzZXJfcHJlZmVyZW5jZXMoc2VsZik6CiAgICAgICAgICAgICAnb3Ig UFNRTCBUb29sIGZyb20gdGhlIGRyb3AtZG93biB0byBzZXQgJwogICAgICAgICAgICAgJ29wZW4g aW4gbmV3IGJyb3dzZXIgdGFiIGZvciB0aGF0IHBhcnRpY3VsYXIgbW9kdWxlLicKICAgICAgICAg KSwKLSAgICAgICAgc2VsZWN0Mj17CisgICAgICAgIGNvbnRyb2xfcHJvcHM9ewogICAgICAgICAg ICAgJ211bHRpcGxlJzogVHJ1ZSwgJ2FsbG93Q2xlYXInOiBGYWxzZSwKICAgICAgICAgICAgICd0 YWdzJzogVHJ1ZSwgJ2ZpcnN0X2VtcHR5JzogRmFsc2UsCiAgICAgICAgICAgICAnc2VsZWN0T25D bG9zZSc6IEZhbHNlLCAnZW1wdHlPcHRpb25zJzogVHJ1ZSwKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL3N0YXRpYy9qcy9iaW5hcnlfcGF0aC51 aS5qcyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL3N0YXRpYy9q cy9iaW5hcnlfcGF0aC51aS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4u YWYzMWNlZGIKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9n cm91cHMvc2VydmVycy9zdGF0aWMvanMvYmluYXJ5X3BhdGgudWkuanMKQEAgLTAsMCArMSw2OCBA QAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5 cmlnaHQgKEMpIDIwMTMgLSAyMDIyLCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBU aGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8v CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLworCitpbXBvcnQgZ2V0dGV4dCBmcm9tICdzb3VyY2VzL2dldHRleHQnOworaW1wb3J0 IF8gZnJvbSAnbG9kYXNoJzsKK2ltcG9ydCB1cmxfZm9yIGZyb20gJ3NvdXJjZXMvdXJsX2Zvcic7 CitpbXBvcnQgQmFzZVVJU2NoZW1hIGZyb20gJ3NvdXJjZXMvU2NoZW1hVmlldy9iYXNlX3NjaGVt YS51aSc7CitpbXBvcnQgZ2V0QXBpSW5zdGFuY2UgZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3RhdGlj L2pzL2FwaV9pbnN0YW5jZSc7CitpbXBvcnQgTm90aWZ5IGZyb20gJy4uLy4uLy4uLy4uLy4uL3N0 YXRpYy9qcy9oZWxwZXJzL05vdGlmaWVyJzsKKworZXhwb3J0IGZ1bmN0aW9uIGdldEJpbmFyeVBh dGhTY2hlbWEoKSB7CisKKyAgcmV0dXJuIG5ldyBCaW5hcnlQYXRoU2NoZW1hKCk7Cit9CisKK2V4 cG9ydCBkZWZhdWx0IGNsYXNzIEJpbmFyeVBhdGhTY2hlbWEgZXh0ZW5kcyBCYXNlVUlTY2hlbWEg eworICBjb25zdHJ1Y3RvcigpIHsKKyAgICBzdXBlcih7CisgICAgICBpc0RlZmF1bHQ6IGZhbHNl LAorICAgICAgc2VydmVyVHlwZTogdW5kZWZpbmVkLAorICAgICAgYmluYXJ5UGF0aDogbnVsbCwK KyAgICB9KTsKKyAgfQorCisgIGdldCBiYXNlRmllbGRzKCkgeworICAgIHJldHVybiBbCisgICAg ICB7CisgICAgICAgIGlkOiAnaXNEZWZhdWx0JywgbGFiZWw6IGdldHRleHQoJ1NldCBhcyBkZWZh dWx0JyksIHR5cGU6ICdzd2l0Y2gnLAorICAgICAgICBjZWxsOiAnc3dpdGNoJywgd2lkdGg6IDMy LAorICAgICAgICBkaXNhYmxlZDogKHN0YXRlKSA9PiB7CisgICAgICAgICAgcmV0dXJuIHN0YXRl LmJpbmFyeVBhdGggPyBmYWxzZSA6IHRydWU7CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICB7 CisgICAgICAgIGlkOiAnc2VydmVyVHlwZScsCisgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdEYXRh YmFzZSBTZXJ2ZXInKSwKKyAgICAgICAgdHlwZTogJ3RleHQnLCBjZWxsOiAnJywKKyAgICAgICAg d2lkdGg6IDQwLAorICAgICAgfSwKKyAgICAgIHsKKyAgICAgICAgaWQ6ICdiaW5hcnlQYXRoJywg bGFiZWw6IGdldHRleHQoJ0JpbmFyeSBQYXRoJyksIGNlbGw6ICdmaWxlJywKKyAgICAgICAgaXN2 YWxpZGF0ZTogdHJ1ZSwgY29udHJvbFByb3BzOiB7IGRpYWxvZ1R5cGU6ICdzZWxlY3RfZm9sZGVy Jywgc3VwcG9ydGVkVHlwZXM6IFsnKicsICdzcWwnLCAnYmFja3VwJ10sIGRpYWxvZ1RpdGxlOiAn U2VsZWN0IGZvbGRlcicgfSwKKyAgICAgICAgdmFsaWRhdGU6IChkYXRhKSA9PiB7CisgICAgICAg ICAgY29uc3QgYXBpID0gZ2V0QXBpSW5zdGFuY2UoKTsKKyAgICAgICAgICBpZiAoXy5pc051bGwo ZGF0YSkgfHwgZGF0YS50cmltKCkgPT09ICcnKSB7CisgICAgICAgICAgICBOb3RpZnkuYWxlcnQo Z2V0dGV4dCgnVmFsaWRhdGUgUGF0aCcpLCBnZXR0ZXh0KCdQYXRoIHNob3VsZCBub3QgYmUgZW1w dHkuJykpOworICAgICAgICAgIH0KKworICAgICAgICAgIGFwaS5wb3N0KHVybF9mb3IoJ21pc2Mu dmFsaWRhdGVfYmluYXJ5X3BhdGgnKSwKKyAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHsgJ3V0 aWxpdHlfcGF0aCc6IGRhdGEgfSkpCisgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7 CisgICAgICAgICAgICAgIE5vdGlmeS5hbGVydChnZXR0ZXh0KCdWYWxpZGF0ZSBiaW5hcnkgcGF0 aCcpLCBnZXR0ZXh0KHJlcy5kYXRhLmRhdGEpKTsKKyAgICAgICAgICAgIH0pCisgICAgICAgICAg ICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7CisgICAgICAgICAgICAgIE5vdGlmeS5wZ05vdGlm aWVyKGVycm9yLCBnZXR0ZXh0KCdGYWlsZWQgdG8gdmFsaWRhdGUgYmluYXJ5IHBhdGguJykpOwor ICAgICAgICAgICAgfSk7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg IH0sCisgICAgXTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9fX2luaXRf Xy5weSBiL3dlYi9wZ2FkbWluL21pc2MvX19pbml0X18ucHkKaW5kZXggZmI0MzZkNzAuLjZjZDgz NDA0IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9taXNjL19faW5pdF9fLnB5CisrKyBiL3dlYi9w Z2FkbWluL21pc2MvX19pbml0X18ucHkKQEAgLTY3LDcgKzY3LDEwIEBAIGNsYXNzIE1pc2NNb2R1 bGUoUGdBZG1pbk1vZHVsZSk6CiAgICAgICAgICAgICAndXNlcl9sYW5ndWFnZScsICd1c2VyX2xh bmd1YWdlJywKICAgICAgICAgICAgIGdldHRleHQoIlVzZXIgbGFuZ3VhZ2UiKSwgJ29wdGlvbnMn LCAnZW4nLAogICAgICAgICAgICAgY2F0ZWdvcnlfbGFiZWw9Z2V0dGV4dCgnVXNlciBsYW5ndWFn ZScpLAotICAgICAgICAgICAgb3B0aW9ucz1sYW5nX29wdGlvbnMKKyAgICAgICAgICAgIG9wdGlv bnM9bGFuZ19vcHRpb25zLAorICAgICAgICAgICAgY29udHJvbF9wcm9wcz17CisgICAgICAgICAg ICAgICAgJ2FsbG93Q2xlYXInOiBGYWxzZSwKKyAgICAgICAgICAgIH0KICAgICAgICAgKQogCiAg ICAgICAgIHRoZW1lX29wdGlvbnMgPSBbXQpAQCAtOTAsNiArOTMsOSBAQCBjbGFzcyBNaXNjTW9k dWxlKFBnQWRtaW5Nb2R1bGUpOgogICAgICAgICAgICAgZ2V0dGV4dCgiVGhlbWUiKSwgJ29wdGlv bnMnLCAnc3RhbmRhcmQnLAogICAgICAgICAgICAgY2F0ZWdvcnlfbGFiZWw9Z2V0dGV4dCgnVGhl bWVzJyksCiAgICAgICAgICAgICBvcHRpb25zPXRoZW1lX29wdGlvbnMsCisgICAgICAgICAgICBj b250cm9sX3Byb3BzPXsKKyAgICAgICAgICAgICAgICAnYWxsb3dDbGVhcic6IEZhbHNlLAorICAg ICAgICAgICAgfSwKICAgICAgICAgICAgIGhlbHBfc3RyPWdldHRleHQoCiAgICAgICAgICAgICAg ICAgJ0EgcmVmcmVzaCBpcyByZXF1aXJlZCB0byBhcHBseSB0aGUgdGhlbWUuIEJlbG93IGlzIHRo ZSAnCiAgICAgICAgICAgICAgICAgJ3ByZXZpZXcgb2YgdGhlIHRoZW1lJwpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFnZXIvX19pbml0X18ucHkgYi93ZWIvcGdhZG1pbi9t aXNjL2ZpbGVfbWFuYWdlci9fX2luaXRfXy5weQppbmRleCBkMTMyZTQ2ZS4uY2E2OWU2MDkgMTAw NjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL21pc2MvZmlsZV9tYW5hZ2VyL19faW5pdF9fLnB5CisrKyBi L3dlYi9wZ2FkbWluL21pc2MvZmlsZV9tYW5hZ2VyL19faW5pdF9fLnB5CkBAIC0xNjcsMTAgKzE2 NywxNCBAQCBjbGFzcyBGaWxlTWFuYWdlck1vZHVsZShQZ0FkbWluTW9kdWxlKToKICAgICAgICAg KQogICAgICAgICBzZWxmLmZpbGVfZGlhbG9nX3ZpZXcgPSBzZWxmLnByZWZlcmVuY2UucmVnaXN0 ZXIoCiAgICAgICAgICAgICAnb3B0aW9ucycsICdmaWxlX2RpYWxvZ192aWV3JywKLSAgICAgICAg ICAgIGdldHRleHQoIkZpbGUgZGlhbG9nIHZpZXciKSwgJ29wdGlvbnMnLCAnbGlzdCcsCisgICAg ICAgICAgICBnZXR0ZXh0KCJGaWxlIGRpYWxvZyB2aWV3IiksICdzZWxlY3QnLCAnbGlzdCcsCiAg ICAgICAgICAgICBjYXRlZ29yeV9sYWJlbD1QUkVGX0xBQkVMX09QVElPTlMsCiAgICAgICAgICAg ICBvcHRpb25zPVt7J2xhYmVsJzogZ2V0dGV4dCgnTGlzdCcpLCAndmFsdWUnOiAnbGlzdCd9LAot ICAgICAgICAgICAgICAgICAgICAgeydsYWJlbCc6IGdldHRleHQoJ0dyaWQnKSwgJ3ZhbHVlJzog J2dyaWQnfV0KKyAgICAgICAgICAgICAgICAgICAgIHsnbGFiZWwnOiBnZXR0ZXh0KCdHcmlkJyks ICd2YWx1ZSc6ICdncmlkJ31dLAorICAgICAgICAgICAgY29udHJvbF9wcm9wcz17CisgICAgICAg ICAgICAgICAgJ2FsbG93Q2xlYXInOiBGYWxzZSwKKyAgICAgICAgICAgICAgICAndGFncyc6IEZh bHNlCisgICAgICAgICAgICB9LAogICAgICAgICApCiAgICAgICAgIHNlbGYuc2hvd19oaWRkZW5f ZmlsZXMgPSBzZWxmLnByZWZlcmVuY2UucmVnaXN0ZXIoCiAgICAgICAgICAgICAnb3B0aW9ucycs ICdzaG93X2hpZGRlbl9maWxlcycsCkBAIC0yMzYsNyArMjQwLDcgQEAgZGVmIGZpbGVfbWFuYWdl cl9jb25maWcodHJhbnNfaWQpOgogICAgICIiInJlbmRlciB0aGUgcmVxdWlyZWQganNvbiIiIgog ICAgIGRhdGEgPSBGaWxlbWFuYWdlci5nZXRfdHJhc2FjdGlvbl9zZWxlY3Rpb24odHJhbnNfaWQp CiAgICAgcHJlZiA9IFByZWZlcmVuY2VzLm1vZHVsZSgnZmlsZV9tYW5hZ2VyJykKLSAgICBmaWxl X2RpYWxvZ192aWV3ID0gcHJlZi5wcmVmZXJlbmNlKCdmaWxlX2RpYWxvZ192aWV3JykuZ2V0KCkK KyAgICBmaWxlX2RpYWxvZ192aWV3ID0gcHJlZi5wcmVmZXJlbmNlKCdmaWxlX2RpYWxvZ192aWV3 JykuZ2V0KClbMF0KICAgICBzaG93X2hpZGRlbl9maWxlcyA9IHByZWYucHJlZmVyZW5jZSgnc2hv d19oaWRkZW5fZmlsZXMnKS5nZXQoKQogCiAgICAgcmV0dXJuIFJlc3BvbnNlKHJlc3BvbnNlPXJl bmRlcl90ZW1wbGF0ZSgKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3ByZWZlcmVuY2VzL19faW5p dF9fLnB5IGIvd2ViL3BnYWRtaW4vcHJlZmVyZW5jZXMvX19pbml0X18ucHkKaW5kZXggOTg3MmE2 NzIuLjNmNzU0YWRhIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9wcmVmZXJlbmNlcy9fX2luaXRf Xy5weQorKysgYi93ZWIvcGdhZG1pbi9wcmVmZXJlbmNlcy9fX2luaXRfXy5weQpAQCAtMzcsMjYg KzM3LDIzIEBAIGNsYXNzIFByZWZlcmVuY2VzTW9kdWxlKFBnQWRtaW5Nb2R1bGUpOgogICAgICIi IgogCiAgICAgZGVmIGdldF9vd25famF2YXNjcmlwdHMoc2VsZik6Ci0gICAgICAgIHJldHVybiBb ewotICAgICAgICAgICAgJ25hbWUnOiAncGdhZG1pbi5wcmVmZXJlbmNlcycsCi0gICAgICAgICAg ICAncGF0aCc6IHVybF9mb3IoJ3ByZWZlcmVuY2VzLmluZGV4JykgKyAncHJlZmVyZW5jZXMnLAot ICAgICAgICAgICAgJ3doZW4nOiBOb25lCi0gICAgICAgIH1dCisgICAgICAgIHNjcmlwdHMgPSBs aXN0KCkKKyAgICAgICAgZm9yIG5hbWUsIHNjcmlwdCBpbiBbCisgICAgICAgICAgICBbJ3BnYWRt aW4ucHJlZmVyZW5jZXMnLCAnanMvcHJlZmVyZW5jZXMnXQorICAgICAgICBdOgorICAgICAgICAg ICAgc2NyaXB0cy5hcHBlbmQoeworICAgICAgICAgICAgICAgICduYW1lJzogbmFtZSwKKyAgICAg ICAgICAgICAgICAncGF0aCc6IHVybF9mb3IoJ3ByZWZlcmVuY2VzLmluZGV4JykgKyBzY3JpcHQs CisgICAgICAgICAgICAgICAgJ3doZW4nOiBOb25lCisgICAgICAgICAgICB9KQorCisgICAgICAg IHJldHVybiBzY3JpcHRzCiAKICAgICBkZWYgZ2V0X293bl9zdHlsZXNoZWV0cyhzZWxmKToKICAg ICAgICAgcmV0dXJuIFtdCiAKICAgICBkZWYgZ2V0X293bl9tZW51aXRlbXMoc2VsZik6Ci0gICAg ICAgIHJldHVybiB7Ci0gICAgICAgICAgICAnZmlsZV9pdGVtcyc6IFsKLSAgICAgICAgICAgICAg ICBNZW51SXRlbShuYW1lPSdtbnVfcHJlZmVyZW5jZXMnLAotICAgICAgICAgICAgICAgICAgICAg ICAgIHByaW9yaXR5PTk5NywKLSAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU9InBnQWRt aW4uUHJlZmVyZW5jZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrPSdzaG93 JywKLSAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPSdmYSBmYS1jb2cnLAotICAgICAgICAg ICAgICAgICAgICAgICAgIGxhYmVsPWdldHRleHQoJ1ByZWZlcmVuY2VzJykpCi0gICAgICAgICAg ICBdCi0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHt9CiAKICAgICBkZWYgZ2V0X2V4cG9zZWRf dXJsX2VuZHBvaW50cyhzZWxmKToKICAgICAgICAgIiIiCkBAIC0xNDksNyArMTQ2LDggQEAgZGVm IF9pdGVyYXRlX2NhdGVnb3JpZXMocHJlZl9kLCBsYWJlbCwgcmVzKToKICAgICAgICAgImxhYmVs IjogZ2V0dGV4dChwcmVmX2RbJ2xhYmVsJ10pLAogICAgICAgICAiaW5vZGUiOiBUcnVlLAogICAg ICAgICAib3BlbiI6IFRydWUsCi0gICAgICAgICJicmFuY2giOiBbXQorICAgICAgICAiY2hpbGRy ZW4iOiBbXSwKKyAgICAgICAgInZhbHVlIjogZ2V0dGV4dChwcmVmX2RbJ2xhYmVsJ10pLAogICAg IH0KIAogICAgIGZvciBjIGluIHByZWZfZFsnY2F0ZWdvcmllcyddOgpAQCAtMTYyLDEzICsxNjAs MTUgQEAgZGVmIF9pdGVyYXRlX2NhdGVnb3JpZXMocHJlZl9kLCBsYWJlbCwgcmVzKToKICAgICAg ICAgICAgICJpZCI6IGNbJ2lkJ10sCiAgICAgICAgICAgICAibWlkIjogcHJlZl9kWydpZCddLAog ICAgICAgICAgICAgImxhYmVsIjogZ2V0dGV4dChjWydsYWJlbCddKSwKKyAgICAgICAgICAgICJ2 YWx1ZSI6ICd7MH17MX0nLmZvcm1hdChjWydpZCddLCBnZXR0ZXh0KGNbJ2xhYmVsJ10pKSwKICAg ICAgICAgICAgICJpbm9kZSI6IEZhbHNlLAogICAgICAgICAgICAgIm9wZW4iOiBGYWxzZSwKLSAg ICAgICAgICAgICJwcmVmZXJlbmNlcyI6IHNvcnRlZChjWydwcmVmZXJlbmNlcyddLCBrZXk9bGFi ZWwpCisgICAgICAgICAgICAicHJlZmVyZW5jZXMiOiBzb3J0ZWQoY1sncHJlZmVyZW5jZXMnXSwg a2V5PWxhYmVsKSwKKyAgICAgICAgICAgICJzaG93Q2hlY2tib3giOiBGYWxzZQogICAgICAgICB9 CiAKLSAgICAgICAgKG9tWydicmFuY2gnXSkuYXBwZW5kKG9jKQotICAgIG9tWydicmFuY2gnXSA9 IHNvcnRlZChvbVsnYnJhbmNoJ10sIGtleT1sYWJlbCkKKyAgICAgICAgKG9tWydjaGlsZHJlbidd KS5hcHBlbmQob2MpCisgICAgb21bJ2NoaWxkcmVuJ10gPSBzb3J0ZWQob21bJ2NoaWxkcmVuJ10s IGtleT1sYWJlbCkKIAogICAgIHJlcy5hcHBlbmQob20pCiAKQEAgLTE5NCw1MyArMTk0LDg1IEBA IGRlZiBwcmVmZXJlbmNlc19zKCk6CiAgICAgKQogCiAKLUBibHVlcHJpbnQucm91dGUoIi88aW50 OnBpZD4iLCBtZXRob2RzPVsiUFVUIl0sIGVuZHBvaW50PSJ1cGRhdGUiKQorZGVmIGdldF9kYXRh KCk6CisgICAgcHJlZl9kYXRhID0gcmVxdWVzdC5mb3JtIGlmIHJlcXVlc3QuZm9ybSBlbHNlIGpz b24ubG9hZHMoCisgICAgICAgIHJlcXVlc3QuZGF0YS5kZWNvZGUoKSkKKworICAgIGlmIG5vdCBw cmVmX2RhdGE6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlBsZWFzZSBwcm92aWRlIHRoZSB2 YWxpZCBwcmVmZXJlbmNlcyBkYXRhIHRvIHNhdmUuIikKKworICAgIHJldHVybiBwcmVmX2RhdGEK KworCitAYmx1ZXByaW50LnJvdXRlKCIvIiwgbWV0aG9kcz1bIlBVVCJdLCBlbmRwb2ludD0idXBk YXRlIikKIEBsb2dpbl9yZXF1aXJlZAotZGVmIHNhdmUocGlkKToKK2RlZiBzYXZlKCk6CiAgICAg IiIiCiAgICAgU2F2ZSBhIHNwZWNpZmljIHByZWZlcmVuY2UuCiAgICAgIiIiCi0gICAgZGF0YSA9 IHJlcXVlc3QuZm9ybSBpZiByZXF1ZXN0LmZvcm0gZWxzZSBqc29uLmxvYWRzKHJlcXVlc3QuZGF0 YS5kZWNvZGUoKSkKKyAgICBwcmVmX2RhdGEgPSBnZXRfZGF0YSgpCiAKLSAgICBpZiBkYXRhWydu YW1lJ10gaW4gWyd2d19lZHRfdGFiX3RpdGxlX3BsYWNlaG9sZGVyJywKLSAgICAgICAgICAgICAg ICAgICAgICAgICdxdF90YWJfdGl0bGVfcGxhY2Vob2xkZXInLAotICAgICAgICAgICAgICAgICAg ICAgICAgJ2RlYnVnZ2VyX3RhYl90aXRsZV9wbGFjZWhvbGRlciddIFwKLSAgICAgICAgICAgIGFu ZCBkYXRhWyd2YWx1ZSddLmlzc3BhY2UoKToKLSAgICAgICAgZGF0YVsndmFsdWUnXSA9ICcnCisg ICAgZm9yIGRhdGEgaW4gcHJlZl9kYXRhOgorICAgICAgICBpZiBkYXRhWyduYW1lJ10gaW4gWyd2 d19lZHRfdGFiX3RpdGxlX3BsYWNlaG9sZGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAncXRfdGFiX3RpdGxlX3BsYWNlaG9sZGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnZGVidWdnZXJfdGFiX3RpdGxlX3BsYWNlaG9sZGVyJ10gXAorICAgICAgICAgICAgICAgIGFu ZCBkYXRhWyd2YWx1ZSddLmlzc3BhY2UoKToKKyAgICAgICAgICAgIGRhdGFbJ3ZhbHVlJ10gPSAn JwogCi0gICAgcmVzLCBtc2cgPSBQcmVmZXJlbmNlcy5zYXZlKAotICAgICAgICBkYXRhWydtaWQn XSwgZGF0YVsnY2F0ZWdvcnlfaWQnXSwgZGF0YVsnaWQnXSwgZGF0YVsndmFsdWUnXSkKLSAgICBz Z20uZ2V0X25vZGVzKHNnbSkKKyAgICAgICAgaWYgZGF0YVsnbmFtZSddID09ICdwZ19iaW5fZGly JzoKKyAgICAgICAgICAgIGNoZWNrX2JpbmFyeV9wYXRoX2RhdGEoZGF0YSkKIAotICAgIGlmIG5v dCByZXM6Ci0gICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9bXNn KQorICAgICAgICByZXMsIG1zZyA9IFByZWZlcmVuY2VzLnNhdmUoCisgICAgICAgICAgICBkYXRh WydtaWQnXSwgZGF0YVsnY2F0ZWdvcnlfaWQnXSwgZGF0YVsnaWQnXSwgZGF0YVsndmFsdWUnXSkK KyAgICAgICAgc2dtLmdldF9ub2RlcyhzZ20pCiAKLSAgICByZXNwb25zZSA9IHN1Y2Nlc3NfcmV0 dXJuKCkKKyAgICAgICAgaWYgbm90IHJlczoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9z ZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9bXNnKQogCi0gICAgIyBTZXQgY29va2llICYgc2Vzc2lvbiBm b3IgbGFuZ3VhZ2Ugc2V0dGluZ3MuCi0gICAgIyBUaGlzIHdpbGwgZXhlY3V0ZSBldmVyeSB0aW1l IGFzIGNvdWxkIG5vdCBmaW5kIHRoZSBiZXR0ZXIgd2F5IHRvIGtub3cKLSAgICAjIHRoYXQgd2hp Y2ggcHJlZmVyZW5jZSBpcyBnZXR0aW5nIHVwZGF0ZWQuCisgICAgICAgIHJlc3BvbnNlID0gc3Vj Y2Vzc19yZXR1cm4oKQogCi0gICAgbWlzY19wcmVmZXJlbmNlID0gUHJlZmVyZW5jZXMubW9kdWxl KCdtaXNjJykKLSAgICB1c2VyX2xhbmd1YWdlcyA9IG1pc2NfcHJlZmVyZW5jZS5wcmVmZXJlbmNl KAotICAgICAgICAndXNlcl9sYW5ndWFnZScKLSAgICApCisgICAgICAgICMgU2V0IGNvb2tpZSAm IHNlc3Npb24gZm9yIGxhbmd1YWdlIHNldHRpbmdzLgorICAgICAgICAjIFRoaXMgd2lsbCBleGVj dXRlIGV2ZXJ5IHRpbWUgYXMgY291bGQgbm90IGZpbmQgdGhlIGJldHRlciB3YXkgdG8ga25vdwor ICAgICAgICAjIHRoYXQgd2hpY2ggcHJlZmVyZW5jZSBpcyBnZXR0aW5nIHVwZGF0ZWQuCisKKyAg ICAgICAgbWlzY19wcmVmZXJlbmNlID0gUHJlZmVyZW5jZXMubW9kdWxlKCdtaXNjJykKKyAgICAg ICAgdXNlcl9sYW5ndWFnZXMgPSBtaXNjX3ByZWZlcmVuY2UucHJlZmVyZW5jZSgKKyAgICAgICAg ICAgICd1c2VyX2xhbmd1YWdlJworICAgICAgICApCiAKLSAgICBsYW5ndWFnZSA9ICdlbicKLSAg ICBpZiB1c2VyX2xhbmd1YWdlczoKLSAgICAgICAgbGFuZ3VhZ2UgPSB1c2VyX2xhbmd1YWdlcy5n ZXQoKSBvciBsYW5ndWFnZQorICAgICAgICBsYW5ndWFnZSA9ICdlbicKKyAgICAgICAgaWYgdXNl cl9sYW5ndWFnZXM6CisgICAgICAgICAgICBsYW5ndWFnZSA9IHVzZXJfbGFuZ3VhZ2VzLmdldCgp IG9yIGxhbmd1YWdlCiAKLSAgICBkb21haW4gPSBkaWN0KCkKLSAgICBpZiBjb25maWcuQ09PS0lF X0RFRkFVTFRfRE9NQUlOIGFuZFwKLSAgICAgICAgICAgIGNvbmZpZy5DT09LSUVfREVGQVVMVF9E T01BSU4gIT0gJ2xvY2FsaG9zdCc6Ci0gICAgICAgIGRvbWFpblsnZG9tYWluJ10gPSBjb25maWcu Q09PS0lFX0RFRkFVTFRfRE9NQUlOCisgICAgICAgIGRvbWFpbiA9IGRpY3QoKQorICAgICAgICBp ZiBjb25maWcuQ09PS0lFX0RFRkFVTFRfRE9NQUlOIGFuZCBcCisgICAgICAgICAgICAgICAgY29u ZmlnLkNPT0tJRV9ERUZBVUxUX0RPTUFJTiAhPSAnbG9jYWxob3N0JzoKKyAgICAgICAgICAgIGRv bWFpblsnZG9tYWluJ10gPSBjb25maWcuQ09PS0lFX0RFRkFVTFRfRE9NQUlOCiAKLSAgICBzZXRh dHRyKHNlc3Npb24sICdQR0FETUlOX0xBTkdVQUdFJywgbGFuZ3VhZ2UpCi0gICAgcmVzcG9uc2Uu c2V0X2Nvb2tpZSgiUEdBRE1JTl9MQU5HVUFHRSIsIHZhbHVlPWxhbmd1YWdlLAotICAgICAgICAg ICAgICAgICAgICAgICAgcGF0aD1jb25maWcuQ09PS0lFX0RFRkFVTFRfUEFUSCwKLSAgICAgICAg ICAgICAgICAgICAgICAgIHNlY3VyZT1jb25maWcuU0VTU0lPTl9DT09LSUVfU0VDVVJFLAotICAg ICAgICAgICAgICAgICAgICAgICAgaHR0cG9ubHk9Y29uZmlnLlNFU1NJT05fQ09PS0lFX0hUVFBP TkxZLAotICAgICAgICAgICAgICAgICAgICAgICAgc2FtZXNpdGU9Y29uZmlnLlNFU1NJT05fQ09P S0lFX1NBTUVTSVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgKipkb21haW4pCisgICAgICAg IHNldGF0dHIoc2Vzc2lvbiwgJ1BHQURNSU5fTEFOR1VBR0UnLCBsYW5ndWFnZSkKKyAgICAgICAg cmVzcG9uc2Uuc2V0X2Nvb2tpZSgiUEdBRE1JTl9MQU5HVUFHRSIsIHZhbHVlPWxhbmd1YWdlLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9Y29uZmlnLkNPT0tJRV9ERUZBVUxUX1BB VEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJlPWNvbmZpZy5TRVNTSU9OX0NP T0tJRV9TRUNVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cG9ubHk9Y29uZmln LlNFU1NJT05fQ09PS0lFX0hUVFBPTkxZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNh bWVzaXRlPWNvbmZpZy5TRVNTSU9OX0NPT0tJRV9TQU1FU0lURSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqKmRvbWFpbikKIAogICAgIHJldHVybiByZXNwb25zZQorCisKK2RlZiBjaGVj a19iaW5hcnlfcGF0aF9kYXRhKGRhdGEpOgorICAgIHByZWZfdmFsID0ganNvbi5sb2FkcyhkYXRh Wyd2YWx1ZSddKQorICAgIHByZWZfZGF0YSA9IFByZWZlcmVuY2VzLnByZWZlcmVuY2VzKCkKKyAg ICBfZGF0YSA9IFtlbCBmb3IgZWwgaW4gcHJlZl9kYXRhIGlmIGVsWydpZCddID09IGRhdGFbJ21p ZCddXQorICAgIGlmIF9kYXRhOgorICAgICAgICBjYXRlZ29yaWVzID0gX2RhdGFbMF1bJ2NhdGVn b3JpZXMnXQorICAgICAgICBwcmVmID0gW3ByZWYgZm9yIGN0IGluIGNhdGVnb3JpZXMgZm9yIHBy ZWYgaW4gY3RbJ3ByZWZlcmVuY2VzJ10KKyAgICAgICAgICAgICAgICBpZgorICAgICAgICAgICAg ICAgIGN0WydpZCddID09IGRhdGFbJ2NhdGVnb3J5X2lkJ10gYW5kIHByZWZbJ2lkJ10gPT0gZGF0 YVsKKyAgICAgICAgICAgICAgICAgICAgJ2lkJ11dCisgICAgICAgIGlmIHByZWY6CisgICAgICAg ICAgICB2YWx1ZXMgPSBqc29uLmxvYWRzKHByZWZbMF1bJ3ZhbHVlJ10pCisgICAgICAgICAgICBw cmVmID0gW3B2YWwgaWYgcHZhbFsndmVyc2lvbiddID09IHZhbFsndmVyc2lvbiddIGVsc2UgdmFs CisgICAgICAgICAgICAgICAgICAgIGZvciB2YWwgaW4gdmFsdWVzIGZvciBwdmFsIGluIHByZWZf dmFsXQorICAgICAgICAgICAgZGF0YVsndmFsdWUnXSA9IGpzb24uZHVtcHMocHJlZikKKyAgICBy ZXR1cm4gZGF0YQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vcHJlZmVyZW5jZXMvc3RhdGljL2pz L2NvbXBvbmVudHMvUHJlZmVyZW5jZXNDb21wb25lbnQuanN4IGIvd2ViL3BnYWRtaW4vcHJlZmVy ZW5jZXMvc3RhdGljL2pzL2NvbXBvbmVudHMvUHJlZmVyZW5jZXNDb21wb25lbnQuanN4Cm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5hNDMzYTgzNQotLS0gL2Rldi9udWxsCisr KyBiL3dlYi9wZ2FkbWluL3ByZWZlcmVuY2VzL3N0YXRpYy9qcy9jb21wb25lbnRzL1ByZWZlcmVu Y2VzQ29tcG9uZW50LmpzeApAQCAtMCwwICsxLDUxMSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4g NCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDIyLCBU aGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2Vk IHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitpbXBvcnQgZ2V0dGV4 dCBmcm9tICdzb3VyY2VzL2dldHRleHQnOworaW1wb3J0IHVybF9mb3IgZnJvbSAnc291cmNlcy91 cmxfZm9yJzsKK2ltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7CitpbXBv cnQgeyBCb3ggfSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZSc7CitpbXBvcnQgUHJvcFR5cGVzIGZy b20gJ3Byb3AtdHlwZXMnOworaW1wb3J0IHsgbWFrZVN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11 aS9jb3JlL3N0eWxlcyc7CitpbXBvcnQgU2NoZW1hVmlldyBmcm9tICcuLi8uLi8uLi8uLi9zdGF0 aWMvanMvU2NoZW1hVmlldyc7CitpbXBvcnQgZ2V0QXBpSW5zdGFuY2UgZnJvbSAnLi4vLi4vLi4v Li4vc3RhdGljL2pzL2FwaV9pbnN0YW5jZSc7CitpbXBvcnQgQ2xvc2VTaGFycEljb24gZnJvbSAn QG1hdGVyaWFsLXVpL2ljb25zL0Nsb3NlU2hhcnAnOworaW1wb3J0IFNhdmVTaGFycEljb24gZnJv bSAnQG1hdGVyaWFsLXVpL2ljb25zL1NhdmVTaGFycCc7CitpbXBvcnQgY2xzeCBmcm9tICdjbHN4 JzsKK2ltcG9ydCBOb3RpZnkgZnJvbSAnLi4vLi4vLi4vLi4vc3RhdGljL2pzL2hlbHBlcnMvTm90 aWZpZXInOworaW1wb3J0IHBnQWRtaW4gZnJvbSAnc291cmNlcy9wZ2FkbWluJzsKK2ltcG9ydCB7 IERlZmF1bHRCdXR0b24sIFByaW1hcnlCdXR0b24gfSBmcm9tICcuLi8uLi8uLi8uLi9zdGF0aWMv anMvY29tcG9uZW50cy9CdXR0b25zJzsKK2ltcG9ydCBCYXNlVUlTY2hlbWEgZnJvbSAnc291cmNl cy9TY2hlbWFWaWV3L2Jhc2Vfc2NoZW1hLnVpJzsKK2ltcG9ydCB7IGdldEJpbmFyeVBhdGhTY2hl bWEgfSBmcm9tICcuLi8uLi8uLi8uLi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9zdGF0 aWMvanMvYmluYXJ5X3BhdGgudWknOworaW1wb3J0IFByZWZlcmVuY2VzVHJlZSBmcm9tICcuL1By ZWZlcmVuY2VzVHJlZSc7CitpbXBvcnQgeyBfc2V0X2R5bmFtaWNfdGFifSBmcm9tICcuLi8uLi8u Li8uLi90b29scy9kYXRhZ3JpZC9zdGF0aWMvanMvc2hvd19xdWVyeV90b29sJzsKKworY2xhc3Mg UHJlZmVyZW5jZXNTY2hlbWEgZXh0ZW5kcyBCYXNlVUlTY2hlbWEgeworICBjb25zdHJ1Y3Rvcihp bml0VmFsdWVzID0ge30sIHNjaGVtYUZpZWxkcyA9IFtdKSB7CisgICAgc3VwZXIoeworICAgICAg Li4uaW5pdFZhbHVlcworICAgIH0pOworICAgIHRoaXMuc2NoZW1hRmllbGRzID0gc2NoZW1hRmll bGRzOworICAgIHRoaXMuY2F0ZWdvcnkgPSAnJzsKKyAgfQorCisgIGdldCBpZEF0dHJpYnV0ZSgp IHsKKyAgICByZXR1cm4gJ2lkJzsKKyAgfQorCisgIHNldFNlbGVjdGVkQ2F0ZWdvcnkoY2F0ZWdv cnkpIHsKKyAgICB0aGlzLmNhdGVnb3J5ID0gY2F0ZWdvcnk7CisgIH0KKworICBnZXQgYmFzZUZp ZWxkcygpIHsKKyAgICByZXR1cm4gdGhpcy5zY2hlbWFGaWVsZHM7CisgIH0KK30KKworY29uc3Qg dXNlU3R5bGVzID0gbWFrZVN0eWxlcygodGhlbWUpID0+CisgICh7CisgICAgcm9vdDogeworICAg ICAgZGlzcGxheTogJ2ZsZXgnLAorICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsCisgICAg ICBmbGV4R3JvdzogMSwKKyAgICAgIGhlaWdodDogJzEwMCUnLAorICAgICAgYmFja2dyb3VuZENv bG9yOiB0aGVtZS5wYWxldHRlLmJhY2tncm91bmQuZGVmYXVsdCwKKyAgICAgIG1pbkhlaWdodDog NTIwLAorICAgICAgbWluV2lkdGg6IDcwMCwKKyAgICAgIG92ZXJmbG93OiAnaGlkZGVuJywKKyAg ICAgICcmJGRpc2FibGVkJzogeworICAgICAgICBjb2xvcjogJyNkZGQnLAorICAgICAgfQorICAg IH0sCisgICAgYm9keTogeworICAgICAgZGlzcGxheTogJ2ZsZXgnLAorICAgICAgZmxleERpcmVj dGlvbjogJ2NvbHVtbicsCisgICAgICBoZWlnaHQ6ICcxMDAlJywKKyAgICB9LAorICAgIHByZWZl cmVuY2VzOiB7CisgICAgICBib3JkZXJDb2xvcjogdGhlbWUub3RoZXJWYXJzLmJvcmRlckNvbG9y LAorICAgICAgZGlzcGxheTogJ2ZsZXgnLAorICAgICAgZmxleEdyb3c6IDEsCisgICAgICBoZWln aHQ6ICcxMDAlJywKKyAgICAgIG1pbkhlaWdodDogMCwKKyAgICAgIG92ZXJmbG93OiAnaGlkZGVu JworCisgICAgfSwKKyAgICB0cmVlQ29udGFpbmVyOiB7CisgICAgICBmbGV4QmFzaXM6ICcyNSUn LAorICAgICAgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnLAorICAgICAgcGFkZGluZ0xlZnQ6ICc1 cHgnLAorICAgICAgbWluSGVpZ2h0OiAwLAorICAgIH0sCisgICAgcHJlZmVyZW5jZXNDb250YWlu ZXI6IHsKKyAgICAgIGZsZXhCYXNpczogJzc1JScsCisgICAgICBwYWRkaW5nOiAnNXB4JywKKyAg ICAgIGJvcmRlckNvbG9yOiB0aGVtZS5vdGhlclZhcnMuYm9yZGVyQ29sb3IgKyAnIWltcG9ydGFu dCcsCisgICAgICBib3JkZXJMZWZ0OiAnMXB4IHNvbGlkJywKKyAgICAgIHBvc2l0aW9uOiAncmVs YXRpdmUnLAorICAgICAgaGVpZ2h0OiAnMTAwJScsCisgICAgICBwYWRkaW5nVG9wOiAnNXB4JywK KyAgICAgIG92ZXJmbG93OiAnYXV0bycKKyAgICB9LAorICAgIGFjdGlvbkJ0bjogeworICAgICAg YWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnLAorICAgIH0sCisgICAgYnV0dG9uTWFyZ2luOiB7Cisg ICAgICBtYXJnaW5MZWZ0OiAnMC41ZW0nCisgICAgfSwKKyAgICBmb290ZXI6IHsKKyAgICAgIGJv cmRlclRvcDogJzFweCBzb2xpZCAjZGRlMGU2ICFpbXBvcnRhbnQnLAorICAgICAgcGFkZGluZzog JzAuNXJlbScsCisgICAgICBkaXNwbGF5OiAnZmxleCcsCisgICAgICB3aWR0aDogJzEwMCUnLAor ICAgICAgYmFja2dyb3VuZDogdGhlbWUub3RoZXJWYXJzLmhlYWRlckJnLAorICAgICAgekluZGV4 OiA5OTksCisgICAgfSwKKyAgICBjdXN0b21UcmVlQ2xhc3M6IHsKKyAgICAgICcmIC5yZWFjdC1j aGVja2JveC10cmVlJzogeworICAgICAgICBoZWlnaHQ6ICcxMDAlICFpbXBvcnRhbnQnLAorICAg ICAgICBib3JkZXI6ICdub25lICFpbXBvcnRhbnQnLAorICAgICAgfSwKKyAgICB9LAorICAgIHBy ZWZlcmVuY2VzVHJlZTogeworICAgICAgaGVpZ2h0OiAnY2FsYygxMDAlIC0gNTBweCknLAorICAg ICAgbWluSGVpZ2h0OiAwCisgICAgfQorICB9KSwKKyk7CisKKworZnVuY3Rpb24gUmlnaHRQYW5l bCh7IHNjaGVtYSwgLi4ucHJvcHMgfSkgeworICBsZXQgaW5pdERhdGEgPSAoKSA9PiBuZXcgUHJv bWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CisgICAgdHJ5IHsKKyAgICAgIHJlc29sdmUocHJv cHMuaW5pdFZhbHVlcyk7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgIHJlamVjdChlcnJv cik7CisgICAgfQorICB9KTsKKworICByZXR1cm4gKAorICAgIDxTY2hlbWFWaWV3CisgICAgICBm b3JtVHlwZT17J2RpYWxvZyd9CisgICAgICBnZXRJbml0RGF0YT17aW5pdERhdGF9CisgICAgICB2 aWV3SGVscGVyUHJvcHM9e3sgbW9kZTogJ2VkaXQnIH19CisgICAgICBzY2hlbWE9e3NjaGVtYX0K KyAgICAgIHNob3dGb290ZXI9e2ZhbHNlfQorICAgICAgaXNUYWJWaWV3PXtmYWxzZX0KKyAgICAg IG9uRGF0YUNoYW5nZT17KGlzQ2hhbmdlZCwgY2hhbmdlZERhdGEpID0+IHsKKyAgICAgICAgcHJv cHMub25EYXRhQ2hhbmdlKGNoYW5nZWREYXRhKTsKKyAgICAgIH19CisgICAgLz4KKyAgKTsKK30K KworUmlnaHRQYW5lbC5wcm9wVHlwZXMgPSB7CisgIHNjaGVtYTogUHJvcFR5cGVzLm9iamVjdCwK KyAgaW5pdFZhbHVlczogUHJvcFR5cGVzLm9iamVjdCwKKyAgb25EYXRhQ2hhbmdlOiBQcm9wVHlw ZXMuZnVuYworfTsKKworCitleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQcmVmZXJlbmNlc0NvbXBv bmVudCh7IC4uLnByb3BzIH0pIHsKKyAgY29uc3QgY2xhc3NlcyA9IHVzZVN0eWxlcygpOworICBj b25zdCBbZGlzYWJsZVNhdmUsIHNldERpc2FibGVTYXZlXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUp OworICBjb25zdCBwcmVmU2NoZW1hID0gUmVhY3QudXNlUmVmKG5ldyBQcmVmZXJlbmNlc1NjaGVt YSh7fSwgW10pKTsKKyAgY29uc3QgcHJlZkNoYW5nZWREYXRhID0gUmVhY3QudXNlUmVmKHt9KTsK KyAgY29uc3QgW3ByZWZUcmVlRGF0YSwgc2V0UHJlZlRyZWVEYXRhXSA9IFJlYWN0LnVzZVN0YXRl KG51bGwpOworICBjb25zdCBbaW5pdFZhbHVlcywgc2V0SW5pdFZhbHVlc10gPSBSZWFjdC51c2VT dGF0ZSh7fSk7CisgIGNvbnN0IFtsb2FkVHJlZSwgc2V0TG9hZFRyZWVdID0gUmVhY3QudXNlU3Rh dGUoMCk7CisgIGNvbnN0IGFwaSA9IGdldEFwaUluc3RhbmNlKCk7CisKKyAgdXNlRWZmZWN0KCgp ID0+IHsKKyAgICBjb25zdCBwcmVmX3VybCA9IHVybF9mb3IoJ3ByZWZlcmVuY2VzLmluZGV4Jyk7 CisgICAgYXBpKHsKKyAgICAgIHVybDogcHJlZl91cmwsCisgICAgICBtZXRob2Q6ICdHRVQnLAor ICAgIH0pLnRoZW4oKHJlcykgPT4geworICAgICAgbGV0IHByZWZlcmVuY2VzRGF0YSA9IFtdOwor ICAgICAgbGV0IHByZWZlcmVuY2VzVHJlZURhdGEgPSBbXTsKKyAgICAgIGxldCBwcmVmZXJlbmNl c1ZhbHVlcyA9IHt9OworICAgICAgcmVzLmRhdGEuZm9yRWFjaChub2RlID0+IHsKKyAgICAgICAg bGV0IGlkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMCk7CisgICAgICAgIGxldCB0 ZGF0YSA9IHsKKyAgICAgICAgICAnaWQnOiBpZC50b1N0cmluZygpLAorICAgICAgICAgICdsYWJl bCc6IG5vZGUubGFiZWwsCisgICAgICAgICAgJ19sYWJlbCc6IG5vZGUubGFiZWwsCisgICAgICAg ICAgJ25hbWUnOiBub2RlLmxhYmVsLAorICAgICAgICAgICdpY29uJzogJycsCisgICAgICAgICAg J2lub2RlJzogdHJ1ZSwKKyAgICAgICAgICAndHlwZSc6IDIsCisgICAgICAgICAgJ190eXBlJzog bm9kZS5sYWJlbC50b0xvd2VyQ2FzZSgpLAorICAgICAgICAgICdfaWQnOiBpZCwKKyAgICAgICAg ICAnX3BpZCc6IG51bGwsCisgICAgICAgICAgJ2NoaWxkcmVuTm9kZXMnOiBbXSwKKyAgICAgICAg ICAnZXhwYW5kZWQnOiB0cnVlLAorICAgICAgICB9OworCisgICAgICAgIG5vZGUuY2hpbGRyZW4u Zm9yRWFjaChzdWJOb2RlID0+IHsKKyAgICAgICAgICBsZXQgc2lkID0gTWF0aC5mbG9vcihNYXRo LnJhbmRvbSgpICogMTAwMCk7CisgICAgICAgICAgbGV0IG5vZGVEYXRhID0geworICAgICAgICAg ICAgJ2lkJzogc2lkLnRvU3RyaW5nKCksCisgICAgICAgICAgICAnbGFiZWwnOiBzdWJOb2RlLmxh YmVsLAorICAgICAgICAgICAgJ19sYWJlbCc6IHN1Yk5vZGUubGFiZWwsCisgICAgICAgICAgICAn bmFtZSc6IHN1Yk5vZGUubGFiZWwsCisgICAgICAgICAgICAnaWNvbic6ICcnLAorICAgICAgICAg ICAgJ2lub2RlJzogZmFsc2UsCisgICAgICAgICAgICAnX3R5cGUnOiBzdWJOb2RlLmxhYmVsLnRv TG93ZXJDYXNlKCksCisgICAgICAgICAgICAnX2lkJzogc2lkLAorICAgICAgICAgICAgJ19waWQn OiBub2RlLmlkLAorICAgICAgICAgICAgJ3R5cGUnOiAxLAorICAgICAgICAgICAgJ2V4cGFuZGVk JzogZmFsc2UsCisgICAgICAgICAgfTsKKyAgICAgICAgICBzdWJOb2RlLnByZWZlcmVuY2VzLmZv ckVhY2goKGVsZW1lbnQpID0+IHsKKyAgICAgICAgICAgIGxldCBhZGROb3RlID0gZmFsc2U7Cisg ICAgICAgICAgICBsZXQgbm90ZSA9ICcnOworICAgICAgICAgICAgbGV0IHR5cGUgPSBnZXRDb250 cm9sTWFwcGVkRm9yVHlwZShlbGVtZW50LnR5cGUpOworCisgICAgICAgICAgICBpZiAodHlwZSA9 PT0gJ2ZpbGUnKSB7CisgICAgICAgICAgICAgIGFkZE5vdGUgPSB0cnVlOworICAgICAgICAgICAg ICBub3RlID0gZ2V0dGV4dCgnRW50ZXIgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgcHNxbCwg cGdfZHVtcCwgcGdfZHVtcGFsbCwgYW5kIHBnX3Jlc3RvcmUgdXRpbGl0aWVzIGNhbiBiZSBmb3Vu ZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZGF0YWJhc2Ugc2VydmVyIHZlcnNpb24uICBUaGUgZGVm YXVsdCBwYXRoIHdpbGwgYmUgdXNlZCBmb3Igc2VydmVyIHZlcnNpb25zIHRoYXQgZG8gbm90IGhh dmUgYSAgcGF0aCBzcGVjaWZpZWQuJyk7CisgICAgICAgICAgICAgIGVsZW1lbnQudHlwZSA9ICdj b2xsZWN0aW9uJzsKKyAgICAgICAgICAgICAgZWxlbWVudC5zY2hlbWEgPSBnZXRCaW5hcnlQYXRo U2NoZW1hKCk7CisgICAgICAgICAgICAgIGVsZW1lbnQuY2FuQWRkID0gZmFsc2U7CisgICAgICAg ICAgICAgIGVsZW1lbnQuY2FuRGVsZXRlID0gZmFsc2U7CisgICAgICAgICAgICAgIGVsZW1lbnQu Y2FuRWRpdCA9IGZhbHNlOworICAgICAgICAgICAgICBlbGVtZW50LmVkaXRhYmxlID0gZmFsc2U7 CisgICAgICAgICAgICAgIHByZWZlcmVuY2VzVmFsdWVzW2VsZW1lbnQuaWRdID0gSlNPTi5wYXJz ZShlbGVtZW50LnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHR5 cGUgPT0gJ3NlbGVjdCcpIHsKKyAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY29udHJvbF9wcm9w cyAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5jb250cm9sUHJvcHMg PSBlbGVtZW50LmNvbnRyb2xfcHJvcHM7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgZWxlbWVudC5jb250cm9sUHJvcHMgPSB7fTsKKyAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICBwcmVmZXJlbmNlc1ZhbHVlc1tlbGVtZW50LmlkXSA9IGVsZW1lbnQudmFsdWU7 CisgICAgICAgICAgICAgIGVsZW1lbnQudHlwZSA9IHR5cGU7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBlbHNlIGlmICh0eXBlID09PSAna2V5Ym9hcmRTaG9ydGN1dCcpIHsKKyAgICAgICAg ICAgICAgZWxlbWVudC50eXBlID0gJ2tleWJvYXJkU2hvcnRjdXQnOworICAgICAgICAgICAgICBl bGVtZW50LmNhbkFkZCA9IGZhbHNlOworICAgICAgICAgICAgICBlbGVtZW50LmNhbkRlbGV0ZSA9 IGZhbHNlOworICAgICAgICAgICAgICBlbGVtZW50LmNhbkVkaXQgPSBmYWxzZTsKKyAgICAgICAg ICAgICAgZWxlbWVudC5lZGl0YWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICBpZiAocGdBZG1p bi5Ccm93c2VyLmdldF9wcmVmZXJlbmNlKG5vZGUubGFiZWwudG9Mb3dlckNhc2UoKSwgZWxlbWVu dC5uYW1lKT8udmFsdWUpIHsKKyAgICAgICAgICAgICAgICBsZXQgdGVtcCA9IHBnQWRtaW4uQnJv d3Nlci5nZXRfcHJlZmVyZW5jZShub2RlLmxhYmVsLnRvTG93ZXJDYXNlKCksIGVsZW1lbnQubmFt ZSkudmFsdWU7CisgICAgICAgICAgICAgICAgcHJlZmVyZW5jZXNWYWx1ZXNbZWxlbWVudC5pZF0g PSB0ZW1wOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByZWZlcmVu Y2VzVmFsdWVzW2VsZW1lbnQuaWRdID0gZWxlbWVudC52YWx1ZTsKKyAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICBkZWxldGUgZWxlbWVudC52YWx1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBp Zih0eXBlID09PSAndGhyZXNob2xkJykgeworICAgICAgICAgICAgICBlbGVtZW50LnR5cGUgPSAn dGhyZXNob2xkJzsKKworICAgICAgICAgICAgICBsZXQgX3ZhbCA9IGVsZW1lbnQudmFsdWUuc3Bs aXQoJ3wnKTsKKyAgICAgICAgICAgICAgcHJlZmVyZW5jZXNWYWx1ZXNbZWxlbWVudC5pZF0gPSB7 J3dhcm5pbmcnOiBfdmFsWzBdLCAnYWxlcnQnOiBfdmFsWzFdfTsKKyAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgIGVsZW1lbnQudHlwZSA9IHR5cGU7CisgICAgICAgICAgICAgIHBy ZWZlcmVuY2VzVmFsdWVzW2VsZW1lbnQuaWRdID0gZWxlbWVudC52YWx1ZTsKKyAgICAgICAgICAg IH0KKworICAgICAgICAgICAgZGVsZXRlIGVsZW1lbnQudmFsdWU7CisgICAgICAgICAgICBlbGVt ZW50LnZpc2libGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGVsZW1lbnQuaGVscE1lc3NhZ2UgPSBl bGVtZW50Py5oZWxwX3N0ciA/IGVsZW1lbnQuaGVscF9zdHIgOiBudWxsOworICAgICAgICAgICAg cHJlZmVyZW5jZXNEYXRhLnB1c2goZWxlbWVudCk7CisKKyAgICAgICAgICAgIGlmIChhZGROb3Rl KSB7CisgICAgICAgICAgICAgIHByZWZlcmVuY2VzRGF0YS5wdXNoKAorICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgIGlkOiAnbm90ZV8nICsgZWxlbWVudC5pZCwKKyAgICAgICAg ICAgICAgICAgIHR5cGU6ICdub3RlJywgdGV4dDogWworICAgICAgICAgICAgICAgICAgICAnPHVs PjxsaT4nLAorICAgICAgICAgICAgICAgICAgICBnZXR0ZXh0KG5vdGUpLAorICAgICAgICAgICAg ICAgICAgICAnPC9saT48L3VsPicsCisgICAgICAgICAgICAgICAgICBdLmpvaW4oJycpLAorICAg ICAgICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UsCisgICAgICAgICAgICAgICAgICAncGFyZW50 SWQnOiBub2RlRGF0YVsnaWQnXQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICk7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbGVtZW50LnBhcmVudElkID0gbm9kZURhdGFb J2lkJ107CisgICAgICAgICAgfSk7CisgICAgICAgICAgdGRhdGFbJ2NoaWxkcmVuTm9kZXMnXS5w dXNoKG5vZGVEYXRhKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gc2V0IFByZWZlcmVuY2Vz IFRyZWUgZGF0YQorICAgICAgICBwcmVmZXJlbmNlc1RyZWVEYXRhLnB1c2godGRhdGEpOworCisg ICAgICB9KTsKKyAgICAgIHNldFByZWZUcmVlRGF0YShwcmVmZXJlbmNlc1RyZWVEYXRhKTsKKyAg ICAgIHNldEluaXRWYWx1ZXMocHJlZmVyZW5jZXNWYWx1ZXMpOworICAgICAgLy8gc2V0IFByZWZl cmVuY2VzIHNjaGVtYQorICAgICAgcHJlZlNjaGVtYS5jdXJyZW50ID0gbmV3IFByZWZlcmVuY2Vz U2NoZW1hKHByZWZlcmVuY2VzVmFsdWVzLCBwcmVmZXJlbmNlc0RhdGEpOworICAgIH0pLmNhdGNo KChlcnIpID0+IHsKKyAgICAgIE5vdGlmeS5hbGVydChlcnIucmVzcG9uc2UuZGF0YSk7CisgICAg fSk7CisgIH0sIFtdKTsKKworICBmdW5jdGlvbiBnZXRDb250cm9sTWFwcGVkRm9yVHlwZSh0eXBl KSB7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSAndGV4dCc6CisgICAgICByZXR1cm4g J3RleHQnOworICAgIGNhc2UgJ2lucHV0JzoKKyAgICAgIHJldHVybiAndGV4dCc7CisgICAgY2Fz ZSAnYm9vbGVhbic6CisgICAgICByZXR1cm4gJ3N3aXRjaCc7CisgICAgY2FzZSAnbm9kZSc6Cisg ICAgICByZXR1cm4gJ3N3aXRjaCc7CisgICAgY2FzZSAnaW50ZWdlcic6CisgICAgICByZXR1cm4g J251bWVyaWMnOworICAgIGNhc2UgJ251bWVyaWMnOgorICAgICAgcmV0dXJuICdudW1lcmljJzsK KyAgICBjYXNlICdkYXRlJzoKKyAgICAgIHJldHVybiAnZGF0ZXRpbWVwaWNrZXInOworICAgIGNh c2UgJ2RhdGV0aW1lJzoKKyAgICAgIHJldHVybiAnZGF0ZXRpbWVwaWNrZXInOworICAgIGNhc2Ug J29wdGlvbnMnOgorICAgICAgcmV0dXJuICdzZWxlY3QnOworICAgIGNhc2UgJ3NlbGVjdCc6Cisg ICAgICByZXR1cm4gJ3NlbGVjdCc7CisgICAgY2FzZSAnc2VsZWN0Mic6CisgICAgICByZXR1cm4g J3NlbGVjdCc7CisgICAgY2FzZSAnbXVsdGlsaW5lJzoKKyAgICAgIHJldHVybiAnbXVsdGlsaW5l JzsKKyAgICBjYXNlICdzd2l0Y2gnOgorICAgICAgcmV0dXJuICdzd2l0Y2gnOworICAgIGNhc2Ug J2tleWJvYXJkc2hvcnRjdXQnOgorICAgICAgcmV0dXJuICdrZXlib2FyZFNob3J0Y3V0JzsKKyAg ICBjYXNlICdyYWRpb01vZGVybic6CisgICAgICByZXR1cm4gJ3RvZ2dsZSc7CisgICAgY2FzZSAn c2VsZWN0RmlsZSc6CisgICAgICByZXR1cm4gJ2ZpbGUnOworICAgIGNhc2UgJ3RocmVzaG9sZCc6 CisgICAgICByZXR1cm4gJ3RocmVzaG9sZCc7CisgICAgZGVmYXVsdDoKKyAgICAgIGlmIChjb25z b2xlICYmIGNvbnNvbGUud2FybikgeworICAgICAgICAvLyBXYXJuaW5nIGZvciBkZXZlbG9wZXIg b25seS4KKyAgICAgICAgY29uc29sZS53YXJuKAorICAgICAgICAgICdIbW0uLiBXZSBkb25cJ3Qg a25vdyBob3cgdG8gcmVuZGVyIHRoaXMgdHlwZSAtIFwnXCcnICsgdHlwZSArICdcJyBvZiBjb250 cm9sLicKKyAgICAgICAgKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiAnaW5wdXQnOworICAgIH0K KyAgfQorCisgIGZ1bmN0aW9uIGdldENvbGxlY3Rpb25WYWx1ZShfbWV0YWRhdGEsIHZhbHVlKSB7 CisgICAgbGV0IHZhbCA9IHZhbHVlOworICAgIGlmICh0eXBlb2YgKHZhbHVlKSA9PSAnb2JqZWN0 JykgeworICAgICAgaWYoX21ldGFkYXRhWzBdLnR5cGUgPT0gJ2NvbGxlY3Rpb24nICYmIF9tZXRh ZGF0YVswXS5zY2hlbWEpIHsKKyAgICAgICAgaWYoJ2JpbmFyeVBhdGgnIGluIHZhbHVlLmNoYW5n ZWRbMF0pIHsKKyAgICAgICAgICB2YWwgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZS5jaGFuZ2VkKTsK KyAgICAgICAgfWVsc2UgeworICAgICAgICAgIGxldCBrZXlfdmFsID0geworICAgICAgICAgICAg J2NoYXInOiB2YWx1ZS5jaGFuZ2VkWzBdWydrZXknXSwKKyAgICAgICAgICAgICdrZXlfY29kZSc6 IHZhbHVlLmNoYW5nZWRbMF1bJ2NvZGUnXSwKKyAgICAgICAgICB9OworICAgICAgICAgIHZhbHVl LmNoYW5nZWRbMF1bJ2tleSddID0ga2V5X3ZhbDsKKyAgICAgICAgICB2YWwgPSB2YWx1ZS5jaGFu Z2VkWzBdOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYoJ3dhcm5pbmcnIGluIHZhbHVlKSB7 CisgICAgICAgIHZhbCA9IHZhbHVlWyd3YXJuaW5nJ10gKyAnfCcgKyB2YWx1ZVsnYWxlcnQnXTsK KyAgICAgIH0gZWxzZSBpZih2YWx1ZT8uY2hhbmdlZCAmJiB2YWx1ZS5jaGFuZ2VkLmxlbmd0aCA+ IDApIHsKKyAgICAgICAgdmFsID0gSlNPTi5zdHJpbmdpZnkodmFsdWUuY2hhbmdlZCk7CisgICAg ICB9CisgICAgfQorICAgIHJldHVybiB2YWw7CisgIH0KKworICBmdW5jdGlvbiBzYXZlUHJlZmVy ZW5jZXMoZGF0YSkgeworICAgIGxldCBfZGF0YSA9IFtdOworICAgIGZvciAoY29uc3QgW2tleSwg dmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEuY3VycmVudCkpIHsKKyAgICAgIGxldCBfbWV0 YWRhdGEgPSBwcmVmU2NoZW1hLmN1cnJlbnQuc2NoZW1hRmllbGRzLmZpbHRlcigoZWwpID0+IHsg cmV0dXJuIGVsLmlkID09IGtleTsgfSk7CisgICAgICBpZiAoX21ldGFkYXRhLmxlbmd0aCA+IDAp IHsKKyAgICAgICAgbGV0IHZhbCA9IGdldENvbGxlY3Rpb25WYWx1ZShfbWV0YWRhdGEsIHZhbHVl KTsKKyAgICAgICAgX2RhdGEucHVzaCh7CisgICAgICAgICAgJ2NhdGVnb3J5X2lkJzogX21ldGFk YXRhWzBdWydjaWQnXSwKKyAgICAgICAgICAnaWQnOiBwYXJzZUludChrZXkpLAorICAgICAgICAg ICdtaWQnOiBfbWV0YWRhdGFbMF1bJ21pZCddLAorICAgICAgICAgICduYW1lJzogX21ldGFkYXRh WzBdWyduYW1lJ10sCisgICAgICAgICAgJ3ZhbHVlJzogdmFsLAorICAgICAgICB9KTsKKyAgICAg IH0KKyAgICB9CisKKyAgICBpZiAoX2RhdGEubGVuZ3RoID4gMCkgeworICAgICAgc2F2ZShfZGF0 YSwgZGF0YSk7CisgICAgfQorCisgIH0KKworICBmdW5jdGlvbiBjaGVja1JlZnJlc2hSZXF1aXJl ZChwcmVmLCByZXF1aXJlc19yZWZyZXNoKSB7CisgICAgaWYgKHByZWYubmFtZSA9PSAndGhlbWUn KSB7CisgICAgICByZXF1aXJlc19yZWZyZXNoID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocHJl Zi5uYW1lID09ICd1c2VyX2xhbmd1YWdlJykgeworICAgICAgcmVxdWlyZXNfcmVmcmVzaCA9IHRy dWU7CisgICAgfQorCisgICAgcmV0dXJuIHJlcXVpcmVzX3JlZnJlc2g7CisgIH0KKworICBmdW5j dGlvbiBzYXZlKHNhdmVfZGF0YSwgZGF0YSkgeworICAgIGFwaSh7CisgICAgICB1cmw6IHVybF9m b3IoJ3ByZWZlcmVuY2VzLmluZGV4JyksCisgICAgICBtZXRob2Q6ICdQVVQnLAorICAgICAgZGF0 YTogc2F2ZV9kYXRhLAorICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgbGV0IHJlcXVpcmVzX3Jl ZnJlc2ggPSBmYWxzZTsKKyAgICAgIC8qIEZpbmQgdGhlIG1vZHVsZXMgY2hhbmdlZCAqLworICAg ICAgbGV0IG1vZHVsZXNDaGFuZ2VkID0ge307CisgICAgICBmb3IgKGNvbnN0IFtrZXldIG9mIE9i amVjdC5lbnRyaWVzKGRhdGEuY3VycmVudCkpIHsKKyAgICAgICAgbGV0IHByZWYgPSBwZ0FkbWlu LkJyb3dzZXIuZ2V0X3ByZWZlcmVuY2VfZm9yX2lkKE51bWJlcihrZXkpKTsKKworICAgICAgICBp ZiAocHJlZlsnbmFtZSddID09ICdkeW5hbWljX3RhYnMnKSB7CisgICAgICAgICAgX3NldF9keW5h bWljX3RhYihwZ0FkbWluLkJyb3dzZXIsICFwcmVmWyd2YWx1ZSddKTsKKyAgICAgICAgfQorCisg ICAgICAgIGlmICghbW9kdWxlc0NoYW5nZWRbcHJlZi5tb2R1bGVdKSB7CisgICAgICAgICAgbW9k dWxlc0NoYW5nZWRbcHJlZi5tb2R1bGVdID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJl cXVpcmVzX3JlZnJlc2ggPSBjaGVja1JlZnJlc2hSZXF1aXJlZChwcmVmLCByZXF1aXJlc19yZWZy ZXNoKTsKKworICAgICAgICBpZiAocHJlZi5uYW1lID09ICdoaWRlX3NoYXJlZF9zZXJ2ZXInKSB7 CisgICAgICAgICAgTm90aWZ5LmNvbmZpcm0oCisgICAgICAgICAgICBnZXR0ZXh0KCdCcm93c2Vy IHRyZWUgcmVmcmVzaCByZXF1aXJlZCcpLAorICAgICAgICAgICAgZ2V0dGV4dCgnQSBicm93c2Vy IHRyZWUgcmVmcmVzaCBpcyByZXF1aXJlZC4gRG8geW91IHdpc2ggdG8gcmVmcmVzaCB0aGUgdHJl ZT8nKSwKKyAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgcGdBZG1pbi5C cm93c2VyLnRyZWUuZGVzdHJveSh7CisgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24g KCkgeworICAgICAgICAgICAgICAgICAgcGdBZG1pbi5Ccm93c2VyLmluaXRpYWxpemVCcm93c2Vy VHJlZShwZ0FkbWluLkJyb3dzZXIpOworICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9LAorICAg ICAgICAgICAgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg ICAgICAgIH0sCisgICAgICAgICAgICBnZXR0ZXh0KCdSZWZyZXNoJyksCisgICAgICAgICAgICBn ZXR0ZXh0KCdMYXRlcicpCisgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAg ICBpZiAocmVxdWlyZXNfcmVmcmVzaCkgeworICAgICAgICBOb3RpZnkuY29uZmlybSgKKyAgICAg ICAgICBnZXR0ZXh0KCdSZWZyZXNoIHJlcXVpcmVkJyksCisgICAgICAgICAgZ2V0dGV4dCgnQSBw YWdlIHJlZnJlc2ggaXMgcmVxdWlyZWQgdG8gYXBwbHkgdGhlIHRoZW1lLiBEbyB5b3Ugd2lzaCB0 byByZWZyZXNoIHRoZSBwYWdlIG5vdz8nKSwKKyAgICAgICAgICBmdW5jdGlvbiAoKSB7CisgICAg ICAgICAgICAvKiBJZiB1c2VyIGNsaWNrcyBZZXMgKi8KKyAgICAgICAgICAgIGxvY2F0aW9uLnJl bG9hZCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgfSwKKyAgICAgICAg ICBmdW5jdGlvbiAoKSB7IHByb3BzLmNsb3NlTW9kYWwoKTsgLypwcm9wcy5wYW5lbC5jbG9zZSgp Ki8gfSwKKyAgICAgICAgICBnZXR0ZXh0KCdSZWZyZXNoJyksCisgICAgICAgICAgZ2V0dGV4dCgn TGF0ZXInKQorICAgICAgICApOworICAgICAgfQorICAgICAgLy8gUmVmcmVzaCBwcmVmZXJlbmNl cyBjYWNoZQorICAgICAgcGdBZG1pbi5Ccm93c2VyLmNhY2hlX3ByZWZlcmVuY2VzKG1vZHVsZXND aGFuZ2VkKTsKKyAgICAgIHByb3BzLmNsb3NlTW9kYWwoKTsgLypwcm9wcy5wYW5lbC5jbG9zZSgp Ki8KKyAgICB9KS5jYXRjaCgoZXJyKSA9PiB7CisgICAgICBOb3RpZnkuYWxlcnQoZXJyLnJlc3Bv bnNlLmRhdGEpOworICAgIH0pOworICB9CisKKyAgcmV0dXJuICgKKyAgICA8Qm94IGhlaWdodD17 cHJvcHMuaXNGdWxsU2NyZWVuID8gJzEwMCUnIDogJzUyMHB4J30+CisgICAgICA8Qm94IGNsYXNz TmFtZT17Y2xhc3Nlcy5yb290fT4KKyAgICAgICAgPEJveCBjbGFzc05hbWU9e2Nsc3goY2xhc3Nl cy5wcmVmZXJlbmNlcyl9PgorICAgICAgICAgIDxCb3ggY2xhc3NOYW1lPXtjbHN4KGNsYXNzZXMu dHJlZUNvbnRhaW5lcil9PgorICAgICAgICAgICAge3ByZWZUcmVlRGF0YSAmJgorICAgICAgICAg ICAgPFByZWZlcmVuY2VzVHJlZSBkYXRhPXtwcmVmVHJlZURhdGF9IGdldFNlbGVjdGVkSXRlbT17 KGl0ZW0pID0+IHsKKyAgICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSAxKSB7CisgICAgICAg ICAgICAgICAgcHJlZlNjaGVtYS5jdXJyZW50LnNjaGVtYUZpZWxkcy5mb3JFYWNoKChmaWVsZCkg PT4geworICAgICAgICAgICAgICAgICAgZmllbGQudmlzaWJsZSA9IGZpZWxkLnBhcmVudElkLnRv U3RyaW5nKCkgPT09IGl0ZW0uX21ldGFkYXRhLmRhdGEuaWQudG9TdHJpbmcoKTsKKyAgICAgICAg ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBzZXRMb2FkVHJlZShN YXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKSk7CisgICAgICAgICAgICB9fQorICAgICAg ICAgICAgPjwvUHJlZmVyZW5jZXNUcmVlPgorICAgICAgICAgICAgfQorICAgICAgICAgIDwvQm94 PgorICAgICAgICAgIDxCb3ggY2xhc3NOYW1lPXtjbHN4KGNsYXNzZXMucHJlZmVyZW5jZXNDb250 YWluZXIpfT4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcHJlZlNjaGVtYS5jdXJyZW50 ICYmIGxvYWRUcmVlID4gMCA/CisgICAgICAgICAgICAgICAgPFJpZ2h0UGFuZWwgc2NoZW1hPXtw cmVmU2NoZW1hLmN1cnJlbnR9IGluaXRWYWx1ZXM9e2luaXRWYWx1ZXN9IG9uRGF0YUNoYW5nZT17 KGNoYW5nZWREYXRhKSA9PiB7CisgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjaGFuZ2Vk RGF0YSkubGVuZ3RoID4gMCA/IHNldERpc2FibGVTYXZlKGZhbHNlKSA6IHNldERpc2FibGVTYXZl KHRydWUpOworICAgICAgICAgICAgICAgICAgcHJlZkNoYW5nZWREYXRhLmN1cnJlbnQgPSBjaGFu Z2VkRGF0YTsKKyAgICAgICAgICAgICAgICB9fT48L1JpZ2h0UGFuZWw+CisgICAgICAgICAgICAg ICAgOiA8PjwvPgorICAgICAgICAgICAgfQorICAgICAgICAgIDwvQm94PgorICAgICAgICA8L0Jv eD4KKyAgICAgICAgPEJveCBjbGFzc05hbWU9e2NsYXNzZXMuZm9vdGVyfT4KKyAgICAgICAgICA8 Qm94IGNsYXNzTmFtZT17Y2xhc3Nlcy5hY3Rpb25CdG59IG1hcmdpbkxlZnQ9ImF1dG8iPgorICAg ICAgICAgICAgPERlZmF1bHRCdXR0b24gY2xhc3NOYW1lPXtjbGFzc2VzLmJ1dHRvbk1hcmdpbn0g b25DbGljaz17KCkgPT4geyBwcm9wcy5jbG9zZU1vZGFsKCk7IC8qcHJvcHMucGFuZWwuY2xvc2Uo KSovIH19IHN0YXJ0SWNvbj17PENsb3NlU2hhcnBJY29uIG9uQ2xpY2s9eygpID0+IHsgcHJvcHMu Y2xvc2VNb2RhbCgpOyAvKnByb3BzLnBhbmVsLmNsb3NlKCkqLyB9fSAvPn0+CisgICAgICAgICAg ICAgIHtnZXR0ZXh0KCdDYW5jZWwnKX0KKyAgICAgICAgICAgIDwvRGVmYXVsdEJ1dHRvbj4KKyAg ICAgICAgICAgIDxQcmltYXJ5QnV0dG9uIGNsYXNzTmFtZT17Y2xhc3Nlcy5idXR0b25NYXJnaW59 IHN0YXJ0SWNvbj17PFNhdmVTaGFycEljb24gLz59IGRpc2FibGVkPXtkaXNhYmxlU2F2ZX0gb25D bGljaz17KCkgPT4geyBzYXZlUHJlZmVyZW5jZXMocHJlZkNoYW5nZWREYXRhKTsgfX0+CisgICAg ICAgICAgICAgIHtnZXR0ZXh0KCdTYXZlJyl9CisgICAgICAgICAgICA8L1ByaW1hcnlCdXR0b24+ CisgICAgICAgICAgPC9Cb3g+CisgICAgICAgIDwvQm94PgorICAgICAgICB7LyogPC9Cb3g+ICov fQorCisgICAgICA8L0JveCA+CisgICAgPC9Cb3g+CisgICk7Cit9CisKK1ByZWZlcmVuY2VzQ29t cG9uZW50LnByb3BUeXBlcyA9IHsKKyAgc2NoZW1hOiBQcm9wVHlwZXMuYXJyYXksCisgIGluaXRW YWx1ZXM6IFByb3BUeXBlcy5vYmplY3QsCisgIGNsb3NlTW9kYWw6IFByb3BUeXBlcy5mdW5jLAor ICBpc0Z1bGxTY3JlZW46IFByb3BUeXBlcy5ib29sLAorCit9OwpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vcHJlZmVyZW5jZXMvc3RhdGljL2pzL2NvbXBvbmVudHMvUHJlZmVyZW5jZXNUcmVlLmpz eCBiL3dlYi9wZ2FkbWluL3ByZWZlcmVuY2VzL3N0YXRpYy9qcy9jb21wb25lbnRzL1ByZWZlcmVu Y2VzVHJlZS5qc3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmE1MDIzMjNi Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vcHJlZmVyZW5jZXMvc3RhdGljL2pzL2Nv bXBvbmVudHMvUHJlZmVyZW5jZXNUcmVlLmpzeApAQCAtMCwwICsxLDEzNSBAQAorLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8K Ky8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIw MTMgLSAyMDIyLCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3YXJl IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitp bXBvcnQgXyBmcm9tICdsb2Rhc2gnOworaW1wb3J0IFJlYWN0LCB7IHVzZVJlZiB9IGZyb20gJ3Jl YWN0JzsKK2ltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7CitpbXBvcnQgeyBGaWxl VHJlZUl0ZW0gfSBmcm9tICdwZ2FkbWluNC10cmVlL3NyYy9GaWxlVHJlZUl0ZW0vJzsKK2ltcG9y dCB7IE1hbmFnZVByZWZlcmVuY2VUcmVlTm9kZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9zdGF0aWMv anMvdHJlZS9wcmVmZXJlbmNlX25vZGVzJzsKK2ltcG9ydCB7IFRyZWVNb2RlbCwgRmlsZVRyZWUg fSBmcm9tICdyZWFjdC1hc3Blbic7CitpbXBvcnQgeyBEZWNvcmF0aW9uc01hbmFnZXIsIERlY29y YXRpb24sIFRhcmdldE1hdGNoTW9kZSB9IGZyb20gJ2FzcGVuLWRlY29yYXRpb25zJzsKK2ltcG9y dCBBdXRvU2l6ZXIgZnJvbSAncmVhY3QtdmlydHVhbGl6ZWQtYXV0by1zaXplcic7CitpbXBvcnQg eyBOb3RpZmljYXIgfSBmcm9tICdub3RpZmljYXInOworCitleHBvcnQgY2xhc3MgVHJlZU1vZGVs WCBleHRlbmRzIFRyZWVNb2RlbCB7CisgICAgZGVjb3JhdGlvbnMgPSBudWxsOworICAgIGNvbnN0 cnVjdG9yKGhvc3QsIG1vdW50UGF0aCkgeworICAgICAgc3VwZXIoaG9zdCwgbW91bnRQYXRoKTsK KyAgICAgIHRoaXMuZGVjb3JhdGlvbnMgPSBuZXcgRGVjb3JhdGlvbnNNYW5hZ2VyKHRoaXMucm9v dCk7CisgICAgICB0aGlzLmFjdGl2ZUZpbGVEZWMgPSBuZXcgRGVjb3JhdGlvbignYWN0aXZlJyk7 CisgICAgICB0aGlzLmRlY29yYXRpb25zLmFkZERlY29yYXRpb24odGhpcy5hY3RpdmVGaWxlRGVj KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGdldE1vZGVsKGRhdGEpIHsKKyAgY29uc3QgTU9VTlRf UE9JTlQgPSAnL3ByZWZlcmVuY2VzJzsKKworICAvLyBTZXR1cCBob3N0CisgIGxldCBwdHJlZSA9 IG5ldyBNYW5hZ2VQcmVmZXJlbmNlVHJlZU5vZGVzKGRhdGEpOworCisgIC8vIEluaXQgVHJlZSB3 aXRoIHRoZSBUcmVlIFBhcmVudCBub2RlICcvcHJlZmVyZW5jZXMnCisgIHB0cmVlLmluaXQoTU9V TlRfUE9JTlQpOworICBjb25zdCBob3N0ID0geworICAgIHBhdGhTdHlsZTogJ3VuaXgnLAorICAg IGdldEl0ZW1zOiBhc3luYyAocGF0aCkgPT4geworICAgICAgcmV0dXJuIHB0cmVlLnJlYWROb2Rl KHBhdGgpOworICAgIH0sCisgIH07CisKKyAgcmV0dXJuIG5ldyBUcmVlTW9kZWxYKGhvc3QsIE1P VU5UX1BPSU5UKTsKK30KKworZnVuY3Rpb24gc2V0QWN0aXZlRmlsZShtb2RlbCwgaXRlbSwgaGFu ZGxlciwgZXZlbnRzLCBhY3RpdmVGaWxlKSB7CisgIGxldCBmaWxlSCA9IGl0ZW07CisgIGlmIChm aWxlSCA9PT0gbW9kZWwucm9vdCkgeyByZXR1cm47IH0KKyAgaWYgKF8uaXNVbmRlZmluZWQoYWN0 aXZlRmlsZS5jdXJyZW50KSkgeworICAgIGFjdGl2ZUZpbGUuY3VycmVudCA9IGZpbGVIOworICB9 IGVsc2UgeworICAgIG1vZGVsLmFjdGl2ZUZpbGVEZWMucmVtb3ZlVGFyZ2V0KGFjdGl2ZUZpbGUu Y3VycmVudCk7CisgICAgYWN0aXZlRmlsZS5jdXJyZW50ID0gZmlsZUg7CisgIH0KKworICBpZiAo ZmlsZUgpIHsKKyAgICBtb2RlbC5hY3RpdmVGaWxlRGVjLmFkZFRhcmdldChmaWxlSCwgVGFyZ2V0 TWF0Y2hNb2RlLlNlbGZBbmRDaGlsZHJlbik7CisgIH0KK30KKworZnVuY3Rpb24gdG9nZ2xlRGly ZWN0b3J5KGRpciwgaGFuZGxlcikgeworICBpZiAoZGlyLnR5cGUgPT09IDIpIHsKKyAgICBpZiAo KGRpcikuZXhwYW5kZWQpIHsKKyAgICAgIGhhbmRsZXIuY3VycmVudC5jbG9zZURpcmVjdG9yeShk aXIpOworICAgIH0gZWxzZSB7CisgICAgICBkaXIuX2NoaWxkcmVuID0gbnVsbDsKKyAgICAgIGRp ci5mbGF0dGVuZWRCcmFuY2ggPSBudWxsOworICAgICAgY29uc3QgcmVmID0gRmlsZVRyZWVJdGVt Lml0ZW1JZFRvUmVmTWFwLmdldChkaXIuaWQpOworICAgICAgaWYgKHJlZikgeworICAgICAgICBy ZWYuc3R5bGUuYmFja2dyb3VuZCA9ICdub25lJzsKKyAgICAgICAgY29uc3QgbGFiZWwkID0gcmVm LnF1ZXJ5U2VsZWN0b3IoJ2kuZGlyZWN0b3J5LXRvZ2dsZScpOworICAgICAgICBsYWJlbCQuY2xh c3NMaXN0LmFkZCgnbG9hZGluZycpOworICAgICAgfQorICAgICAgaGFuZGxlci5jdXJyZW50Lm9w ZW5EaXJlY3RvcnkoZGlyKTsKKworICAgICAgaWYgKHJlZikgeworICAgICAgICByZWYuc3R5bGUu YmFja2dyb3VuZCA9ICdub25lJzsKKyAgICAgICAgY29uc3QgbGFiZWwkID0gcmVmLnF1ZXJ5U2Vs ZWN0b3IoJ2kuZGlyZWN0b3J5LXRvZ2dsZScpOworICAgICAgICBpZiAobGFiZWwkKSBsYWJlbCQu Y2xhc3NMaXN0LnJlbW92ZSgnbG9hZGluZycpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCitl eHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQcmVmZXJlbmNlc1RyZWUoeyBkYXRhLCBnZXRTZWxlY3Rl ZEl0ZW0gfSkgeworICBjb25zdCBtb2RlbCA9IHVzZVJlZihnZXRNb2RlbChkYXRhKSk7CisgIGNv bnN0IGludGVybmFsSGFuZGxlciA9IHVzZVJlZigpOworICBjb25zdCBldmVudHMgPSBuZXcgTm90 aWZpY2FyKCk7CisgIGNvbnN0IGFjdGl2ZUZpbGUgPSB1c2VSZWYoKTsKKworICByZXR1cm4gKAor ICAgIDxBdXRvU2l6ZXI+CisgICAgICB7KHsgd2lkdGgsIGhlaWdodCB9KSA9PiAoCisgICAgICAg IDxGaWxlVHJlZQorICAgICAgICAgIG1vZGVsPXttb2RlbC5jdXJyZW50fQorICAgICAgICAgIGhl aWdodD17aGVpZ2h0fQorICAgICAgICAgIHdpZHRoPXt3aWR0aH0KKyAgICAgICAgICBpdGVtSGVp Z2h0PXsyNH0KKyAgICAgICAgICBvblJlYWR5PXsoaGFuZGVsKSA9PiB7CisgICAgICAgICAgICBp bnRlcm5hbEhhbmRsZXIuY3VycmVudCA9IGhhbmRlbDsKKyAgICAgICAgICAgIHJldHVybiB0cnVl OworICAgICAgICAgIH0KKyAgICAgICAgICB9PgorICAgICAgICAgIHsocHJvcHMpID0+IDxGaWxl VHJlZUl0ZW0KKyAgICAgICAgICAgIGV2ZW50cz17ZXZlbnRzfQorICAgICAgICAgICAgaXRlbT17 cHJvcHMuaXRlbX0KKyAgICAgICAgICAgIGl0ZW1UeXBlPXtwcm9wcy5pdGVtVHlwZX0KKyAgICAg ICAgICAgIG9uQ2xpY2s9eyhldiwgaXRlbSwgdHlwZSkgPT4geworICAgICAgICAgICAgICBpZiAo dHlwZSA9PT0gMSkgeworICAgICAgICAgICAgICAgIGdldFNlbGVjdGVkSXRlbShpdGVtKTsKKyAg ICAgICAgICAgICAgICBzZXRBY3RpdmVGaWxlKG1vZGVsLmN1cnJlbnQsIGl0ZW0sIGludGVybmFs SGFuZGxlciwgZXZlbnRzLCBhY3RpdmVGaWxlKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICBpZiAodHlwZSA9PT0gMikgeworICAgICAgICAgICAgICAgIHRvZ2dsZURpcmVjdG9yeShp dGVtLCBpbnRlcm5hbEhhbmRsZXIpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9fQor ICAgICAgICAgICAgb25Eb3VibGVDbGljaz17KCkgPT4gey8qVGhpcyBpcyBpbnRlbnRpb25hbCAo U29uYXJRdWJlKSovfX0KKyAgICAgICAgICAgIGNoYW5nZURpcmVjdG9yeUNvdW50PXsoKSA9PiB7 LypUaGlzIGlzIGludGVudGlvbmFsIChTb25hclF1YmUpKi99fQorICAgICAgICAgICAgZGVjb3Jh dGlvbnM9e21vZGVsLmN1cnJlbnQuZGVjb3JhdGlvbnMuZ2V0RGVjb3JhdGlvbnMocHJvcHMuaXRl bSl9CisgICAgICAgICAgLz59CisgICAgICAgIDwvRmlsZVRyZWU+CisgICAgICApfQorICAgIDwv QXV0b1NpemVyPgorCisgICk7Cit9CisKK1ByZWZlcmVuY2VzVHJlZS5wcm9wVHlwZXMgPSB7Cisg IGRhdGE6IFByb3BUeXBlcy5hcnJheSwKKyAgZ2V0U2VsZWN0ZWRJdGVtOiBQcm9wVHlwZXMuZnVu YywKKyAgaXRlbTogUHJvcFR5cGVzLm9iamVjdCwKKyAgaXRlbVR5cGU6IFByb3BUeXBlcy5udW1i ZXIKK307CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9wcmVmZXJlbmNlcy9zdGF0aWMvanMvaW5k ZXguanMgYi93ZWIvcGdhZG1pbi9wcmVmZXJlbmNlcy9zdGF0aWMvanMvaW5kZXguanMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjI3NjQ2MzNmCi0tLSAvZGV2L251bGwKKysr IGIvd2ViL3BnYWRtaW4vcHJlZmVyZW5jZXMvc3RhdGljL2pzL2luZGV4LmpzCkBAIC0wLDAgKzEs MjEgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8KKy8vCisvLyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisvLworLy8g Q29weXJpZ2h0IChDKSAyMDEzIC0gMjAyMiwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQor Ly8gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNl CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8KK2ltcG9ydCBwZ0FkbWluIGZyb20gJ3NvdXJjZXMvcGdhZG1pbic7CitpbXBv cnQgcGdCcm93c2VyIGZyb20gJ3RvcC9icm93c2VyL3N0YXRpYy9qcy9icm93c2VyJzsKK2ltcG9y dCBQcmVmZXJlbmNlcyBmcm9tICcuL3ByZWZlcmVuY2VzJzsKKworaWYoIXBnQWRtaW4uUHJlZmVy ZW5jZXMpIHsKKyAgcGdBZG1pbi5QcmVmZXJlbmNlcyA9IHt9OworfQorCitwZ0FkbWluLlByZWZl cmVuY2VzID0gUHJlZmVyZW5jZXMuZ2V0SW5zdGFuY2UocGdBZG1pbiwgcGdCcm93c2VyKTsKKwor bW9kdWxlLmV4cG9ydHMgPSB7CisgIFByZWZlcmVuY2VzOiBQcmVmZXJlbmNlcywKK307CmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi9wcmVmZXJlbmNlcy9zdGF0aWMvanMvcHJlZmVyZW5jZXMuanMg Yi93ZWIvcGdhZG1pbi9wcmVmZXJlbmNlcy9zdGF0aWMvanMvcHJlZmVyZW5jZXMuanMKaW5kZXgg ZWJlZjMxY2EuLmRhYzZlMzVlIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9wcmVmZXJlbmNlcy9z dGF0aWMvanMvcHJlZmVyZW5jZXMuanMKKysrIGIvd2ViL3BnYWRtaW4vcHJlZmVyZW5jZXMvc3Rh dGljL2pzL3ByZWZlcmVuY2VzLmpzCkBAIC03LDYyNCArNyw0OCBAQAogLy8KIC8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKK2lt cG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7CitpbXBvcnQgZ2V0dGV4dCBmcm9tICdzb3VyY2VzL2dl dHRleHQnOworaW1wb3J0IFByZWZlcmVuY2VzQ29tcG9uZW50IGZyb20gJy4vY29tcG9uZW50cy9Q cmVmZXJlbmNlc0NvbXBvbmVudCc7CiBpbXBvcnQgTm90aWZ5IGZyb20gJy4uLy4uLy4uL3N0YXRp Yy9qcy9oZWxwZXJzL05vdGlmaWVyJzsKIAotZGVmaW5lKCdwZ2FkbWluLnByZWZlcmVuY2VzJywg WwotICAnc291cmNlcy9nZXR0ZXh0JywgJ3NvdXJjZXMvdXJsX2ZvcicsICdqcXVlcnknLCAndW5k ZXJzY29yZScsICdiYWNrYm9uZScsCi0gICdwZ2FkbWluLmFsZXJ0aWZ5anMnLCAnc291cmNlcy9w Z2FkbWluJywgJ3BnYWRtaW4uYmFja2Zvcm0nLAotICAncGdhZG1pbi5icm93c2VyJywgJ3NvdXJj ZXMvbW9kaWZ5X2FuaW1hdGlvbicsCi0gICd0b29scy9kYXRhZ3JpZC9zdGF0aWMvanMvc2hvd19x dWVyeV90b29sJywKLSAgJ3NvdXJjZXMvdHJlZS9wZ2FkbWluX3RyZWVfc2F2ZV9zdGF0ZScsCi1d LCBmdW5jdGlvbigKLSAgZ2V0dGV4dCwgdXJsX2ZvciwgJCwgXywgQmFja2JvbmUsIEFsZXJ0aWZ5 LCBwZ0FkbWluLCBCYWNrZm9ybSwgcGdCcm93c2VyLAotICBtb2RpZnlBbmltYXRpb24sIHNob3dR dWVyeVRvb2wKLSkgewotICAvLyBUaGlzIGRlZmluZXMgdGhlIFByZWZlcmVuY2UvT3B0aW9ucyBE aWFsb2cgZm9yIHBnQWRtaW4gSVYuCi0KLSAgLyoKLSAgICogSG1tLi4uIHRoaXMgbW9kdWxlIGlz IGFscmVhZHkgYmVlbiBpbml0aWFsaXplZCwgd2UgY2FuIHJlZmVyIHRvIHRoZSBvbGQKLSAgICog b2JqZWN0IGZyb20gaGVyZS4KLSAgICovCi0gIGlmIChwZ0FkbWluLlByZWZlcmVuY2VzKQotICAg IHJldHVybiBwZ0FkbWluLlByZWZlcmVuY2VzOwotCi0gIHBnQWRtaW4uUHJlZmVyZW5jZXMgPSB7 Ci0gICAgaW5pdDogZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkKLSAg ICAgICAgcmV0dXJuOwotCi0gICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgICAg Ly8gRGVjbGFyZSB0aGUgUHJlZmVyZW5jZXMgZGlhbG9nCi0gICAgICBBbGVydGlmeS5kaWFsb2co J3ByZWZlcmVuY2VzRGxnJywgZnVuY3Rpb24oKSB7Ci0KLSAgICAgICAgdmFyIGpUcmVlLCAvLyBW YXJpYWJsZSB0byBjcmVhdGUgdGhlIGFjaS10cmVlCi0gICAgICAgICAgY29udHJvbHMgPSBbXSwg Ly8gS2VlcCB0cmFja2luZyBvZiBhbGwgdGhlIGJhY2tmb3JtIGNvbnRyb2xzCi0gICAgICAgICAg Ly8gY3JlYXRlZCBieSB0aGUgZGlhbG9nLgotICAgICAgICAgIC8vIERpYWxvZyBjb250YWludGVy Ci0gICAgICAgICAgJGNvbnRhaW5lciA9ICQoJzxkaXYgY2xhc3M9XCdwcmVmZXJlbmNlc19kaWFs b2cgZC1mbGV4IGZsZXgtcm93XCc+PC9kaXY+Jyk7Ci0KLQotICAgICAgICAvKgotICAgICAgICAg KiBQcmVmZXJlbmNlIE1vZGVsCi0gICAgICAgICAqCi0gICAgICAgICAqIFRoaXMgbW9kZWwgd2ls bCBiZSB1c2VkIHRvIGtlZXAgdHJhY2tpbmcgb2YgdGhlIGNoYW5nZXMgZG9uZSBmb3IKLSAgICAg ICAgICogYW4gaW5kaXZpZHVhbCBvcHRpb24uCi0gICAgICAgICAqLwotICAgICAgICB2YXIgUHJl ZmVyZW5jZU1vZGVsID0gQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgICBpZEF0dHJp YnV0ZTogJ2lkJywKLSAgICAgICAgICBkZWZhdWx0czogewotICAgICAgICAgICAgaWQ6IHVuZGVm aW5lZCwKLSAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsCi0gICAgICAgICAgfSwKLSAgICAg ICAgfSk7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogUHJlZmVyZW5jZXMgQ29sbGVjdGlvbiBv YmplY3QuCi0gICAgICAgICAqCi0gICAgICAgICAqIFdlIHdpbGwgdXNlIG9ubHkgb25lIGNvbGxl Y3Rpb24gb2JqZWN0IHRvIGtlZXAgdHJhY2sgb2YgYWxsIHRoZQotICAgICAgICAgKiBwcmVmZXJl bmNlcy4KLSAgICAgICAgICovCi0gICAgICAgIHZhciBjaGFuZ2VkID0ge30sCi0gICAgICAgICAg cHJlZmVyZW5jZXMgPSB0aGlzLnByZWZlcmVuY2VzID0gbmV3KEJhY2tib25lLkNvbGxlY3Rpb24u ZXh0ZW5kKHsKLSAgICAgICAgICAgIG1vZGVsOiBQcmVmZXJlbmNlTW9kZWwsCi0gICAgICAgICAg ICB1cmw6IHVybF9mb3IoJ3ByZWZlcmVuY2VzLmluZGV4JyksCi0gICAgICAgICAgICB1cGRhdGVB bGw6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAvLyBXZSB3aWxsIHNlbmQgb25seSB0aGUg bW9kaWZpZWQgZGF0YSB0byB0aGUgc2VydmVyLgotICAgICAgICAgICAgICBmb3IgKHZhciBrZXkg aW4gY2hhbmdlZCkgewotICAgICAgICAgICAgICAgIHRoaXMuZ2V0KGtleSkuc2F2ZSgpOwotICAg ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9 LAotICAgICAgICAgIH0pKShudWxsKTsKLQotICAgICAgICBwcmVmZXJlbmNlcy5vbigncmVzZXQn LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAvLyBSZXNldCB0aGUgY2hhbmdlZCB2YXJpYWJsZXMK LSAgICAgICAgICBjaGFuZ2VkID0ge307Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHByZWZlcmVu Y2VzLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbihtKSB7Ci0gICAgICAgICAgdmFyIGlkID0gbS5nZXQo J2lkJyksCi0gICAgICAgICAgICBkZXBlbmRlbnRzID0gbS5nZXQoJ2RlcGVuZGVudHMnKTsKLSAg ICAgICAgICBpZiAoIShpZCBpbiBjaGFuZ2VkKSkgewotICAgICAgICAgICAgLy8gS2VlcCB0cmFj ayBvZiB0aGUgb3JpZ2luYWwgdmFsdWUKLSAgICAgICAgICAgIGNoYW5nZWRbaWRdID0gbS5fcHJl dmlvdXNBdHRyaWJ1dGVzLnZhbHVlOwotICAgICAgICAgIH0gZWxzZSBpZiAoXy5pc0VxdWFsKG0u Z2V0KCd2YWx1ZScpLCBjaGFuZ2VkW2lkXSkpIHsKLSAgICAgICAgICAgIC8vIFJlbW92ZSB1bmNo YW5nZWQgbW9kZWxzLgotICAgICAgICAgICAgZGVsZXRlIGNoYW5nZWRbaWRdOwotICAgICAgICAg IH0KLQotICAgICAgICAgIC8vIENoZWNrIGRlcGVuZGVudHMgZXhpc3Qgb3Igbm90LiBJZiBleGlz dHMgdGhlbiBjYWxsIGRlcGVuZGVudHNGb3VuZCBmdW5jdGlvbi4KLSAgICAgICAgICBpZiAoIV8u aXNOdWxsKGRlcGVuZGVudHMpICYmIEFycmF5LmlzQXJyYXkoZGVwZW5kZW50cykgJiYgZGVwZW5k ZW50cy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICBkZXBlbmRlbnRzRm91bmQobS5nZXQoJ25h bWUnKSwgbS5nZXQoJ3ZhbHVlJyksIGRlcGVuZGVudHMpOwotICAgICAgICAgIH0KLSAgICAgICAg fSk7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogRnVuY3Rpb246IGRlcGVuZGVudHNGb3VuZAot ICAgICAgICAgKgotICAgICAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIHVzZWQgdG8gaXRlcmF0 ZSB0aHJvdWdoIGFsbCB0aGUgY29udHJvbHMgYW5kCi0gICAgICAgICAqIGRlcGVuZGVudHMuIElm IGZvdW5kIHRoZW4gcGVyZm9ybSB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uLgotICAgICAgICAgKi8K LSAgICAgICAgdmFyIGRlcGVuZGVudHNGb3VuZCA9IGZ1bmN0aW9uKHByZWZfbmFtZSwgcHJlZl92 YWwsIGRlcGVuZGVudHMpIHsKLSAgICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBj b250cm9scyBhbmQgY2hlY2sgdGhlIGRlcGVuZGVudHMKLSAgICAgICAgICBfLmVhY2goY29udHJv bHMsIGZ1bmN0aW9uKGMpIHsKLSAgICAgICAgICAgIGxldCBjdHJsX25hbWUgPSBjLm1vZGVsLmdl dCgnbmFtZScpOwotICAgICAgICAgICAgXy5lYWNoKGRlcGVuZGVudHMsIGZ1bmN0aW9uKGRlcHMp IHsKLSAgICAgICAgICAgICAgaWYgKGN0cmxfbmFtZSA9PT0gZGVwcykgewotICAgICAgICAgICAg ICAgIC8vIENyZWF0ZSBtZXRob2RzIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9ucyBhbmQgY2Fs bCBoZXJlLgotICAgICAgICAgICAgICAgIGVuYWJsZURpc2FibGVNYXhXaWR0aChwcmVmX25hbWUs IHByZWZfdmFsLCBjKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAg ICAgfSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogRnVuY3Rpb246IGVu YWJsZURpc2FibGVNYXhXaWR0aAotICAgICAgICAgKgotICAgICAgICAgKiBUaGlzIG1ldGhvZCB3 aWxsIGJlIHVzZWQgdG8gZW5hYmxlIGFuZCBkaXNhYmxlIE1heGltdW0gV2lkdGggY29udHJvbAot ICAgICAgICAgKi8KLSAgICAgICAgdmFyIGVuYWJsZURpc2FibGVNYXhXaWR0aCA9IGZ1bmN0aW9u KHByZWZfbmFtZSwgcHJlZl92YWwsIGNvbnRyb2wpIHsKLSAgICAgICAgICBpZiAocHJlZl9uYW1l ID09PSAnY29sdW1uX2RhdGFfYXV0b19yZXNpemUnICYmIHByZWZfdmFsID09PSAnYnlfbmFtZScp IHsKLSAgICAgICAgICAgIGNvbnRyb2wuJGVsLmZpbmQoJ2lucHV0JykucHJvcCgnZGlzYWJsZWQn LCB0cnVlKTsKLSAgICAgICAgICAgIGNvbnRyb2wuJGVsLmZpbmQoJ2lucHV0JykudmFsKDApOwot ICAgICAgICAgIH0gZWxzZSBpZiAocHJlZl9uYW1lID09PSAnY29sdW1uX2RhdGFfYXV0b19yZXNp emUnICYmIHByZWZfdmFsID09PSAnYnlfZGF0YScpIHsKLSAgICAgICAgICAgIGNvbnRyb2wuJGVs LmZpbmQoJ2lucHV0JykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7Ci0gICAgICAgICAgfQotICAg ICAgICB9OwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIEZ1bmN0aW9uOiByZW5kZXJQcmVmZXJl bmNlUGFuZWwKLSAgICAgICAgICoKLSAgICAgICAgICogUmVuZGVycyB0aGUgcHJlZmVyZW5jZSBw YW5lbCBpbiB0aGUgY29udGVudCBkaXYgYmFzZWQgb24gdGhlIGdpdmVuCi0gICAgICAgICAqIHBy ZWZlcmVuY2VzLgotICAgICAgICAgKi8KLSAgICAgICAgdmFyIHJlbmRlclByZWZlcmVuY2VQYW5l bCA9IGZ1bmN0aW9uKHByZWZzKSB7Ci0gICAgICAgICAgLyoKLSAgICAgICAgICAgKiBDbGVhciB0 aGUgZXhpc3RpbmcgaHRtbCBpbiB0aGUgcHJlZmVyZW5jZXMgY29udGVudAotICAgICAgICAgICAq LwotICAgICAgICAgIHZhciBjb250ZW50ID0gJGNvbnRhaW5lci5maW5kKCcucHJlZmVyZW5jZXNf Y29udGVudCcpOwotCi0gICAgICAgICAgLyoKLSAgICAgICAgICAgKiBXZSBzaG91bGQgY2xlYW4g dXAgdGhlIGV4aXN0aW5nIGNvbnRyb2xzLgotICAgICAgICAgICAqLwotICAgICAgICAgIGlmIChj b250cm9scykgewotICAgICAgICAgICAgXy5lYWNoKGNvbnRyb2xzLCBmdW5jdGlvbihjKSB7Ci0g ICAgICAgICAgICAgIGlmICgnJHNlbCcgaW4gYykgewotICAgICAgICAgICAgICAgIGlmIChjLiRz ZWwuZGF0YSgnc2VsZWN0MicpLmlzT3BlbigpKSBjLiRzZWwuZGF0YSgnc2VsZWN0MicpLmNsb3Nl KCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgYy5yZW1vdmUoKTsKLSAgICAgICAg ICAgIH0pOwotICAgICAgICAgIH0KLSAgICAgICAgICBjb250ZW50LmVtcHR5KCk7Ci0gICAgICAg ICAgY29udHJvbHMgPSBbXTsKLQotICAgICAgICAgIC8qCi0gICAgICAgICAgICogV2Ugd2lsbCBj cmVhdGUgbmV3IHNldCBvZiBjb250cm9scyBhbmQgcmVuZGVyIGl0IGJhc2VkIG9uIHRoZQotICAg ICAgICAgICAqIGxpc3Qgb2YgcHJlZmVyZW5jZXMgdXNpbmcgdGhlIEJhY2tmb3JtIEZpZWxkLCBD b250cm9sLgotICAgICAgICAgICAqLwotICAgICAgICAgIF8uZWFjaChwcmVmcywgZnVuY3Rpb24o cCkgewotCi0gICAgICAgICAgICB2YXIgbSA9IHByZWZlcmVuY2VzLmdldChwLmlkKTsKLSAgICAg ICAgICAgIG0uZXJyb3JNb2RlbCA9IG5ldyBCYWNrYm9uZS5Nb2RlbCgpOwotICAgICAgICAgICAg dmFyIGYgPSBuZXcgQmFja2Zvcm0uRmllbGQoCi0gICAgICAgICAgICAgICAgXy5leHRlbmQoe30s IHAsIHsKLSAgICAgICAgICAgICAgICAgIGlkOiAndmFsdWUnLAotICAgICAgICAgICAgICAgICAg bmFtZTogJ3ZhbHVlJywKLSAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICApLAotICAg ICAgICAgICAgICBjbnRyID0gbmV3KGYuZ2V0KCdjb250cm9sJykpKHsKLSAgICAgICAgICAgICAg ICBmaWVsZDogZiwKLSAgICAgICAgICAgICAgICBtb2RlbDogbSwKLSAgICAgICAgICAgICAgfSk7 Ci0gICAgICAgICAgICBjb250ZW50LmFwcGVuZChjbnRyLnJlbmRlcigpLiRlbCk7Ci0KLSAgICAg ICAgICAgIC8vIFdlIHdpbGwga2VlcCB0cmFjayBvZiBhbGwgdGhlIGNvbnRyb2xzIHJlbmRlcmVk IGF0IHRoZQotICAgICAgICAgICAgLy8gbW9tZW50LgotICAgICAgICAgICAgY29udHJvbHMucHVz aChjbnRyKTsKLSAgICAgICAgICB9KTsKLQotICAgICAgICAgIC8qIEl0ZXJhdGUgdGhyb3VnaCBh bGwgcHJlZmVyZW5jZXMgYW5kIGNoZWNrIGlmIGRlcGVuZGVudHMgZm91bmQuCi0gICAgICAgICAg ICogSWYgZm91bmQgdGhlbiBjYWxsIHRoZSBkZXBlbmRlbnRzRm91bmQgbWV0aG9kCi0gICAgICAg ICAgICovCi0gICAgICAgICAgXy5lYWNoKHByZWZzLCBmdW5jdGlvbihwKSB7Ci0gICAgICAgICAg ICBsZXQgbSA9IHByZWZlcmVuY2VzLmdldChwLmlkKTsKLSAgICAgICAgICAgIGxldCBkZXBlbmRl bnRzID0gbS5nZXQoJ2RlcGVuZGVudHMnKTsKLSAgICAgICAgICAgIGlmICghXy5pc051bGwoZGVw ZW5kZW50cykgJiYgQXJyYXkuaXNBcnJheShkZXBlbmRlbnRzKSAmJiBkZXBlbmRlbnRzLmxlbmd0 aCA+IDApIHsKLSAgICAgICAgICAgICAgZGVwZW5kZW50c0ZvdW5kKG0uZ2V0KCduYW1lJyksIG0u Z2V0KCd2YWx1ZScpLCBkZXBlbmRlbnRzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9KTsK LSAgICAgICAgfTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBGdW5jdGlvbjogZGlhbG9nQ29u dGVudENsZWFudXAKLSAgICAgICAgICoKLSAgICAgICAgICogRG8gdGhlIGRpYWxvZyBjb250YWlu ZXIgY2xlYW51cCBvbiBvcGVubmluZy4KLSAgICAgICAgICovCi0KLSAgICAgICAgdmFyIGRpYWxv Z0NvbnRlbnRDbGVhbnVwID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAvLyBSZW1vdmUgdGhl IGV4aXN0aW5nIHByZWZlcmVuY2VzCi0gICAgICAgICAgICBpZiAoIWpUcmVlKQotICAgICAgICAg ICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBSZW1vdmUgdGhl IGFjaS10cmVlIChtYWlubHkgdG8gcmVtb3ZlIHRoZSBqcXVlcnkgb2JqZWN0IG9mCi0gICAgICAg ICAgICAgKiBhY2lUcmVlIGZyb20gdGhlIHN5c3RlbSBmb3IgdGhpcyBjb250YWluZXIpLgotICAg ICAgICAgICAgICovCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICBqVHJlZS5hY2lU cmVlKCdkZXN0cm95Jyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChleCkgewotICAgICAgICAgICAg ICAvLyBTb21ldGltZXMgLSBpdCBmYWlscyB0byBkZXN0cm95IHRoZSB0cmVlIHByb3Blcmx5IGFu ZCB0aHJvd3MKLSAgICAgICAgICAgICAgLy8gZXhjZXB0aW9uLgotICAgICAgICAgICAgICBjb25z b2xlLndhcm4oZXguc3RhY2sgfHwgZXgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgalRy ZWUub2ZmKCdhY2l0cmVlJywgdHJlZUV2ZW50SGFuZGxlcik7Ci0KLSAgICAgICAgICAgIC8vIFdl IG5lZWQgdG8gcmVzZXQgdGhlIGRhdGEgZnJvbSB0aGUgcHJlZmVyZW5jZXMgdG9vCi0gICAgICAg ICAgICBwcmVmZXJlbmNlcy5yZXNldCgpOwotCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAg ICogQ2xlYW4gdXAgdGhlIGV4aXN0aW5nIGNvbnRyb2xzLgotICAgICAgICAgICAgICovCi0gICAg ICAgICAgICBpZiAoY29udHJvbHMpIHsKLSAgICAgICAgICAgICAgXy5lYWNoKGNvbnRyb2xzLCBm dW5jdGlvbihjKSB7Ci0gICAgICAgICAgICAgICAgYy5yZW1vdmUoKTsKLSAgICAgICAgICAgICAg fSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250cm9scyA9IFtdOwotCi0gICAgICAg ICAgICAvLyBSZW1vdmUgYWxsIHRoZSBvYmplY3RzIG5vdy4KLSAgICAgICAgICAgICRjb250YWlu ZXIuZW1wdHkoKTsKLSAgICAgICAgICB9LAotICAgICAgICAgIC8qCi0gICAgICAgICAgICogRnVu Y3Rpb246IHNlbGVjdEZpcnN0Q2F0ZWdvcnkKLSAgICAgICAgICAgKgotICAgICAgICAgICAqIFdo ZW5ldmVyIGEgdXNlciBzZWxlY3QgYSBtb2R1bGUgaW5zdGVhZCBvZiBhIGNhdGVnb3J5LCB3ZSBz aG91bGQKLSAgICAgICAgICAgKiBzZWxlY3QgdGhlIGZpcnN0IGNhdGVncm95IG9mIGl0LgotICAg ICAgICAgICAqLwotICAgICAgICAgIHNlbGVjdEZpcnN0Q2F0ZWdvcnkgPSBmdW5jdGlvbihhcGks IGl0ZW0pIHsKLSAgICAgICAgICAgIHZhciBkYXRhID0gaXRlbSA/IGFwaS5pdGVtRGF0YShpdGVt KSA6IG51bGw7Ci0KLSAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEucHJlZmVyZW5jZXMpIHsK LSAgICAgICAgICAgICAgYXBpLnNlbGVjdChpdGVtKTsKLSAgICAgICAgICAgICAgcmV0dXJuOwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgaXRlbSA9IGFwaS5maXJzdChpdGVtKTsKLSAgICAg ICAgICAgIHNlbGVjdEZpcnN0Q2F0ZWdvcnkoYXBpLCBpdGVtKTsKLSAgICAgICAgICB9LAotICAg ICAgICAgIC8qCi0gICAgICAgICAgICogQSBtYXAgb24gaG93IHRvIGNyZWF0ZSBjb250cm9scyBm b3IgZWFjaCBkYXRhdHlwZSBpbiBwcmVmZXJlbmNlcwotICAgICAgICAgICAqIGRpYWxvZy4KLSAg ICAgICAgICAgKi8KLSAgICAgICAgICBnZXRDb250cm9sTWFwcGVkRm9yVHlwZSA9IGZ1bmN0aW9u KHApIHsKLSAgICAgICAgICAgIHN3aXRjaCAocC50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlICd0 ZXh0JzoKLSAgICAgICAgICAgICAgcmV0dXJuICdpbnB1dCc7Ci0gICAgICAgICAgICBjYXNlICdi b29sZWFuJzoKLSAgICAgICAgICAgICAgcC5vcHRpb25zID0gewotICAgICAgICAgICAgICAgIG9u VGV4dDogZ2V0dGV4dCgnVHJ1ZScpLAotICAgICAgICAgICAgICAgIG9mZlRleHQ6IGdldHRleHQo J0ZhbHNlJyksCi0gICAgICAgICAgICAgICAgb25Db2xvcjogJ3N1Y2Nlc3MnLAotICAgICAgICAg ICAgICAgIG9mZkNvbG9yOiAndGVybmFyeScsCi0gICAgICAgICAgICAgICAgc2l6ZTogJ21pbmkn LAotICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICByZXR1cm4gJ3N3aXRjaCc7Ci0gICAg ICAgICAgICBjYXNlICdub2RlJzoKLSAgICAgICAgICAgICAgcC5vcHRpb25zID0gewotICAgICAg ICAgICAgICAgIG9uVGV4dDogZ2V0dGV4dCgnU2hvdycpLAotICAgICAgICAgICAgICAgIG9mZlRl eHQ6IGdldHRleHQoJ0hpZGUnKSwKLSAgICAgICAgICAgICAgICBvbkNvbG9yOiAnc3VjY2Vzcycs Ci0gICAgICAgICAgICAgICAgb2ZmQ29sb3I6ICd0ZXJuYXJ5JywKLSAgICAgICAgICAgICAgICBz aXplOiAnbWluaScsCi0gICAgICAgICAgICAgICAgd2lkdGg6ICc1NicsCi0gICAgICAgICAgICAg IH07Ci0gICAgICAgICAgICAgIHJldHVybiAnc3dpdGNoJzsKLSAgICAgICAgICAgIGNhc2UgJ2lu dGVnZXInOgotICAgICAgICAgICAgICByZXR1cm4gJ251bWVyaWMnOwotICAgICAgICAgICAgY2Fz ZSAnbnVtZXJpYyc6Ci0gICAgICAgICAgICAgIHJldHVybiAnbnVtZXJpYyc7Ci0gICAgICAgICAg ICBjYXNlICdkYXRlJzoKLSAgICAgICAgICAgICAgcmV0dXJuICdkYXRlcGlja2VyJzsKLSAgICAg ICAgICAgIGNhc2UgJ2RhdGV0aW1lJzoKLSAgICAgICAgICAgICAgcmV0dXJuICdkYXRldGltZXBp Y2tlcic7Ci0gICAgICAgICAgICBjYXNlICdvcHRpb25zJzoKLSAgICAgICAgICAgICAgdmFyIG9w dHMgPSBbXSwKLSAgICAgICAgICAgICAgICBoYXNfdmFsdWUgPSBmYWxzZTsKLSAgICAgICAgICAg ICAgICAvLyBDb252ZXJ0IHRoZSBhcnJheSB0byBTZWxlY3RDb250cm9sIHVuZGVyc3RhbmRhYmxl IG9wdGlvbnMuCi0gICAgICAgICAgICAgIF8uZWFjaChwLm9wdGlvbnMsIGZ1bmN0aW9uKG8pIHsK LSAgICAgICAgICAgICAgICBpZiAoJ2xhYmVsJyBpbiBvICYmICd2YWx1ZScgaW4gbykgewotICAg ICAgICAgICAgICAgICAgbGV0IHB1c2hfdmFyID0gewotICAgICAgICAgICAgICAgICAgICAnbGFi ZWwnOiBvLmxhYmVsLAotICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiBvLnZhbHVlLAotICAg ICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgIHB1c2hfdmFyWydsYWJlbCddID0g by5sYWJlbDsKLSAgICAgICAgICAgICAgICAgIHB1c2hfdmFyWyd2YWx1ZSddID0gby52YWx1ZTsK LQotICAgICAgICAgICAgICAgICAgaWYoJ3ByZXZpZXdfc3JjJyBpbiBvKSB7Ci0gICAgICAgICAg ICAgICAgICAgIHB1c2hfdmFyWydwcmV2aWV3X3NyYyddID0gby5wcmV2aWV3X3NyYzsKLSAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIG9wdHMucHVzaChwdXNoX3Zhcik7Ci0g ICAgICAgICAgICAgICAgICBpZiAoby52YWx1ZSA9PSBwLnZhbHVlKQotICAgICAgICAgICAgICAg ICAgICBoYXNfdmFsdWUgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICAgICAgICBvcHRzLnB1c2goewotICAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiBvLAot ICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiBvLAotICAgICAgICAgICAgICAgICAgfSk7Ci0g ICAgICAgICAgICAgICAgICBpZiAobyA9PSBwLnZhbHVlKQotICAgICAgICAgICAgICAgICAgICBo YXNfdmFsdWUgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSk7Ci0g ICAgICAgICAgICAgIGlmIChwLnNlbGVjdDIgJiYgcC5zZWxlY3QyLnRhZ3MgPT0gdHJ1ZSAmJiBw LnZhbHVlICYmIGhhc192YWx1ZSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIG9wdHMucHVz aCh7Ci0gICAgICAgICAgICAgICAgICAnbGFiZWwnOiBwLnZhbHVlLAotICAgICAgICAgICAgICAg ICAgJ3ZhbHVlJzogcC52YWx1ZSwKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICBwLm9wdGlvbnMgPSBvcHRzOwotICAgICAgICAgICAgICByZXR1cm4g J3NlbGVjdDInOwotICAgICAgICAgICAgY2FzZSAnc2VsZWN0Mic6Ci0gICAgICAgICAgICAgIHZh ciBzZWxlY3Rfb3B0cyA9IFtdOwotICAgICAgICAgICAgICBfLmVhY2gocC5vcHRpb25zLCBmdW5j dGlvbihvKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCdsYWJlbCcgaW4gbyAmJiAndmFsdWUnIGlu IG8pIHsKLSAgICAgICAgICAgICAgICAgIGxldCBwdXNoX3ZhciA9IHsKLSAgICAgICAgICAgICAg ICAgICAgJ2xhYmVsJzogby5sYWJlbCwKLSAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogby52 YWx1ZSwKLSAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICBwdXNoX3Zhclsn bGFiZWwnXSA9IG8ubGFiZWw7Ci0gICAgICAgICAgICAgICAgICBwdXNoX3ZhclsndmFsdWUnXSA9 IG8udmFsdWU7Ci0KLSAgICAgICAgICAgICAgICAgIGlmKCdwcmV2aWV3X3NyYycgaW4gbykgewot ICAgICAgICAgICAgICAgICAgICBwdXNoX3ZhclsncHJldmlld19zcmMnXSA9IG8ucHJldmlld19z cmM7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBzZWxlY3Rfb3B0cy5w dXNoKHB1c2hfdmFyKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg ICAgc2VsZWN0X29wdHMucHVzaCh7Ci0gICAgICAgICAgICAgICAgICAgICdsYWJlbCc6IG8sCi0g ICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IG8sCi0gICAgICAgICAgICAgICAgICB9KTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHAub3B0 aW9ucyA9IHNlbGVjdF9vcHRzOwotICAgICAgICAgICAgICByZXR1cm4gJ3NlbGVjdDInOwotCi0g ICAgICAgICAgICBjYXNlICdtdWx0aWxpbmUnOgotICAgICAgICAgICAgICByZXR1cm4gJ3RleHRh cmVhJzsKLSAgICAgICAgICAgIGNhc2UgJ3N3aXRjaCc6Ci0gICAgICAgICAgICAgIHJldHVybiAn c3dpdGNoJzsKLSAgICAgICAgICAgIGNhc2UgJ2tleWJvYXJkc2hvcnRjdXQnOgotICAgICAgICAg ICAgICByZXR1cm4gJ2tleWJvYXJkU2hvcnRjdXQnOwotICAgICAgICAgICAgY2FzZSAncmFkaW9N b2Rlcm4nOgotICAgICAgICAgICAgICByZXR1cm4gJ3JhZGlvTW9kZXJuJzsKLSAgICAgICAgICAg IGNhc2UgJ3NlbGVjdEZpbGUnOgotICAgICAgICAgICAgICByZXR1cm4gJ2JpbmFyeS1wYXRocy1n cmlkJzsKLSAgICAgICAgICAgIGNhc2UgJ3RocmVzaG9sZCc6Ci0gICAgICAgICAgICAgIHAud2Fy bmluZ19sYWJlbCA9IGdldHRleHQoJ1dhcm5pbmcnKTsKLSAgICAgICAgICAgICAgcC5hbGVydF9s YWJlbCA9IGdldHRleHQoJ0FsZXJ0Jyk7Ci0gICAgICAgICAgICAgIHAudW5pdCA9IGdldHRleHQo JyhpbiBtaW51dGVzKScpOwotICAgICAgICAgICAgICByZXR1cm4gJ3RocmVzaG9sZCc7Ci0gICAg ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndh cm4pIHsKLSAgICAgICAgICAgICAgICAvLyBXYXJuaW5nIGZvciBkZXZlbG9wZXIgb25seS4KLSAg ICAgICAgICAgICAgICBjb25zb2xlLndhcm4oCi0gICAgICAgICAgICAgICAgICAnSG1tLi4gV2Ug ZG9uXCd0IGtub3cgaG93IHRvIHJlbmRlciB0aGlzIHR5cGUgLSBcJ1wnJyArIHAudHlwZSArICdc JyBvZiBjb250cm9sLicKLSAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgIHJldHVybiAnaW5wdXQnOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0sCi0g ICAgICAgICAgLyoKLSAgICAgICAgICAgKiBmdW5jdGlvbjogdHJlZUV2ZW50SGFuZGxlcgotICAg ICAgICAgICAqCi0gICAgICAgICAgICogSXQgaXMgYmFzaWNhbGx5IGEgY2FsbGJhY2ssIHdoaWNo IGxpc3RlbnMgdG8gYWNpLXRyZWUgZXZlbnRzLAotICAgICAgICAgICAqIGFuZCBhY3QgYWNjb3Jk aW5nbHkuCi0gICAgICAgICAgICoKLSAgICAgICAgICAgKiArIFNlbGVjdGlvbiBvZiB0aGUgbm9k ZSB3aWxsIGV4aXN0YW5jZSBvZiB0aGUgcHJlZmVyZW5jZXMgZm9yCi0gICAgICAgICAgICogICB0 aGUgc2VsZWN0ZWQgdHJlZS1ub2RlLCBpZiBub3QgcGFzcyBvbiB0byBzZWxlY3QgdGhlIGZpcnN0 Ci0gICAgICAgICAgICogICBjYXRlZ29yeSB1bmRlciBhIG1vZHVsZSwgZWxzZSBwYXNzIG9uIHRv IHRoZSByZW5kZXIgZnVuY3Rpb24uCi0gICAgICAgICAgICoKLSAgICAgICAgICAgKiArIFdoZW4g YSBuZXcgbm9kZSBpcyBhZGRlZCBpbiB0aGUgdHJlZSwgaXQgd2lsbCBhZGQgdGhlIHJlbGF2ZW50 Ci0gICAgICAgICAgICogICBwcmVmZXJlbmNlcyBpbiB0aGUgcHJlZmVyZW5jZXMgbW9kZWwgY29s bGVjdGlvbiwgd2hpY2ggd2lsbCBiZQotICAgICAgICAgICAqICAgY2FsbGVkIGR1cmluZyBpbml0 aWFsaXphdGlvbiBpdHNlbGYuCi0gICAgICAgICAgICoKLSAgICAgICAgICAgKgotICAgICAgICAg ICAqLwotICAgICAgICAgIHRyZWVFdmVudEhhbmRsZXIgPSBmdW5jdGlvbihldmVudCwgYXBpLCBp dGVtLCBldmVudE5hbWUpIHsKLSAgICAgICAgICAgIC8vIExvb2sgZm9yIHNlbGVjdGVkIGl0ZW0g KGlmIG5vbmUgc3VwcGxpZWQpIQotICAgICAgICAgICAgaXRlbSA9IGl0ZW0gfHwgYXBpLnNlbGVj dGVkKCk7Ci0KLSAgICAgICAgICAgIC8vIEV2ZW50IHRyZWUgaXRlbSBoYXMgaXRlbURhdGEKLSAg ICAgICAgICAgIHZhciBkID0gaXRlbSA/IGFwaS5pdGVtRGF0YShpdGVtKSA6IG51bGw7Ci0KLSAg ICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBib29sZWFuIChzd2l0Y2gvY2hlY2tib3gpLCBz dHJpbmcsIGVudW0gKGNvbWJvYm94IC0gZW51bXZhbHMpLAotICAgICAgICAgICAgICogaW50ZWdl ciAobWluLW1heCksIGZvbnQsIGNvbG9yCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHN3 aXRjaCAoZXZlbnROYW1lKSB7Ci0gICAgICAgICAgICBjYXNlICdzZWxlY3RlZCc6Ci0gICAgICAg ICAgICAgIGlmICghZCkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBp ZiAoZC5wcmVmZXJlbmNlcykgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAg ICAgKiBDbGVhciB0aGUgZXhpc3RpbmcgaHRtbCBpbiB0aGUgcHJlZmVyZW5jZXMgY29udGVudAot ICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgJGNvbnRhaW5lci5maW5kKCcu cHJlZmVyZW5jZXNfY29udGVudCcpOwotCi0gICAgICAgICAgICAgICAgcmVuZGVyUHJlZmVyZW5j ZVBhbmVsKGQucHJlZmVyZW5jZXMpOwotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2VsZWN0Rmlyc3RDYXRlZ29yeShhcGks IGl0ZW0pOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgY2FzZSAnYWRkZWQnOgotICAgICAgICAgICAgICBpZiAoIWQpCi0gICAgICAgICAgICAgICAg YnJlYWs7Ci0KLSAgICAgICAgICAgICAgLy8gV2Ugd2lsbCBhZGQgdGhlIHByZWZlcmVuY2VzIGlu IHRvIHRoZSBwcmVmZXJlbmNlcyBkYXRhCi0gICAgICAgICAgICAgIC8vIGNvbGxlY3Rpb24uCi0g ICAgICAgICAgICAgIGlmIChkLnByZWZlcmVuY2VzICYmIF8uaXNBcnJheShkLnByZWZlcmVuY2Vz KSkgewotICAgICAgICAgICAgICAgIF8uZWFjaChkLnByZWZlcmVuY2VzLCBmdW5jdGlvbihwKSB7 Ci0gICAgICAgICAgICAgICAgICBwcmVmZXJlbmNlcy5hZGQoewotICAgICAgICAgICAgICAgICAg ICAnaWQnOiBwLmlkLAotICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiBwLnZhbHVlLAotICAg ICAgICAgICAgICAgICAgICAnY2F0ZWdvcnlfaWQnOiBkLmlkLAotICAgICAgICAgICAgICAgICAg ICAnbWlkJzogZC5taWQsCi0gICAgICAgICAgICAgICAgICAgICduYW1lJzogcC5uYW1lLAotICAg ICAgICAgICAgICAgICAgICAnZGVwZW5kZW50cyc6IHAuZGVwZW5kZW50cywKLSAgICAgICAgICAg ICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICog V2UgZG9uJ3Qga25vdyB1bnRpbCBub3csIGhvdyB0byByZW5kZXIgdGhlIGNvbnRyb2wgZm9yCi0g ICAgICAgICAgICAgICAgICAgICAqIHRoaXMgcHJlZmVyZW5jZS4KLSAgICAgICAgICAgICAgICAg ICAgICovCi0gICAgICAgICAgICAgICAgICBpZiAoIXAuY29udHJvbCkgewotICAgICAgICAgICAg ICAgICAgICBwLmNvbnRyb2wgPSBnZXRDb250cm9sTWFwcGVkRm9yVHlwZShwKTsKLSAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGlmIChwLmhlbHBfc3RyKSB7Ci0gICAgICAg ICAgICAgICAgICAgIHAuaGVscE1lc3NhZ2UgPSBwLmhlbHBfc3RyOwotICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg IGQuc29ydGFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj YXNlICdsb2FkZWQnOgotICAgICAgICAgICAgICAvLyBMZXQncyBzZWxlY3QgdGhlIGZpcnN0IGNh dGVnb3J5IGZyb20gdGhlIHByZWZyZW5jZXMuCi0gICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8g d2FpdCBmb3Igc29tZXRpbWUgYmVmb3JlIGFsbCBpdGVtIGdldHMgbG9hZGVkCi0gICAgICAgICAg ICAgIC8vIHByb3Blcmx5LgotICAgICAgICAgICAgICBzZXRUaW1lb3V0KAotICAgICAgICAgICAg ICAgIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgc2VsZWN0Rmlyc3RDYXRlZ29yeShh cGksIG51bGwpOwotICAgICAgICAgICAgICAgIH0sIDMwMCk7Ci0gICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgfTsK LQotICAgICAgICAvLyBEaWFsb2cgcHJvcGVydHkKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAg ICBtYWluOiBmdW5jdGlvbigpIHsKLQotICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBleGlzdGlu ZyBjb250ZW50IGZpcnN0LgotICAgICAgICAgICAgZGlhbG9nQ29udGVudENsZWFudXAoKTsKLQot ICAgICAgICAgICAgJGNvbnRhaW5lci5hcHBlbmQoCi0gICAgICAgICAgICAgICc8ZGl2IGNsYXNz PVwncGctZWwtc20tMyBwcmVmZXJlbmNlc190cmVlIGFjaVRyZWVcJz48L2Rpdj4nCi0gICAgICAg ICAgICApLmFwcGVuZCgKLSAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCdwZy1lbC1zbS05IHBy ZWZlcmVuY2VzX2NvbnRlbnRcJz4nICsKLSAgICAgICAgICAgICAgZ2V0dGV4dCgnQ2F0ZWdvcnkg aXMgbm90IHNlbGVjdGVkLicpICsKLSAgICAgICAgICAgICAgJzwvZGl2PicKLSAgICAgICAgICAg ICk7Ci0KLSAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYWNpLXRyZWUgZm9yIGxpc3RpbmcgdGhl IG1vZHVsZXMgYW5kIGNhdGVnb3JpZXMgb2YKLSAgICAgICAgICAgIC8vIGl0LgotICAgICAgICAg ICAgalRyZWUgPSAkY29udGFpbmVyLmZpbmQoJy5wcmVmZXJlbmNlc190cmVlJyk7Ci0gICAgICAg ICAgICBqVHJlZS5vbignYWNpdHJlZScsIHRyZWVFdmVudEhhbmRsZXIpOwotCi0gICAgICAgICAg ICBqVHJlZS5hY2lUcmVlKHsKLSAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZSwKLSAgICAg ICAgICAgICAgZXhwYW5kOiB0cnVlLAotICAgICAgICAgICAgICBmdWxsUm93OiB0cnVlLAotICAg ICAgICAgICAgICBhamF4OiB7Ci0gICAgICAgICAgICAgICAgdXJsOiB1cmxfZm9yKCdwcmVmZXJl bmNlcy5pbmRleCcpLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICBhbmltYXRlUm9v dDogdHJ1ZSwKLSAgICAgICAgICAgICAgdW5hbmltYXRlZDogZmFsc2UsCi0gICAgICAgICAgICAg IHNob3c6IHtkdXJhdGlvbjogNzV9LAotICAgICAgICAgICAgICBoaWRlOiB7ZHVyYXRpb246IDc1 fSwKLSAgICAgICAgICAgICAgdmlldzoge2R1cmF0aW9uOiA3NX0sCi0gICAgICAgICAgICB9KTsK LQotICAgICAgICAgICAgaWYgKGpUcmVlLmFjaVRyZWUoJ2FwaScpKSBtb2RpZnlBbmltYXRpb24u bW9kaWZ5QWNpdHJlZUFuaW1hdGlvbihwZ0Jyb3dzZXIsIGpUcmVlLmFjaVRyZWUoJ2FwaScpKTsK LQotICAgICAgICAgICAgdGhpcy5zaG93KCk7Ci0gICAgICAgICAgfSwKLSAgICAgICAgICBzZXR1 cDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICBidXR0 b25zOiBbewotICAgICAgICAgICAgICAgIHRleHQ6ICcnLAotICAgICAgICAgICAgICAgIGtleTog MTEyLAotICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tcHJpbWFyeS1pY29uIHB1 bGwtbGVmdCBmYSBmYS1xdWVzdGlvbiBwZy1hbGVydGlmeS1pY29uLWJ1dHRvbicsCi0gICAgICAg ICAgICAgICAgYXR0cnM6IHsKLSAgICAgICAgICAgICAgICAgIG5hbWU6ICdkaWFsb2dfaGVscCcs Ci0gICAgICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJywKLSAgICAgICAgICAgICAgICAgIGxh YmVsOiBnZXR0ZXh0KCdQcmVmZXJlbmNlcycpLAotICAgICAgICAgICAgICAgICAgJ2FyaWEtbGFi ZWwnOiBnZXR0ZXh0KCdIZWxwJyksCi0gICAgICAgICAgICAgICAgICB1cmw6IHVybF9mb3IoCi0g ICAgICAgICAgICAgICAgICAgICdoZWxwLnN0YXRpYycsIHsKLSAgICAgICAgICAgICAgICAgICAg ICAnZmlsZW5hbWUnOiAncHJlZmVyZW5jZXMuaHRtbCcsCi0gICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAg fSwgewotICAgICAgICAgICAgICAgIHRleHQ6IGdldHRleHQoJ0NhbmNlbCcpLAotICAgICAgICAg ICAgICAgIGtleTogMjcsCi0gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1zZWNv bmRhcnkgZmEgZmEtbGcgZmEtdGltZXMgcGctYWxlcnRpZnktYnV0dG9uJywKLSAgICAgICAgICAg ICAgfSwgewotICAgICAgICAgICAgICAgIHRleHQ6IGdldHRleHQoJ1NhdmUnKSwKLSAgICAgICAg ICAgICAgICBrZXk6IDEzLAotICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tcHJp bWFyeSBmYSBmYS1sZyBmYS1zYXZlIHBnLWFsZXJ0aWZ5LWJ1dHRvbicsCi0gICAgICAgICAgICAg IH1dLAotICAgICAgICAgICAgICBmb2N1czogewotICAgICAgICAgICAgICAgIGVsZW1lbnQ6IDAs Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgIG9wdGlvbnM6IHsKLSAgICAgICAgICAg ICAgICBwYWRkaW5nOiAhMSwKLSAgICAgICAgICAgICAgICBvdmVyZmxvdzogITEsCi0gICAgICAg ICAgICAgICAgdGl0bGU6IGdldHRleHQoJ1ByZWZlcmVuY2VzJyksCi0gICAgICAgICAgICAgICAg Y2xvc2FibGVCeURpbW1lcjogZmFsc2UsCi0gICAgICAgICAgICAgICAgbW9kYWw6IHRydWUsCi0g ICAgICAgICAgICAgICAgcGlubmFibGU6IGZhbHNlLAotICAgICAgICAgICAgICB9LAotICAgICAg ICAgICAgfTsKLSAgICAgICAgICB9LAotICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbihlKSB7 Ci0gICAgICAgICAgICBpZiAoZS5idXR0b24uZWxlbWVudC5uYW1lID09ICdkaWFsb2dfaGVscCcp IHsKLSAgICAgICAgICAgICAgZS5jYW5jZWwgPSB0cnVlOwotICAgICAgICAgICAgICBwZ0Jyb3dz ZXIuc2hvd0hlbHAoZS5idXR0b24uZWxlbWVudC5uYW1lLCBlLmJ1dHRvbi5lbGVtZW50LmdldEF0 dHJpYnV0ZSgndXJsJyksCi0gICAgICAgICAgICAgICAgbnVsbCwgbnVsbCk7Ci0gICAgICAgICAg ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGUuYnV0dG9uLnRl eHQgPT0gZ2V0dGV4dCgnU2F2ZScpKSB7Ci0gICAgICAgICAgICAgIGxldCByZXF1aXJlc19yZWZy ZXNoID0gZmFsc2U7Ci0gICAgICAgICAgICAgIHByZWZlcmVuY2VzLnVwZGF0ZUFsbCgpOwotCi0g ICAgICAgICAgICAgIC8qIEZpbmQgdGhlIG1vZHVsZXMgY2hhbmdlZCAqLwotICAgICAgICAgICAg ICBsZXQgbW9kdWxlc0NoYW5nZWQgPSB7fTsKLSAgICAgICAgICAgICAgXy5lYWNoKGNoYW5nZWQs ICh2YWwsIGtleSk9PiB7Ci0gICAgICAgICAgICAgICAgbGV0IHByZWYgPSBwZ0Jyb3dzZXIuZ2V0 X3ByZWZlcmVuY2VfZm9yX2lkKE51bWJlcihrZXkpKTsKLQotICAgICAgICAgICAgICAgIGlmKHBy ZWZbJ25hbWUnXSA9PSAnZHluYW1pY190YWJzJykgewotICAgICAgICAgICAgICAgICAgc2hvd1F1 ZXJ5VG9vbC5fc2V0X2R5bmFtaWNfdGFiKHBnQnJvd3NlciwgIXByZWZbJ3ZhbHVlJ10pOwotICAg ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmKCFtb2R1bGVzQ2hhbmdlZFtwcmVm Lm1vZHVsZV0pIHsKLSAgICAgICAgICAgICAgICAgIG1vZHVsZXNDaGFuZ2VkW3ByZWYubW9kdWxl XSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYocHJlZi5u YW1lID09ICd0aGVtZScpIHsKLSAgICAgICAgICAgICAgICAgIHJlcXVpcmVzX3JlZnJlc2ggPSB0 cnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmKHByZWYubmFtZSA9 PSAnaGlkZV9zaGFyZWRfc2VydmVyJykgewotICAgICAgICAgICAgICAgICAgTm90aWZ5LmNvbmZp cm0oCi0gICAgICAgICAgICAgICAgICAgIGdldHRleHQoJ0Jyb3dzZXIgdHJlZSByZWZyZXNoIHJl cXVpcmVkJyksCi0gICAgICAgICAgICAgICAgICAgIGdldHRleHQoJ0EgYnJvd3NlciB0cmVlIHJl ZnJlc2ggaXMgcmVxdWlyZWQuIERvIHlvdSB3aXNoIHRvIHJlZnJlc2ggdGhlIHRyZWU/JyksCi0g ICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgIHBn QWRtaW4uQnJvd3Nlci50cmVlLmRlc3Ryb3koewotICAgICAgICAgICAgICAgICAgICAgICAgc3Vj Y2VzczogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHBnQWRtaW4uQnJv d3Nlci5pbml0aWFsaXplQnJvd3NlclRyZWUocGdBZG1pbi5Ccm93c2VyKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAot ICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAg ICAgICAgICAgICAgICBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICBwcmVmZXJl bmNlcy5yZXNldCgpOwotICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB7fTsKLSAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAg ICAgICAgICAgICAgICAgICAgZ2V0dGV4dCgnUmVmcmVzaCcpLAotICAgICAgICAgICAgICAgICAg ICBnZXR0ZXh0KCdMYXRlcicpCi0gICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgaWYocmVxdWlyZXNfcmVmcmVz aCkgewotICAgICAgICAgICAgICAgIE5vdGlmeS5jb25maXJtKAotICAgICAgICAgICAgICAgICAg Z2V0dGV4dCgnUmVmcmVzaCByZXF1aXJlZCcpLAotICAgICAgICAgICAgICAgICAgZ2V0dGV4dCgn QSBwYWdlIHJlZnJlc2ggaXMgcmVxdWlyZWQgdG8gYXBwbHkgdGhlIHRoZW1lLiBEbyB5b3Ugd2lz aCB0byByZWZyZXNoIHRoZSBwYWdlIG5vdz8nKSwKLSAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u KCkgewotICAgICAgICAgICAgICAgICAgICAvKiBJZiB1c2VyIGNsaWNrcyBZZXMgKi8KLSAgICAg ICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJl dHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgIGZ1bmN0 aW9uKCkgey8qIElmIHVzZXIgY2xpY2tzIE5vICovIHJldHVybiB0cnVlO30sCi0gICAgICAgICAg ICAgICAgICBnZXR0ZXh0KCdSZWZyZXNoJyksCi0gICAgICAgICAgICAgICAgICBnZXR0ZXh0KCdM YXRlcicpCi0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAvLyBSZWZyZXNoIHByZWZlcmVuY2VzIGNhY2hlCi0gICAgICAgICAgICAgIHBnQnJvd3Nlci5j YWNoZV9wcmVmZXJlbmNlcyhtb2R1bGVzQ2hhbmdlZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgfSwKLSAgICAgICAgICBidWlsZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB0aGlzLmVs ZW1lbnRzLmNvbnRlbnQuYXBwZW5kQ2hpbGQoJGNvbnRhaW5lci5nZXQoMCkpOwotICAgICAgICAg ICAgQWxlcnRpZnkucGdEaWFsb2dCdWlsZC5hcHBseSh0aGlzKTsKLSAgICAgICAgICB9LAotICAg ICAgICAgIGhvb2tzOiB7Ci0gICAgICAgICAgICBvbnNob3c6IGZ1bmN0aW9uKCkgey8qIFRoaXMg aXMgaW50ZW50aW9uYWwgKFNvbmFyUXViZSkgKi99LAotICAgICAgICAgIH0sCi0gICAgICAgIH07 Ci0gICAgICB9KTsKLQotICAgIH0sCi0gICAgc2hvdzogZnVuY3Rpb24oKSB7Ci0gICAgICBBbGVy dGlmeS5wcmVmZXJlbmNlc0RsZyh0cnVlKS5yZXNpemVUbyhwZ0FkbWluLkJyb3dzZXIuc3RkVy5j YWxjKHBnQWRtaW4uQnJvd3Nlci5zdGRXLmxnKSxwZ0FkbWluLkJyb3dzZXIuc3RkSC5jYWxjKHBn QWRtaW4uQnJvd3Nlci5zdGRILmxnKSk7Ci0gICAgfSwKLSAgfTsKLQotICByZXR1cm4gcGdBZG1p bi5QcmVmZXJlbmNlczsKLX0pOworZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJlZmVyZW5jZXMgewor ICBzdGF0aWMgaW5zdGFuY2U7CisKKyAgc3RhdGljIGdldEluc3RhbmNlKC4uLmFyZ3MpIHsKKyAg ICBpZiAoIVByZWZlcmVuY2VzLmluc3RhbmNlKSB7CisgICAgICBQcmVmZXJlbmNlcy5pbnN0YW5j ZSA9IG5ldyBQcmVmZXJlbmNlcyguLi5hcmdzKTsKKyAgICB9CisgICAgcmV0dXJuIFByZWZlcmVu Y2VzLmluc3RhbmNlOworICB9CisKKyAgY29uc3RydWN0b3IocGdBZG1pbiwgcGdCcm93c2VyKSB7 CisgICAgdGhpcy5wZ0FkbWluID0gcGdBZG1pbjsKKyAgICB0aGlzLnBnQnJvd3NlciA9IHBnQnJv d3NlcjsKKyAgfQorCisgIGluaXQoKSB7CisgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpCisgICAg ICByZXR1cm47CisgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7CisgICAgLy8gQWRkIFByZWZl cmVuY2VzIGluIHRvIGZpbGUgbWVudQorICAgIHZhciBtZW51cyA9IFt7CisgICAgICBuYW1lOiAn bW51X3ByZWZlcmVuY2VzJywKKyAgICAgIG1vZHVsZTogdGhpcywKKyAgICAgIGFwcGxpZXM6IFsn ZmlsZSddLAorICAgICAgY2FsbGJhY2s6ICdzaG93JywKKyAgICAgIGVuYWJsZTogdHJ1ZSwKKyAg ICAgIHByaW9yaXR5OiAzLAorICAgICAgbGFiZWw6IGdldHRleHQoJ1ByZWZlcmVuY2VzJyksCisg ICAgICBpY29uOiAnZmEgZmEtY29nJywKKyAgICB9XTsKKworICAgIHRoaXMucGdCcm93c2VyLmFk ZF9tZW51cyhtZW51cyk7CisgIH0KKworICAvLyBUaGlzIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24g dG8gc2hvdyBwcmVmZXJlbmNlcy4KKyAgc2hvdygpIHsKKyAgICAvLyBSZW5kZXIgUHJlZmVyZW5j ZXMgY29tcG9uZW50CisgICAgTm90aWZ5LnNob3dNb2RhbChnZXR0ZXh0KCdQcmVmZXJlbmNlcycp LCAoY2xvc2VNb2RhbCwgaXNGdWxsU2NyZWVuKT0+IHtyZXR1cm4gPFByZWZlcmVuY2VzQ29tcG9u ZW50IGNsb3NlTW9kYWw9e2Nsb3NlTW9kYWx9IGlzRnVsbFNjcmVlbj17aXNGdWxsU2NyZWVufS8+ O30sIHtpc0Z1bGxTY3JlZW46IGZhbHNlLCBzaG93RnVsbFNjcmVlbjogdHJ1ZSwgbWF4V2lkdGg6 ICdtZCcsIGlzRnVsbFdpZHRoOiB0cnVlfSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL3ByZWZlcmVuY2VzL3Rlc3RzL19faW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vcHJlZmVyZW5j ZXMvdGVzdHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAu LjZlMDRkYWY2Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vcHJlZmVyZW5jZXMvdGVz dHMvX19pbml0X18ucHkKQEAgLTAsMCArMSw4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBw Z0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIw MjIsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBpcyByZWxl YXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vcHJlZmVyZW5jZXMvdGVzdHMvcHJlZmVyZW5jZXNfdGVz dF9kYXRhLmpzb24gYi93ZWIvcGdhZG1pbi9wcmVmZXJlbmNlcy90ZXN0cy9wcmVmZXJlbmNlc190 ZXN0X2RhdGEuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYTQzMjdk ZDQKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9wcmVmZXJlbmNlcy90ZXN0cy9wcmVm ZXJlbmNlc190ZXN0X2RhdGEuanNvbgpAQCAtMCwwICsxLDI3IEBACit7CisgICJnZXRfcHJlZmVy ZW5jZXMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAiR2V0IHRoZSBhbGwgUHJlZmVyZW5jZXMi LAorICAgICAgInVybCI6ICIvcHJlZmVyZW5jZXMvIiwKKyAgICAgICJpc19wb3NpdGl2ZV90ZXN0 IjogdHJ1ZSwKKyAgICAgICJtb2NraW5nX3JlcXVpcmVkIjogZmFsc2UsCisgICAgICAibW9ja19k YXRhIjogeworICAgICAgfSwKKyAgICAgICJleHBlY3RlZF9kYXRhIjogeworICAgICAgICAic3Rh dHVzX2NvZGUiOiAyMDAKKyAgICAgIH0KKyAgICB9CisgIF0sCisgICAgInVwZGF0ZV9wcmVmZXJl bmNlcyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJVcGRhdGUgdGhlIFByZWZlcmVuY2VzIiwK KyAgICAgICJ1cmwiOiAiL3ByZWZlcmVuY2VzLyIsCisgICAgICAiaXNfcG9zaXRpdmVfdGVzdCI6 IHRydWUsCisgICAgICAibW9ja2luZ19yZXF1aXJlZCI6IGZhbHNlLAorICAgICAgIm1vY2tfZGF0 YSI6IHt9LAorICAgICAgImV4cGVjdGVkX2RhdGEiOiB7CisgICAgICAgICJzdGF0dXNfY29kZSI6 IDIwMAorICAgICAgfQorICAgIH0KKyAgXQorfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vcHJl ZmVyZW5jZXMvdGVzdHMvdGVzdF9wcmVmZXJlbmNlc19nZXQucHkgYi93ZWIvcGdhZG1pbi9wcmVm ZXJlbmNlcy90ZXN0cy90ZXN0X3ByZWZlcmVuY2VzX2dldC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMC4uYjc4NjM4ODgKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1p bi9wcmVmZXJlbmNlcy90ZXN0cy90ZXN0X3ByZWZlcmVuY2VzX2dldC5weQpAQCAtMCwwICsxLDM5 IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xz CisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMjIsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50 IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBM aWNlbmNlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpbXBvcnQgb3MKK2Zyb20gcGdhZG1pbi51 dGlscy5yb3V0ZSBpbXBvcnQgQmFzZVRlc3RHZW5lcmF0b3IKK2Zyb20gcmVncmVzc2lvbi5weXRo b25fdGVzdF91dGlscyBpbXBvcnQgdGVzdF91dGlscyBhcyB1dGlscworZnJvbSByZWdyZXNzaW9u LnRlc3Rfc2V0dXAgaW1wb3J0IGNvbmZpZ19kYXRhCitpbXBvcnQganNvbgoraW1wb3J0IGNvbmZp ZworCit0ZXN0X3VzZXJfZGV0YWlscyA9IE5vbmUKK2lmIGNvbmZpZy5TRVJWRVJfTU9ERToKKyAg ICB0ZXN0X3VzZXJfZGV0YWlscyA9IGNvbmZpZ19kYXRhWydwZ0FkbWluNF90ZXN0X25vbl9hZG1p bl9jcmVkZW50aWFscyddCisKK0NVUlJFTlRfUEFUSCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRo LnJlYWxwYXRoKF9fZmlsZV9fKSkKK3dpdGggb3BlbihDVVJSRU5UX1BBVEggKyAiL3ByZWZlcmVu Y2VzX3Rlc3RfZGF0YS5qc29uIikgYXMgZGF0YV9maWxlOgorICAgIHRlc3RfY2FzZXMgPSBqc29u LmxvYWQoZGF0YV9maWxlKQorCisKK2NsYXNzIEdldFByZWZlcmVuY2VzVGVzdChCYXNlVGVzdEdl bmVyYXRvcik6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyB3aWxsIGZldGNoIGFsbCBQcmVmZXJl bmNlcworICAgICIiIgorCisgICAgc2NlbmFyaW9zID0gdXRpbHMuZ2VuZXJhdGVfc2NlbmFyaW9z KCdnZXRfcHJlZmVyZW5jZXMnLCB0ZXN0X2Nhc2VzKQorCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6 CisgICAgICAgIHNlbGYuZ2V0X3ByZWZlcmVuY2VzKCkKKworICAgIGRlZiBnZXRfcHJlZmVyZW5j ZXMoc2VsZik6CisgICAgICAgIHJlc3BvbnNlID0gc2VsZi50ZXN0ZXIuZ2V0KHNlbGYudXJsLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGU9J2h0bWwvanNv bicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vcHJlZmVyZW5jZXMvdGVzdHMvdGVzdF9wcmVmZXJlbmNl c191cGRhdGUucHkgYi93ZWIvcGdhZG1pbi9wcmVmZXJlbmNlcy90ZXN0cy90ZXN0X3ByZWZlcmVu Y2VzX3VwZGF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNmI5ZWNj YzAKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9wcmVmZXJlbmNlcy90ZXN0cy90ZXN0 X3ByZWZlcmVuY2VzX3VwZGF0ZS5weQpAQCAtMCwwICsxLDYwIEBACisjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IworIworIyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykg MjAxMyAtIDIwMjIsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2Fy ZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworCitpbXBvcnQgb3MKK2Zyb20gcGdhZG1pbi51dGlscy5yb3V0ZSBpbXBvcnQgQmFz ZVRlc3RHZW5lcmF0b3IKK2Zyb20gcmVncmVzc2lvbi5weXRob25fdGVzdF91dGlscyBpbXBvcnQg dGVzdF91dGlscyBhcyB1dGlscworZnJvbSByZWdyZXNzaW9uLnRlc3Rfc2V0dXAgaW1wb3J0IGNv bmZpZ19kYXRhCitmcm9tIHJlZ3Jlc3Npb24gaW1wb3J0IHBhcmVudF9ub2RlX2RpY3QKK2ltcG9y dCBqc29uCitpbXBvcnQgY29uZmlnCisKK3Rlc3RfdXNlcl9kZXRhaWxzID0gTm9uZQoraWYgY29u ZmlnLlNFUlZFUl9NT0RFOgorICAgIHRlc3RfdXNlcl9kZXRhaWxzID0gY29uZmlnX2RhdGFbJ3Bn QWRtaW40X3Rlc3Rfbm9uX2FkbWluX2NyZWRlbnRpYWxzJ10KKworQ1VSUkVOVF9QQVRIID0gb3Mu cGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQord2l0aCBvcGVuKENVUlJF TlRfUEFUSCArICIvcHJlZmVyZW5jZXNfdGVzdF9kYXRhLmpzb24iKSBhcyBkYXRhX2ZpbGU6Cisg ICAgdGVzdF9jYXNlcyA9IGpzb24ubG9hZChkYXRhX2ZpbGUpCisKKworY2xhc3MgR2V0UHJlZmVy ZW5jZXNUZXN0KEJhc2VUZXN0R2VuZXJhdG9yKToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIHdp bGwgZmV0Y2ggYWxsIFByZWZlcmVuY2VzCisgICAgIiIiCisKKyAgICBzY2VuYXJpb3MgPSB1dGls cy5nZW5lcmF0ZV9zY2VuYXJpb3MoJ3VwZGF0ZV9wcmVmZXJlbmNlcycsIHRlc3RfY2FzZXMpCisK KyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHJlc3BvbnNlID0gc2VsZi50ZXN0ZXIuZ2V0 KHNlbGYudXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5 cGU9J2h0bWwvanNvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwb25zZS5zdGF0dXNf Y29kZSwgMjAwKQorICAgICAgICBwYXJlbnRfbm9kZV9kaWN0WydwcmVmZXJlbmNlcyddID0gcmVz cG9uc2UuZGF0YQorCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYudXBkYXRl X3ByZWZlcmVuY2VzKCkKKworICAgIGRlZiB1cGRhdGVfcHJlZmVyZW5jZXMoc2VsZik6CisgICAg ICAgIGlmICdwcmVmZXJlbmNlcycgaW4gcGFyZW50X25vZGVfZGljdDoKKyAgICAgICAgICAgIGRh dGEgPSBcCisgICAgICAgICAgICAgICAganNvbi5sb2FkcyhwYXJlbnRfbm9kZV9kaWN0WydwcmVm ZXJlbmNlcyddKVswXVsnY2hpbGRyZW4nXVswXVsKKyAgICAgICAgICAgICAgICAgICAgJ3ByZWZl cmVuY2VzJ11bMF0KKyAgICAgICAgICAgIHVwZGF0ZWRfZGF0YSA9IFt7CisgICAgICAgICAgICAg ICAgJ2lkJzogZGF0YVsnaWQnXSwKKyAgICAgICAgICAgICAgICAnY2F0ZWdvcnlfaWQnOiBkYXRh WydjaWQnXSwKKyAgICAgICAgICAgICAgICAnbWlkJzogZGF0YVsnbWlkJ10sCisgICAgICAgICAg ICAgICAgJ25hbWUnOiBkYXRhWyduYW1lJ10sCisgICAgICAgICAgICAgICAgJ3ZhbHVlJzogbm90 IGRhdGFbJ3ZhbHVlJ10KKyAgICAgICAgICAgIH1dCisgICAgICAgICAgICByZXNwb25zZSA9IHNl bGYudGVzdGVyLnB1dChzZWxmLnVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRhdGE9anNvbi5kdW1wcyh1cGRhdGVkX2RhdGEpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlPSdodG1sL2pzb24nKQorICAgICAgICAg ICAgc2VsZi5hc3NlcnRUcnVlKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCisgICAgICAgIGVs c2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1ByZWZlcmVuY2VzIG5vdCBmb3VuZCcpCmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvU2NoZW1hVmlldy9NYXBwZWRDb250cm9sLmpz eCBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9TY2hlbWFWaWV3L01hcHBlZENvbnRyb2wuanN4Cmlu ZGV4IGEzNjFiODI4Li44MDE4Nzk5YSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vc3RhdGljL2pz L1NjaGVtYVZpZXcvTWFwcGVkQ29udHJvbC5qc3gKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pz L1NjaGVtYVZpZXcvTWFwcGVkQ29udHJvbC5qc3gKQEAgLTksMTggKzksMTkgQEAKIAogaW1wb3J0 IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnOwogaW1wb3J0IF8gZnJvbSAnbG9k YXNoJzsKLQotaW1wb3J0IHsgRm9ybUlucHV0VGV4dCwgRm9ybUlucHV0U2VsZWN0LCBGb3JtSW5w dXRTd2l0Y2gsIEZvcm1JbnB1dENoZWNrYm94LCBGb3JtSW5wdXRDb2xvciwKLSAgRm9ybUlucHV0 RmlsZVNlbGVjdCwgRm9ybUlucHV0VG9nZ2xlLCBJbnB1dFN3aXRjaCwgRm9ybUlucHV0U1FMLCBG b3JtTm90ZSwgRm9ybUlucHV0RGF0ZVRpbWVQaWNrZXIsIFBsYWluU3RyaW5nLCBJbnB1dFNRTCwK LSAgSW5wdXRTZWxlY3QsIElucHV0VGV4dCwgSW5wdXRDaGVja2JveCwgSW5wdXREYXRlVGltZVBp Y2tlciB9IGZyb20gJy4uL2NvbXBvbmVudHMvRm9ybUNvbXBvbmVudHMnOworaW1wb3J0IHsKKyAg Rm9ybUlucHV0VGV4dCwgRm9ybUlucHV0U2VsZWN0LCBGb3JtSW5wdXRTd2l0Y2gsIEZvcm1JbnB1 dENoZWNrYm94LCBGb3JtSW5wdXRDb2xvciwKKyAgRm9ybUlucHV0RmlsZVNlbGVjdCwgRm9ybUlu cHV0VG9nZ2xlLCBJbnB1dFN3aXRjaCwgRm9ybUlucHV0U1FMLCBJbnB1dFNRTCwgRm9ybU5vdGUs IEZvcm1JbnB1dERhdGVUaW1lUGlja2VyLCBQbGFpblN0cmluZywKKyAgSW5wdXRTZWxlY3QsIElu cHV0VGV4dCwgSW5wdXRDaGVja2JveCwgSW5wdXREYXRlVGltZVBpY2tlciwgSW5wdXRGaWxlU2Vs ZWN0LCBGb3JtSW5wdXRLZXlib2FyZFNob3J0Y3V0LCBGb3JtSW5wdXRRdWVyeVRocmVzaG9sZAor fSBmcm9tICcuLi9jb21wb25lbnRzL0Zvcm1Db21wb25lbnRzJzsKIGltcG9ydCBQcml2aWxlZ2Ug ZnJvbSAnLi4vY29tcG9uZW50cy9Qcml2aWxlZ2UnOwogaW1wb3J0IHsgZXZhbEZ1bmMgfSBmcm9t ICdzb3VyY2VzL3V0aWxzJzsKIGltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7CiBp bXBvcnQgQ3VzdG9tUHJvcFR5cGVzIGZyb20gJy4uL2N1c3RvbV9wcm9wX3R5cGVzJzsKLWltcG9y dCB7IFNlbGVjdFJlZnJlc2h9IGZyb20gJy4uL2NvbXBvbmVudHMvU2VsZWN0UmVmcmVzaCc7Citp bXBvcnQgeyBTZWxlY3RSZWZyZXNoIH0gZnJvbSAnLi4vY29tcG9uZW50cy9TZWxlY3RSZWZyZXNo JzsKIAogLyogQ29udHJvbCBtYXBwaW5nIGZvciBmb3JtIHZpZXcgKi8KLWZ1bmN0aW9uIE1hcHBl ZEZvcm1Db250cm9sQmFzZSh7dHlwZSwgdmFsdWUsIGlkLCBvbkNoYW5nZSwgY2xhc3NOYW1lLCB2 aXNpYmxlLCBpbnB1dFJlZiwgbm9MYWJlbCwgLi4ucHJvcHN9KSB7CitmdW5jdGlvbiBNYXBwZWRG b3JtQ29udHJvbEJhc2UoeyB0eXBlLCB2YWx1ZSwgaWQsIG9uQ2hhbmdlLCBjbGFzc05hbWUsIHZp c2libGUsIGlucHV0UmVmLCBub0xhYmVsLCAuLi5wcm9wcyB9KSB7CiAgIGNvbnN0IG5hbWUgPSBp ZDsKICAgY29uc3Qgb25UZXh0Q2hhbmdlID0gdXNlQ2FsbGJhY2soKGUpID0+IHsKICAgICBsZXQg dmFsID0gZTsKQEAgLTM0LDM2ICszNSwzNiBAQCBmdW5jdGlvbiBNYXBwZWRGb3JtQ29udHJvbEJh c2Uoe3R5cGUsIHZhbHVlLCBpZCwgb25DaGFuZ2UsIGNsYXNzTmFtZSwgdmlzaWJsZSwgaQogICAg IG9uQ2hhbmdlICYmIG9uQ2hhbmdlKGNoYW5nZWRWYWx1ZSk7CiAgIH0sIFtdKTsKIAotICBpZigh dmlzaWJsZSkgeworICBpZiAoIXZpc2libGUpIHsKICAgICByZXR1cm4gPD48Lz47CiAgIH0KIAog ICAvKiBUaGUgbWFwcGluZyB1c2VzIEZvcm0qIGNvbXBvbmVudHMgYXMgaXQgY29tZXMgd2l0aCBs YWJlbHMgKi8KICAgc3dpdGNoICh0eXBlKSB7CiAgIGNhc2UgJ2ludCc6Ci0gICAgcmV0dXJuIDxG b3JtSW5wdXRUZXh0IG5hbWU9e25hbWV9IHZhbHVlPXt2YWx1ZX0gb25DaGFuZ2U9e29uVGV4dENo YW5nZX0gY2xhc3NOYW1lPXtjbGFzc05hbWV9IGlucHV0UmVmPXtpbnB1dFJlZn0gey4uLnByb3Bz fSB0eXBlPSdpbnQnLz47CisgICAgcmV0dXJuIDxGb3JtSW5wdXRUZXh0IG5hbWU9e25hbWV9IHZh bHVlPXt2YWx1ZX0gb25DaGFuZ2U9e29uVGV4dENoYW5nZX0gY2xhc3NOYW1lPXtjbGFzc05hbWV9 IGlucHV0UmVmPXtpbnB1dFJlZn0gey4uLnByb3BzfSB0eXBlPSdpbnQnIC8+OwogICBjYXNlICdu dW1lcmljJzoKLSAgICByZXR1cm4gPEZvcm1JbnB1dFRleHQgbmFtZT17bmFtZX0gdmFsdWU9e3Zh bHVlfSBvbkNoYW5nZT17b25UZXh0Q2hhbmdlfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gaW5wdXRS ZWY9e2lucHV0UmVmfSB7Li4ucHJvcHN9IHR5cGU9J251bWVyaWMnLz47CisgICAgcmV0dXJuIDxG b3JtSW5wdXRUZXh0IG5hbWU9e25hbWV9IHZhbHVlPXt2YWx1ZX0gb25DaGFuZ2U9e29uVGV4dENo YW5nZX0gY2xhc3NOYW1lPXtjbGFzc05hbWV9IGlucHV0UmVmPXtpbnB1dFJlZn0gey4uLnByb3Bz fSB0eXBlPSdudW1lcmljJyAvPjsKICAgY2FzZSAndGVsJzoKLSAgICByZXR1cm4gPEZvcm1JbnB1 dFRleHQgbmFtZT17bmFtZX0gdmFsdWU9e3ZhbHVlfSBvbkNoYW5nZT17b25UZXh0Q2hhbmdlfSBj bGFzc05hbWU9e2NsYXNzTmFtZX0gaW5wdXRSZWY9e2lucHV0UmVmfSB7Li4ucHJvcHN9IHR5cGU9 J3RlbCcvPjsKKyAgICByZXR1cm4gPEZvcm1JbnB1dFRleHQgbmFtZT17bmFtZX0gdmFsdWU9e3Zh bHVlfSBvbkNoYW5nZT17b25UZXh0Q2hhbmdlfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gaW5wdXRS ZWY9e2lucHV0UmVmfSB7Li4ucHJvcHN9IHR5cGU9J3RlbCcgLz47CiAgIGNhc2UgJ3RleHQnOgot ICAgIHJldHVybiA8Rm9ybUlucHV0VGV4dCBuYW1lPXtuYW1lfSB2YWx1ZT17dmFsdWV9IG9uQ2hh bmdlPXtvblRleHRDaGFuZ2V9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBpbnB1dFJlZj17aW5wdXRS ZWZ9IHsuLi5wcm9wc30vPjsKKyAgICByZXR1cm4gPEZvcm1JbnB1dFRleHQgbmFtZT17bmFtZX0g dmFsdWU9e3ZhbHVlfSBvbkNoYW5nZT17b25UZXh0Q2hhbmdlfSBjbGFzc05hbWU9e2NsYXNzTmFt ZX0gaW5wdXRSZWY9e2lucHV0UmVmfSB7Li4ucHJvcHN9IC8+OwogICBjYXNlICdtdWx0aWxpbmUn OgogICAgIHJldHVybiA8Rm9ybUlucHV0VGV4dCBuYW1lPXtuYW1lfSB2YWx1ZT17dmFsdWV9IG9u Q2hhbmdlPXtvblRleHRDaGFuZ2V9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfQotICAgICAgaW5wdXRS ZWY9e2lucHV0UmVmfSBjb250cm9sUHJvcHM9e3ttdWx0aWxpbmU6IHRydWV9fSB7Li4ucHJvcHN9 Lz47CisgICAgICBpbnB1dFJlZj17aW5wdXRSZWZ9IGNvbnRyb2xQcm9wcz17eyBtdWx0aWxpbmU6 IHRydWUgfX0gey4uLnByb3BzfSAvPjsKICAgY2FzZSAncGFzc3dvcmQnOgotICAgIHJldHVybiA8 Rm9ybUlucHV0VGV4dCBuYW1lPXtuYW1lfSB2YWx1ZT17dmFsdWV9IG9uQ2hhbmdlPXtvblRleHRD aGFuZ2V9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSB0eXBlPSdwYXNzd29yZCcgaW5wdXRSZWY9e2lu cHV0UmVmfSB7Li4ucHJvcHN9Lz47CisgICAgcmV0dXJuIDxGb3JtSW5wdXRUZXh0IG5hbWU9e25h bWV9IHZhbHVlPXt2YWx1ZX0gb25DaGFuZ2U9e29uVGV4dENoYW5nZX0gY2xhc3NOYW1lPXtjbGFz c05hbWV9IHR5cGU9J3Bhc3N3b3JkJyBpbnB1dFJlZj17aW5wdXRSZWZ9IHsuLi5wcm9wc30gLz47 CiAgIGNhc2UgJ3NlbGVjdCc6CiAgICAgcmV0dXJuIDxGb3JtSW5wdXRTZWxlY3QgbmFtZT17bmFt ZX0gdmFsdWU9e3ZhbHVlfSBvbkNoYW5nZT17b25UZXh0Q2hhbmdlfSBjbGFzc05hbWU9e2NsYXNz TmFtZX0gaW5wdXRSZWY9e2lucHV0UmVmfSB7Li4ucHJvcHN9IC8+OwogICBjYXNlICdzZWxlY3Qt cmVmcmVzaCc6CiAgICAgcmV0dXJuIDxTZWxlY3RSZWZyZXNoIG5hbWU9e25hbWV9IHZhbHVlPXt2 YWx1ZX0gb25DaGFuZ2U9e29uVGV4dENoYW5nZX0gY2xhc3NOYW1lPXtjbGFzc05hbWV9IHsuLi5w cm9wc30gLz47CiAgIGNhc2UgJ3N3aXRjaCc6CiAgICAgcmV0dXJuIDxGb3JtSW5wdXRTd2l0Y2gg bmFtZT17bmFtZX0gdmFsdWU9e3ZhbHVlfQotICAgICAgb25DaGFuZ2U9eyhlKT0+b25UZXh0Q2hh bmdlKGUudGFyZ2V0LmNoZWNrZWQsIGUudGFyZ2V0Lm5hbWUpfSBjbGFzc05hbWU9e2NsYXNzTmFt ZX0KKyAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gb25UZXh0Q2hhbmdlKGUudGFyZ2V0LmNoZWNrZWQs IGUudGFyZ2V0Lm5hbWUpfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0KICAgICAgIHsuLi5wcm9wc30g Lz47CiAgIGNhc2UgJ2NoZWNrYm94JzoKICAgICByZXR1cm4gPEZvcm1JbnB1dENoZWNrYm94IG5h bWU9e25hbWV9IHZhbHVlPXt2YWx1ZX0KLSAgICAgIG9uQ2hhbmdlPXsoZSk9Pm9uVGV4dENoYW5n ZShlLnRhcmdldC5jaGVja2VkLCBlLnRhcmdldC5uYW1lKX0gY2xhc3NOYW1lPXtjbGFzc05hbWV9 CisgICAgICBvbkNoYW5nZT17KGUpID0+IG9uVGV4dENoYW5nZShlLnRhcmdldC5jaGVja2VkLCBl LnRhcmdldC5uYW1lKX0gY2xhc3NOYW1lPXtjbGFzc05hbWV9CiAgICAgICB7Li4ucHJvcHN9IC8+ OwogICBjYXNlICd0b2dnbGUnOgogICAgIHJldHVybiA8Rm9ybUlucHV0VG9nZ2xlIG5hbWU9e25h bWV9IHZhbHVlPXt2YWx1ZX0KQEAgLTc2LDkgKzc3LDEzIEBAIGZ1bmN0aW9uIE1hcHBlZEZvcm1D b250cm9sQmFzZSh7dHlwZSwgdmFsdWUsIGlkLCBvbkNoYW5nZSwgY2xhc3NOYW1lLCB2aXNpYmxl LCBpCiAgIGNhc2UgJ3NxbCc6CiAgICAgcmV0dXJuIDxGb3JtSW5wdXRTUUwgbmFtZT17bmFtZX0g dmFsdWU9e3ZhbHVlfSBvbkNoYW5nZT17b25TcWxDaGFuZ2V9IGNsYXNzTmFtZT17Y2xhc3NOYW1l fSBub0xhYmVsPXtub0xhYmVsfSB7Li4ucHJvcHN9IC8+OwogICBjYXNlICdub3RlJzoKLSAgICBy ZXR1cm4gPEZvcm1Ob3RlIGNsYXNzTmFtZT17Y2xhc3NOYW1lfSB7Li4ucHJvcHN9Lz47CisgICAg cmV0dXJuIDxGb3JtTm90ZSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gey4uLnByb3BzfSAvPjsKICAg Y2FzZSAnZGF0ZXRpbWVwaWNrZXInOgogICAgIHJldHVybiA8Rm9ybUlucHV0RGF0ZVRpbWVQaWNr ZXIgbmFtZT17bmFtZX0gdmFsdWU9e3ZhbHVlfSBvbkNoYW5nZT17b25UZXh0Q2hhbmdlfSBjbGFz c05hbWU9e2NsYXNzTmFtZX0gey4uLnByb3BzfSAvPjsKKyAgY2FzZSAna2V5Ym9hcmRTaG9ydGN1 dCc6CisgICAgcmV0dXJuIDxGb3JtSW5wdXRLZXlib2FyZFNob3J0Y3V0IG5hbWU9e25hbWV9IHZh bHVlPXt2YWx1ZX0gb25DaGFuZ2U9e29uVGV4dENoYW5nZX0gey4uLnByb3BzfS8+OworICBjYXNl ICd0aHJlc2hvbGQnOgorICAgIHJldHVybiA8Rm9ybUlucHV0UXVlcnlUaHJlc2hvbGQgbmFtZT17 bmFtZX0gdmFsdWU9e3ZhbHVlfSBvbkNoYW5nZT17b25UZXh0Q2hhbmdlfSB7Li4ucHJvcHN9Lz47 CiAgIGRlZmF1bHQ6CiAgICAgcmV0dXJuIDxQbGFpblN0cmluZyB2YWx1ZT17dmFsdWV9IHsuLi5w cm9wc30gLz47CiAgIH0KQEAgLTEwMCwxMSArMTA1LDExIEBAIE1hcHBlZEZvcm1Db250cm9sQmFz ZS5wcm9wVHlwZXMgPSB7CiB9OwogCiAvKiBDb250cm9sIG1hcHBpbmcgZm9yIGdyaWQgY2VsbCB2 aWV3ICovCi1mdW5jdGlvbiBNYXBwZWRDZWxsQ29udHJvbEJhc2Uoe2NlbGwsIHZhbHVlLCBpZCwg b3B0aW9uc0xvYWRlZCwgb25DZWxsQ2hhbmdlLCB2aXNpYmxlLCByZVJlbmRlclJvdywuLi5wcm9w c30pIHsKK2Z1bmN0aW9uIE1hcHBlZENlbGxDb250cm9sQmFzZSh7IGNlbGwsIHZhbHVlLCBpZCwg b3B0aW9uc0xvYWRlZCwgb25DZWxsQ2hhbmdlLCB2aXNpYmxlLCByZVJlbmRlclJvdywgLi4ucHJv cHMgfSkgewogICBjb25zdCBuYW1lID0gaWQ7CiAgIGNvbnN0IG9uVGV4dENoYW5nZSA9IHVzZUNh bGxiYWNrKChlKSA9PiB7CiAgICAgbGV0IHZhbCA9IGU7Ci0gICAgaWYoZSAmJiBlLnRhcmdldCkg eworICAgIGlmIChlICYmIGUudGFyZ2V0KSB7CiAgICAgICB2YWwgPSBlLnRhcmdldC52YWx1ZTsK ICAgICB9CiAKQEAgLTExOCwxMyArMTIzLDEzIEBAIGZ1bmN0aW9uIE1hcHBlZENlbGxDb250cm9s QmFzZSh7Y2VsbCwgdmFsdWUsIGlkLCBvcHRpb25zTG9hZGVkLCBvbkNlbGxDaGFuZ2UsIHZpCiAg IC8qIFNvbWUgZ3JpZCBjZWxscyBhcmUgYmFzZWQgb24gb3B0aW9ucyBzZWxlY3RlZCBpbiBvdGhl ciBjZWxscy4KICAgICogbGV0cyB0cmlnZ2VyIGEgcmUtcmVuZGVyIGZvciB0aGUgcm93IGlmIG9w dGlvbnNMb2FkZWQKICAgICovCi0gIGNvbnN0IG9wdGlvbnNMb2FkZWRSZXJlbmRlciA9IHVzZUNh bGxiYWNrKChyZXMpPT57CisgIGNvbnN0IG9wdGlvbnNMb2FkZWRSZXJlbmRlciA9IHVzZUNhbGxi YWNrKChyZXMpID0+IHsKICAgICAvKiBvcHRpb25zTG9hZGVkIGlzIGNhbGxlZCB3aGVuIHNlbGVj dCBvcHRpb25zIGFyZSBmZXRjaGVkICovCiAgICAgb3B0aW9uc0xvYWRlZCAmJiBvcHRpb25zTG9h ZGVkKHJlcyk7CiAgICAgcmVSZW5kZXJSb3cgJiYgcmVSZW5kZXJSb3coKTsKICAgfSwgW10pOwog Ci0gIGlmKCF2aXNpYmxlKSB7CisgIGlmICghdmlzaWJsZSkgewogICAgIHJldHVybiA8PjwvPjsK ICAgfQogCkBAIC0xNDIsNyArMTQ3LDcgQEAgZnVuY3Rpb24gTWFwcGVkQ2VsbENvbnRyb2xCYXNl KHtjZWxsLCB2YWx1ZSwgaWQsIG9wdGlvbnNMb2FkZWQsIG9uQ2VsbENoYW5nZSwgdmkKICAgICBy ZXR1cm4gPElucHV0U2VsZWN0IG5hbWU9e25hbWV9IHZhbHVlPXt2YWx1ZX0gb25DaGFuZ2U9e29u VGV4dENoYW5nZX0gb3B0aW9uc0xvYWRlZD17b3B0aW9uc0xvYWRlZFJlcmVuZGVyfSB7Li4ucHJv cHN9Lz47CiAgIGNhc2UgJ3N3aXRjaCc6CiAgICAgcmV0dXJuIDxJbnB1dFN3aXRjaCBuYW1lPXtu YW1lfSB2YWx1ZT17dmFsdWV9Ci0gICAgICBvbkNoYW5nZT17KGUpPT5vblRleHRDaGFuZ2UoZS50 YXJnZXQuY2hlY2tlZCwgZS50YXJnZXQubmFtZSl9IHsuLi5wcm9wc30gLz47CisgICAgICBvbkNo YW5nZT17KGUpPT5vblRleHRDaGFuZ2UoZS50YXJnZXQuY2hlY2tlZCwgZS50YXJnZXQubmFtZSl9 IGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH0gey4uLnByb3BzfSAvPjsKICAgY2FzZSAnY2hlY2ti b3gnOgogICAgIHJldHVybiA8SW5wdXRDaGVja2JveCBuYW1lPXtuYW1lfSB2YWx1ZT17dmFsdWV9 CiAgICAgICBvbkNoYW5nZT17KGUpPT5vblRleHRDaGFuZ2UoZS50YXJnZXQuY2hlY2tlZCwgZS50 YXJnZXQubmFtZSl9IHsuLi5wcm9wc30gLz47CkBAIC0xNTIsNiArMTU3LDEwIEBAIGZ1bmN0aW9u IE1hcHBlZENlbGxDb250cm9sQmFzZSh7Y2VsbCwgdmFsdWUsIGlkLCBvcHRpb25zTG9hZGVkLCBv bkNlbGxDaGFuZ2UsIHZpCiAgICAgcmV0dXJuIDxJbnB1dERhdGVUaW1lUGlja2VyIG5hbWU9e25h bWV9IHZhbHVlPXt2YWx1ZX0gb25DaGFuZ2U9e29uVGV4dENoYW5nZX0gey4uLnByb3BzfS8+Owog ICBjYXNlICdzcWwnOgogICAgIHJldHVybiA8SW5wdXRTUUwgbmFtZT17bmFtZX0gdmFsdWU9e3Zh bHVlfSBvbkNoYW5nZT17b25TcWxDaGFuZ2V9IHsuLi5wcm9wc30gLz47CisgIGNhc2UgJ2ZpbGUn OgorICAgIHJldHVybiA8SW5wdXRGaWxlU2VsZWN0IG5hbWU9e25hbWV9IHZhbHVlPXt2YWx1ZX0g b25DaGFuZ2U9e29uVGV4dENoYW5nZX0gaW5wdXRSZWY9e3Byb3BzLmlucHV0UmVmfSB7Li4ucHJv cHN9IC8+OworICBjYXNlICdrZXlDb2RlJzoKKyAgICByZXR1cm4gPElucHV0VGV4dCBuYW1lPXtu YW1lfSB2YWx1ZT17dmFsdWV9IG9uQ2hhbmdlPXtvblRleHRDaGFuZ2V9IHsuLi5wcm9wc30gdHlw ZT0ndGV4dCcgbWF4bGVuZ3RoPXsxfSAvPjsKICAgZGVmYXVsdDoKICAgICByZXR1cm4gPFBsYWlu U3RyaW5nIHZhbHVlPXt2YWx1ZX0gey4uLnByb3BzfSAvPjsKICAgfQpAQCAtMTY3LDE0ICsxNzYs MTYgQEAgTWFwcGVkQ2VsbENvbnRyb2xCYXNlLnByb3BUeXBlcyA9IHsKICAgcmVSZW5kZXJSb3c6 IFByb3BUeXBlcy5mdW5jLAogICBvcHRpb25zTG9hZGVkOiBQcm9wVHlwZXMuZnVuYywKICAgb25D ZWxsQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYywKLSAgdmlzaWJsZTogUHJvcFR5cGVzLmJvb2wKKyAg dmlzaWJsZTogUHJvcFR5cGVzLmJvb2wsCisgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCwKKyAg aW5wdXRSZWY6IEN1c3RvbVByb3BUeXBlcy5yZWYsCiB9OwogCiBjb25zdCBBTExPV0VEX1BST1BT X0ZJRUxEX0NPTU1PTiA9IFsKICAgJ21vZGUnLCAndmFsdWUnLCAncmVhZG9ubHknLCAnZGlzYWJs ZWQnLCAnaGFzRXJyb3InLCAnaWQnLAogICAnbGFiZWwnLCAnb3B0aW9ucycsICdvcHRpb25zTG9h ZGVkJywgJ2NvbnRyb2xQcm9wcycsICdzY2hlbWEnLCAnaW5wdXRSZWYnLAogICAndmlzaWJsZScs ICdhdXRvRm9jdXMnLCAnaGVscE1lc3NhZ2UnLCAnY2xhc3NOYW1lJywgJ29wdGlvbnNSZWxvYWRC YXNpcycsCi0gICdvcmllbnRhdGlvbicKKyAgJ29yaWVudGF0aW9uJywgJ2lzdmFsaWRhdGUnLCAn ZmllbGRzJwogXTsKIAogY29uc3QgQUxMT1dFRF9QUk9QU19GSUVMRF9GT1JNID0gWwpAQCAtMTgy LDE0ICsxOTMsMTQgQEAgY29uc3QgQUxMT1dFRF9QUk9QU19GSUVMRF9GT1JNID0gWwogXTsKIAog Y29uc3QgQUxMT1dFRF9QUk9QU19GSUVMRF9DRUxMID0gWwotICAnY2VsbCcsICdvbkNlbGxDaGFu Z2UnLCAncm93JywgJ3JlUmVuZGVyUm93JywKKyAgJ2NlbGwnLCAnb25DZWxsQ2hhbmdlJywgJ3Jv dycsICdyZVJlbmRlclJvdycsICd2YWxpZGF0ZScsICdkaXNhYmxlZCcsICdyZWFkb25seScKIF07 CiAKIAotZXhwb3J0IGNvbnN0IE1hcHBlZEZvcm1Db250cm9sID0gKHByb3BzKT0+ewotICBsZXQg bmV3UHJvcHMgPSB7Li4ucHJvcHN9OworZXhwb3J0IGNvbnN0IE1hcHBlZEZvcm1Db250cm9sID0g KHByb3BzKSA9PiB7CisgIGxldCBuZXdQcm9wcyA9IHsgLi4ucHJvcHMgfTsKICAgbGV0IHR5cGVQ cm9wcyA9IGV2YWxGdW5jKG51bGwsIG5ld1Byb3BzLnR5cGUsIG5ld1Byb3BzLnN0YXRlKTsKLSAg aWYodHlwZW9mKHR5cGVQcm9wcykgPT09ICdvYmplY3QnKSB7CisgIGlmICh0eXBlb2YgKHR5cGVQ cm9wcykgPT09ICdvYmplY3QnKSB7CiAgICAgbmV3UHJvcHMgPSB7CiAgICAgICAuLi5uZXdQcm9w cywKICAgICAgIC4uLnR5cGVQcm9wcywKQEAgLTE5OSwxMyArMjEwLDEzIEBAIGV4cG9ydCBjb25z dCBNYXBwZWRGb3JtQ29udHJvbCA9IChwcm9wcyk9PnsKICAgfQogCiAgIC8qIEZpbHRlciBvdXQg Z2FyYmFnZSBwcm9wcyBpZiBhbnkgdXNpbmcgQUxMT1dFRF9QUk9QU19GSUVMRCAqLwotICByZXR1 cm4gPE1hcHBlZEZvcm1Db250cm9sQmFzZSB7Li4uXy5waWNrKG5ld1Byb3BzLCBfLnVuaW9uKEFM TE9XRURfUFJPUFNfRklFTERfQ09NTU9OLCBBTExPV0VEX1BST1BTX0ZJRUxEX0ZPUk0pKX0vPjsK KyAgcmV0dXJuIDxNYXBwZWRGb3JtQ29udHJvbEJhc2Ugey4uLl8ucGljayhuZXdQcm9wcywgXy51 bmlvbihBTExPV0VEX1BST1BTX0ZJRUxEX0NPTU1PTiwgQUxMT1dFRF9QUk9QU19GSUVMRF9GT1JN KSl9IC8+OwogfTsKIAotZXhwb3J0IGNvbnN0IE1hcHBlZENlbGxDb250cm9sID0gKHByb3BzKT0+ ewotICBsZXQgbmV3UHJvcHMgPSB7Li4ucHJvcHN9OworZXhwb3J0IGNvbnN0IE1hcHBlZENlbGxD b250cm9sID0gKHByb3BzKSA9PiB7CisgIGxldCBuZXdQcm9wcyA9IHsgLi4ucHJvcHMgfTsKICAg bGV0IGNlbGxQcm9wcyA9IGV2YWxGdW5jKG51bGwsIG5ld1Byb3BzLmNlbGwsIG5ld1Byb3BzLnJv dyk7Ci0gIGlmKHR5cGVvZihjZWxsUHJvcHMpID09PSAnb2JqZWN0JykgeworICBpZiAodHlwZW9m IChjZWxsUHJvcHMpID09PSAnb2JqZWN0JykgewogICAgIG5ld1Byb3BzID0gewogICAgICAgLi4u bmV3UHJvcHMsCiAgICAgICAuLi5jZWxsUHJvcHMsCkBAIC0yMTUsNSArMjI2LDUgQEAgZXhwb3J0 IGNvbnN0IE1hcHBlZENlbGxDb250cm9sID0gKHByb3BzKT0+ewogICB9CiAKICAgLyogRmlsdGVy IG91dCBnYXJiYWdlIHByb3BzIGlmIGFueSB1c2luZyBBTExPV0VEX1BST1BTX0ZJRUxEICovCi0g IHJldHVybiA8TWFwcGVkQ2VsbENvbnRyb2xCYXNlIHsuLi5fLnBpY2sobmV3UHJvcHMsIF8udW5p b24oQUxMT1dFRF9QUk9QU19GSUVMRF9DT01NT04sIEFMTE9XRURfUFJPUFNfRklFTERfQ0VMTCkp fS8+OworICByZXR1cm4gPE1hcHBlZENlbGxDb250cm9sQmFzZSB7Li4uXy5waWNrKG5ld1Byb3Bz LCBfLnVuaW9uKEFMTE9XRURfUFJPUFNfRklFTERfQ09NTU9OLCBBTExPV0VEX1BST1BTX0ZJRUxE X0NFTEwpKX0gLz47CiB9OwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL1NjaGVt YVZpZXcvaW5kZXguanN4IGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL1NjaGVtYVZpZXcvaW5kZXgu anN4CmluZGV4IDhiMjBkNWY1Li4zZmViYjEwMyAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vc3Rh dGljL2pzL1NjaGVtYVZpZXcvaW5kZXguanN4CisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9T Y2hlbWFWaWV3L2luZGV4LmpzeApAQCAtMTA4LDcgKzEwOCw3IEBAIGZ1bmN0aW9uIGdldENoYW5n ZWREYXRhKHRvcFNjaGVtYSwgdmlld0hlbHBlclByb3BzLCBzZXNzRGF0YSwgc3RyaW5naWZ5PWZh bHNlLCBpCiAKICAgICAvKiBUaGUgY29tcGFyYXRvciBhbmQgc2V0dGVyICovCiAgICAgY29uc3Qg YXR0ckNoYW5nZWQgPSAoaWQsIGNoYW5nZSwgZm9yY2U9ZmFsc2UpPT57Ci0gICAgICBpZihpc1Zh bHVlRXF1YWwoXy5nZXQob3JpZ1ZhbCwgaWQpLCBfLmdldChzZXNzVmFsLCBpZCkpICYmICFmb3Jj ZSkgeworICAgICAgaWYoaXNWYWx1ZUVxdWFsKF8uZ2V0KG9yaWdWYWwsIGlkKSwgXy5nZXQoc2Vz c1ZhbCwgaWQpKSAmJiAhZm9yY2UgJiYgKF8uaXNPYmplY3QoXy5nZXQob3JpZ1ZhbCwgaWQpKSAm JiBfLmlzRXF1YWwoXy5nZXQob3JpZ1ZhbCwgaWQpLCBfLmdldChzZXNzRGF0YSwgaWQpKSkpIHsK ICAgICAgICAgcmV0dXJuOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgY2hhbmdlID0gY2hhbmdl IHx8IF8uZ2V0KHNlc3NWYWwsIGlkKTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9q cy9jb21wb25lbnRzL0Zvcm1Db21wb25lbnRzLmpzeCBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9j b21wb25lbnRzL0Zvcm1Db21wb25lbnRzLmpzeAppbmRleCBjZGNmYWI2NC4uN2Y2OWJjZjQgMTAw NjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9jb21wb25lbnRzL0Zvcm1Db21wb25lbnRz LmpzeAorKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvY29tcG9uZW50cy9Gb3JtQ29tcG9uZW50 cy5qc3gKQEAgLTEwLDggKzEwLDEwIEBACiAKIGltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCB1 c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnOwog aW1wb3J0IHsgbWFrZVN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL3N0eWxlcyc7Ci1p bXBvcnQgeyBCb3gsIEZvcm1Db250cm9sLCBPdXRsaW5lZElucHV0LCBGb3JtSGVscGVyVGV4dCwK LSAgR3JpZCwgSWNvbkJ1dHRvbiwgRm9ybUNvbnRyb2xMYWJlbCwgU3dpdGNoLCBDaGVja2JveCwg dXNlVGhlbWUsIElucHV0TGFiZWwsIFBhcGVyLCBTZWxlY3QgYXMgTXVpU2VsZWN0IH0gZnJvbSAn QG1hdGVyaWFsLXVpL2NvcmUnOworaW1wb3J0IHsKKyAgQm94LCBGb3JtQ29udHJvbCwgT3V0bGlu ZWRJbnB1dCwgRm9ybUhlbHBlclRleHQsCisgIEdyaWQsIEljb25CdXR0b24sIEZvcm1Db250cm9s TGFiZWwsIFN3aXRjaCwgQ2hlY2tib3gsIHVzZVRoZW1lLCBJbnB1dExhYmVsLCBQYXBlciwgU2Vs ZWN0IGFzIE11aVNlbGVjdAorfSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZSc7CiBpbXBvcnQgeyBU b2dnbGVCdXR0b24sIFRvZ2dsZUJ1dHRvbkdyb3VwIH0gZnJvbSAnQG1hdGVyaWFsLXVpL2xhYic7 CiBpbXBvcnQgRXJyb3JSb3VuZGVkSWNvbiBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvRXJyb3JP dXRsaW5lUm91bmRlZCc7CiBpbXBvcnQgSW5mb1JvdW5kZWRJY29uIGZyb20gJ0BtYXRlcmlhbC11 aS9pY29ucy9JbmZvUm91bmRlZCc7CkBAIC0yMCwxMyArMjIsMTQgQEAgaW1wb3J0IENoZWNrUm91 bmRlZEljb24gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0NoZWNrUm91bmRlZCc7CiBpbXBvcnQg V2FybmluZ1JvdW5kZWRJY29uIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9XYXJuaW5nUm91bmRl ZCc7CiBpbXBvcnQgRm9sZGVyT3BlblJvdW5kZWRJY29uIGZyb20gJ0BtYXRlcmlhbC11aS9pY29u cy9Gb2xkZXJPcGVuUm91bmRlZCc7CiBpbXBvcnQgRGVzY3JpcHRpb25JY29uIGZyb20gJ0BtYXRl cmlhbC11aS9pY29ucy9EZXNjcmlwdGlvbic7Ci1pbXBvcnQgU2VsZWN0LCB7Y29tcG9uZW50cyBh cyBSU0NvbXBvbmVudHN9IGZyb20gJ3JlYWN0LXNlbGVjdCc7CitpbXBvcnQgQXNzaWdubWVudFR1 cm5lZEluIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9Bc3NpZ25tZW50VHVybmVkSW4nOworaW1w b3J0IFNlbGVjdCwgeyBjb21wb25lbnRzIGFzIFJTQ29tcG9uZW50cyB9IGZyb20gJ3JlYWN0LXNl bGVjdCc7CiBpbXBvcnQgQ3JlYXRhYmxlU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9jcmVhdGFi bGUnOwogaW1wb3J0IFBpY2tyIGZyb20gJ0BzaW1vbndlcC9waWNrcic7CiBpbXBvcnQgY2xzeCBm cm9tICdjbHN4JzsKIGltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7CiBpbXBvcnQg SFRNTFJlYWN0UGFyc2UgZnJvbSAnaHRtbC1yZWFjdC1wYXJzZXInOwotaW1wb3J0IHsgS2V5Ym9h cmREYXRlVGltZVBpY2tlciwgS2V5Ym9hcmREYXRlUGlja2VyLCBLZXlib2FyZFRpbWVQaWNrZXIs IE11aVBpY2tlcnNVdGlsc1Byb3ZpZGVyfSBmcm9tICdAbWF0ZXJpYWwtdWkvcGlja2Vycyc7Citp bXBvcnQgeyBLZXlib2FyZERhdGVUaW1lUGlja2VyLCBLZXlib2FyZERhdGVQaWNrZXIsIEtleWJv YXJkVGltZVBpY2tlciwgTXVpUGlja2Vyc1V0aWxzUHJvdmlkZXIgfSBmcm9tICdAbWF0ZXJpYWwt dWkvcGlja2Vycyc7CiBpbXBvcnQgRGF0ZUZuc1V0aWxzIGZyb20gJ0BkYXRlLWlvL2RhdGUtZm5z JzsKIGltcG9ydCAqIGFzIERhdGVGbnMgZnJvbSAnZGF0ZS1mbnMnOwogCkBAIC0zNiw2ICszOSw4 IEBAIGltcG9ydCB7IHNob3dGaWxlRGlhbG9nIH0gZnJvbSAnLi4vaGVscGVycy9sZWdhY3lDb25u ZWN0b3InOwogaW1wb3J0IF8gZnJvbSAnbG9kYXNoJzsKIGltcG9ydCB7IERlZmF1bHRCdXR0b24s IFByaW1hcnlCdXR0b24sIFBnSWNvbkJ1dHRvbiB9IGZyb20gJy4vQnV0dG9ucyc7CiBpbXBvcnQg Q3VzdG9tUHJvcFR5cGVzIGZyb20gJy4uL2N1c3RvbV9wcm9wX3R5cGVzJzsKK2ltcG9ydCBLZXli b2FyZFNob3J0Y3V0cyBmcm9tICcuL0tleWJvYXJkU2hvcnRjdXRzJzsKK2ltcG9ydCBRdWVyeVRo cmVzaG9sZHMgZnJvbSAnLi9RdWVyeVRocmVzaG9sZHMnOwogCiAKIGNvbnN0IHVzZVN0eWxlcyA9 IG1ha2VTdHlsZXMoKHRoZW1lKSA9PiAoewpAQCAtNTUsNyArNjAsNyBAQCBjb25zdCB1c2VTdHls ZXMgPSBtYWtlU3R5bGVzKCh0aGVtZSkgPT4gKHsKICAgICBtYXJnaW46IHRoZW1lLnNwYWNpbmco MC43NSwgMC43NSwgMC43NSwgMC43NSksCiAgICAgZGlzcGxheTogJ2ZsZXgnLAogICB9LAotICBm b3JtTGFiZWxFcnJvcjogIHsKKyAgZm9ybUxhYmVsRXJyb3I6IHsKICAgICBjb2xvcjogdGhlbWUu cGFsZXR0ZS5lcnJvci5tYWluLAogICB9LAogICBzcWw6IHsKQEAgLTk1LDE3ICsxMDAsMTcgQEAg ZXhwb3J0IGNvbnN0IE1FU1NBR0VfVFlQRSA9IHsKIH07CiAKIC8qIEljb24gYmFzZWQgb24gTUVT U0FHRV9UWVBFICovCi1mdW5jdGlvbiBGb3JtSWNvbih7dHlwZSwgY2xvc2U9ZmFsc2UsIC4uLnBy b3BzfSkgeworZnVuY3Rpb24gRm9ybUljb24oeyB0eXBlLCBjbG9zZSA9IGZhbHNlLCAuLi5wcm9w cyB9KSB7CiAgIGxldCBUaGVJY29uID0gbnVsbDsKLSAgaWYoY2xvc2UpIHsKKyAgaWYgKGNsb3Nl KSB7CiAgICAgVGhlSWNvbiA9IENsb3NlSWNvbjsKLSAgfSBlbHNlIGlmKHR5cGUgPT09IE1FU1NB R0VfVFlQRS5TVUNDRVNTKSB7CisgIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVTU0FHRV9UWVBFLlNV Q0NFU1MpIHsKICAgICBUaGVJY29uID0gQ2hlY2tSb3VuZGVkSWNvbjsKLSAgfSBlbHNlIGlmKHR5 cGUgPT09IE1FU1NBR0VfVFlQRS5FUlJPUikgeworICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FU1NB R0VfVFlQRS5FUlJPUikgewogICAgIFRoZUljb24gPSBFcnJvclJvdW5kZWRJY29uOwotICB9IGVs c2UgaWYodHlwZSA9PT0gTUVTU0FHRV9UWVBFLklORk8pIHsKKyAgfSBlbHNlIGlmICh0eXBlID09 PSBNRVNTQUdFX1RZUEUuSU5GTykgewogICAgIFRoZUljb24gPSBJbmZvUm91bmRlZEljb247Ci0g IH0gZWxzZSBpZih0eXBlID09PSBNRVNTQUdFX1RZUEUuV0FSTklORykgeworICB9IGVsc2UgaWYg KHR5cGUgPT09IE1FU1NBR0VfVFlQRS5XQVJOSU5HKSB7CiAgICAgVGhlSWNvbiA9IFdhcm5pbmdS b3VuZGVkSWNvbjsKICAgfQogCkBAIC0xMTcsMjEgKzEyMiwyMSBAQCBGb3JtSWNvbi5wcm9wVHlw ZXMgPSB7CiB9OwogCiAvKiBXcmFwcGVyIG9uIGFueSBmb3JtIGNvbXBvbmVudCB0byBhZGQgbGFi ZWwsIGVycm9yIGluZGljYXRvciBhbmQgaGVscCBtZXNzYWdlICovCi1leHBvcnQgZnVuY3Rpb24g Rm9ybUlucHV0KHtjaGlsZHJlbiwgZXJyb3IsIGNsYXNzTmFtZSwgbGFiZWwsIGhlbHBNZXNzYWdl LCByZXF1aXJlZCwgdGVzdGNpZH0pIHsKK2V4cG9ydCBmdW5jdGlvbiBGb3JtSW5wdXQoeyBjaGls ZHJlbiwgZXJyb3IsIGNsYXNzTmFtZSwgbGFiZWwsIGhlbHBNZXNzYWdlLCByZXF1aXJlZCwgdGVz dGNpZCB9KSB7CiAgIGNvbnN0IGNsYXNzZXMgPSB1c2VTdHlsZXMoKTsKICAgY29uc3QgY2lkID0g dGVzdGNpZCB8fCBfLnVuaXF1ZUlkKCdjJyk7CiAgIGNvbnN0IGhlbHBpZCA9IGBoJHtjaWR9YDsK ICAgcmV0dXJuICgKICAgICA8R3JpZCBjb250YWluZXIgc3BhY2luZz17MH0gY2xhc3NOYW1lPXtj bGFzc05hbWV9PgogICAgICAgPEdyaWQgaXRlbSBsZz17M30gbWQ9ezN9IHNtPXszfSB4cz17MTJ9 PgotICAgICAgICA8SW5wdXRMYWJlbCBodG1sRm9yPXtjaWR9IGNsYXNzTmFtZT17Y2xzeChjbGFz c2VzLmZvcm1MYWJlbCwgZXJyb3I/Y2xhc3Nlcy5mb3JtTGFiZWxFcnJvciA6IG51bGwpfSByZXF1 aXJlZD17cmVxdWlyZWR9PgorICAgICAgICA8SW5wdXRMYWJlbCBodG1sRm9yPXtjaWR9IGNsYXNz TmFtZT17Y2xzeChjbGFzc2VzLmZvcm1MYWJlbCwgZXJyb3IgPyBjbGFzc2VzLmZvcm1MYWJlbEVy cm9yIDogbnVsbCl9IHJlcXVpcmVkPXtyZXF1aXJlZH0+CiAgICAgICAgICAge2xhYmVsfQotICAg ICAgICAgIDxGb3JtSWNvbiB0eXBlPXtNRVNTQUdFX1RZUEUuRVJST1J9IHN0eWxlPXt7bWFyZ2lu TGVmdDogJ2F1dG8nLCB2aXNpYmlsaXR5OiBlcnJvciA/ICd1bnNldCcgOiAnaGlkZGVuJ319Lz4K KyAgICAgICAgICA8Rm9ybUljb24gdHlwZT17TUVTU0FHRV9UWVBFLkVSUk9SfSBzdHlsZT17eyBt YXJnaW5MZWZ0OiAnYXV0bycsIHZpc2liaWxpdHk6IGVycm9yID8gJ3Vuc2V0JyA6ICdoaWRkZW4n IH19IC8+CiAgICAgICAgIDwvSW5wdXRMYWJlbD4KICAgICAgIDwvR3JpZD4KICAgICAgIDxHcmlk IGl0ZW0gbGc9ezl9IG1kPXs5fSBzbT17OX0geHM9ezEyfT4KICAgICAgICAgPEZvcm1Db250cm9s IGVycm9yPXtCb29sZWFuKGVycm9yKX0gZnVsbFdpZHRoPgotICAgICAgICAgIHtSZWFjdC5jbG9u ZUVsZW1lbnQoY2hpbGRyZW4sIHtjaWQsIGhlbHBpZH0pfQorICAgICAgICAgIHtSZWFjdC5jbG9u ZUVsZW1lbnQoY2hpbGRyZW4sIHsgY2lkLCBoZWxwaWQgfSl9CiAgICAgICAgIDwvRm9ybUNvbnRy b2w+CiAgICAgICAgIDxGb3JtSGVscGVyVGV4dCBpZD17aGVscGlkfSB2YXJpYW50PSJvdXRsaW5l ZCI+e0hUTUxSZWFjdFBhcnNlKGhlbHBNZXNzYWdlIHx8ICcnKX08L0Zvcm1IZWxwZXJUZXh0Pgog ICAgICAgPC9HcmlkPgpAQCAtMTQ4LDE3ICsxNTMsMjIgQEAgRm9ybUlucHV0LnByb3BUeXBlcyA9 IHsKICAgdGVzdGNpZDogUHJvcFR5cGVzLmFueSwKIH07CiAKLWV4cG9ydCBmdW5jdGlvbiBJbnB1 dFNRTCh7dmFsdWUsIG9uQ2hhbmdlLCBjbGFzc05hbWUsIGNvbnRyb2xQcm9wcywgLi4ucHJvcHN9 KSB7CitleHBvcnQgZnVuY3Rpb24gSW5wdXRTUUwoeyB2YWx1ZSwgb3B0aW9ucywgb25DaGFuZ2Us IGNsYXNzTmFtZSwgY29udHJvbFByb3BzLCAuLi5wcm9wcyB9KSB7CiAgIGNvbnN0IGNsYXNzZXMg PSB1c2VTdHlsZXMoKTsKICAgY29uc3QgZWRpdG9yID0gdXNlUmVmKCk7CiAKICAgcmV0dXJuICgK ICAgICA8Q29kZU1pcnJvcgotICAgICAgY3VyckVkaXRvcj17KG9iaik9PmVkaXRvci5jdXJyZW50 PW9ian0KLSAgICAgIHZhbHVlPXt2YWx1ZXx8Jyd9CisgICAgICBjdXJyRWRpdG9yPXsob2JqKSA9 PiBlZGl0b3IuY3VycmVudCA9IG9ian0KKyAgICAgIHZhbHVlPXt2YWx1ZSB8fCAnJ30KKyAgICAg IG9wdGlvbnM9e3sKKyAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCisgICAgICAgIG1vZGU6ICd0 ZXh0L3gtcGdzcWwnLAorICAgICAgICAuLi5vcHRpb25zLAorICAgICAgfX0KICAgICAgIGNsYXNz TmFtZT17Y2xzeChjbGFzc2VzLnNxbCwgY2xhc3NOYW1lKX0KICAgICAgIGV2ZW50cz17ewotICAg ICAgICBjaGFuZ2U6IChjbSk9PnsKKyAgICAgICAgY2hhbmdlOiAoY20pID0+IHsKICAgICAgICAg ICBvbkNoYW5nZSAmJiBvbkNoYW5nZShjbS5nZXRWYWx1ZSgpKTsKICAgICAgICAgfSwKICAgICAg IH19CkBAIC0xNzYsMTMgKzE4NiwxMyBAQCBJbnB1dFNRTC5wcm9wVHlwZXMgPSB7CiAgIGNvbnRy b2xQcm9wczogUHJvcFR5cGVzLm9iamVjdCwKIH07CiAKLWV4cG9ydCBmdW5jdGlvbiBGb3JtSW5w dXRTUUwoe2hhc0Vycm9yLCByZXF1aXJlZCwgbGFiZWwsIGNsYXNzTmFtZSwgaGVscE1lc3NhZ2Us IHRlc3RjaWQsIHZhbHVlLCBub0xhYmVsLCAuLi5wcm9wc30pIHsKLSAgaWYobm9MYWJlbCkgewot ICAgIHJldHVybiA8SW5wdXRTUUwgdmFsdWU9e3ZhbHVlfSB7Li4ucHJvcHN9Lz47CitleHBvcnQg ZnVuY3Rpb24gRm9ybUlucHV0U1FMKHsgaGFzRXJyb3IsIHJlcXVpcmVkLCBsYWJlbCwgY2xhc3NO YW1lLCBoZWxwTWVzc2FnZSwgdGVzdGNpZCwgdmFsdWUsIGNvbnRyb2xQcm9wcywgbm9MYWJlbCwg Li4ucHJvcHMgfSkgeworICBpZiAobm9MYWJlbCkgeworICAgIHJldHVybiA8SW5wdXRTUUwgdmFs dWU9e3ZhbHVlfSBvcHRpb25zPXtjb250cm9sUHJvcHN9IHsuLi5wcm9wc30gLz47CiAgIH0gZWxz ZSB7CiAgICAgcmV0dXJuICgKICAgICAgIDxGb3JtSW5wdXQgcmVxdWlyZWQ9e3JlcXVpcmVkfSBs YWJlbD17bGFiZWx9IGVycm9yPXtoYXNFcnJvcn0gY2xhc3NOYW1lPXtjbGFzc05hbWV9IGhlbHBN ZXNzYWdlPXtoZWxwTWVzc2FnZX0gdGVzdGNpZD17dGVzdGNpZH0gPgotICAgICAgICA8SW5wdXRT UUwgdmFsdWU9e3ZhbHVlfSB7Li4ucHJvcHN9Lz4KKyAgICAgICAgPElucHV0U1FMIHZhbHVlPXt2 YWx1ZX0gb3B0aW9ucz17Y29udHJvbFByb3BzfSB7Li4ucHJvcHN9IC8+CiAgICAgICA8L0Zvcm1J bnB1dD4KICAgICApOwogICB9CkBAIC0yMDgsNyArMjE4LDcgQEAgY29uc3QgREFURV9USU1FX0ZP Uk1BVCA9IHsKICAgVElNRV8yNDogJ0hIOm1tOnNzJywKIH07CiAKLWV4cG9ydCBmdW5jdGlvbiBJ bnB1dERhdGVUaW1lUGlja2VyKHt2YWx1ZSwgb25DaGFuZ2UsIHJlYWRvbmx5LCBjb250cm9sUHJv cHMsIC4uLnByb3BzfSkgeworZXhwb3J0IGZ1bmN0aW9uIElucHV0RGF0ZVRpbWVQaWNrZXIoeyB2 YWx1ZSwgb25DaGFuZ2UsIHJlYWRvbmx5LCBjb250cm9sUHJvcHMsIC4uLnByb3BzIH0pIHsKICAg bGV0IGZvcm1hdCA9ICcnOwogICBsZXQgcGxhY2Vob2xkZXIgPSAnJzsKICAgaWYgKGNvbnRyb2xQ cm9wcz8ucGlja2VyVHlwZSA9PT0gJ0RhdGUnKSB7CkBAIC0yMjIsMTUgKzIzMiwxNSBAQCBleHBv cnQgZnVuY3Rpb24gSW5wdXREYXRlVGltZVBpY2tlcih7dmFsdWUsIG9uQ2hhbmdlLCByZWFkb25s eSwgY29udHJvbFByb3BzLCAuLgogICAgIHBsYWNlaG9sZGVyID0gY29udHJvbFByb3BzLnBsYWNl aG9sZGVyIHx8ICdZWVlZLU1NLUREIEhIOm1tOnNzIFonOwogICB9CiAKLSAgY29uc3QgaGFuZGxl Q2hhbmdlID0gKGRhdGVWYWwsIHN0cmluZ1ZhbCk9PiB7CisgIGNvbnN0IGhhbmRsZUNoYW5nZSA9 IChkYXRlVmFsLCBzdHJpbmdWYWwpID0+IHsKICAgICBvbkNoYW5nZShzdHJpbmdWYWwpOwogICB9 OwogCiAgIC8qIFZhbHVlIHNob3VsZCBiZSBhIGRhdGUgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaW5n ICovCiAgIHZhbHVlID0gXy5pc1VuZGVmaW5lZCh2YWx1ZSkgPyBudWxsIDogdmFsdWU7Ci0gIGlm KCFfLmlzTnVsbCh2YWx1ZSkpIHsKKyAgaWYgKCFfLmlzTnVsbCh2YWx1ZSkpIHsKICAgICBsZXQg cGFyc2VWYWx1ZSA9IERhdGVGbnMucGFyc2UodmFsdWUsIGZvcm1hdCwgbmV3IERhdGUoKSk7Ci0g ICAgaWYoIURhdGVGbnMuaXNWYWxpZChwYXJzZVZhbHVlKSkgeworICAgIGlmICghRGF0ZUZucy5p c1ZhbGlkKHBhcnNlVmFsdWUpKSB7CiAgICAgICBwYXJzZVZhbHVlID0gRGF0ZUZucy5wYXJzZUlT Tyh2YWx1ZSk7CiAgICAgfQogICAgIHZhbHVlID0gIURhdGVGbnMuaXNWYWxpZChwYXJzZVZhbHVl KSA/IHZhbHVlIDogcGFyc2VWYWx1ZTsKQEAgLTIzOCw3ICsyNDgsNyBAQCBleHBvcnQgZnVuY3Rp b24gSW5wdXREYXRlVGltZVBpY2tlcih7dmFsdWUsIG9uQ2hhbmdlLCByZWFkb25seSwgY29udHJv bFByb3BzLCAuLgogCiAgIGlmIChyZWFkb25seSkgewogICAgIHJldHVybiAoPElucHV0VGV4dCB2 YWx1ZT17dmFsdWUgPyBEYXRlRm5zLmZvcm1hdCh2YWx1ZSwgZm9ybWF0KSA6IHZhbHVlfQotICAg ICAgcmVhZG9ubHk9e3JlYWRvbmx5fSBjb250cm9sUHJvcHM9e3twbGFjZWhvbGRlcjogY29udHJv bFByb3BzLnBsYWNlaG9sZGVyfX0gey4uLnByb3BzfS8+KTsKKyAgICAgIHJlYWRvbmx5PXtyZWFk b25seX0gY29udHJvbFByb3BzPXt7IHBsYWNlaG9sZGVyOiBjb250cm9sUHJvcHMucGxhY2Vob2xk ZXIgfX0gey4uLnByb3BzfSAvPik7CiAgIH0KIAogICBsZXQgY29tbW9uUHJvcHMgPSB7CkBAIC0y NjIsMjAgKzI3MiwyMCBAQCBleHBvcnQgZnVuY3Rpb24gSW5wdXREYXRlVGltZVBpY2tlcih7dmFs dWUsIG9uQ2hhbmdlLCByZWFkb25seSwgY29udHJvbFByb3BzLCAuLgogICBpZiAoY29udHJvbFBy b3BzPy5waWNrZXJUeXBlID09PSAnRGF0ZScpIHsKICAgICByZXR1cm4gKAogICAgICAgPE11aVBp Y2tlcnNVdGlsc1Byb3ZpZGVyIHV0aWxzPXtEYXRlRm5zVXRpbHN9PgotICAgICAgICA8S2V5Ym9h cmREYXRlUGlja2VyIHsuLi5jb21tb25Qcm9wc30vPgorICAgICAgICA8S2V5Ym9hcmREYXRlUGlj a2VyIHsuLi5jb21tb25Qcm9wc30gLz4KICAgICAgIDwvTXVpUGlja2Vyc1V0aWxzUHJvdmlkZXI+ CiAgICAgKTsKICAgfSBlbHNlIGlmIChjb250cm9sUHJvcHM/LnBpY2tlclR5cGUgPT09ICdUaW1l JykgewogICAgIHJldHVybiAoCiAgICAgICA8TXVpUGlja2Vyc1V0aWxzUHJvdmlkZXIgdXRpbHM9 e0RhdGVGbnNVdGlsc30+Ci0gICAgICAgIDxLZXlib2FyZFRpbWVQaWNrZXIgey4uLmNvbW1vblBy b3BzfS8+CisgICAgICAgIDxLZXlib2FyZFRpbWVQaWNrZXIgey4uLmNvbW1vblByb3BzfSAvPgog ICAgICAgPC9NdWlQaWNrZXJzVXRpbHNQcm92aWRlcj4KICAgICApOwogICB9CiAKICAgcmV0dXJu ICgKICAgICA8TXVpUGlja2Vyc1V0aWxzUHJvdmlkZXIgdXRpbHM9e0RhdGVGbnNVdGlsc30+Ci0g ICAgICA8S2V5Ym9hcmREYXRlVGltZVBpY2tlciB7Li4uY29tbW9uUHJvcHN9Lz4KKyAgICAgIDxL ZXlib2FyZERhdGVUaW1lUGlja2VyIHsuLi5jb21tb25Qcm9wc30gLz4KICAgICA8L011aVBpY2tl cnNVdGlsc1Byb3ZpZGVyPgogICApOwogfQpAQCAtMjg3LDEwICsyOTcsMTAgQEAgSW5wdXREYXRl VGltZVBpY2tlci5wcm9wVHlwZXMgPSB7CiAgIGNvbnRyb2xQcm9wczogUHJvcFR5cGVzLm9iamVj dCwKIH07CiAKLWV4cG9ydCBmdW5jdGlvbiBGb3JtSW5wdXREYXRlVGltZVBpY2tlcih7aGFzRXJy b3IsIHJlcXVpcmVkLCBsYWJlbCwgY2xhc3NOYW1lLCBoZWxwTWVzc2FnZSwgdGVzdGNpZCwgLi4u cHJvcHN9KSB7CitleHBvcnQgZnVuY3Rpb24gRm9ybUlucHV0RGF0ZVRpbWVQaWNrZXIoeyBoYXNF cnJvciwgcmVxdWlyZWQsIGxhYmVsLCBjbGFzc05hbWUsIGhlbHBNZXNzYWdlLCB0ZXN0Y2lkLCAu Li5wcm9wcyB9KSB7CiAgIHJldHVybiAoCiAgICAgPEZvcm1JbnB1dCByZXF1aXJlZD17cmVxdWly ZWR9IGxhYmVsPXtsYWJlbH0gZXJyb3I9e2hhc0Vycm9yfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0g aGVscE1lc3NhZ2U9e2hlbHBNZXNzYWdlfSB0ZXN0Y2lkPXt0ZXN0Y2lkfT4KLSAgICAgIDxJbnB1 dERhdGVUaW1lUGlja2VyIHsuLi5wcm9wc30vPgorICAgICAgPElucHV0RGF0ZVRpbWVQaWNrZXIg ey4uLnByb3BzfSAvPgogICAgIDwvRm9ybUlucHV0PgogICApOwogfQpAQCAtMzA4LDIzICszMTgs MjMgQEAgRm9ybUlucHV0RGF0ZVRpbWVQaWNrZXIucHJvcFR5cGVzID0gewogCiAvKiBVc2UgZm9y d2FyZFJlZiB0byBwYXNzIHJlZiBwcm9wIHRvIE91dGxpbmVkSW5wdXQgKi8KIGV4cG9ydCBjb25z dCBJbnB1dFRleHQgPSBmb3J3YXJkUmVmKCh7Ci0gIGNpZCwgaGVscGlkLCByZWFkb25seSwgZGlz YWJsZWQsIG1heGxlbmd0aD0yNTUsIHZhbHVlLCBvbkNoYW5nZSwgY29udHJvbFByb3BzLCB0eXBl LCAuLi5wcm9wc30sIHJlZik9PnsKKyAgY2lkLCBoZWxwaWQsIHJlYWRvbmx5LCBkaXNhYmxlZCwg bWF4bGVuZ3RoID0gMjU1LCB2YWx1ZSwgb25DaGFuZ2UsIGNvbnRyb2xQcm9wcywgdHlwZSwgLi4u cHJvcHMgfSwgcmVmKSA9PiB7CiAKICAgY29uc3QgY2xhc3NlcyA9IHVzZVN0eWxlcygpOwogICBj b25zdCBwYXR0ZXJucyA9IHsKICAgICAnbnVtZXJpYyc6ICdeLT9bMC05XVxcZCpcXC4/XFxkKiQn LAogICAgICdpbnQnOiAnXi0/WzAtOV1cXGQqJCcsCiAgIH07Ci0gIGxldCBvbkNoYW5nZUZpbmFs ID0gKGUpPT57CisgIGxldCBvbkNoYW5nZUZpbmFsID0gKGUpID0+IHsKICAgICBsZXQgY2hhbmdl VmFsID0gZS50YXJnZXQudmFsdWU7CiAKICAgICAvKiBGb3IgdHlwZSBudW1iZXIsIHdlIHNldCB0 eXBlIGFzIHRlbCB3aXRoIG51bWJlciByZWdleCB0byBnZXQgdmFsaWRpdHkuKi8KLSAgICBpZihb J251bWVyaWMnLCAnaW50JywgJ3RlbCddLmluZGV4T2YodHlwZSkgPiAtMSkgewotICAgICAgaWYo IWUudGFyZ2V0LnZhbGlkaXR5LnZhbGlkICYmIGNoYW5nZVZhbCAhPT0gJycgJiYgY2hhbmdlVmFs ICE9PSAnLScpIHsKKyAgICBpZiAoWydudW1lcmljJywgJ2ludCcsICd0ZWwnXS5pbmRleE9mKHR5 cGUpID4gLTEpIHsKKyAgICAgIGlmICghZS50YXJnZXQudmFsaWRpdHkudmFsaWQgJiYgY2hhbmdl VmFsICE9PSAnJyAmJiBjaGFuZ2VWYWwgIT09ICctJykgewogICAgICAgICByZXR1cm47CiAgICAg ICB9CiAgICAgfQotICAgIGlmKGNvbnRyb2xQcm9wcz8uZm9ybWF0dGVyKSB7CisgICAgaWYgKGNv bnRyb2xQcm9wcz8uZm9ybWF0dGVyKSB7CiAgICAgICBjaGFuZ2VWYWwgPSBjb250cm9sUHJvcHMu Zm9ybWF0dGVyLnRvUmF3KGNoYW5nZVZhbCk7CiAgICAgfQogICAgIG9uQ2hhbmdlICYmIG9uQ2hh bmdlKGNoYW5nZVZhbCk7CkBAIC0zMzIsMTEgKzM0MiwxMSBAQCBleHBvcnQgY29uc3QgSW5wdXRU ZXh0ID0gZm9yd2FyZFJlZigoewogCiAgIGxldCBmaW5hbFZhbHVlID0gKF8uaXNOdWxsKHZhbHVl KSB8fCBfLmlzVW5kZWZpbmVkKHZhbHVlKSkgPyAnJyA6IHZhbHVlOwogCi0gIGlmKGNvbnRyb2xQ cm9wcz8uZm9ybWF0dGVyKSB7CisgIGlmIChjb250cm9sUHJvcHM/LmZvcm1hdHRlcikgewogICAg IGZpbmFsVmFsdWUgPSBjb250cm9sUHJvcHMuZm9ybWF0dGVyLmZyb21SYXcoZmluYWxWYWx1ZSk7 CiAgIH0KIAotICByZXR1cm4oCisgIHJldHVybiAoCiAgICAgPE91dGxpbmVkSW5wdXQKICAgICAg IHJlZj17cmVmfQogICAgICAgY29sb3I9InByaW1hcnkiCkBAIC0zNDYsNyArMzU2LDcgQEAgZXhw b3J0IGNvbnN0IElucHV0VGV4dCA9IGZvcndhcmRSZWYoKHsKICAgICAgICAgaWQ6IGNpZCwKICAg ICAgICAgbWF4TGVuZ3RoOiBjb250cm9sUHJvcHM/Lm11bHRpbGluZSA/IG51bGwgOiBtYXhsZW5n dGgsCiAgICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogaGVscGlkLAotICAgICAgICAuLi4odHlw ZSA/IHtwYXR0ZXJuOiAhXy5pc1VuZGVmaW5lZChjb250cm9sUHJvcHMpICYmICFfLmlzVW5kZWZp bmVkKGNvbnRyb2xQcm9wcy5wYXR0ZXJuKSA/IGNvbnRyb2xQcm9wcy5wYXR0ZXJuIDogcGF0dGVy bnNbdHlwZV19IDoge30pCisgICAgICAgIC4uLih0eXBlID8geyBwYXR0ZXJuOiAhXy5pc1VuZGVm aW5lZChjb250cm9sUHJvcHMpICYmICFfLmlzVW5kZWZpbmVkKGNvbnRyb2xQcm9wcy5wYXR0ZXJu KSA/IGNvbnRyb2xQcm9wcy5wYXR0ZXJuIDogcGF0dGVybnNbdHlwZV0gfSA6IHt9KQogICAgICAg fX0KICAgICAgIHJlYWRPbmx5PXtCb29sZWFuKHJlYWRvbmx5KX0KICAgICAgIGRpc2FibGVkPXtC b29sZWFuKGRpc2FibGVkKX0KQEAgLTM1NCw5ICszNjQsMTIgQEAgZXhwb3J0IGNvbnN0IElucHV0 VGV4dCA9IGZvcndhcmRSZWYoKHsKICAgICAgIG5vdGNoZWQ9e2ZhbHNlfQogICAgICAgdmFsdWU9 eyhfLmlzTnVsbChmaW5hbFZhbHVlKSB8fCBfLmlzVW5kZWZpbmVkKGZpbmFsVmFsdWUpKSA/ICcn IDogZmluYWxWYWx1ZX0KICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZUZpbmFsfQorICAgICAgewor ICAgICAgICAuLi4oY29udHJvbFByb3BzPy5vbktleURvd24gJiYgeyBvbktleURvd246IGNvbnRy b2xQcm9wcy5vbktleURvd24gfSkKKyAgICAgIH0KICAgICAgIHsuLi5jb250cm9sUHJvcHN9CiAg ICAgICB7Li4ucHJvcHN9Ci0gICAgICB7Li4uKFsnbnVtZXJpYycsICdpbnQnXS5pbmRleE9mKHR5 cGUpID4gLTEgPyB7dHlwZTogJ3RlbCd9IDoge3R5cGU6IHR5cGV9KX0KKyAgICAgIHsuLi4oWydu dW1lcmljJywgJ2ludCddLmluZGV4T2YodHlwZSkgPiAtMSA/IHsgdHlwZTogJ3RlbCcgfSA6IHsg dHlwZTogdHlwZSB9KX0KICAgICAvPgogICApOwogfSk7CkBAIC0zNzQsMTAgKzM4NywxMCBAQCBJ bnB1dFRleHQucHJvcFR5cGVzID0gewogICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLAogfTsKIAot ZXhwb3J0IGZ1bmN0aW9uIEZvcm1JbnB1dFRleHQoe2hhc0Vycm9yLCByZXF1aXJlZCwgbGFiZWws IGNsYXNzTmFtZSwgaGVscE1lc3NhZ2UsIHRlc3RjaWQsIC4uLnByb3BzfSkgeworZXhwb3J0IGZ1 bmN0aW9uIEZvcm1JbnB1dFRleHQoeyBoYXNFcnJvciwgcmVxdWlyZWQsIGxhYmVsLCBjbGFzc05h bWUsIGhlbHBNZXNzYWdlLCB0ZXN0Y2lkLCAuLi5wcm9wcyB9KSB7CiAgIHJldHVybiAoCiAgICAg PEZvcm1JbnB1dCByZXF1aXJlZD17cmVxdWlyZWR9IGxhYmVsPXtsYWJlbH0gZXJyb3I9e2hhc0Vy cm9yfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gaGVscE1lc3NhZ2U9e2hlbHBNZXNzYWdlfSB0ZXN0 Y2lkPXt0ZXN0Y2lkfT4KLSAgICAgIDxJbnB1dFRleHQgbGFiZWw9e2xhYmVsfSB7Li4ucHJvcHN9 Lz4KKyAgICAgIDxJbnB1dFRleHQgbGFiZWw9e2xhYmVsfSB7Li4ucHJvcHN9IC8+CiAgICAgPC9G b3JtSW5wdXQ+CiAgICk7CiB9CkBAIC0zOTEsMTYgKzQwNCwyMSBAQCBGb3JtSW5wdXRUZXh0LnBy b3BUeXBlcyA9IHsKIH07CiAKIC8qIFVzaW5nIHRoZSBleGlzdGluZyBmaWxlIGRpYWxvZyBmdW5j dGlvbnMgdXNpbmcgc2hvd0ZpbGVEaWFsb2cgKi8KLWV4cG9ydCBmdW5jdGlvbiBJbnB1dEZpbGVT ZWxlY3Qoe2NvbnRyb2xQcm9wcywgb25DaGFuZ2UsIGRpc2FibGVkLCByZWFkb25seSwgLi4ucHJv cHN9KSB7CitleHBvcnQgZnVuY3Rpb24gSW5wdXRGaWxlU2VsZWN0KHsgY29udHJvbFByb3BzLCBv bkNoYW5nZSwgZGlzYWJsZWQsIHJlYWRvbmx5LCBpc3ZhbGlkYXRlID0gZmFsc2UsIHZhbGlkYXRl LCAuLi5wcm9wcyB9KSB7CiAgIGNvbnN0IGlucFJlZiA9IHVzZVJlZigpOwotICBjb25zdCBvbkZp bGVTZWxlY3QgPSAodmFsdWUpPT57CisgIGNvbnN0IG9uRmlsZVNlbGVjdCA9ICh2YWx1ZSkgPT4g ewogICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKGRlY29kZVVSSSh2YWx1ZSkpOwogICAgIGlucFJl Zi5jdXJyZW50LmZvY3VzKCk7CiAgIH07CiAgIHJldHVybiAoCiAgICAgPElucHV0VGV4dCByZWY9 e2lucFJlZn0gZGlzYWJsZWQ9e2Rpc2FibGVkfSByZWFkb25seT17cmVhZG9ubHl9IG9uQ2hhbmdl PXtvbkNoYW5nZX0gey4uLnByb3BzfSBlbmRBZG9ybm1lbnQ9ewotICAgICAgPEljb25CdXR0b24g b25DbGljaz17KCk9PnNob3dGaWxlRGlhbG9nKGNvbnRyb2xQcm9wcywgb25GaWxlU2VsZWN0KX0K LSAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfHxyZWFkb25seX0gYXJpYS1sYWJlbD17Z2V0dGV4 dCgnU2VsZWN0IGEgZmlsZScpfT48Rm9sZGVyT3BlblJvdW5kZWRJY29uIC8+PC9JY29uQnV0dG9u PgorICAgICAgPD4KKyAgICAgICAgPEljb25CdXR0b24gb25DbGljaz17KCkgPT4gc2hvd0ZpbGVE aWFsb2coY29udHJvbFByb3BzLCBvbkZpbGVTZWxlY3QpfQorICAgICAgICAgIGRpc2FibGVkPXtk aXNhYmxlZCB8fCByZWFkb25seX0gYXJpYS1sYWJlbD17Z2V0dGV4dCgnU2VsZWN0IGEgZmlsZScp fT48Rm9sZGVyT3BlblJvdW5kZWRJY29uIC8+PC9JY29uQnV0dG9uPgorICAgICAgICB7aXN2YWxp ZGF0ZSAmJgorICAgICAgICAgIDxQZ0ljb25CdXR0b24gdGl0bGU9e2dldHRleHQoJ1ZhbGlkYXRl Jyl9IGRpc2FibGVkPXshcHJvcHMudmFsdWV9IG9uQ2xpY2s9eygpID0+IHsgdmFsaWRhdGUocHJv cHMudmFsdWUpOyB9fSBpY29uPXs8QXNzaWdubWVudFR1cm5lZEluIC8+fT48L1BnSWNvbkJ1dHRv bj4KKyAgICAgICAgfQorICAgICAgPC8+CiAgICAgfSAvPgogICApOwogfQpAQCAtNDA5LDE0ICs0 MjcsMTcgQEAgSW5wdXRGaWxlU2VsZWN0LnByb3BUeXBlcyA9IHsKICAgb25DaGFuZ2U6IFByb3BU eXBlcy5mdW5jLAogICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsCiAgIHJlYWRvbmx5OiBQcm9w VHlwZXMuYm9vbCwKKyAgaXN2YWxpZGF0ZTogUHJvcFR5cGVzLmJvb2wsCisgIHZhbGlkYXRlOiBQ cm9wVHlwZXMuZnVuYywKKyAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcKIH07CiAKIGV4cG9ydCBm dW5jdGlvbiBGb3JtSW5wdXRGaWxlU2VsZWN0KHsKLSAgaGFzRXJyb3IsIHJlcXVpcmVkLCBsYWJl bCwgY2xhc3NOYW1lLCBoZWxwTWVzc2FnZSwgdGVzdGNpZCwgLi4ucHJvcHN9KSB7CisgIGhhc0Vy cm9yLCByZXF1aXJlZCwgbGFiZWwsIGNsYXNzTmFtZSwgaGVscE1lc3NhZ2UsIHRlc3RjaWQsIC4u LnByb3BzIH0pIHsKIAogICByZXR1cm4gKAogICAgIDxGb3JtSW5wdXQgcmVxdWlyZWQ9e3JlcXVp cmVkfSBsYWJlbD17bGFiZWx9IGVycm9yPXtoYXNFcnJvcn0gY2xhc3NOYW1lPXtjbGFzc05hbWV9 IGhlbHBNZXNzYWdlPXtoZWxwTWVzc2FnZX0gdGVzdGNpZD17dGVzdGNpZH0+Ci0gICAgICA8SW5w dXRGaWxlU2VsZWN0IHJlcXVpcmVkPXtyZXF1aXJlZH0gbGFiZWw9e2xhYmVsfSB7Li4ucHJvcHN9 Lz4KKyAgICAgIDxJbnB1dEZpbGVTZWxlY3QgcmVxdWlyZWQ9e3JlcXVpcmVkfSBsYWJlbD17bGFi ZWx9IHsuLi5wcm9wc30gLz4KICAgICA8L0Zvcm1JbnB1dD4KICAgKTsKIH0KQEAgLTQyOSwxMyAr NDUwLDEzIEBAIEZvcm1JbnB1dEZpbGVTZWxlY3QucHJvcFR5cGVzID0gewogICB0ZXN0Y2lkOiBQ cm9wVHlwZXMuc3RyaW5nLAogfTsKIAotZXhwb3J0IGZ1bmN0aW9uIElucHV0U3dpdGNoKHtjaWQs IGhlbHBpZCwgdmFsdWUsIG9uQ2hhbmdlLCByZWFkb25seSwgY29udHJvbFByb3BzLCAuLi5wcm9w c30pIHsKK2V4cG9ydCBmdW5jdGlvbiBJbnB1dFN3aXRjaCh7IGNpZCwgaGVscGlkLCB2YWx1ZSwg b25DaGFuZ2UsIHJlYWRvbmx5LCBjb250cm9sUHJvcHMsIC4uLnByb3BzIH0pIHsKICAgY29uc3Qg Y2xhc3NlcyA9IHVzZVN0eWxlcygpOwogICByZXR1cm4gKAogICAgIDxTd2l0Y2ggY29sb3I9InBy aW1hcnkiCiAgICAgICBjaGVja2VkPXtCb29sZWFuKHZhbHVlKX0KICAgICAgIG9uQ2hhbmdlPXsK LSAgICAgICAgcmVhZG9ubHkgPyAoKT0+ey8qVGhpcyBpcyBpbnRlbnRpb25hbCAoU29uYXJRdWJl KSovfSA6IG9uQ2hhbmdlCisgICAgICAgIHJlYWRvbmx5ID8gKCkgPT4gey8qVGhpcyBpcyBpbnRl bnRpb25hbCAoU29uYXJRdWJlKSovIH0gOiBvbkNoYW5nZQogICAgICAgfQogICAgICAgaWQ9e2Np ZH0KICAgICAgIGlucHV0UHJvcHM9e3sKQEAgLTQ1NywxMSArNDc4LDExIEBAIElucHV0U3dpdGNo LnByb3BUeXBlcyA9IHsKICAgY29udHJvbFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LAogfTsKIAot ZXhwb3J0IGZ1bmN0aW9uIEZvcm1JbnB1dFN3aXRjaCh7aGFzRXJyb3IsIHJlcXVpcmVkLCBsYWJl bCwgY2xhc3NOYW1lLCBoZWxwTWVzc2FnZSwgdGVzdGNpZCwgLi4ucHJvcHN9KSB7CitleHBvcnQg ZnVuY3Rpb24gRm9ybUlucHV0U3dpdGNoKHsgaGFzRXJyb3IsIHJlcXVpcmVkLCBsYWJlbCwgY2xh c3NOYW1lLCBoZWxwTWVzc2FnZSwgdGVzdGNpZCwgLi4ucHJvcHMgfSkgewogCiAgIHJldHVybiAo CiAgICAgPEZvcm1JbnB1dCByZXF1aXJlZD17cmVxdWlyZWR9IGxhYmVsPXtsYWJlbH0gZXJyb3I9 e2hhc0Vycm9yfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gaGVscE1lc3NhZ2U9e2hlbHBNZXNzYWdl fSB0ZXN0Y2lkPXt0ZXN0Y2lkfT4KLSAgICAgIDxJbnB1dFN3aXRjaCB7Li4ucHJvcHN9Lz4KKyAg ICAgIDxJbnB1dFN3aXRjaCB7Li4ucHJvcHN9IC8+CiAgICAgPC9Gb3JtSW5wdXQ+CiAgICk7CiB9 CkBAIC00NzQsNyArNDk1LDcgQEAgRm9ybUlucHV0U3dpdGNoLnByb3BUeXBlcyA9IHsKICAgdGVz dGNpZDogUHJvcFR5cGVzLnN0cmluZywKIH07CiAKLWV4cG9ydCBmdW5jdGlvbiBJbnB1dENoZWNr Ym94KHtjaWQsIGhlbHBpZCwgdmFsdWUsIG9uQ2hhbmdlLCBjb250cm9sUHJvcHMsIHJlYWRvbmx5 LCAuLi5wcm9wc30pIHsKK2V4cG9ydCBmdW5jdGlvbiBJbnB1dENoZWNrYm94KHsgY2lkLCBoZWxw aWQsIHZhbHVlLCBvbkNoYW5nZSwgY29udHJvbFByb3BzLCByZWFkb25seSwgLi4ucHJvcHMgfSkg ewogICBjb250cm9sUHJvcHMgPSBjb250cm9sUHJvcHMgfHwge307CiAgIHJldHVybiAoCiAgICAg PEZvcm1Db250cm9sTGFiZWwKQEAgLTQ4MiwxMCArNTAzLDEwIEBAIGV4cG9ydCBmdW5jdGlvbiBJ bnB1dENoZWNrYm94KHtjaWQsIGhlbHBpZCwgdmFsdWUsIG9uQ2hhbmdlLCBjb250cm9sUHJvcHMs IHJlYWRvCiAgICAgICAgIDxDaGVja2JveAogICAgICAgICAgIGlkPXtjaWR9CiAgICAgICAgICAg Y2hlY2tlZD17Qm9vbGVhbih2YWx1ZSl9Ci0gICAgICAgICAgb25DaGFuZ2U9e3JlYWRvbmx5ID8g KCk9PnsvKlRoaXMgaXMgaW50ZW50aW9uYWwgKFNvbmFyUXViZSkqL30gOiBvbkNoYW5nZX0KKyAg ICAgICAgICBvbkNoYW5nZT17cmVhZG9ubHkgPyAoKSA9PiB7LypUaGlzIGlzIGludGVudGlvbmFs IChTb25hclF1YmUpKi8gfSA6IG9uQ2hhbmdlfQogICAgICAgICAgIGNvbG9yPSJwcmltYXJ5Igot ICAgICAgICAgIGlucHV0UHJvcHM9e3snYXJpYS1kZXNjcmliZWRieSc6IGhlbHBpZH19Ci0gICAg ICAgICAgey4uLnByb3BzfS8+CisgICAgICAgICAgaW5wdXRQcm9wcz17eyAnYXJpYS1kZXNjcmli ZWRieSc6IGhlbHBpZCB9fQorICAgICAgICAgIHsuLi5wcm9wc30gLz4KICAgICAgIH0KICAgICAg IGxhYmVsPXtjb250cm9sUHJvcHMubGFiZWx9CiAgICAgLz4KQEAgLTUwMCwxMiArNTIxLDEyIEBA IElucHV0Q2hlY2tib3gucHJvcFR5cGVzID0gewogICByZWFkb25seTogUHJvcFR5cGVzLmJvb2ws CiB9OwogCi1leHBvcnQgZnVuY3Rpb24gRm9ybUlucHV0Q2hlY2tib3goe2hhc0Vycm9yLCByZXF1 aXJlZCwgbGFiZWwsCi0gIGNsYXNzTmFtZSwgaGVscE1lc3NhZ2UsIHRlc3RjaWQsIC4uLnByb3Bz fSkgeworZXhwb3J0IGZ1bmN0aW9uIEZvcm1JbnB1dENoZWNrYm94KHsgaGFzRXJyb3IsIHJlcXVp cmVkLCBsYWJlbCwKKyAgY2xhc3NOYW1lLCBoZWxwTWVzc2FnZSwgdGVzdGNpZCwgLi4ucHJvcHMg fSkgewogCiAgIHJldHVybiAoCiAgICAgPEZvcm1JbnB1dCByZXF1aXJlZD17cmVxdWlyZWR9IGxh YmVsPXtsYWJlbH0gZXJyb3I9e2hhc0Vycm9yfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gaGVscE1l c3NhZ2U9e2hlbHBNZXNzYWdlfSB0ZXN0Y2lkPXt0ZXN0Y2lkfT4KLSAgICAgIDxJbnB1dENoZWNr Ym94IHsuLi5wcm9wc30vPgorICAgICAgPElucHV0Q2hlY2tib3ggey4uLnByb3BzfSAvPgogICAg IDwvRm9ybUlucHV0PgogICApOwogfQpAQCAtNTE5LDIzICs1NDAsMjMgQEAgRm9ybUlucHV0Q2hl Y2tib3gucHJvcFR5cGVzID0gewogfTsKIAogCi1leHBvcnQgY29uc3QgSW5wdXRUb2dnbGUgPSBm b3J3YXJkUmVmKCh7Y2lkLCB2YWx1ZSwgb25DaGFuZ2UsIG9wdGlvbnMsIGRpc2FibGVkLCByZWFk b25seSwgLi4ucHJvcHN9LCByZWYpID0+IHsKK2V4cG9ydCBjb25zdCBJbnB1dFRvZ2dsZSA9IGZv cndhcmRSZWYoKHsgY2lkLCB2YWx1ZSwgb25DaGFuZ2UsIG9wdGlvbnMsIGRpc2FibGVkLCByZWFk b25seSwgLi4ucHJvcHMgfSwgcmVmKSA9PiB7CiAgIHJldHVybiAoCiAgICAgPFRvZ2dsZUJ1dHRv bkdyb3VwCiAgICAgICBpZD17Y2lkfQogICAgICAgdmFsdWU9e3ZhbHVlfQogICAgICAgZXhjbHVz aXZlCi0gICAgICBvbkNoYW5nZT17KGUsIHZhbCk9Pnt2YWwhPT1udWxsICYmIG9uQ2hhbmdlKHZh bCk7fX0KKyAgICAgIG9uQ2hhbmdlPXsoZSwgdmFsKSA9PiB7IHZhbCAhPT0gbnVsbCAmJiBvbkNo YW5nZSh2YWwpOyB9fQogICAgICAgey4uLnByb3BzfQogICAgID4KICAgICAgIHsKLSAgICAgICAg KG9wdGlvbnN8fFtdKS5tYXAoKG9wdGlvbiwgaSk9PnsKKyAgICAgICAgKG9wdGlvbnMgfHwgW10p Lm1hcCgob3B0aW9uLCBpKSA9PiB7CiAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IG9wdGlv bi52YWx1ZSA9PT0gdmFsdWU7CiAgICAgICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IGRpc2FibGVk IHx8IG9wdGlvbi5kaXNhYmxlZCB8fCAocmVhZG9ubHkgJiYgIWlzU2VsZWN0ZWQpOwogICAgICAg ICAgIHJldHVybiAoCi0gICAgICAgICAgICA8VG9nZ2xlQnV0dG9uIHJlZj17aT09MCA/IHJlZiA6 IG51bGx9IGtleT17b3B0aW9uLmxhYmVsfSB2YWx1ZT17b3B0aW9uLnZhbHVlfSBjb21wb25lbnQ9 e2lzU2VsZWN0ZWQgPyBQcmltYXJ5QnV0dG9uIDogRGVmYXVsdEJ1dHRvbn0KKyAgICAgICAgICAg IDxUb2dnbGVCdXR0b24gcmVmPXtpID09IDAgPyByZWYgOiBudWxsfSBrZXk9e29wdGlvbi5sYWJl bH0gdmFsdWU9e29wdGlvbi52YWx1ZX0gY29tcG9uZW50PXtpc1NlbGVjdGVkID8gUHJpbWFyeUJ1 dHRvbiA6IERlZmF1bHRCdXR0b259CiAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVk fSBhcmlhLWxhYmVsPXtvcHRpb24ubGFiZWx9PgotICAgICAgICAgICAgICA8Q2hlY2tSb3VuZGVk SWNvbiBzdHlsZT17e3Zpc2liaWxpdHk6IGlzU2VsZWN0ZWQgPyAndmlzaWJsZSc6ICdoaWRkZW4n fX0vPiZuYnNwO3tvcHRpb24ubGFiZWx9CisgICAgICAgICAgICAgIDxDaGVja1JvdW5kZWRJY29u IHN0eWxlPXt7IHZpc2liaWxpdHk6IGlzU2VsZWN0ZWQgPyAndmlzaWJsZScgOiAnaGlkZGVuJyB9 fSAvPiZuYnNwO3tvcHRpb24ubGFiZWx9CiAgICAgICAgICAgICA8L1RvZ2dsZUJ1dHRvbj4KICAg ICAgICAgICApOwogICAgICAgICB9KQpAQCAtNTU0LDExICs1NzUsMTEgQEAgSW5wdXRUb2dnbGUu cHJvcFR5cGVzID0gewogICByZWFkb25seTogUHJvcFR5cGVzLmJvb2wsCiB9OwogCi1leHBvcnQg ZnVuY3Rpb24gRm9ybUlucHV0VG9nZ2xlKHtoYXNFcnJvciwgcmVxdWlyZWQsIGxhYmVsLAotICBj bGFzc05hbWUsIGhlbHBNZXNzYWdlLCB0ZXN0Y2lkLCBpbnB1dFJlZiwgLi4ucHJvcHN9KSB7Citl eHBvcnQgZnVuY3Rpb24gRm9ybUlucHV0VG9nZ2xlKHsgaGFzRXJyb3IsIHJlcXVpcmVkLCBsYWJl bCwKKyAgY2xhc3NOYW1lLCBoZWxwTWVzc2FnZSwgdGVzdGNpZCwgaW5wdXRSZWYsIC4uLnByb3Bz IH0pIHsKICAgcmV0dXJuICgKICAgICA8Rm9ybUlucHV0IHJlcXVpcmVkPXtyZXF1aXJlZH0gbGFi ZWw9e2xhYmVsfSBlcnJvcj17aGFzRXJyb3J9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBoZWxwTWVz c2FnZT17aGVscE1lc3NhZ2V9IHRlc3RjaWQ9e3Rlc3RjaWR9PgotICAgICAgPElucHV0VG9nZ2xl IHJlZj17aW5wdXRSZWZ9IHsuLi5wcm9wc30vPgorICAgICAgPElucHV0VG9nZ2xlIHJlZj17aW5w dXRSZWZ9IHsuLi5wcm9wc30gLz4KICAgICA8L0Zvcm1JbnB1dD4KICAgKTsKIH0KQEAgLTU3NSw5 ICs1OTYsOSBAQCBGb3JtSW5wdXRUb2dnbGUucHJvcFR5cGVzID0gewogLyogcmVhY3Qtc2VsZWN0 IHBhY2thZ2UgaXMgdXNlZCBmb3Igc2VsZWN0IGlucHV0CiAgKiBDdXN0b21pemluZyB0aGUgc2Vs ZWN0IHN0eWxlcyB0byBmaXQgZXhpc3RpbmcgdGhlbWUKICAqLwotY29uc3QgY3VzdG9tUmVhY3RT ZWxlY3RTdHlsZXMgPSAodGhlbWUsIHJlYWRvbmx5KT0+KHsKK2NvbnN0IGN1c3RvbVJlYWN0U2Vs ZWN0U3R5bGVzID0gKHRoZW1lLCByZWFkb25seSkgPT4gKHsKICAgaW5wdXQ6IChwcm92aWRlZCkg PT4gewotICAgIHJldHVybiB7Li4ucHJvdmlkZWQsIHBhZGRpbmc6IDAsIG1hcmdpbjogMCwgY29s b3I6ICdpbmhlcml0J307CisgICAgcmV0dXJuIHsgLi4ucHJvdmlkZWQsIHBhZGRpbmc6IDAsIG1h cmdpbjogMCwgY29sb3I6ICdpbmhlcml0JyB9OwogICB9LAogICBzaW5nbGVWYWx1ZTogKHByb3Zp ZGVkKSA9PiB7CiAgICAgcmV0dXJuIHsKQEAgLTU5MywzNSArNjE0LDM1IEBAIGNvbnN0IGN1c3Rv bVJlYWN0U2VsZWN0U3R5bGVzID0gKHRoZW1lLCByZWFkb25seSk9Pih7CiAgICAgYm9yZGVyQ29s b3I6IHRoZW1lLm90aGVyVmFycy5pbnB1dEJvcmRlckNvbG9yLAogICAgIC4uLihzdGF0ZS5pc0Zv Y3VzZWQgPyB7CiAgICAgICBib3JkZXJDb2xvcjogdGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4s Ci0gICAgICBib3hTaGFkb3c6ICdpbnNldCAwIDAgMCAxcHggJyt0aGVtZS5wYWxldHRlLnByaW1h cnkubWFpbiwKKyAgICAgIGJveFNoYWRvdzogJ2luc2V0IDAgMCAwIDFweCAnICsgdGhlbWUucGFs ZXR0ZS5wcmltYXJ5Lm1haW4sCiAgICAgICAnJjpob3Zlcic6IHsKICAgICAgICAgYm9yZGVyQ29s b3I6IHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLAogICAgICAgfQogICAgIH0gOiB7fSksCiAg IH0pLAotICBkcm9wZG93bkluZGljYXRvcjogKHByb3ZpZGVkKT0+KHsKKyAgZHJvcGRvd25JbmRp Y2F0b3I6IChwcm92aWRlZCkgPT4gKHsKICAgICAuLi5wcm92aWRlZCwKICAgICBwYWRkaW5nOiAn MHJlbSAwLjI1cmVtJywKICAgfSksCi0gIGluZGljYXRvcnNDb250YWluZXI6IChwcm92aWRlZCk9 Pih7CisgIGluZGljYXRvcnNDb250YWluZXI6IChwcm92aWRlZCkgPT4gKHsKICAgICAuLi5wcm92 aWRlZCwKLSAgICAuLi4ocmVhZG9ubHkgPyB7ZGlzcGxheTogJ25vbmUnfSA6IHt9KQorICAgIC4u LihyZWFkb25seSA/IHsgZGlzcGxheTogJ25vbmUnIH0gOiB7fSkKICAgfSksCi0gIGNsZWFySW5k aWNhdG9yOiAocHJvdmlkZWQpPT4oeworICBjbGVhckluZGljYXRvcjogKHByb3ZpZGVkKSA9PiAo ewogICAgIC4uLnByb3ZpZGVkLAogICAgIHBhZGRpbmc6ICcwcmVtIDAuMjVyZW0nLAogICB9KSwK LSAgdmFsdWVDb250YWluZXI6IChwcm92aWRlZCk9Pih7CisgIHZhbHVlQ29udGFpbmVyOiAocHJv dmlkZWQpID0+ICh7CiAgICAgLi4ucHJvdmlkZWQsCiAgICAgcGFkZGluZzogdGhlbWUub3RoZXJW YXJzLnJlYWN0U2VsZWN0LnBhZGRpbmcsCiAgIH0pLAotICBncm91cEhlYWRpbmc6IChwcm92aWRl ZCk9Pih7CisgIGdyb3VwSGVhZGluZzogKHByb3ZpZGVkKSA9PiAoewogICAgIC4uLnByb3ZpZGVk LAogICAgIGNvbG9yOiAnaW5oZXJpdCcsCiAgICAgZm9udFNpemU6ICcwLjg1ZW0nLAogICAgIHRl eHRUcmFuc2Zvcm06ICdub25lJywKICAgfSksCi0gIG1lbnU6IChwcm92aWRlZCk9Pih7CisgIG1l bnU6IChwcm92aWRlZCkgPT4gKHsKICAgICAuLi5wcm92aWRlZCwKICAgICBiYWNrZ3JvdW5kQ29s b3I6IHRoZW1lLnBhbGV0dGUuYmFja2dyb3VuZC5kZWZhdWx0LAogICAgIGNvbG9yOiB0aGVtZS5w YWxldHRlLnRleHQucHJpbWFyeSwKQEAgLTYyOSwxMiArNjUwLDEyIEBAIGNvbnN0IGN1c3RvbVJl YWN0U2VsZWN0U3R5bGVzID0gKHRoZW1lLCByZWFkb25seSk9Pih7CiAgICAgYm9yZGVyOiAnMXB4 IHNvbGlkICcgKyB0aGVtZS5vdGhlclZhcnMuaW5wdXRCb3JkZXJDb2xvciwKICAgICBtYXJnaW5U b3A6ICcycHgnLAogICB9KSwKLSAgbWVudVBvcnRhbDogKHByb3ZpZGVkKT0+KHsKKyAgbWVudVBv cnRhbDogKHByb3ZpZGVkKSA9PiAoewogICAgIC4uLnByb3ZpZGVkLCB6SW5kZXg6IDk5OTksCiAg ICAgYmFja2dyb3VuZENvbG9yOiAnaW5oZXJpdCcsCiAgICAgY29sb3I6ICdpbmhlcml0JywKICAg fSksCi0gIG9wdGlvbjogKHByb3ZpZGVkLCBzdGF0ZSk9PnsKKyAgb3B0aW9uOiAocHJvdmlkZWQs IHN0YXRlKSA9PiB7CiAgICAgbGV0IGJnQ29sb3IgPSAnaW5oZXJpdCc7CiAgICAgaWYgKHN0YXRl LmlzRm9jdXNlZCkgewogICAgICAgYmdDb2xvciA9IHRoZW1lLnBhbGV0dGUuZ3JleVs0MDBdOwpA QCAtNjQ4LDI3ICs2NjksMjcgQEAgY29uc3QgY3VzdG9tUmVhY3RTZWxlY3RTdHlsZXMgPSAodGhl bWUsIHJlYWRvbmx5KT0+KHsKICAgICAgIGJhY2tncm91bmRDb2xvcjogYmdDb2xvciwKICAgICB9 OwogICB9LAotICBtdWx0aVZhbHVlOiAocHJvdmlkZWQpPT4oeworICBtdWx0aVZhbHVlOiAocHJv dmlkZWQpID0+ICh7CiAgICAgLi4ucHJvdmlkZWQsCiAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVt ZS5wYWxldHRlLmdyZXlbNDAwXSwKICAgfSksCi0gIG11bHRpVmFsdWVMYWJlbDogKHByb3ZpZGVk KT0+KHsKKyAgbXVsdGlWYWx1ZUxhYmVsOiAocHJvdmlkZWQpID0+ICh7CiAgICAgLi4ucHJvdmlk ZWQsCiAgICAgZm9udFNpemU6ICcxZW0nLAogICAgIHpJbmRleDogOTksCiAgICAgY29sb3I6IHRo ZW1lLnBhbGV0dGUudGV4dC5wcmltYXJ5CiAgIH0pLAotICBtdWx0aVZhbHVlUmVtb3ZlOiAocHJv dmlkZWQpPT4oeworICBtdWx0aVZhbHVlUmVtb3ZlOiAocHJvdmlkZWQpID0+ICh7CiAgICAgLi4u cHJvdmlkZWQsCiAgICAgJyY6aG92ZXInOiB7CiAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd1bnNl dCcsCiAgICAgICBjb2xvcjogdGhlbWUucGFsZXR0ZS5lcnJvci5tYWluLAogICAgIH0sCi0gICAg Li4uKHJlYWRvbmx5ID8ge2Rpc3BsYXk6ICdub25lJ30gOiB7fSkKKyAgICAuLi4ocmVhZG9ubHkg PyB7IGRpc3BsYXk6ICdub25lJyB9IDoge30pCiAgIH0pLAogfSk7CiAKLWZ1bmN0aW9uIE9wdGlv blZpZXcoe2ltYWdlLCBsYWJlbH0pIHsKK2Z1bmN0aW9uIE9wdGlvblZpZXcoeyBpbWFnZSwgbGFi ZWwgfSkgewogICBjb25zdCBjbGFzc2VzID0gdXNlU3R5bGVzKCk7CiAgIHJldHVybiAoCiAgICAg PD4KQEAgLTcwNSw4ICs3MjYsOCBAQCBDdXN0b21TZWxlY3RTaW5nbGVWYWx1ZS5wcm9wVHlwZXMg PSB7CiB9OwogCiBleHBvcnQgZnVuY3Rpb24gZmxhdHRlblNlbGVjdE9wdGlvbnMob3B0aW9ucykg ewotICByZXR1cm4gXy5mbGF0TWFwKG9wdGlvbnMsIChvcHRpb24pPT57Ci0gICAgaWYob3B0aW9u Lm9wdGlvbnMpIHsKKyAgcmV0dXJuIF8uZmxhdE1hcChvcHRpb25zLCAob3B0aW9uKSA9PiB7Cisg ICAgaWYgKG9wdGlvbi5vcHRpb25zKSB7CiAgICAgICByZXR1cm4gb3B0aW9uLm9wdGlvbnM7CiAg ICAgfSBlbHNlIHsKICAgICAgIHJldHVybiBvcHRpb247CkBAIC03MTYsMjggKzczNywyOCBAQCBl eHBvcnQgZnVuY3Rpb24gZmxhdHRlblNlbGVjdE9wdGlvbnMob3B0aW9ucykgewogCiBmdW5jdGlv biBnZXRSZWFsVmFsdWUob3B0aW9ucywgdmFsdWUsIGNyZWF0YWJsZSwgZm9ybWF0dGVyKSB7CiAg IGxldCByZWFsVmFsdWUgPSBudWxsOwotICBpZihfLmlzQXJyYXkodmFsdWUpKSB7CisgIGlmIChf LmlzQXJyYXkodmFsdWUpKSB7CiAgICAgcmVhbFZhbHVlID0gWy4uLnZhbHVlXTsKICAgICAvKiBJ ZiBtdWx0aSBzZWxlY3Qgb3B0aW9ucyBuZWVkIHRvIGJlIGluIHNvbWUgZm9ybWF0IGJ5IFVJLCB1 c2UgZm9ybWF0dGVyICovCi0gICAgaWYoZm9ybWF0dGVyKSB7CisgICAgaWYgKGZvcm1hdHRlcikg ewogICAgICAgcmVhbFZhbHVlID0gZm9ybWF0dGVyLmZyb21SYXcocmVhbFZhbHVlLCBvcHRpb25z KTsKICAgICB9IGVsc2UgewotICAgICAgaWYoY3JlYXRhYmxlKSB7Ci0gICAgICAgIHJlYWxWYWx1 ZSA9IHJlYWxWYWx1ZS5tYXAoKHZhbCk9Pih7bGFiZWw6dmFsLCB2YWx1ZTogdmFsfSkpOworICAg ICAgaWYgKGNyZWF0YWJsZSkgeworICAgICAgICByZWFsVmFsdWUgPSByZWFsVmFsdWUubWFwKCh2 YWwpID0+ICh7IGxhYmVsOiB2YWwsIHZhbHVlOiB2YWwgfSkpOwogICAgICAgfSBlbHNlIHsKLSAg ICAgICAgcmVhbFZhbHVlID0gcmVhbFZhbHVlLm1hcCgodmFsKT0+KF8uZmluZChvcHRpb25zLCAo b3B0aW9uKT0+Xy5pc0VxdWFsKG9wdGlvbi52YWx1ZSwgdmFsKSkpKTsKKyAgICAgICAgcmVhbFZh bHVlID0gcmVhbFZhbHVlLm1hcCgodmFsKSA9PiAoXy5maW5kKG9wdGlvbnMsIChvcHRpb24pID0+ IF8uaXNFcXVhbChvcHRpb24udmFsdWUsIHZhbCkpKSk7CiAgICAgICB9CiAgICAgfQogICB9IGVs c2UgewogICAgIGxldCBmbGF0T3B0aW9ucyA9IGZsYXR0ZW5TZWxlY3RPcHRpb25zKG9wdGlvbnMp OwotICAgIHJlYWxWYWx1ZSA9IF8uZmluZChmbGF0T3B0aW9ucywgKG9wdGlvbik9Pm9wdGlvbi52 YWx1ZT09dmFsdWUpIHx8Ci0gICAgICAgIChjcmVhdGFibGUgJiYgIV8uaXNVbmRlZmluZWQodmFs dWUpICYmICFfLmlzTnVsbCh2YWx1ZSkgPyB7bGFiZWw6dmFsdWUsIHZhbHVlOiB2YWx1ZX0gOiBu dWxsKTsKKyAgICByZWFsVmFsdWUgPSBfLmZpbmQoZmxhdE9wdGlvbnMsIChvcHRpb24pID0+IG9w dGlvbi52YWx1ZSA9PSB2YWx1ZSkgfHwKKyAgICAgIChjcmVhdGFibGUgJiYgIV8uaXNVbmRlZmlu ZWQodmFsdWUpICYmICFfLmlzTnVsbCh2YWx1ZSkgPyB7IGxhYmVsOiB2YWx1ZSwgdmFsdWU6IHZh bHVlIH0gOiBudWxsKTsKICAgfQogICByZXR1cm4gcmVhbFZhbHVlOwogfQotZXhwb3J0IGZ1bmN0 aW9uIElucHV0U2VsZWN0Tm9uU2VhcmNoKHtvcHRpb25zLCAuLi5wcm9wc30pIHsKK2V4cG9ydCBm dW5jdGlvbiBJbnB1dFNlbGVjdE5vblNlYXJjaCh7IG9wdGlvbnMsIC4uLnByb3BzIH0pIHsKICAg cmV0dXJuIDxNdWlTZWxlY3QgbmF0aXZlIHsuLi5wcm9wc30gdmFyaWFudD0ib3V0bGluZWQiPgot ICAgIHsob3B0aW9uc3x8W10pLm1hcCgobyk9PjxvcHRpb24ga2V5PXtvLnZhbHVlfSB2YWx1ZT17 by52YWx1ZX0+e28ubGFiZWx9PC9vcHRpb24+KX0KKyAgICB7KG9wdGlvbnMgfHwgW10pLm1hcCgo bykgPT4gPG9wdGlvbiBrZXk9e28udmFsdWV9IHZhbHVlPXtvLnZhbHVlfT57by5sYWJlbH08L29w dGlvbj4pfQogICA8L011aVNlbGVjdD47CiB9CiBJbnB1dFNlbGVjdE5vblNlYXJjaC5wcm9wVHlw ZXMgPSB7CkBAIC03NDgsNyArNzY5LDcgQEAgSW5wdXRTZWxlY3ROb25TZWFyY2gucHJvcFR5cGVz ID0gewogfTsKIAogZXhwb3J0IGNvbnN0IElucHV0U2VsZWN0ID0gZm9yd2FyZFJlZigoewotICBj aWQsIG9uQ2hhbmdlLCBvcHRpb25zLCByZWFkb25seT1mYWxzZSwgdmFsdWUsIGNvbnRyb2xQcm9w cz17fSwgb3B0aW9uc0xvYWRlZCwgb3B0aW9uc1JlbG9hZEJhc2lzLCBkaXNhYmxlZCwgLi4ucHJv cHN9LCByZWYpID0+IHsKKyAgY2lkLCBvbkNoYW5nZSwgb3B0aW9ucywgcmVhZG9ubHkgPSBmYWxz ZSwgdmFsdWUsIGNvbnRyb2xQcm9wcyA9IHt9LCBvcHRpb25zTG9hZGVkLCBvcHRpb25zUmVsb2Fk QmFzaXMsIGRpc2FibGVkLCAuLi5wcm9wcyB9LCByZWYpID0+IHsKICAgY29uc3QgW1tmaW5hbE9w dGlvbnMsIGlzTG9hZGluZ10sIHNldEZpbmFsT3B0aW9uc10gPSB1c2VTdGF0ZShbW10sIHRydWVd KTsKICAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpOwogCkBAIC03NTcsMzMgKzc3OCwzMyBAQCBl eHBvcnQgY29uc3QgSW5wdXRTZWxlY3QgPSBmb3J3YXJkUmVmKCh7CiAgIGxvYWRpbmcgdGhlIG9w dGlvbnMuIG9wdGlvbnNSZWxvYWRCYXNpcyBpcyBoZWxwZnVsIHRvIGF2b2lkIHJlcGVhdGVkCiAg IG9wdGlvbnMgbG9hZC4gSWYgb3B0aW9uc1JlbG9hZEJhc2lzIHZhbHVlIGNoYW5nZXMsIHRoZW4g b3B0aW9ucyB3aWxsIGJlIGxvYWRlZCBhZ2Fpbi4KICAgKi8KLSAgdXNlRWZmZWN0KCgpPT57Ci0g ICAgbGV0IG9wdFByb21pc2UgPSBvcHRpb25zLCB1bW91bnRlZD1mYWxzZTsKLSAgICBpZih0eXBl b2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykgeworICB1c2VFZmZlY3QoKCkgPT4geworICAgIGxl dCBvcHRQcm9taXNlID0gb3B0aW9ucywgdW1vdW50ZWQgPSBmYWxzZTsKKyAgICBpZiAodHlwZW9m IG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHsKICAgICAgIG9wdFByb21pc2UgPSBvcHRpb25zKCk7 CiAgICAgfQogICAgIHNldEZpbmFsT3B0aW9ucyhbW10sIHRydWVdKTsKICAgICBQcm9taXNlLnJl c29sdmUob3B0UHJvbWlzZSkKLSAgICAgIC50aGVuKChyZXMpPT57CisgICAgICAudGhlbigocmVz KSA9PiB7CiAgICAgICAgIC8qIElmIGNvbXBvbmVudCB1bm1vdW50ZWQsIGRvbnQgdXBkYXRlIHN0 YXRlICovCi0gICAgICAgIGlmKCF1bW91bnRlZCkgeworICAgICAgICBpZiAoIXVtb3VudGVkKSB7 CiAgICAgICAgICAgb3B0aW9uc0xvYWRlZCAmJiBvcHRpb25zTG9hZGVkKHJlcywgdmFsdWUpOwog ICAgICAgICAgIC8qIEF1dG8gc2VsZWN0IGlmIGFueSBvcHRpb24gaGFzIGtleSBhcyBzZWxlY3Rl ZCAqLwogICAgICAgICAgIGNvbnN0IGZsYXRSZXMgPSBmbGF0dGVuU2VsZWN0T3B0aW9ucyhyZXMg fHwgW10pOwogICAgICAgICAgIGxldCBzZWxlY3RlZFZhbDsKLSAgICAgICAgICBpZihjb250cm9s UHJvcHMubXVsdGlwbGUpIHsKLSAgICAgICAgICAgIHNlbGVjdGVkVmFsID0gXy5maWx0ZXIoZmxh dFJlcywgKG8pPT5vLnNlbGVjdGVkKT8ubWFwKChvKT0+by52YWx1ZSk7CisgICAgICAgICAgaWYg KGNvbnRyb2xQcm9wcy5tdWx0aXBsZSkgeworICAgICAgICAgICAgc2VsZWN0ZWRWYWwgPSBfLmZp bHRlcihmbGF0UmVzLCAobykgPT4gby5zZWxlY3RlZCk/Lm1hcCgobykgPT4gby52YWx1ZSk7CiAg ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNlbGVjdGVkVmFsID0gXy5maW5kKGZsYXRS ZXMsIChvKT0+by5zZWxlY3RlZCk/LnZhbHVlOworICAgICAgICAgICAgc2VsZWN0ZWRWYWwgPSBf LmZpbmQoZmxhdFJlcywgKG8pID0+IG8uc2VsZWN0ZWQpPy52YWx1ZTsKICAgICAgICAgICB9CiAK LSAgICAgICAgICBpZigoIV8uaXNVbmRlZmluZWQoc2VsZWN0ZWRWYWwpICYmICFfLmlzQXJyYXko c2VsZWN0ZWRWYWwpKSB8fCAoXy5pc0FycmF5KHNlbGVjdGVkVmFsKSAmJiBzZWxlY3RlZFZhbC5s ZW5ndGggIT0gMCkpIHsKKyAgICAgICAgICBpZiAoKCFfLmlzVW5kZWZpbmVkKHNlbGVjdGVkVmFs KSAmJiAhXy5pc0FycmF5KHNlbGVjdGVkVmFsKSkgfHwgKF8uaXNBcnJheShzZWxlY3RlZFZhbCkg JiYgc2VsZWN0ZWRWYWwubGVuZ3RoICE9IDApKSB7CiAgICAgICAgICAgICBvbkNoYW5nZSAmJiBv bkNoYW5nZShzZWxlY3RlZFZhbCk7CiAgICAgICAgICAgfQogICAgICAgICAgIHNldEZpbmFsT3B0 aW9ucyhbcmVzIHx8IFtdLCBmYWxzZV0pOwogICAgICAgICB9CiAgICAgICB9KTsKLSAgICByZXR1 cm4gKCk9PnVtb3VudGVkPXRydWU7CisgICAgcmV0dXJuICgpID0+IHVtb3VudGVkID0gdHJ1ZTsK ICAgfSwgW29wdGlvbnNSZWxvYWRCYXNpc10pOwogCiAKQEAgLTc5MSw3ICs4MTIsNyBAQCBleHBv cnQgY29uc3QgSW5wdXRTZWxlY3QgPSBmb3J3YXJkUmVmKCh7CiAgIGNvbnN0IGZpbHRlcmVkT3B0 aW9ucyA9IChjb250cm9sUHJvcHMuZmlsdGVyICYmIGNvbnRyb2xQcm9wcy5maWx0ZXIoZmluYWxP cHRpb25zKSkgfHwgZmluYWxPcHRpb25zOwogICBjb25zdCBmbGF0RmlsdGVyZWQgPSBmbGF0dGVu U2VsZWN0T3B0aW9ucyhmaWx0ZXJlZE9wdGlvbnMpOwogICBsZXQgcmVhbFZhbHVlID0gZ2V0UmVh bFZhbHVlKGZsYXRGaWx0ZXJlZCwgdmFsdWUsIGNvbnRyb2xQcm9wcy5jcmVhdGFibGUsIGNvbnRy b2xQcm9wcy5mb3JtYXR0ZXIpOwotICBpZihyZWFsVmFsdWUgJiYgXy5pc1BsYWluT2JqZWN0KHJl YWxWYWx1ZSkgJiYgXy5pc1VuZGVmaW5lZChyZWFsVmFsdWUudmFsdWUpKSB7CisgIGlmIChyZWFs VmFsdWUgJiYgXy5pc1BsYWluT2JqZWN0KHJlYWxWYWx1ZSkgJiYgXy5pc1VuZGVmaW5lZChyZWFs VmFsdWUudmFsdWUpKSB7CiAgICAgY29uc29sZS5lcnJvcignVW5kZWZpbmVkIG9wdGlvbiB2YWx1 ZSBub3QgYWxsb3dlZCcsIHJlYWxWYWx1ZSwgZmlsdGVyZWRPcHRpb25zKTsKICAgfQogICBjb25z dCBvdGhlclByb3BzID0gewpAQCAtODAyLDE3ICs4MjMsMTcgQEAgZXhwb3J0IGNvbnN0IElucHV0 U2VsZWN0ID0gZm9yd2FyZFJlZigoewogCiAgIGNvbnN0IHN0eWxlcyA9IGN1c3RvbVJlYWN0U2Vs ZWN0U3R5bGVzKHRoZW1lLCByZWFkb25seSB8fCBkaXNhYmxlZCk7CiAKLSAgY29uc3Qgb25DaGFu Z2VPcHRpb24gPSB1c2VDYWxsYmFjaygoc2VsZWN0VmFsKT0+ewotICAgIGlmKF8uaXNBcnJheShz ZWxlY3RWYWwpKSB7CisgIGNvbnN0IG9uQ2hhbmdlT3B0aW9uID0gdXNlQ2FsbGJhY2soKHNlbGVj dFZhbCkgPT4geworICAgIGlmIChfLmlzQXJyYXkoc2VsZWN0VmFsKSkgewogICAgICAgLy8gQ2hl Y2sgaWYgc2VsZWN0IGFsbCBvcHRpb24gaXMgc2VsZWN0ZWQKICAgICAgIGlmICghXy5pc1VuZGVm aW5lZChzZWxlY3RWYWwuZmluZCh4ID0+IHgubGFiZWwgPT09ICdTZWxlY3QgQWxsJykpKSB7CiAg ICAgICAgIHNlbGVjdFZhbCA9IGZpbHRlcmVkT3B0aW9uczsKICAgICAgIH0KICAgICAgIC8qIElm IG11bHRpIHNlbGVjdCBvcHRpb25zIG5lZWQgdG8gYmUgaW4gc29tZSBmb3JtYXQgYnkgVUksIHVz ZSBmb3JtYXR0ZXIgKi8KLSAgICAgIGlmKGNvbnRyb2xQcm9wcy5mb3JtYXR0ZXIpIHsKKyAgICAg IGlmIChjb250cm9sUHJvcHMuZm9ybWF0dGVyKSB7CiAgICAgICAgIHNlbGVjdFZhbCA9IGNvbnRy b2xQcm9wcy5mb3JtYXR0ZXIudG9SYXcoc2VsZWN0VmFsLCBmaWx0ZXJlZE9wdGlvbnMpOwogICAg ICAgfSBlbHNlIHsKLSAgICAgICAgc2VsZWN0VmFsID0gc2VsZWN0VmFsLm1hcCgob3B0aW9uKT0+ b3B0aW9uLnZhbHVlKTsKKyAgICAgICAgc2VsZWN0VmFsID0gc2VsZWN0VmFsLm1hcCgob3B0aW9u KSA9PiBvcHRpb24udmFsdWUpOwogICAgICAgfQogICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2Uo c2VsZWN0VmFsKTsKICAgICB9IGVsc2UgewpAQCAtODM4LDEzICs4NTksMTMgQEAgZXhwb3J0IGNv bnN0IElucHV0U2VsZWN0ID0gZm9yd2FyZFJlZigoewogICAgIC4uLm90aGVyUHJvcHMsCiAgICAg Li4ucHJvcHMsCiAgIH07Ci0gIGlmKCFjb250cm9sUHJvcHMuY3JlYXRhYmxlKSB7CisgIGlmICgh Y29udHJvbFByb3BzLmNyZWF0YWJsZSkgewogICAgIHJldHVybiAoCi0gICAgICA8U2VsZWN0IHJl Zj17cmVmfSB7Li4uY29tbW9uUHJvcHN9Lz4KKyAgICAgIDxTZWxlY3QgcmVmPXtyZWZ9IHsuLi5j b21tb25Qcm9wc30gLz4KICAgICApOwogICB9IGVsc2UgewogICAgIHJldHVybiAoCi0gICAgICA8 Q3JlYXRhYmxlU2VsZWN0IHJlZj17cmVmfSB7Li4uY29tbW9uUHJvcHN9Lz4KKyAgICAgIDxDcmVh dGFibGVTZWxlY3QgcmVmPXtyZWZ9IHsuLi5jb21tb25Qcm9wc30gLz4KICAgICApOwogICB9CiB9 KTsKQEAgLTg2MywxMCArODg0LDEwIEBAIElucHV0U2VsZWN0LnByb3BUeXBlcyA9IHsKIAogCiBl eHBvcnQgZnVuY3Rpb24gRm9ybUlucHV0U2VsZWN0KHsKLSAgaGFzRXJyb3IsIHJlcXVpcmVkLCBj bGFzc05hbWUsIGxhYmVsLCBoZWxwTWVzc2FnZSwgdGVzdGNpZCwgLi4ucHJvcHN9KSB7CisgIGhh c0Vycm9yLCByZXF1aXJlZCwgY2xhc3NOYW1lLCBsYWJlbCwgaGVscE1lc3NhZ2UsIHRlc3RjaWQs IC4uLnByb3BzIH0pIHsKICAgcmV0dXJuICgKICAgICA8Rm9ybUlucHV0IHJlcXVpcmVkPXtyZXF1 aXJlZH0gbGFiZWw9e2xhYmVsfSBlcnJvcj17aGFzRXJyb3J9IGNsYXNzTmFtZT17Y2xhc3NOYW1l fSBoZWxwTWVzc2FnZT17aGVscE1lc3NhZ2V9IHRlc3RjaWQ9e3Rlc3RjaWR9PgotICAgICAgPElu cHV0U2VsZWN0IHJlZj17cHJvcHMuaW5wdXRSZWZ9IHsuLi5wcm9wc30vPgorICAgICAgPElucHV0 U2VsZWN0IHJlZj17cHJvcHMuaW5wdXRSZWZ9IHsuLi5wcm9wc30gLz4KICAgICA8L0Zvcm1JbnB1 dD4KICAgKTsKIH0KQEAgLTg4MSw3ICs5MDIsNyBAQCBGb3JtSW5wdXRTZWxlY3QucHJvcFR5cGVz ID0gewogfTsKIAogLyogUmVhY3Qgd3JhcHBlciBvbiBjb2xvciBwaWNrciAqLwotZXhwb3J0IGZ1 bmN0aW9uIElucHV0Q29sb3Ioe3ZhbHVlLCBjb250cm9sUHJvcHMsIGRpc2FibGVkLCBvbkNoYW5n ZSwgY3Vyck9ian0pIHsKK2V4cG9ydCBmdW5jdGlvbiBJbnB1dENvbG9yKHsgdmFsdWUsIGNvbnRy b2xQcm9wcywgZGlzYWJsZWQsIG9uQ2hhbmdlLCBjdXJyT2JqIH0pIHsKICAgY29uc3QgcGlja3JP cHRpb25zID0gewogICAgIHNob3dQYWxldHRlOiB0cnVlLAogICAgIGFsbG93RW1wdHk6IHRydWUs CkBAIC04OTYsMTkgKzkxNywxOSBAQCBleHBvcnQgZnVuY3Rpb24gSW5wdXRDb2xvcih7dmFsdWUs IGNvbnRyb2xQcm9wcywgZGlzYWJsZWQsIG9uQ2hhbmdlLCBjdXJyT2JqfSkgewogICBjb25zdCBw aWNrck9iaiA9IHVzZVJlZigpOwogICBjb25zdCBjbGFzc2VzID0gdXNlU3R5bGVzKCk7CiAKLSAg Y29uc3Qgc2V0Q29sb3IgPSAobmV3VmFsKT0+eworICBjb25zdCBzZXRDb2xvciA9IChuZXdWYWwp ID0+IHsKICAgICBwaWNrck9iai5jdXJyZW50ICYmCiAgICAgICBwaWNrck9iai5jdXJyZW50LnNl dENvbG9yKChfLmlzVW5kZWZpbmVkKG5ld1ZhbCkgfHwgbmV3VmFsID09ICcnKSA/IHBpY2tyT3B0 aW9ucy5kZWZhdWx0Q29sb3IgOiBuZXdWYWwpOwogICB9OwogCi0gIGNvbnN0IGRlc3Ryb3lQaWNr ciA9ICgpPT57Ci0gICAgaWYocGlja3JPYmouY3VycmVudCkgeworICBjb25zdCBkZXN0cm95UGlj a3IgPSAoKSA9PiB7CisgICAgaWYgKHBpY2tyT2JqLmN1cnJlbnQpIHsKICAgICAgIHBpY2tyT2Jq LmN1cnJlbnQuZGVzdHJveSgpOwogICAgICAgcGlja3JPYmouY3VycmVudCA9IG51bGw7CiAgICAg fQogICB9OwogCi0gIGNvbnN0IGluaXRQaWNrciA9ICgpPT57CisgIGNvbnN0IGluaXRQaWNrciA9 ICgpID0+IHsKICAgICAvKiBwaWNrciBkb2VzIG5vdCBoYXZlIHdheSB0byB1cGRhdGUgb3B0aW9u cywgbmVlZCB0bwogICAgIGRlc3Ryb3kgYW5kIHJlY3JlYXRlIHBpY2tyIHRvIHJlZmxlY3Qgb3B0 aW9ucyAqLwogICAgIGRlc3Ryb3lQaWNrcigpOwpAQCAtOTIwLDcgKzk0MSw3IEBAIGV4cG9ydCBm dW5jdGlvbiBJbnB1dENvbG9yKHt2YWx1ZSwgY29udHJvbFByb3BzLCBkaXNhYmxlZCwgb25DaGFu Z2UsIGN1cnJPYmp9KSB7CiAgICAgICBzd2F0Y2hlczogWwogICAgICAgICAnIzAwMCcsICcjNjY2 JywgJyNjY2MnLCAnI2ZmZicsICcjZjkwJywgJyNmZjAnLCAnIzBmMCcsCiAgICAgICAgICcjZjBm JywgJyNmNGNjY2MnLCAnI2ZjZTVjZCcsICcjZDBlMGUzJywgJyNjZmUyZjMnLCAnI2VhZDFkYycs ICcjZWE5OTk5JywKLSAgICAgICAgJyNiNmQ3YTgnLCAnI2EyYzRjOScsICcjZDVhNmJkJywgJyNl MDY2NjYnLCcjOTNjNDdkJywgJyM3NmE1YWYnLCAnI2MyN2JhMCcsCisgICAgICAgICcjYjZkN2E4 JywgJyNhMmM0YzknLCAnI2Q1YTZiZCcsICcjZTA2NjY2JywgJyM5M2M0N2QnLCAnIzc2YTVhZics ICcjYzI3YmEwJywKICAgICAgICAgJyNmMWMyMzInLCAnIzZhYTg0ZicsICcjNDU4MThlJywgJyNh NjRkNzknLCAnI2JmOTAwMCcsICcjMGMzNDNkJywgJyM0YzExMzAnLAogICAgICAgXSwKICAgICAg IHBvc2l0aW9uOiBwaWNrck9wdGlvbnMucG9zaXRpb24sCkBAIC05NDEsMjAgKzk2MiwyMCBAQCBl eHBvcnQgZnVuY3Rpb24gSW5wdXRDb2xvcih7dmFsdWUsIGNvbnRyb2xQcm9wcywgZGlzYWJsZWQs IG9uQ2hhbmdlLCBjdXJyT2JqfSkgewogICAgICAgc2V0Q29sb3IodmFsdWUpOwogICAgICAgZGlz YWJsZWQgJiYgaW5zdGFuY2UuZGlzYWJsZSgpOwogCi0gICAgICBjb25zdCB7bGFzdENvbG9yfSA9 IGluc3RhbmNlLmdldFJvb3QoKS5wcmV2aWV3OwotICAgICAgY29uc3Qge2NsZWFyfSA9IGluc3Rh bmNlLmdldFJvb3QoKS5pbnRlcmFjdGlvbjsKKyAgICAgIGNvbnN0IHsgbGFzdENvbG9yIH0gPSBp bnN0YW5jZS5nZXRSb290KCkucHJldmlldzsKKyAgICAgIGNvbnN0IHsgY2xlYXIgfSA9IGluc3Rh bmNlLmdldFJvb3QoKS5pbnRlcmFjdGlvbjsKIAogICAgICAgLyogQ3ljbGUgdGhlIGtleWJvYXJk IG5hdmlnYXRpb24gd2l0aGluIHRoZSBjb2xvciBwaWNrZXIgKi8KLSAgICAgIGNsZWFyLmFkZEV2 ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSk9PnsKLSAgICAgICAgaWYoZS5rZXlDb2RlID09PSA5 KSB7CisgICAgICBjbGVhci5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGUpID0+IHsKKyAg ICAgICAgaWYgKGUua2V5Q29kZSA9PT0gOSkgewogICAgICAgICAgIGUucHJldmVudERlZmF1bHQo KTsKICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgIGxhc3RDb2xvci5m b2N1cygpOwogICAgICAgICB9CiAgICAgICB9KTsKIAotICAgICAgbGFzdENvbG9yLmFkZEV2ZW50 TGlzdGVuZXIoJ2tleWRvd24nLCAoZSk9PnsKLSAgICAgICAgaWYoZS5rZXlDb2RlID09PSA5ICYm IGUuc2hpZnRLZXkpIHsKKyAgICAgIGxhc3RDb2xvci5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3du JywgKGUpID0+IHsKKyAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gOSAmJiBlLnNoaWZ0S2V5KSB7 CiAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgIGUuc3RvcFByb3BhZ2F0 aW9uKCk7CiAgICAgICAgICAgY2xlYXIuZm9jdXMoKTsKQEAgLTk2NSwzMiArOTg2LDMyIEBAIGV4 cG9ydCBmdW5jdGlvbiBJbnB1dENvbG9yKHt2YWx1ZSwgY29udHJvbFByb3BzLCBkaXNhYmxlZCwg b25DaGFuZ2UsIGN1cnJPYmp9KSB7CiAgICAgfSkub24oJ2NoYW5nZScsIChjb2xvcikgPT4gewog ICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UoY29sb3IudG9IRVhBKCkudG9TdHJpbmcoKSk7CiAg ICAgfSkub24oJ3Nob3cnLCAoY29sb3IsIGluc3RhbmNlKSA9PiB7Ci0gICAgICBjb25zdCB7cGFs ZXR0ZX0gPSBpbnN0YW5jZS5nZXRSb290KCkucGFsZXR0ZTsKKyAgICAgIGNvbnN0IHsgcGFsZXR0 ZSB9ID0gaW5zdGFuY2UuZ2V0Um9vdCgpLnBhbGV0dGU7CiAgICAgICBwYWxldHRlLmZvY3VzKCk7 CiAgICAgfSkub24oJ2hpZGUnLCAoaW5zdGFuY2UpID0+IHsKICAgICAgIGNvbnN0IGJ1dHRvbiA9 IGluc3RhbmNlLmdldFJvb3QoKS5idXR0b247CiAgICAgICBidXR0b24uZm9jdXMoKTsKICAgICB9 KTsKIAotICAgIGlmKGN1cnJPYmopIHsKKyAgICBpZiAoY3Vyck9iaikgewogICAgICAgY3Vyck9i aihwaWNrck9iai5jdXJyZW50KTsKICAgICB9CiAgIH07CiAKLSAgdXNlRWZmZWN0KCgpPT57Cisg IHVzZUVmZmVjdCgoKSA9PiB7CiAgICAgaW5pdFBpY2tyKCk7Ci0gICAgcmV0dXJuICgpPT57Cisg ICAgcmV0dXJuICgpID0+IHsKICAgICAgIGRlc3Ryb3lQaWNrcigpOwogICAgIH07CiAgIH0sIFsu Li5PYmplY3QudmFsdWVzKHBpY2tyT3B0aW9ucyldKTsKIAotICB1c2VFZmZlY3QoKCk9PnsKLSAg ICBpZihwaWNrck9iai5jdXJyZW50KSB7CisgIHVzZUVmZmVjdCgoKSA9PiB7CisgICAgaWYgKHBp Y2tyT2JqLmN1cnJlbnQpIHsKICAgICAgIHNldENvbG9yKHZhbHVlKTsKICAgICB9CiAgIH0sIFt2 YWx1ZV0pOwogCi0gIGxldCBidG5TdHlsZXMgPSB7YmFja2dyb3VuZENvbG9yOiB2YWx1ZX07Cisg IGxldCBidG5TdHlsZXMgPSB7IGJhY2tncm91bmRDb2xvcjogdmFsdWUgfTsKICAgcmV0dXJuICgK ICAgICA8UGdJY29uQnV0dG9uIHJlZj17ZWxlUmVmfSB0aXRsZT17Z2V0dGV4dCgnU2VsZWN0IHRo ZSBjb2xvcicpfSBjbGFzc05hbWU9e2NsYXNzZXMuY29sb3JCdG59IHN0eWxlPXtidG5TdHlsZXN9 IGRpc2FibGVkPXtwaWNrck9wdGlvbnMuZGlzYWJsZWR9CiAgICAgICBpY29uPXsoXy5pc1VuZGVm aW5lZCh2YWx1ZSkgfHwgXy5pc051bGwodmFsdWUpIHx8IHZhbHVlID09PSAnJykgJiYgPENsb3Nl SWNvbiAvPn0KQEAgLTEwMDYsMTEgKzEwMjcsMTEgQEAgSW5wdXRDb2xvci5wcm9wVHlwZXMgPSB7 CiB9OwogCiBleHBvcnQgZnVuY3Rpb24gRm9ybUlucHV0Q29sb3IoewotICBoYXNFcnJvciwgcmVx dWlyZWQsIGNsYXNzTmFtZSwgbGFiZWwsIGhlbHBNZXNzYWdlLCB0ZXN0Y2lkLCAuLi5wcm9wc30p IHsKKyAgaGFzRXJyb3IsIHJlcXVpcmVkLCBjbGFzc05hbWUsIGxhYmVsLCBoZWxwTWVzc2FnZSwg dGVzdGNpZCwgLi4ucHJvcHMgfSkgewogCiAgIHJldHVybiAoCiAgICAgPEZvcm1JbnB1dCByZXF1 aXJlZD17cmVxdWlyZWR9IGxhYmVsPXtsYWJlbH0gZXJyb3I9e2hhc0Vycm9yfSBjbGFzc05hbWU9 e2NsYXNzTmFtZX0gaGVscE1lc3NhZ2U9e2hlbHBNZXNzYWdlfSB0ZXN0Y2lkPXt0ZXN0Y2lkfT4K LSAgICAgIDxJbnB1dENvbG9yIHsuLi5wcm9wc30vPgorICAgICAgPElucHV0Q29sb3Igey4uLnBy b3BzfSAvPgogICAgIDwvRm9ybUlucHV0PgogICApOwogfQpAQCAtMTAyMyw5ICsxMDQ0LDkgQEAg Rm9ybUlucHV0Q29sb3IucHJvcFR5cGVzID0gewogICB0ZXN0Y2lkOiBQcm9wVHlwZXMuc3RyaW5n LAogfTsKIAotZXhwb3J0IGZ1bmN0aW9uIFBsYWluU3RyaW5nKHtjb250cm9sUHJvcHMsIHZhbHVl fSkgeworZXhwb3J0IGZ1bmN0aW9uIFBsYWluU3RyaW5nKHsgY29udHJvbFByb3BzLCB2YWx1ZSB9 KSB7CiAgIGxldCBmaW5hbFZhbHVlID0gdmFsdWU7Ci0gIGlmKGNvbnRyb2xQcm9wcz8uZm9ybWF0 dGVyKSB7CisgIGlmIChjb250cm9sUHJvcHM/LmZvcm1hdHRlcikgewogICAgIGZpbmFsVmFsdWUg PSBjb250cm9sUHJvcHMuZm9ybWF0dGVyLmZyb21SYXcoZmluYWxWYWx1ZSk7CiAgIH0KICAgcmV0 dXJuIDxzcGFuPntmaW5hbFZhbHVlfTwvc3Bhbj47CkBAIC0xMDM1LDcgKzEwNTYsNyBAQCBQbGFp blN0cmluZy5wcm9wVHlwZXMgPSB7CiAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LAogfTsKIAotZXhw b3J0IGZ1bmN0aW9uIEZvcm1Ob3RlKHt0ZXh0LCBjbGFzc05hbWV9KSB7CitleHBvcnQgZnVuY3Rp b24gRm9ybU5vdGUoeyB0ZXh0LCBjbGFzc05hbWUgfSkgewogICBjb25zdCBjbGFzc2VzID0gdXNl U3R5bGVzKCk7CiAgIHJldHVybiAoCiAgICAgPEJveCBjbGFzc05hbWU9e2NsYXNzTmFtZX0+CkBA IC0xMDUxLDcgKzEwNzIsNyBAQCBGb3JtTm90ZS5wcm9wVHlwZXMgPSB7CiAgIGNsYXNzTmFtZTog Q3VzdG9tUHJvcFR5cGVzLmNsYXNzTmFtZSwKIH07CiAKLWNvbnN0IHVzZVN0eWxlc0Zvcm1Gb290 ZXIgPSBtYWtlU3R5bGVzKCh0aGVtZSk9Pih7Citjb25zdCB1c2VTdHlsZXNGb3JtRm9vdGVyID0g bWFrZVN0eWxlcygodGhlbWUpID0+ICh7CiAgIHJvb3Q6IHsKICAgICBwYWRkaW5nOiB0aGVtZS5z cGFjaW5nKDAuNSksCiAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsCkBAIC0xMTA4LDcgKzExMjks NyBAQCBjb25zdCB1c2VTdHlsZXNGb3JtRm9vdGVyID0gbWFrZVN0eWxlcygodGhlbWUpPT4oewog ZXhwb3J0IGZ1bmN0aW9uIEZvcm1Gb290ZXJNZXNzYWdlKHByb3BzKSB7CiAgIGNvbnN0IGNsYXNz ZXMgPSB1c2VTdHlsZXNGb3JtRm9vdGVyKCk7CiAKLSAgaWYoIXByb3BzLm1lc3NhZ2UpIHsKKyAg aWYgKCFwcm9wcy5tZXNzYWdlKSB7CiAgICAgcmV0dXJuIDw+PC8+OwogICB9CiAgIHJldHVybiAo CkBAIC0xMTIyLDE1ICsxMTQzLDU0IEBAIEZvcm1Gb290ZXJNZXNzYWdlLnByb3BUeXBlcyA9IHsK ICAgbWVzc2FnZTogUHJvcFR5cGVzLnN0cmluZywKIH07CiAKLWV4cG9ydCBmdW5jdGlvbiBOb3Rp Zmllck1lc3NhZ2Uoe3R5cGU9TUVTU0FHRV9UWVBFLlNVQ0NFU1MsIG1lc3NhZ2UsIGNsb3NhYmxl PXRydWUsIG9uQ2xvc2U9KCk9PnsvKlRoaXMgaXMgaW50ZW50aW9uYWwgKFNvbmFyUXViZSkqL319 KSB7CitleHBvcnQgZnVuY3Rpb24gRm9ybUlucHV0S2V5Ym9hcmRTaG9ydGN1dCh7IGhhc0Vycm9y LCBsYWJlbCwgY2xhc3NOYW1lLCBoZWxwTWVzc2FnZSwgdGVzdGNpZCwgb25DaGFuZ2UsIC4uLnBy b3BzIH0pIHsKKyAgY29uc3QgY2lkID0gXy51bmlxdWVJZCgnYycpOworICBjb25zdCBoZWxwaWQg PSBgaCR7Y2lkfWA7CisgIHJldHVybiAoCisgICAgPEZvcm1JbnB1dCBsYWJlbD17bGFiZWx9IGVy cm9yPXtoYXNFcnJvcn0gY2xhc3NOYW1lPXtjbGFzc05hbWV9IGhlbHBNZXNzYWdlPXtoZWxwTWVz c2FnZX0gdGVzdGNpZD17dGVzdGNpZH0+CisgICAgICA8S2V5Ym9hcmRTaG9ydGN1dHMgY2lkPXtj aWR9IGhlbHBpZD17aGVscGlkfSBvbkNoYW5nZT17b25DaGFuZ2V9IHsuLi5wcm9wc30gLz4KKyAg ICA8L0Zvcm1JbnB1dD4KKworICApOworfQorRm9ybUlucHV0S2V5Ym9hcmRTaG9ydGN1dC5wcm9w VHlwZXMgPSB7CisgIGhhc0Vycm9yOiBQcm9wVHlwZXMuYm9vbCwKKyAgbGFiZWw6IFByb3BUeXBl cy5zdHJpbmcsCisgIGNsYXNzTmFtZTogQ3VzdG9tUHJvcFR5cGVzLmNsYXNzTmFtZSwKKyAgaGVs cE1lc3NhZ2U6IFByb3BUeXBlcy5zdHJpbmcsCisgIHRlc3RjaWQ6IFByb3BUeXBlcy5zdHJpbmcs CisgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYworfTsKKworZXhwb3J0IGZ1bmN0aW9uIEZvcm1J bnB1dFF1ZXJ5VGhyZXNob2xkKHsgaGFzRXJyb3IsIGxhYmVsLCBjbGFzc05hbWUsIGhlbHBNZXNz YWdlLCB0ZXN0Y2lkLCBvbkNoYW5nZSwgLi4ucHJvcHMgfSkgeworICBjb25zdCBjaWQgPSBfLnVu aXF1ZUlkKCdjJyk7CisgIGNvbnN0IGhlbHBpZCA9IGBoJHtjaWR9YDsKKyAgcmV0dXJuICgKKyAg ICA8Rm9ybUlucHV0IGxhYmVsPXtsYWJlbH0gZXJyb3I9e2hhc0Vycm9yfSBjbGFzc05hbWU9e2Ns YXNzTmFtZX0gaGVscE1lc3NhZ2U9e2hlbHBNZXNzYWdlfSB0ZXN0Y2lkPXt0ZXN0Y2lkfT4KKyAg ICAgIDxRdWVyeVRocmVzaG9sZHMgY2lkPXtjaWR9IGhlbHBpZD17aGVscGlkfSBvbkNoYW5nZT17 b25DaGFuZ2V9IHsuLi5wcm9wc30gLz4KKyAgICA8L0Zvcm1JbnB1dD4KKworICApOworfQorRm9y bUlucHV0UXVlcnlUaHJlc2hvbGQucHJvcFR5cGVzID0geworICBoYXNFcnJvcjogUHJvcFR5cGVz LmJvb2wsCisgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLAorICBjbGFzc05hbWU6IEN1c3RvbVBy b3BUeXBlcy5jbGFzc05hbWUsCisgIGhlbHBNZXNzYWdlOiBQcm9wVHlwZXMuc3RyaW5nLAorICB0 ZXN0Y2lkOiBQcm9wVHlwZXMuc3RyaW5nLAorICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMKK307 CisKKworZXhwb3J0IGZ1bmN0aW9uIE5vdGlmaWVyTWVzc2FnZSh7IHR5cGUgPSBNRVNTQUdFX1RZ UEUuU1VDQ0VTUywgbWVzc2FnZSwgY2xvc2FibGUgPSB0cnVlLCBvbkNsb3NlID0gKCkgPT4gey8q VGhpcyBpcyBpbnRlbnRpb25hbCAoU29uYXJRdWJlKSovIH0gfSkgewogICBjb25zdCBjbGFzc2Vz ID0gdXNlU3R5bGVzRm9ybUZvb3RlcigpOwogCiAgIHJldHVybiAoCiAgICAgPEJveCBjbGFzc05h bWU9e2Nsc3goY2xhc3Nlcy5jb250YWluZXIsIGNsYXNzZXNbYGNvbnRhaW5lciR7dHlwZX1gXSl9 PgotICAgICAgPEZvcm1JY29uIHR5cGU9e3R5cGV9IGNsYXNzTmFtZT17Y2xhc3Nlc1tgaWNvbiR7 dHlwZX1gXX0vPgorICAgICAgPEZvcm1JY29uIHR5cGU9e3R5cGV9IGNsYXNzTmFtZT17Y2xhc3Nl c1tgaWNvbiR7dHlwZX1gXX0gLz4KICAgICAgIDxCb3ggY2xhc3NOYW1lPXtjbGFzc2VzLm1lc3Nh Z2V9PnttZXNzYWdlfTwvQm94PgogICAgICAge2Nsb3NhYmxlICYmIDxJY29uQnV0dG9uIGNsYXNz TmFtZT17Y2xzeChjbGFzc2VzLmNsb3NlQnV0dG9uLCBjbGFzc2VzW2BpY29uJHt0eXBlfWBdKX0g b25DbGljaz17b25DbG9zZX0+Ci0gICAgICAgIDxGb3JtSWNvbiBjbG9zZT17dHJ1ZX0vPgorICAg ICAgICA8Rm9ybUljb24gY2xvc2U9e3RydWV9IC8+CiAgICAgICA8L0ljb25CdXR0b24+fQogICAg IDwvQm94PgogICApOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2NvbXBvbmVu dHMvS2V5Ym9hcmRTaG9ydGN1dHMuanN4IGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2NvbXBvbmVu dHMvS2V5Ym9hcmRTaG9ydGN1dHMuanN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwLi43NmFlZDdjYgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9j b21wb25lbnRzL0tleWJvYXJkU2hvcnRjdXRzLmpzeApAQCAtMCwwICsxLDEwMyBAQAorLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor Ly8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMp IDIwMTMgLSAyMDIyLCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3 YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor CitpbXBvcnQgXyBmcm9tICdsb2Rhc2gnOworaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQ29udHJv bExhYmVsLCBtYWtlU3R5bGVzIH0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUnOworaW1wb3J0IFJl YWN0IGZyb20gJ3JlYWN0JzsKK2ltcG9ydCB7IElucHV0Q2hlY2tib3gsIElucHV0VGV4dCB9IGZy b20gJy4vRm9ybUNvbXBvbmVudHMnOworaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVz JzsKKworY29uc3QgdXNlU3R5bGVzID0gbWFrZVN0eWxlcygoKSA9PiAoeworICBmb3JtQ29udHJv bExhYmVsOiB7CisgICAgcGFkZGluZzogJzNweCcsCisgIH0sCisgIGZvcm1JbnB1dDogeworICAg IG1hcmdpbkxlZnQ6ICc1cHgnCisgIH0sCisgIGZvcm1DaGVja2JveENvbnRyb2w6IHsKKyAgICBw YWRkaW5nOiAnM3B4JywKKyAgICBib3JkZXI6ICcxcHggc29saWQnLAorICAgIGJvcmRlclJhZGl1 czogJzAuMjVyZW0nLAorICB9LAorICBmb3JtR3JvdXA6IHsKKyAgICBwYWRkaW5nOiAnNXB4Jwor ICB9Cit9KSk7CisKK2V4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEtleWJvYXJkU2hvcnRjdXRzKHsg dmFsdWUsIG9uQ2hhbmdlLCBmaWVsZHMgfSkgeworICBjb25zdCBjbGFzc2VzID0gdXNlU3R5bGVz KCk7CisgIGNvbnN0IGtleUNpZCA9IF8udW5pcXVlSWQoJ2MnKTsKKyAgY29uc3Qga2V5aGVscGlk ID0gYGgke2tleUNpZH1gOworICBjb25zdCBzaGlmdENpZCA9IF8udW5pcXVlSWQoJ2MnKTsKKyAg Y29uc3Qgc2hpZnRoZWxwaWQgPSBgaCR7c2hpZnRDaWR9YDsKKyAgY29uc3QgY3RybENpZCA9IF8u dW5pcXVlSWQoJ2MnKTsKKyAgY29uc3QgY3RybGhlbHBpZCA9IGBoJHtjdHJsQ2lkfWA7CisgIGNv bnN0IGFsdENpZCA9IF8udW5pcXVlSWQoJ2MnKTsKKyAgY29uc3QgYWx0aGVscGlkID0gYGgke2Fs dENpZH1gOworCisgIGNvbnN0IG9uS2V5RG93biA9IChlKSA9PiB7CisgICAgbGV0IG5ld1ZhbCA9 IHsgLi4udmFsdWUgfTsKKyAgICBsZXQgX3ZhbCA9IGUua2V5OworICAgIGlmIChlLmtleUNvZGUg PT0gMzIpIHsKKyAgICAgIF92YWwgPSAnU3BhY2UnOworICAgIH0KKyAgICBuZXdWYWwua2V5ID0g eworICAgICAgY2hhcjogX3ZhbCwKKyAgICAgIGtleV9jb2RlOiBlLmtleUNvZGUKKyAgICB9Owor ICAgIG9uQ2hhbmdlKG5ld1ZhbCk7CisgIH07CisKKyAgY29uc3Qgb25TaGlmdENoYW5nZSA9IChl KSA9PiB7CisgICAgbGV0IG5ld1ZhbCA9IHsgLi4udmFsdWUgfTsKKyAgICBuZXdWYWwuc2hpZnQg PSBlLnRhcmdldC5jaGVja2VkOworICAgIG9uQ2hhbmdlKG5ld1ZhbCk7CisgIH07CisKKyAgY29u c3Qgb25DdHJsQ2hhbmdlID0gKGUpID0+IHsKKyAgICBsZXQgbmV3VmFsID0geyAuLi52YWx1ZSB9 OworICAgIG5ld1ZhbC5jdHJsID0gZS50YXJnZXQuY2hlY2tlZDsKKyAgICBvbkNoYW5nZShuZXdW YWwpOworICB9OworCisgIGNvbnN0IG9uQWx0Q2hhbmdlID0gKGUpID0+IHsKKyAgICBsZXQgbmV3 VmFsID0geyAuLi52YWx1ZSB9OworICAgIG5ld1ZhbC5hbHQgPSBlLnRhcmdldC5jaGVja2VkOwor ICAgIG9uQ2hhbmdlKG5ld1ZhbCk7CisgIH07CisKKyAgcmV0dXJuICgKKyAgICA8Rm9ybUdyb3Vw IHJvdz17dHJ1ZX0gY2xhc3NOYW1lPXtjbGFzc2VzLmZvcm1Hcm91cH0+CisgICAgICB7ZmllbGRz Lm1hcChlbGVtZW50ID0+IHsKKyAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PSAna2V5Q29kZScp IHsKKyAgICAgICAgICByZXR1cm4gPEZvcm1Db250cm9sTGFiZWwgIGtleT17Xy51bmlxdWVJZCgn YycpfSBsYWJlbFBsYWNlbWVudD0ic3RhcnQiIGNsYXNzTmFtZT17Y2xhc3Nlcy5mb3JtQ29udHJv bExhYmVsfSBjb250cm9sPXs8SW5wdXRUZXh0IGNpZD17a2V5Q2lkfSBoZWxwaWQ9e2tleWhlbHBp ZH0gdHlwZT0ndGV4dCcgdmFsdWU9e3ZhbHVlPy5rZXk/LmNoYXJ9IGNvbnRyb2xQcm9wcz17Cisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgIG9uS2V5RG93bjogb25LZXlEb3duLAorICAgICAg ICAgICAgfQorICAgICAgICAgIH0+PC9JbnB1dFRleHQ+fSBsYWJlbD17ZWxlbWVudC5sYWJlbH0g Lz47CisgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5uYW1lID09ICdzaGlmdCcpIHsKKyAgICAg ICAgICByZXR1cm4gPEZvcm1Db250cm9sTGFiZWwga2V5PXtfLnVuaXF1ZUlkKCdjJyl9IGxhYmVs UGxhY2VtZW50PSJzdGFydCIgY2xhc3NOYW1lPXtjbGFzc2VzLmZvcm1DaGVja2JveENvbnRyb2x9 IGNvbnRyb2w9ezxJbnB1dENoZWNrYm94IGNpZD17c2hpZnRDaWR9IGhlbHBpZD17c2hpZnRoZWxw aWR9IHZhbHVlPXt2YWx1ZT8uc2hpZnR9IG9uQ2hhbmdlPXtvblNoaWZ0Q2hhbmdlfT48L0lucHV0 Q2hlY2tib3g+fSBsYWJlbD17ZWxlbWVudC5sYWJlbH0gLz47CisgICAgICAgIH0gZWxzZSBpZiAo ZWxlbWVudC5uYW1lID09ICdjb250cm9sJykgeworICAgICAgICAgIHJldHVybiA8Rm9ybUNvbnRy b2xMYWJlbCBrZXk9e18udW5pcXVlSWQoJ2MnKX0gbGFiZWxQbGFjZW1lbnQ9InN0YXJ0IiBjbGFz c05hbWU9e2NsYXNzZXMuZm9ybUNoZWNrYm94Q29udHJvbH0gY29udHJvbD17PElucHV0Q2hlY2ti b3ggY2lkPXtjdHJsQ2lkfSBoZWxwaWQ9e2N0cmxoZWxwaWR9IHZhbHVlPXt2YWx1ZT8uY3RybH0g b25DaGFuZ2U9e29uQ3RybENoYW5nZX0gPjwvSW5wdXRDaGVja2JveD59IGxhYmVsPXtlbGVtZW50 LmxhYmVsfSAvPjsKKyAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50Lm5hbWUgPT0gJ2FsdCcpIHsK KyAgICAgICAgICByZXR1cm4gPEZvcm1Db250cm9sTGFiZWwga2V5PXtfLnVuaXF1ZUlkKCdjJyl9 IGxhYmVsUGxhY2VtZW50PSJzdGFydCIgY2xhc3NOYW1lPXtjbGFzc2VzLmZvcm1DaGVja2JveENv bnRyb2x9IGNvbnRyb2w9ezxJbnB1dENoZWNrYm94IGNpZD17YWx0Q2lkfSBoZWxwaWQ9e2FsdGhl bHBpZH0gdmFsdWU9e3ZhbHVlPy5hbHR9IG9uQ2hhbmdlPXtvbkFsdENoYW5nZX0+PC9JbnB1dENo ZWNrYm94Pn0gbGFiZWw9e2VsZW1lbnQubGFiZWx9IC8+OworICAgICAgICB9CisgICAgICB9KQor CisgICAgICB9CisgICAgPC9Gb3JtR3JvdXA+CisgICk7Cit9CisKK0tleWJvYXJkU2hvcnRjdXRz LnByb3BUeXBlcyA9IHsKKyAgdmFsdWU6IFByb3BUeXBlcy5vYmplY3QsCisgIG9uQ2hhbmdlOiBQ cm9wVHlwZXMuZnVuYywKKyAgY29udHJvbFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LAorICBmaWVs ZHM6IFByb3BUeXBlcy5hcnJheQorfTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9q cy9jb21wb25lbnRzL1F1ZXJ5VGhyZXNob2xkcy5qc3ggYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMv Y29tcG9uZW50cy9RdWVyeVRocmVzaG9sZHMuanN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwLi4xNmY1Y2E3NgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRp Yy9qcy9jb21wb25lbnRzL1F1ZXJ5VGhyZXNob2xkcy5qc3gKQEAgLTAsMCArMSw2NyBAQAorLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v LworLy8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQg KEMpIDIwMTMgLSAyMDIyLCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNv ZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v LworCitpbXBvcnQgZ2V0dGV4dCBmcm9tICdzb3VyY2VzL2dldHRleHQnOworaW1wb3J0IF8gZnJv bSAnbG9kYXNoJzsKK2ltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUNvbnRyb2xMYWJlbCwgbWFrZVN0 eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlJzsKK2ltcG9ydCBSZWFjdCBmcm9tICdyZWFj dCc7CitpbXBvcnQgeyBJbnB1dFRleHQgfSBmcm9tICcuL0Zvcm1Db21wb25lbnRzJzsKK2ltcG9y dCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7CisKK2NvbnN0IHVzZVN0eWxlcyA9IG1ha2VT dHlsZXMoKCkgPT4gKHsKKyAgZm9ybUNvbnRyb2xMYWJlbDogeworICAgIHBhZGRpbmc6ICczcHgn LAorICB9LAorICBmb3JtSW5wdXQ6IHsKKyAgICBtYXJnaW5MZWZ0OiAnNXB4JworICB9LAorICBm b3JtQ2hlY2tib3hDb250cm9sOiB7CisgICAgcGFkZGluZzogJzNweCcsCisgICAgYm9yZGVyOiAn MXB4IHNvbGlkJywKKyAgICBib3JkZXJSYWRpdXM6ICcwLjI1cmVtJywKKyAgfSwKKyAgZm9ybUdy b3VwOiB7CisgICAgcGFkZGluZzogJzVweCcKKyAgfQorfSkpOworCitleHBvcnQgZGVmYXVsdCBm dW5jdGlvbiBRdWVyeVRocmVzaG9sZHMoeyB2YWx1ZSwgb25DaGFuZ2UgfSkgeworICBjb25zdCBj bGFzc2VzID0gdXNlU3R5bGVzKCk7CisgIGNvbnN0IHdhcm5pbmdDaWQgPSBfLnVuaXF1ZUlkKCdj Jyk7CisgIGNvbnN0IHdhcm5pbmdoZWxwaWQgPSBgaCR7d2FybmluZ0NpZH1gOworICBjb25zdCBh bGVydENpZCA9IF8udW5pcXVlSWQoJ2MnKTsKKyAgY29uc3QgYWxlcnRoZWxwaWQgPSBgaCR7YWxl cnRDaWR9YDsKKyAgCisgIGNvbnN0IG9uV2FybmluZ0NoYW5nZSA9ICh2YWwpID0+IHsKKyAgICBs ZXQgbmV3X3ZhbCA9IHsuLi52YWx1ZX07CisgICAgbmV3X3ZhbFsnd2FybmluZyddID0gdmFsOwor ICAgIG9uQ2hhbmdlKG5ld192YWwpOworICB9OworCisgIGNvbnN0IG9uQWxlcnRDaGFuZ2UgPSAo dmFsKSA9PiB7CisgICAgbGV0IG5ld192YWwgPSB7Li4udmFsdWV9OworICAgIG5ld192YWxbJ2Fs ZXJ0J10gPSB2YWw7CisgICAgb25DaGFuZ2UobmV3X3ZhbCk7CisgIH07CisKKyAgcmV0dXJuICgK KyAgICA8Rm9ybUdyb3VwIHJvdz17dHJ1ZX0gY2xhc3NOYW1lPXtjbGFzc2VzLmZvcm1Hcm91cH0+ CisgICAgICA8Rm9ybUNvbnRyb2xMYWJlbCAga2V5PXtfLnVuaXF1ZUlkKCdjJyl9IGxhYmVsUGxh Y2VtZW50PSJzdGFydCIgY2xhc3NOYW1lPXtjbGFzc2VzLmZvcm1Db250cm9sTGFiZWx9IGNvbnRy b2w9ezxJbnB1dFRleHQgY2lkPXt3YXJuaW5nQ2lkfSBoZWxwaWQ9e3dhcm5pbmdoZWxwaWR9IHR5 cGU9J251bWVyaWMnIHZhbHVlPXt2YWx1ZT8ud2FybmluZ30KKyAgICAgICAgb25DaGFuZ2U9e29u V2FybmluZ0NoYW5nZX0KKyAgICAgID48L0lucHV0VGV4dD59IGxhYmVsPXtnZXR0ZXh0KCdXYXJu aW5nJyl9IC8+OworICAgICAgPEZvcm1Db250cm9sTGFiZWwgIGtleT17Xy51bmlxdWVJZCgnYycp fSBsYWJlbFBsYWNlbWVudD0ic3RhcnQiIGNsYXNzTmFtZT17Y2xhc3Nlcy5mb3JtQ29udHJvbExh YmVsfSBjb250cm9sPXs8SW5wdXRUZXh0IGNpZD17YWxlcnRDaWR9IGhlbHBpZD17YWxlcnRoZWxw aWR9IHR5cGU9J251bWVyaWMnIHZhbHVlPXt2YWx1ZT8uYWxlcnR9IAorICAgICAgICBvbkNoYW5n ZT17b25BbGVydENoYW5nZX0+PC9JbnB1dFRleHQ+fSBsYWJlbD17Z2V0dGV4dCgnQWxlcnQnKX0g Lz47CisgICAgPC9Gb3JtR3JvdXA+CisgICk7Cit9CisKK1F1ZXJ5VGhyZXNob2xkcy5wcm9wVHlw ZXMgPSB7CisgIHZhbHVlOiBQcm9wVHlwZXMub2JqZWN0LAorICBvbkNoYW5nZTogUHJvcFR5cGVz LmZ1bmMsCit9OwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2hlbHBlcnMvTW9k YWxQcm92aWRlci5qc3ggYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvaGVscGVycy9Nb2RhbFByb3Zp ZGVyLmpzeAppbmRleCA3ZTRmZTUyNi4uZDdiMGIyNjEgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWlu L3N0YXRpYy9qcy9oZWxwZXJzL01vZGFsUHJvdmlkZXIuanN4CisrKyBiL3dlYi9wZ2FkbWluL3N0 YXRpYy9qcy9oZWxwZXJzL01vZGFsUHJvdmlkZXIuanN4CkBAIC04LDExICs4LDEzIEBACiAvLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v LwogCiBpbXBvcnQgeyBCb3gsIERpYWxvZywgRGlhbG9nQ29udGVudCwgRGlhbG9nVGl0bGUsIG1h a2VTdHlsZXMsIFBhcGVyIH0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUnOwotaW1wb3J0IFJlYWN0 IGZyb20gJ3JlYWN0JzsKLWltcG9ydCB7Z2V0RXBvY2h9IGZyb20gJ3NvdXJjZXMvdXRpbHMnOwor aW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnOworaW1wb3J0IHsgZ2V0RXBv Y2ggfSBmcm9tICdzb3VyY2VzL3V0aWxzJzsKIGltcG9ydCB7IERlZmF1bHRCdXR0b24sIFBnSWNv bkJ1dHRvbiwgUHJpbWFyeUJ1dHRvbiB9IGZyb20gJy4uL2NvbXBvbmVudHMvQnV0dG9ucyc7CiBp bXBvcnQgRHJhZ2dhYmxlIGZyb20gJ3JlYWN0LWRyYWdnYWJsZSc7CiBpbXBvcnQgQ2xvc2VJY29u IGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9DbG9zZVJvdW5kZWQnOworaW1wb3J0IEZ1bGxzY3Jl ZW5FeGl0SWNvbiBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvRnVsbHNjcmVlbkV4aXQnOworaW1w b3J0IEZ1bGxzY3JlZW5JY29uIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9GdWxsc2NyZWVuJzsK IGltcG9ydCBDdXN0b21Qcm9wVHlwZXMgZnJvbSAnLi4vY3VzdG9tX3Byb3BfdHlwZXMnOwogaW1w b3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJzsKIGltcG9ydCBnZXR0ZXh0IGZyb20gJ3Nv dXJjZXMvZ2V0dGV4dCc7CkBAIC0yNSw3ICsyNyw3IEBAIGNvbnN0IE1vZGFsQ29udGV4dCA9IFJl YWN0LmNyZWF0ZUNvbnRleHQoe30pOwogZXhwb3J0IGZ1bmN0aW9uIHVzZU1vZGFsKCkgewogICBy ZXR1cm4gUmVhY3QudXNlQ29udGV4dChNb2RhbENvbnRleHQpOwogfQotY29uc3QgdXNlQWxlcnRT dHlsZXMgPSBtYWtlU3R5bGVzKCh0aGVtZSk9Pih7Citjb25zdCB1c2VBbGVydFN0eWxlcyA9IG1h a2VTdHlsZXMoKHRoZW1lKSA9PiAoewogICBmb290ZXI6IHsKICAgICBkaXNwbGF5OiAnZmxleCcs CiAgICAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsCkBAIC0zNywxMSArMzksMTEgQEAgY29u c3QgdXNlQWxlcnRTdHlsZXMgPSBtYWtlU3R5bGVzKCh0aGVtZSk9Pih7CiAgIH0KIH0pKTsKIAot ZnVuY3Rpb24gQWxlcnRDb250ZW50KHt0ZXh0LCBjb25maXJtLCBva0xhYmVsPWdldHRleHQoJ09L JyksIGNhbmNlbExhYmVsPWdldHRleHQoJ0NhbmNlbCcpLCBvbk9rQ2xpY2ssIG9uQ2FuY2VsQ2xp Y2t9KSB7CitmdW5jdGlvbiBBbGVydENvbnRlbnQoeyB0ZXh0LCBjb25maXJtLCBva0xhYmVsID0g Z2V0dGV4dCgnT0snKSwgY2FuY2VsTGFiZWwgPSBnZXR0ZXh0KCdDYW5jZWwnKSwgb25Pa0NsaWNr LCBvbkNhbmNlbENsaWNrIH0pIHsKICAgY29uc3QgY2xhc3NlcyA9IHVzZUFsZXJ0U3R5bGVzKCk7 CiAgIHJldHVybiAoCiAgICAgPEJveCBkaXNwbGF5PSJmbGV4IiBmbGV4RGlyZWN0aW9uPSJjb2x1 bW4iIGhlaWdodD0iMTAwJSI+Ci0gICAgICA8Qm94IGZsZXhHcm93PSIxIiBwPXsyfT57dHlwZW9m KHRleHQpID09ICdzdHJpbmcnID8gSFRNTFJlYWN0UGFyc2VyKHRleHQpIDogdGV4dH08L0JveD4K KyAgICAgIDxCb3ggZmxleEdyb3c9IjEiIHA9ezJ9Pnt0eXBlb2YgKHRleHQpID09ICdzdHJpbmcn ID8gSFRNTFJlYWN0UGFyc2VyKHRleHQpIDogdGV4dH08L0JveD4KICAgICAgIDxCb3ggY2xhc3NO YW1lPXtjbGFzc2VzLmZvb3Rlcn0+CiAgICAgICAgIHtjb25maXJtICYmCiAgICAgICAgICAgPERl ZmF1bHRCdXR0b24gc3RhcnRJY29uPXs8Q2xvc2VJY29uIC8+fSBvbkNsaWNrPXtvbkNhbmNlbENs aWNrfSA+e2NhbmNlbExhYmVsfTwvRGVmYXVsdEJ1dHRvbj4KQEAgLTYwLDEwICs2MiwxMCBAQCBB bGVydENvbnRlbnQucHJvcFR5cGVzID0gewogICBjYW5jZWxMYWJlbDogUHJvcFR5cGVzLnN0cmlu ZywKIH07CiAKLWZ1bmN0aW9uIGFsZXJ0KHRpdGxlLCB0ZXh0LCBvbk9rQ2xpY2ssIG9rTGFiZWw9 Z2V0dGV4dCgnT0snKSl7CitmdW5jdGlvbiBhbGVydCh0aXRsZSwgdGV4dCwgb25Pa0NsaWNrLCBv a0xhYmVsID0gZ2V0dGV4dCgnT0snKSkgewogICAvLyBiaW5kIHRoZSBtb2RhbCBwcm92aWRlciBi ZWZvcmUgY2FsbGluZwotICB0aGlzLnNob3dNb2RhbCh0aXRsZSwgKGNsb3NlTW9kYWwpPT57Ci0g ICAgY29uc3Qgb25Pa0NsaWNrQ2xvc2UgPSAoKT0+eworICB0aGlzLnNob3dNb2RhbCh0aXRsZSwg KGNsb3NlTW9kYWwpID0+IHsKKyAgICBjb25zdCBvbk9rQ2xpY2tDbG9zZSA9ICgpID0+IHsKICAg ICAgIG9uT2tDbGljayAmJiBvbk9rQ2xpY2soKTsKICAgICAgIGNsb3NlTW9kYWwoKTsKICAgICB9 OwpAQCAtNzMsNDUgKzc1LDUzIEBAIGZ1bmN0aW9uIGFsZXJ0KHRpdGxlLCB0ZXh0LCBvbk9rQ2xp Y2ssIG9rTGFiZWw9Z2V0dGV4dCgnT0snKSl7CiAgIH0pOwogfQogCi1mdW5jdGlvbiBjb25maXJt KHRpdGxlLCB0ZXh0LCBvbk9rQ2xpY2ssIG9uQ2FuY2VsQ2xpY2ssIG9rTGFiZWw9Z2V0dGV4dCgn WWVzJyksIGNhbmNlbExhYmVsPWdldHRleHQoJ05vJykpIHsKK2Z1bmN0aW9uIGNvbmZpcm0odGl0 bGUsIHRleHQsIG9uT2tDbGljaywgb25DYW5jZWxDbGljaywgb2tMYWJlbCA9IGdldHRleHQoJ1ll cycpLCBjYW5jZWxMYWJlbCA9IGdldHRleHQoJ05vJykpIHsKICAgLy8gYmluZCB0aGUgbW9kYWwg cHJvdmlkZXIgYmVmb3JlIGNhbGxpbmcKLSAgdGhpcy5zaG93TW9kYWwodGl0bGUsIChjbG9zZU1v ZGFsKT0+ewotICAgIGNvbnN0IG9uQ2FuY2VsQ2xpY2tDbG9zZSA9ICgpPT57CisgIHRoaXMuc2hv d01vZGFsKHRpdGxlLCAoY2xvc2VNb2RhbCkgPT4geworICAgIGNvbnN0IG9uQ2FuY2VsQ2xpY2tD bG9zZSA9ICgpID0+IHsKICAgICAgIG9uQ2FuY2VsQ2xpY2sgJiYgb25DYW5jZWxDbGljaygpOwog ICAgICAgY2xvc2VNb2RhbCgpOwogICAgIH07Ci0gICAgY29uc3Qgb25Pa0NsaWNrQ2xvc2UgPSAo KT0+eworICAgIGNvbnN0IG9uT2tDbGlja0Nsb3NlID0gKCkgPT4gewogICAgICAgb25Pa0NsaWNr ICYmIG9uT2tDbGljaygpOwogICAgICAgY2xvc2VNb2RhbCgpOwogICAgIH07CiAgICAgcmV0dXJu ICgKLSAgICAgIDxBbGVydENvbnRlbnQgdGV4dD17dGV4dH0gY29uZmlybSBvbk9rQ2xpY2s9e29u T2tDbGlja0Nsb3NlfSBvbkNhbmNlbENsaWNrPXtvbkNhbmNlbENsaWNrQ2xvc2V9IG9rTGFiZWw9 e29rTGFiZWx9IGNhbmNlbExhYmVsPXtjYW5jZWxMYWJlbH0vPgorICAgICAgPEFsZXJ0Q29udGVu dCB0ZXh0PXt0ZXh0fSBjb25maXJtIG9uT2tDbGljaz17b25Pa0NsaWNrQ2xvc2V9IG9uQ2FuY2Vs Q2xpY2s9e29uQ2FuY2VsQ2xpY2tDbG9zZX0gb2tMYWJlbD17b2tMYWJlbH0gY2FuY2VsTGFiZWw9 e2NhbmNlbExhYmVsfSAvPgogICAgICk7CiAgIH0pOwogfQogCi1leHBvcnQgZGVmYXVsdCBmdW5j dGlvbiBNb2RhbFByb3ZpZGVyKHtjaGlsZHJlbn0pIHsKK2V4cG9ydCBkZWZhdWx0IGZ1bmN0aW9u IE1vZGFsUHJvdmlkZXIoeyBjaGlsZHJlbiB9KSB7CiAgIGNvbnN0IFttb2RhbHMsIHNldE1vZGFs c10gPSBSZWFjdC51c2VTdGF0ZShbXSk7CiAKLSAgY29uc3Qgc2hvd01vZGFsID0gKHRpdGxlLCBj b250ZW50LCBtb2RhbE9wdGlvbnMpPT57CisgIGNvbnN0IHNob3dNb2RhbCA9ICh0aXRsZSwgY29u dGVudCwgbW9kYWxPcHRpb25zKSA9PiB7CiAgICAgbGV0IGlkID0gZ2V0RXBvY2goKS50b1N0cmlu ZygpICsgTWF0aC5yYW5kb20oKTsKLSAgICBzZXRNb2RhbHMoKHByZXYpPT5bLi4ucHJldiwgewor ICAgIHNldE1vZGFscygocHJldikgPT4gWy4uLnByZXYsIHsKICAgICAgIGlkOiBpZCwKICAgICAg IHRpdGxlOiB0aXRsZSwKICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsCiAgICAgICAuLi5tb2RhbE9w dGlvbnMsCiAgICAgfV0pOwogICB9OwotICBjb25zdCBjbG9zZU1vZGFsID0gKGlkKT0+ewotICAg IHNldE1vZGFscygocHJldik9PnsKLSAgICAgIHJldHVybiBwcmV2LmZpbHRlcigobyk9Pm8uaWQh PWlkKTsKKyAgY29uc3QgY2xvc2VNb2RhbCA9IChpZCkgPT4geworICAgIHNldE1vZGFscygocHJl dikgPT4geworICAgICAgcmV0dXJuIHByZXYuZmlsdGVyKChvKSA9PiBvLmlkICE9IGlkKTsKICAg ICB9KTsKICAgfTsKKworICBjb25zdCBmdWxsU2NyZWVuTW9kYWwgPSAoZnVsbFNjcmVlbikgPT4g eworICAgIHNldE1vZGFscygocHJldikgPT4gWy4uLnByZXYsIHsKKyAgICAgIGZ1bGxTY3JlZW46 IGZ1bGxTY3JlZW4sCisgICAgfV0pOworICB9OworCiAgIGNvbnN0IG1vZGFsQ29udGV4dEJhc2Ug PSB7CiAgICAgc2hvd01vZGFsOiBzaG93TW9kYWwsCiAgICAgY2xvc2VNb2RhbDogY2xvc2VNb2Rh bCwKKyAgICBmdWxsU2NyZWVuTW9kYWw6IGZ1bGxTY3JlZW5Nb2RhbAogICB9OwotICBjb25zdCBt b2RhbENvbnRleHQgPSBSZWFjdC51c2VNZW1vKCgpPT4oeworICBjb25zdCBtb2RhbENvbnRleHQg PSBSZWFjdC51c2VNZW1vKCgpID0+ICh7CiAgICAgLi4ubW9kYWxDb250ZXh0QmFzZSwKICAgICBj b25maXJtOiBjb25maXJtLmJpbmQobW9kYWxDb250ZXh0QmFzZSksCiAgICAgYWxlcnQ6IGFsZXJ0 LmJpbmQobW9kYWxDb250ZXh0QmFzZSkKQEAgLTExOSw4ICsxMjksOCBAQCBleHBvcnQgZGVmYXVs dCBmdW5jdGlvbiBNb2RhbFByb3ZpZGVyKHtjaGlsZHJlbn0pIHsKICAgcmV0dXJuICgKICAgICA8 TW9kYWxDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXttb2RhbENvbnRleHR9PgogICAgICAge2NoaWxk cmVufQotICAgICAge21vZGFscy5tYXAoKG1vZGFsT3B0aW9ucywgaSk9PigKLSAgICAgICAgPE1v ZGFsQ29udGFpbmVyIGtleT17aX0gey4uLm1vZGFsT3B0aW9uc30vPgorICAgICAge21vZGFscy5t YXAoKG1vZGFsT3B0aW9ucywgaSkgPT4gKAorICAgICAgICA8TW9kYWxDb250YWluZXIga2V5PXtp fSB7Li4ubW9kYWxPcHRpb25zfSAvPgogICAgICAgKSl9CiAgICAgPC9Nb2RhbENvbnRleHQuUHJv dmlkZXI+CiAgICk7CkBAIC0xMzMsMjggKzE0Myw1NSBAQCBNb2RhbFByb3ZpZGVyLnByb3BUeXBl cyA9IHsKIGZ1bmN0aW9uIFBhcGVyQ29tcG9uZW50KHByb3BzKSB7CiAgIHJldHVybiAoCiAgICAg PERyYWdnYWJsZSBjYW5jZWw9eydbY2xhc3MqPSJNdWlEaWFsb2dDb250ZW50LXJvb3QiXSd9Pgot ICAgICAgPFBhcGVyIHsuLi5wcm9wc30gc3R5bGU9e3ttaW5XaWR0aDogJzYwMHB4J319IC8+Cisg ICAgICA8UGFwZXIgey4uLnByb3BzfSBzdHlsZT17eyBtaW5XaWR0aDogJzYwMHB4JyB9fSAvPgog ICAgIDwvRHJhZ2dhYmxlPgogICApOwogfQogCi1mdW5jdGlvbiBNb2RhbENvbnRhaW5lcih7aWQs IHRpdGxlLCBjb250ZW50fSkgeworY29uc3QgdXNlTW9kYWxTdHlsZXMgPSBtYWtlU3R5bGVzKCgp ID0+ICh7CisgIHRpdGxlQmFyOiB7CisgICAgZGlzcGxheTogJ2ZsZXgnLAorICAgIGZsZXhHcm93 OiAxCisgIH0sCisgIHRpdGxlOiB7CisgICAgZmxleEdyb3c6IDEKKyAgfSwKK30pKTsKKworZnVu Y3Rpb24gTW9kYWxDb250YWluZXIoeyBpZCwgdGl0bGUsIGNvbnRlbnQsIGZ1bGxTY3JlZW4gPSBm YWxzZSwgbWF4V2lkdGggPSAnbWQnLCBpc0Z1bGxXaWR0aCA9IGZhbHNlLCBzaG93RnVsbFNjcmVl biA9IGZhbHNlIH0pIHsKICAgbGV0IHVzZU1vZGFsUmVmID0gdXNlTW9kYWwoKTsKLSAgbGV0IGNs b3NlTW9kYWwgPSAoKT0+dXNlTW9kYWxSZWYuY2xvc2VNb2RhbChpZCk7CisgIGNvbnN0IGNsYXNz ZXMgPSB1c2VNb2RhbFN0eWxlcygpOworICBsZXQgY2xvc2VNb2RhbCA9ICgpID0+IHVzZU1vZGFs UmVmLmNsb3NlTW9kYWwoaWQpOworICBjb25zdCBbaXNmdWxsU2NyZWVuLCBzZXRJc0Z1bGxTY3Jl ZW5dID0gdXNlU3RhdGUoZnVsbFNjcmVlbik7CisKICAgcmV0dXJuICgKICAgICA8VGhlbWU+CiAg ICAgICA8RGlhbG9nCiAgICAgICAgIG9wZW49e3RydWV9CiAgICAgICAgIG9uQ2xvc2U9e2Nsb3Nl TW9kYWx9CiAgICAgICAgIFBhcGVyQ29tcG9uZW50PXtQYXBlckNvbXBvbmVudH0KKyAgICAgICAg ZnVsbFNjcmVlbj17aXNmdWxsU2NyZWVufQorICAgICAgICBtYXhXaWR0aD17bWF4V2lkdGh9Cisg ICAgICAgIGZ1bGxXaWR0aD17aXNGdWxsV2lkdGh9CiAgICAgICAgIGRpc2FibGVCYWNrZHJvcENs aWNrCiAgICAgICA+CiAgICAgICAgIDxEaWFsb2dUaXRsZT4KLSAgICAgICAgICA8Qm94IG1hcmdp blJpZ2h0PSIwLjI1cmVtIj57dGl0bGV9PC9Cb3g+Ci0gICAgICAgICAgPEJveCBtYXJnaW5MZWZ0 PSJhdXRvIj48UGdJY29uQnV0dG9uIHRpdGxlPXtnZXR0ZXh0KCdDbG9zZScpfSBpY29uPXs8Q2xv c2VJY29uIC8+fSBzaXplPSJ4cyIgbm9Cb3JkZXIgb25DbGljaz17Y2xvc2VNb2RhbH0vPjwvQm94 PgorICAgICAgICAgIDxCb3ggY2xhc3NOYW1lPXtjbGFzc2VzLnRpdGxlQmFyfT4KKyAgICAgICAg ICAgIDxCb3ggY2xhc3NOYW1lPXtjbGFzc2VzLnRpdGxlfSBtYXJnaW5SaWdodD0iMC4yNXJlbSIg Pnt0aXRsZX08L0JveD4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2hvd0Z1bGxTY3Jl ZW4gJiYgIWlzZnVsbFNjcmVlbiAmJgorICAgICAgICAgICAgPEJveCBtYXJnaW5MZWZ0PSJhdXRv Ij48UGdJY29uQnV0dG9uIHRpdGxlPXtnZXR0ZXh0KCdNYXhpbWl6ZScpfSBpY29uPXs8RnVsbHNj cmVlbkljb24gLz59IHNpemU9InhzIiBub0JvcmRlciBvbkNsaWNrPXsoKSA9PiB7IHNldElzRnVs bFNjcmVlbighaXNmdWxsU2NyZWVuKTsgIH19IC8+PC9Cb3g+CisgICAgICAgICAgICB9CisgICAg ICAgICAgICB7CisgICAgICAgICAgICAgIHNob3dGdWxsU2NyZWVuICYmIGlzZnVsbFNjcmVlbiAm JgorICAgICAgICAgICAgICA8Qm94IG1hcmdpbkxlZnQ9ImF1dG8iPjxQZ0ljb25CdXR0b24gdGl0 bGU9e2dldHRleHQoJ01pbmltaXplJyl9IGljb249ezxGdWxsc2NyZWVuRXhpdEljb24gLz59IHNp emU9InhzIiBub0JvcmRlciBvbkNsaWNrPXsoKSA9PiB7IHNldElzRnVsbFNjcmVlbighaXNmdWxs U2NyZWVuKTsgfX0gLz48L0JveD4KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgPEJveCBt YXJnaW5MZWZ0PSJhdXRvIj48UGdJY29uQnV0dG9uIHRpdGxlPXtnZXR0ZXh0KCdDbG9zZScpfSBp Y29uPXs8Q2xvc2VJY29uIC8+fSBzaXplPSJ4cyIgbm9Cb3JkZXIgb25DbGljaz17Y2xvc2VNb2Rh bH0gLz48L0JveD4KKyAgICAgICAgICA8L0JveD4KICAgICAgICAgPC9EaWFsb2dUaXRsZT4KLSAg ICAgICAgPERpYWxvZ0NvbnRlbnQ+Ci0gICAgICAgICAge2NvbnRlbnQoY2xvc2VNb2RhbCl9Cisg ICAgICAgIDxEaWFsb2dDb250ZW50IGhlaWdodD0iMTAwJSI+CisgICAgICAgICAge2NvbnRlbnQo Y2xvc2VNb2RhbCwgaXNmdWxsU2NyZWVuKX0KICAgICAgICAgPC9EaWFsb2dDb250ZW50PgogICAg ICAgPC9EaWFsb2c+CiAgICAgPC9UaGVtZT4KQEAgLTE2NCw0ICsyMDEsOCBAQCBNb2RhbENvbnRh aW5lci5wcm9wVHlwZXMgPSB7CiAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLAogICB0aXRsZTogQ3Vz dG9tUHJvcFR5cGVzLmNoaWxkcmVuLAogICBjb250ZW50OiBQcm9wVHlwZXMuZnVuYywKKyAgZnVs bFNjcmVlbjogUHJvcFR5cGVzLmJvb2wsCisgIG1heFdpZHRoOiBQcm9wVHlwZXMuc3RyaW5nLAor ICBpc0Z1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsCisgIHNob3dGdWxsU2NyZWVuOiBQcm9wVHlw ZXMuYm9vbAogfTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9oZWxwZXJzL05v dGlmaWVyLmpzeCBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9oZWxwZXJzL05vdGlmaWVyLmpzeApp bmRleCBkNjdmYWEzOC4uYWYxMTc2MmYgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3N0YXRpYy9q cy9oZWxwZXJzL05vdGlmaWVyLmpzeAorKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvaGVscGVy cy9Ob3RpZmllci5qc3gKQEAgLTgsNiArOCwxMyBAQAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogaW1wb3J0IHsgdXNlU25h Y2tiYXIsIFNuYWNrYmFyUHJvdmlkZXIsIFNuYWNrYmFyQ29udGVudCB9IGZyb20gJ25vdGlzdGFj ayc7CitpbXBvcnQgeyBtYWtlU3R5bGVzIH0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvc3R5bGVz JzsKK2ltcG9ydCB7Qm94fSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZSc7CitpbXBvcnQgQ2xvc2VJ Y29uIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9DbG9zZVJvdW5kZWQnOworaW1wb3J0IHsgRGVm YXVsdEJ1dHRvbiwgUHJpbWFyeUJ1dHRvbiB9IGZyb20gJy4uL2NvbXBvbmVudHMvQnV0dG9ucyc7 CitpbXBvcnQgSFRNTFJlYWN0UGFyc2VyIGZyb20gJ2h0bWwtcmVhY3QtcGFyc2VyJzsKK2ltcG9y dCBDaGVja1JvdW5kZWRJY29uIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9DaGVja1JvdW5kZWQn OworaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJzsKIGltcG9ydCBSZWFjdCBmcm9t ICdyZWFjdCc7CiBpbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJzsKIGltcG9ydCBUaGVt ZSBmcm9tICdzb3VyY2VzL1RoZW1lJzsKQEAgLTc2LDYgKzgzLDQxIEBAIEZpbmFsTm90aWZ5Q29u dGVudC5wcm9wVHlwZXMgPSB7CiAgIGNoaWxkcmVuOiBDdXN0b21Qcm9wVHlwZXMuY2hpbGRyZW4s CiB9OwogCitjb25zdCB1c2VNb2RhbFN0eWxlcyA9IG1ha2VTdHlsZXMoKHRoZW1lKT0+KHsKKyAg Zm9vdGVyOiB7CisgICAgZGlzcGxheTogJ2ZsZXgnLAorICAgIGp1c3RpZnlDb250ZW50OiAnZmxl eC1lbmQnLAorICAgIHBhZGRpbmc6ICcwLjVyZW0nLAorICAgIC4uLnRoZW1lLm1peGlucy5wYW5l bEJvcmRlci50b3AsCisgIH0sCisgIG1hcmdpbjogeworICAgIG1hcmdpbkxlZnQ6ICcwLjI1cmVt JywKKyAgfQorfSkpOworZnVuY3Rpb24gQWxlcnRDb250ZW50KHt0ZXh0LCBjb25maXJtLCBva0xh YmVsPWdldHRleHQoJ09LJyksIGNhbmNlbExhYmVsPWdldHRleHQoJ0NhbmNlbCcpLCBvbk9rQ2xp Y2ssIG9uQ2FuY2VsQ2xpY2t9KSB7CisgIGNvbnN0IGNsYXNzZXMgPSB1c2VNb2RhbFN0eWxlcygp OworICByZXR1cm4gKAorICAgIDxCb3ggZGlzcGxheT0iZmxleCIgZmxleERpcmVjdGlvbj0iY29s dW1uIiBoZWlnaHQ9IjEwMCUiPgorICAgICAgPEJveCBmbGV4R3Jvdz0iMSIgcD17Mn0+e0hUTUxS ZWFjdFBhcnNlcih0ZXh0KX08L0JveD4KKyAgICAgIDxCb3ggY2xhc3NOYW1lPXtjbGFzc2VzLmZv b3Rlcn0+CisgICAgICAgIHtjb25maXJtICYmCisgICAgICAgICAgPERlZmF1bHRCdXR0b24gc3Rh cnRJY29uPXs8Q2xvc2VJY29uIC8+fSBvbkNsaWNrPXtvbkNhbmNlbENsaWNrfSA+e2NhbmNlbExh YmVsfTwvRGVmYXVsdEJ1dHRvbj4KKyAgICAgICAgfQorICAgICAgICA8UHJpbWFyeUJ1dHRvbiBj bGFzc05hbWU9e2NsYXNzZXMubWFyZ2lufSBzdGFydEljb249ezxDaGVja1JvdW5kZWRJY29uIC8+ fSBvbkNsaWNrPXtvbk9rQ2xpY2t9IGF1dG9Gb2N1cz17dHJ1ZX0gPntva0xhYmVsfTwvUHJpbWFy eUJ1dHRvbj4KKyAgICAgIDwvQm94PgorICAgIDwvQm94PgorICApOworfQorQWxlcnRDb250ZW50 LnByb3BUeXBlcyA9IHsKKyAgdGV4dDogUHJvcFR5cGVzLnN0cmluZywKKyAgY29uZmlybTogUHJv cFR5cGVzLmJvb2wsCisgIG9uT2tDbGljazogUHJvcFR5cGVzLmZ1bmMsCisgIG9uQ2FuY2VsQ2xp Y2s6IFByb3BUeXBlcy5mdW5jLAorICBva0xhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLAorICBjYW5j ZWxMYWJlbDogUHJvcFR5cGVzLnN0cmluZywKK307CisKKwogdmFyIE5vdGlmaWVyID0gewogICBz dWNjZXNzKG1zZywgYXV0b0hpZGVEdXJhdGlvbiA9IEFVVE9fSElERV9EVVJBVElPTikgewogICAg IHRoaXMuX2NhbGxOb3RpZnkobXNnLCBNRVNTQUdFX1RZUEUuU1VDQ0VTUywgYXV0b0hpZGVEdXJh dGlvbik7CkBAIC0xOTUsMTEgKzIzNywxMSBAQCB2YXIgTm90aWZpZXIgPSB7CiAgICAgfQogICAg IG1vZGFsUmVmLmNvbmZpcm0odGl0bGUsIHRleHQsIG9uT2tDbGljaywgb25DYW5jZWxDbGljaywg b2tMYWJlbCwgY2FuY2VsTGFiZWwpOwogICB9LAotICBzaG93TW9kYWwodGl0bGUsIGNvbnRlbnQp IHsKKyAgc2hvd01vZGFsOiAodGl0bGUsIGNvbnRlbnQsIG1vZGFsT3B0aW9ucykgPT4gewogICAg IGlmKCFtb2RhbEluaXRpYWxpemVkKSB7CiAgICAgICBpbml0aWFsaXplTW9kYWxQcm92aWRlcigp OwogICAgIH0KLSAgICBtb2RhbFJlZi5zaG93TW9kYWwodGl0bGUsIGNvbnRlbnQpOworICAgIG1v ZGFsUmVmLnNob3dNb2RhbCh0aXRsZSwgY29udGVudCwgbW9kYWxPcHRpb25zKTsKICAgfQogfTsK IApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3RyZWUvcHJlZmVyZW5jZV9ub2Rl cy50cyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy90cmVlL3ByZWZlcmVuY2Vfbm9kZXMudHMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjYwNWY0YTAzCi0tLSAvZGV2L251bGwK KysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3RyZWUvcHJlZmVyZW5jZV9ub2Rlcy50cwpAQCAt MCwwICsxLDI1MyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMK Ky8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDIxLCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVu dCBUZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FM IExpY2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLworCitpbXBvcnQgKiBhcyBCcm93c2VyRlMgZnJvbSAnYnJvd3Nl cmZzJworaW1wb3J0IHBnQWRtaW4gZnJvbSAnc291cmNlcy9wZ2FkbWluJzsKK2ltcG9ydCBfIGZy b20gJ3VuZGVyc2NvcmUnOworaW1wb3J0IHsgRmlsZVR5cGUgfSBmcm9tICdyZWFjdC1hc3BlbicK K2ltcG9ydCB7IGZpbmRJblRyZWUgfSBmcm9tICcuL3RyZWUnOworCitpbXBvcnQgeyB1bml4IH0g ZnJvbSAncGF0aC1meCc7CisKK2V4cG9ydCBjbGFzcyBNYW5hZ2VQcmVmZXJlbmNlVHJlZU5vZGVz IHsKKyAgY29uc3RydWN0b3IoZGF0YSkgeworICAgIHRoaXMudHJlZSA9IHt9CisgICAgdGhpcy50 ZW1wVHJlZSA9IG5ldyBUcmVlTm9kZSh1bmRlZmluZWQsIHt9KTsKKyAgICB0aGlzLnRyZWVEYXRh ID0gZGF0YTsKKyAgfQorCisgIHB1YmxpYyBpbml0ID0gKF9yb290OiBzdHJpbmcpID0+IG5ldyBQ cm9taXNlKChyZXMsIHJlaikgPT4geworICAgIGxldCBub2RlID0geyBwYXJlbnQ6IG51bGwsIGNo aWxkcmVuOiBbXSwgZGF0YTogbnVsbCB9OworICAgIHRoaXMudHJlZSA9IHt9OworICAgIHRoaXMu dHJlZVtfcm9vdF0gPSB7IG5hbWU6ICdyb290JywgdHlwZTogRmlsZVR5cGUuRGlyZWN0b3J5LCBt ZXRhZGF0YTogbm9kZSB9OworICAgIHJlcygpOworICB9KQorCisgIHB1YmxpYyB1cGRhdGVOb2Rl ID0gKF9wYXRoLCBfZGF0YSkgPT4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7CisgICAgY29u c3QgaXRlbSA9IHRoaXMuZmluZE5vZGUoX3BhdGgpOworICAgIGlmIChpdGVtKSB7CisgICAgICBp dGVtLm5hbWUgPSBfZGF0YS5sYWJlbDsKKyAgICAgIGl0ZW0ubWV0YWRhdGEuZGF0YSA9IF9kYXRh OworICAgIH0KKyAgICByZXModHJ1ZSk7CisgIH0pCisKKyAgcHVibGljIHJlbW92ZU5vZGUgPSBh c3luYyAoX3BhdGgsIF9yZW1vdmVPbmx5Q2hpbGQpID0+IHsKKyAgICBjb25zdCBpdGVtID0gdGhp cy5maW5kTm9kZShfcGF0aCk7CisKKyAgICBpZiAoaXRlbSAmJiBpdGVtLnBhcmVudE5vZGUpIHsK KyAgICAgIGl0ZW0uY2hpbGRyZW4gPSBbXTsKKyAgICAgIGl0ZW0ucGFyZW50Tm9kZS5jaGlsZHJl bi5zcGxpY2UoaXRlbS5wYXJlbnROb2RlLmNoaWxkcmVuLmluZGV4T2YoaXRlbSksIDEpOworICAg IH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfTsKKworICBmaW5kTm9kZShwYXRoKSB7CisgICAgaWYg KHBhdGggPT09IG51bGwgfHwgcGF0aCA9PT0gdW5kZWZpbmVkIHx8IHBhdGgubGVuZ3RoID09PSAw IHx8IHBhdGggPT0gJy9wcmVmZXJlbmNlcycpIHsKKyAgICAgIHJldHVybiB0aGlzLnRlbXBUcmVl OworICAgIH0KKyAgICBjb25zb2xlLmxvZyhwYXRoKQorICAgIHJldHVybiBmaW5kSW5UcmVlKHRo aXMudGVtcFRyZWUsIHBhdGgpOworICB9CisKKyAgcHVibGljIGFkZE5vZGUgPSAoX3BhcmVudDog c3RyaW5nLCBfcGF0aDogc3RyaW5nLCBfZGF0YTogW10pID0+IG5ldyBQcm9taXNlKChyZXMsIHJl aikgPT4geworICAgIF9kYXRhLnR5cGUgPSBfZGF0YS5pbm9kZSA/IEZpbGVUeXBlLkRpcmVjdG9y eSA6IEZpbGVUeXBlLkZpbGU7CisgICAgX2RhdGEuX2xhYmVsID0gX2RhdGEubGFiZWw7CisgICAg X2RhdGEubGFiZWwgPSBfLmVzY2FwZShfZGF0YS5sYWJlbCk7CisKKyAgICBfZGF0YS5pc19jb2xs ZWN0aW9uID0gaXNDb2xsZWN0aW9uTm9kZShfZGF0YS5fdHlwZSk7CisgICAgbGV0IG5vZGVEYXRh ID0geyBwYXJlbnQ6IF9wYXJlbnQsIGNoaWxkcmVuOiBfZGF0YT8uY2hpbGRyZW4gPyBfZGF0YS5j aGlsZHJlbiA6IFtdLCBkYXRhOiBfZGF0YSB9OworCisgICAgbGV0IHRtcFBhcmVudE5vZGUgPSB0 aGlzLmZpbmROb2RlKF9wYXJlbnQpOworICAgIGxldCB0cmVlTm9kZSA9IG5ldyBUcmVlTm9kZShf ZGF0YS5pZCwgX2RhdGEsIHt9LCB0bXBQYXJlbnROb2RlLCBub2RlRGF0YSwgX2RhdGEudHlwZSk7 CisKKyAgICBpZiAodG1wUGFyZW50Tm9kZSAhPT0gbnVsbCAmJiB0bXBQYXJlbnROb2RlICE9PSB1 bmRlZmluZWQpIHRtcFBhcmVudE5vZGUuY2hpbGRyZW4ucHVzaCh0cmVlTm9kZSk7CisKKyAgICBy ZXModHJlZU5vZGUpOworICB9KQorCisgIHB1YmxpYyByZWFkTm9kZSA9IChfcGF0aDogc3RyaW5n KSA9PiBuZXcgUHJvbWlzZTxzdHJpbmdbXT4oKHJlcywgcmVqKSA9PiB7CisgICAgbGV0IHRlbXBf dHJlZV9wYXRoID0gX3BhdGgsCisgICAgICBub2RlID0gdGhpcy5maW5kTm9kZShfcGF0aCksCisg ICAgICBiYXNlX3VybCA9ICcvcHJlZmVyZW5jZXMvJzsKKyAgICBub2RlLmNoaWxkcmVuID0gW107 CisKKyAgICBpZiAobm9kZSAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHsKKyAgICAgIGlm ICghbm9kZS50eXBlID09PSBGaWxlVHlwZS5GaWxlKSB7CisgICAgICAgIHJlaigiSXQncyBhIGxl YWYgbm9kZSIpCisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYgKG5vZGU/LmNoaWxk cmVuLmxlbmd0aCAhPSAwKSByZXMobm9kZS5jaGlsZHJlbikKKyAgICAgIH0KKyAgICB9CisKKyAg ICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICBhc3luYyBmdW5jdGlvbiBsb2FkRGF0YSgpIHsKKyAg ICAgIGNvbnN0IFBhdGggPSBCcm93c2VyRlMuQkZTUmVxdWlyZSgncGF0aCcpCisgICAgICBjb25z dCBmaWxsID0gYXN5bmMgKHRyZWUpID0+IHsKKyAgICAgICAgLy9yZW1vdmUgdGhpcyBpcyBjb2Rl IGNsZW51cAorICAgICAgICBmb3IgKGxldCBpZHggaW4gdHJlZSkgeworICAgICAgICAgIGNvbnN0 IF9ub2RlID0gdHJlZVtpZHhdCisgICAgICAgICAgY29uc3QgX3BhdGhsID0gUGF0aC5qb2luKF9w YXRoLCBfbm9kZS5pZCkKKyAgICAgICAgICBhd2FpdCBzZWxmLmFkZE5vZGUodGVtcF90cmVlX3Bh dGgsIF9wYXRobCwgX25vZGUpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChub2Rl ICYmICFfLmlzVW5kZWZpbmVkKG5vZGUuaWQpKSB7CisgICAgICAgIGxldCBfZGF0YSA9IHNlbGYu dHJlZURhdGEuZmluZCgoZWwpID0+IGVsLmlkID09IG5vZGUuaWQpOworICAgICAgICAvLyBjb25z b2xlLmxvZygnSW5zaWRlIHN1YiBub2RlcycpCisKKyAgICAgICAgbGV0IHN1Yk5vZGVzID0gW107 CisKKyAgICAgICAgX2RhdGEuY2hpbGRyZW5Ob2Rlcy5mb3JFYWNoKGVsZW1lbnQgPT4geworICAg ICAgICAgIHN1Yk5vZGVzLnB1c2goZWxlbWVudCkKKyAgICAgICAgfSk7CisKKyAgICAgICAgYXdh aXQgZmlsbChzdWJOb2Rlcyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBhd2FpdCBmaWxsKHNl bGYudHJlZURhdGEpOworICAgICAgfQorCisgICAgICBpZiAobm9kZT8uY2hpbGRyZW4ubGVuZ3Ro ID4gMCkgcmV0dXJuIHJlcyhub2RlLmNoaWxkcmVuKTsKKyAgICAgIGVsc2UgcmV0dXJuIHJlcyhu dWxsKTsKKworICAgIH0KKyAgICBsb2FkRGF0YSgpOworICB9KQorCit9CisKKworCitleHBvcnQg Y2xhc3MgVHJlZU5vZGUgeworICBjb25zdHJ1Y3RvcihpZCwgZGF0YSwgZG9tTm9kZSwgcGFyZW50 LCBtZXRhZGF0YSwgdHlwZSkgeworICAgIHRoaXMuaWQgPSBpZDsKKyAgICB0aGlzLmRhdGEgPSBk YXRhOworICAgIHRoaXMuc2V0UGFyZW50KHBhcmVudCk7CisgICAgdGhpcy5jaGlsZHJlbiA9IFtd OworICAgIHRoaXMuZG9tTm9kZSA9IGRvbU5vZGU7CisgICAgdGhpcy5tZXRhZGF0YSA9IG1ldGFk YXRhOworICAgIHRoaXMubmFtZSA9IG1ldGFkYXRhID8gbWV0YWRhdGEuZGF0YS5sYWJlbCA6ICIi OworICAgIHRoaXMudHlwZSA9IHR5cGUgPyB0eXBlIDogdW5kZWZpbmVkOworICB9CisKKyAgaGFz UGFyZW50KCkgeworICAgIHJldHVybiB0aGlzLnBhcmVudE5vZGUgIT09IG51bGwgJiYgdGhpcy5w YXJlbnROb2RlICE9PSB1bmRlZmluZWQ7CisgIH0KKworICBwYXJlbnQoKSB7CisgICAgcmV0dXJu IHRoaXMucGFyZW50Tm9kZTsKKyAgfQorCisgIHNldFBhcmVudChwYXJlbnQpIHsKKyAgICB0aGlz LnBhcmVudE5vZGUgPSBwYXJlbnQ7CisgICAgdGhpcy5wYXRoID0gdGhpcy5pZDsKKyAgICBpZiAo dGhpcy5pZCkKKyAgICAgIGlmIChwYXJlbnQgIT09IG51bGwgJiYgcGFyZW50ICE9PSB1bmRlZmlu ZWQgJiYgcGFyZW50LnBhdGggIT09IHVuZGVmaW5lZCkgeworICAgICAgICB0aGlzLnBhdGggPSBw YXJlbnQucGF0aCArICcvJyArIHRoaXMuaWQ7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlz LnBhdGggPSAnL3ByZWZlcmVuY2VzLycgKyB0aGlzLmlkOworICAgICAgfQorICB9CisKKyAgZ2V0 RGF0YSgpIHsKKyAgICBpZiAodGhpcy5kYXRhID09PSB1bmRlZmluZWQpIHsKKyAgICAgIHJldHVy biB1bmRlZmluZWQ7CisgICAgfSBlbHNlIGlmICh0aGlzLmRhdGEgPT09IG51bGwpIHsKKyAgICAg IHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5k YXRhKTsKKyAgfQorCisgIGdldEh0bWxJZGVudGlmaWVyKCkgeworICAgIHJldHVybiB0aGlzLmRv bU5vZGU7CisgIH0KKworICAvKgorICAgKiBGaW5kIHRoZSBhbmNlc3RvciB3aXRoIG1hdGNoZXMg dGhpcyBjb25kaXRpb24KKyAgICovCisgIGFuY2VzdG9yTm9kZShjb25kaXRpb24pIHsKKyAgICBs ZXQgbm9kZSA9IHRoaXM7CisKKyAgICB3aGlsZSAobm9kZS5oYXNQYXJlbnQoKSkgeworICAgICAg bm9kZSA9IG5vZGUucGFyZW50KCk7CisgICAgICBpZiAoY29uZGl0aW9uKG5vZGUpKSB7CisgICAg ICAgIHJldHVybiBub2RlOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudWxsOworICB9 CisKKyAgLyoqCisgICAqIEdpdmVuIGEgY29uZGl0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgY3Vy cmVudCBub2RlCisgICAqIG9yIGFueSBvZiB0aGUgcGFyZW50IG5vZGVzIGNvbmRpdGlvbiByZXN1 bHQgaXMgdHJ1ZQorICAgKi8KKyAgYW55RmFtaWx5TWVtYmVyKGNvbmRpdGlvbikgeworICAgIGlm IChjb25kaXRpb24odGhpcykpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJl dHVybiB0aGlzLmFuY2VzdG9yTm9kZShjb25kaXRpb24pICE9PSBudWxsOworICB9CisgIGFueVBh cmVudChjb25kaXRpb24pIHsKKyAgICByZXR1cm4gdGhpcy5hbmNlc3Rvck5vZGUoY29uZGl0aW9u KSAhPT0gbnVsbDsKKyAgfQorCisgIHJlbG9hZCh0cmVlKSB7CisgICAgcmV0dXJuIG5ldyBQcm9t aXNlKChyZXNvbHZlKSA9PiB7CisgICAgICB0aGlzLnVubG9hZCh0cmVlKQorICAgICAgICAudGhl bigoKSA9PiB7CisgICAgICAgICAgdHJlZS5zZXRJbm9kZSh0aGlzLmRvbU5vZGUpOworICAgICAg ICAgIHRyZWUuZGVzZWxlY3QodGhpcy5kb21Ob2RlKTsKKyAgICAgICAgICBzZXRUaW1lb3V0KCgp ID0+IHsKKyAgICAgICAgICAgIHRyZWUuc2VsZWN0Tm9kZSh0aGlzLmRvbU5vZGUpOworICAgICAg ICAgIH0sIDApOworICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cisg IH0KKworICB1bmxvYWQodHJlZSkgeworICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwg cmVqZWN0KSA9PiB7CisgICAgICB0aGlzLmNoaWxkcmVuID0gW107CisgICAgICB0cmVlLnVubG9h ZCh0aGlzLmRvbU5vZGUpCisgICAgICAgIC50aGVuKAorICAgICAgICAgICgpID0+IHsKKyAgICAg ICAgICAgIHJlc29sdmUodHJ1ZSk7CisgICAgICAgICAgfSwKKyAgICAgICAgICAoKSA9PiB7Cisg ICAgICAgICAgICByZWplY3QoKTsKKyAgICAgICAgICB9KTsKKyAgICB9KTsKKyAgfQorCisKKyAg b3Blbih0cmVlLCBzdXBwcmVzc05vRG9tKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNv bHZlLCByZWplY3QpID0+IHsKKyAgICAgIGlmIChzdXBwcmVzc05vRG9tICYmICh0aGlzLmRvbU5v ZGUgPT0gbnVsbCB8fCB0eXBlb2YgKHRoaXMuZG9tTm9kZSkgPT09ICd1bmRlZmluZWQnKSkgewor ICAgICAgICByZXNvbHZlKHRydWUpOworICAgICAgfSBlbHNlIGlmICh0cmVlLmlzT3Blbih0aGlz LmRvbU5vZGUpKSB7CisgICAgICAgIHJlc29sdmUodHJ1ZSk7CisgICAgICB9IGVsc2UgeworICAg ICAgICB0cmVlLm9wZW4odGhpcy5kb21Ob2RlKS50aGVuKHZhbCA9PiByZXNvbHZlKHRydWUpLCBl cnIgPT4gcmVqZWN0KHRydWUpKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCit9CisKK2V4cG9y dCBmdW5jdGlvbiBpc0NvbGxlY3Rpb25Ob2RlKG5vZGUpIHsKKyAgaWYgKHBnQWRtaW4uQnJvd3Nl ci5Ob2RlcyAmJiBub2RlIGluIHBnQWRtaW4uQnJvd3Nlci5Ob2RlcykgeworICAgIGlmIChwZ0Fk bWluLkJyb3dzZXIuTm9kZXNbbm9kZV0uaXNfY29sbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSByZXR1 cm4gcGdBZG1pbi5Ccm93c2VyLk5vZGVzW25vZGVdLmlzX2NvbGxlY3Rpb247CisgICAgZWxzZSBy ZXR1cm4gZmFsc2U7CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vc3RhdGljL2pzL3RyZWUvcHJlZmVyZW5jZXNfdHJlZS50c3ggYi93ZWIvcGdhZG1pbi9z dGF0aWMvanMvdHJlZS9wcmVmZXJlbmNlc190cmVlLnRzeApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMC4uZjE5ZGI5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9z dGF0aWMvanMvdHJlZS9wcmVmZXJlbmNlc190cmVlLnRzeApAQCAtMCwwICsxLDUzIEBACisvLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v CisvLworLy8gcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAo QykgMjAxMyAtIDIwMjEsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29m dHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v CisKK2ltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JzsKK2ltcG9ydCB7IHJlbmRlciB9IGZy b20gJ3JlYWN0LWRvbSc7CitpbXBvcnQgeyBGaWxlVHJlZVgsIFRyZWVNb2RlbFggfSBmcm9tICdw Z2FkbWluNC10cmVlJzsKK2ltcG9ydCB7VHJlZX0gZnJvbSAnLi90cmVlJzsKKworaW1wb3J0IHsg SUJhc2ljRmlsZVN5c3RlbUhvc3QgfSBmcm9tICdyZWFjdC1hc3Blbic7CitpbXBvcnQgeyBNYW5h Z2VQcmVmZXJlbmNlVHJlZU5vZGVzIH0gZnJvbSAnLi9wcmVmZXJlbmNlX25vZGVzJzsKKwordmFy IGluaXRQcmVmZXJlbmNlc1RyZWUgPSBhc3luYyAocGdCcm93c2VyLCBjb250YWluZXIsIGRhdGEp ID0+IHsKKyAgY29uc3QgTU9VTlRfUE9JTlQgPSAnL3ByZWZlcmVuY2VzJworCisgIC8vIFNldHVw IGhvc3QKKyAgbGV0IHB0cmVlID0gbmV3IE1hbmFnZVByZWZlcmVuY2VUcmVlTm9kZXMoZGF0YSk7 CisKKyAgLy8gSW5pdCBUcmVlIHdpdGggdGhlIFRyZWUgUGFyZW50IG5vZGUgJy9icm93c2VyJwor ICBwdHJlZS5pbml0KE1PVU5UX1BPSU5UKTsKKyAgY29uc3QgaG9zdDogSUJhc2ljRmlsZVN5c3Rl bUhvc3QgPSB7CisgICAgcGF0aFN0eWxlOiAndW5peCcsCisgICAgZ2V0SXRlbXM6IGFzeW5jIChw YXRoKSA9PiB7CisgICAgICByZXR1cm4gcHRyZWUucmVhZE5vZGUocGF0aCk7CisgICAgfSwKKyAg fQorCisgIGNvbnN0IHBUcmVlTW9kZWxYID0gbmV3IFRyZWVNb2RlbFgoaG9zdCwgTU9VTlRfUE9J TlQpCisKKyAgY29uc3QgaXRlbUhhbmRsZSA9IGZ1bmN0aW9uIG9uUmVhZHkoaGFuZGxlcikgewor ICAgIC8vIEluaXRpYWxpemUgcGdCcm93c2VyIFRyZWUKKyAgICBwZ0Jyb3dzZXIucHRyZWUgPSBu ZXcgVHJlZShoYW5kbGVyLCBwdHJlZSwgcGdCcm93c2VyLCBmYWxzZSk7CisgICAgcmV0dXJuIHRy dWU7CisgIH0KKworICBhd2FpdCBwVHJlZU1vZGVsWC5yb290LmVuc3VyZUxvYWRlZCgpCisKKyAg Ly8gUmVuZGVyIEJyb3dzZXIgVHJlZQorICBhd2FpdCByZW5kZXIoCisgICAgICA8RmlsZVRyZWVY IG1vZGVsPXtwVHJlZU1vZGVsWH0KKyAgICAgICAgb25SZWFkeT17aXRlbUhhbmRsZX0gLz4KKyAg ICAgLCBjb250YWluZXIpOworfQorCittb2R1bGUuZXhwb3J0cyA9IHsKKyAgICBpbml0UHJlZmVy ZW5jZXNUcmVlOiBpbml0UHJlZmVyZW5jZXNUcmVlLAorfTsKKwpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vdG9vbHMvc3FsZWRpdG9yL3V0aWxzL3F1ZXJ5X3Rvb2xfcHJlZmVyZW5jZXMucHkgYi93 ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdXRpbHMvcXVlcnlfdG9vbF9wcmVmZXJlbmNlcy5w eQppbmRleCA0NmEzMjZkYS4uYjE4MTQ1ZTAgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xz L3NxbGVkaXRvci91dGlscy9xdWVyeV90b29sX3ByZWZlcmVuY2VzLnB5CisrKyBiL3dlYi9wZ2Fk bWluL3Rvb2xzL3NxbGVkaXRvci91dGlscy9xdWVyeV90b29sX3ByZWZlcmVuY2VzLnB5CkBAIC0x OTcsNyArMTk3LDcgQEAgZGVmIHJlZ2lzdGVyX3F1ZXJ5X3Rvb2xfcHJlZmVyZW5jZXMoc2VsZik6 CiAgICAgICAgIG9wdGlvbnM9W3snbGFiZWwnOiBnZXR0ZXh0KCdOb25lJyksICd2YWx1ZSc6ICdu b25lJ30sCiAgICAgICAgICAgICAgICAgIHsnbGFiZWwnOiBnZXR0ZXh0KCdBbGwnKSwgJ3ZhbHVl JzogJ2FsbCd9LAogICAgICAgICAgICAgICAgICB7J2xhYmVsJzogZ2V0dGV4dCgnU3RyaW5ncycp LCAndmFsdWUnOiAnc3RyaW5ncyd9XSwKLSAgICAgICAgc2VsZWN0Mj17CisgICAgICAgIGNvbnRy b2xfcHJvcHM9ewogICAgICAgICAgICAgJ2FsbG93Q2xlYXInOiBGYWxzZSwKICAgICAgICAgICAg ICd0YWdzJzogRmFsc2UKICAgICAgICAgfQpAQCAtMjA5LDkgKzIwOSw5IEBAIGRlZiByZWdpc3Rl cl9xdWVyeV90b29sX3ByZWZlcmVuY2VzKHNlbGYpOgogICAgICAgICBjYXRlZ29yeV9sYWJlbD1Q UkVGX0xBQkVMX0NTVl9UWFQsCiAgICAgICAgIG9wdGlvbnM9W3snbGFiZWwnOiAnIicsICd2YWx1 ZSc6ICciJ30sCiAgICAgICAgICAgICAgICAgIHsnbGFiZWwnOiAnXCcnLCAndmFsdWUnOiAnXCcn fV0sCi0gICAgICAgIHNlbGVjdDI9eworICAgICAgICBjb250cm9sX3Byb3BzPXsKICAgICAgICAg ICAgICdhbGxvd0NsZWFyJzogRmFsc2UsCi0gICAgICAgICAgICAndGFncyc6IFRydWUKKyAgICAg ICAgICAgICd0YWdzJzogRmFsc2UKICAgICAgICAgfQogICAgICkKIApAQCAtMjIzLDkgKzIyMyw5 IEBAIGRlZiByZWdpc3Rlcl9xdWVyeV90b29sX3ByZWZlcmVuY2VzKHNlbGYpOgogICAgICAgICAg ICAgICAgICB7J2xhYmVsJzogJywnLCAndmFsdWUnOiAnLCd9LAogICAgICAgICAgICAgICAgICB7 J2xhYmVsJzogJ3wnLCAndmFsdWUnOiAnfCd9LAogICAgICAgICAgICAgICAgICB7J2xhYmVsJzog Z2V0dGV4dCgnVGFiJyksICd2YWx1ZSc6ICdcdCd9XSwKLSAgICAgICAgc2VsZWN0Mj17CisgICAg ICAgIGNvbnRyb2xfcHJvcHM9ewogICAgICAgICAgICAgJ2FsbG93Q2xlYXInOiBGYWxzZSwKLSAg ICAgICAgICAgICd0YWdzJzogVHJ1ZQorICAgICAgICAgICAgJ3RhZ3MnOiBGYWxzZQogICAgICAg ICB9CiAgICAgKQogCkBAIC0yNDcsNyArMjQ3LDcgQEAgZGVmIHJlZ2lzdGVyX3F1ZXJ5X3Rvb2xf cHJlZmVyZW5jZXMoc2VsZik6CiAgICAgICAgIG9wdGlvbnM9W3snbGFiZWwnOiBnZXR0ZXh0KCdO b25lJyksICd2YWx1ZSc6ICdub25lJ30sCiAgICAgICAgICAgICAgICAgIHsnbGFiZWwnOiBnZXR0 ZXh0KCdBbGwnKSwgJ3ZhbHVlJzogJ2FsbCd9LAogICAgICAgICAgICAgICAgICB7J2xhYmVsJzog Z2V0dGV4dCgnU3RyaW5ncycpLCAndmFsdWUnOiAnc3RyaW5ncyd9XSwKLSAgICAgICAgc2VsZWN0 Mj17CisgICAgICAgIGNvbnRyb2xfcHJvcHM9ewogICAgICAgICAgICAgJ2FsbG93Q2xlYXInOiBG YWxzZSwKICAgICAgICAgICAgICd0YWdzJzogRmFsc2UKICAgICAgICAgfQpAQCAtMjU5LDkgKzI1 OSw5IEBAIGRlZiByZWdpc3Rlcl9xdWVyeV90b29sX3ByZWZlcmVuY2VzKHNlbGYpOgogICAgICAg ICBjYXRlZ29yeV9sYWJlbD1QUkVGX0xBQkVMX1JFU1VMVFNfR1JJRCwKICAgICAgICAgb3B0aW9u cz1beydsYWJlbCc6ICciJywgJ3ZhbHVlJzogJyInfSwKICAgICAgICAgICAgICAgICAgeydsYWJl bCc6ICdcJycsICd2YWx1ZSc6ICdcJyd9XSwKLSAgICAgICAgc2VsZWN0Mj17CisgICAgICAgIGNv bnRyb2xfcHJvcHM9ewogICAgICAgICAgICAgJ2FsbG93Q2xlYXInOiBGYWxzZSwKLSAgICAgICAg ICAgICd0YWdzJzogVHJ1ZQorICAgICAgICAgICAgJ3RhZ3MnOiBGYWxzZQogICAgICAgICB9CiAg ICAgKQogCkBAIC0yNzMsOSArMjczLDkgQEAgZGVmIHJlZ2lzdGVyX3F1ZXJ5X3Rvb2xfcHJlZmVy ZW5jZXMoc2VsZik6CiAgICAgICAgICAgICAgICAgIHsnbGFiZWwnOiAnLCcsICd2YWx1ZSc6ICcs J30sCiAgICAgICAgICAgICAgICAgIHsnbGFiZWwnOiAnfCcsICd2YWx1ZSc6ICd8J30sCiAgICAg ICAgICAgICAgICAgIHsnbGFiZWwnOiBnZXR0ZXh0KCdUYWInKSwgJ3ZhbHVlJzogJ1x0J31dLAot ICAgICAgICBzZWxlY3QyPXsKKyAgICAgICAgY29udHJvbF9wcm9wcz17CiAgICAgICAgICAgICAn YWxsb3dDbGVhcic6IEZhbHNlLAotICAgICAgICAgICAgJ3RhZ3MnOiBUcnVlCisgICAgICAgICAg ICAndGFncyc6IEZhbHNlCiAgICAgICAgIH0KICAgICApCiAKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL3V0aWxzL3ByZWZlcmVuY2VzLnB5IGIvd2ViL3BnYWRtaW4vdXRpbHMvcHJlZmVyZW5jZXMu cHkKaW5kZXggMDkwMTE4MDQuLmUwNzQyNGNiIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi91dGls cy9wcmVmZXJlbmNlcy5weQorKysgYi93ZWIvcGdhZG1pbi91dGlscy9wcmVmZXJlbmNlcy5weQpA QCAtNjYsMTAgKzY2LDExIEBAIGNsYXNzIF9QcmVmZXJlbmNlKG9iamVjdCk6CiAgICAgICAgIHNl bGYubGFiZWwgPSBsYWJlbAogICAgICAgICBzZWxmLl90eXBlID0gX3R5cGUKICAgICAgICAgc2Vs Zi5oZWxwX3N0ciA9IGt3YXJncy5nZXQoJ2hlbHBfc3RyJywgTm9uZSkKKyAgICAgICAgc2VsZi5j b250cm9sX3Byb3BzID0ga3dhcmdzLmdldCgnY29udHJvbF9wcm9wcycsIE5vbmUpCiAgICAgICAg IHNlbGYubWluX3ZhbCA9IGt3YXJncy5nZXQoJ21pbl92YWwnLCBOb25lKQogICAgICAgICBzZWxm Lm1heF92YWwgPSBrd2FyZ3MuZ2V0KCdtYXhfdmFsJywgTm9uZSkKICAgICAgICAgc2VsZi5vcHRp b25zID0ga3dhcmdzLmdldCgnb3B0aW9ucycsIE5vbmUpCi0gICAgICAgIHNlbGYuc2VsZWN0MiA9 IGt3YXJncy5nZXQoJ3NlbGVjdDInLCBOb25lKQorICAgICAgICBzZWxmLnNlbGVjdCA9IGt3YXJn cy5nZXQoJ3NlbGVjdCcsIE5vbmUpCiAgICAgICAgIHNlbGYuZmllbGRzID0ga3dhcmdzLmdldCgn ZmllbGRzJywgTm9uZSkKICAgICAgICAgc2VsZi5hbGxvd19ibGFua3MgPSBrd2FyZ3MuZ2V0KCdh bGxvd19ibGFua3MnLCBOb25lKQogICAgICAgICBzZWxmLmRpc2FibGVkID0ga3dhcmdzLmdldCgn ZGlzYWJsZWQnLCBGYWxzZSkKQEAgLTE0NiwxMCArMTQ3LDEwIEBAIGNsYXNzIF9QcmVmZXJlbmNl KG9iamVjdCk6CiAgICAgICAgICAgICBmb3Igb3B0IGluIHNlbGYub3B0aW9uczoKICAgICAgICAg ICAgICAgICBpZiAndmFsdWUnIGluIG9wdCBhbmQgb3B0Wyd2YWx1ZSddID09IHJlcy52YWx1ZToK ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUsIHJlcy52YWx1ZQotICAgICAgICAgICAg aWYgc2VsZi5zZWxlY3QyIGFuZCBzZWxmLnNlbGVjdDJbJ3RhZ3MnXToKKyAgICAgICAgICAgIGlm IHNlbGYuc2VsZWN0IGFuZCBzZWxmLnNlbGVjdFsndGFncyddOgogICAgICAgICAgICAgICAgIHJl dHVybiBUcnVlLCByZXMudmFsdWUKICAgICAgICAgICAgIHJldHVybiBUcnVlLCBzZWxmLmRlZmF1 bHQKLSAgICAgICAgaWYgc2VsZi5fdHlwZSA9PSAnc2VsZWN0Mic6CisgICAgICAgIGlmIHNlbGYu X3R5cGUgPT0gJ3NlbGVjdCc6CiAgICAgICAgICAgICBpZiByZXMudmFsdWU6CiAgICAgICAgICAg ICAgICAgcmVzLnZhbHVlID0gcmVzLnZhbHVlLnJlcGxhY2UoJ1snLCAnJykKICAgICAgICAgICAg ICAgICByZXMudmFsdWUgPSByZXMudmFsdWUucmVwbGFjZSgnXScsICcnKQpAQCAtMTkwLDcgKzE5 MSw3IEBAIGNsYXNzIF9QcmVmZXJlbmNlKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgaGFzX3Zh bHVlID0gbmV4dCgoVHJ1ZSBmb3Igb3B0IGluIHNlbGYub3B0aW9ucwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmICd2YWx1ZScgaW4gb3B0IGFuZCBvcHRbJ3ZhbHVlJ10gPT0g dmFsdWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UpCi0gICAgICAg ICAgICAgICAgYXNzZXJ0IChoYXNfdmFsdWUgb3IgKHNlbGYuc2VsZWN0MiBhbmQgc2VsZi5zZWxl Y3QyWyd0YWdzJ10pKQorICAgICAgICAgICAgICAgIGFzc2VydCAoaGFzX3ZhbHVlIG9yIChzZWxm LnNlbGVjdCBhbmQgc2VsZi5zZWxlY3RbJ3RhZ3MnXSkpCiAgICAgICAgICAgICBlbGlmIHNlbGYu X3R5cGUgPT0gJ2RhdGUnOgogICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VyX21hcFtzZWxm Ll90eXBlXSh2YWx1ZSkuZGF0ZSgpCiAgICAgICAgICAgICBlbHNlOgpAQCAtMjQ4LDEwICsyNDks MTEgQEAgY2xhc3MgX1ByZWZlcmVuY2Uob2JqZWN0KToKICAgICAgICAgICAgICdsYWJlbCc6IHNl bGYubGFiZWwgb3Igc2VsZi5uYW1lLAogICAgICAgICAgICAgJ3R5cGUnOiBzZWxmLl90eXBlLAog ICAgICAgICAgICAgJ2hlbHBfc3RyJzogc2VsZi5oZWxwX3N0ciwKKyAgICAgICAgICAgICdjb250 cm9sX3Byb3BzJzogc2VsZi5jb250cm9sX3Byb3BzLAogICAgICAgICAgICAgJ21pbl92YWwnOiBz ZWxmLm1pbl92YWwsCiAgICAgICAgICAgICAnbWF4X3ZhbCc6IHNlbGYubWF4X3ZhbCwKICAgICAg ICAgICAgICdvcHRpb25zJzogc2VsZi5vcHRpb25zLAotICAgICAgICAgICAgJ3NlbGVjdDInOiBz ZWxmLnNlbGVjdDIsCisgICAgICAgICAgICAnc2VsZWN0Jzogc2VsZi5zZWxlY3QsCiAgICAgICAg ICAgICAndmFsdWUnOiBzZWxmLmdldCgpLAogICAgICAgICAgICAgJ2ZpZWxkcyc6IHNlbGYuZmll bGRzLAogICAgICAgICAgICAgJ2Rpc2FibGVkJzogc2VsZi5kaXNhYmxlZCwKQEAgLTM5Myw3ICsz OTUsNyBAQCBjbGFzcyBQcmVmZXJlbmNlcyhvYmplY3QpOgogICAgICAgICByZXR1cm4gcmVzCiAK ICAgICBkZWYgcmVnaXN0ZXIoCi0gICAgICAgICAgICBzZWxmLCBjYXRlZ29yeSwgbmFtZSwgbGFi ZWwsIF90eXBlLCBkZWZhdWx0LCAqKmt3YXJncworICAgICAgICBzZWxmLCBjYXRlZ29yeSwgbmFt ZSwgbGFiZWwsIF90eXBlLCBkZWZhdWx0LCAqKmt3YXJncwogICAgICk6CiAgICAgICAgICIiIgog ICAgICAgICByZWdpc3RlcgpAQCAtNDE0LDcgKzQxNiw3IEBAIGNsYXNzIFByZWZlcmVuY2VzKG9i amVjdCk6CiAgICAgICAgIDpwYXJhbSBvcHRpb25zOgogICAgICAgICA6cGFyYW0gaGVscF9zdHI6 CiAgICAgICAgIDpwYXJhbSBjYXRlZ29yeV9sYWJlbDoKLSAgICAgICAgOnBhcmFtIHNlbGVjdDI6 IHNlbGVjdDIgY29udHJvbCBleHRyYSBvcHRpb25zCisgICAgICAgIDpwYXJhbSBzZWxlY3Q6IHNl bGVjdCBjb250cm9sIGV4dHJhIG9wdGlvbnMKICAgICAgICAgOnBhcmFtIGZpZWxkczogZmllbGQg c2NoZW1hIChpZiBwcmVmZXJlbmNlIGhhcyBtb3JlIHRoYW4gb25lIGZpZWxkIHRvCiAgICAgICAg ICAgICAgICAgICAgICAgICB0YWtlIGlucHV0IGZyb20gdXNlciBlLmcuIGtleWJvYXJkc2hvcnRj dXQgcHJlZmVyZW5jZSkKICAgICAgICAgOnBhcmFtIGFsbG93X2JsYW5rczogRmxhZyBzcGVjaWZ5 IHdoZXRoZXIgdG8gYWxsb3cgYmxhbmsgdmFsdWUuCkBAIC00MjQsOCArNDI2LDkgQEAgY2xhc3Mg UHJlZmVyZW5jZXMob2JqZWN0KToKICAgICAgICAgbWF4X3ZhbCA9IGt3YXJncy5nZXQoJ21heF92 YWwnLCBOb25lKQogICAgICAgICBvcHRpb25zID0ga3dhcmdzLmdldCgnb3B0aW9ucycsIE5vbmUp CiAgICAgICAgIGhlbHBfc3RyID0ga3dhcmdzLmdldCgnaGVscF9zdHInLCBOb25lKQorICAgICAg ICBjb250cm9sX3Byb3BzID0ga3dhcmdzLmdldCgnY29udHJvbF9wcm9wcycsIHt9KQogICAgICAg ICBjYXRlZ29yeV9sYWJlbCA9IGt3YXJncy5nZXQoJ2NhdGVnb3J5X2xhYmVsJywgTm9uZSkKLSAg ICAgICAgc2VsZWN0MiA9IGt3YXJncy5nZXQoJ3NlbGVjdDInLCBOb25lKQorICAgICAgICBzZWxl Y3QgPSBrd2FyZ3MuZ2V0KCdzZWxlY3QnLCBOb25lKQogICAgICAgICBmaWVsZHMgPSBrd2FyZ3Mu Z2V0KCdmaWVsZHMnLCBOb25lKQogICAgICAgICBhbGxvd19ibGFua3MgPSBrd2FyZ3MuZ2V0KCdh bGxvd19ibGFua3MnLCBOb25lKQogICAgICAgICBkaXNhYmxlZCA9IGt3YXJncy5nZXQoJ2Rpc2Fi bGVkJywgRmFsc2UpCkBAIC00NDAsMTQgKzQ0MywxNSBAQCBjbGFzcyBQcmVmZXJlbmNlcyhvYmpl Y3QpOgogICAgICAgICBhc3NlcnQgX3R5cGUgaW4gKAogICAgICAgICAgICAgJ2Jvb2xlYW4nLCAn aW50ZWdlcicsICdudW1lcmljJywgJ2RhdGUnLCAnZGF0ZXRpbWUnLAogICAgICAgICAgICAgJ29w dGlvbnMnLCAnbXVsdGlsaW5lJywgJ3N3aXRjaCcsICdub2RlJywgJ3RleHQnLCAncmFkaW9Nb2Rl cm4nLAotICAgICAgICAgICAgJ2tleWJvYXJkc2hvcnRjdXQnLCAnc2VsZWN0MicsICdzZWxlY3RG aWxlJywgJ3RocmVzaG9sZCcKKyAgICAgICAgICAgICdrZXlib2FyZHNob3J0Y3V0JywgJ3NlbGVj dCcsICdzZWxlY3RGaWxlJywgJ3RocmVzaG9sZCcKICAgICAgICAgKSwgIlR5cGUgY2Fubm90IGJl IGZvdW5kIGluIHRoZSBkZWZpbmVkIGxpc3QhIgogCiAgICAgICAgIChjYXRbJ3ByZWZlcmVuY2Vz J10pW25hbWVdID0gcmVzID0gX1ByZWZlcmVuY2UoCiAgICAgICAgICAgICBjYXRbJ2lkJ10sIG5h bWUsIGxhYmVsLCBfdHlwZSwgZGVmYXVsdCwgaGVscF9zdHI9aGVscF9zdHIsCiAgICAgICAgICAg ICBtaW5fdmFsPW1pbl92YWwsIG1heF92YWw9bWF4X3ZhbCwgb3B0aW9ucz1vcHRpb25zLAotICAg ICAgICAgICAgc2VsZWN0Mj1zZWxlY3QyLCBmaWVsZHM9ZmllbGRzLCBhbGxvd19ibGFua3M9YWxs b3dfYmxhbmtzLAotICAgICAgICAgICAgZGlzYWJsZWQ9ZGlzYWJsZWQsIGRlcGVuZGVudHM9ZGVw ZW5kZW50cworICAgICAgICAgICAgc2VsZWN0PXNlbGVjdCwgZmllbGRzPWZpZWxkcywgYWxsb3df YmxhbmtzPWFsbG93X2JsYW5rcywKKyAgICAgICAgICAgIGRpc2FibGVkPWRpc2FibGVkLCBkZXBl bmRlbnRzPWRlcGVuZGVudHMsCisgICAgICAgICAgICBjb250cm9sX3Byb3BzPWNvbnRyb2xfcHJv cHMKICAgICAgICAgKQogCiAgICAgICAgIHJldHVybiByZXMKQEAgLTQ4Myw3ICs0ODcsNyBAQCBj bGFzcyBQcmVmZXJlbmNlcyhvYmplY3QpOgogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHJl Z2lzdGVyX3ByZWZlcmVuY2UoCi0gICAgICAgICAgICBjbHMsIG1vZHVsZSwgY2F0ZWdvcnksIG5h bWUsIGxhYmVsLCBfdHlwZSwgKiprd2FyZ3MKKyAgICAgICAgY2xzLCBtb2R1bGUsIGNhdGVnb3J5 LCBuYW1lLCBsYWJlbCwgX3R5cGUsICoqa3dhcmdzCiAgICAgKToKICAgICAgICAgIiIiCiAgICAg ICAgIHJlZ2lzdGVyCkBAIC01MDMsNiArNTA3LDcgQEAgY2xhc3MgUHJlZmVyZW5jZXMob2JqZWN0 KToKICAgICAgICAgbWF4X3ZhbCA9IGt3YXJncy5nZXQoJ21heF92YWwnLCBOb25lKQogICAgICAg ICBvcHRpb25zID0ga3dhcmdzLmdldCgnb3B0aW9ucycsIE5vbmUpCiAgICAgICAgIGhlbHBfc3Ry ID0ga3dhcmdzLmdldCgnaGVscF9zdHInLCBOb25lKQorICAgICAgICBjb250cm9sX3Byb3BzID0g a3dhcmdzLmdldCgnY29udHJvbF9wcm9wcycsIE5vbmUpCiAgICAgICAgIG1vZHVsZV9sYWJlbCA9 IGt3YXJncy5nZXQoJ21vZHVsZV9sYWJlbCcsIE5vbmUpCiAgICAgICAgIGNhdGVnb3J5X2xhYmVs ID0ga3dhcmdzLmdldCgnY2F0ZWdvcnlfbGFiZWwnLCBOb25lKQogCkBAIC01MTYsNiArNTIxLDcg QEAgY2xhc3MgUHJlZmVyZW5jZXMob2JqZWN0KToKICAgICAgICAgcmV0dXJuIG0ucmVnaXN0ZXIo CiAgICAgICAgICAgICBjYXRlZ29yeSwgbmFtZSwgbGFiZWwsIF90eXBlLCBkZWZhdWx0LCBtaW5f dmFsPW1pbl92YWwsCiAgICAgICAgICAgICBtYXhfdmFsPW1heF92YWwsIG9wdGlvbnM9b3B0aW9u cywgaGVscF9zdHI9aGVscF9zdHIsCisgICAgICAgICAgICBjb250cm9sX3Byb3BzPWNvbnRyb2xf cHJvcHMsCiAgICAgICAgICAgICBjYXRlZ29yeV9sYWJlbD1jYXRlZ29yeV9sYWJlbAogICAgICAg ICApCiAKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvY29tcG9uZW50cy9L ZXlib2FyZFNob3J0Y3V0cy5zcGVjLmpzIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9jb21w b25lbnRzL0tleWJvYXJkU2hvcnRjdXRzLnNwZWMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAuLjFhOTJmZjg4Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3JlZ3Jlc3Npb24v amF2YXNjcmlwdC9jb21wb25lbnRzL0tleWJvYXJkU2hvcnRjdXRzLnNwZWMuanMKQEAgLTAsMCAr MSwxMDAgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8KKy8vCisvLyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisvLwor Ly8gQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAyMiwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVh bQorLy8gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNl bmNlCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8KKworaW1wb3J0IGphc21pbmVFbnp5bWUgZnJvbSAnamFzbWluZS1lbnp5 bWUnOworaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsKK2ltcG9ydCAnLi4vaGVscGVyL2Vuenlt ZS5oZWxwZXInOworaW1wb3J0IHsgd2l0aFRoZW1lIH0gZnJvbSAnLi4vZmFrZV90aGVtZSc7Citp bXBvcnQgeyBjcmVhdGVNb3VudCB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL3Rlc3QtdXRpbHMn OworaW1wb3J0IHsKKyAgT3V0bGluZWRJbnB1dCwKK30gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUn OworaW1wb3J0IEtleWJvYXJkU2hvcnRjdXRzIGZyb20gJy4uLy4uLy4uL3BnYWRtaW4vc3RhdGlj L2pzL2NvbXBvbmVudHMvS2V5Ym9hcmRTaG9ydGN1dHMnOworCisvKiBNVUkgQ29tcG9uZW50cyBu ZWVkIHRvIGJlIHdyYXBwZWQgaW4gVGhlbWUgZm9yIHRoZW1lIHZhcnMgKi8KK2Rlc2NyaWJlKCdL ZXlib2FyZFNob3J0Y3V0cycsICgpID0+IHsKKyAgbGV0IG1vdW50OworICBsZXQgZGVmdWx0X3Zh bHVlID0geworICAgICdjdHJsJzogdHJ1ZSwKKyAgICAnYWx0JzogdHJ1ZSwKKyAgICAna2V5Jzog eworICAgICAgJ2NoYXInOiAnYScsCisgICAgICAna2V5X2NvZGUnOiA5NworICAgIH0KKyAgfTsK KyAgbGV0IGZpZWxkcyA9IFt7CisgICAgdHlwZTogJ2tleUNvZGUnLAorICAgIGxhYmVsOiAnS2V5 JworICB9LCB7CisgICAgbmFtZTogJ3NoaWZ0JywKKyAgICBsYWJlbDogJ1NoaWZ0JywKKyAgICB0 eXBlOiAnY2hlY2tib3gnCisgIH0sCisgIHsKKyAgICBuYW1lOiAnY29udHJvbCcsCisgICAgbGFi ZWw6ICdDb250cm9sJywKKyAgICB0eXBlOiAnY2hlY2tib3gnCisgIH0sCisgIHsKKyAgICBuYW1l OiAnYWx0JywKKyAgICBsYWJlbDogJ0FsdC9PcHRpb24nLAorICAgIHR5cGU6ICdjaGVja2JveCcK KyAgfV07CisKKyAgLyogVXNlIGNyZWF0ZU1vdW50IHNvIHRoYXQgbWF0ZXJpYWwgdWkgY29tcG9u ZW50cyBnZXRzIHRoZSByZXF1aXJlZCBjb250ZXh0ICovCisgIC8qIGh0dHBzOi8vbWF0ZXJpYWwt dWkuY29tL2d1aWRlcy90ZXN0aW5nLyNhcGkgKi8KKyAgYmVmb3JlQWxsKCgpID0+IHsKKyAgICBt b3VudCA9IGNyZWF0ZU1vdW50KCk7CisgIH0pOworCisgIGFmdGVyQWxsKCgpID0+IHsKKyAgICBt b3VudC5jbGVhblVwKCk7CisgIH0pOworCisgIGJlZm9yZUVhY2goKCkgPT4geworICAgIGphc21p bmVFbnp5bWUoKTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ0tleWJvYXJkU2hvcnRjdXRzJywgKCkg PT4geworICAgIGxldCBUaGVtZWRGb3JtSW5wdXRLZXlib2FyZFNob3J0Y3V0cyA9IHdpdGhUaGVt ZShLZXlib2FyZFNob3J0Y3V0cyksIGN0cmw7CisKKyAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAg ICAgIGN0cmwgPSBtb3VudCgKKyAgICAgICAgPFRoZW1lZEZvcm1JbnB1dEtleWJvYXJkU2hvcnRj dXRzCisgICAgICAgICAgdGVzdGNpZD0iaW5wQ2lkIgorICAgICAgICAgIGhlbHBNZXNzYWdlPSJz b21lIGhlbHAgbWVzc2FnZSIKKyAgICAgICAgICAvKiBJbnB1dFRleHQgKi8KKyAgICAgICAgICBy ZWFkb25seT17ZmFsc2V9CisgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfQorICAgICAgICAgIG1h eGxlbmd0aD17MX0KKyAgICAgICAgICB2YWx1ZT17ZGVmdWx0X3ZhbHVlfQorICAgICAgICAgIGZp ZWxkcz17ZmllbGRzfQorICAgICAgICAgIGNvbnRyb2xQcm9wcz17eworICAgICAgICAgICAgZXh0 cmFwcm9wOiAndGVzdCcKKyAgICAgICAgICB9fQorICAgICAgICAvPik7CisgICAgfSk7CisKKyAg ICBpdCgnaW5pdCcsICgpID0+IHsKKyAgICAgIGV4cGVjdChjdHJsLmZpbmQoT3V0bGluZWRJbnB1 dCkucHJvcCgndmFsdWUnKSkudG9CZSgnYScpOworICAgIH0pOworCisgICAgaXQoJ0tleSBjaGFu Z2UnLCAoKSA9PiB7CisgICAgICBsZXQgb25DaGFuZ2UgPSAoKSA9PiB7LypUaGlzIGlzIGludGVu dGlvbmFsIChTb25hclF1YmUpKi8gfTsKKyAgICAgIGN0cmwuc2V0UHJvcHMoeworICAgICAgICBj b250cm9sUHJvcHM6IHsKKyAgICAgICAgICBvbktleURvd246IG9uQ2hhbmdlCisgICAgICAgIH0K KyAgICAgIH0pOworCisgICAgICBleHBlY3QoY3RybC5maW5kKE91dGxpbmVkSW5wdXQpLnByb3Ao J3ZhbHVlJykpLnRvQmUoJ2EnKTsKKyAgICB9KTsKKyAgfSk7CisKK30pOwpkaWZmIC0tZ2l0IGEv d2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9jb21wb25lbnRzL1F1ZXJ5VGhyZXNob2xkLnNwZWMu anMgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2NvbXBvbmVudHMvUXVlcnlUaHJlc2hvbGQu c3BlYy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZmEyNTlhZTAKLS0t IC9kZXYvbnVsbAorKysgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2NvbXBvbmVudHMvUXVl cnlUaHJlc2hvbGQuc3BlYy5qcwpAQCAtMCwwICsxLDg2IEBACisvLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gcGdBZG1p biA0IC0gUG9zdGdyZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMjIs IFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFz ZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2ltcG9ydCBqYXNt aW5lRW56eW1lIGZyb20gJ2phc21pbmUtZW56eW1lJzsKK2ltcG9ydCBSZWFjdCBmcm9tICdyZWFj dCc7CitpbXBvcnQgJy4uL2hlbHBlci9lbnp5bWUuaGVscGVyJzsKK2ltcG9ydCB7IHdpdGhUaGVt ZSB9IGZyb20gJy4uL2Zha2VfdGhlbWUnOworaW1wb3J0IHsgY3JlYXRlTW91bnQgfSBmcm9tICdA bWF0ZXJpYWwtdWkvY29yZS90ZXN0LXV0aWxzJzsKK2ltcG9ydCB7CisgIE91dGxpbmVkSW5wdXQs Cit9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlJzsKK2ltcG9ydCBRdWVyeVRocmVzaG9sZHMgZnJv bSAnLi4vLi4vLi4vcGdhZG1pbi9zdGF0aWMvanMvY29tcG9uZW50cy9RdWVyeVRocmVzaG9sZHMn OworCisvKiBNVUkgQ29tcG9uZW50cyBuZWVkIHRvIGJlIHdyYXBwZWQgaW4gVGhlbWUgZm9yIHRo ZW1lIHZhcnMgKi8KK2Rlc2NyaWJlKCdRdWVyeVRocmVzaG9sZHMnLCAoKSA9PiB7CisgIGxldCBt b3VudDsKKyAgbGV0IGRlZnVsdF92YWx1ZSA9IHsKKyAgICAnd2FybmluZyc6IDUsCisgICAgJ2Fs ZXJ0JzogNgorICB9OworCisgIC8qIFVzZSBjcmVhdGVNb3VudCBzbyB0aGF0IG1hdGVyaWFsIHVp IGNvbXBvbmVudHMgZ2V0cyB0aGUgcmVxdWlyZWQgY29udGV4dCAqLworICAvKiBodHRwczovL21h dGVyaWFsLXVpLmNvbS9ndWlkZXMvdGVzdGluZy8jYXBpICovCisgIGJlZm9yZUFsbCgoKSA9PiB7 CisgICAgbW91bnQgPSBjcmVhdGVNb3VudCgpOworICB9KTsKKworICBhZnRlckFsbCgoKSA9PiB7 CisgICAgbW91bnQuY2xlYW5VcCgpOworICB9KTsKKworICBiZWZvcmVFYWNoKCgpID0+IHsKKyAg ICBqYXNtaW5lRW56eW1lKCk7CisgIH0pOworCisgIGRlc2NyaWJlKCdRdWVyeVRocmVzaG9sZHMn LCAoKSA9PiB7CisgICAgbGV0IFRoZW1lZEZvcm1JbnB1dFF1ZXJ5VGhyZXNob2xkcyA9IHdpdGhU aGVtZShRdWVyeVRocmVzaG9sZHMpLCBjdHJsOworCisgICAgYmVmb3JlRWFjaCgoKSA9PiB7Cisg ICAgICBjdHJsID0gbW91bnQoCisgICAgICAgIDxUaGVtZWRGb3JtSW5wdXRRdWVyeVRocmVzaG9s ZHMKKyAgICAgICAgICB0ZXN0Y2lkPSJpbnBDaWQiCisgICAgICAgICAgaGVscE1lc3NhZ2U9InNv bWUgaGVscCBtZXNzYWdlIgorICAgICAgICAgIC8qIElucHV0VGV4dCAqLworICAgICAgICAgIHJl YWRvbmx5PXtmYWxzZX0KKyAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9CisgICAgICAgICAgbWF4 bGVuZ3RoPXsxfQorICAgICAgICAgIHZhbHVlPXtkZWZ1bHRfdmFsdWV9CisgICAgICAgICAgY29u dHJvbFByb3BzPXt7CisgICAgICAgICAgICBleHRyYXByb3A6ICd0ZXN0JworICAgICAgICAgIH19 CisgICAgICAgIC8+KTsKKyAgICB9KTsKKworICAgIGl0KCdpbml0IFdhcm5pbmcnLCAoKSA9PiB7 CisgICAgICBleHBlY3QoY3RybC5maW5kKE91dGxpbmVkSW5wdXQpLmF0KDApLnByb3AoJ3ZhbHVl JykpLnRvQmUoNSk7CisgICAgfSk7CisKKyAgICBpdCgnaW5pdCBBbGVydCcsICgpID0+IHsKKyAg ICAgIGV4cGVjdChjdHJsLmZpbmQoT3V0bGluZWRJbnB1dCkuYXQoMSkucHJvcCgndmFsdWUnKSku dG9CZSg2KTsKKyAgICB9KTsKKworICAgIGl0KCd3YXJuaW5nIGNoYW5nZScsICgpID0+IHsKKyAg ICAgIGxldCBvbkNoYW5nZSA9ICgpID0+IHsvKlRoaXMgaXMgaW50ZW50aW9uYWwgKFNvbmFyUXVi ZSkqLyB9OworICAgICAgY3RybC5zZXRQcm9wcyh7CisgICAgICAgIG9uQ2hhbmdlOiBvbkNoYW5n ZQorICAgICAgfSk7CisgICAgICBleHBlY3QoY3RybC5maW5kKE91dGxpbmVkSW5wdXQpLmF0KDAp LnByb3AoJ3ZhbHVlJykpLnRvQmUoNSk7CisgICAgfSk7CisKKyAgICBpdCgnQWxlcnQgY2hhbmdl JywgKCkgPT4geworICAgICAgbGV0IG9uQ2hhbmdlID0gKCkgPT4gey8qVGhpcyBpcyBpbnRlbnRp b25hbCAoU29uYXJRdWJlKSovIH07CisgICAgICBjdHJsLnNldFByb3BzKHsKKyAgICAgICAgb25D aGFuZ2U6IG9uQ2hhbmdlCisgICAgICB9KTsKKyAgICAgIGV4cGVjdChjdHJsLmZpbmQoT3V0bGlu ZWRJbnB1dCkuYXQoMSkucHJvcCgndmFsdWUnKSkudG9CZSg2KTsKKyAgICB9KTsKKyAgfSk7CisK K30pOwpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9zY2hlbWFfdWlfZmls ZXMvYmluYXJ5X3BhdGgudWkuc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc2No ZW1hX3VpX2ZpbGVzL2JpbmFyeV9wYXRoLnVpLnNwZWMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAuLmY1MWRmZWZjCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3JlZ3Jlc3Np b24vamF2YXNjcmlwdC9zY2hlbWFfdWlfZmlsZXMvYmluYXJ5X3BhdGgudWkuc3BlYy5qcwpAQCAt MCwwICsxLDQ0IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scwor Ly8KKy8vIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMjIsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50 IFRlYW0KKy8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwg TGljZW5jZQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vCisKK2ltcG9ydCAnLi4vaGVscGVyL2VuenltZS5oZWxwZXInOwor aW1wb3J0IHsgY3JlYXRlTW91bnQgfSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS90ZXN0LXV0aWxz JzsKK2ltcG9ydCB7Z2VuZXJpY0JlZm9yZUVhY2gsIGdldFByb3BlcnRpZXNWaWV3fSBmcm9tICcu Li9nZW5lcmljRnVuY3Rpb25zJzsKK2ltcG9ydCB7Z2V0QmluYXJ5UGF0aFNjaGVtYX0gZnJvbSAn Li4vLi4vLi4vcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9zdGF0aWMvanMv YmluYXJ5X3BhdGgudWknOworCitkZXNjcmliZSgnQmluYXJ5UGF0aHNjaGVtYScsICgpPT57Cisg IGxldCBtb3VudDsKKyAgbGV0IHNjaGVtYU9iaiA9IGdldEJpbmFyeVBhdGhTY2hlbWEoKTsKKyAg bGV0IGdldEluaXREYXRhID0gKCk9PlByb21pc2UucmVzb2x2ZSh7fSk7CisKKyAgLyogVXNlIGNy ZWF0ZU1vdW50IHNvIHRoYXQgbWF0ZXJpYWwgdWkgY29tcG9uZW50cyBnZXRzIHRoZSByZXF1aXJl ZCBjb250ZXh0ICovCisgIC8qIGh0dHBzOi8vbWF0ZXJpYWwtdWkuY29tL2d1aWRlcy90ZXN0aW5n LyNhcGkgKi8KKyAgYmVmb3JlQWxsKCgpPT57CisgICAgbW91bnQgPSBjcmVhdGVNb3VudCgpOwor ICB9KTsKKworICBhZnRlckFsbCgoKSA9PiB7CisgICAgbW91bnQuY2xlYW5VcCgpOworICB9KTsK KworICBiZWZvcmVFYWNoKCgpPT57CisgICAgZ2VuZXJpY0JlZm9yZUVhY2goKTsKKyAgfSk7CisK KyAgaXQoJ2VkaXQnLCAoKT0+eworICAgIG1vdW50KGdldFByb3BlcnRpZXNWaWV3KHNjaGVtYU9i aiwgZ2V0SW5pdERhdGEpKTsKKyAgfSk7CisKKyAgaXQoJ3ZhbGlkYXRlIHBhdGgnLCAoKT0+ewor ICAgIGxldCB2YWxpZGF0ZSA9IF8uZmluZChzY2hlbWFPYmouZmllbGRzLCAoZik9PmYuaWQ9PSdi aW5hcnlQYXRoJykudmFsaWRhdGU7CisgICAgbGV0IHN0YXR1cyA9IHZhbGlkYXRlKCcvdGVzdC8n KTsKKyAgICBleHBlY3Qoc3RhdHVzKS50b0JlKHRydWUpOworICB9KTsKKworfSk7CmRpZmYgLS1n aXQgYS93ZWIvd2VicGFjay5zaGltLmpzIGIvd2ViL3dlYnBhY2suc2hpbS5qcwppbmRleCBmNDVl ZmRlOC4uYTJlOGYyOGUgMTAwNjQ0Ci0tLSBhL3dlYi93ZWJwYWNrLnNoaW0uanMKKysrIGIvd2Vi L3dlYnBhY2suc2hpbS5qcwpAQCAtMjgyLDcgKzI4Miw3IEBAIHZhciB3ZWJwYWNrU2hpbUNvbmZp ZyA9IHsKICAgICAncGdhZG1pbi5ub2RlLnVzZXJfbWFwcGluZyc6IHBhdGguam9pbihfX2Rpcm5h bWUsICcuL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL2Zv cmVpZ25fZGF0YV93cmFwcGVycy9mb3JlaWduX3NlcnZlcnMvdXNlcl9tYXBwaW5ncy9zdGF0aWMv anMvdXNlcl9tYXBwaW5nJyksCiAgICAgJ3BnYWRtaW4ubm9kZS52aWV3JzogcGF0aC5qb2luKF9f ZGlybmFtZSwgJy4vcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFz ZXMvc2NoZW1hcy92aWV3cy9zdGF0aWMvanMvdmlldycpLAogICAgICdwZ2FkbWluLm5vZGUucm93 X3NlY3VyaXR5X3BvbGljeSc6IHBhdGguam9pbihfX2Rpcm5hbWUsICcuL3BnYWRtaW4vYnJvd3Nl ci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Jvd19zZWN1 cml0eV9wb2xpY2llcy9zdGF0aWMvanMvcm93X3NlY3VyaXR5X3BvbGljeScpLAotICAgICdwZ2Fk bWluLnByZWZlcmVuY2VzJzogcGF0aC5qb2luKF9fZGlybmFtZSwgJy4vcGdhZG1pbi9wcmVmZXJl bmNlcy9zdGF0aWMvanMvcHJlZmVyZW5jZXMnKSwKKyAgICAncGdhZG1pbi5wcmVmZXJlbmNlcyc6 IHBhdGguam9pbihfX2Rpcm5hbWUsICcuL3BnYWRtaW4vcHJlZmVyZW5jZXMvc3RhdGljL2pzLycp LAogICAgICdwZ2FkbWluLnNldHRpbmdzJzogcGF0aC5qb2luKF9fZGlybmFtZSwgJy4vcGdhZG1p bi9zZXR0aW5ncy9zdGF0aWMvanMvc2V0dGluZ3MnKSwKICAgICAncGdhZG1pbi5zZXJ2ZXIuc3Vw cG9ydGVkX3NlcnZlcnMnOiAnL2Jyb3dzZXIvc2VydmVyL3N1cHBvcnRlZF9zZXJ2ZXJzJywKICAg ICAncGdhZG1pbi5zcWxlZGl0b3InOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi9wZ2FkbWluL3Rv b2xzL3NxbGVkaXRvci9zdGF0aWMvanMvc3FsZWRpdG9yJyksCg== --000000000000e70f2705d99ff064--