From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id wPuMByTK5V7aYgAA0tVLHw (envelope-from ) for ; Sun, 14 Jun 2020 06:56:36 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id qBtNAyTK5V7oFwAAbx9fmQ (envelope-from ) for ; Sun, 14 Jun 2020 06:56:36 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 57BB094053C for ; Sun, 14 Jun 2020 06:56:35 +0000 (UTC) Received: from localhost ([::1]:36776 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkMZG-0000bg-5D for larch@yhetil.org; Sun, 14 Jun 2020 02:56:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58560) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkMZ0-0000bC-IU for guix-devel@gnu.org; Sun, 14 Jun 2020 02:56:18 -0400 Received: from sender4-of-o53.zoho.com ([136.143.188.53]:21390) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jkMYy-0001tZ-Pl for guix-devel@gnu.org; Sun, 14 Jun 2020 02:56:18 -0400 ARC-Seal: i=1; a=rsa-sha256; t=1592117772; cv=none; d=zohomail.com; s=zohoarc; b=U8J6MhnlIhOj15Jhrd3GwOTy9LyEx3KVseNIKYNQ8CD9BEVXoiapHaQedCNrjXU4yejUvrwT0WIzcEuiFf2m2dP1UjydBS5pDbbd94bWs7WwiGaPQmN98Hp1jprRYT4j/DMMM9ZF+hJSDnW6zuvodjCyt8pLRF/aTZivLTaI1xc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1592117772; h=Content-Type:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=g4kRZu22lMjUiJ0BwxePODKVAl9a5KwOG7h+qR5zF6Y=; b=g7sMHRRPNrOaCLfNJaF26GC36Szi1HMbmlNOxTCOp5dZJ1n9XZqbDxTDXqiL2jtIBFUCPs4aFpFb/sjiqFd7JJ2fl7vGIBxSlGDjNPC2u5i66LazyC3tsWkni8qXi0mtgclgwprtQj3ZFwkY35A54R4TCst10DCSHYsMKaEKJVQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=elephly.net; spf=pass smtp.mailfrom=rekado@elephly.net; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1592117772; s=zoho; d=elephly.net; i=rekado@elephly.net; h=References:From:To:Subject:In-reply-to:Date:Message-ID:MIME-Version:Content-Type; bh=g4kRZu22lMjUiJ0BwxePODKVAl9a5KwOG7h+qR5zF6Y=; b=DLmsAeLib0mz/pDVWVTaEl1QBJhM+ulsRfsPqqI0q1EICJONzjrw4QzlFtvm/AdW KrhBFdlUb1I3LgdYtre7k+Yr2+8Gal19d1jzCcLHNBRyK7rh7ozpEUq/TRMZ4lj0mfZ 93qg5hE8sYgSntMiZ6F45eH23Ic5H4MWJjb7dztM= Received: from localhost (p54ad4304.dip0.t-ipconnect.de [84.173.67.4]) by mx.zohomail.com with SMTPS id 1592117769437351.9628614788247; Sat, 13 Jun 2020 23:56:09 -0700 (PDT) References: <87pna3ewlh.fsf@elephly.net> User-agent: mu4e 1.4.10; emacs 26.3 From: Ricardo Wurmus To: guix-devel@gnu.org Subject: Re: generate commit messages for package updates In-reply-to: <87pna3ewlh.fsf@elephly.net> X-URL: https://elephly.net X-PGP-Key: https://elephly.net/rekado.pubkey X-PGP-Fingerprint: BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC Date: Sun, 14 Jun 2020 08:56:06 +0200 Message-ID: <878sgqm8zd.fsf@elephly.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Zoho-Virus-Status: 1 X-ZohoMailClient: External Received-SPF: pass client-ip=136.143.188.53; envelope-from=rekado@elephly.net; helo=sender4-of-o53.zoho.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/13 23:24:32 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: guix-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+larch=yhetil.org@gnu.org Sender: "Guix-devel" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=elephly.net header.s=zoho header.b=DLmsAeLi; dmarc=none; spf=pass (aspmx1.migadu.com: domain of guix-devel-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-devel-bounces@gnu.org X-Spam-Score: -2.21 X-TUID: Lj8BrCYb2hVG --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Ricardo Wurmus writes: > It is not fully automatic yet as it requires my input to stage > hunks, but the commit messages it produces take all input changes into > account, which is something the =E2=80=9Cupdate=E2=80=9D yasnippet does n= ot do. Attached is the fully automatic version. You just make your changes and run the tool. It will stage all diffs that are associated with the same S-expression, generate the commit message, and make the commit for each S-expression. Note that it probably doesn=E2=80=99t do the right thing when something oth= er than a package expression is modified (e.g. a copyright line). --=20 Ricardo --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=committer.scm Content-Transfer-Encoding: base64 IyEvcnVuL2N1cnJlbnQtc3lzdGVtL3Byb2ZpbGUvYmluL2d1aWxlIFwKLS1uby1hdXRvLWNvbXBp bGUgLXMKISMKCihpbXBvcnQgKHN4bWwgeHBhdGgpCiAgICAgICAgKHNyZmkgc3JmaS0xKQogICAg ICAgIChzcmZpIHNyZmktOSkKICAgICAgICAoaWNlLTkgZm9ybWF0KQogICAgICAgIChpY2UtOSBw b3BlbikKICAgICAgICAoaWNlLTkgbWF0Y2gpCiAgICAgICAgKGljZS05IHJkZWxpbSkKICAgICAg ICAoaWNlLTkgdGV4dHVhbC1wb3J0cykpCgooZGVmaW5lIChyZWFkLWV4Y3Vyc2lvbiBwb3J0KQog ICJSZWFkIGFuIGV4cHJlc3Npb24gZnJvbSBQT1JUIGFuZCByZXNldCB0aGUgcG9ydCBwb3NpdGlv biBiZWZvcmUgcmV0dXJuaW5nCnRoZSBleHByZXNzaW9uLiIKICAobGV0ICgoc3RhcnQgKGZ0ZWxs IHBvcnQpKQogICAgICAgIChyZXN1bHQgKHJlYWQgcG9ydCkpKQogICAgKHNlZWsgcG9ydCBzdGFy dCBTRUVLX1NFVCkKICAgIHJlc3VsdCkpCgooZGVmaW5lIChzdXJyb3VuZGluZy1zZXhwIHBvcnQg bGluZS1ubykKICAiUmV0dXJuIHRoZSB0b3AtbGV2ZWwgUy1leHByZXNzaW9uIHN1cnJvdW5kaW5n IHRoZSBjaGFuZ2UgYXQgbGluZSBudW1iZXIKTElORS1OTyBpbiBQT1JULiIKICAobGV0IGxvb3Ag KChpICgxLSBsaW5lLW5vKSkKICAgICAgICAgICAgIChsYXN0LXRvcC1sZXZlbC1zZXhwICNmKSkK ICAgIChpZiAoemVybz8gaSkKICAgICAgICBsYXN0LXRvcC1sZXZlbC1zZXhwCiAgICAgICAgKG1h dGNoIChwZWVrLWNoYXIgcG9ydCkKICAgICAgICAgICgjXCgKICAgICAgICAgICAobGV0ICgoc2V4 cCAocmVhZC1leGN1cnNpb24gcG9ydCkpKQogICAgICAgICAgICAgKHJlYWQtbGluZSBwb3J0KQog ICAgICAgICAgICAgKGxvb3AgKDEtIGkpIHNleHApKSkKICAgICAgICAgIChfCiAgICAgICAgICAg KHJlYWQtbGluZSBwb3J0KQogICAgICAgICAgIChsb29wICgxLSBpKSBsYXN0LXRvcC1sZXZlbC1z ZXhwKSkpKSkpCgooZGVmaW5lLXJlY29yZC10eXBlIDxodW5rPgogIChtYWtlLWh1bmsgZmlsZS1u YW1lCiAgICAgICAgICAgICBvbGQtbGluZS1udW1iZXIKICAgICAgICAgICAgIG5ldy1saW5lLW51 bWJlcgogICAgICAgICAgICAgZGlmZikKICBodW5rPwogIChmaWxlLW5hbWUgICAgICAgaHVuay1m aWxlLW5hbWUpCiAgOzsgTGluZSBudW1iZXIgYmVmb3JlIHRoZSBjaGFuZ2UKICAob2xkLWxpbmUt bnVtYmVyIGh1bmstb2xkLWxpbmUtbnVtYmVyKQogIDs7IExpbmUgbnVtYmVyIGFmdGVyIHRoZSBj aGFuZ2UKICAobmV3LWxpbmUtbnVtYmVyIGh1bmstbmV3LWxpbmUtbnVtYmVyKQogIDs7IFRoZSBm dWxsIGRpZmYgdG8gYmUgdXNlZCB3aXRoICJnaXQgYXBwbHkgLS1jYWNoZWQiCiAgKGRpZmYgaHVu ay1kaWZmKSkKCihkZWZpbmUqIChodW5rLT5wYXRjaCBodW5rICM6b3B0aW9uYWwgKHBvcnQgKGN1 cnJlbnQtb3V0cHV0LXBvcnQpKSkKICAobGV0ICgoZmlsZS1uYW1lIChodW5rLWZpbGUtbmFtZSBo dW5rKSkpCiAgICAoZm9ybWF0IHBvcnQKICAgICAgICAgICAgImRpZmYgLS1naXQgYS9+YSBiL35h fiUtLS0gYS9+YX4lKysrIGIvfmF+JX5hIgogICAgICAgICAgICBmaWxlLW5hbWUgZmlsZS1uYW1l IGZpbGUtbmFtZSBmaWxlLW5hbWUKICAgICAgICAgICAgKGh1bmstZGlmZiBodW5rKSkpKQoKKGRl ZmluZSAoZGlmZi1pbmZvKQogICJSZWFkIHRoZSBkaWZmIGFuZCByZXR1cm4gYSBsaXN0IG9mIDxo dW5rPiB2YWx1ZXMuIgogIChsZXQgKChwb3J0IChvcGVuLXBpcGUqIE9QRU5fUkVBRAogICAgICAg ICAgICAgICAgICAgICAgICAgICJnaXQiICJkaWZmIgogICAgICAgICAgICAgICAgICAgICAgICAg ICItLW5vLXByZWZpeCIKICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBEbyBub3QgaW5jbHVk ZSBhbnkgY29udGV4dCBsaW5lcy4gIFRoaXMgbWFrZXMgaXQKICAgICAgICAgICAgICAgICAgICAg ICAgICA7OyBlYXNpZXIgdG8gZmluZCB0aGUgUy1leHByZXNzaW9uIHN1cnJvdW5kaW5nIHRoZQog ICAgICAgICAgICAgICAgICAgICAgICAgIDs7IGNoYW5nZS4KICAgICAgICAgICAgICAgICAgICAg ICAgICAiLS11bmlmaWVkPTAiKSkpCiAgICAoZGVmaW5lIChleHRyYWN0LWxpbmUtbnVtYmVyIGxp bmUtdGFnKQogICAgICAoYWJzIChzdHJpbmctPm51bWJlcgogICAgICAgICAgICAoY2FyIChzdHJp bmctc3BsaXQgbGluZS10YWcgI1wsKSkpKSkKICAgIChkZWZpbmUgKHJlYWQtaHVuaykKICAgICAg KHJldmVyc2UKICAgICAgIChsZXQgbG9vcCAoKGxpbmVzICcoKSkpCiAgICAgICAgIChsZXQgKChs aW5lIChyZWFkLWxpbmUgcG9ydCAnY29uY2F0KSkpCiAgICAgICAgICAgKGNvbmQKICAgICAgICAg ICAgKChlb2Ytb2JqZWN0PyBsaW5lKSBsaW5lcykKICAgICAgICAgICAgKChvciAoc3RyaW5nLXBy ZWZpeD8gIkBAICIgbGluZSkKICAgICAgICAgICAgICAgICAoc3RyaW5nLXByZWZpeD8gImRpZmYg LS1naXQiIGxpbmUpKQogICAgICAgICAgICAgKHVuZ2V0LXN0cmluZyBwb3J0IGxpbmUpCiAgICAg ICAgICAgICBsaW5lcykKICAgICAgICAgICAgKGVsc2UgKGxvb3AgKGNvbnMgbGluZSBsaW5lcykp KSkpKSkpCiAgICAoZGVmaW5lIGluZm8KICAgICAgKGxldCBsb29wICgoYWNjICcoKSkgCiAgICAg ICAgICAgICAgICAgKGZpbGUtbmFtZSAjZikpCiAgICAgICAgKGxldCAoKGxpbmUgKHJlYWQtbGlu ZSBwb3J0KSkpCiAgICAgICAgICAoY29uZAogICAgICAgICAgICgoZW9mLW9iamVjdD8gbGluZSkg YWNjKQogICAgICAgICAgICgoc3RyaW5nLXByZWZpeD8gIi0tLSAiIGxpbmUpCiAgICAgICAgICAg IChtYXRjaCAoc3RyaW5nLXNwbGl0IGxpbmUgI1xzcGFjZSkKICAgICAgICAgICAgICAoKF8gZmls ZS1uYW1lKQogICAgICAgICAgICAgICAobG9vcCBhY2MgZmlsZS1uYW1lKSkpKQogICAgICAgICAg ICgoc3RyaW5nLXByZWZpeD8gIkBAICIgbGluZSkKICAgICAgICAgICAgKG1hdGNoIChzdHJpbmct c3BsaXQgbGluZSAjXHNwYWNlKQogICAgICAgICAgICAgICgoXyBvbGQtc3RhcnQgbmV3LXN0YXJ0 IC4gXykKICAgICAgICAgICAgICAgKGxvb3AgKGNvbnMgKG1ha2UtaHVuayBmaWxlLW5hbWUKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXh0cmFjdC1saW5lLW51bWJlciBv bGQtc3RhcnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4dHJhY3Qt bGluZS1udW1iZXIgbmV3LXN0YXJ0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChzdHJpbmctam9pbiAoY29ucyogbGluZSAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVhZC1odW5rKSkgIiIpKQogICAg ICAgICAgICAgICAgICAgICAgICAgICBhY2MpCiAgICAgICAgICAgICAgICAgICAgIGZpbGUtbmFt ZSkpKSkKICAgICAgICAgICAoZWxzZSAobG9vcCBhY2MgZmlsZS1uYW1lKSkpKSkpCiAgICAoY2xv c2UtcGlwZSBwb3J0KQogICAgaW5mbykpCgooZGVmaW5lIChvbGQtc2V4cCBodW5rKQogICJVc2lu ZyB0aGUgZGlmZiBpbmZvcm1hdGlvbiBpbiBIVU5LIHJldHVybiB0aGUgdW5tb2RpZmllZCBTLWV4 cHJlc3Npb24KY29ycmVzcG9uZGluZyB0byB0aGUgdG9wLWxldmVsIGRlZmluaXRpb24gY29udGFp bmluZyB0aGUgc3RhZ2VkIGNoYW5nZXMuIgogIDs7IFRPRE86IFdlIGNhbid0IHNlZWsgd2l0aCBh IHBpcGUgcG9ydC4uLgogIChsZXQqICgocG9ydCAob3Blbi1waXBlKiBPUEVOX1JFQUQKICAgICAg ICAgICAgICAgICAgICAgICAgICAgImdpdCIgInNob3ciIChzdHJpbmctYXBwZW5kICJIRUFEOiIK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICho dW5rLWZpbGUtbmFtZSBodW5rKSkpKQogICAgICAgICAoY29udGVudHMgKGdldC1zdHJpbmctYWxs IHBvcnQpKSkKICAgIChjbG9zZS1waXBlIHBvcnQpCiAgICAoY2FsbC13aXRoLWlucHV0LXN0cmlu ZyBjb250ZW50cwogICAgICAobGFtYmRhIChwb3J0KQogICAgICAgIChzdXJyb3VuZGluZy1zZXhw IHBvcnQgKGh1bmstb2xkLWxpbmUtbnVtYmVyIGh1bmspKSkpKSkKCihkZWZpbmUgKG5ldy1zZXhw IGh1bmspCiAgIlVzaW5nIHRoZSBkaWZmIGluZm9ybWF0aW9uIGluIEhVTksgcmV0dXJuIHRoZSBt b2RpZmllZCBTLWV4cHJlc3Npb24KY29ycmVzcG9uZGluZyB0byB0aGUgdG9wLWxldmVsIGRlZmlu aXRpb24gY29udGFpbmluZyB0aGUgc3RhZ2VkIGNoYW5nZXMuIgogIChjYWxsLXdpdGgtaW5wdXQt ZmlsZSAoaHVuay1maWxlLW5hbWUgaHVuaykKICAgIChsYW1iZGEgKHBvcnQpCiAgICAgIChzdXJy b3VuZGluZy1zZXhwIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgKGh1bmstbmV3LWxpbmUt bnVtYmVyIGh1bmspKSkpKQoKKGRlZmluZSogKGNvbW1pdC1tZXNzYWdlIGZpbGUtbmFtZSBvbGQg bmV3ICM6b3B0aW9uYWwgKHBvcnQgKGN1cnJlbnQtb3V0cHV0LXBvcnQpKSkKICAiUHJpbnQgQ2hh bmdlTG9nIGNvbW1pdCBtZXNzYWdlIGZvciBjaGFuZ2VzIGJldHdlZW4gT0xEIGFuZCBORVcuIgog IChkZWZpbmUgKGdldC12YWx1ZXMgZXhwciBmaWVsZCkKICAgIChtYXRjaCAoKHN4cGF0aCBgKC8v ICxmaWVsZCBxdWFzaXF1b3RlICopKSBleHByKQogICAgICAoKCkgJygpKQogICAgICAoKGZpcnN0 IC4gcmVzdCkKICAgICAgIChtYXAgY2FkYWRyIGZpcnN0KSkpKQogIChkZWZpbmUgKGxpc3RpZnkg aXRlbXMpCiAgICAobWF0Y2ggaXRlbXMKICAgICAgKChvbmUpIG9uZSkKICAgICAgKChvbmUgdHdv KQogICAgICAgKHN0cmluZy1hcHBlbmQgb25lICIgYW5kICIgdHdvKSkKICAgICAgKChvbmUgdHdv IC4gbW9yZSkKICAgICAgIChzdHJpbmctYXBwZW5kIChzdHJpbmctam9pbiAoZHJvcC1yaWdodCBp dGVtcyAxKSAiLCAiKQogICAgICAgICAgICAgICAgICAgICAgIiwgYW5kICIgKGZpcnN0ICh0YWtl LXJpZ2h0IGl0ZW1zIDEpKSkpKSkKICAoZGVmaW5lIHZhcmlhYmxlLW5hbWUKICAgIChzZWNvbmQg b2xkKSkKICAoZGVmaW5lIHZlcnNpb24KICAgIChhbmQ9PiAoKHN4cGF0aCAnKC8vIHZlcnNpb24g KmFueSopKSBuZXcpCiAgICAgICAgICAgZmlyc3QpKQogIChmb3JtYXQgcG9ydAogICAgICAgICAg ImdudTogfmE6IFVwZGF0ZSB0byB+YS5+JX4lKiB+YSAofmEpOiBVcGRhdGUgdG8gfmEufiUiCiAg ICAgICAgICB2YXJpYWJsZS1uYW1lIHZlcnNpb24gZmlsZS1uYW1lIHZhcmlhYmxlLW5hbWUgdmVy c2lvbikKICAoZm9yLWVhY2ggKGxhbWJkYSAoZmllbGQpCiAgICAgICAgICAgICAgKGxldCAoKG9s ZC12YWx1ZXMgKGdldC12YWx1ZXMgb2xkIGZpZWxkKSkKICAgICAgICAgICAgICAgICAgICAobmV3 LXZhbHVlcyAoZ2V0LXZhbHVlcyBuZXcgZmllbGQpKSkKICAgICAgICAgICAgICAgIChvciAoZXF1 YWw/IG9sZC12YWx1ZXMgbmV3LXZhbHVlcykKICAgICAgICAgICAgICAgICAgICAobGV0ICgocmVt b3ZlZCAobHNldC1kaWZmZXJlbmNlIGVxPyBvbGQtdmFsdWVzIG5ldy12YWx1ZXMpKQogICAgICAg ICAgICAgICAgICAgICAgICAgIChhZGRlZCAobHNldC1kaWZmZXJlbmNlIGVxPyBuZXctdmFsdWVz IG9sZC12YWx1ZXMpKSkKICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQgcG9ydAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiW35hXTogfmF+JSIgZmllbGQKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKG1hdGNoIChsaXN0IChtYXAgc3ltYm9sLT5zdHJpbmcgcmVtb3ZlZCkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXAgc3ltYm9sLT5z dHJpbmcgYWRkZWQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKCkgYWRkZWQp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQgI2YgIkFkZCB+YS4iCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3RpZnkgYWRkZWQpKSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHJlbW92ZWQgKCkpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQgI2YgIlJlbW92ZSB+YS4iCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3RpZnkgcmVtb3ZlZCkpKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgocmVtb3ZlZCBhZGRlZCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGZvcm1hdCAjZiAiUmVtb3ZlIH5hOyBhZGQgfmEuIgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0aWZ5IHJlbW92ZWQpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3RpZnkgYWRkZWQpKSkpKSkp KSkKICAgICAgICAgICAgJyhpbnB1dHMgcHJvcGFnYXRlZC1pbnB1dHMgbmF0aXZlLWlucHV0cykp KQoKKGRlZmluZSAoZ3JvdXAtaHVua3MtYnktc2V4cCBodW5rcykKICAiUmV0dXJuIGEgbGlzdCBv ZiBwYWlycyBhc3NvY2lhdGluZyBhbGwgaHVua3Mgd2l0aCB0aGUgUy1leHByZXNzaW9uIHRoZXkg YXJlCm1vZGlmeWluZy4iCiAgKGZvbGQgKGxhbWJkYSAoc2V4cCBodW5rIGFjYykKICAgICAgICAg IChtYXRjaCBhY2MKICAgICAgICAgICAgKCgocHJldmlvdXMtc2V4cCAuIGh1bmtzKSAuIHJlc3Qp CiAgICAgICAgICAgICAoaWYgKGVxdWFsPyBzZXhwIHByZXZpb3VzLXNleHApCiAgICAgICAgICAg ICAgICAgKGNvbnMgKGNvbnMgcHJldmlvdXMtc2V4cAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjb25zIGh1bmsgaHVua3MpKQogICAgICAgICAgICAgICAgICAgICAgIHJlc3QpCiAgICAg ICAgICAgICAgICAgKGNvbnMgKGNvbnMgc2V4cCAobGlzdCBodW5rKSkKICAgICAgICAgICAgICAg ICAgICAgICBhY2MpKSkKICAgICAgICAgICAgKF8KICAgICAgICAgICAgIChjb25zIChjb25zIHNl eHAgKGxpc3QgaHVuaykpCiAgICAgICAgICAgICAgICAgICBhY2MpKSkpCiAgICAgICAgJygpCiAg ICAgICAgKG1hcCBuZXctc2V4cCBodW5rcykKICAgICAgICBodW5rcykpCgooZGVmaW5lIChtYWlu IC4gYXJncykKICAobWF0Y2ggKGRpZmYtaW5mbykKICAgICgoKQogICAgIChkaXNwbGF5ICJOb3Ro aW5nIHRvIGJlIGRvbmUuIiAoY3VycmVudC1lcnJvci1wb3J0KSkpCiAgICAoaHVua3MKICAgICAo Zm9yLWVhY2ggKG1hdGNoLWxhbWJkYQogICAgICAgICAgICAgICAgICgobmV3IC4gaHVua3MpCiAg ICAgICAgICAgICAgICAgIChsZXQgKChvbGQgKG9sZC1zZXhwIChmaXJzdCBodW5rcykpKSkKICAg ICAgICAgICAgICAgICAgICAoZm9yLWVhY2ggKGxhbWJkYSAoaHVuaykKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAobGV0ICgocG9ydCAob3Blbi1waXBlKiBPUEVOX1dSSVRFCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdpdCIg ImFwcGx5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICItLWNhY2hlZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiLS11bmlkaWZmLXplcm8iKSkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoaHVuay0+cGF0Y2ggaHVuayBwb3J0KQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHVubGVzcyAoZXF2PyAwIChzdGF0dXM6ZXhpdC12YWwgKGNsb3NlLXBp cGUgcG9ydCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IgIkNh bm5vdCBhcHBseSIpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1bmtzKQogICAg ICAgICAgICAgICAgICAgIChsZXQgKChwb3J0IChvcGVuLXBpcGUqIE9QRU5fV1JJVEUgImdpdCIg ImNvbW1pdCIgIi1GIiAiLSIpKSkKICAgICAgICAgICAgICAgICAgICAgIChjb21taXQtbWVzc2Fn ZSAoaHVuay1maWxlLW5hbWUgKGZpcnN0IGh1bmtzKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvbGQgbmV3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcG9ydCkKICAgICAgICAgICAgICAgICAgICAgICh1bmxlc3MgKGVxdj8gMCAoc3RhdHVzOmV4 aXQtdmFsIChjbG9zZS1waXBlIHBvcnQpKSkKICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9y ICJDYW5ub3QgY29tbWl0IikpKSkpKQogICAgICAgICAgICAgICAoZ3JvdXAtaHVua3MtYnktc2V4 cCBodW5rcykpKSkpCgoobWFpbikK --=-=-=--