From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: David Ponce via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#69992: Minor improvement to image map transformation logic Date: Fri, 29 Mar 2024 11:19:11 +0100 Message-ID: <182126ee-57b1-4a86-82c6-ba46e4b676cb@orange.fr> References: <87o7b3m8ee.fsf@ushin.org> <55864577-3819-46e0-857a-cc0d0145bc2f@orange.fr> <86cyrfj0t3.fsf@gnu.org> <87cyrfl265.fsf@breatheoutbreathe.in> Reply-To: David Ponce Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------gaggvpm2T4S8Etn0SDWiFuSi" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="26202"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla Thunderbird Cc: Eli Zaretskii , Joseph Turner To: 69992@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri Mar 29 11:20:27 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@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 1rq9LW-0006bz-51 for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 29 Mar 2024 11:20:26 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rq9LA-0001bg-LF; Fri, 29 Mar 2024 06:20:04 -0400 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 1rq9L8-0001bV-EE for bug-gnu-emacs@gnu.org; Fri, 29 Mar 2024 06:20:02 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rq9L7-0004CO-BC for bug-gnu-emacs@gnu.org; Fri, 29 Mar 2024 06:20:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1rq9L8-0006Wt-02 for bug-gnu-emacs@gnu.org; Fri, 29 Mar 2024 06:20:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: David Ponce Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 29 Mar 2024 10:20:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 69992 X-GNU-PR-Package: emacs Original-Received: via spool by 69992-submit@debbugs.gnu.org id=B69992.171170756124997 (code B ref 69992); Fri, 29 Mar 2024 10:20:01 +0000 Original-Received: (at 69992) by debbugs.gnu.org; 29 Mar 2024 10:19:21 +0000 Original-Received: from localhost ([127.0.0.1]:41756 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rq9KS-0006V6-B2 for submit@debbugs.gnu.org; Fri, 29 Mar 2024 06:19:21 -0400 Original-Received: from smtp-73.smtpout.orange.fr ([80.12.242.73]:56696 helo=msa.smtpout.orange.fr) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rq9KP-0006Uv-1C for 69992@debbugs.gnu.org; Fri, 29 Mar 2024 06:19:18 -0400 Original-Received: from [192.168.1.15] ([2.7.71.181]) by smtp.orange.fr with ESMTPA id q9KJrtlcjuWdGq9KJrG8oW; Fri, 29 Mar 2024 11:19:14 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=orange.fr; s=t20230301; t=1711707554; bh=ss6WwIGFOIPwZyd+2qYyRM+lmid/uN+CIAugzmn+dEo=; h=Message-ID:Date:MIME-Version:Subject:From:To; b=Z9+eGvJWDj4fGRLFKJDAcqNF3TcO3Z2OYuYUij5qYz75EYGm56BHkh9FUhntPePPR F6AiT6Ad98q+Lckzi2M6UyOTVMtsfCUZA+eQCd2vPEvLPb3csltjV8N59GpjfC8BLB rSX9TwkskywUZradTFuca47Hx2tp5kifwKvXfv5Z5lGuOaszXRl6fRRRO5vGL+3D5H B1QZoMvexOiYWz59Xxf1gKoFp4nMLm6xK61WVP1BpqMQ4mmD/1+0zzx0KiuysEG5P9 dGuGCMDKrlaqS1KMI2ffjN3BFYdB6nwoQ3lOnad5+XNJ/JEIC/P6HXj6IWqUtFbEOp eKdJEbetW3ulw== X-ME-Helo: [192.168.1.15] X-ME-Auth: ZGFfdmlkQHdhbmFkb28uZnI= X-ME-Date: Fri, 29 Mar 2024 11:19:14 +0100 X-ME-IP: 2.7.71.181 Content-Language: fr, en-US In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:282278 Archived-At: This is a multi-part message in MIME format. --------------gaggvpm2T4S8Etn0SDWiFuSi Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit [...] > The attached new patch fixes the logic to be consistent with Emacs > internal implementation, plus some other tweaks to check if a > transformation apply before to call the transformation function. > I also updated some tests according to functions changes. > Here is a possible change log: > > 2024-03-28  David Ponce  > >     * lisp/image.el (image--compute-scaling) >     (image--compute-rotation): New functions. >     (image--compute-map, image--compute-original-map): Use them. >     Ensure all transformations are applied or undone according to what >     Emacs does internally.  Call a transformation function only when >     needed.  Fix doc string. >     (image--scale-map): Assume effective scale argument. >     (image--rotate-map): Assume effective rotation argument. >     (image--rotate-coord): Improve doc string. >     (image--flip-map): Remove no more used flip argument. > >     * test/lisp/image-tests.el (image-create-image-with-map): Use a >     valid SVG image otherwise `image-size' will not return a valid >     value and calculation of scale could fail. >     (image-transform-map): Update according to changed signature of >     image--flip-map. [...] Hello, Please find attached a new patch with an additional small fix I forgot to include. Sorry. Regards --------------gaggvpm2T4S8Etn0SDWiFuSi Content-Type: text/x-patch; charset=UTF-8; name="image-compute-map-V1.patch" Content-Disposition: attachment; filename="image-compute-map-V1.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvaW1hZ2UuZWwgYi9saXNwL2ltYWdlLmVsCmluZGV4IGQ3NDk2 NDg1YWNhLi4yNjI3ZDBiZTEwYSAxMDA2NDQKLS0tIGEvbGlzcC9pbWFnZS5lbAorKysgYi9s aXNwL2ltYWdlLmVsCkBAIC0xNDIzLDExNSArMTQyMywxMzkgQEAgaW1hZ2UtcmVjb21wdXRl LW1hcC1wCiAgIDp0eXBlICdib29sZWFuCiAgIDp2ZXJzaW9uICIzMC4xIikKIAorKGRlZnN1 YnN0IGltYWdlLS1jb21wdXRlLXNjYWxpbmcgKGltYWdlKQorICAiUmV0dXJuIHRoZSBjdXJy ZW50IHNjYWxpbmcgb2YgSU1BR0UsIG9yIDEgaWYgbm8gc2NhbGluZy4iCisgIDs7IFRoZSBp bWFnZSBtYXkgYmUgc2NhbGVkIGR1ZSB0byBtYW55IHJlYXNvbnMgKDpzY2FsZSwgOm1heC13 aWR0aCwKKyAgOzsgZXRjKSwgc28gdXNpbmcgYGltYWdlLS1jdXJyZW50LXNjYWxpbmcnIHRv IGdldCByYXRpbyBiZXR3ZWVuIHRoZQorICA7OyBvcmlnaW5hbCBpbWFnZSBzaXplIGFuZCB0 aGUgZGlzcGxheWVkIHNpemUpIGlzIGJldHRlciB0aGFuIGp1c3QKKyAgOzsgdXNpbmcgdGhl IDpzY2FsZSB2YWx1ZS4gVW5mb3J0dW5hdGVseSBlYWNoIGNhbGwgdG8gYGltYWdlX3NpemUn IGlzCisgIDs7IHZlcnkgcmVzb3VyY2UgY29uc3VtaW5nIQorICA7OyAoaW1hZ2UtLWN1cnJl bnQtc2NhbGluZworICA7OyAgaW1hZ2UgKGltYWdlLS1pbWFnZS13aXRob3V0LXBhcmFtZXRl cnMgaW1hZ2UpKQorICAob3IgKGltYWdlLXByb3BlcnR5IGltYWdlIDpzY2FsZSkgMSkpCisK KyhkZWZzdWJzdCBpbWFnZS0tY29tcHV0ZS1yb3RhdGlvbiAoaW1hZ2UpCisgICJSZXR1cm4g dGhlIGN1cnJlbnQgcm90YXRpb24gb2YgSU1BR0UsIG9yIDAgaWYgbm8gcm90YXRpb24uCitB bHNvIHJldHVybiBuaWwgaWYgcm90YXRpb24gaXMgbm90IGEgbXVsdGlwbGVzIG9mIDkwIGRl Z3JlZXMgKDAsIDkwLAorMTgwWy0xODBdIGFuZCAyNzBbLTkwXSkuIgorICAobGV0ICgoZGVn cmVlcyAob3IgKGltYWdlLXByb3BlcnR5IGltYWdlIDpyb3RhdGlvbikgMCkpKQorICAgIChh bmQgKD0gMCAobW9kIGRlZ3JlZXMgMSkpCisgICAgICAgICAoY2FyIChtZW1xbCAodHJ1bmNh dGUgKG1vZCBkZWdyZWVzIDM2MCkpICcoMCA5MCAxODAgMjcwKSkpKSkpCisKIChkZWZ1biBp bWFnZS0tY29tcHV0ZS1tYXAgKGltYWdlKQogICAiQ29tcHV0ZSBtYXAgZm9yIElNQUdFIHN1 aXRhYmxlIHRvIGJlIHVzZWQgYXMgaXRzIDptYXAgcHJvcGVydHkuCi1SZXR1cm4gYSBjb3B5 IG9mIDpvcmlnaW5hbC1pbWFnZSB0cmFuc2Zvcm1lZCBiYXNlZCBvbiBJTUFHRSdzIDpzY2Fs ZSwKK1JldHVybiBhIGNvcHkgb2YgOm9yaWdpbmFsLW1hcCB0cmFuc2Zvcm1lZCBiYXNlZCBv biBJTUFHRSdzIDpzY2FsZSwKIDpyb3RhdGlvbiwgYW5kIDpmbGlwLiAgV2hlbiBJTUFHRSdz IDpvcmlnaW5hbC1tYXAgaXMgbmlsLCByZXR1cm4gbmlsLgogV2hlbiA6cm90YXRpb24gaXMg bm90IGEgbXVsdGlwbGUgb2YgOTAsIHJldHVybiBjb3B5IG9mIDpvcmlnaW5hbC1tYXAuIgot ICAocGNhc2UtbGV0KiAoKG9yaWdpbmFsLW1hcCAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOm9y aWdpbmFsLW1hcCkpCi0gICAgICAgICAgICAgICAobWFwIChjb3B5LXRyZWUgb3JpZ2luYWwt bWFwIHQpKQotICAgICAgICAgICAgICAgKHNjYWxlIChvciAoaW1hZ2UtcHJvcGVydHkgaW1h Z2UgOnNjYWxlKSAxKSkKLSAgICAgICAgICAgICAgIChyb3RhdGlvbiAob3IgKGltYWdlLXBy b3BlcnR5IGltYWdlIDpyb3RhdGlvbikgMCkpCi0gICAgICAgICAgICAgICAoZmxpcCAoaW1h Z2UtcHJvcGVydHkgaW1hZ2UgOmZsaXApKQotICAgICAgICAgICAgICAgKChhbmQgc2l6ZSBg KCx3aWR0aCAuICxoZWlnaHQpKSAoaW1hZ2Utc2l6ZSBpbWFnZSB0KSkpCi0gICAgKHdoZW4g KGFuZCA7IEhhbmRsZSBvbmx5IDkwLWRlZ3JlZSByb3RhdGlvbnMKLSAgICAgICAgICAgKHpl cm9wIChtb2Qgcm90YXRpb24gMSkpCi0gICAgICAgICAgICh6ZXJvcCAoJSAodHJ1bmNhdGUg cm90YXRpb24pIDkwKSkpCi0gICAgICA7OyBTSVpFIGZpdHMgTUFQIGFmdGVyIHRyYW5zZm9y bWF0aW9ucy4gIFNjYWxlIE1BUCBiZWZvcmUKLSAgICAgIDs7IGZsaXAgYW5kIHJvdGF0ZSBv cGVyYXRpb25zLCBzaW5jZSBib3RoIG5lZWQgTUFQIHRvIGZpdCBTSVpFLgotICAgICAgKGlt YWdlLS1zY2FsZS1tYXAgbWFwIHNjYWxlKQorICAod2hlbi1sZXQgKChtYXAgKGltYWdlLXBy b3BlcnR5IGltYWdlIDpvcmlnaW5hbC1tYXApKSkKKyAgICAoc2V0cSBtYXAgKGNvcHktdHJl ZSBtYXAgdCkpCisgICAgKGxldCogKChzY2FsZSAoaW1hZ2UtLWNvbXB1dGUtc2NhbGluZyBp bWFnZSkpCisgICAgICAgICAgIChyb3RhdGlvbiAoaW1hZ2UtLWNvbXB1dGUtcm90YXRpb24g aW1hZ2UpKQorICAgICAgICAgICA7OyBJbWFnZSBpcyBmbGlwcGVkIG9ubHkgaWYgcm90YXRp b24gaXMgYSBtdWx0aXBsZSBvZiA5MCwKKyAgICAgICAgICAgOzsgaW5jbHVkaW5nIDAuCisg ICAgICAgICAgIChmbGlwIChhbmQgcm90YXRpb24gKGltYWdlLXByb3BlcnR5IGltYWdlIDpm bGlwKSkpCisgICAgICAgICAgIChzaXplIChpbWFnZS1zaXplIGltYWdlIHQpKSkKKyAgICAg IDs7IFNJWkUgZml0cyBNQVAgYWZ0ZXIgdHJhbnNmb3JtYXRpb25zLiAgU2NhbGUgTUFQIGJl Zm9yZSBmbGlwIGFuZAorICAgICAgOzsgcm90YXRlIG9wZXJhdGlvbnMsIHNpbmNlIGJvdGgg bmVlZCBNQVAgdG8gZml0IFNJWkUuCisgICAgICAodW5sZXNzICg9IHNjYWxlIDEpCisgICAg ICAgIChpbWFnZS0tc2NhbGUtbWFwIG1hcCBzY2FsZSkpCiAgICAgICA7OyBJbiByZW5kZXJl ZCBpbWFnZXMsIHJvdGF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGJlZm9yZSBmbGlwLgotICAg ICAgKGltYWdlLS1yb3RhdGUtbWFwCi0gICAgICAgbWFwIHJvdGF0aW9uIChpZiAob3IgKD0g OTAgcm90YXRpb24pICg9IDI3MCByb3RhdGlvbikpCisgICAgICAod2hlbiAobWVtcWwgcm90 YXRpb24gJyg5MCAxODAgMjcwKSkKKyAgICAgICAgKGltYWdlLS1yb3RhdGUtbWFwCisgICAg ICAgICBtYXAgcm90YXRpb24gKGlmICg9IHJvdGF0aW9uIDE4MCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgOzsgSWYgcm90YXRl ZCDCsTkwwrAsIHN3YXAgd2lkdGggYW5kIGhlaWdodC4KLSAgICAgICAgICAgICAgICAgICAg ICAgIChjb25zIGhlaWdodCB3aWR0aCkKLSAgICAgICAgICAgICAgICAgICAgICBzaXplKSkK KyAgICAgICAgICAgICAgICAgICAgICAgIChjb25zIChjZHIgc2l6ZSkgKGNhciBzaXplKSkp KSkKICAgICAgIDs7IEFmdGVyIHJvdGF0aW9uLCB0aGVyZSdzIG5vIG5lZWQgdG8gc3dhcCB3 aWR0aCBhbmQgaGVpZ2h0LgotICAgICAgKGltYWdlLS1mbGlwLW1hcCBtYXAgZmxpcCBzaXpl KSkKKyAgICAgICh3aGVuIGZsaXAKKyAgICAgICAgKGltYWdlLS1mbGlwLW1hcCBtYXAgc2l6 ZSkpKQogICAgIG1hcCkpCiAKIChkZWZ1biBpbWFnZS0tY29tcHV0ZS1vcmlnaW5hbC1tYXAg KGltYWdlKQogICAiUmV0dXJuIG9yaWdpbmFsIG1hcCBmb3IgSU1BR0UuCiBJZiBJTUFHRSBs YWNrcyA6bWFwIHByb3BlcnR5LCByZXR1cm4gbmlsLgotV2hlbiA6cm90YXRpb24gaXMgbm90 IGEgbXVsdGlwbGUgb2YgOTAsIHJldHVybiBjb3B5IG9mIDptYXAuIgotICAod2hlbiAoaW1h Z2UtcHJvcGVydHkgaW1hZ2UgOm1hcCkKLSAgICAobGV0KiAoKG9yaWdpbmFsLW1hcCAoY29w eS10cmVlIChpbWFnZS1wcm9wZXJ0eSBpbWFnZSA6bWFwKSB0KSkKLSAgICAgICAgICAgKHNj YWxlIChvciAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOnNjYWxlKSAxKSkKLSAgICAgICAgICAg KHJvdGF0aW9uIChvciAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOnJvdGF0aW9uKSAwKSkKLSAg ICAgICAgICAgKGZsaXAgKGltYWdlLXByb3BlcnR5IGltYWdlIDpmbGlwKSkKK1doZW4gdGhl cmUgaXMgbm8gdHJhbnNmb3JtYXRpb24sIHJldHVybiBjb3B5IG9mIDptYXAuIgorICAod2hl bi1sZXQgKChvcmlnaW5hbC1tYXAgKGltYWdlLXByb3BlcnR5IGltYWdlIDptYXApKSkKKyAg ICAoc2V0cSBvcmlnaW5hbC1tYXAgKGNvcHktdHJlZSBvcmlnaW5hbC1tYXAgdCkpCisgICAg KGxldCogKChzY2FsZSAoaW1hZ2UtLWNvbXB1dGUtc2NhbGluZyBpbWFnZSkpCisgICAgICAg ICAgIChyb3RhdGlvbiAoaW1hZ2UtLWNvbXB1dGUtcm90YXRpb24gaW1hZ2UpKQorICAgICAg ICAgICA7OyBJbWFnZSBpcyBmbGlwcGVkIG9ubHkgaWYgcm90YXRpb24gaXMgYSBtdWx0aXBs ZSBvZiA5MAorICAgICAgICAgICA7OyBpbmNsdWRpbmcgMC4KKyAgICAgICAgICAgKGZsaXAg KGFuZCByb3RhdGlvbiAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOmZsaXApKSkKICAgICAgICAg ICAgKHNpemUgKGltYWdlLXNpemUgaW1hZ2UgdCkpKQotICAgICAgKHdoZW4gKGFuZCA7IEhh bmRsZSBvbmx5IDkwLWRlZ3JlZSByb3RhdGlvbnMKLSAgICAgICAgICAgICAoemVyb3AgKG1v ZCByb3RhdGlvbiAxKSkKLSAgICAgICAgICAgICAoemVyb3AgKCUgKHRydW5jYXRlIHJvdGF0 aW9uKSA5MCkpKQotICAgICAgICA7OyBJbiByZW5kZXJlZCBpbWFnZXMsIHJvdGF0aW9uIGlz IGFsd2F5cyBhcHBsaWVkIGJlZm9yZSBmbGlwLgotICAgICAgICA7OyBUbyB1bmRvIHRoZSB0 cmFuc2Zvcm1hdGlvbiwgZmxpcCBiZWZvcmUgcm90YXRpbmcuICBTSVpFIGZpdHMKLSAgICAg ICAgOzsgT1JJR0lOQUwtTUFQIGJlZm9yZSB0cmFuc2Zvcm1hdGlvbnMgYXJlIGFwcGxpZWQu ICBUaGVyZWZvcmUsCi0gICAgICAgIDs7IHNjYWxlIE9SSUdJTkFMLU1BUCBhZnRlciBmbGlw IGFuZCByb3RhdGUgb3BlcmF0aW9ucywgc2luY2UKLSAgICAgICAgOzsgYm90aCBuZWVkIE9S SUdJTkFMLU1BUCB0byBmaXQgU0laRS4KLSAgICAgICAgKGltYWdlLS1mbGlwLW1hcCBvcmln aW5hbC1tYXAgZmxpcCBzaXplKQotICAgICAgICAoaW1hZ2UtLXJvdGF0ZS1tYXAgb3JpZ2lu YWwtbWFwICgtIHJvdGF0aW9uKSBzaXplKQotICAgICAgICAoaW1hZ2UtLXNjYWxlLW1hcCBv cmlnaW5hbC1tYXAgKC8gMS4wIHNjYWxlKSkpCi0gICAgICBvcmlnaW5hbC1tYXApKSkKKyAg ICAgIDs7IEluIHJlbmRlcmVkIGltYWdlcywgcm90YXRpb24gaXMgYWx3YXlzIGFwcGxpZWQg YmVmb3JlIGZsaXAuCisgICAgICA7OyBUbyB1bmRvIHRoZSB0cmFuc2Zvcm1hdGlvbiwgZmxp cCBiZWZvcmUgcm90YXRpbmcuICBTSVpFIGZpdHMKKyAgICAgIDs7IE9SSUdJTkFMLU1BUCBi ZWZvcmUgdHJhbnNmb3JtYXRpb25zIGFyZSBhcHBsaWVkLiAgVGhlcmVmb3JlLAorICAgICAg Ozsgc2NhbGUgT1JJR0lOQUwtTUFQIGFmdGVyIGZsaXAgYW5kIHJvdGF0ZSBvcGVyYXRpb25z LCBzaW5jZQorICAgICAgOzsgYm90aCBuZWVkIE9SSUdJTkFMLU1BUCB0byBmaXQgU0laRS4K KyAgICAgIDs7IEluIHJlbmRlcmVkIGltYWdlcywgcm90YXRpb24gaXMgYWx3YXlzIGFwcGxp ZWQgYmVmb3JlIGZsaXAuCisgICAgICAod2hlbiBmbGlwCisgICAgICAgIChpbWFnZS0tZmxp cC1tYXAgb3JpZ2luYWwtbWFwIHNpemUpKQorICAgICAgKHdoZW4gKG1lbXFsIHJvdGF0aW9u ICcoOTAgMTgwIDI3MCkpCisgICAgICAgIChpbWFnZS0tcm90YXRlLW1hcCBvcmlnaW5hbC1t YXAgKC0gcm90YXRpb24pIHNpemUpKQorICAgICAgKHVubGVzcyAoPSBzY2FsZSAxKQorICAg ICAgICAoaW1hZ2UtLXNjYWxlLW1hcCBvcmlnaW5hbC1tYXAgKC8gMS4wIHNjYWxlKSkpKQor ICAgIG9yaWdpbmFsLW1hcCkpCiAKIChkZWZ1biBpbWFnZS0tc2NhbGUtbWFwIChtYXAgc2Nh bGUpCiAgICJTY2FsZSBNQVAgYWNjb3JkaW5nIHRvIFNDQUxFLgogRGVzdHJ1Y3RpdmVseSBt b2RpZmllcyBhbmQgcmV0dXJucyBNQVAuIgotICAodW5sZXNzICg9IDEgc2NhbGUpCi0gICAg KHBjYXNlLWRvbGlzdCAoYCgsYCgsdHlwZSAuICxjb29yZHMpICxfaWQgLF9wbGlzdCkgbWFw KQotICAgICAgKHBjYXNlLWV4aGF1c3RpdmUgdHlwZQotICAgICAgICAoJ3JlY3QKLSAgICAg ICAgIChzZXRmIChjYWFyIGNvb3JkcykgKHJvdW5kICgqIChjYWFyIGNvb3Jkcykgc2NhbGUp KSkKLSAgICAgICAgIChzZXRmIChjZGFyIGNvb3JkcykgKHJvdW5kICgqIChjZGFyIGNvb3Jk cykgc2NhbGUpKSkKLSAgICAgICAgIChzZXRmIChjYWRyIGNvb3JkcykgKHJvdW5kICgqIChj YWRyIGNvb3Jkcykgc2NhbGUpKSkKLSAgICAgICAgIChzZXRmIChjZGRyIGNvb3JkcykgKHJv dW5kICgqIChjZGRyIGNvb3Jkcykgc2NhbGUpKSkpCi0gICAgICAgICgnY2lyY2xlCi0gICAg ICAgICAoc2V0ZiAoY2FhciBjb29yZHMpIChyb3VuZCAoKiAoY2FhciBjb29yZHMpIHNjYWxl KSkpCi0gICAgICAgICAoc2V0ZiAoY2RhciBjb29yZHMpIChyb3VuZCAoKiAoY2RhciBjb29y ZHMpIHNjYWxlKSkpCi0gICAgICAgICAoc2V0Y2RyIGNvb3JkcyAocm91bmQgKCogKGNkciBj b29yZHMpIHNjYWxlKSkpKQotICAgICAgICAoJ3BvbHkKLSAgICAgICAgIChkb3RpbWVzIChp IChsZW5ndGggY29vcmRzKSkKLSAgICAgICAgICAgKGFzZXQgY29vcmRzIGkKLSAgICAgICAg ICAgICAgICAgKHJvdW5kICgqIChhcmVmIGNvb3JkcyBpKSBzY2FsZSkpKSkpKSkpCisgIChw Y2FzZS1kb2xpc3QgKGAoLGAoLHR5cGUgLiAsY29vcmRzKSAsX2lkICxfcGxpc3QpIG1hcCkK KyAgICAocGNhc2UtZXhoYXVzdGl2ZSB0eXBlCisgICAgICAoJ3JlY3QKKyAgICAgICAoc2V0 ZiAoY2FhciBjb29yZHMpIChyb3VuZCAoKiAoY2FhciBjb29yZHMpIHNjYWxlKSkpCisgICAg ICAgKHNldGYgKGNkYXIgY29vcmRzKSAocm91bmQgKCogKGNkYXIgY29vcmRzKSBzY2FsZSkp KQorICAgICAgIChzZXRmIChjYWRyIGNvb3JkcykgKHJvdW5kICgqIChjYWRyIGNvb3Jkcykg c2NhbGUpKSkKKyAgICAgICAoc2V0ZiAoY2RkciBjb29yZHMpIChyb3VuZCAoKiAoY2RkciBj b29yZHMpIHNjYWxlKSkpKQorICAgICAgKCdjaXJjbGUKKyAgICAgICAoc2V0ZiAoY2FhciBj b29yZHMpIChyb3VuZCAoKiAoY2FhciBjb29yZHMpIHNjYWxlKSkpCisgICAgICAgKHNldGYg KGNkYXIgY29vcmRzKSAocm91bmQgKCogKGNkYXIgY29vcmRzKSBzY2FsZSkpKQorICAgICAg IChzZXRjZHIgY29vcmRzIChyb3VuZCAoKiAoY2RyIGNvb3Jkcykgc2NhbGUpKSkpCisgICAg ICAoJ3BvbHkKKyAgICAgICAoZG90aW1lcyAoaSAobGVuZ3RoIGNvb3JkcykpCisgICAgICAg ICAoYXNldCBjb29yZHMgaQorICAgICAgICAgICAgICAgKHJvdW5kICgqIChhcmVmIGNvb3Jk cyBpKSBzY2FsZSkpKSkpKSkKICAgbWFwKQogCiAoZGVmdW4gaW1hZ2UtLXJvdGF0ZS1tYXAg KG1hcCByb3RhdGlvbiBzaXplKQogICAiUm90YXRlIE1BUCBhY2NvcmRpbmcgdG8gUk9UQVRJ T04gYW5kIFNJWkUuCitST1RBVElPTiBtdXN0IGJlIGEgbm9uLXplcm8gbXVsdGlwbGUgb2Yg OTAuCiBEZXN0cnVjdGl2ZWx5IG1vZGlmaWVzIGFuZCByZXR1cm5zIE1BUC4iCi0gICh1bmxl c3MgKHplcm9wIHJvdGF0aW9uKQotICAgIChwY2FzZS1kb2xpc3QgKGAoLGAoLHR5cGUgLiAs Y29vcmRzKSAsX2lkICxfcGxpc3QpIG1hcCkKLSAgICAgIChwY2FzZS1leGhhdXN0aXZlIHR5 cGUKLSAgICAgICAgKCdyZWN0Ci0gICAgICAgICAobGV0ICggeDAgeTAgIDsgTmV3IHVwcGVy IGxlZnQgY29ybmVyCi0gICAgICAgICAgICAgICAgeDEgeTEpIDsgTmV3IGJvdHRvbSByaWdo dCBjb3JuZXIKLSAgICAgICAgICAgKHBjYXNlICh0cnVuY2F0ZSAobW9kIHJvdGF0aW9uIDM2 MCkpIDsgU2V0IG5ldyBjb3JuZXJzIHRvLi4uCi0gICAgICAgICAgICAgKDkwIDsgLi4ub2xk IGJvdHRvbSBsZWZ0IGFuZCB1cHBlciByaWdodAotICAgICAgICAgICAgICAoc2V0cSB4MCAo Y2FhciBjb29yZHMpIHkwIChjZGRyIGNvb3JkcykKLSAgICAgICAgICAgICAgICAgICAgeDEg KGNhZHIgY29vcmRzKSB5MSAoY2RhciBjb29yZHMpKSkKLSAgICAgICAgICAgICAoMTgwIDsg Li4ub2xkIGJvdHRvbSByaWdodCBhbmQgdXBwZXIgbGVmdAotICAgICAgICAgICAgICAoc2V0 cSB4MCAoY2FkciBjb29yZHMpIHkwIChjZGRyIGNvb3JkcykKLSAgICAgICAgICAgICAgICAg ICAgeDEgKGNhYXIgY29vcmRzKSB5MSAoY2RhciBjb29yZHMpKSkKLSAgICAgICAgICAgICAo MjcwIDsgLi4ub2xkIHVwcGVyIHJpZ2h0IGFuZCBib3R0b20gbGVmdAotICAgICAgICAgICAg ICAoc2V0cSB4MCAoY2FkciBjb29yZHMpIHkwIChjZGFyIGNvb3JkcykKLSAgICAgICAgICAg ICAgICAgICAgeDEgKGNhYXIgY29vcmRzKSB5MSAoY2RkciBjb29yZHMpKSkpCi0gICAgICAg ICAgIChzZXRjYXIgY29vcmRzIChpbWFnZS0tcm90YXRlLWNvb3JkIHgwIHkwIHJvdGF0aW9u IHNpemUpKQotICAgICAgICAgICAoc2V0Y2RyIGNvb3JkcyAoaW1hZ2UtLXJvdGF0ZS1jb29y ZCB4MSB5MSByb3RhdGlvbiBzaXplKSkpKQotICAgICAgICAoJ2NpcmNsZQotICAgICAgICAg KHNldGNhciBjb29yZHMgKGltYWdlLS1yb3RhdGUtY29vcmQKLSAgICAgICAgICAgICAgICAg ICAgICAgICAoY2FhciBjb29yZHMpIChjZGFyIGNvb3Jkcykgcm90YXRpb24gc2l6ZSkpKQot ICAgICAgICAoJ3BvbHkKLSAgICAgICAgIChkb3RpbWVzIChpIChsZW5ndGggY29vcmRzKSkK LSAgICAgICAgICAgKHdoZW4gKD0gMCAoJSBpIDIpKQotICAgICAgICAgICAgIChwY2FzZS1s ZXQgKChgKCx4IC4gLHkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChpbWFnZS0tcm90 YXRlLWNvb3JkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJlZiBjb29yZHMgaSkg KGFyZWYgY29vcmRzICgxKyBpKSkgcm90YXRpb24gc2l6ZSkpKQotICAgICAgICAgICAgICAg KGFzZXQgY29vcmRzIGkgeCkKLSAgICAgICAgICAgICAgIChhc2V0IGNvb3JkcyAoMSsgaSkg eSkpKSkpKSkpCisgIChzZXRxIHJvdGF0aW9uIChtb2Qgcm90YXRpb24gMzYwKSkKKyAgKHBj YXNlLWRvbGlzdCAoYCgsYCgsdHlwZSAuICxjb29yZHMpICxfaWQgLF9wbGlzdCkgbWFwKQor ICAgIChwY2FzZS1leGhhdXN0aXZlIHR5cGUKKyAgICAgICgncmVjdAorICAgICAgIChsZXQg KCB4MCB5MCAgOyBOZXcgdXBwZXIgbGVmdCBjb3JuZXIKKyAgICAgICAgICAgICAgeDEgeTEp IDsgTmV3IGJvdHRvbSByaWdodCBjb3JuZXIKKyAgICAgICAgIChwY2FzZSByb3RhdGlvbiA7 IFNldCBuZXcgY29ybmVycyB0by4uLgorICAgICAgICAgICAoOTAgOyAuLi5vbGQgYm90dG9t IGxlZnQgYW5kIHVwcGVyIHJpZ2h0CisgICAgICAgICAgICAoc2V0cSB4MCAoY2FhciBjb29y ZHMpIHkwIChjZGRyIGNvb3JkcykKKyAgICAgICAgICAgICAgICAgIHgxIChjYWRyIGNvb3Jk cykgeTEgKGNkYXIgY29vcmRzKSkpCisgICAgICAgICAgICgxODAgOyAuLi5vbGQgYm90dG9t IHJpZ2h0IGFuZCB1cHBlciBsZWZ0CisgICAgICAgICAgICAoc2V0cSB4MCAoY2FkciBjb29y ZHMpIHkwIChjZGRyIGNvb3JkcykKKyAgICAgICAgICAgICAgICAgIHgxIChjYWFyIGNvb3Jk cykgeTEgKGNkYXIgY29vcmRzKSkpCisgICAgICAgICAgICgyNzAgOyAuLi5vbGQgdXBwZXIg cmlnaHQgYW5kIGJvdHRvbSBsZWZ0CisgICAgICAgICAgICAoc2V0cSB4MCAoY2FkciBjb29y ZHMpIHkwIChjZGFyIGNvb3JkcykKKyAgICAgICAgICAgICAgICAgIHgxIChjYWFyIGNvb3Jk cykgeTEgKGNkZHIgY29vcmRzKSkpKQorICAgICAgICAgKHNldGNhciBjb29yZHMgKGltYWdl LS1yb3RhdGUtY29vcmQgeDAgeTAgcm90YXRpb24gc2l6ZSkpCisgICAgICAgICAoc2V0Y2Ry IGNvb3JkcyAoaW1hZ2UtLXJvdGF0ZS1jb29yZCB4MSB5MSByb3RhdGlvbiBzaXplKSkpKQor ICAgICAgKCdjaXJjbGUKKyAgICAgICAoc2V0Y2FyIGNvb3JkcyAoaW1hZ2UtLXJvdGF0ZS1j b29yZAorICAgICAgICAgICAgICAgICAgICAgICAoY2FhciBjb29yZHMpIChjZGFyIGNvb3Jk cykgcm90YXRpb24gc2l6ZSkpKQorICAgICAgKCdwb2x5CisgICAgICAgKGRvdGltZXMgKGkg KGxlbmd0aCBjb29yZHMpKQorICAgICAgICAgKHdoZW4gKD0gMCAoJSBpIDIpKQorICAgICAg ICAgICAocGNhc2UtbGV0ICgoYCgseCAuICx5KQorICAgICAgICAgICAgICAgICAgICAgICAg KGltYWdlLS1yb3RhdGUtY29vcmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYXJlZiBj b29yZHMgaSkgKGFyZWYgY29vcmRzICgxKyBpKSkgcm90YXRpb24gc2l6ZSkpKQorICAgICAg ICAgICAgIChhc2V0IGNvb3JkcyBpIHgpCisgICAgICAgICAgICAgKGFzZXQgY29vcmRzICgx KyBpKSB5KSkpKSkpKQogICBtYXApCiAKIChkZWZ1biBpbWFnZS0tcm90YXRlLWNvb3JkICh4 IHkgYW5nbGUgc2l6ZSkKICAgIlJvdGF0ZSBjb29yZGluYXRlcyBYIGFuZCBZIGJ5IEFOR0xF IGluIGltYWdlIG9mIFNJWkUuCi1BTkdMRSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOTAuICBS ZXR1cm5zIGEgY29ucyBjZWxsIG9mIHJvdW5kZWQKLWNvb3JkaW5hdGVzIChYMSBZMSkuIgor QU5HTEUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDkwIGluIFs5MCAxODAgMjcwXS4gIFJldHVy bnMgYSBjb25zIGNlbGwgb2YKK3JvdW5kZWQgY29vcmRpbmF0ZXMgKFgxIFkxKS4iCiAgIChw Y2FzZS1sZXQqICgocmFkaWFuICgqICgvIGFuZ2xlIDE4MC4wKSBmbG9hdC1waSkpCiAgICAg ICAgICAgICAgICAoYCgsd2lkdGggLiAsaGVpZ2h0KSBzaXplKQogICAgICAgICAgICAgICAg OzsgeSBpcyBwb3NpdGl2ZSwgYnV0IHdlIGFyZSBpbiB0aGUgYm90dG9tLXJpZ2h0IHF1YWRy YW50CkBAIC0xNTUyLDI1ICsxNTc2LDI0IEBAIGltYWdlLS1yb3RhdGUtY29vcmQKICAgICAg ICAgICAgICAgICh5MSAoLSB5MSkpKQogICAgIChjb25zIChyb3VuZCB4MSkgKHJvdW5kIHkx KSkpKQogCi0oZGVmdW4gaW1hZ2UtLWZsaXAtbWFwIChtYXAgZmxpcCBzaXplKQotICAiSG9y aXpvbnRhbGx5IGZsaXAgTUFQIGFjY29yZGluZyB0byBGTElQIGFuZCBTSVpFLgorKGRlZnVu IGltYWdlLS1mbGlwLW1hcCAobWFwIHNpemUpCisgICJIb3Jpem9udGFsbHkgZmxpcCBNQVAg YWNjb3JkaW5nIHRvIFNJWkUuCiBEZXN0cnVjdGl2ZWx5IG1vZGlmaWVzIGFuZCByZXR1cm5z IE1BUC4iCi0gICh3aGVuIGZsaXAKLSAgICAocGNhc2UtZG9saXN0IChgKCxgKCx0eXBlIC4g LGNvb3JkcykgLF9pZCAsX3BsaXN0KSBtYXApCi0gICAgICAocGNhc2UtZXhoYXVzdGl2ZSB0 eXBlCi0gICAgICAgICgncmVjdAotICAgICAgICAgKGxldCAoKHgwICgtIChjYXIgc2l6ZSkg KGNhZHIgY29vcmRzKSkpCi0gICAgICAgICAgICAgICAoeTAgKGNkYXIgY29vcmRzKSkKLSAg ICAgICAgICAgICAgICh4MSAoLSAoY2FyIHNpemUpIChjYWFyIGNvb3JkcykpKQotICAgICAg ICAgICAgICAgKHkxIChjZGRyIGNvb3JkcykpKQotICAgICAgICAgICAoc2V0Y2FyIGNvb3Jk cyAoY29ucyB4MCB5MCkpCi0gICAgICAgICAgIChzZXRjZHIgY29vcmRzIChjb25zIHgxIHkx KSkpKQotICAgICAgICAoJ2NpcmNsZQotICAgICAgICAgKHNldGYgKGNhYXIgY29vcmRzKSAo LSAoY2FyIHNpemUpIChjYWFyIGNvb3JkcykpKSkKLSAgICAgICAgKCdwb2x5Ci0gICAgICAg ICAoZG90aW1lcyAoaSAobGVuZ3RoIGNvb3JkcykpCi0gICAgICAgICAgICh3aGVuICg9IDAg KCUgaSAyKSkKLSAgICAgICAgICAgICAoYXNldCBjb29yZHMgaSAoLSAoY2FyIHNpemUpIChh cmVmIGNvb3JkcyBpKSkpKSkpKSkpCisgIChwY2FzZS1kb2xpc3QgKGAoLGAoLHR5cGUgLiAs Y29vcmRzKSAsX2lkICxfcGxpc3QpIG1hcCkKKyAgICAocGNhc2UtZXhoYXVzdGl2ZSB0eXBl CisgICAgICAoJ3JlY3QKKyAgICAgICAobGV0ICgoeDAgKC0gKGNhciBzaXplKSAoY2FkciBj b29yZHMpKSkKKyAgICAgICAgICAgICAoeTAgKGNkYXIgY29vcmRzKSkKKyAgICAgICAgICAg ICAoeDEgKC0gKGNhciBzaXplKSAoY2FhciBjb29yZHMpKSkKKyAgICAgICAgICAgICAoeTEg KGNkZHIgY29vcmRzKSkpCisgICAgICAgICAoc2V0Y2FyIGNvb3JkcyAoY29ucyB4MCB5MCkp CisgICAgICAgICAoc2V0Y2RyIGNvb3JkcyAoY29ucyB4MSB5MSkpKSkKKyAgICAgICgnY2ly Y2xlCisgICAgICAgKHNldGYgKGNhYXIgY29vcmRzKSAoLSAoY2FyIHNpemUpIChjYWFyIGNv b3JkcykpKSkKKyAgICAgICgncG9seQorICAgICAgIChkb3RpbWVzIChpIChsZW5ndGggY29v cmRzKSkKKyAgICAgICAgICh3aGVuICg9IDAgKCUgaSAyKSkKKyAgICAgICAgICAgKGFzZXQg Y29vcmRzIGkgKC0gKGNhciBzaXplKSAoYXJlZiBjb29yZHMgaSkpKSkpKSkpCiAgIG1hcCkK IAogKHByb3ZpZGUgJ2ltYWdlKQpkaWZmIC0tZ2l0IGEvdGVzdC9saXNwL2ltYWdlLXRlc3Rz LmVsIGIvdGVzdC9saXNwL2ltYWdlLXRlc3RzLmVsCmluZGV4IDZhNWYwM2UzOGEwLi4wMjA3 ODFlZmY1MCAxMDA2NDQKLS0tIGEvdGVzdC9saXNwL2ltYWdlLXRlc3RzLmVsCisrKyBiL3Rl c3QvbGlzcC9pbWFnZS10ZXN0cy5lbApAQCAtMTU4LDcgKzE1OCw3IEBAIGltYWdlLXJvdGF0 ZQogKGVydC1kZWZ0ZXN0IGltYWdlLWNyZWF0ZS1pbWFnZS13aXRoLW1hcCAoKQogICAiVGVz dCB0aGF0IGBjcmVhdGUtaW1hZ2UnIGNvcnJlY3RseSBhZGRzIDptYXAgYW5kL29yIDpvcmln aW5hbC1tYXAuIgogICAoc2tpcC11bmxlc3MgKGRpc3BsYXktaW1hZ2VzLXApKQotICAobGV0 ICgoZGF0YSAiZm9vIikKKyAgKGxldCAoKGRhdGEgIjxzdmcgd2lkdGg9XCIzMFwiIGhlaWdo dD1cIjMwXCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAw MC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIj48 L3N2Zz4iKQogICAgICAgICAobWFwICcoKChjaXJjbGUgKDEgLiAgMSkgLiAgMSkgYSkpKQog ICAgICAgICAob3JpZ2luYWwtbWFwICcoKChjaXJjbGUgKDIgLiAgMikgLiAgMikgYSkpKQog ICAgICAgICAob3JpZ2luYWwtbWFwLW90aGVyICcoKChjaXJjbGUgKDMgLiAzKSAuIDMpIGEp KSkpCkBAIC0yODIsNyArMjgyLDcgQEAgaW1hZ2UtdHJhbnNmb3JtLW1hcAogICAgICAgICAg ICAgICAgICAgICcoKChjaXJjbGUgKDEyIC4gNCkgLiAyKSAiY2lyY2xlIikKICAgICAgICAg ICAgICAgICAgICAgICgocmVjdCAoNyAuIDMpIDkgLiA4KSAicmVjdCIpCiAgICAgICAgICAg ICAgICAgICAgICAoKHBvbHkgLiBbNCA2IDIgNyAxIDJdKSAicG9seSIpKSkpCi0gICAgKHNo b3VsZCAoZXF1YWwgKGltYWdlLS1mbGlwLW1hcCAoY29weS10cmVlIG1hcCB0KSB0IGAoLHdp ZHRoIC4gLGhlaWdodCkpCisgICAgKHNob3VsZCAoZXF1YWwgKGltYWdlLS1mbGlwLW1hcCAo Y29weS10cmVlIG1hcCB0KSBgKCx3aWR0aCAuICxoZWlnaHQpKQogICAgICAgICAgICAgICAg ICAgICcoKChjaXJjbGUgKDYgLiAzKSAuIDIpICJjaXJjbGUiKQogICAgICAgICAgICAgICAg ICAgICAgKChyZWN0ICgyIC4gNikgNyAuIDgpICJyZWN0IikKICAgICAgICAgICAgICAgICAg ICAgICgocG9seSAuIFs0IDExIDMgMTMgOCAxNF0pICJwb2x5IikpKSkKQEAgLTI5MSw3ICsy OTEsNyBAQCBpbWFnZS10cmFuc2Zvcm0tbWFwCiAgICAgICA7OyBTY2FsZSBzaXplIGJlY2F1 c2UgdGhlIG1hcCBoYXMgYmVlbiBzY2FsZWQuCiAgICAgICAoaW1hZ2UtLXJvdGF0ZS1tYXAg Y29weSA5MCBgKCwoKiAyIHdpZHRoKSAuICwoKiAyIGhlaWdodCkpKQogICAgICAgOzsgU3dh cCB3aWR0aCBhbmQgaGVpZ2h0IGJlY2F1c2UgdGhlIG1hcCBoYXMgYmVlbiBmbGlwcGVkLgot ICAgICAgKGltYWdlLS1mbGlwLW1hcCBjb3B5IHQgYCgsKCogMiBoZWlnaHQpIC4gLCgqIDIg d2lkdGgpKSkKKyAgICAgIChpbWFnZS0tZmxpcC1tYXAgY29weSBgKCwoKiAyIGhlaWdodCkg LiAsKCogMiB3aWR0aCkpKQogICAgICAgKHNob3VsZCAoZXF1YWwgY29weQogICAgICAgICAg ICAgICAgICAgICAgJygoKGNpcmNsZSAoNiAuIDgpIC4gNCkgImNpcmNsZSIpCiAgICAgICAg ICAgICAgICAgICAgICAgICgocmVjdCAoMTIgLiA2KSAxNiAuIDE2KSAicmVjdCIpCg== --------------gaggvpm2T4S8Etn0SDWiFuSi--