From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Patrick Xarles Hayes Newsgroups: gmane.emacs.bugs Subject: bug#25123: 25.1.50; rx.el errs on character alternatives which include both ?\] and ?- Date: Tue, 6 Dec 2016 02:11:29 -0500 Message-ID: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/alternative; boundary=94eb2c05616206181f0542f81dfe X-Trace: blaine.gmane.org 1481008457 13358 195.159.176.226 (6 Dec 2016 07:14:17 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 6 Dec 2016 07:14:17 +0000 (UTC) To: 25123@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Dec 06 08:14:11 2016 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cE9x4-0002BW-Sq for geb-bug-gnu-emacs@m.gmane.org; Tue, 06 Dec 2016 08:14:11 +0100 Original-Received: from localhost ([::1]:46482 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cE9x8-0000BS-Sm for geb-bug-gnu-emacs@m.gmane.org; Tue, 06 Dec 2016 02:14:14 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:53586) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cE9x1-0000BA-Fo for bug-gnu-emacs@gnu.org; Tue, 06 Dec 2016 02:14:09 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cE9ww-0004Eq-EC for bug-gnu-emacs@gnu.org; Tue, 06 Dec 2016 02:14:07 -0500 Original-Received: from debbugs.gnu.org ([208.118.235.43]:42181) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cE9ww-0004EK-BS for bug-gnu-emacs@gnu.org; Tue, 06 Dec 2016 02:14:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1cE9ww-0001fV-3Q for bug-gnu-emacs@gnu.org; Tue, 06 Dec 2016 02:14:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Patrick Xarles Hayes Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 06 Dec 2016 07:14:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 25123 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.14810083876342 (code B ref -1); Tue, 06 Dec 2016 07:14:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 6 Dec 2016 07:13:07 +0000 Original-Received: from localhost ([127.0.0.1]:57580 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cE9w2-0001eD-OA for submit@debbugs.gnu.org; Tue, 06 Dec 2016 02:13:07 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:34042) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cE9w0-0001di-Sc for submit@debbugs.gnu.org; Tue, 06 Dec 2016 02:13:05 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cE9vt-0003rd-Lc for submit@debbugs.gnu.org; Tue, 06 Dec 2016 02:12:59 -0500 Original-Received: from lists.gnu.org ([2001:4830:134:3::11]:34192) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cE9vt-0003rX-HL for submit@debbugs.gnu.org; Tue, 06 Dec 2016 02:12:57 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:53228) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cE9vr-00007x-IH for bug-gnu-emacs@gnu.org; Tue, 06 Dec 2016 02:12:57 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cE9vo-0003pi-6H for bug-gnu-emacs@gnu.org; Tue, 06 Dec 2016 02:12:55 -0500 Original-Received: from mail-io0-f171.google.com ([209.85.223.171]:33837) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cE9vn-0003jk-VO for bug-gnu-emacs@gnu.org; Tue, 06 Dec 2016 02:12:52 -0500 Original-Received: by mail-io0-f171.google.com with SMTP id c21so589733843ioj.1 for ; Mon, 05 Dec 2016 23:12:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to; bh=DNVlQjDgT838BwZtgyBblWBCLpp7Y+mHcy3mM5lVHBs=; b=ufq7qKoZZ50QGsx/GJrDwSX0Drklf81+h/ojqspVU8H1fFd+X5PsWXTRbcVl84z/U1 JLng/Km+AMgfqnpxGb+PKMt3Cpj/DmK0Qro+x8yPKKOTBXPY7qnbYFprIWxPC7C1llUP mFJoEGx3WKJdNYr1PZyvrbyAStbZBAXAGqR+yhZs/tNHlla57+mi4yilPep8ct3XzmPW Cuy6sWxWatfOepmOoKPsUZHhGXj46WZ+Z1+wfUWeXuS2iV8j8CVanmgPN9P0XDopyu7x BjPNEakob8kF6zIhnm0QAiCdWLAem8UJpf/Tkc85ASsNWmFQ3/dLlGXOHjfNu0Z4ezWv B5Bw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=DNVlQjDgT838BwZtgyBblWBCLpp7Y+mHcy3mM5lVHBs=; b=iWVWFpSf8GG+5k2804Y8pMNDnrAT+dZtURwpIxUDTMIr5lVElZXxw0Cspl0iCMz1r1 aiU0w+PorigETnDBpBZbb14B4URdkhuzwnMA9uVygjMHR5sZlZBd/aqx/r3M5vUOEfvR azUdehuIIco7lDBCtKp301Oy+BI5Y7eFlkEAsDUMUfjHxP3v/4mj9ZMfta7yxe3wfByd TNqvPQ1ApMmxzsW512U+RXD82kWWZCmtFqCXbCDvO+HrmuT0lHiDL5zvbQsQAnzNKq+u L8V3UgaFbvGxGfkBiyIKrh89PUD1BGX5f5v0OPsVNBTeBO4IdBrM83njvuhDz3oPxG75 Hxdw== X-Gm-Message-State: AKaTC01wumdV398JJXq8qUI1Z6V/P+i6BeuKvmRqYAI8eNYFFpn11QD6hW1bAudPnIeXhHkS65Wt37/328f39A== X-Received: by 10.107.147.9 with SMTP id v9mr54359496iod.110.1481008289812; Mon, 05 Dec 2016 23:11:29 -0800 (PST) Original-Received: by 10.107.12.167 with HTTP; Mon, 5 Dec 2016 23:11:29 -0800 (PST) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 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.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:126544 Archived-At: --94eb2c05616206181f0542f81dfe Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable The following fails in both Emacs 24.3.1 and 25.1.50.1: (require 'rx) (rx-any '(char (93 . 123) (60 . 91) (45 . 58))) I rewrote `rx-any' to the following, and it seems to work (though it may be introducing new bugs I'm not noticing): (cl-defun rx-any (form &aux m s args) "\ Parse and produce code from FORM, which is `(any ARG ...)'. ARG is optional." (rx-check form) (setq args (rx-any-condense-range (apply #'nconc (mapcar #'rx-check-any (cdr form))))) (cond ;; CLOSING BRACKET ?\] ((memq ?\] args) ;; move ?\] to =C3=B0e beginning of =E2=9F=A8args=E2=9F=A9 (setq args (cons ?\] (delq ?\] args)))) ((setq m (assq ?\] args)) ;; ?\] starts a range ;; Move =C3=B0e range =C3=B0e beginning of =E2=9F=A8=E2=9F=A8args=E2= =9F=A9=E2=9F=A9 (setq args (cons m (delq m args)))) ((setq m (rassq ?\] args)) (if (eq ?^ (cdr m)) ;; delete =C3=B0e range from =E2=9F=A8args=E2=9F=A9, add ?\] and ?= ^ to =C3=B0e beginning of =E2=9F=A8args=E2=9F=A9 (setq args (append (list ?\] ?^) (delq m args))) ;; remove ?\] from =C3=B0e range (setcar m ?^) ;; add ?\] to =C3=B0e beginning of =E2=9F=A8args=E2=9F=A9 (push ?\] args))) ;; CARET AT =C3=90E BEGINNING? If so, move it elsewhere. ((or (eq (car args) ?^) (eq (car-safe (car args)) ?^)) (setq args (if (cdr args) `(,(cadr args) ,(car args) ,@(cddr args)) (nconc (rx-any-delete-from-range ?^ args) (list ?^)))))) ;; HYPHEN ?- (cond ((memq ?- args) ;; move ?- to =C3=B0e end of =E2=9F=A8args=E2=9F=A9 (setq args (append (delq ?- args) (list ?-)))) ((setq m (assq ?- args)) ;; ?- start a range (if (eq ?. (cdr m)) ;; delete =C3=B0e range from =E2=9F=A8args=E2=9F=A9, add ?. and ?-= to =C3=B0e end of =E2=9F=A8args=E2=9F=A9 (setq args (append (delq m args) (list ?. ?-))) ;; remove ?- from =C3=B0e range (setcar m ?.) ;; add ?- to =C3=B0e end of =E2=9F=A8args=E2=9F=A9 (setq args (append args (list ?-)))))) ;; some 1-char? (if (and (null (cdr args)) (numberp (car args)) (or (=3D 1 (length (setq s (regexp-quote (string (car args)))))) (and (eq (car args) ?^) ;; unnecessary predicate? (null (eq rx-parent '!))))) s (concat "[" (mapconcat (lambda (e) (cond ((numberp e) (string e)) ((consp e) (if (and (=3D (1+ (car e)) (cdr e)) ;; rx-any-condense-range should ;; prevent =C3=B0is case from happen= ing. (null (memq (car e) '(?\] ?-))) (null (memq (cdr e) '(?\] ?-)))) (string (car e) (cdr e)) (string (car e) ?- (cdr e)))) (e))) args nil) "]"))) In GNU Emacs 25.1.50.1 (x86_64-unknown-linux-gnu, GTK+ Version 2.24.23) of 2016-04-01 built on cthulu Windowing system distributor 'The X.Org Foundation', version 11.0.11501000 System Description: Ubuntu 14.04.4 LTS Configured features: XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GCONF GSETTINGS NOTIFY ACL GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS GTK2 X11 Important settings: value of $LC_COLLATE: POSIX value of $LC_MONETARY: en_US.UTF-8 value of $LC_NUMERIC: en_US.UTF-8 value of $LC_TIME: en_US.UTF-8 value of $LANG: en_US.UTF-8 value of $XMODIFIERS: @im=3Dibus locale-coding-system: utf-8-unix Major mode: Lisp Interaction Minor modes in effect: tooltip-mode: t global-eldoc-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t line-number-mode: t transient-mark-mode: t Recent messages: Back to top level rx "[]-{.-:<-[-]" uncompressing rx.el.gz...done Mark saved where search started Mark set Quit rx-any Undo! [5 times] Quit Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug message dired dired-loaddefs format-spec rfc822 mml mml-sec password-cache epa derived epg epg-config gnus-util rmail rmail-loaddefs mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils misearch multi-isearch jka-compr thingatpt find-func cl-macs gv rx help-mode easymenu cl-loaddefs pcase cl-lib debug time-date mule-util tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list newcomment elisp-mode lisp-mode prog-mode register page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese charscript case-table epa-hook jka-cmpr-hook help simple abbrev obarray minibuffer cl-preloaded nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote dbusbind inotify dynamic-setting system-font-setting font-render-setting move-toolbar gtk x-toolkit x multi-tty make-network-process emacs) Memory information: ((conses 16 98843 7545) (symbols 48 20526 0) (miscs 40 66 232) (strings 32 17396 4397) (string-bytes 1 516394) (vectors 16 13017) (vector-slots 8 436246 5148) (floats 8 167 222) (intervals 56 1138 261) (buffers 976 13) (heap 1024 27331 958)) --=20 Patrick Xarles Hayes --94eb2c05616206181f0542f81dfe Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGJyPlRoZSBmb2xsb3dpbmcgZmFpbHMgaW4gYm90aCBFbWFjcyAyNC4z LjEgYW5kIDxhIGhyZWY9Imh0dHA6Ly8yNS4xLjUwLjEiPjI1LjEuNTAuMTwvYT46PGJyPjxicj4o cmVxdWlyZSAmIzM5O3J4KTxicj4ocngtYW55ICYjMzk7KGNoYXIgKDkzIC4gMTIzKSAoNjAgLiA5 MSkgKDQ1IC4gNTgpKSk8YnI+PGJyPkkgcmV3cm90ZSBgcngtYW55JiMzOTsgdG8gdGhlIGZvbGxv d2luZywgYW5kIGl0IHNlZW1zIHRvIHdvcmsgKHRob3VnaCBpdCBtYXk8YnI+YmUgaW50cm9kdWNp bmcgbmV3IGJ1Z3MgSSYjMzk7bSBub3Qgbm90aWNpbmcpOjxicj48YnI+KGNsLWRlZnVuIHJ4LWFu eSAoZm9ybSAmYW1wO2F1eCBtIHMgYXJncykgJnF1b3Q7XDxicj5QYXJzZSBhbmQgcHJvZHVjZSBj b2RlIGZyb20gRk9STSwgd2hpY2ggaXMgYChhbnkgQVJHIC4uLikmIzM5Oy48YnI+QVJHIGlzIG9w dGlvbmFsLiZxdW90Ozxicj7CoCAocngtY2hlY2sgZm9ybSk8YnI+wqAgKHNldHEgYXJncyAocngt YW55LWNvbmRlbnNlLXJhbmdlPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChhcHBseSAj JiMzOTtuY29uYzxicj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICht YXBjYXIgIyYjMzk7cngtY2hlY2stYW55IChjZHIgZm9ybSkpKSkpPGJyPsKgIChjb25kPGJyPjxi cj7CoMKgwqAgOzsgQ0xPU0lORyBCUkFDS0VUID9cXTxicj7CoMKgwqAgKChtZW1xID9cXSBhcmdz KTxicj7CoMKgwqDCoCA7OyBtb3ZlID9cXSB0byDDsGUgYmVnaW5uaW5nIG9mIOKfqGFyZ3Pin6k8 YnI+wqDCoMKgwqAgKHNldHEgYXJncyAoY29ucyA/XF0gKGRlbHEgP1xdIGFyZ3MpKSkpPGJyPsKg wqDCoCAoKHNldHEgbSAoYXNzcSA/XF0gYXJncykpPGJyPsKgwqDCoMKgIDs7ID9cXSBzdGFydHMg YSByYW5nZTxicj7CoMKgwqDCoCA7OyBNb3ZlIMOwZSByYW5nZSDDsGUgYmVnaW5uaW5nIG9mIOKf qOKfqGFyZ3Pin6nin6k8YnI+wqDCoMKgwqAgKHNldHEgYXJncyAoY29ucyBtIChkZWxxIG0gYXJn cykpKSk8YnI+wqDCoMKgICgoc2V0cSBtIChyYXNzcSA/XF0gYXJncykpPGJyPsKgwqDCoMKgIChp ZiAoZXEgP14gKGNkciBtKSk8YnI+wqDCoMKgwqDCoMKgwqDCoCA7OyBkZWxldGUgw7BlIHJhbmdl IGZyb20g4p+oYXJnc+KfqSwgYWRkID9cXSBhbmQgP14gdG8gw7BlIGJlZ2lubmluZyBvZiDin6hh cmdz4p+pPGJyPsKgwqDCoMKgwqDCoMKgwqAgKHNldHEgYXJncyAoYXBwZW5kIChsaXN0ID9cXSA/ XikgKGRlbHEgbSBhcmdzKSkpPGJyPsKgwqDCoMKgwqDCoMKgwqAgOzsgcmVtb3ZlID9cXSBmcm9t IMOwZSByYW5nZTxicj7CoMKgwqDCoMKgwqDCoMKgIChzZXRjYXIgbSA/Xik8YnI+wqDCoMKgwqDC oMKgwqDCoCA7OyBhZGQgP1xdIHRvIMOwZSBiZWdpbm5pbmcgb2Yg4p+oYXJnc+KfqTxicj7CoMKg wqDCoMKgwqDCoMKgIChwdXNoID9cXSBhcmdzKSkpPGJyPjxicj7CoMKgwqAgOzsgQ0FSRVQgQVQg w5BFIEJFR0lOTklORz8gSWYgc28sIG1vdmUgaXQgZWxzZXdoZXJlLjxicj7CoMKgwqAgKChvciAo ZXEgKGNhciBhcmdzKSA/Xik8YnI+wqDCoMKgwqDCoMKgwqDCoCAoZXEgKGNhci1zYWZlIChjYXIg YXJncykpID9eKSk8YnI+wqDCoMKgwqAgKHNldHEgYXJncyAoaWYgKGNkciBhcmdzKTxicj7CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBgKCwoY2FkciBhcmdzKSAsKGNhciBh cmdzKSAsQChjZGRyIGFyZ3MpKTxicj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAobmNvbmMgKHJ4LWFueS1kZWxldGUtZnJvbS1yYW5nZSA/XiBhcmdzKTxicj7CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChsaXN0ID9eKSkp KSkpPGJyPjxicj7CoCA7OyBIWVBIRU4gPy08YnI+wqAgKGNvbmQ8YnI+wqDCoMKgICgobWVtcSA/ LSBhcmdzKTxicj7CoMKgwqDCoCA7OyBtb3ZlID8tIHRvIMOwZSBlbmQgb2Yg4p+oYXJnc+KfqTxi cj7CoMKgwqDCoCAoc2V0cSBhcmdzIChhcHBlbmQgKGRlbHEgPy0gYXJncykgKGxpc3QgPy0pKSkp PGJyPsKgwqDCoCAoKHNldHEgbSAoYXNzcSA/LSBhcmdzKSk8YnI+wqDCoMKgwqAgOzsgPy0gc3Rh cnQgYSByYW5nZTxicj7CoMKgwqDCoCAoaWYgKGVxID8uIChjZHIgbSkpPGJyPsKgwqDCoMKgwqDC oMKgwqAgOzsgZGVsZXRlIMOwZSByYW5nZSBmcm9tIOKfqGFyZ3Pin6ksIGFkZCA/LiBhbmQgPy0g dG8gw7BlIGVuZCBvZiDin6hhcmdz4p+pPGJyPsKgwqDCoMKgwqDCoMKgwqAgKHNldHEgYXJncyAo YXBwZW5kIChkZWxxIG0gYXJncykgKGxpc3QgPy4gPy0pKSk8YnI+wqDCoMKgwqDCoMKgwqDCoCA7 OyByZW1vdmUgPy0gZnJvbSDDsGUgcmFuZ2U8YnI+wqDCoMKgwqDCoMKgwqDCoCAoc2V0Y2FyIG0g Py4pPGJyPsKgwqDCoMKgwqDCoMKgwqAgOzsgYWRkID8tIHRvIMOwZSBlbmQgb2Yg4p+oYXJnc+Kf qTxicj7CoMKgwqDCoMKgwqDCoMKgIChzZXRxIGFyZ3MgKGFwcGVuZCBhcmdzIChsaXN0ID8tKSkp KSkpPGJyPjxicj7CoCA7OyBzb21lIDEtY2hhcj88YnI+wqAgKGlmIChhbmQgKG51bGwgKGNkciBh cmdzKSk8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqAgKG51bWJlcnAgKGNhciBhcmdzKSk8YnI+wqDC oMKgwqDCoMKgwqDCoMKgwqAgKG9yICg9IDEgKGxlbmd0aCAoc2V0cSBzIChyZWdleHAtcXVvdGUg KHN0cmluZyAoY2FyIGFyZ3MpKSkpKSk8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAo YW5kIChlcSAoY2FyIGFyZ3MpID9eKSA7OyB1bm5lY2Vzc2FyeSBwcmVkaWNhdGU/PGJyPsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChudWxsIChlcSByeC1wYXJlbnQgJiMz OTshKSkpKSk8YnI+wqDCoMKgwqDCoCBzPGJyPsKgwqDCoMKgwqAgKGNvbmNhdCAmcXVvdDtbJnF1 b3Q7PGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChtYXBjb25jYXQ8YnI+wqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAobGFtYmRhIChlKSAoY29uZDxicj7CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoKG51bWJlcnAgZSkgKHN0 cmluZyBlKSk8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKChjb25zcCBlKTxicj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChpZiAoYW5kICg9ICgxKyAoY2FyIGUpKSAoY2Ry IGUpKTxicj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDs7IHJ4LWFueS1jb25kZW5zZS1yYW5nZSBzaG91 bGQ8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA7OyBwcmV2ZW50IMOwaXMgY2FzZSBmcm9tIGhhcHBl bmluZy48YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAobnVsbCAobWVtcSAoY2FyIGUpICYjMzk7KD9c XSA/LSkpKTxicj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChudWxsIChtZW1xIChjZHIgZSkgJiMzOTso P1xdID8tKSkpKTxicj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHN0cmluZyAoY2FyIGUpIChjZHIgZSkpPGJyPsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAoc3RyaW5nIChjYXIgZSkgPy0gKGNkciBlKSkpKTxicj7CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoZSkpKTxicj7CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGFyZ3M8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBu aWwpPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZxdW90O10mcXVvdDspKSk8YnI+PGJy Pjxicj48YnI+SW4gR05VIEVtYWNzIDI1LjEuNTAuMSAoeDg2XzY0LXVua25vd24tbGludXgtZ251 LCBHVEsrIFZlcnNpb24gMi4yNC4yMyk8YnI+wqBvZiAyMDE2LTA0LTAxIGJ1aWx0IG9uIGN0aHVs dTxicj5XaW5kb3dpbmcgc3lzdGVtIGRpc3RyaWJ1dG9yICYjMzk7VGhlIFguT3JnIEZvdW5kYXRp b24mIzM5OywgdmVyc2lvbiAxMS4wLjExNTAxMDAwPGJyPlN5c3RlbSBEZXNjcmlwdGlvbjrCoMKg wqAgVWJ1bnR1IDE0LjA0LjQgTFRTPGJyPjxicj5Db25maWd1cmVkIGZlYXR1cmVzOjxicj5YUE0g SlBFRyBUSUZGIEdJRiBQTkcgUlNWRyBJTUFHRU1BR0lDSyBTT1VORCBHUE0gREJVUyBHQ09ORiBH U0VUVElOR1M8YnI+Tk9USUZZIEFDTCBHTlVUTFMgTElCWE1MMiBGUkVFVFlQRSBNMTdOX0ZMVCBM SUJPVEYgWEZUIFpMSUI8YnI+VE9PTEtJVF9TQ1JPTExfQkFSUyBHVEsyIFgxMTxicj48YnI+SW1w b3J0YW50IHNldHRpbmdzOjxicj7CoCB2YWx1ZSBvZiAkTENfQ09MTEFURTogUE9TSVg8YnI+wqAg dmFsdWUgb2YgJExDX01PTkVUQVJZOiBlbl9VUy5VVEYtODxicj7CoCB2YWx1ZSBvZiAkTENfTlVN RVJJQzogZW5fVVMuVVRGLTg8YnI+wqAgdmFsdWUgb2YgJExDX1RJTUU6IGVuX1VTLlVURi04PGJy PsKgIHZhbHVlIG9mICRMQU5HOiBlbl9VUy5VVEYtODxicj7CoCB2YWx1ZSBvZiAkWE1PRElGSUVS UzogQGltPWlidXM8YnI+wqAgbG9jYWxlLWNvZGluZy1zeXN0ZW06IHV0Zi04LXVuaXg8YnI+PGJy Pk1ham9yIG1vZGU6IExpc3AgSW50ZXJhY3Rpb248YnI+PGJyPk1pbm9yIG1vZGVzIGluIGVmZmVj dDo8YnI+wqAgdG9vbHRpcC1tb2RlOiB0PGJyPsKgIGdsb2JhbC1lbGRvYy1tb2RlOiB0PGJyPsKg IGVsZWN0cmljLWluZGVudC1tb2RlOiB0PGJyPsKgIG1vdXNlLXdoZWVsLW1vZGU6IHQ8YnI+wqAg dG9vbC1iYXItbW9kZTogdDxicj7CoCBtZW51LWJhci1tb2RlOiB0PGJyPsKgIGZpbGUtbmFtZS1z aGFkb3ctbW9kZTogdDxicj7CoCBnbG9iYWwtZm9udC1sb2NrLW1vZGU6IHQ8YnI+wqAgZm9udC1s b2NrLW1vZGU6IHQ8YnI+wqAgYmxpbmstY3Vyc29yLW1vZGU6IHQ8YnI+wqAgYXV0by1jb21wb3Np dGlvbi1tb2RlOiB0PGJyPsKgIGF1dG8tZW5jcnlwdGlvbi1tb2RlOiB0PGJyPsKgIGF1dG8tY29t cHJlc3Npb24tbW9kZTogdDxicj7CoCBsaW5lLW51bWJlci1tb2RlOiB0PGJyPsKgIHRyYW5zaWVu dC1tYXJrLW1vZGU6IHQ8YnI+PGJyPlJlY2VudCBtZXNzYWdlczo8YnI+QmFjayB0byB0b3AgbGV2 ZWw8YnI+cng8YnI+JnF1b3Q7W10tey4tOiZsdDstWy1dJnF1b3Q7PGJyPnVuY29tcHJlc3Npbmcg cnguZWwuZ3ouLi5kb25lPGJyPk1hcmsgc2F2ZWQgd2hlcmUgc2VhcmNoIHN0YXJ0ZWQ8YnI+TWFy ayBzZXQ8YnI+UXVpdDxicj5yeC1hbnk8YnI+VW5kbyEgWzUgdGltZXNdPGJyPlF1aXQ8YnI+PGJy PkxvYWQtcGF0aCBzaGFkb3dzOjxicj5Ob25lIGZvdW5kLjxicj48YnI+RmVhdHVyZXM6PGJyPihz aGFkb3cgc29ydCBtYWlsLWV4dHIgZW1hY3NidWcgbWVzc2FnZSBkaXJlZCBkaXJlZC1sb2FkZGVm cyBmb3JtYXQtc3BlYzxicj5yZmM4MjIgbW1sIG1tbC1zZWMgcGFzc3dvcmQtY2FjaGUgZXBhIGRl cml2ZWQgZXBnIGVwZy1jb25maWcgZ251cy11dGlsPGJyPnJtYWlsIHJtYWlsLWxvYWRkZWZzIG1t LWRlY29kZSBtbS1ib2RpZXMgbW0tZW5jb2RlIG1haWwtcGFyc2UgcmZjMjIzMTxicj5tYWlsYWJi cmV2IGdtbS11dGlscyBtYWlsaGVhZGVyIHNlbmRtYWlsIHJmYzIwNDcgcmZjMjA0NSBpZXRmLWRy dW1zPGJyPm1tLXV0aWwgbWFpbC1wcnN2ciBtYWlsLXV0aWxzIG1pc2VhcmNoIG11bHRpLWlzZWFy Y2ggamthLWNvbXByIHRoaW5nYXRwdDxicj5maW5kLWZ1bmMgY2wtbWFjcyBndiByeCBoZWxwLW1v ZGUgZWFzeW1lbnUgY2wtbG9hZGRlZnMgcGNhc2UgY2wtbGliPGJyPmRlYnVnIHRpbWUtZGF0ZSBt dWxlLXV0aWwgdG9vbHRpcCBlbGRvYyBlbGVjdHJpYyB1bmlxdWlmeSBlZGlmZi1ob29rPGJyPnZj LWhvb2tzIGxpc3AtZmxvYXQtdHlwZSBtd2hlZWwgdGVybS94LXdpbiB4LXdpbiB0ZXJtL2NvbW1v bi13aW4geC1kbmQ8YnI+dG9vbC1iYXIgZG5kIGZvbnRzZXQgaW1hZ2UgcmVnZXhwLW9wdCBmcmlu Z2UgdGFidWxhdGVkLWxpc3QgbmV3Y29tbWVudDxicj5lbGlzcC1tb2RlIGxpc3AtbW9kZSBwcm9n LW1vZGUgcmVnaXN0ZXIgcGFnZSBtZW51LWJhciByZm4tZXNoYWRvdyB0aW1lcjxicj5zZWxlY3Qg c2Nyb2xsLWJhciBtb3VzZSBqaXQtbG9jayBmb250LWxvY2sgc3ludGF4IGZhY2VtZW51IGZvbnQt Y29yZTxicj50ZXJtL3R0eS1jb2xvcnMgZnJhbWUgY2wtZ2VuZXJpYyBjaGFtIGdlb3JnaWFuIHV0 Zi04LWxhbmcgbWlzYy1sYW5nPGJyPnZpZXRuYW1lc2UgdGliZXRhbiB0aGFpIHRhaS12aWV0IGxh byBrb3JlYW4gamFwYW5lc2UgZXVjanAtbXMgY3A1MTkzMjxicj5oZWJyZXcgZ3JlZWsgcm9tYW5p YW4gc2xvdmFrIGN6ZWNoIGV1cm9wZWFuIGV0aGlvcGljIGluZGlhbiBjeXJpbGxpYzxicj5jaGlu ZXNlIGNoYXJzY3JpcHQgY2FzZS10YWJsZSBlcGEtaG9vayBqa2EtY21wci1ob29rIGhlbHAgc2lt cGxlIGFiYnJldjxicj5vYmFycmF5IG1pbmlidWZmZXIgY2wtcHJlbG9hZGVkIG5hZHZpY2UgbG9h ZGRlZnMgYnV0dG9uIGZhY2VzIGN1cy1mYWNlPGJyPm1hY3JvZXhwIGZpbGVzIHRleHQtcHJvcGVy dGllcyBvdmVybGF5IHNoYTEgbWQ1IGJhc2U2NCBmb3JtYXQgZW52PGJyPmNvZGUtcGFnZXMgbXVs ZSBjdXN0b20gd2lkZ2V0IGhhc2h0YWJsZS1wcmludC1yZWFkYWJsZSBiYWNrcXVvdGU8YnI+ZGJ1 c2JpbmQgaW5vdGlmeSBkeW5hbWljLXNldHRpbmcgc3lzdGVtLWZvbnQtc2V0dGluZyBmb250LXJl bmRlci1zZXR0aW5nPGJyPm1vdmUtdG9vbGJhciBndGsgeC10b29sa2l0IHggbXVsdGktdHR5IG1h a2UtbmV0d29yay1wcm9jZXNzIGVtYWNzKTxicj48YnI+TWVtb3J5IGluZm9ybWF0aW9uOjxicj4o KGNvbnNlcyAxNiA5ODg0MyA3NTQ1KTxicj7CoChzeW1ib2xzIDQ4IDIwNTI2IDApPGJyPsKgKG1p c2NzIDQwIDY2IDIzMik8YnI+wqAoc3RyaW5ncyAzMiAxNzM5NiA0Mzk3KTxicj7CoChzdHJpbmct Ynl0ZXMgMSA1MTYzOTQpPGJyPsKgKHZlY3RvcnMgMTYgMTMwMTcpPGJyPsKgKHZlY3Rvci1zbG90 cyA4IDQzNjI0NiA1MTQ4KTxicj7CoChmbG9hdHMgOCAxNjcgMjIyKTxicj7CoChpbnRlcnZhbHMg NTYgMTEzOCAyNjEpPGJyPsKgKGJ1ZmZlcnMgOTc2IDEzKTxicj7CoChoZWFwIDEwMjQgMjczMzEg OTU4KSk8YnI+PGJyIGNsZWFyPSJhbGwiPjxicj4tLSA8YnI+PGRpdiBjbGFzcz0iZ21haWxfc2ln bmF0dXJlIj5QYXRyaWNrIFhhcmxlcyBIYXllczxicj48YnI+PGJyPjxicj48L2Rpdj4NCjwvZGl2 Pg0K --94eb2c05616206181f0542f81dfe--