From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: kobarity Newsgroups: gmane.emacs.bugs Subject: bug#51362: python font-lock-mode in emacs 28 seems broken Date: Mon, 18 Apr 2022 08:32:14 +0900 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="00000000000045382105dce20ed0" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="10440"; mail-complaints-to="usenet@ciao.gmane.io" To: 51362@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Apr 18 02:16:11 2022 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 1ngF3q-0002Yr-MH for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 18 Apr 2022 02:16:10 +0200 Original-Received: from localhost ([::1]:51708 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ngF3p-0005hv-2M for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 17 Apr 2022 20:16:09 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:59464) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ngF3i-0005hV-Bu for bug-gnu-emacs@gnu.org; Sun, 17 Apr 2022 20:16:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:43666) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ngF3i-0000sr-2s for bug-gnu-emacs@gnu.org; Sun, 17 Apr 2022 20:16:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ngF3h-0006j9-ST for bug-gnu-emacs@gnu.org; Sun, 17 Apr 2022 20:16:01 -0400 X-Loop: help-debbugs@gnu.org In-Reply-To: Resent-From: kobarity Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 18 Apr 2022 00:16:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 51362 X-GNU-PR-Package: emacs Original-Received: via spool by 51362-submit@debbugs.gnu.org id=B51362.165024094125826 (code B ref 51362); Mon, 18 Apr 2022 00:16:01 +0000 Original-Received: (at 51362) by debbugs.gnu.org; 18 Apr 2022 00:15:41 +0000 Original-Received: from localhost ([127.0.0.1]:37562 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ngF3M-0006iU-IW for submit@debbugs.gnu.org; Sun, 17 Apr 2022 20:15:40 -0400 Original-Received: from mail-ed1-f51.google.com ([209.85.208.51]:47084) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ngENZ-0005gK-UQ for 51362@debbugs.gnu.org; Sun, 17 Apr 2022 19:32:30 -0400 Original-Received: by mail-ed1-f51.google.com with SMTP id s25so15388183edi.13 for <51362@debbugs.gnu.org>; Sun, 17 Apr 2022 16:32:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:from:date:message-id:subject:to; bh=5nV629Grm9qQDZRqAXorQEpsfszc+qnl/Fp3a6pnuag=; b=EKonqmSuT8x7UDp4p5ZpwGo51zEvkn7rcXFDbITX4rkNsjfcWC2b747Kt36/UVxwqf ZJmGbYFWwJqDc21TqlDYhIcAR4idY6XMrqOPKZW+bqCb1gzNpFsDkc8hKtT1xPVL10L9 NYOrxfXHfDUo8JvOmFG7xiG6wvFYmaieAzP/ooBtaqVZbs7iV4BKdWA202r4Wov7AEsv 9ESyO3+cQLZXuc5+NlP0HMU61pSkWP62INkeOLXDnEJKRt/R0dIiYsrAUQsXNC3tM1Lu i48/42f/AFk+9D+WMOvhM7R7+YS+AWARJR0UAdhBO8MCao61oxbEh2jKZn+os6bnXVKX 80Bw== 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=5nV629Grm9qQDZRqAXorQEpsfszc+qnl/Fp3a6pnuag=; b=Ewvqa/xyJLh4sz06rt3lZ5TnOJ6b+J5sJn9eqCqqHfylHgSyXlD+E6C3PiD6dtpnjC 3pXNbf4zalT4hei4J1nkiCOJHlJY1kwsnxjbzAw4iQOo/9MBVXzCNdq+dRpLJ0Pm6YOZ 7rqHEx5uthz9BgAGhatlWseu27RDUos53HrLRn36TB0tFJhLXB7SsB1QEqHZUCCbCij/ YKa93obhxNaZOK4FaIjrfpvxFtNwJ2m/anyhgQG0wTASvjqyfLEvWEWMW2k3ub9lMw23 huFGUQyJmFF4SdopSd4idOXzUKAgWBnP/8zGHSz9KH/m4izJyJ3nzmk97dbLkKp85Ev4 0DEQ== X-Gm-Message-State: AOAM5323Wcl3RDCeMLjj8Q6xKQp4jlhG5ONKdz2fzgeSbp2bfjTF9WAl iORjWX+rvzROFTSJPp8yVhXPYnpDjRaLufkM4rHvxHyh99U= X-Google-Smtp-Source: ABdhPJyhNssyDtb3rp27CZX4LVT8wADjTpcAdF4jujB8FUHb4FuoM+9PrK0N7qX6hqsBuz9Km7zoz7lbDwKYOFSwFFo= X-Received: by 2002:aa7:d0c9:0:b0:41d:9137:fcea with SMTP id u9-20020aa7d0c9000000b0041d9137fceamr9833957edo.110.1650238343684; Sun, 17 Apr 2022 16:32:23 -0700 (PDT) X-Mailman-Approved-At: Sun, 17 Apr 2022 20:15:39 -0400 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" Xref: news.gmane.io gmane.emacs.bugs:230138 Archived-At: --00000000000045382105dce20ed0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, I reported a new Bug #54992 for the following bug mentioned in Message #24: - The CustomInt in Sequence[CustomInt] is highlighted =E2=80=94 this is *no= t* fixed by subsequent edits Remaining two following bugs mentioned in Message #24 and Bug #45679 are the same: - The y in y =3D x + 1 is not highlighted =E2=80=94 this is fixed by subseq= uent edits - The CustomInt in -> CustomInt is highlighted =E2=80=94 this is fixed by subsequent edits Is it better to discuss in Bug #45679? These bugs are caused by not-simple-operator matching characters including EOLs. So rx '(+ not-simple-operator)' may span multiple lines. This problem can be fixed with the following patch. Behavior of python-font-lock-assignment-matcher is same as Dario's patch, but I'm just showing another option using cl-loop. I also modified docstring. diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index c4d8b123a8..d31861dd83 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -394,7 +394,7 @@ python-rx (open-paren (or "{" "[" "(")) (close-paren (or "}" "]" ")")) (simple-operator (any ?+ ?- ?/ ?& ?^ ?~ ?| ?* ?< ?> ?=3D ?%)= ) - (not-simple-operator (not simple-operator)) + (not-simple-operator (not (or simple-operator ?\n))) (operator (or "=3D=3D" ">=3D" "is" "not" "**" "//" "<<" ">>" "<=3D" "!=3D" "+" "-" "/" "&" "^" "~" "|" "*" "<" ">" @@ -603,15 +603,15 @@ python-font-lock-keywords-level-2 (defun python-font-lock-assignment-matcher (regexp) "Font lock matcher for assignments based on REGEXP. -Return nil if REGEXP matched within a `paren' context (to avoid, -e.g., default values for arguments or passing arguments by name -being treated as assignments) or is followed by an '=3D' sign (to -avoid '=3D=3D' being treated as an assignment." +Search for next occurrence if REGEXP matched within a `paren' +context (to avoid, e.g., default values for arguments or passing +arguments by name being treated as assignments) or is followed by +an '=3D' sign (to avoid '=3D=3D' being treated as an assignment." (lambda (limit) - (let ((res (re-search-forward regexp limit t))) - (unless (or (python-syntax-context 'paren) - (equal (char-after (point)) ?=3D)) - res)))) + (cl-loop while (re-search-forward regexp limit t) + unless (or (python-syntax-context 'paren) + (equal (char-after) ?=3D)) + return t))) (defvar python-font-lock-keywords-maximum-decoration `((python--font-lock-f-strings) Please note that not-simple-operator is also used in python-info-assignment-statement-p, but the patch does not affect it. Because python-info-assignment-statement-p calls re-search-forward with BOUND argument set to (line-end-position). I wrote some tests as the attached patch. Both the above patch and the patch shown in Bug #54992 are necessary for all of the tests to pass. --00000000000045382105dce20ed0 Content-Type: application/x-patch; name="python-font-lock-tests.patch" Content-Disposition: attachment; filename="python-font-lock-tests.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l23drem20 ZGlmZiAtLWdpdCBhL3Rlc3QvbGlzcC9wcm9nbW9kZXMvcHl0aG9uLXRlc3RzLmVsIGIvdGVzdC9s aXNwL3Byb2dtb2Rlcy9weXRob24tdGVzdHMuZWwKaW5kZXggMWE2YTdkYzE3Ni4uMmEzZmFjZWFk OSAxMDA2NDQKLS0tIGEvdGVzdC9saXNwL3Byb2dtb2Rlcy9weXRob24tdGVzdHMuZWwKKysrIGIv dGVzdC9saXNwL3Byb2dtb2Rlcy9weXRob24tdGVzdHMuZWwKQEAgLTk1LDYgKzk1LDE5IEBAIHB5 dGhvbi10ZXN0cy1sb29rLWF0CiAgICAgICAgIGZvdW5kLXBvaW50CiAgICAgICAoYW5kIHJlc3Rv cmUtcG9pbnQgKGdvdG8tY2hhciBzdGFydGluZy1wb2ludCkpKSkpCiAKKyhkZWZ1biBweXRob24t dGVzdHMtYXNzZXJ0LWZhY2VzIChjb250ZW50IGZhY2VzKQorICAiQXNzZXJ0IHRoYXQgZm9udCBm YWNlcyBmb3IgQ09OVEVOVCBhcmUgZXF1YWwgdG8gRkFDRVMuIgorICAocHl0aG9uLXRlc3RzLXdp dGgtdGVtcC1idWZmZXIgY29udGVudAorICAgIChmb250LWxvY2stZW5zdXJlIG5pbCBuaWwpCisg ICAgKHNob3VsZCAoZXF1YWwgZmFjZXMgKHB5dGhvbi10ZXN0cy1nZXQtYnVmZmVyLWZhY2VzKSkp KSkKKworKGRlZnVuIHB5dGhvbi10ZXN0cy1nZXQtYnVmZmVyLWZhY2VzICgpCisgICJSZXR1cm4g YSBsaXN0IG9mIChwb3NpdGlvbiAuIGZhY2UpIGZvciBlYWNoIGZhY2UgY2hhbmdlIHBvc2l0aW9u cy4iCisgIChjbC1sb29wIGZvciBwb3MgPSAocG9pbnQtbWluKQorICAgICAgICAgICB0aGVuIChu ZXh0LXNpbmdsZS1wcm9wZXJ0eS1jaGFuZ2UgcG9zICdmYWNlKQorICAgICAgICAgICB3aGlsZSBw b3MKKyAgICAgICAgICAgY29sbGVjdCAoY29ucyBwb3MgKGdldC10ZXh0LXByb3BlcnR5IHBvcyAn ZmFjZSkpKSkKKwogKGRlZnVuIHB5dGhvbi10ZXN0cy1zZWxmLWluc2VydCAoY2hhci1vci1zdHIp CiAgICJDYWxsIGBzZWxmLWluc2VydC1jb21tYW5kJyBmb3IgY2hhcnMgaW4gQ0hBUi1PUi1TVFIu IgogICAobGV0ICgoY2hhcnMKQEAgLTIwMSw2ICsyMTQsMTUzIEBAIHB5dGhvbi1zeW50YXgtYWZ0 ZXItcHl0aG9uLWJhY2tzcGFjZQogICAgIChzaG91bGQgKHN0cmluZz0gKGJ1ZmZlci1zdHJpbmcp ICJcIlwiIikpCiAgICAgKHNob3VsZCAobnVsbCAobnRoIDMgKHN5bnRheC1wcHNzKSkpKSkpCiAK KyhlcnQtZGVmdGVzdCBweXRob24tZm9udC1sb2NrLWFzc2lnbm1lbnQtc3RhdGVtZW50LTEgKCkK KyAgKHB5dGhvbi10ZXN0cy1hc3NlcnQtZmFjZXMKKyAgICJhLCBiLCBjID0gMSwgMiwgMyIKKyAg ICcoKDEgLiBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAoMikKKyAgICAgKDQgLiBmb250 LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAoNSkKKyAgICAgKDcgLiBmb250LWxvY2stdmFyaWFi bGUtbmFtZS1mYWNlKSAoOCkpKSkKKworKGVydC1kZWZ0ZXN0IHB5dGhvbi1mb250LWxvY2stYXNz aWdubWVudC1zdGF0ZW1lbnQtMiAoKQorICAocHl0aG9uLXRlc3RzLWFzc2VydC1mYWNlcworICAg ImEsICpiLCBjID0gMSwgMiwgMywgNCwgNSIKKyAgICcoKDEgLiBmb250LWxvY2stdmFyaWFibGUt bmFtZS1mYWNlKSAoMikKKyAgICAgKDUgLiBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAo NikKKyAgICAgKDggLiBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAoOSkpKSkKKworKGVy dC1kZWZ0ZXN0IHB5dGhvbi1mb250LWxvY2stYXNzaWdubWVudC1zdGF0ZW1lbnQtMyAoKQorICAo cHl0aG9uLXRlc3RzLWFzc2VydC1mYWNlcworICAgIlthLCBiXSA9ICgxLCAyKSIKKyAgICcoKDEp CisgICAgICgyIC4gZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgKDMpCisgICAgICg1IC4g Zm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgKDYpKSkpCisKKyhlcnQtZGVmdGVzdCBweXRo b24tZm9udC1sb2NrLWFzc2lnbm1lbnQtc3RhdGVtZW50LTQgKCkKKyAgKHB5dGhvbi10ZXN0cy1h c3NlcnQtZmFjZXMKKyAgICIobFsxXSwgbFsyXSkgPSAoMTAsIDExKSIKKyAgICcoKDEpCisgICAg ICgyIC4gZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgKDMpCisgICAgICg4IC4gZm9udC1s b2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgKDkpKSkpCisKKyhlcnQtZGVmdGVzdCBweXRob24tZm9u dC1sb2NrLWFzc2lnbm1lbnQtc3RhdGVtZW50LTUgKCkKKyAgKHB5dGhvbi10ZXN0cy1hc3NlcnQt ZmFjZXMKKyAgICIoYSwgYiwgYywgKmQpID0gKngsIHkgPSA1LCA2LCA3LCA4LCA5IgorICAgJygo MSkKKyAgICAgKDIgLiBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAoMykKKyAgICAgKDUg LiBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAoNikKKyAgICAgKDggLiBmb250LWxvY2st dmFyaWFibGUtbmFtZS1mYWNlKSAoOSkKKyAgICAgKDEyIC4gZm9udC1sb2NrLXZhcmlhYmxlLW5h bWUtZmFjZSkgKDEzKQorICAgICAoMTggLiBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAo MTkpCisgICAgICgyMSAuIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpICgyMikpKSkKKwor KGVydC1kZWZ0ZXN0IHB5dGhvbi1mb250LWxvY2stYXNzaWdubWVudC1zdGF0ZW1lbnQtNiAoKQor ICAocHl0aG9uLXRlc3RzLWFzc2VydC1mYWNlcworICAgIihhLCkgPSAnZm9vJywiCisgICAnKCgx KQorICAgICAoMiAuIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpICgzKQorICAgICAoOCAu IGZvbnQtbG9jay1zdHJpbmctZmFjZSkgKDEzKSkpKQorCisoZXJ0LWRlZnRlc3QgcHl0aG9uLWZv bnQtbG9jay1hc3NpZ25tZW50LXN0YXRlbWVudC03ICgpCisgIChweXRob24tdGVzdHMtYXNzZXJ0 LWZhY2VzCisgICAiKCphLCkgPSBbJ2ZvbycsICdiYXInLCAnYmF6J10iCisgICAnKCgxKQorICAg ICAoMyAuIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpICg0KQorICAgICAoMTAgLiBmb250 LWxvY2stc3RyaW5nLWZhY2UpICgxNSkKKyAgICAgKDE3IC4gZm9udC1sb2NrLXN0cmluZy1mYWNl KSAoMjIpCisgICAgICgyNCAuIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgKDI5KSkpKQorCisoZXJ0 LWRlZnRlc3QgcHl0aG9uLWZvbnQtbG9jay1hc3NpZ25tZW50LXN0YXRlbWVudC04ICgpCisgIChw eXRob24tdGVzdHMtYXNzZXJ0LWZhY2VzCisgICAiZCA9IEQoJ2EnLCBbJ2InXSwgJ2MnKSIKKyAg ICcoKDEgLiBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAoMikKKyAgICAgKDcgLiBmb250 LWxvY2stc3RyaW5nLWZhY2UpICgxMCkKKyAgICAgKDEzIC4gZm9udC1sb2NrLXN0cmluZy1mYWNl KSAoMTYpCisgICAgICgxOSAuIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgKDIyKSkpKQorCisoZXJ0 LWRlZnRlc3QgcHl0aG9uLWZvbnQtbG9jay1hc3NpZ25tZW50LXN0YXRlbWVudC05ICgpCisgIChw eXRob24tdGVzdHMtYXNzZXJ0LWZhY2VzCisgICAiZC54LCBkLnlbMF0sICpkLnogPSAnYScsICdi JywgJ2MnLCAnZCcsICdlJyIKKyAgICcoKDEpCisgICAgICgzIC4gZm9udC1sb2NrLXZhcmlhYmxl LW5hbWUtZmFjZSkgKDQpCisgICAgICg4IC4gZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkg KDkpCisgICAgICgxNyAuIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpICgxOCkKKyAgICAg KDIxIC4gZm9udC1sb2NrLXN0cmluZy1mYWNlKSAoMjQpCisgICAgICgyNiAuIGZvbnQtbG9jay1z dHJpbmctZmFjZSkgKDI5KQorICAgICAoMzEgLiBmb250LWxvY2stc3RyaW5nLWZhY2UpICgzNCkK KyAgICAgKDM2IC4gZm9udC1sb2NrLXN0cmluZy1mYWNlKSAoMzkpCisgICAgICg0MSAuIGZvbnQt bG9jay1zdHJpbmctZmFjZSkpKSkKKworKGVydC1kZWZ0ZXN0IHB5dGhvbi1mb250LWxvY2stYXNz aWdubWVudC1zdGF0ZW1lbnQtMTAgKCkKKyAgKHB5dGhvbi10ZXN0cy1hc3NlcnQtZmFjZXMKKyAg ICJhOiBpbnQgPSA1IgorICAgJygoMSAuIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpICgy KQorICAgICAoNCAuIGZvbnQtbG9jay1idWlsdGluLWZhY2UpICg3KSkpKQorCisoZXJ0LWRlZnRl c3QgcHl0aG9uLWZvbnQtbG9jay1hc3NpZ25tZW50LXN0YXRlbWVudC0xMSAoKQorICAocHl0aG9u LXRlc3RzLWFzc2VydC1mYWNlcworICAgImI6IFR1cGxlW09wdGlvbmFsW2ludF0sIFVuaW9uW1Nl cXVlbmNlW3N0cl0sIHN0cl1dID0gKE5vbmUsICdmb28nKSIKKyAgICcoKDEgLiBmb250LWxvY2st dmFyaWFibGUtbmFtZS1mYWNlKSAoMikKKyAgICAgKDE5IC4gZm9udC1sb2NrLWJ1aWx0aW4tZmFj ZSkgKDIyKQorICAgICAoNDAgLiBmb250LWxvY2stYnVpbHRpbi1mYWNlKSAoNDMpCisgICAgICg0 NiAuIGZvbnQtbG9jay1idWlsdGluLWZhY2UpICg0OSkKKyAgICAgKDU1IC4gZm9udC1sb2NrLWNv bnN0YW50LWZhY2UpICg1OSkKKyAgICAgKDYxIC4gZm9udC1sb2NrLXN0cmluZy1mYWNlKSAoNjYp KSkpCisKKyhlcnQtZGVmdGVzdCBweXRob24tZm9udC1sb2NrLWFzc2lnbm1lbnQtc3RhdGVtZW50 LTEyICgpCisgIChweXRob24tdGVzdHMtYXNzZXJ0LWZhY2VzCisgICAiYzogQ29sbGVjdGlvbiA9 IHsxLCAyLCAzfSIKKyAgICcoKDEgLiBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAoMikp KSkKKworKGVydC1kZWZ0ZXN0IHB5dGhvbi1mb250LWxvY2stYXNzaWdubWVudC1zdGF0ZW1lbnQt MTMgKCkKKyAgKHB5dGhvbi10ZXN0cy1hc3NlcnQtZmFjZXMKKyAgICJkOiBNYXBwaW5nW2ludCwg c3RyXSA9IHsxOiAnYmFyJywgMjogJ2Jheid9IgorICAgJygoMSAuIGZvbnQtbG9jay12YXJpYWJs ZS1uYW1lLWZhY2UpICgyKQorICAgICAoMTIgLiBmb250LWxvY2stYnVpbHRpbi1mYWNlKSAoMTUp CisgICAgICgxNyAuIGZvbnQtbG9jay1idWlsdGluLWZhY2UpICgyMCkKKyAgICAgKDI4IC4gZm9u dC1sb2NrLXN0cmluZy1mYWNlKSAoMzMpCisgICAgICgzOCAuIGZvbnQtbG9jay1zdHJpbmctZmFj ZSkgKDQzKSkpKQorCisoZXJ0LWRlZnRlc3QgcHl0aG9uLWZvbnQtbG9jay1hc3NpZ25tZW50LXN0 YXRlbWVudC0xNCAoKQorICAocHl0aG9uLXRlc3RzLWFzc2VydC1mYWNlcworICAgIihhKSA9IDU7 IChiKSA9IDYiCisgICAnKCgxKQorICAgICAoMiAuIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZh Y2UpICgzKQorICAgICAoMTEgLiBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAoMTIpKSkp CisKKyhlcnQtZGVmdGVzdCBweXRob24tZm9udC1sb2NrLWFzc2lnbm1lbnQtc3RhdGVtZW50LTE1 ICgpCisgIChweXRob24tdGVzdHMtYXNzZXJ0LWZhY2VzCisgICAiW2FdID0gNSw7IFtiXSA9IDYs IgorICAgJygoMSkKKyAgICAgKDIgLiBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAoMykK KyAgICAgKDEyIC4gZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgKDEzKSkpKQorCisoZXJ0 LWRlZnRlc3QgcHl0aG9uLWZvbnQtbG9jay1hc3NpZ25tZW50LXN0YXRlbWVudC0xNiAoKQorICAo cHl0aG9uLXRlc3RzLWFzc2VydC1mYWNlcworICAgIlsqYV0gPSA1LCA2OyBbKmJdID0gNywgOCIK KyAgICcoKDEpCisgICAgICgzIC4gZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgKDQpCisg ICAgICgxNiAuIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpICgxNykpKSkKKworKGVydC1k ZWZ0ZXN0IHB5dGhvbi1mb250LWxvY2stYXNzaWdubWVudC1zdGF0ZW1lbnQtMTcgKCkKKyAgKHB5 dGhvbi10ZXN0cy1hc3NlcnQtZmFjZXMKKyAgICJDdXN0b21JbnQgPSBpbnQKKworZGVmIGYoeDog Q3VzdG9tSW50KSAtPiBDdXN0b21JbnQ6CisgICAgeSA9IHggKyAxCisgICAgeXM6IFNlcXVlbmNl W0N1c3RvbUludF0gPSBbeSwgeSArIDFdCisgICAgcmVzOiBDdXN0b21JbnQgPSBzdW0oeXMpICsg MQorICAgIHJldHVybiByZXMKKyIKKyAgICcoKDEgLiBmb250LWxvY2stdmFyaWFibGUtbmFtZS1m YWNlKSAoMTApCisgICAgICgxMyAuIGZvbnQtbG9jay1idWlsdGluLWZhY2UpICgxNikKKyAgICAg KDE4IC4gZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgKDIxKQorICAgICAoMjIgLiBmb250LWxvY2st ZnVuY3Rpb24tbmFtZS1mYWNlKSAoMjMpCisgICAgICg1NiAuIGZvbnQtbG9jay12YXJpYWJsZS1u YW1lLWZhY2UpICg1NykKKyAgICAgKDcwIC4gZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkg KDcyKQorICAgICAoMTExIC4gZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgKDExNCkKKyAg ICAgKDEyOCAuIGZvbnQtbG9jay1idWlsdGluLWZhY2UpICgxMzEpCisgICAgICgxNDQgLiBmb250 LWxvY2sta2V5d29yZC1mYWNlKSAoMTUwKSkpKQorCiAMCiA7OzsgSW5kZW50YXRpb24KIAo= --00000000000045382105dce20ed0--