From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Mikael Djurfeldt Newsgroups: gmane.lisp.guile.user,gmane.lisp.guile.devel Subject: Keywords in GOOPS methods v3 Date: Mon, 25 Nov 2024 11:28:22 +0100 Message-ID: References: Reply-To: mikael@djurfeldt.com Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000d0e1fe0627ba319a" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="8544"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Jan Nieuwenhuizen , Tomas Volf <~@wolfsden.cz>, Maxime Devos , David Pirotte , Mikael Djurfeldt To: guile-user , guile-devel , =?UTF-8?Q?Ludovic_Court=C3=A8s?= , Andy Wingo Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Mon Nov 25 11:29:14 2024 Return-path: Envelope-to: guile-user@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1tFWLB-00024e-8V for guile-user@m.gmane-mx.org; Mon, 25 Nov 2024 11:29:13 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tFWKk-0002Xo-MZ; Mon, 25 Nov 2024 05:28:47 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tFWKf-0002XA-1R; Mon, 25 Nov 2024 05:28:43 -0500 Original-Received: from mail-vk1-f174.google.com ([209.85.221.174]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tFWKc-000382-3s; Mon, 25 Nov 2024 05:28:40 -0500 Original-Received: by mail-vk1-f174.google.com with SMTP id 71dfb90a1353d-515318b24adso239983e0c.2; Mon, 25 Nov 2024 02:28:34 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732530513; x=1733135313; h=cc:to:subject:message-id:date:from:reply-to:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=XtpDrOR77NBUiqTazi62XhOizAeivPFMuSxZK0MfkxA=; b=cMwFqOMXHkFM7KniRaMt6VCBBkhTCmd5dcI6yHMU+f2QNLiYu3V2pUE07BbTfMx1qr TPLMfkf3Wcd2vJb54tE0rE72CeB35CHgGIJasVerOMlSco3uH+1bvG5QHMotdOKmFct6 4C8YFnylczgl8Av0QxQJ9UnLUh1pbp/7XH0zcrXYjxQwiC342W3NNZZoEfUmDQkDDFAo UmIYcDDBmBFBShuHrRuG+iwhFD5l+AygHM0gOOklizqYupVX5FCL/RmJfB9Nu4IhpKl5 9UxPJwb1e7HOX+0wxFxgnBrnAcOO/QO3j6z+Oa92YO8ERRAc5wjcEbgsQGh7wmG5uOwL UHag== X-Forwarded-Encrypted: i=1; AJvYcCUn3jjgStJIXGexKNLfD46ldeHLNP57lO4Bv1Oj44TiuWStHToi0KrPCcSoiI9aQb6+u7h6wBAgCd5UPg==@gnu.org, AJvYcCXsJtEP4+jF/Yplbs94FqFWAueZ8KKg2//uXHkguP90hnozh3Rws3K4uZ1hZHXQ1Tq3KIkRxw==@gnu.org X-Gm-Message-State: AOJu0Yzn7gE+32lS3Wq++pt8LUGu6TYJIa4en9mxp71JD/RzsfNvNO5V RabtM18uUSuuGhBM4ZaHzQGhz9MI/QMg6+va6Cw5PUvmkIpDsi63a67fBzkt7v0MCdKcfo6H5i1 Kdc48zU0zVjKmHaDVnyQAzI5XZumksA== X-Gm-Gg: ASbGnctKYwrQm8wb4/iGxsBt+ctWXYSHBpJryzc8wwBFDcz9hdqnD+WH5s4IFaADNPX GkbEHJF9z0I0MoOED1k+g+VxEbN0dCQ6K X-Google-Smtp-Source: AGHT+IEQtzxyHYCasZKMlvx0yVvHCrk2GNGeq8ZAbhX1fwbVvgnIgBYmC+JnRlpKquSSOHZbro3opK3uPsLc8Q05F/0= X-Received: by 2002:a05:6102:5091:b0:4af:e15:1fad with SMTP id ada2fe7eead31-4af0e151fcdmr4657617137.25.1732530513429; Mon, 25 Nov 2024 02:28:33 -0800 (PST) In-Reply-To: Received-SPF: pass client-ip=209.85.221.174; envelope-from=mdjurfeldt@gmail.com; helo=mail-vk1-f174.google.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.93, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Original-Sender: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.lisp.guile.user:19924 gmane.lisp.guile.devel:22800 Archived-At: --000000000000d0e1fe0627ba319a Content-Type: text/plain; charset="UTF-8" This is the third attempt at introducing keyword aware methods in GOOPS. What is new in v3 is that keyword arguments and default parameters to keyword arguments are handled correctly when using (next-method). Now only those keyword arguments actually present in a call get forwarded to the next-method. I've also committed these changes to https://github.com/mdjurfeldt/guile/tree/goops-keyword Best regards, Mikael --000000000000d0e1fe0627ba319a Content-Type: text/x-patch; charset="US-ASCII"; name="goops-kw-patch-3.patch" Content-Disposition: attachment; filename="goops-kw-patch-3.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m3wvuhgm0 ZGlmZiAtLWdpdCBhL21vZHVsZS9vb3AvZ29vcHMuc2NtIGIvbW9kdWxlL29vcC9nb29wcy5zY20K aW5kZXggOGVkNjg2OTRjLi4xMjY0NGViYTUgMTAwNjQ0Ci0tLSBhL21vZHVsZS9vb3AvZ29vcHMu c2NtCisrKyBiL21vZHVsZS9vb3AvZ29vcHMuc2NtCkBAIC0zMyw5ICszMywxMCBAQAogICAjOnVz ZS1tb2R1bGUgKChsYW5ndWFnZSB0cmVlLWlsIHByaW1pdGl2ZXMpCiAgICAgICAgICAgICAgICAg OnNlbGVjdCAoYWRkLWludGVyZXN0aW5nLXByaW1pdGl2ZSEpKQogICAjOmV4cG9ydC1zeW50YXgg KGRlZmluZS1jbGFzcyBjbGFzcyBzdGFuZGFyZC1kZWZpbmUtY2xhc3MKLSAgICAgICAgICAgICAg ICAgICAgZGVmaW5lLWdlbmVyaWMgZGVmaW5lLWFjY2Vzc29yIGRlZmluZS1tZXRob2QKKyAgICAg ICAgICAgICAgICAgICAgZGVmaW5lLWdlbmVyaWMgZGVmaW5lLWFjY2Vzc29yCisgICAgICAgICAg ICAgICAgICAgIGRlZmluZS1tZXRob2QgZGVmaW5lLW1ldGhvZCoKICAgICAgICAgICAgICAgICAg ICAgZGVmaW5lLWV4dGVuZGVkLWdlbmVyaWMgZGVmaW5lLWV4dGVuZGVkLWdlbmVyaWNzCi0gICAg ICAgICAgICAgICAgICAgIG1ldGhvZCkKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kIG1ldGhv ZCopCiAgICM6ZXhwb3J0ICggOzsgVGhlIHJvb3Qgb2YgZXZlcnl0aGluZy4KICAgICAgICAgICAg IDx0b3A+CiAgICAgICAgICAgICA8Y2xhc3M+IDxvYmplY3Q+CkBAIC0yMDI0LDggKzIwMjUsNyBA QCBmdW5jdGlvbi4iCiAgICAgICAgICAgIChlbHNlCiAgICAgICAgICAgICAoYW5kIChtZW1xIChj YXIgc3BlY3MpIChjbGFzcy1wcmVjZWRlbmNlLWxpc3QgKGNhciB0eXBlcykpKQogICAgICAgICAg ICAgICAgICAobHAgKGNkciBzcGVjcykgKGNkciB0eXBlcykpKSkpKSkpKSkKLSAgKGxldCAoKG4g KGxlbmd0aCBhcmdzKSkKLSAgICAgICAgKHR5cGVzIChtYXAgY2xhc3Mtb2YgYXJncykpKQorICAo bGV0ICgodHlwZXMgKG1hcCBjbGFzcy1vZiBhcmdzKSkpCiAgICAgKGxldCBscCAoKG1ldGhvZHMg KGdlbmVyaWMtZnVuY3Rpb24tbWV0aG9kcyBnZikpCiAgICAgICAgICAgICAgKGFwcGxpY2FibGUg JygpKSkKICAgICAgIChpZiAobnVsbD8gbWV0aG9kcykKQEAgLTIwNDIsNiArMjA0MiwzNiBAQCBm dW5jdGlvbi4iCiAoZGVmaW5lICh0b3BsZXZlbC1kZWZpbmUhIG5hbWUgdmFsKQogICAobW9kdWxl LWRlZmluZSEgKGN1cnJlbnQtbW9kdWxlKSBuYW1lIHZhbCkpCiAKKzs7OworOzs7IFRoZSBHT09Q UyBBUEkgd291bGQgaGF2ZSBiZWVuIHNpbXBsZXIgYnkgaW50cm9kdWNpbmcga2V5d29yZCBmb3Jt YWxzCis7OzsgaW4gZGVmaW5lLW1ldGhvZCBpdHNlbGYsIGJ1dCBpbiBvcmRlciB0byBhbGlnbiB3 aXRoIGxhbWJkYSogYW5kCis7OzsgZGVmaW5lKiwgd2UgaW50cm9kdWNlIG1ldGhvZCogYW5kIGRl ZmluZS1tZXRob2QqIGluIHBhcmFsbGVsIHRvCis7OzsgbWV0aG9kIGFuZCBkZWZpbmUtbWV0aG9k LgorOzs7Cis7OzsgVGhlcmUgaXMgc29tZSBjb2RlIHJlcGV0aXRpb24gaGVyZS4gVGhlIG1vdGl2 YXRpb24gZm9yIHRoYXQgaXMgdG8KKzs7OyBwYXkgc29tZSBoZXJlIGluIG9yZGVyIHRvIHNwZWVk IHVwIGxvYWRpbmcgYW5kIGNvbXBpbGF0aW9uIG9mIGxhcmdlcgorOzs7IGNodW5rcyBvZiBHT09Q UyBjb2RlIGFzIHdlbGwgYXMgdG8gbWFrZSBzdXJlIHRoYXQgbWV0aG9kKjpzIGFyZSBhcworOzs7 IGVmZmljaWVudCBhcyBjYW4gYmUuCis7OzsKKzs7OyBBIG1vcmUgZWxlZ2FudCBzb2x1dGlvbiB3 b3VsZCBoYXZlIGJlZW4gdG8gdXNlIHNvbWV0aGluZyBha2luIHRvCis7OzsgTWFyayBILiBXZWF2 ZXJzIG1hY3JvOgorOzs7Cis7OzsgKGRlZmluZS1zeW50YXggZGVmaW5lLW1ldGhvZCoKKzs7OyAg IChsYW1iZGEgKHgpCis7OzsgICAgIChzeW50YXgtY2FzZSB4ICgpCis7OzsgICAgICAgKChfIChn ZW5lcmljIGFyZy1zcGVjIC4uLiAuIHRhaWwpIGJvZHkgLi4uKQorOzs7ICAgICAgICAobGV0LXZh bHVlcyAoKChyZXF1aXJlZC1hcmctc3BlY3Mgb3RoZXItYXJnLXNwZWNzKQorOzs7ICAgICAgICAg ICAgICAgICAgICAgIChicmVhayAoY29tcG9zZSBrZXl3b3JkPyBzeW50YXgtPmRhdHVtKQorOzs7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjJyhhcmctc3BlYyAuLi4pKSkpCis7OzsgICAg ICAgICAgI2AoZGVmaW5lLW1ldGhvZCAoZ2VuZXJpYyAjLEByZXF1aXJlZC1hcmctc3BlY3MgLiBy ZXN0KQorOzs7ICAgICAgICAgICAgICAoYXBwbHkgKGxhbWJkYSogKCMsQG90aGVyLWFyZy1zcGVj cyAuIHRhaWwpCis7OzsgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgLi4uKQorOzs7ICAgICAg ICAgICAgICAgICAgICAgcmVzdCkpKSkpKSkKKzs7OworOzs7IFdpdGggdGhlIGN1cnJlbnQgc3Rh dGUgb2YgdGhlIGNvbXBpbGVyLCB0aGlzIHJlc3VsdHMgaW4gc2xvd2VyIGNvZGUKKzs7OyB0aGFu IHRoZSBpbXBsZW1lbnRhdGlvbiBiZWxvdyBzaW5jZSB0aGUgYXBwbHkgY2FsbCBpc24ndCBlbGlt aW5hdGVkLgorOzs7CisKIChkZWZpbmUtc3ludGF4IGRlZmluZS1tZXRob2QKICAgKHN5bnRheC1y dWxlcyAoc2V0dGVyKQogICAgICgoXyAoKHNldHRlciBuYW1lKSAuIGFyZ3MpIGJvZHkgLi4uKQpA QCAtMjA2NCwxMCArMjA5NCw3NiBAQCBmdW5jdGlvbi4iCiAgICAgICAgICAodG9wbGV2ZWwtZGVm aW5lISAnbmFtZSAobWFrZSA8Z2VuZXJpYz4gIzpuYW1lICduYW1lKSkpCiAgICAgICAgKGFkZC1t ZXRob2QhIG5hbWUgKG1ldGhvZCBhcmdzIGJvZHkgLi4uKSkpKSkpCiAKLShkZWZpbmUtc3ludGF4 IG1ldGhvZAotICAobGFtYmRhICh4KQotICAgIChkZWZpbmUgKHBhcnNlLWFyZ3MgYXJncykKLSAg ICAgIChsZXQgbHAgKChscyBhcmdzKSAoZm9ybWFscyAnKCkpIChzcGVjaWFsaXplcnMgJygpKSkK KyhkZWZpbmUtc3ludGF4IGRlZmluZS1tZXRob2QqCisgIChzeW50YXgtcnVsZXMgKHNldHRlcikK KyAgICAoKF8gKChzZXR0ZXIgbmFtZSkgLiBhcmdzKSBib2R5IC4uLikKKyAgICAgKGJlZ2luCisg ICAgICAgKHdoZW4gKG9yIChub3QgKGRlZmluZWQ/ICduYW1lKSkKKyAgICAgICAgICAgICAgICAg KG5vdCAoaXMtYT8gbmFtZSA8YWNjZXNzb3I+KSkpCisgICAgICAgICAodG9wbGV2ZWwtZGVmaW5l ISAnbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuc3VyZS1hY2Nlc3NvcgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoZGVmaW5lZD8gJ25hbWUpIG5hbWUgI2YpICdu YW1lKSkpCisgICAgICAgKGFkZC1tZXRob2QhIChzZXR0ZXIgbmFtZSkgKG1ldGhvZCogYXJncyBi b2R5IC4uLikpKSkKKyAgICAoKF8gKG5hbWUgLiBhcmdzKSBib2R5IC4uLikKKyAgICAgKGJlZ2lu CisgICAgICAgKHdoZW4gKG9yIChub3QgKGRlZmluZWQ/ICduYW1lKSkKKyAgICAgICAgICAgICAg ICAgKG5vdCBuYW1lKSkKKyAgICAgICAgICh0b3BsZXZlbC1kZWZpbmUhICduYW1lIChtYWtlIDxn ZW5lcmljPiAjOm5hbWUgJ25hbWUpKSkKKyAgICAgICAoYWRkLW1ldGhvZCEgbmFtZSAobWV0aG9k KiBhcmdzIGJvZHkgLi4uKSkpKSkpCisKKzs7OyBUaGlzIHNlY3Rpb24gb2YgaGVscGVycyBpcyB1 c2VkIGJ5IGJvdGggdGhlIG1ldGhvZCBhbmQgbWV0aG9kKiBzeW50YXgKKzs7OworKGV2YWwtd2hl biAoZXhwYW5kIGxvYWQgZXZhbCkKKworICAgIDs7IHBhcnNlLWZvcm1hbHMgTUVUSE9ELUZPUk1B TFMKKyAgICA7OworICAgIDs7IHJldHVybiAoRk9STUFMUyBTUEVDSUFMSVpFUlMgS0VZV09SRC1G T1JNQUxTKQorICAgIDs7CisgICAgOzsgRk9STUFMUyBpcyB0aGUgcG9zc2libHkgaW1wcm9wZXIg bGlzdCBvZiBzcGVjaWFsaXphYmxlIGZvcm1hbHMuCisgICAgOzsKKyAgICA7OyBTUEVDSUFMSVpF UlMgaXMgYSBwcm9wZXIgbGlzdCBvZiB0aGUgY29ycmVzcG9uZGluZyBzcGVjaWFsaXplcnMuCisg ICAgOzsgSXRzIGxhc3QgZWxlbWVudCBjb3JyZXNwb25kcyB0byB0aGUgY2RyIG9mIHRoZSBsYXN0 IGVsZW1lbnQgaW4KKyAgICA7OyBNRVRIT0QtRk9STUFMUyBzdWNoIHRoYXQgdGhlIHBvc3NpYmx5 IGltcHJvcGVyIGxpc3QgY29ycmVzcG9uZGluZworICAgIDs7IHRvIEZPUk1BTFMgY2FuIGJlIG9i dGFpbmVkIGJ5IGFwcGx5aW5nIGNvbnMqIHRvIFNQRUNJQUxJWkVSUy4KKyAgICA7OyBUaGUgcmVh c29uIGZvciBoYW5kbGluZyBpdCBsaWtlIHRoaXMgaXMgdGhhdCB0aGUgc3BlY2lhbGl6ZXJzIGFy ZQorICAgIDs7IGVhY2ggZXZhbHVhdGVkIHRvIHRoZWlyIHZhbHVlcyBhbmQgdGhlcmVmb3JlICpt dXN0KiBiZSBwcm92aWRlZAorICAgIDs7IGJ5IGEgY29ucyogaW4gdGhlIChtYWtlIDxtZXRob2Q+ IC4uLikgZXhwcmVzc2lvbi4KKyAgICA7OworICAgIDs7IEtFWVdPUkRfRk9STUFMUyBpcyB0aGUg cGFydCBvZiBNRVRIT0QtRk9STUFMUyB3aGljaCBzdGFydHMgd2l0aCBhCisgICAgOzsga2V5d29y ZCBhbmQgY29ycmVzcG9uZHMgdG8gdGhlIGtleXdvcmQtc3ludGF4IG9mIGxhbWJkYSouIFRoZXNl CisgICAgOzsgYXJlIG5vdCBzcGVjaWFsaXphYmxlICh3aGljaCBhbHNvIGNvcnJlc3BvbmRzIHRv IENMT1MKKyAgICA7OyBmdW5jdGlvbmFsaXR5KS4KKyAgICA7OworICAgIChkZWZpbmUgKHBhcnNl LWtleXdvcmQtZm9ybWFscyBtZXRob2QtZm9ybWFscykKKyAgICAgIChsZXQgbHAgKChscyBtZXRo b2QtZm9ybWFscykgKGZvcm1hbHMgJygpKSAoc3BlY2lhbGl6ZXJzICcoKSkpCisgICAgICAgIChz eW50YXgtY2FzZSBscyAoKQorICAgICAgICAgICgoKGYgcykgLiByZXN0KQorICAgICAgICAgICAo YW5kIChpZGVudGlmaWVyPyAjJ2YpIChpZGVudGlmaWVyPyAjJ3MpKQorICAgICAgICAgICAobHAg IydyZXN0CisgICAgICAgICAgICAgICAoY29ucyAjJ2YgZm9ybWFscykKKyAgICAgICAgICAgICAg IChjb25zICMncyBzcGVjaWFsaXplcnMpKSkKKyAgICAgICAgICAoKGYgLiByZXN0KQorICAgICAg ICAgICAoaWRlbnRpZmllcj8gIydmKQorICAgICAgICAgICAobHAgIydyZXN0CisgICAgICAgICAg ICAgICAoY29ucyAjJ2YgZm9ybWFscykKKyAgICAgICAgICAgICAgIChjb25zICMnPHRvcD4gc3Bl Y2lhbGl6ZXJzKSkpCisgICAgICAgICAgKChmIC4gcmVzdCkKKyAgICAgICAgICAgKGtleXdvcmQ/ IChzeW50YXgtPmRhdHVtICMnZikpCisgICAgICAgICAgIChsaXN0IChyZXZlcnNlIGZvcm1hbHMp CisgICAgICAgICAgICAgICAgIChyZXZlcnNlIChjb25zICMnPHRvcD4gc3BlY2lhbGl6ZXJzKSkg O3RvIGJlIGNvbnMqOmVkCisgICAgICAgICAgICAgICAgIChjb25zICMnZiAjJ3Jlc3QpKSkKKyAg ICAgICAgICAoKCkKKyAgICAgICAgICAgKGxpc3QgKHJldmVyc2UgZm9ybWFscykKKyAgICAgICAg ICAgICAgICAgKHJldmVyc2UgKGNvbnMgIycnKCkgc3BlY2lhbGl6ZXJzKSkKKyAgICAgICAgICAg ICAgICAgJygpKSkgICAgICAgICAgICAgICAgICA7eWVzLCBub3QgIycnKCk7IHVzZWQgaW4gdGVz dHMKKyAgICAgICAgICAodGFpbAorICAgICAgICAgICAoaWRlbnRpZmllcj8gIyd0YWlsKQorICAg ICAgICAgICAobGlzdCAoYXBwZW5kIChyZXZlcnNlIGZvcm1hbHMpICMndGFpbCkKKyAgICAgICAg ICAgICAgICAgKHJldmVyc2UgKGNvbnMgIyc8dG9wPiBzcGVjaWFsaXplcnMpKQorICAgICAgICAg ICAgICAgICAnKCkpKSkpKQorCisgICAgKGRlZmluZSAocGFyc2UtZm9ybWFscyBtZXRob2QtZm9y bWFscykKKyAgICAgIChsZXQgbHAgKChscyBtZXRob2QtZm9ybWFscykgKGZvcm1hbHMgJygpKSAo c3BlY2lhbGl6ZXJzICcoKSkpCiAgICAgICAgIChzeW50YXgtY2FzZSBscyAoKQogICAgICAgICAg ICgoKGYgcykgLiByZXN0KQogICAgICAgICAgICAoYW5kIChpZGVudGlmaWVyPyAjJ2YpIChpZGVu dGlmaWVyPyAjJ3MpKQpAQCAtMjA5OCw0MyArMjE5NCwxMzUgQEAgZnVuY3Rpb24uIgogICAgICAg ICAgICAoYW5kIChmcmVlLWlkZW50aWZpZXI9PyAjJ3ggaWQpIGlkKSkpCiAgICAgICAgIChfICNm KSkpCiAKLSAgICAoZGVmaW5lIChjb21wdXRlLXByb2NlZHVyZSBmb3JtYWxzIGJvZHkpCisgICAg KGRlZmluZSAoY29tcHV0ZS1wcm9jZWR1cmUgZm9ybWFscyBrZXl3b3JkLWZvcm1hbHMgYm9keSkK ICAgICAgIChzeW50YXgtY2FzZSBib2R5ICgpCiAgICAgICAgICgoYm9keTAgLi4uKQotICAgICAg ICAgKHdpdGgtc3ludGF4ICgoZm9ybWFscyBmb3JtYWxzKSkKLSAgICAgICAgICAgIycobGFtYmRh IGZvcm1hbHMgYm9keTAgLi4uKSkpKSkKKyAgICAgICAgIChpZiAobnVsbD8ga2V5d29yZC1mb3Jt YWxzKQorICAgICAgICAgICAgICh3aXRoLXN5bnRheCAoKGZvcm1hbHMgZm9ybWFscykpCisgICAg ICAgICAgICAgICAjJyhsYW1iZGEgZm9ybWFscyBib2R5MCAuLi4pKQorICAgICAgICAgICAgIChs ZXQgKChmb3JtYWxzIChhcHBlbmQgZm9ybWFscyBrZXl3b3JkLWZvcm1hbHMpKSkKKyAgICAgICAg ICAgICAgICh3aXRoLXN5bnRheCAoKGZvcm1hbHMgZm9ybWFscykpCisgICAgICAgICAgICAgICAg ICMnKGxhbWJkYSogZm9ybWFscyBib2R5MCAuLi4pKSkpKSkpCisKKyAgICA7OyAtPmZvcm1hbC1p ZHMgRk9STUFMUworICAgIDs7CisgICAgOzsgY29udmVydCBGT1JNQUxTIGludG8gZm9ybWFsLWlk cyBmb3JtYXQsIHdoaWNoIGlzIGEgY2VsbCB3aGVyZSB0aGUKKyAgICA7OyBjYXIgaXMgdGhlIGxp c3Qgb2YgY2FyOnMgaW4gRk9STUFMUyBhbmQgdGhlIGNkciBpcyB0aGUgY2RyIG9mIHRoZQorICAg IDs7IGxhc3QgY2VsbCBpbiBGT1JNQUxTLCBpLmUuIHRoZSBmaW5hbCB0YWlsLgorICAgIDs7Cisg ICAgOzsgVGhlIG1vdGl2YXRpb24gZm9yIHRoaXMgZm9ybWF0IGlzIHRvIGVhc2lseSBkZXRlcm1p bmUgaWYgRk9STUFMUworICAgIDs7IGlzIGltcHJvcGVyIG9yIG5vdCBpbiBvcmRlciB0byBnZW5l cmF0ZSB0aGUgY29ycmVzcG9uZGluZworICAgIDs7IG5leHQtbWV0aG9kIGNhbGwuCisgICAgOzsK KyAgICAoZGVmaW5lICgtPmZvcm1hbC1pZHMgZm9ybWFscykKKyAgICAgIChsZXQgbHAgKChscyBm b3JtYWxzKSAob3V0ICcoKSkpCisgICAgICAgIChzeW50YXgtY2FzZSBscyAoKQorICAgICAgICAg ICgoeCAuIHhzKSAobHAgIyd4cyAoY29ucyAjJ3ggb3V0KSkpCisgICAgICAgICAgKCgpICAgICAg IChjb25zIChyZXZlcnNlIG91dCkgJygpKSkKKyAgICAgICAgICAodGFpbCAgICAgKGNvbnMgKHJl dmVyc2Ugb3V0KSAjJ3RhaWwpKSkpKQorCisgICAgOzsgY29tcHV0ZS1rZXl3b3JkLWZvcm1hbC1p ZHMgRk9STUFMUyBLRVlXT1JELUZPUk1BTFMKKyAgICA7OworICAgIDs7IFRoZSBtYWluIHB1cnBv c2Ugb2YgdGhpcyBiZWFzdCBpcyB0byBjb21wdXRlIHRoZSBhcmd1bWVudCBsaXN0CisgICAgOzsg Zm9yIHRoZSBhY3R1YWwgbmV4dC1tZXRob2QgY2FsbCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVz ZXIgY2FsbHMKKyAgICA7OyAobmV4dC1tZXRob2QpLiBJdCBpcyBpbnZva2VkIGluIHRoZSBjYXNl IHdoZXJlIHdlIGhhdmUga2V5d29yZAorICAgIDs7IGZvcm1hbHMuIEhlcmUgd2UgaGF2ZSB0byB0 cmVhdCBrZXl3b3JkIGFyZ3VtZW50cyBpbiBhIHNwZWNpYWwgd2F5CisgICAgOzsgc2luY2Ugd2Us IHNpbWlsYXIgdG8gQ0xPUywgb25seSB3YW50IHRvIHBhc3Mgb24gdGhlIGtleXdvcmQKKyAgICA7 OyBhcmd1bWVudHMgdGhhdCB3ZXJlIHByZXNlbnQgaW4gdGhlIGNhbGwuIFdlIGNhcHR1cmUgdGhv c2UgdXNpbmcKKyAgICA7OyB0aGUgcmVzdCBhcmd1bWVudC4gSWYgbm90IHByZXNlbnQsIHdlIGlu dHJvZHVjZSBhIHJlc3QgZm9ybWFsLgorICAgIDs7CisgICAgOzsgRk9STUFMUyBpcyB0aGUgbm9u LWtleXdvcmQgcGFydCBvZiB0aGUgZm9ybWFsIGFyZ3VtZW50cy4KKyAgICA7OyBLRVlXT1JELUZP Uk1BTFMgaXMgdGhlIHBhcnQgb2YgdGhlIGZvcm1hbCBhcmd1bWVudHMgZnJvbSB0aGUKKyAgICA7 OyBmaXJzdCBrZXl3b3JkLgorICAgIDs7CisgICAgOzsgcmV0dXJuIHRocmVlIHZhbHVlczoKKyAg ICA7OworICAgIDs7IDEuICMnbGFtYmRhCisgICAgOzsgMi4gdGhlIGNvbXBsZXRlIGZvcm1hbHMg bGlzdAorICAgIDs7IDMuIHRoZSBhcmd1bWVudCBsaXN0IGZvciBuZXh0LW1ldGhvZCBpbiBmb3Jt YWxzLWlkcyBmb3JtYXQgYXMKKyAgICA7OyAgICBkZXNjcmliZWQgYWJvdmUgKHByb3BlciBsaXN0 IGluIENBUiwgdGFpbCBpbiBDRFIpCisgICAgOzsKKyAgICAoZGVmaW5lIChjb21wdXRlLWtleXdv cmQtZm9ybWFsLWlkcyBmb3JtYWxzIGtleXdvcmQtZm9ybWFscykKKyAgICAgIChkZWZpbmUgKHJl c3VsdCBmb3JtYWxzIGZvcm1hbC1pZHMpCisgICAgICAgICh2YWx1ZXMgIydsYW1iZGEqIGZvcm1h bHMgZm9ybWFsLWlkcykpCisKKyAgICAgIChkZWZpbmUgKGxwLWtleSBscyBmb3JtYWxzIGZvcm1h bC1pZHMpCisgICAgICAgIChzeW50YXgtY2FzZSBscyAoKQorICAgICAgICAgICgoIzpyZXN0IGYp CisgICAgICAgICAgIChpZGVudGlmaWVyPyAjJ2YpCisgICAgICAgICAgIChyZXN1bHQgKGFwcGVu ZCAocmV2ZXJzZSBmb3JtYWxzKSAjJ2YpCisgICAgICAgICAgICAgICAgICAgKGNvbnMgKHJldmVy c2UgZm9ybWFsLWlkcykgIydmKSkpCisgICAgICAgICAgKCgpCisgICAgICAgICAgIDs7IE5vIHJl c3QgZm9ybWFsIGlzIHByZXNlbnQsIHNvIHdlIG5lZWQgdG8gaW50cm9kdWNlIG9uZS4KKyAgICAg ICAgICAgKGxldCAoKHJlc3QtZm9ybWFsIChjYXIgKGdlbmVyYXRlLXRlbXBvcmFyaWVzICcocmVz dCkpKSkpCisgICAgICAgICAgICAgKHJlc3VsdCAoYXBwZW5kIChyZXZlcnNlIGZvcm1hbHMpIHJl c3QtZm9ybWFsKQorICAgICAgICAgICAgICAgICAgICAgKGNvbnMgKHJldmVyc2UgZm9ybWFsLWlk cykgcmVzdC1mb3JtYWwpKSkpCisgICAgICAgICAgKChmIC4gcmVzdCkKKyAgICAgICAgICAgKGxw LWtleSAjJ3Jlc3QKKyAgICAgICAgICAgICAgICAgICAoY29ucyAjJ2YgZm9ybWFscykgICA7a2Vl cAorICAgICAgICAgICAgICAgICAgIGZvcm1hbC1pZHMpKSAgICAgICAgIDtmaWx0ZXIgYXdheQor ICAgICAgICAgICh0YWlsCisgICAgICAgICAgIChyZXN1bHQgKGFwcGVuZCAocmV2ZXJzZSBmb3Jt YWxzKSAjJ3RhaWwpCisgICAgICAgICAgICAgICAgICAgKGNvbnMgKHJldmVyc2UgZm9ybWFsLWlk cykgIyd0YWlsKSkpKSkKIAotICAgIChkZWZpbmUgKC0+cHJvcGVyIGFyZ3MpCi0gICAgICAobGV0 IGxwICgobHMgYXJncykgKG91dCAnKCkpKQorICAgICAgKGxldCAoKHJldmVyc2VkLWZvcm1hbHMg KHJldmVyc2UgZm9ybWFscykpKQorICAgICAgICAobGV0IGxwICgobHMga2V5d29yZC1mb3JtYWxz KQorICAgICAgICAgICAgICAgICAoZm9ybWFscyByZXZlcnNlZC1mb3JtYWxzKQorICAgICAgICAg ICAgICAgICAoZm9ybWFsLWlkcyByZXZlcnNlZC1mb3JtYWxzKSkKICAgICAgICAgKHN5bnRheC1j YXNlIGxzICgpCi0gICAgICAgICAgKCh4IC4geHMpICAgICAgICAobHAgIyd4cyAoY29ucyAjJ3gg b3V0KSkpCi0gICAgICAgICAgKCgpICAgICAgICAgICAgICAocmV2ZXJzZSBvdXQpKQotICAgICAg ICAgICh0YWlsICAgICAgICAgICAgKHJldmVyc2UgKGNvbnMgIyd0YWlsIG91dCkpKSkpKQorICAg ICAgICAgICgoKGYgdmFsKSAuIHJlc3QpCisgICAgICAgICAgIChscCAjJ3Jlc3QgKGNvbnMgIyco ZiB2YWwpIGZvcm1hbHMpIChjb25zICMnZiBmb3JtYWwtaWRzKSkpCisgICAgICAgICAgKCgjOm9w dGlvbmFsIC4gcmVzdCkKKyAgICAgICAgICAgKGxwICMncmVzdCAoY29ucyAjOm9wdGlvbmFsIGZv cm1hbHMpIGZvcm1hbC1pZHMpKQorICAgICAgICAgICgoIzprZXkgLiByZXN0KQorICAgICAgICAg ICAobHAta2V5ICMncmVzdCAoY29ucyAjOmtleSBmb3JtYWxzKSBmb3JtYWwtaWRzKSkKKyAgICAg ICAgICAoKCM6cmVzdCBmKQorICAgICAgICAgICAoaWRlbnRpZmllcj8gIydmKQorICAgICAgICAg ICAocmVzdWx0IChhcHBlbmQgKHJldmVyc2UgZm9ybWFscykgIydmKQorICAgICAgICAgICAgICAg ICAgIChjb25zIChyZXZlcnNlIGZvcm1hbC1pZHMpICMnZikpKQorICAgICAgICAgICgoZiAuIHJl c3QpCisgICAgICAgICAgIChscCAjJ3Jlc3QgKGNvbnMgIydmIGZvcm1hbHMpIChjb25zICMnZiBm b3JtYWwtaWRzKSkpCisgICAgICAgICAgKCgpCisgICAgICAgICAgIChyZXN1bHQgKHJldmVyc2Ug Zm9ybWFscykgKGNvbnMgKHJldmVyc2UgZm9ybWFsLWlkcykgJygpKSkpCisgICAgICAgICAgKHRh aWwKKyAgICAgICAgICAgKHJlc3VsdCAoYXBwZW5kIChyZXZlcnNlIGZvcm1hbHMpICMndGFpbCkK KyAgICAgICAgICAgICAgICAgICAoY29ucyAocmV2ZXJzZSBmb3JtYWwtaWRzKSAjJ3RhaWwpKSkp KSkpCiAKLSAgICAoZGVmaW5lIChjb21wdXRlLW1ha2UtcHJvY2VkdXJlIGZvcm1hbHMgYm9keSBu ZXh0LW1ldGhvZCkKKyAgICAoZGVmaW5lIChjb21wdXRlLW1ha2UtcHJvY2VkdXJlIGZvcm1hbHMg a2V5d29yZC1mb3JtYWxzIGJvZHkgbmV4dC1tZXRob2QpCiAgICAgICAoc3ludGF4LWNhc2UgYm9k eSAoKQogICAgICAgICAoKGJvZHkgLi4uKQotICAgICAgICAgKHdpdGgtc3ludGF4ICgobmV4dC1t ZXRob2QgbmV4dC1tZXRob2QpKQotICAgICAgICAgICAoc3ludGF4LWNhc2UgZm9ybWFscyAoKQot ICAgICAgICAgICAgICgoZm9ybWFsIC4uLikKLSAgICAgICAgICAgICAgIycobGFtYmRhIChyZWFs LW5leHQtbWV0aG9kKQotICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoZm9ybWFsIC4uLikKLSAg ICAgICAgICAgICAgICAgICAgKGxldCAoKG5leHQtbWV0aG9kIChsYW1iZGEgYXJncwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKG51bGw/IGFyZ3MpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVhbC1uZXh0LW1ldGhv ZCBmb3JtYWwgLi4uKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGFwcGx5IHJlYWwtbmV4dC1tZXRob2QgYXJncykpKSkpCi0gICAgICAgICAgICAgICAgICAg ICAgYm9keSAuLi4pKSkpCi0gICAgICAgICAgICAgKGZvcm1hbHMKLSAgICAgICAgICAgICAgKHdp dGgtc3ludGF4ICgoKGZvcm1hbCAuLi4pICgtPnByb3BlciAjJ2Zvcm1hbHMpKSkKLSAgICAgICAg ICAgICAgICAjJyhsYW1iZGEgKHJlYWwtbmV4dC1tZXRob2QpCi0gICAgICAgICAgICAgICAgICAg IChsYW1iZGEgZm9ybWFscwotICAgICAgICAgICAgICAgICAgICAgIChsZXQgKChuZXh0LW1ldGhv ZCAobGFtYmRhIGFyZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoaWYgKG51bGw/IGFyZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChhcHBseSByZWFsLW5leHQtbWV0aG9kIGZvcm1hbCAuLi4pCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcHBseSByZWFsLW5leHQtbWV0 aG9kIGFyZ3MpKSkpKQotICAgICAgICAgICAgICAgICAgICAgICAgYm9keSAuLi4pKSkpKSkpKSkp Ci0KLSAgICAoZGVmaW5lIChjb21wdXRlLXByb2NlZHVyZXMgZm9ybWFscyBib2R5KQorICAgICAg ICAgKGNhbGwtd2l0aC12YWx1ZXMKKyAgICAgICAgICAgICAobGFtYmRhICgpCisgICAgICAgICAg ICAgICAoaWYgKG51bGw/IGtleXdvcmQtZm9ybWFscykKKyAgICAgICAgICAgICAgICAgICAodmFs dWVzICMnbGFtYmRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYWxzCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAoLT5mb3JtYWwtaWRzIGZvcm1hbHMpKQorICAgICAgICAgICAg ICAgICAgIChjb21wdXRlLWtleXdvcmQtZm9ybWFsLWlkcyBmb3JtYWxzIGtleXdvcmQtZm9ybWFs cykpKQorICAgICAgICAgICAobGFtYmRhIChsYW1iZGEtdHlwZSBmb3JtYWxzIGZvcm1hbC1pZHMp CisgICAgICAgICAgICAgKHdpdGgtc3ludGF4ICgobmV4dC1tZXRob2QgbmV4dC1tZXRob2QpKQor ICAgICAgICAgICAgICAgKHN5bnRheC1jYXNlIGZvcm1hbHMgKCkKKyAgICAgICAgICAgICAgICAg KGZvcm1hbHMKKyAgICAgICAgICAgICAgICAgICNgKGxhbWJkYSAocmVhbC1uZXh0LW1ldGhvZCkK KyAgICAgICAgICAgICAgICAgICAgICAoIyxsYW1iZGEtdHlwZSAgICA7bGFtYmRhIG9yIGxhbWJk YSoKKyAgICAgICAgICAgICAgICAgICAgICAgZm9ybWFscworICAgICAgICAgICAgICAgICAgICAg ICAobGV0ICgobmV4dC1tZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1i ZGEgYXJncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKG51bGw/IGFyZ3Mp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBXZSBoYXZlIChuZXh0LW1l dGhvZCkgYW5kIG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7 IHBhc3Mgb24gdGhlIGFyZ3VtZW50cyB0byB0aGUgbWV0aG9kLgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIywoaWYgKG51bGw/IChjZHIgZm9ybWFsLWlkcykpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBwcm9wZXIgbGlzdCBvZiBpZGVu dGlmaWVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2AocmVh bC1uZXh0LW1ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyxAKGNhciBmb3JtYWwtaWRzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDs7IGxhc3QgaWRlbnRpZmllciBpcyBhIHJlc3QgbGlzdAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2AoYXBwbHkgcmVhbC1uZXh0LW1ldGhvZAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyxAKGNh ciBmb3JtYWwtaWRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIywoY2RyIGZvcm1hbC1pZHMpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDs7IHVzZXIgcGFzc2VzIGFyZ3VtZW50cyB0byBuZXh0LW1ldGhvZAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGx5IHJlYWwtbmV4dC1tZXRob2QgYXJn cykpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9keSAuLi4pKSkpKSkpKSkpKQorCisg ICAgKGRlZmluZSAoY29tcHV0ZS1wcm9jZWR1cmVzIGZvcm1hbHMga2V5d29yZC1mb3JtYWxzIGJv ZHkpCiAgICAgICA7OyBTbywgb3VyIHVzZSBvZiB0aGlzIGlzIGJyb2tlbiwgYmVjYXVzZSBpdCBv cGVyYXRlcyBvbiB0aGUKICAgICAgIDs7IHByZS1leHBhbnNpb24gc291cmNlIGNvZGUuIEl0J3Mg ZXF1aXZhbGVudCB0byBqdXN0IHNlYXJjaGluZwogICAgICAgOzsgZm9yIHJlZmVyZW50IGluIHRo ZSBkYXR1bXMuIEFoIHdlbGwuCkBAIC0yMTQyLDIzICsyMzMwLDU1IEBAIGZ1bmN0aW9uLiIKICAg ICAgICAgKGlmIGlkCiAgICAgICAgICAgICA7OyByZXR1cm4gYSBtYWtlLXByb2NlZHVyZQogICAg ICAgICAgICAgKHZhbHVlcyAjJyNmCi0gICAgICAgICAgICAgICAgICAgIChjb21wdXRlLW1ha2Ut cHJvY2VkdXJlIGZvcm1hbHMgYm9keSBpZCkpCi0gICAgICAgICAgICAodmFsdWVzIChjb21wdXRl LXByb2NlZHVyZSBmb3JtYWxzIGJvZHkpCisgICAgICAgICAgICAgICAgICAgIChjb21wdXRlLW1h a2UtcHJvY2VkdXJlIGZvcm1hbHMga2V5d29yZC1mb3JtYWxzIGJvZHkgaWQpKQorICAgICAgICAg ICAgKHZhbHVlcyAoY29tcHV0ZS1wcm9jZWR1cmUgZm9ybWFscyBrZXl3b3JkLWZvcm1hbHMgYm9k eSkKICAgICAgICAgICAgICAgICAgICAgIycjZikpKSkKKyAgICApCiAKKyhkZWZpbmUtc3ludGF4 IG1ldGhvZAorICAobGFtYmRhICh4KQorICAgIChzeW50YXgtY2FzZSB4ICgpCisgICAgICAoKF8g Zm9ybWFscykgIycobWV0aG9kIGZvcm1hbHMgKGlmICNmICNmKSkpCisgICAgICAoKF8gZm9ybWFs cyBib2R5MCBib2R5MSAuLi4pCisgICAgICAgKHdpdGgtc3ludGF4ICgoKGZvcm1hbHMgKHNwZWNp YWxpemVyIC4uLikpCisgICAgICAgICAgICAgICAgICAgICAgKHBhcnNlLWZvcm1hbHMgIydmb3Jt YWxzKSkpCisgICAgICAgICAoY2FsbC13aXRoLXZhbHVlcworICAgICAgICAgICAgIChsYW1iZGEg KCkKKyAgICAgICAgICAgICAgIChjb21wdXRlLXByb2NlZHVyZXMgIydmb3JtYWxzCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjJyhib2R5MCBib2R5MSAuLi4pKSkKKyAgICAgICAgICAgKGxhbWJkYSAocHJv Y2VkdXJlIG1ha2UtcHJvY2VkdXJlKQorICAgICAgICAgICAgICh3aXRoLXN5bnRheCAoKHByb2Nl ZHVyZSBwcm9jZWR1cmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFrZS1wcm9jZWR1 cmUgbWFrZS1wcm9jZWR1cmUpKQorICAgICAgICAgICAgICAgI2AobWFrZSA8bWV0aG9kPgorICAg ICAgICAgICAgICAgICAgICM6c3BlY2lhbGl6ZXJzIChjb25zKiBzcGVjaWFsaXplciAuLi4pIDt5 ZXMsIHRoaXMKKyAgICAgICAgICAgICAgICAgICA7OyBUaGUgY29ucyogaXMgbmVlZGVkIHRvIGdl dCB0aGUgdmFsdWUgb2YgZWFjaAorICAgICAgICAgICAgICAgICAgIDs7IHNwZWNpYWxpemVyLgor ICAgICAgICAgICAgICAgICAgICM6Zm9ybWFscyAnZm9ybWFscyA7bWlnaHQgYmUgaW1wcm9wZXIK KyAgICAgICAgICAgICAgICAgICAjOmJvZHkgJyhib2R5MCBib2R5MSAuLi4pCisgICAgICAgICAg ICAgICAgICAgIzptYWtlLXByb2NlZHVyZSBtYWtlLXByb2NlZHVyZQorICAgICAgICAgICAgICAg ICAgICM6cHJvY2VkdXJlIHByb2NlZHVyZSkpKSkpKSkpKQorCisoZGVmaW5lLXN5bnRheCBtZXRo b2QqCisgIChsYW1iZGEgKHgpCiAgICAgKHN5bnRheC1jYXNlIHggKCkKLSAgICAgICgoXyBhcmdz KSAjJyhtZXRob2QgYXJncyAoaWYgI2YgI2YpKSkKLSAgICAgICgoXyBhcmdzIGJvZHkwIGJvZHkx IC4uLikKLSAgICAgICAod2l0aC1zeW50YXggKCgoZm9ybWFscyAoc3BlY2lhbGl6ZXIgLi4uKSkg KHBhcnNlLWFyZ3MgIydhcmdzKSkpCisgICAgICAoKF8gZm9ybWFscykgIycobWV0aG9kIGZvcm1h bHMgKGlmICNmICNmKSkpCisgICAgICAoKF8gZm9ybWFscyBib2R5MCBib2R5MSAuLi4pCisgICAg ICAgKHdpdGgtc3ludGF4ICgoKGZvcm1hbHMgKHNwZWNpYWxpemVyIC4uLikga2V5d29yZC1mb3Jt YWxzKQorICAgICAgICAgICAgICAgICAgICAgIChwYXJzZS1rZXl3b3JkLWZvcm1hbHMgIydmb3Jt YWxzKSkpCiAgICAgICAgICAoY2FsbC13aXRoLXZhbHVlcwogICAgICAgICAgICAgIChsYW1iZGEg KCkKLSAgICAgICAgICAgICAgIChjb21wdXRlLXByb2NlZHVyZXMgIydmb3JtYWxzICMnKGJvZHkw IGJvZHkxIC4uLikpKQorICAgICAgICAgICAgICAgKGNvbXB1dGUtcHJvY2VkdXJlcyAjJ2Zvcm1h bHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIydrZXl3b3JkLWZvcm1hbHMK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIycoYm9keTAgYm9keTEgLi4uKSkp CiAgICAgICAgICAgIChsYW1iZGEgKHByb2NlZHVyZSBtYWtlLXByb2NlZHVyZSkKICAgICAgICAg ICAgICAod2l0aC1zeW50YXggKChwcm9jZWR1cmUgcHJvY2VkdXJlKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgKG1ha2UtcHJvY2VkdXJlIG1ha2UtcHJvY2VkdXJlKSkKLSAgICAgICAgICAg ICAgICMnKG1ha2UgPG1ldGhvZD4KKyAgICAgICAgICAgICAgICNgKG1ha2UgPG1ldGhvZD4KICAg ICAgICAgICAgICAgICAgICAjOnNwZWNpYWxpemVycyAoY29ucyogc3BlY2lhbGl6ZXIgLi4uKQot ICAgICAgICAgICAgICAgICAgICM6Zm9ybWFscyAnZm9ybWFscworICAgICAgICAgICAgICAgICAg ICM6Zm9ybWFscyAoaWYgKG51bGw/ICdrZXl3b3JkLWZvcm1hbHMpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnZm9ybWFscyA7bWlnaHQgYmUgaW1wcm9wZXIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChhcHBlbmQgJ2Zvcm1hbHMgJ2tleXdvcmQtZm9ybWFscykp CiAgICAgICAgICAgICAgICAgICAgIzpib2R5ICcoYm9keTAgYm9keTEgLi4uKQogICAgICAgICAg ICAgICAgICAgICM6bWFrZS1wcm9jZWR1cmUgbWFrZS1wcm9jZWR1cmUKICAgICAgICAgICAgICAg ICAgICAjOnByb2NlZHVyZSBwcm9jZWR1cmUpKSkpKSkpKSkK --000000000000d0e1fe0627ba319a--