Merge branch 'master' into xwidget
This commit is contained in:
commit
69815dfe37
95 changed files with 3219 additions and 1875 deletions
31
ChangeLog
31
ChangeLog
|
@ -1,12 +1,31 @@
|
|||
2015-01-28 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Merge from gnulib and try to repair bad merge
|
||||
This attempts to repair problems introduced by the bad merge
|
||||
5491fd1098d27b3ba3db054076b9ab60fb3558dc. The easiest way for me
|
||||
to fix the badly-merged gnulib files was to run
|
||||
'admin/merge-gnulib', so I did that, which also imported the
|
||||
following changes:
|
||||
* build-aux/update-copyright, m4/gnulib.m4:
|
||||
Update from gnulib, incorporating:
|
||||
2015-01-15 time: port to MinGW32 3.21
|
||||
2015-01-15 update-copyright: apply to self
|
||||
2015-01-11 update-copyright: recognize groff's \(co marker
|
||||
|
||||
2015-01-28 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* configure.ac (HAVE_W32): Abort with error message if
|
||||
--without-toolkit-scroll-bars was specified. See
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00525.html
|
||||
for the details.
|
||||
|
||||
2015-01-27 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Port autogen.sh hook creation to Apple Git
|
||||
Port autogen.sh hook creation to private templates
|
||||
* autogen.sh: Do not assume that the hook samples exist.
|
||||
This ports to git version 1.9.3 (Apple Git-50).
|
||||
For some reason Apple decided to populate the git hooks directory
|
||||
in a different way from the way that standard Git does it.
|
||||
The downside is that patch applications won't be checked on Apple,
|
||||
but that's better than autogen.sh failing.
|
||||
This ports to developers who override templatedir in their Git
|
||||
configuration. The downside is that patch applications won't be
|
||||
checked, but that's better than autogen.sh failing.
|
||||
Problem reported by Sam Steingold in:
|
||||
http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00898.html
|
||||
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2015-01-28 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* update_autogen (commit): Prepend "# " to commit message.
|
||||
|
||||
2015-01-24 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Fix a couple of AM_V_GEN bugs
|
||||
|
|
|
@ -228,7 +228,7 @@ commit ()
|
|||
|
||||
echo "Committing..."
|
||||
|
||||
$vcs commit -m "Auto-commit of $type files." "$@" || return $?
|
||||
$vcs commit -m "# Auto-commit of $type files." "$@" || return $?
|
||||
|
||||
[ "$vcs" = "git" ] && {
|
||||
$vcs push || return $?
|
||||
|
|
|
@ -3,7 +3,7 @@ eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" ${1+"$@"}'
|
|||
if 0;
|
||||
# Update an FSF copyright year list to include the current year.
|
||||
|
||||
my $VERSION = '2013-01-03.09:41'; # UTC
|
||||
my $VERSION = '2015-01-15.20:53'; # UTC
|
||||
|
||||
# Copyright (C) 2009-2015 Free Software Foundation, Inc.
|
||||
#
|
||||
|
@ -124,7 +124,7 @@ use strict;
|
|||
use warnings;
|
||||
|
||||
my $copyright_re = 'Copyright';
|
||||
my $circle_c_re = '(?:\([cC]\)|@copyright{}|©)';
|
||||
my $circle_c_re = '(?:\([cC]\)|@copyright{}|\\\\\(co|©)';
|
||||
my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER};
|
||||
$holder ||= 'Free Software Foundation, Inc.';
|
||||
my $prefix_max = 5;
|
||||
|
|
|
@ -1940,6 +1940,9 @@ CM_OBJ="cm.o"
|
|||
XARGS_LIMIT=
|
||||
if test "${HAVE_W32}" = "yes"; then
|
||||
AC_DEFINE(HAVE_NTGUI, 1, [Define to use native MS Windows GUI.])
|
||||
if test "$with_toolkit_scroll_bars" = "no"; then
|
||||
AC_MSG_ERROR([Non-toolkit scroll bars are not implemented for w32 build.])
|
||||
fi
|
||||
AC_CHECK_TOOL(WINDRES, [windres],
|
||||
[AC_MSG_ERROR([No resource compiler found.])])
|
||||
W32_OBJ="w32fns.o w32menu.o w32reg.o w32font.o w32term.o"
|
||||
|
|
|
@ -1,3 +1,15 @@
|
|||
2015-01-28 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* cmdargs.texi (Action Arguments): Clarify into which buffer
|
||||
'--insert' inserts. (Bug#19694)
|
||||
|
||||
* programs.texi (Custom C Indent): Fix a typo. (Bug#19647)
|
||||
|
||||
2015-01-27 Ivan Shmakov <ivan@siamics.net>
|
||||
|
||||
* files.texi (File Archives): Document "I" for tar-new-entry.
|
||||
(Bug#19274)
|
||||
|
||||
2014-12-31 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Less 'make' chatter for Emacs doc
|
||||
|
|
|
@ -165,9 +165,12 @@ Evaluate Lisp expression @var{expression}.
|
|||
@item --insert=@var{file}
|
||||
@opindex --insert
|
||||
@cindex insert file contents, command-line argument
|
||||
Insert the contents of @var{file} into the @file{*scratch*} buffer
|
||||
(@pxref{Lisp Interaction}). This is like what @kbd{M-x insert-file}
|
||||
does (@pxref{Misc File Ops}).
|
||||
Insert the contents of @var{file} into the buffer that is current when
|
||||
this command-line argument is processed. Usually, this is the
|
||||
@file{*scratch*} buffer (@pxref{Lisp Interaction}), but if arguments
|
||||
earlier on the command line visit files or switch buffers, that might
|
||||
be a different buffer. The effect of this command-line argument is
|
||||
like what @kbd{M-x insert-file} does (@pxref{Misc File Ops}).
|
||||
|
||||
@item --kill
|
||||
@opindex --kill
|
||||
|
|
|
@ -1689,6 +1689,13 @@ likewise. @kbd{v} extracts a file into a buffer in View mode
|
|||
another window, so you could edit the file and operate on the archive
|
||||
simultaneously.
|
||||
|
||||
The @kbd{I} key adds a new (regular) file to the archive. The file
|
||||
is initially empty, but can readily be edited using the commands
|
||||
above. The command inserts the new file before the current one, so
|
||||
that using it on the topmost line of the Tar buffer makes the new file
|
||||
the first one in the archive, and using it at the end of the buffer
|
||||
makes it the last one.
|
||||
|
||||
@kbd{d} marks a file for deletion when you later use @kbd{x}, and
|
||||
@kbd{u} unmarks a file, as in Dired. @kbd{C} copies a file from the
|
||||
archive to disk and @kbd{R} renames a file within the archive.
|
||||
|
|
|
@ -546,7 +546,7 @@ your selected @dfn{style} with the syntactic construct and adds this
|
|||
onto the indentation of the @dfn{anchor statement}.
|
||||
|
||||
@table @kbd
|
||||
@item C-c . @key{RET} @var{style} @key{RET}
|
||||
@item C-c . @var{style} @key{RET}
|
||||
Select a predefined style @var{style} (@code{c-set-style}).
|
||||
@end table
|
||||
|
||||
|
|
|
@ -1,3 +1,26 @@
|
|||
2015-01-28 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* searching.texi (Regexp Search): Add a cross-reference to "Syntax
|
||||
of Regexps". (Bug#19668)
|
||||
|
||||
2015-01-28 Daniel Koning <dk@danielkoning.com> (tiny change)
|
||||
|
||||
* commands.texi (Drag Events, Motion Events, Event Examples)
|
||||
(Accessing Mouse): Describe actual range of values that mouse
|
||||
position objects can have.
|
||||
|
||||
2015-01-28 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* display.texi (Manipulating Buttons): Explain more about the
|
||||
'action' property. (Bug#19628)
|
||||
|
||||
* text.texi (Clickable Text): Improve indexing. (Bug#19629)
|
||||
|
||||
* variables.texi (Creating Buffer-Local): Improve indexing. (Bug#19608)
|
||||
|
||||
* frames.texi (Display Feature Testing): Make the description of
|
||||
x-server-version and x-server-vendor less X-specific. (Bug#19502)
|
||||
|
||||
2015-01-15 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* streams.texi (Input Functions): Document 'set-binary-mode'.
|
||||
|
|
|
@ -1489,8 +1489,10 @@ prefix @samp{drag-}. For example, dragging the mouse with button 2
|
|||
held down generates a @code{drag-mouse-2} event. The second and third
|
||||
elements of the event give the starting and ending position of the
|
||||
drag, as mouse position lists (@pxref{Click Events}). You can access
|
||||
the second element of any mouse event in the same way, with no need to
|
||||
distinguish drag events from others.
|
||||
the second element of any mouse event in the same way. However, the
|
||||
drag event may end outside the boundaries of the frame that was
|
||||
initially selected. In that case, the third element's position list
|
||||
contains that frame in place of a window.
|
||||
|
||||
The @samp{drag-} prefix follows the modifier key prefixes such as
|
||||
@samp{C-} and @samp{M-}.
|
||||
|
@ -1635,7 +1637,10 @@ represented by lists that look like this:
|
|||
|
||||
@noindent
|
||||
@var{position} is a mouse position list (@pxref{Click Events}),
|
||||
specifying the current position of the mouse cursor.
|
||||
specifying the current position of the mouse cursor. As with the
|
||||
end-position of a drag event, this position list may represent a
|
||||
location outside the boundaries of the initially selected frame, in
|
||||
which case the list contains that frame in place of a window.
|
||||
|
||||
The special form @code{track-mouse} enables generation of motion
|
||||
events within its body. Outside of @code{track-mouse} forms, Emacs
|
||||
|
@ -1850,6 +1855,14 @@ into another window. That produces a pair of events like these:
|
|||
-453816))
|
||||
@end smallexample
|
||||
|
||||
The frame with input focus might not take up the entire screen, and
|
||||
the user might move the mouse outside the scope of the frame. Inside
|
||||
the @code{track-mouse} special form, that produces an event like this:
|
||||
|
||||
@smallexample
|
||||
(mouse-movement (#<frame *ielm* 0x102849a30> nil (563 . 205) 532301936))
|
||||
@end smallexample
|
||||
|
||||
To handle a SIGUSR1 signal, define an interactive function, and
|
||||
bind it to the @code{signal usr1} event sequence:
|
||||
|
||||
|
@ -2014,7 +2027,9 @@ Events}); and @code{nil} otherwise.
|
|||
various parts of it:
|
||||
|
||||
@defun posn-window position
|
||||
Return the window that @var{position} is in.
|
||||
Return the window that @var{position} is in. If @var{position}
|
||||
represents a location outside the frame where the event was initiated,
|
||||
return that frame instead.
|
||||
@end defun
|
||||
|
||||
@defun posn-area position
|
||||
|
|
|
@ -5735,10 +5735,12 @@ Set @var{button}'s @var{prop} property to @var{val}.
|
|||
@end defun
|
||||
|
||||
@defun button-activate button &optional use-mouse-action
|
||||
Call @var{button}'s @code{action} property (i.e., invoke it). If
|
||||
@var{use-mouse-action} is non-@code{nil}, try to invoke the button's
|
||||
@code{mouse-action} property instead of @code{action}; if the button
|
||||
has no @code{mouse-action} property, use @code{action} as normal.
|
||||
Call @var{button}'s @code{action} property (i.e., invoke the function
|
||||
that is the value of that property, passing it the single argument
|
||||
@var{button}). If @var{use-mouse-action} is non-@code{nil}, try to
|
||||
invoke the button's @code{mouse-action} property instead of
|
||||
@code{action}; if the button has no @code{mouse-action} property, use
|
||||
@code{action} as normal.
|
||||
@end defun
|
||||
|
||||
@defun button-label button
|
||||
|
|
|
@ -2782,20 +2782,26 @@ colors).
|
|||
This function returns the number of color cells the screen supports.
|
||||
@end defun
|
||||
|
||||
These functions obtain additional information specifically
|
||||
about X displays.
|
||||
These functions obtain additional information about the window
|
||||
system in use where Emacs shows the specified @var{display}. (Their
|
||||
names begin with @code{x-} for historical reasons.)
|
||||
|
||||
@defun x-server-version &optional display
|
||||
This function returns the list of version numbers of the X server
|
||||
running the display. The value is a list of three integers: the major
|
||||
and minor version numbers of the X protocol, and the
|
||||
distributor-specific release number of the X server software itself.
|
||||
This function returns the list of version numbers of the GUI window
|
||||
system running on @var{display}, such as the X server on GNU and Unix
|
||||
systems. The value is a list of three integers: the major and minor
|
||||
version numbers of the protocol, and the distributor-specific release
|
||||
number of the window system software itself. On GNU and Unix systems,
|
||||
these are normally the version of the X protocol and the
|
||||
distributor-specific release number of the X server software. On
|
||||
MS-Windows, this is the version of the Windows OS.
|
||||
@end defun
|
||||
|
||||
@defun x-server-vendor &optional display
|
||||
This function returns the ``vendor'' that provided the X server
|
||||
software (as a string). Really this means whoever distributes the X
|
||||
server.
|
||||
This function returns the ``vendor'' that provided the window system
|
||||
software (as a string). On GNU and Unix systems this really means
|
||||
whoever distributes the X server. On MS-Windows this is the vendor ID
|
||||
string of the Windows OS (Microsoft).
|
||||
|
||||
When the developers of X labeled software distributors as
|
||||
``vendors'', they showed their false assumption that no system could
|
||||
|
|
|
@ -988,10 +988,11 @@ list of characters @var{chars}.
|
|||
@cindex searching for regexp
|
||||
|
||||
In GNU Emacs, you can search for the next match for a regular
|
||||
expression either incrementally or not. For incremental search
|
||||
commands, see @ref{Regexp Search, , Regular Expression Search, emacs,
|
||||
The GNU Emacs Manual}. Here we describe only the search functions
|
||||
useful in programs. The principal one is @code{re-search-forward}.
|
||||
expression (@pxref{Syntax of Regexps}) either incrementally or not.
|
||||
For incremental search commands, see @ref{Regexp Search, , Regular
|
||||
Expression Search, emacs, The GNU Emacs Manual}. Here we describe
|
||||
only the search functions useful in programs. The principal one is
|
||||
@code{re-search-forward}.
|
||||
|
||||
These search functions convert the regular expression to multibyte if
|
||||
the buffer is multibyte; they convert the regular expression to unibyte
|
||||
|
|
|
@ -3731,6 +3731,7 @@ clicks on the link quickly without moving the mouse. This behavior is
|
|||
controlled by the user option @code{mouse-1-click-follows-link}.
|
||||
@xref{Mouse References,,, emacs, The GNU Emacs Manual}.
|
||||
|
||||
@cindex follow-link (text or overlay property)
|
||||
To set up the link so that it obeys
|
||||
@code{mouse-1-click-follows-link}, you must either (1) apply a
|
||||
@code{follow-link} text or overlay property to the link text, or (2)
|
||||
|
|
|
@ -1403,6 +1403,7 @@ buffer-local variable interactively, just as it is useful to create
|
|||
buffer-local variables interactively.
|
||||
@end deffn
|
||||
|
||||
@cindex local variables, killed by major mode
|
||||
@defun kill-all-local-variables
|
||||
This function eliminates all the buffer-local variable bindings of the
|
||||
current buffer except for variables marked as ``permanent'' and local
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
@copying
|
||||
This file documents the GNU Emacs Web Wowser (EWW) package.
|
||||
|
||||
Copyright @copyright{} 2014-2015 Free Software Foundation, Inc.
|
||||
Copyright @copyright{} 2014--2015 Free Software Foundation, Inc.
|
||||
|
||||
@quotation
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
This file describes how to use Info, the menu-driven GNU
|
||||
documentation system.
|
||||
|
||||
Copyright @copyright{} 1989, 1992, 1996--2014 Free Software Foundation, Inc.
|
||||
Copyright @copyright{} 1989, 1992, 1996--2015 Free Software Foundation, Inc.
|
||||
|
||||
@quotation
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
|
|
|
@ -1,3 +1,18 @@
|
|||
2015-01-29 Francesc Rocher <francesc.rocher@gmail.com>
|
||||
|
||||
* images/splash.svg, images/splash.png:
|
||||
* images/splash.pbm, images/splash.xpm, images/README:
|
||||
Splash images refurbished.
|
||||
|
||||
2015-01-28 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* tutorials/TUTORIAL.he: Use u+05f4 HEBREW PUNCTUATION GERSHAYIM
|
||||
instead of u+0022 QUOTATION MARK in Hebrew acronyms.
|
||||
|
||||
2015-01-27 Ivan Shmakov <ivan@siamics.net>
|
||||
|
||||
* NEWS: Mention the new tar-new-entry command. (Bug#19274)
|
||||
|
||||
2015-01-27 Thomas Fitzsimmons <fitzsim@fitzsim.org>
|
||||
|
||||
* NEWS: Document EUDC improvements.
|
||||
|
|
4
etc/NEWS
4
etc/NEWS
|
@ -527,6 +527,10 @@ to avoid interfering with the kill ring.
|
|||
allow overriding the regular expression that recognizes the ldapsearch
|
||||
command line's password prompt.
|
||||
|
||||
+++
|
||||
** tar-mode: new `tar-new-entry' command, allowing for new members to
|
||||
be added to the archive.
|
||||
|
||||
** Obsolete packages
|
||||
|
||||
---
|
||||
|
|
|
@ -25,12 +25,12 @@ File: mh-logo.xpm
|
|||
Author: Satyaki Das
|
||||
Copyright (C) 2003-2015 Free Software Foundation, Inc.
|
||||
|
||||
Files: splash.pbm, splash.xpm, gnus.pbm
|
||||
Files: gnus.pbm
|
||||
Author: Luis Fernandes <elf@ee.ryerson.ca>
|
||||
Copyright (C) 2001-2015 Free Software Foundation, Inc.
|
||||
|
||||
Files: splash.png, splash.svg
|
||||
Author: Francesc Rocher <rocher@member.fsf.org>
|
||||
Files: splash.png, splash.svg, splash.pbm, splash.xpm
|
||||
Author: Francesc Rocher <francesc.rocher@gmail.com>
|
||||
Copyright (C) 2008-2015 Free Software Foundation, Inc.
|
||||
|
||||
Files: checked.xpm, unchecked.xpm
|
||||
|
|
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 25 KiB |
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 12 KiB |
|
@ -1,249 +1,370 @@
|
|||
/* XPM */
|
||||
/* Gnu Emacs Logo
|
||||
*
|
||||
* Copyright (C) 2001-2015 Free Software Foundation, Inc.
|
||||
*
|
||||
* Author: Luis Fernandes <elf@ee.ryerson.ca>
|
||||
*
|
||||
* This file is part of GNU Emacs.
|
||||
*
|
||||
* GNU Emacs is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNU Emacs is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
static char *splash[] = {
|
||||
/* width height num_colors chars_per_pixel */
|
||||
" 270 217 4 1",
|
||||
/* colors */
|
||||
". c None",
|
||||
"# c #c64e3b",
|
||||
"a c #000000",
|
||||
"c c #2076c1",
|
||||
/* columns rows colors chars-per-pixel */
|
||||
"333 233 131 2 ",
|
||||
" c #C64E3B",
|
||||
". c #C7513E",
|
||||
"X c #BD5144",
|
||||
"o c #B3534D",
|
||||
"O c #A95656",
|
||||
"+ c #A65759",
|
||||
"@ c #A1585E",
|
||||
"# c #8F5D6F",
|
||||
"$ c #9C5A63",
|
||||
"% c #935C6B",
|
||||
"& c #8A5F73",
|
||||
"* c #A15F67",
|
||||
"= c #83607A",
|
||||
"- c #926172",
|
||||
"; c #C14F40",
|
||||
": c #C75340",
|
||||
"> c #C85643",
|
||||
", c #C95846",
|
||||
"< c #C3594B",
|
||||
"1 c #CB5C4B",
|
||||
"2 c #CC604F",
|
||||
"3 c #CD6453",
|
||||
"4 c #CE6857",
|
||||
"5 c #CF6959",
|
||||
"6 c #D06E5E",
|
||||
"7 c #D16F60",
|
||||
"8 c #CF7062",
|
||||
"9 c #D27364",
|
||||
"0 c #D37768",
|
||||
"q c #D47A6C",
|
||||
"w c #D67E71",
|
||||
"e c #D78275",
|
||||
"r c #D88477",
|
||||
"t c #D88679",
|
||||
"y c #D98A7D",
|
||||
"u c #3C74BD",
|
||||
"i c #5F6A9C",
|
||||
"p c #766486",
|
||||
"a c #7B6382",
|
||||
"s c #6A6792",
|
||||
"d c #626999",
|
||||
"f c #4E6FAC",
|
||||
"g c #566DA5",
|
||||
"h c #5A6EA3",
|
||||
"j c #5574AE",
|
||||
"k c #4372B6",
|
||||
"l c #4971B1",
|
||||
"z c #4077BE",
|
||||
"x c #4279BF",
|
||||
"c c #457AC0",
|
||||
"v c #497DC1",
|
||||
"b c #4E81C3",
|
||||
"n c #5384C5",
|
||||
"m c #5A89C7",
|
||||
"M c #5D8CC8",
|
||||
"N c #6B8CC1",
|
||||
"B c #618EC9",
|
||||
"V c #6592CB",
|
||||
"C c #6B95CD",
|
||||
"Z c #6F98CE",
|
||||
"A c #719ACF",
|
||||
"S c #759DD0",
|
||||
"D c #789FD1",
|
||||
"F c #7CA2D3",
|
||||
"G c #DB8E82",
|
||||
"H c #DC9185",
|
||||
"J c #DD958A",
|
||||
"K c #DE998E",
|
||||
"L c #DF9C92",
|
||||
"P c #E09F94",
|
||||
"I c #E0A096",
|
||||
"U c #E2A59B",
|
||||
"Y c #E3A99F",
|
||||
"T c #E4ACA4",
|
||||
"R c #E6B0A7",
|
||||
"E c #E7B3AB",
|
||||
"W c #E8B7AE",
|
||||
"Q c #E8B7B0",
|
||||
"! c #E9BBB4",
|
||||
"~ c #EBBFB8",
|
||||
"^ c #ECC3BC",
|
||||
"/ c #81A5D5",
|
||||
"( c #89A6D1",
|
||||
") c #86A9D6",
|
||||
"_ c #89ABD7",
|
||||
"` c #8DAED8",
|
||||
"' c #90AFD9",
|
||||
"] c #8FB0D9",
|
||||
"[ c #9DB4D7",
|
||||
"{ c #93B2DB",
|
||||
"} c #99B6DC",
|
||||
"| c #9DB9DE",
|
||||
" . c #A1BCDF",
|
||||
".. c #A4BEE0",
|
||||
"X. c #A6C0E1",
|
||||
"o. c #ABC3E3",
|
||||
"O. c #B0C7E4",
|
||||
"+. c #B5CAE6",
|
||||
"@. c #B9CDE7",
|
||||
"#. c #BBCEE8",
|
||||
"$. c #BED0E9",
|
||||
"%. c #DBD0D8",
|
||||
"&. c #EDC7C1",
|
||||
"*. c #EECAC4",
|
||||
"=. c #EFCEC8",
|
||||
"-. c #F0CFCA",
|
||||
";. c #F0D2CD",
|
||||
":. c #F2D6D1",
|
||||
">. c #F3DAD5",
|
||||
",. c #F4DEDA",
|
||||
"<. c #F6E2DE",
|
||||
"1. c #C4D5EB",
|
||||
"2. c #CCDAEE",
|
||||
"3. c #D0DEEF",
|
||||
"4. c #D3DFF0",
|
||||
"5. c #D5E1F1",
|
||||
"6. c #DBE5F3",
|
||||
"7. c #DFE8F4",
|
||||
"8. c #EDE5E8",
|
||||
"9. c #F7E5E2",
|
||||
"0. c #F8E9E6",
|
||||
"q. c #F9EDEB",
|
||||
"w. c #FAF0EE",
|
||||
"e. c #E4ECF6",
|
||||
"r. c #E9EFF7",
|
||||
"t. c #ECF2F9",
|
||||
"y. c #FCF4F3",
|
||||
"u. c #FDF8F7",
|
||||
"i. c #F2F6FB",
|
||||
"p. c #F6F9FC",
|
||||
"a. c #FFFFFF",
|
||||
/* pixels */
|
||||
"..............................................................................................................................................................................................................................................................................",
|
||||
"..................................................................########..........................................................................................................................................................########..................................",
|
||||
".................................................................##########.......................................................................................................................................................############................................",
|
||||
"................................................................#############.......................########....................................................................................................................################..............................",
|
||||
"..............................................................#################...................#############................................................................................................................###################............................",
|
||||
".............................................................###################.................################.............................................................................................................#####################...........................",
|
||||
"............................................................#####################..............###################...........................................................................................................######################...........................",
|
||||
"...........................................................#######################...........#######################.........................................................................................................#######################..........................",
|
||||
"..........................................................#########################.........##########################......................................................................................................#########################.........................",
|
||||
".........................................................###########################.......############################....................................................................................................##########################.........................",
|
||||
".........................................................############################.....###############################.................................................................................................############################........................",
|
||||
"........................................................##############################...a################################................................................................................................############################........................",
|
||||
".......................................................################################.a##################################..............................................................................................##############################.......................",
|
||||
"......................................................#################################aa###################################.............................................................................................##############################.......................",
|
||||
".....................................................########################################################################...........................................................................................################################......................",
|
||||
"....................................................##########################################################################.........................................................................................a################################......................",
|
||||
"......................#............................###########aaa##############################################################.......................................................................................a#################################......................",
|
||||
".....................##...........................###########aaaaaa#############################################################......................................................................................a######aaaaaa#####################......................",
|
||||
".....................###.........................##########aaaaaaaaaa############################################################....................................................................................a######aaaaaaaaaa##################......................",
|
||||
".....................###........................##########...aaaaaaaaaa###########################################################...................................................................................a#####aaaaaaaaaaaaa################......................",
|
||||
".................a..#####......................##########......aaaaaaaaa#######################aaaaaaa############################..................................................................................a#####aaaaaaaaaaaaaaaa##############......................",
|
||||
".................aa.#####.....................##########........aaaaaaaaa####################aaaaaaaaaaa###########################.................................................................................a#####aaaaaaaaaaaaaaaa##############......................",
|
||||
"................aaa.#####....................##########..........aaaaaaaaa#################aaaaaaaaaaaaaaa##########################...............................................................................a######aaaaaaaaaaaaaaaaa#############......................",
|
||||
"................aaa#######..................##########............aaaaaaaaa###############aaaaaaaaaaaaaaaaaa#########################..............................................................................a#####.........aaaaaaaaaa############......................",
|
||||
"................aaa########...............###########...............aaaaaaaa############aa........aaaaaaaaaaaa########################.......................................................................#....a######............aaaaaaa############......................",
|
||||
"...............aaa##########............############.................aaaaaaaa###########.............aaaaaaaaaaa#######################......................................................................#....a######.............aaaaaaa###########......................",
|
||||
"...............aaa############........#############...................aaaaaaaa#########................aaaaaaaaaa#######################.................................#..................................##...aa#####...............aaaaaa###########......................",
|
||||
"...............aa##############.....##############.....................aaaaaaaa########..................aaaaaaaaa#######################...............................##..................................##...a######...............aaaaaa###########......................",
|
||||
"..............aaa#################################......................aaaaaaa#######....................aaaaaaaaa#######################.............................###...............................a.###..aa######................aaaaa###########......................",
|
||||
"..............aa#################################........................aaaaaaa######.....................aaaaaaaaa#######################..........................a.###..............................aa.##...aa#####..................aaaa###########......................",
|
||||
".............aaa################################..........................aaaaaa#####.......................aaaaaaaaa#######################........................aa####..............................aa###...aa#####..................aaaa###########......................",
|
||||
".............aaa###############################...........................aaaaaaa####.........................aaaaaaaa######################........................a####..............................aaa###..aaa####....................aaa##########.......................",
|
||||
"............aaa###############################.............................aaaaaa###...........................aaaaaaaa#######################.....................aa####..............................aa###...aaaa##.....................aaa##########.......................",
|
||||
"............aaaa#############################...............................##aaa.#.............................aaaaaaaa########################..................aa####..............................aaa###...aaaaaa.....................aaa##########.......................",
|
||||
"...........aaaaa############################...............................###aaa................................aaaaaaaa########################.................a#####..............................aa###...aaaaaa......................aaa##########.......................",
|
||||
"...........aaaaaa##########################...............................###aaa..................................aaaaaaaa#########################..............######..............................aa####...aaaaaa......................aaa#########........................",
|
||||
"...........aaaaaaa#######################................................####aaa...................................aaaaaaaa##########################..........########..............................a####....aaaaa.......................aaa#########........................",
|
||||
"............aaaaaa######################................................a###..a.....................................aaaaaaaa###########################......##########.........#...................a#####....aaaa........................aaa#########........................",
|
||||
"............aaaaaaa####################................................a###..........................................aaaaaaaa#########################################.........##...................#####.......a.........................aaa#########........................",
|
||||
".............aaaaaaa##################................................a####...........................................aaaaaaaa########################################.........###.................######.................................aaa#########........................",
|
||||
"..............aaaaaaa###############.................................a####.............................................aaaaaaaa######################################.........#####..............#######..................................aaa########.........................",
|
||||
"...............aaaaaaa############a.................................aa###...............................................aaaaaaa######################################......a..######...........########...................................aaa########.........................",
|
||||
"...............aaaaaaaaa#######aaa.................................aa####................................................aaaaaaa####################################.......aa########.......###########...................................aaa########.........................",
|
||||
"................aaaaaaaaaaaaaaaaa..................................aa###..................................................aaaaaaa###################################.......aa#########################....................................aaa########.........................",
|
||||
".................aaaaaaaaaaaaaa...................................aa###....................................................aaaaaaa#################################.......aa##########################....................................aaa########.........................",
|
||||
"..................aaaaaaaaaaaa...................................aa####....................................................aaaaaaaa################################.......aa#########################.....................................aaa#######..........................",
|
||||
"....................aaaaaaa.....................................aa####......................................................aaaaaaaa##############################.......aa##########################.....................................aaa#######..........................",
|
||||
"................................................................aa###........................................................aaaaaaaa###########################.........aa#########################......................................aaa#######..........................",
|
||||
"...............................................................aa###..........................................................aaaaaaaa#########################.........aa#########################.......................................aaa#######..........................",
|
||||
"..............................................................aa###............................................................aaaaaaaa#######################..........aa#########################.......................................aaa######...........................",
|
||||
".............................................................aaa###...........................................##................aaaaaaaa#####################..........aa#########################........................................aa#######...........................",
|
||||
".............................................................aa###...........................................#####...............aaaaaaaaa##################..........aaa########################.........................................aa#######...........................",
|
||||
"............................................................aa###...........................................#######...............aaaaaaaaaa##############a...........aaa#######################..........................................aa#######...........................",
|
||||
"...........................................................aa####...........................................########...............aaaaaaaaaaa##########aa...........aaa#######################...........................................aa######............................",
|
||||
"..........................................................aa####...........................................##########...............aaaaaaaaaaaaaaaaaaaaa............aaaa####################.............................................aa######............................",
|
||||
"..........................................................aa###..........................................a###########.................aaaaaaaaaaaaaaaaaa............aaaaa###################..............................................aa######............................",
|
||||
".........................................................aa###..........................................aa#############..................aaaaaaaaaaaa...............aaaaaa#################...............................................a#######............................",
|
||||
"........................................................aa###..........................................aa##############.............................................aaaaaaa##############a...............................................aa######.............................",
|
||||
"........................................................aa###...................................##.....a################............................................aaaaaaaa###########aa................................................aa######.............................",
|
||||
".......................................................aa###...................................###....aa################.............................................aaaaaaaaa######aaa..................................................aa######.............................",
|
||||
".......................................................aa##...................................####...aa##################.............................................aaaaaaaaaaaaaaaa...................................................aa#####..............................",
|
||||
"......................................................aa###..................................####...aa###################..............................................aaaaaaaaaaaaaa...................................................aaa#####..............................",
|
||||
".....................................................aa###..................................####....aa####################..............................................aaaaaaaaaaa.....................................................aa######..............................",
|
||||
"....................................................aaa##..................................#####...aa#####################................................................aaaaaa........................................................aa#####...............................",
|
||||
"....................................................aa###.................................#####....aa######################.............................................................................................................aa#####...............................",
|
||||
"...................................................aa###.................................######...aaa######################.............................................................................................................a######...............................",
|
||||
"..................................................aa####................................######....aaaaa####################............................................................................................................aa######...............................",
|
||||
"..................................................aa###...............................########...aaaaaaa###################............................................................................................................aa#####................................",
|
||||
".................................................aa####..............................########....aaaaaaaaa#################............................................................................................................aa#####................................",
|
||||
".................................................aa###..............................#########....aaaaaaaaa#################............................................................................................................aa#####................................",
|
||||
"................................................aa###..............................#########.......aaaaaaaa################............................................................................................................aa####.................................",
|
||||
"...............................................aaa###............................##########.........aaaaaaaa###############............................................................................................................aa####.................................",
|
||||
"...............................................aa###............................##########............aaaaaaa###############..........................................................................................................aaa####.................................",
|
||||
"..............................................aaa###...........................##########..............aaaaaa###############..........................................................................................................aaa####.................................",
|
||||
".............................................aaa####.........................##########.................aaaaaa##############..........................................................................................................aa#####.................................",
|
||||
".............................................aaa###.........................#########...................aaaaaa##############.........................................................................................................aaa####..................................",
|
||||
"............................................aaa####.......................##########.....................aaaaaa#############.........................................................................................................aa#####..................................",
|
||||
"............................................aa#####......................##########......................aaaaaa#############.........................................................................................................aa#####..................................",
|
||||
"...........................................aaa#####.....................##########........................aaaaaa############........................................................................................................aaa####...................................",
|
||||
"...........................................aa######...................###########.........................aaaaaa###########.........................................................................................................aaa####...................................",
|
||||
"..........................................aaa#######................###########............................aaaaaa##########.........................................................................................................aa####....................................",
|
||||
"..........................................aa#########..............###########.............................aaaaaa##########.........................................................................................................aa####....................................",
|
||||
".........................................aaa##########...........############...............................aaaaa##########........................................................................................................aaa####....................................",
|
||||
".........................................aa#################################................................aaaaaa#########........................................................................................................aa####.....................................",
|
||||
"........................................aaa################################..................................aaaaa#########........................................................................................................aa####.....................................",
|
||||
"........................................aa################################...................................aaaaa#########........................................................................................................aa###......................................",
|
||||
".......................................aaa###############################.....................................aaaa#########.......................................................................................................aaa###......................................",
|
||||
".......................................aaa##############################......................................aaaa#########.......................................................................................................aaa###......................................",
|
||||
"......................................aaa#############################........................................aaaa#########.......................................................................................................aa###.......................................",
|
||||
"......................................aaa############################.........................................aaaa#########......................................................................................................aaa###.......................................",
|
||||
"......................................aaa##########################............................cccc...........aaaa########.......................................................................................................aaa###.......................................",
|
||||
".....................................aaaa########################aa........................cccccccccc.........aaaa########.......................................................................................................aa###........................................",
|
||||
".....................................aaaa########################a.....................ccccccccccccccc........aaaa########.......................................................................................................aa###........................................",
|
||||
".....................................aaaa######################aa...................cccccccccccccccccc........aaaa########......................................................................................................aaa###........................................",
|
||||
".....................................aaaa#####################a...................cccccccccccccccccccc........aaaa#######.......................................................................................................aaa##.........................................",
|
||||
".....................................aaaaa##################aa.................ccccccccccccccccccccccc........aaaa#######.......................................................................................................aa###.........................................",
|
||||
".....................................aaaaaa##############aaa................cccccccccccccccccccccccccaaa......aaaa#######..................................................................#...................................aaa###.........................................",
|
||||
".....................................aaaaaaa###########aaa................cccccccccccccccccccccccccccaaaa.....aaaa######...................................................................#...................................aa####.........................................",
|
||||
".....................................aaaaaaaaa######aaaaa................cccccccccccccccccccccccccccaaaaa.....aaaa######..................................................................##...................................aa###..........................................",
|
||||
"......................................aaaaaaaaaaaaaaaaa................ccccccccccccccccaaaaccccccccaaaaa......aaaa#####...................................................................##..................................aaa###..........................................",
|
||||
".......................................aaaaaaaaaaaaaa.................cccccccccccccccaaaaaacccccccaaaaaa......aaaa#####................................................................a.###..................................aa####..........................................",
|
||||
"........................................aaaaaaaaaaa.................ccccccccccccccaaaaaaaaaccccccaaaaaa.......aaaa####.................................................................a.###..................................aa####..........................................",
|
||||
".........................................aaaaaaaa.................ccccccccccccaaaaaaaaaaaaccccccaaaaaaa.......aaaa####................................................................aa####.................................aaa###...........................................",
|
||||
"................................................................cccccccccccaaaaaaaaaaaaaaacccccaaaaaaa........aaaa###................................................................aaa###..................................aa####...........................................",
|
||||
"..............................................................cccccccccccaaaaaaaaaaaaa....ccccaaaaaaa.........aaaa#..................................................................aa####..................................aa####...........................................",
|
||||
".............................................................ccccccccccaaaaaaaaaaa.......cccaaaaaaaa..........aaaa..................................................................aa####..................................aa####............................................",
|
||||
"...........................................................ccccccccccaaaaaaaaaa.........ccc.aaaaaaa...........aaa...........aaa.....................................................aa####..................................aa####............................................",
|
||||
"..........................................................cccccccccaaaaaaaaa..........cccc..aaaaaa............aa............aaa.....................................................a####...................................aa####............................................",
|
||||
".........................................................cccccccccaaaaaaaa...........cccc..aaaaaa.............a............aaa##...................................................aa####...................................aa####............................................",
|
||||
"........................................................ccccccccaaaaaaaa............ccc...aaaaaa...........................aaa##..................................................aa####...................................aa####.............................................",
|
||||
"......................................................cccccccccaaaaaaa............cccc...aaaaaa...........................aaa##...................................................aa####...................................aa####.............................................",
|
||||
".....................................................ccccccccaaaaaaaa............ccc....aaaaaa............................aa###..................................................aa####....................................aa####.............................................",
|
||||
"....................................................ccccccccaaaaaaa............ccc.....aaaaaa............................aaa###..................................................aa####....................................aa####.............................................",
|
||||
"..................................................ccccccccaaaaaaa.............cc.....aaaaaa..............................aa###..................................................aa####.....................................aa###..............................................",
|
||||
".................................................cccccccaaaaaaa..............cc.....aaaaaa..............................aaa###..................................................aa####....................................aa####..............................................",
|
||||
"................................................cccccccaaaaaaa.....................aaaaaa...............................aa###..................................................aa####.....................................aa####..............................................",
|
||||
"...............................................ccccccaaaaaaa.....................aaaaaa................................aaa###..................................................aa####.....................................aa####..............................................",
|
||||
"..............................................ccccccaaaaaaa.....................aaaaa.................................aaa####.................................................aa####......................................aa###...............................................",
|
||||
".............................................ccccccaaaaaa.....................aaaaa...................................aaa###.................................................aaa####.....................................aa####...............................................",
|
||||
"...........................................ccccccaaaaaaa.....................aaaa....................................aaa####.................................................aa####......................................aa####...............................................",
|
||||
"..........................................ccccccaaaaaa..............................................................aaa####.................................................aaa####......................................aa####...............................................",
|
||||
".........................................ccccccaaaaa...............................................................aaa#####.................................................aa####......................................aaa###................................................",
|
||||
"........................................ccccccaaaaa................................................................aaa#####................................................aa####.......................................aa####................................................",
|
||||
".......................................ccccccaaaaa................................................................aaa######................................................aa####.......................................aa####................................................",
|
||||
"......................................ccccccaaaaa................................................................aaa######................................................aa####........................................aa###.................................................",
|
||||
".....................................ccccccaaaaa.................................................................aaa#####.................................................aa####........................................a####.................................................",
|
||||
"....................................ccccccaaaaa.................................................................aaa######................................................aa####........................................aa####.................................................",
|
||||
"...................................ccccccaaaaa.................................................................aaa######.................................................aa####........................................aa####.................................................",
|
||||
"..................................ccccccaaaaa..........................c.......................................aaa######................................................aa####.........................................aa####.................................................",
|
||||
".................................ccccccaaaaa.......................ccccc......................................aaa######................................................aa#####........................................aa#####.................................................",
|
||||
"................................cccccccaaaa......................cccccc......................................aaa######.................................................aa####.........................................aa#####.................................................",
|
||||
"...............................ccccccccaaa.....................ccccccc......................................aaaa######................................................aa#####.........................................aa#####.................................................",
|
||||
"..............................cccccccccaaa...................cccccccc...a...................................aaa######................................................aaa####.........................................aaa####..................................................",
|
||||
".............................ccccccccccca..................ccccccccc..aaa..................................aaa######.................................................aa#####.........................................aaa####..................................................",
|
||||
"............................ccccccccccccc................ccccccccccaaaaa..................................aaa#######................................................aa#####..........................................aa#####..................................................",
|
||||
"............................cccccccccccccc.............cccccccccccaaaaa...................................aaa######....................................##...........aa#####..........................................aa#####..................................................",
|
||||
"...........................ccccccccccccccccccccccccccccccccccccccaaaaa...................................aaa#######...................................####.........aa#####..........................................aaa#####..................................................",
|
||||
"..........................ccccccccccccccccccccccccccccccccccccccaaaaa...................................aaa#######...................................######.......a######...........................................aaa####...................................................",
|
||||
"..........................cccccccccccccccccccccccccccccccccccccaaaaa...................................aaa#######..................................a.######......a#######...........................................aa#####...................................................",
|
||||
".........................cccccccccccccccccccccccccccccccccccccaaaaa....................................aaa#######..................................a########....########............................................aa#####...................................................",
|
||||
".........................cccccccccccccccccccccccccccccccccccaaaaaa....................................aaa#######..................................a#####################...........................................aaa#####...................................................",
|
||||
".........................ccccccccccccccccccccccccccccccccccaaaaaa....................................aaa#######..................................a#####################............................................aaa#####...................................................",
|
||||
".........................ccccccccccccccccccccccccccccccccaaaaaaa.....................................aaa#######..................................a#####################............................................aaa####....................................................",
|
||||
".........................cccccccccccccccccccccccccccccaaaaaaaaa.....................................aaa#######..................................a#####################.............................................aaa####....................................................",
|
||||
"..........................ccccccccccccccccccccccccccaaaaaaaaaa.....................................aaa########.................................aa####################..............................................aa#####....................................................",
|
||||
"..........................acccccccccccccccccccccccaaaaaaaaaa......................................aaa########.................................aa#####################..............................................aa#####....................................................",
|
||||
"..........................aaacccccccccccccccccccaaaaaaaaaa........................................aaa#######.................................aa#####################..............................................aaa#####....................................................",
|
||||
"..........................aaaaacccccccccccccccaaaaaaaaa..........................................aaa#######..................................aa####################...............................................aaa####.....................................................",
|
||||
"...........................aaaaaaaacccccccccaaaaaaaaaa..........................................aaa########.................................aa#####################...............................................aaa####.....................................................",
|
||||
"...........................aaaaaaacccccccccaaaaaaaa.............................................aa########.................................aaa####################................cc..............................aaa####.....................................................",
|
||||
".............................aaaaccccccccaaaaaaaa..............................................aaa########.................................aa#####################..............cccc..............................aaa####..............ccccccc...............cccccccccc.......",
|
||||
"...............................accccccccaaaaaaa...............................................aaa########.................................aaa####################.............ccccc...............................aa#####...........ccccccccc.............cccccccccccc........",
|
||||
"..............................ccccccccaaaaaaaa..............................ccccc............aaa#########................ccccccc..........aa####################............cccccc...............................aaa#####........cccccccccc.............cccccccccc............",
|
||||
".............................cccccccaaaaaaaa..............................ccccccc...........aaa########c...............cccccccccc........aa######aaa###########..........ccccccc..aa.............................aaa####.......cccccccccc..aaaaaa.....cccccccc....aaaaaaa.....",
|
||||
"............................cccccccaaaaaaa..............................cccccccc...........aaaa########cc............cccccccccccc........aa######aaa##########.........ccccccc..aaaa.............................aaa####.....cccccccccc.aaaaaaaa....cccccccc..aaaaaaaaaa......",
|
||||
"...........................cccccccaaaaaaa..............................ccccccccc...........aaa#######cccc...........ccccccccccccc.......aa######aaaaa########........ccccccc..aaaaa...cc.........................aaa####...ccccccccc..aaaaaaaa....cccccccc..aaaaaaaaaa........",
|
||||
"..........................cccccccaaaaaa..............................ccccccccccaaa........aaa########cccc.........cccccccccccccca.......aa#####aaaaaaa######........ccccccc.aaaaa....cc..........................aaa####.ccccccccc.aaaaaaaaa....cccccccccaaaaaaaaaa...........",
|
||||
".........................ccccccaaaaaa..............................ccccccccccccaaa.......aaaa#######ccccc.......cccccccccccccccca......aa######.aaaaaaa####.......ccccccc.aaaaa....cccc..........................aaa####ccccccc.aaaaaaaaaa....cccccccccaaaaaaaaa..............",
|
||||
"........................ccccccaaaaaa..............................ccccccccccccaaa.......aaaa########ccccaa.....cccccccccccccccccaa.....aa#####..aaaaaaaaaa......ccccccccaaaaaa....cccc...........................aaa##ccccccccaaaaaaaaaa....cccccccccaaaaaaaa.................",
|
||||
".......................ccccccaaaaaa..............................cccccccccccccaaa.......aaa########cccccaa....cccccccccccccccccaaa....aa#####....aaaaaaaa.....cccccccccaaaaa....ccccc............................aaa#ccccccccaaaaaaaaa.....cccccccccaaaaaaa...................",
|
||||
"......................ccccccaaaaa...............................cccccccccccccaaaa......aaa########ccccccaa...ccccccccccccccccccaa....aaa#####.....aaaaaa.....ccccccccaaaaaa....cccccc.aaa........................aaacccccccaaaaaaaaa.....ccccccccccaaaaaa.....................",
|
||||
".....................ccccccaaaaa..............................ccccccccccccccaaaa......aaaa########ccccccaa.cccccccccccccccccccaaa....aa#####...............ccccccccaaaaaa....cccccccaaaa.........................aaccccccaaaaaaaaa.....ccccccccccccaaaa.......................",
|
||||
"....................ccccccaaaaa..............................cccccccccccccccaaa......aaaa########ccccccaa.ccccccccccccccccccccaaa...aaa####...............cccccccaaaaaa.....ccccccccaaa..........................acccccccaaaaaaa......ccccccccccccccca........................",
|
||||
"...................ccccccaaaaa..............................cccccccccccccccaaaa...ccaaaa########cccccccaacccccccaacccccccccccaaa....aa#####..............cccccccaaaaa......ccccccccaaa..........................ccccccccaaaaaa.......ccccccccccccccccccccccccccccccccccc......",
|
||||
"..................ccccccaaaaa.............................cccccccacccccccccaaa...ccaaaa########cccccccaaccccccaaaacccccccccccaaa...aaa#####............cccccccaaaaaa......cccccccccaaa.........................ccccccccaaaaa.........ccccccccccccccccccccccccccccccccccccc....",
|
||||
".................ccccccaaaaa.............................cccccccaaccccccccaaaa..cccaaa#########cccccccacccccaaaaaaccccccccccaaa....aa#####............cccccccaaaaa.......cccccccccaaa.........................ccccccccaaaaa..........cccccccccccccccccccccccccccccccccccccc...",
|
||||
"................ccccccaaaaa.............................cccccccaaccccccccaaaa..cccaaaa########cccccccccccccaaaaaaaccccccccccaaa....aa#####..........ccccccccaaaaa.......ccccccccccaaa........................ccccccccaaaaa.............aaaaaaaaaaaaaa.......cccccccccccccccc..",
|
||||
"...............ccccccaaaaa.............................ccccccaaaaccccccccaaa..ccccaaa########cccccccccccccaaaaaaaacccccccccaaa....aa#####..........ccccccccaaaaa.......cccccccccccaa........................cccccccccaaaa.............aaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccc..",
|
||||
"..............ccccccaaaaa............................cccccccaaaaacccccccaaa..ccccaaa#########ccccccccccccaaaaaa..ccccccccccaaa....aa#####.........ccccccccaaaaa.......cccccccccccaaa.......................cccccccccaaaa..............aaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccc.",
|
||||
".............ccccccaaaaa............................ccccccaaaaaaccccccccaa.cccccaaa########cccccccccccccaaaaa....ccccccccccaa....aa#####........cccccccccaaaaa........cccccccccccaaa......................cccccccccaaaa................aaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc.",
|
||||
"............cccccccaaaa............................ccccccaaaaaaccccccccaaacccccaaaa########ccccccccccccaaaaa....cccccccccccaa....aa#####.......cccccccccaaaaa........ccccccccccccaa......................ccccccccccaaa......................................aaaaaaacccccccccca",
|
||||
"...........cccccccaaaa............................ccccccaaaaaa.cccccccaaacccccaaaa########ccccccccccccaaaaa.....ccccccccccca....aaa####......ccccccccccaaaaa.........ccccccccccccaa.....................cccccccccccaa..........................................aaaacccccccccca",
|
||||
"..........cccccccaaaa............................ccccccaaaaaa.ccccccccaaccccccaaa########cccccccccccccaaaa.....cccccccccccca....aaa####.....cccccccccccaaaa.........cccccccccccccaa....................cccccccccccaaa............................................aacccccccccca",
|
||||
"..........cccccccaaa............................ccccccaaaaa..ccccccccaaacccccaaaa########ccccccccccccaaaa......cccccccccccca...aaa####.....cccccccccccaaaa..........cccccccccccccaa...................ccccccccccccaa..............................................acccccccccca",
|
||||
".........cccccccaaaa...........................ccccccaaaaa...cccccccaaacccccaaaa########ccccccccccccaaaaa.....ccccccccccccc....aaa###.....cccccccccccaaaa..........ccccccccccccccaa..................cccccccccccccaa..............................................acccccccccca",
|
||||
".........cccccccaaa..........................cccccccaaaaa...ccccccccaccccccaaaa########.cccccccccccaaaaa......ccccccccccccc....aaa###....ccccccccccccaaa...........ccccccccccccccaa.................ccccccccccccccaa..............................................acccccccccca",
|
||||
"........ccccccccaa..........................cccccccaaaa.....cccccccaccccccaaaaa########cccccccccccaaaaa......cccccccccccccc...aaa####..cccc.ccccccccaaaa...........ccccccccccccccaa................cccccccccccccccca..............................................ccccccccccaa",
|
||||
"........cccccccaaa.........................ccccccaaaaa.....cccccccaccccccaaaaa########ccccccccccccaaaa.......cccccccccccccc...aaa###.ccccc.ccccccccaaaa...........cccccccccccccccca..............cccccccccccccccccca..............................................ccccccccccaa",
|
||||
".......ccccccccaa........................cccccccaaaaa.....ccccccccccccccaaaaa########.cccccccccccaaaa.......cccccccccccccccccaaaa##ccccc..cccccccccaaa............ccccccccccccccccc...........cccccccccccccccccccccc.................c............................cccccccccaaa",
|
||||
".......ccccccccaa.......................ccccccaaaaa......cccccccccccccaaaaaa########.cccccccccccaaaa........cccccccccccccccccaaa###cccc...cccccccccaaa............cccccccccccccccccc.......cccccc..cccccccccccccccccc...............cc...........................cccccccccaaa.",
|
||||
"......ccccccccca.......................ccccccaaaaa.......ccccccccccccaaaaaa########..ccccccccccaaaaa........cccccccccccccccccaaa###ccc..aacccccccccaa.............cccccccccccccccccccccccccccccc...cccccccccccccccccccc..........cccc...........................ccccccccaaaaa.",
|
||||
"......ccccccccca.....................cccccccaaaaa........cccccccccccaaaaaaa########..cccccccccaaaaa.........cccccccccccccccccaaa##cc..aacccccccccccaa..ccc........cccccccccccccccccccccccccccc....cccccccccccccccccccccccccccccccc.............................ccccccccaaaaa..",
|
||||
".....cccccccccca....................cccccccaaaaa........cccccccccccaaaaaaa########..cccccccccaaaaa..........ccccccccccccccccaaa###c.aaaaccccccccccccccccc.........cccccccccccccccccccccccccc....aaccccccccccccccccccccccccccccccc...........c.................ccccccccaaaaa...",
|
||||
".....cccccccccca..................ccccccccaaaa..........ccccccccccaaaaaaaa########..ccccccccaaaaa...........ccccccccccccccccaaa###aaaaaaccccccccccccccc...........ccccccccccccccccccccccccc...aaaaccccccccccccccccccccccccccccc.......aaccccc................cccccccaaaaaa....",
|
||||
"....cccccccccccc.................ccccccccaaaa..........ccccccccccaaaaaaaa########..ccccccccaaaaa............ccccccccccccccccaaa##aaaaaaccccccccccccccc............ccccccccccccccccccccccc..aaaaaa..cccccccccccccccccccccccccc...aaaaaacccccc...............cccccccaaaaaaa.....",
|
||||
"....ccccccccccccc.............cccccccccaaaaa..........ccccccccccaaaaaaaa########..ccccccccaaaaa.............cccccccccccccccaaaa##aaaaaccccccccccccca....aaa.......ccccccccccccccccccccaaaaaaaaa....ccccccccccccccccccccaaaaaaaaaaaaccccccccccc..........ccccccccaaaaaaa.......",
|
||||
"...cccccccccccccccc.......ccccccccccccaaaa............cccccccccaaaaaaaaa########..cccccccaaaaa..............cccccccccccccccaaa##aaaa.ccccccccccccccaaaaaaa........cccccccccccccccccccaaaaaaaa......acccccccccccccccccaaaaaaaaaaaaaccccccccccccccccccccccccccccaaaaaaaa........",
|
||||
"...ccccccccccccccccccccccccccccccccccaaaa............cccccccccaaaaaaaaa########...ccccccaaaaa...............cccccccccccccccaaaaaaaa..ccccccccccccaaaaaaa...........ccccccccccccccccaaaaaaaaa.......aaccccccccccccaaaaaaaaaaaaaaa..ccccccccccccccccccccccccc.aaaaaaaa..........",
|
||||
"..cccccccccccccccccccccccccccccccccaaaaa.............ccccccccaaaaa.aaa########...ccccccaaaaa.................ccccccccccccaaaaaaaa....cccccccccccaaaaaa.............acccccccccccccaaaaaaaaa..........aaaaaaaaaaaaaaaaaaaaaaaaa..........aacccccccccccccccc.aaaaaaaa............",
|
||||
"..ccccccccccccccccccccccccccccccccaaaaa.............ccccccccaaaaa.aaa########....cccccaaaaa..................ccccccccccaaaaaaaaa.....cccccccccaaaaaaa..............aaacccccccccaaaaaaaaa............aaaaaaaaaaaaaaaaaaaaaaa..........aaaaaaaacccccccccaaaaaaaaaa..............",
|
||||
"..cccccccccccccccccccccccccccccccaaaa...............cccccccaaaaa.aaaa#######....cccccaaaaa...................aaccccccaaaaaaaaaa......cccccccaaaaaaaa...............aaaaaaaaaaaaaaaaaaa..............aaaaaaaaaaaaaaaaaaa............aaaaaaaaaaaaaaaaaaaaaaaaaaa................",
|
||||
"..ccccccccccccccccccccccccccccccaaaa...............cccccccaaaaa..aaa########...cccccaaaaa....................aaaaaaaaaaaaaaaa........ccccccaaaaaaa.................aaaaaaaaaaaaaaaaa.................aaaaaaaaaaaaaa................aaa.....aaaaaaaaaaaaaaaa...................",
|
||||
"..ccccccccccccccccccccccccccccaaaaa...............cccccccaaaaa..aaa########.....cccaaaaa......................aaaaaaaaaaaaa...........aaaaaaaaaaa...................aaaaaaaaaaaaaa.....................aaaaaaa................................aaaaaaaaa.......................",
|
||||
"..ccccccccccccccccccccccccccaaaaa.................ccccccaaaaa...aaa#######........aaaa........................aaaaaaaaaa..............aaaaaaaaa.......................aaaaaaaaa...............................................................................................",
|
||||
"..cccccccccccccccccccccccccaaaaa.................ccccccaaaa....aaa#######........aaaa...........................aaaaa.................aaaaaaa.................................................................................................................................",
|
||||
"..cccccccccccccccccccccccaaaaaa..................cccccaaaa.....aaa#######.......aaaa..................................................aaaaaa..................................................................................................................................",
|
||||
"...ccccccccccccccccccccaaaaaa....................ccccaaaa.....aaa#######.........a.....................................................aaa....................................................................................................................................",
|
||||
"...accccccccccccccccccaaaaaa.......................aaaaa......aaa######.......................................................................................................................................................................................................",
|
||||
"...aacccccccccccccccaaaaaaa.......................aaaaa.......aa#######.......................................................................................................................................................................................................",
|
||||
"....aaccccccccccccaaaaaaa.........................aaaa.......aaa######........................................................................................................................................................................................................",
|
||||
"....aaaaccccccccaaaaaaa..........................aaa.........aaa######........................................................................................................................................................................................................",
|
||||
".....aaaaaaaaaaaaaaaaa......................................aaa######.........................................................................................................................................................................................................",
|
||||
"......aaaaaaaaaaaaaa........................................aaa####...........................................................................................................................................................................................................",
|
||||
".......aaaaaaaaaaa.........................................aaa#####...........................................................................................................................................................................................................",
|
||||
".........aaaaaaa...........................................aaa####............................................................................................................................................................................................................",
|
||||
"...........................................................aaa####............................................................................................................................................................................................................",
|
||||
"..........................................................aaa####.............................................................................................................................................................................................................",
|
||||
"..........................................................aaa####.............................................................................................................................................................................................................",
|
||||
"..........................................................aaa###..............................................................................................................................................................................................................",
|
||||
".........................................................aaa###...............................................................................................................................................................................................................",
|
||||
".........................................................aaa###...............................................................................................................................................................................................................",
|
||||
".........................................................a.###................................................................................................................................................................................................................",
|
||||
".........................................................a.##.................................................................................................................................................................................................................",
|
||||
"...........................................................##.................................................................................................................................................................................................................",
|
||||
"...........................................................#..................................................................................................................................................................................................................",
|
||||
"..........................................................##..................................................................................................................................................................................................................",
|
||||
".............................................................................................................................................................................................................................................................................."
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.H 9 4 w P ! 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.w : . , > q *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.^ J r q 9 K ^ q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.> , 2 *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.T J e 6 3 4 G E 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.R 4 : , , : U u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > : e w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.^ 8 , . > : 5 W y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.K , : > 2 ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : . , ~ a.a.a.a.a.a.a.a.a.a.a.a.a.u.I , > : , T u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > : > y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.w > : K a.a.a.a.a.a.a.a.a.a.a.<.4 : , 3 =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.6 : . : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.5 : > e u.a.a.a.a.a.a.a.a.E > > q 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ : . . : -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.1 . : 5 q.a.a.a.a.a.u.w > . > I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I > , q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> . . 1 <.a.a.a.a.r : . : 8 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.e : . w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > , *.a.a.L > . , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : > y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : > T E > > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J > > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.w : . > : . : G u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.5 : . : 8 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., : w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.:.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.1 . . : , . . 3 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.3 > &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., , q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.-.: : e -.P 1 > : . , <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : > > > E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U : . e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > : ! a.a.a.a.9.y : , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.> > > w ~ ! T 5 , U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.y > : 4 9.a.a.a.a.a.a.a.;.3 : : ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 > U u.a.a.a.a.a.^ , G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.3 : > r u.a.a.a.a.a.a.a.a.a.u.T : , . 2 w e 4 : > , . > E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > : 4 ,.a.a.a.a.a.a.a.a.:.> w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u., : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : : I a.a.a.a.a.a.a.a.a.a.a.a.a.0.4 : . : q ;.u.a.a.a.a.a.0.;.E r : : : P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 > K u.a.a.a.a.a.a.a.a.a.a.R > 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.q > . : ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.9 > : r <.a.a.a.a.a.a.a.a.a.a.a.a.w.I , > > G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.a.a.a.a.a.! , : 1 ;.a.a.a.a.a.a.a.a.a.a.a.a.u.> 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 . : U a.a.a.a.a.a.a.a.a.a.a.u.T > . . , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.! 4 > : q y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 E a.a.a.a.1 > w y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > : J y.a.a.a.a.a.a.a.a.^ 1 > : 3 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > 1 <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! > . : 6 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! ^ a.a.a.W > > G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E : J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 : 1 &.a.a.a.a.y.^ 4 > , 8 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.w : . 2 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., . <.a.a.a., : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> > , e G 3 : > . > y u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H : > &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! , . . , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.y : e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : : u.a.a.;., : ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > : Q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.7 . : H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.8 : > U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., . H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.: e a.a.a.y . , -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > > ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: : *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1 , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.y > > w y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.W > , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.3 , *.a.a.a.> > 3 <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : . 1 ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> , W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Y : : 3 <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J > > y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : , a.a.a.a.: > G u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 : 4 q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > : 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > , E u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.9 > 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.-.: . P a.a.a.a.K > : ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Y : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w > w y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.e , 0.a.a.I 1 e u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>., . > 3 =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., : > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9., . : 9.a.a.a.a.a.:.9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y > <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.: > K a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.1 . 7 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.3 . . > q 9.a.a.a.a.a.a.a.a.a.a.a.a.T : 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.1 . y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q . . : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.> > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.9 : : H 0.a.a.a.a.a.a.a.a.0.w , , ! a.a.a.a.a.a.a.u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.3 . , w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a., : I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 . : 5 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.> 4 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t : . : : 4 T :.y.a.u.,.H : : , u.a.a.a.a.a.a.w.6 q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.1 : : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: : 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.> : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.> : ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I : : , : , : , . . > T a.a.a.a.a.a.a.G 4 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > . 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.-.> : 3 >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., . r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! : 4 u.a.a.a.a.a.a.<.> . 5 y.a.a.a.a.a.a.a.a.a.a.a.a.a.<.e : : ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U . : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.3 : : > L u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.> : w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., > :.a.a.a.a.a.a.a.q : 3 ,.a.a.a.a.a.a.a.a.a.a.9.r : . . w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.y > . > , T y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,., : H a.a.a.a.a.a.a.-.> > E y.a.a.a.a.a.,.U 3 > . : 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.G : , > , , > > 7 ^ u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 . 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.4 : . 5 y.a.a.a.a.a.a.a.4 > : 5 r q 6 , , . , ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,., , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.^ ~ :.y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.8 . > ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.G : 1 w.a.a.a.a.a.a.a.~ > . : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E . > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r > : L a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.1 : . > ,.a.a.a.a.a.a.a.u.1 1 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U , 1 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.H : . , ;.a.a.a.a.a.a.a.a.R > > >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.> , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > . > =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.w : : : 4 0.a.a.a.a.a.a.a.a.u., , T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.U 1 , . . > J u.a.a.a.a.a.a.a.a.a.T , . q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ : : P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0., , w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.E *.y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.r > , . . , : r 0.a.a.a.a.a.a.a.a.a.a.y., . 3 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 . : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.8 : , > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.U 0 2 : : > : . , r ^ w.a.a.a.a.a.a.a.a.a.a.a.a.~ , 3 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K > . 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.3 . > t a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.0.y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y 3 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> : 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.6 . > G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 . 2 q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&., : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> > U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y : > H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: : 6 q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7 . 3 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T , > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r . , ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5 , &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L > : ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.: > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.> : G y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.: . . e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.-.a.a.a.a.a.0., . 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., . . > 5 :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q., > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.L : . 8 a.a.a.a.a.8 . : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.q : > . , , K <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U . , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 . : L a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ 1 : . , E a.a.a.a.U : . : >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.W 8 > 1 5 0 G *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > 1 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.9 > . : e a.a.a.a.>.> . . 0 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: . I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.: > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : . : q u.a.a.a.a.5 > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.8 : . : q u.a.a.a.a.*.: . J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L . 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > , -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Q > . : w u.a.a.a.a.a.4 > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w., 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.0 > : w u.a.a.a.a.a.a.*., . , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: > <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r : . , &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , . : w u.a.a.a.a.a.a.a.a.9.4 : : W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.e > > K a.a.a.a.a.a.a.a.a.a.a.u.y , G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H . U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., . > W a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 : <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J > 2 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.y : . : =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.1 . . a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.: : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > . : 1 <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.3 . : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! : . U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . . : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.q : : 6 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.4 . > w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > . > y u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w., , 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a., 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q . P a.a.a.a.a.a.a.a.a.a.a.a.a.<.6 : : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,., . I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.> , :.a.a.a.a.a.a.a.a.a.a.a.w.G : . . : 1 ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U : , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : , <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w : u.a.a.a.a.a.a.a.a.a.y.U > . . : w y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., , -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.> : a.a.a.a.a.a.a.a.a.! , : . : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: . P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : 9.a.a.a.a.a.>.J , : . , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> 4 ^ 9.;.Y 3 , . : 8 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 > w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I . 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r . > , , . : P u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K . : u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 . P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: : 2 >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ , . : H u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,., , a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., , a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w : 1 =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q., 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J . y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: , r y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2 > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., . , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.: : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > > e w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ , 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T . > 4 ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.. . y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r . P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H : , E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.. 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a., , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.P > J y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: . J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<., : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&., > 0 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E : q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> . > 6 *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q : Q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J > , > J <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: > 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w > : > 6 ~ y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.E ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.^ y 0 H T <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.. 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T . y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U . H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: , =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.: t a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.4.+.| F M v z c c c c c m | 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: . 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.#.) m z z v c u u u u u u u u u u u c c v #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a., . : >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E : : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.o.D v z c u u u u u u u u u u u u u u u u u u u u c 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 : *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.: 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.+.Z c c c u u u u u u u u u u u u u u u u u u u u u u u u z X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : : :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 > >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.O.V z c u u u u u u u u u u u u u u u u u u u u u u u u u u u u c X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.W 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! > 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: > a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.X.B x c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&., w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i...m c x u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.&.w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e . 1 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J . E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.F c c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.0 . T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.#.m c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., 3 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.{ c c u u u u u u u u u u u u u u u u u u u u u u u c c x v V ) S M c u u u u u u u c 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! : 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : : *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&.> 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.A c z u u u u u u u u u u u u u u u u u u u u u c u m { +.5.p.a.a.a.a.a.2.z u u u u u c O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.: q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H L a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.Z c u u u u u u u u u u u u u u u u u u u u z c c F #.i.a.a.a.a.a.a.a.a.a.a.| z u u u u c o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 . : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.4 : 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 , &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r./ z u u u u u u u u u u u u u u u u u u u u x M .6.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u c 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U > . G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Y > . J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: > w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.{ z z u u u u u u u u u u u u u u u u u u c v | r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u x b 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> : <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> > y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p...c z u u u u u u u u u u u u u u u u u c c F 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.z u u u c B i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 . 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 > R a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.b c u u u u u u u u u u u u u u u u u c B +.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a...c u u u c { p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! : 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 : W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.C c u u u u u u u u u u u u u u u u u c S 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a._ c u u c m 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.> > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: , <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.v z u u u u u u u u u u u u u u u u c S 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.m c u u z } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q., . P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : . q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.` c u u u u u u u u u u u u u u u u c S 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.c u u c m 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . : 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> : <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.m c u u u u u u u u u u u u u u u c S 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.) c u u z | a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T , q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.1 : J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 . I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c u u u u u u u u u u u u u u u c m 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.M z u c m e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.: > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: , -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.C c u u u u u u u u u u u u u u u z } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.m x c v O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0., > T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.: : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.b z u u u u u u u u u u u u u u z b 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.M u v o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.4 . 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.4 . 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.v u u u u u u u u u u u u u u u c / p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.#.7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : , 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > > >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2 y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.c u u u u u u u u u u u u u u x c 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I : : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.: : K a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: : ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.c u u u u u u u u u u u u u u x m t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ : . 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 . 2 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , , 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u u u z B i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.> . : 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L : > ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.z u u u u u u u u u u u u u u z B p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1 : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> : H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2 0 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.u u u u u u u u u u u u u u u u n p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.8 . . 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> . 1 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.> . Y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.v u u u u u u u u u u u u u u u c 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y : > <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ q.a.a.a.a.a.a.a.a.a.a.a.u.4 > =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ : , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.M u u u u u u u u u u u u u u u c o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : > T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ . 3 w.a.a.a.a.a.a.a.a.a.u.e : . r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F c u u u u u u u u u u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.> . q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > . 4 y.a.a.a.a.a.a.a.y.7 : , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 . 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a...c u u u u u u u u u u u u u u u c @.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> , w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.> : 5 y.a.a.a.a.a.,.3 : > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.> H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c u u u u u u u u u u u u u u u u v a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.2 . . > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w., . 2 =.u.u.;.0 > . w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ u u u u u u u u u u u u u u u u u / a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.@./ 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . : K a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.6 . . , > : , : q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y > 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c u u u u u u u u u u u u u u u u x ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.F c c u ` a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : 5 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : , ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 , a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F u u u u u u u u u u u u u u u u u c $.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.Z c x u c ) a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! > : 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! , . 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.> w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c u u u u u u u u u u u u u u u u u v 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.V c u u u z O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.: > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.: > 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > : R a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.c u u u u u u u u u u u u u u u u u u A a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.$.m c u u u u v 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1 > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.' u u u u u u u u u u u u u u u u u u u x +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.O.b c u u u u c M t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.4 . 1 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e . : y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 : u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.V u u u u u u u u u u u u u u u u u u u u z { p.a.a.a.a.a.a.a.a.a.a.7. .m c c u u u u u c _ p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : > :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&., 4 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.v u u u u u u u u u u u u u u u u u u u u u x x F $.3.2.2.1.1.1.` v c x u u u u u u x v 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I > . : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 > ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: . I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.B u u u u u u u u u u u u u u u u u u u u u u u u c v c v v v v u u u u u u u u u c D i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > : 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H : . > W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>., . , =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.] u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x c #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.> 2 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.> : e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > , u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.@.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c C r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1 > <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.3 . 6 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L . y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u z v #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 . : &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U > . 3 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c ` p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y : , U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.> : 2 : 1 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c B 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T , : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 . : Y u.y > . , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 : W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ c u u u u u u u u u u u u u u u u u u u u u u u u u u z v @.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.: . 6 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > > U a.a.a.E > . : 7 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ c u u u u u u u u u u u u u u u u u u u u u u u u c ` i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9., , w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 . e a.a.a.a.a.;., : . : : J u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&. 3 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.m c u u u u u u u u u u u u u u u u u u u u c B 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.3 . > ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > > y.a.a.a.a.a.a.q.Q G T y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.) c c u u u u u u u u u u u u u u u z c +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 : > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., > &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.v u u u u u u u u u u u u u c ` i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K > > U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I : : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.6.1.X.` / @.t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.C c u u u u u u u u u u u c V 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ : : e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3./ M m 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.e.e.r.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.#.V z c v c u u c z m t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.v u u u u u u u u u u u z b 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.6.3.p.a.a.a.a.a.a.a.a.a.:.: . 5 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.} b c u u z e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.2.O. ./ V m c u v c c u V a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.F z c u u u u u u u u u x M a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p._ c u u u u u u u u u u z c o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.D c c c D a.a.a.a.a.a.a.a.q., , 8.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.1.| / ..$.i.a.a.a.a.a.a.a.<.: : t a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.F z c u u z v 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.2.} V u c c c u u u u u u u u c c { a.a.a.a.a.a.a.a.a.a.a.a.p...v v z u u u u u u u u u u z x ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.m c u u u u u u u u u u c ` t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.$.M z u u u u A a.a.a.a.a.a.a.u.4 . X $ a d f x c u v / i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.| v x c u u u c M p.a.a.a.a.a.a.w . > y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.D x u u u u x F t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.| m z c u u u u u u u u u u u u c v | t.a.a.a.a.a.a.a.a.a.a.a.a.o.v c u u u u u u u u c u n Z _ o.6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.z u u u u u u u u u u c C 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.| v c u u u u u c 2.a.a.a.a.a.a.a.e : ; # g k k u u u u u u u z b 6.a.a.a.a.a.a.a.a.a.a.a.2.C c z u u u u u u u z ..a.a.a.a.a.>.: > E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.A c u u u u c M 5.a.a.a.a.a.a.6.e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.@.V z c u u u u u u u u u u u u u c n O.p.a.a.a.a.a.a.a.a.a.a.a.a.O.b c u u u u u u u c m | 2.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.S c u u u u u u u u u c n 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.b z u u u u u u u V a.a.a.a.a.a.a.U < a k k u u u u u u u u u u u u { a.a.a.a.a.a.a.a.a.6.V c u u u u u u u u u u c +.a.a.a.a.a.e . 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.C c u u u u c b #.a.a.a.a.a.a.e.F m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.b c u u u u u u u u u u u u u u c B 1.a.a.a.a.a.a.a.a.a.a.a.a.a.+.b x u u u u u u x x D 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.v x u u u u u u u u z c o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ x u u u u u u u u z 5.a.a.a.a.a.a.&.- k u u u u u u u u u u u u u u u F a.a.a.a.a.a.a.t./ c u u u u u u u u u u u u v 6.a.a.a.a.w.: > ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.V c u u u u c c .p.a.a.a.a.a.i.` x u #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.B c u u u u u u u u u u u u u c v { e.a.a.a.a.a.a.a.a.a.a.a.a.a.+.b c u u u u u u z c | t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ c u u u u u u u u u z D i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.m c u u u u u u u u u D a.a.a.a.a.a.%.h k u u u u u u u u u u u u u u u x ..a.a.a.a.a.a.| z x u u u u u u u u u u u u u c p.a.a.a.a.I : . r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.B c u u u u u c / t.a.a.a.a.a.a. .c z u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.) c u u u u u u u u u u u u z c D 1.p.a.a.a.a.a.a.a.a.a.a.a.a.a.$.b x u u u u u u x z ` i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.M c u u u u u u u u u c $.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a...c u u u u u u u u u u z e.a.a.a.a.a.[ k u u u u u u u u u u u u u u u u u c 3.a.a.a.a.e.M z u u u u u u u u u u u u u u x } a.a.a.a.u., : w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.F c u u u u u c B 6.a.a.a.a.a.a.2.v c u u c 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.b z u u u u u u u u u u u c c { t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.n x u u u u u u u c F e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.v u u u u u u u u u c D i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.B c u u u u u u u u u u z / a.a.a.a.6.n k u u u u u u u u u u u u u u u u u u c a.a.a.a.X.c u u u u u u u u u u u u u u u u z i.a.a.a.a.! > > T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u z v #.a.a.a.a.a.a.p._ c u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u u u u u u u u c ] i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.m x u u u u u u u u c +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u x v 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c x u u u u u u u u u u u z r.a.a.a.+.c u u u u u u u u u u u u u u u u u u u u ' a.a.e.V c u u u u u u u u u u u u u u u u z ] a.a.a.a.a.4 3 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c x u u u u x x { p.a.a.a.a.a.a.5.b x u u u u z 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.m z u u u u u u u u u u u c C e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.C c u u u u u u u u u v $.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c u u u u u u u u c F t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` c u u u u u u u u u u u u c { a.a.a.` c u u u u u u u u u u u u u u u u u u u u c 6.a.O.c x u u u u u u u u u u u u u u u u u z r.a.a.a.a.;., > =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.m z u u u u u c A e.a.a.a.a.a.a.p.` c u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.b u u u u u u u u u u u u c O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c x u u u u u u u u u u z c ) ..O.#.1.3.e.r.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` z u u u u u u u u c #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.m c u u u u u u u u u u u u u c i.a.i.C c u u u u u u u u u u u u u u u u u u u u u m t.C c u u u u u u c u u u u u u u u u u u x F a.a.a.a.a.w 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.Z c u u u u u c n 1.a.a.a.a.a.a.a.6.m x u u u u u u c #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u u u u x m r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.A c u u u u u u u u u u u u u u u u z c v v c c u u x v b M V A { +.6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ c u u u u u u u u c +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.$.c u u u u u u u u u u u u u u c O.a.6.b u u u u u u u u u u u c x v u u u u u u u u z V c u u u u u u c / +.c u u u u u u u u u u x 6.a.a.a.a.w.: : :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.) c u u u u u u c ..a.a.a.a.a.a.a.a.X.c u u u u u u u u v a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u z B i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c c v | i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a. .c u u u u u u u u c X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.) c u u u u u u u u u u u u u u x M a.$.c u u u u u u u u u k k ( 3.7.{ z u u u u u u u z c u u u u u c M e.a.5.v u u u u u u u u u u C a.a.a.a.a.T : 0 a.a.a.a.a.a.a.a.a.a.a.a.a.p.| c z u u u u u c m e.a.a.a.a.a.a.a.a. .z u u u u u u u u c ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.c u u u u u u u u u u u c C p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.B x c x u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x x ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c u u u u u u u u c } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.b c u u u u u u u u u u u u u u u x 6.{ z u u u u u u u u k l * ,.a.a.a./ u u u u u u u u u u u u u u z { p.a.a.| z u u u u u u u u u c 2.a.a.a.a.a.4 > >.a.a.a.a.a.a.a.a.a.a.a.a.5.m c u u u u u u c F p.a.a.a.a.a.a.a.a.} c u u u u u u u u u c i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.c u u u u u u u u u u u u v p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.4.X.{ _ F D Z C B M M V C A F D C V M m b x c c u u u u u u u u u u u u z 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.z u u u u u u u u x F a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u c b v u u u u u u u u u u x / C c u u u u u u u u k p > ^ a.a.a.6.c u u u u u u u u u u u u u c +.a.a.a.p.v u u u u u u u u u u m a.a.a.a.a.9.: . w a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u u u c O.a.a.a.a.a.a.a.a.a.+.z u u u u u u u u u u ` a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.V u u u u u u u u u u u u c 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.| c c u u u u u u u u u u u v p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.c u u u u u u u u u z t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.m c u u u c } a.m u u u u u u u u u u u x x u u u u u u u u k & : U a.a.a.a.V u u u u u u u u u u u u u z #.a.a.a.a.+.c u u u u u u u u u c +.a.a.a.a.a.I . > <.a.a.a.a.a.a.a.a.a.a.5.n c u u u u u u z n 7.a.a.a.a.a.a.a.a.a.e.z u u u u u u u u u u x e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` c u u u u u u u u u u u z F a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u u u u u u v 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.m u u u u u u u u u x } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u c M e.a.e.x u u u u u u u u u x u u u u u u u u u u k % : e a.a.a.a.+.c u u u u u u u u u u u u z 1.a.a.a.a.a.b u u u u u u u u u u x i.a.a.a.a.a.1 . r a.a.a.a.a.a.a.a.a.p._ c u u u u u u u c D p.a.a.a.a.a.a.a.a.a.p.m u u u u u u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.c u u u u u u u u u u u u c r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ c u u u u u u u u u z O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F x u u u u u u u u u v p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.m c u u u x F p.a.a.D u u u u u u u u u u x u u u u u u u u u k @ . 4 y.a.a.a.e.c u u u u u u u u u u u u c 2.a.a.a.a.a.1.c u u u u u u u u u u V a.a.a.a.a.>., > 9.a.a.a.a.a.a.a.a.3.b c u u u u u u u c ` a.a.a.a.a.a.a.a.a.a.a.| c u u u u u u u u u u u F a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.c u u u u u u u u u u u u u c a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.u u u u u u u u u u u ) a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.c u u u u u u u u u x | a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.| c u u u u z ..a.a.a.5.c u u u u u u u u u u u u u u u u u u u k O , 0.a.a.a.a.m u u u u u u u u u u u u c 3.a.a.a.a.a.a.V u u u u u u u u u u c O.a.a.a.a.a.H . : L a.a.a.a.a.a.a.p.) c u u u u u u u u c S a.a.a.a.a.a.a.a.a.a.a.i.c u u u u u u u u u u u z X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.b u u u u u u u u u u u u u u C a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.m u u u u u u u u u u D a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c u u u u u u u u u u c 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.M c u u u u c 2.a.a.a.a.V u u u u u u u u u u u u u u u u u u u l o : :.a.a.a.a.{ c u u u u u u u u u u u c 3.a.a.a.a.a.a.6.c u u u u u u u u u u z r.a.a.a.a.a.4 . 1 y.a.a.a.a.a.a.2.b u u u u u u u u u z V p.a.a.a.a.a.a.a.a.a.a.a.` z u u u u u u u u u u u c X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.S z u u u u u u u u u u u u u u { a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.A u u u u u u u u u x ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.C x u u u u u u u u u u u p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c u u u u c M r.a.a.a.a.$.c u u u u u u u u u u u u u u u u u u f o . : Q a.a.a.a.2.c u u u u u u u u u u u c 5.a.a.a.a.a.a.a.F u u u u u u u u u u u M a.a.a.a.a.a.U 8 q.a.a.a.a.a.i.F c u u u u u u u u u u M p.a.a.a.a.a.a.a.a.a.a.a.i.u u u u u u u u u u u u u u | a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.} c u u u u u u u u u u u u u u u F a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.m u u u u u u u u u c 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.z u u u u u u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.V c u u u u c { a.a.a.a.a.t.v u u u u u u u u u u u u u u u u u k g X > J a.a.a.a.p.v u u u u u u u u u u u c 6.a.a.a.a.a.a.a.r.z u u u u u u u u u u x | a.a.a.a.a.a.a.a.a.a.a.a.a.+.v u z u c u u u u u u u b r.a.a.a.a.a.a.a.a.a.a.a.a.O.c u u u u u u u u u u u u u C a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.F c u u u u u u u u u u u u u u u u b a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.u u u u u u u u u u x r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.m u u u u u u u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a. .c u u u u z c 2.a.a.a.a.a.a.S u u u u u u u u u u u u u u u u u k i . 0 a.a.a.a.a.} c u u u u u u u u u u c 3.a.a.a.a.a.a.a.a.] z u u u u u u u u u u c #.a.a.a.a.a.a.a.a.a.a.a.e.C c u x Z c u u u u u u u c 2.a.a.a.a.a.a.a.a.a.a.a.a.a.B u u u u u u u u u u u u u u c t.a.a.a.a.a.a.a.a.a.a.a.a.7.m c u u u u u u u u u u u u u u u u u z p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u u V a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.z u u u u u u u u u u u u c a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.b z u u u u c V r.a.a.a.a.a.a.+.c u u u u u u u u u u u u u u u u k s . 2 y.a.a.a.a.e.x u u u u u u u u u u c o.a.a.a.a.a.a.a.a.p.c u u u u u u u u u u u c 7.a.a.a.a.a.a.a.a.a.a.X.c u u c 1.S u u u u u u u u B a.a.a.a.a.a.a.a.a.a.a.a.a.r.x u u u u u u u u u u u u u u c B p.a.a.a.a.a.a.a.a.a.e.| z u u u u u u u u u u u u u u u u u u u v 1.a.a.a.a.a.a.a.a.a.a.a.a.a.e.X.| X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Z u u u u u u u u u c 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.c u u u u u u u u u u u u u c e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.M c u u u u u c } a.a.a.a.a.a.a.r.c u u u u u u u u u u u u u u u u u p > 9.a.a.a.a.a.F u u u u u u u u u u c _ a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u a.a.a.a.a.a.a.a.a.6.m c u c V t.2.z u u u u u u u c o.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u u u u x b +.t.a.a.a.r.5.O.B z c u u c z u u u u u u u u u u u u u u u u u v e.a.a.a.a.a.a.a.a.a.a.2.V z c u u Z a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u c O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.@.c u u u u u u u u u u u u u u { a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.D c u u u u u z b 6.a.a.a.a.a.a.a.a.C u u u u u u u u u u u u u u u u k = > =.a.a.a.a.a.t.c u u u u u u u u u u V a.a.a.a.a.a.a.a.a.a.} u u u u u u u u u u u u n a.a.a.a.a.a.a.i._ x u u x .a.a.b u u u u u u u u c 3.a.a.a.a.a.a.a.a.a.t.$._ ` } u u u u u u u u u u u u u u u u u u c c c c u c c c u u u c n 5.u u u u u u u u u u u u u u u u u u u z F 1.5.e.t.a.7.O.D c c u u u c C e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.n u u u u u u u u c +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.M u u u u u u u u u u u u u u u c 7.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c c u u u u u c ) p.a.a.a.a.a.a.a.a.O.c u u u u u u u u u u u u u u u k # > T a.a.a.a.a.a. .z u u u u u u u u u b p.a.a.a.a.a.a.a.a.a.a.B u u u u u u u u u u u u m a.a.a.a.a.a.$.v x u z n 6.a.a.X.z u u u u u u u u c ` a.a.a.a.p.7.#./ b z z u Z C u u u u u u u u u u u u u u u u u u u u u u u u u u u u c } a.a.u u u u u u u u u u u u u u u u u u u u u c v c z u c z u u u u c b 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.b u u u u u u u c C r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.x u u u u u u u u u u u u u u u u b 6.a.a.a.a.a.a.a.a.a.a.3._ c c u u u u u z v 2.a.a.a.a.a.a.a.a.a.r.x u u u u u u u u u u u u u u u k $ > y a.a.a.a.a.a.a.v u u u u u u u u u c e.a.a.a.a.a.a.a.a.a.a.p.c u u u u u u u u u u u u v a.a.a.a.e.C c u u z ` p.a.a.a.c u u u u u u u u u u c v C m u z c c u u u c | a.C u u u u u u u u u u u u u u u u u u u u u u u u u u c C 6.a.a.a.u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u z c ..p.a.a.a.a.a.a.a.a.a.a.3.o.) 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.b z u u u u u x c O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ u u u u u u u u u u u u u u u u u u z ) 1.e.a.a.a.p.3.` c v u u u u u u u c D i.a.a.a.a.a.a.a.a.a.a.C u u u u u u u u u u u u u u u k + : 6 u.a.a.a.a.a.a.7.c u u u u u u u u c 1.a.a.a.a.a.a.a.a.a.a.a.t.x u u u u u u u u u u u u c 5.a.1.C c u u c m 3.a.a.a.a.$.c u u u u u u u u u u u u u u u u u u u c Z e.a.a.A u u u u u u u u u u u u u u u u u u u u u u u u c M 2.a.a.a.a.a.b u u u u u u u u u u u u u u u u u u u u u u u u u u u u c F t.a.a.a.a.a.a.a.a.p.$.F c c x z o.a.a.a.a.a.a.a.a.a.a.a.a.a.2.V c u u u u u u c C r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b u u u u u u u u u u u u u u u u u u u u c c z u u x c u u u u u u u u x c #.a.a.a.a.a.a.a.a.a.a.a.o.c u u u u u u u u u u u u u u l o 1 w.a.a.a.a.a.a.a.O.c u u u u u u u u B a.a.a.a.a.a.a.a.a.a.a.a.a.u u u u u u u u u u u u u u c u v u u u x } p.a.a.a.a.a.M u u u u u u u u u u u u u u u u u u c v 1.a.a.a.a./ u u u u u u u u u u u u u u u u u u u u u u c b #.a.a.a.a.a.a.a.{ z u u u u u u u u u u u u u u u u u u u u u u u u u c m 5.a.a.a.a.a.a.a.a.2.Z z c u u u u u V 6.a.a.a.a.a.a.a.a.i.1.{ m c u u u u u u v b +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.z u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c V r.a.a.a.a.a.a.a.a.a.a.a.i.c u u u u u u u u u u u u u z j X . : ,.a.a.a.a.a.a.a.a._ u u u u u u u u x 6.a.a.a.a.a.a.a.a.a.a.a.a.a.u u u u u u u u u u u u u u u u u u c B e.a.a.a.a.a.a.a.c u u u u u u u u u u u u u u u u u c { p.a.a.a.a.a.$.c u u u u u u u u u u u u u u u u u u u x v o.a.a.a.a.a.a.a.a.a.r.c u u u u u u u u u u u u u u u u u u u u u u x x C 2.a.a.a.a.a.a.a.a.3.M c u u u u u u u u z c u m / F D Z C b x c u u u u u u c z A 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u z c X.a.a.a.a.a.a.a.a.a.a.a.a.a.) z u u u u u u u u u u u u c N < > ^ a.a.a.a.a.a.a.a.a._ u u u u u u u x F a.a.a.a.a.a.a.a.a.a.a.a.a.a.v u u u u u u u u u u u u u u u x c o.a.a.a.a.a.a.a.a.a.u u u u u u u u u u u u u u u x x ) r.a.a.a.a.a.a.a.p.c u u u u u u u u u u u u u u u u u c c | i.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u u u u u u u u u u u u c x ` e.a.a.a.a.a.a.a.a.a.6.z u u u u u u u u u u u u u u u u u u u u u u u u u u c v | t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.o.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x D r.a.a.a.a.a.a.a.a.a.a.a.a.a.7.z u u u u u u u u u u u u c ) 8 > I a.a.a.a.a.a.a.a.a.a. .x u u u u u u x t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c u u u u u u u u u u u u u c S r.a.a.a.a.a.a.a.a.a.i.z u u u u u u u u u u u u z c ) r.a.a.a.a.a.a.a.a.a.a.2.u u u u u u u u u u u u u u c x C +.i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.F c c u u u u u u u u u u u u u c c A O.p.a.a.a.a.a.a.a.a.a.a.a.t.M x c c c u u u u u u u u u u u u u u u u u u v c v A 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x b 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.C u u u u u u u u u u u u c ..;., : 9 a.a.a.a.a.a.a.a.a.a.a.7.c u u u u u x { a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b u u u u u u u u u u c c _ e.a.a.a.a.a.a.a.a.a.a.a.a.` c u u u u u u u u u c v } r.a.a.a.a.a.a.a.a.a.a.a.a.a.1.b c u u u u u u u u c u B O.t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.| V z c v v c c c c u c M } 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.1.X.) V v x c v c c u c z c c c z b S .2.t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ u u u u u u u u u u u u u u u u u u u u u u u u u u u u u z } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u c @.a.8 , w.a.a.a.a.a.a.a.a.a.a.a.a.S x u u u u z e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.b c u u u u u u c n O.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.V c u u u u v c c / 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.F n z v m B S / X.r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.3.1.+.@.3.e.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.e.3.1.+.X.X.O.O.@.3.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` u u u u u u u u u u u u u u u u u u u u u u u u u u u c Z e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.V u u u u u u u u u u u c 3.a.;., > *.a.a.a.a.a.a.a.a.a.a.a.a.a.i.V c u u x Z a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p...M z u x m / 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.| { _ { $.e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a. .u u u u u u u u u u u u u u u u u u u u u u u u u z b 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.z u u u u u u u u u z n e.a.a.9 > K a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.b x m t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c u u u u u u u u u u u u u u u u u u u u u u z c { p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.v u u u u u u u u c Z p.a.a.9.> . 5 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u u u u u u u u u u u u u c c { t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.c u u u u u u u c { a.a.a.a.K : > 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.n u u u u u u u u u u u u u u u u u u x c ` t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u u u u u u u c #.a.a.a.a.u.> > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.o.z u u u u u u u u u u u u u u u u z ` r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ c u u u c b 7.a.a.a.a.a.^ , : H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.c u u u u u u u u u u u u u u c ) r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.D c c v ..p.a.a.a.a.a.a.9 . 6 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.c u u u u u u u u u u c c { e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.e.a.a.a.a.a.a.a.a.0.> , 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.v v z u u u v c c / 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Q : > -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.1.X.) D | $.7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.",
|
||||
"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a."
|
||||
};
|
||||
|
|
|
@ -14,10 +14,10 @@
|
|||
כדי להפסיק פקודה באמצע ההקשה, יש להקיש C-g.
|
||||
המחרוזת ">>" בקצה הימני מסמנת הוראות עבורכם כדי לנסות להשתמש בפקודה כלשהי.
|
||||
לדוגמה:
|
||||
<<שורות ריקות תתווספנה סביב השורה הבאה ע"י help-with-tutorial>>
|
||||
<<שורות ריקות תתווספנה סביב השורה הבאה ע״י help-with-tutorial>>
|
||||
[אמצע העמוד הושאר ריק למטרות לימודיות. הטקסט ממשיך להלן]
|
||||
>> הקישו עתה C-v (הצג העמוד הבא) על־מנת להתקדם לעמוד הבא. (קדימה, נסו
|
||||
זאת ע"י לחיצה והחזקה של מקש CONTROL והקשה על v.)
|
||||
זאת ע״י לחיצה והחזקה של מקש CONTROL והקשה על v.)
|
||||
מעתה והלאה, עליכם לעשות זאת בכל פעם שתסיימו לקרוא את המוצג על המסך.
|
||||
|
||||
שימו לב לחפיפה של שתי שורות כאשר אתם עוברים ממסך למשך, מה שמבטיח רציפות
|
||||
|
@ -99,7 +99,7 @@ P מ־previous (קודם), N מ־Next (הבא), B מ־Backward (אחורה)
|
|||
לתצוגה. לזה קוראים "גלילה". גלילה מאפשרת ל־Emacs להניע את הסמן למקום
|
||||
כלשהו בטקסט מבלי שהסמן ייעלם מהתצוגה.
|
||||
|
||||
>> נסו להניע את הסמן אל מחוץ לתצוגה ע"י הקשת C-n ושימו לב למה שקורה.
|
||||
>> נסו להניע את הסמן אל מחוץ לתצוגה ע״י הקשת C-n ושימו לב למה שקורה.
|
||||
|
||||
אם תנועה תו־תו איטית מדי, תוכלו לנוע מילים שלמות. M-f (META-f) מזיז
|
||||
את הסמן מילה אחת קדימה ואילו M-b זז מילה אחורה.
|
||||
|
@ -196,18 +196,18 @@ argument) משום מקישים אותו לפני הפקודה אליה הוא
|
|||
>> נסו עתה להקיש C-u 8 C-v.
|
||||
|
||||
כתוצאה, התצוגה היתה צריכה לזוז ב־8 שורות. אם ברצונכם לגלול בחזרה,
|
||||
אפשר להשיג זאת ע"י מתן ארגומנט ל־M-v.
|
||||
אפשר להשיג זאת ע״י מתן ארגומנט ל־M-v.
|
||||
|
||||
אם הפעלתם את Emacs על־גבי תצוגה גרפית כגון X או MS-Windows, אתם
|
||||
צריכים לראות פס צר וגבוה, ששמו פס גלילה (scroll bar) בצידו של החלון
|
||||
של Emacs. ניתן לגלול את הטקסט ע"י הקלקת עכבר בתוך פס הגלילה.
|
||||
של Emacs. ניתן לגלול את הטקסט ע״י הקלקת עכבר בתוך פס הגלילה.
|
||||
|
||||
אם העכבר שלכם מצויד בגלגל, תוכלו להשתמש גם בו לגלילת הטקסט.
|
||||
|
||||
* אם Emacs מפסיק להגיב
|
||||
----------------------
|
||||
|
||||
אם Emacs מפסיק להגיב לפקודות, תוכלו להפסיק אותו בבטחה ע"י הקשת C-g.
|
||||
אם Emacs מפסיק להגיב לפקודות, תוכלו להפסיק אותו בבטחה ע״י הקשת C-g.
|
||||
פקודות שביצוען מתארך אף הן ניתנות להפסקה בעזרת C-g.
|
||||
|
||||
בנוסף, תגרום הקשת C-g לביטול הארגומנט הנומרי או תחילת הפקודה שטרם
|
||||
|
@ -272,7 +272,7 @@ argument) משום מקישים אותו לפני הפקודה אליה הוא
|
|||
יתכן שבמקלדת שלכם קיים מקש שעליו רשום <Delete>, אך זה אינו המקש שאנו
|
||||
קוראים לו <DEL>.
|
||||
|
||||
>> הקישו עתה מספר תוים, ואחר־כך מחקו אותם ע"י הקשות אחדות
|
||||
>> הקישו עתה מספר תוים, ואחר־כך מחקו אותם ע״י הקשות אחדות
|
||||
על <DEL>. אל תחששו לשנות את הקובץ הזה -- העותק המקורי
|
||||
של השיעור יישאר ללא שינוי. אתם עובדים על העותק האישי שלכם.
|
||||
|
||||
|
@ -402,7 +402,7 @@ argument) משום מקישים אותו לפני הפקודה אליה הוא
|
|||
אם שיניתם את הטקסט ואז החלטתם שהשינוי היה טעות, תוכלו לבטל את השינוי
|
||||
בעזרת פקודת הביטול, C-/.
|
||||
|
||||
בדרך כלל,C-/ מבטל את השינויים שבוצעו ע"י פקודה אחת. הפעלה חוזרת של
|
||||
בדרך כלל,C-/ מבטל את השינויים שבוצעו ע״י פקודה אחת. הפעלה חוזרת של
|
||||
C-/ ברצף מבטלת שינויים של פקודות קודמות, אחת אחרי השניה.
|
||||
|
||||
שני יוצאים מהכלל הזה: פקודות שאינן משנות טקסט (למשל פקודות הנעת הסמן
|
||||
|
@ -468,7 +468,7 @@ C-x u, אם־כי היא פחות נוחה להקשה מספר פעמים בזו
|
|||
|
||||
פקודה זו שומרת בקובץ את הטקסט המוחזק בתוך Emacs. בפעם הראשונה שתפעילו
|
||||
פקודה זו, Emacs משנה את שם הקובץ המקורי לשם חדש כך שהמקור לא ילך
|
||||
לאיבוד. השם החדש נוצר ע"י הוספת "~" בסוף השם המקורי של הקובץ.
|
||||
לאיבוד. השם החדש נוצר ע״י הוספת "~" בסוף השם המקורי של הקובץ.
|
||||
|
||||
כשהשמירה מסתיימת, Emacs מציג בשורה התחתונה את שם הקובץ שנשמר. נסו
|
||||
לשמור לעתים מזומנות על־מנת להימנע מלאבד יותר מדי מהעבודה שלכם אם המחשב
|
||||
|
@ -489,7 +489,7 @@ Emacs ייצור את הקובץ עם הטקסט שהקשתם. מאותו רגע
|
|||
--------
|
||||
|
||||
אם תפתחו קובץ נוסף עם C-x C-f, הקובץ הראשון עדיין נשאר פתוח ב־Emacs.
|
||||
תוכלו לחזור אליו ע"י C-x C-f. כך תוכלו לפתוח מספר רב של קבצים.
|
||||
תוכלו לחזור אליו ע״י C-x C-f. כך תוכלו לפתוח מספר רב של קבצים.
|
||||
|
||||
Emacs מחזיק כל קובץ בתוך יישות בשם "חוצץ" ("buffer"). פתיחת קובץ יוצרת
|
||||
חוצץ חדש בתוך Emacs. כדי לראות את רשימת החוצצים הקיימים בתוך Emacs,
|
||||
|
@ -508,19 +508,19 @@ Emacs ייצור את הקובץ עם הטקסט שהקשתם. מאותו רגע
|
|||
כשקיימים מספר חוצצים, רק אחד מהם יכול להיות החוצץ "הנוכחי" בכל רגע
|
||||
נתון. זהו החוצץ בו אתם מבצעים עריכה באותו רגע. אם ברצונכם לערוך חוצץ
|
||||
אחר, עליכם "לעבור" חוצץ. עבור חוצצים שמתאימים לקבצים, ניתן לעשות זאת
|
||||
ע"י C-x C-f שיפקוד את הקובץ בשנית. אבל קיימת דרך פשוטה יותר: שימוש
|
||||
ע״י C-x C-f שיפקוד את הקובץ בשנית. אבל קיימת דרך פשוטה יותר: שימוש
|
||||
בפקודה C-x b. פקודה זו תחייב אותכם להקיש את שם החוצץ.
|
||||
|
||||
>> ניצור עתה קובץ בשם "foo" ע"י הקשת C-x C-f foo <Return>.
|
||||
>> ניצור עתה קובץ בשם "foo" ע״י הקשת C-x C-f foo <Return>.
|
||||
עתה חזרו לשיעור זה בעזרת C-x b TUTORIAL.he <Return>.
|
||||
|
||||
ברוב המקרים שם החוצץ זהה לשם הקובץ (ללא שם התיקיה שלו). אבל אין זה
|
||||
תמיד כך. רשימת החוצצים שנוצרת ע"י C-x C-b תציג הן את שם החוצץ והן את
|
||||
תמיד כך. רשימת החוצצים שנוצרת ע״י C-x C-b תציג הן את שם החוצץ והן את
|
||||
שם הקובץ עבור כל החוצצים הקיימים ב־Emacs.
|
||||
|
||||
כל טקסט שמוצג בחלון של Emacs הינו תמיד חלק של חוצץ כלשהו. קיימים
|
||||
חוצצים שאינם קשורים לשום קובץ. לדוגמא, החוצץ בשם "*Buffer List*"
|
||||
המחזיק את רשימת החוצצים שנוצרה ע"י C-x C-b אינו מציג שום קובץ. גם
|
||||
המחזיק את רשימת החוצצים שנוצרה ע״י C-x C-b אינו מציג שום קובץ. גם
|
||||
לחוצץ הנוכחי ששמו TUTORIAL.he לא היה קובץ עד שהקשתם על C-x C-s כדי
|
||||
לשמור אותו בקובץ.
|
||||
|
||||
|
@ -545,18 +545,18 @@ C-x C-s. לכן קיימת פקודה
|
|||
|
||||
>> הכניסו שורה של טקסט ואחר־כך הקישו C-x s.
|
||||
הוא צריך לשאול האם לשמור חוצץ בשם TUTORIAL.he.
|
||||
השיבו בחיוב ע"י הקשה על "y".
|
||||
השיבו בחיוב ע״י הקשה על "y".
|
||||
|
||||
|
||||
* הרחבת אוסף הפקודות
|
||||
--------------------
|
||||
|
||||
מספר הפקודות ב־Emacs גדול בהרבה ממה שניתן להפעיל ע"י כל תוי ה־control
|
||||
מספר הפקודות ב־Emacs גדול בהרבה ממה שניתן להפעיל ע״י כל תוי ה־control
|
||||
וה־meta. כדי להתגבר על בעיה זו, Emacs משתמש בפקודות X המרחיבות (eXtend)
|
||||
את אוסף הפקודות הרגיל. פקודות הרחבה אלו הן שתים:
|
||||
|
||||
C-x הרחבת תו. תו בודד שבא אחריו משלים את הפקודה.
|
||||
M-x הרחבה ע"י שם הפקודה. אחריו בא שם ארוך של פקודה.
|
||||
M-x הרחבה ע״י שם הפקודה. אחריו בא שם ארוך של פקודה.
|
||||
|
||||
בעזרת שתי אלו ניתן להפעיל פקודות שימושיות שבהן משתמשים לעתים רחוקות
|
||||
יותר מאשר פקודות שלמדתם עד עכשיו. כמה מהן כבר ראיתם: C-x C-f לפתיחת
|
||||
|
@ -577,7 +577,7 @@ Emacs: הוא מחזיר אתכם לשורת הפקודות הבסיסית של
|
|||
תצטרכו להקיש את הפקודה "fg" או "%emacs".
|
||||
|
||||
הרגע הנכון להשתמש ב־C-x C-c הוא כאשר אתם עומדים להתנתק (log out).
|
||||
כמו־כן, תצטרכו להשתמש בו כדי לצאת מ־Emacs שהופעל ע"י תוכניות אחרות
|
||||
כמו־כן, תצטרכו להשתמש בו כדי לצאת מ־Emacs שהופעל ע״י תוכניות אחרות
|
||||
כגון קריאת דואר אלקטרוני.
|
||||
|
||||
קיימות פקודות C-x רבות מאד. להלן רשימת אלו שכבר למדתם:
|
||||
|
@ -591,17 +591,17 @@ Emacs: הוא מחזיר אתכם לשורת הפקודות הבסיסית של
|
|||
C-x 1 השאר רק חלון אחד ומחק כל השאר
|
||||
C-x u בטל פקודה אחרונה
|
||||
|
||||
הרחבה ע"י שם הפקודה שימושית עם פקודות עוד יותר נדירות או פקודות
|
||||
הרחבה ע״י שם הפקודה שימושית עם פקודות עוד יותר נדירות או פקודות
|
||||
ספציפיות רק לאופני פעולה (modes) מיוחדים. דוגמא לכך היא פקודה
|
||||
replace-string (החלף מחרוזת) אשר מחליפה מחרוזת אחת במשנה בכל החוצץ.
|
||||
אחרי שתקישו M-x, Emacs מציג M-x בתחתית התצוגה ומחכה שתקישו את שם
|
||||
הפקודה, במקרה זה "replace-string". מספיק שתקישו "repl s<TAB>" ו־Emacs
|
||||
ישלים את השם המלא. (<TAB> הוא מקש Tab, בדרך כלל תמצאו אותו מעל מקש
|
||||
ה־CapsLock או Shift, ליד הקצה השמאלי של המקלדת.) סיימו את הזנת הפקודה
|
||||
ע"י הקשת <Return>.
|
||||
ע״י הקשת <Return>.
|
||||
|
||||
הפקודה להחלפת מחרוזת זקוקה לשני ארגומנטים -- המחרוזת שתוחלף וזו שתחליף
|
||||
אותה. סיימו הקשה של כל אחת מהן ע"י <Return>.
|
||||
אותה. סיימו הקשה של כל אחת מהן ע״י <Return>.
|
||||
|
||||
>> הביאו את הסמן שתי שורות מתחת לשורה זו.
|
||||
עתה הקישו M-x repl s<Return>changed<Return>altered<Return>.
|
||||
|
@ -703,7 +703,7 @@ Auto Fill mode. כאשר אופן זה מופעל, Emacs אוטומטית פות
|
|||
בסיום מילה אם הטקסט שהקשתם ארוך מדי בשביל שורה אחת.
|
||||
|
||||
להפעלת Auto Fill mode יש להקיש M-x auto-fill-mode <Return>. כאשר אופן
|
||||
זה מופעל, ניתן לבטלו ע"י M-x auto-fill-mode <Return>. זאת אומרת, פקודה
|
||||
זה מופעל, ניתן לבטלו ע״י M-x auto-fill-mode <Return>. זאת אומרת, פקודה
|
||||
זו מפעילה את האופן כשאינו פעיל ומבטלת אותו כשהוא פעיל. לפעולה זו
|
||||
קוראים "מיתוג" -- הפקודה "ממתגת" את האופן.
|
||||
|
||||
|
@ -717,7 +717,7 @@ Auto Fill mode. כאשר אופן זה מופעל, Emacs אוטומטית פות
|
|||
|
||||
>> הקישו C-x f עם ארגומנט של 20. (C-u 2 0 C-x f). אחר־כך הקישו טקסט
|
||||
כלשהו ושימו לב ש־Emacs פותח שורות חדשות אחרי 20 תווים לכל היותר.
|
||||
לבסוף, החזירו את הגדרת השוליים ל־70 ע"י שימוש חוזר ב־C-x f.
|
||||
לבסוף, החזירו את הגדרת השוליים ל־70 ע״י שימוש חוזר ב־C-x f.
|
||||
|
||||
אם ערכתם שינויים באמצע פסקה, Auto Fill mode לא ימלא שורות מחדש באופן
|
||||
אוטומטי.
|
||||
|
@ -766,7 +766,7 @@ Auto Fill mode. כאשר אופן זה מופעל, Emacs אוטומטית פות
|
|||
נמצא "סמ". עתה הקישו <DEL>. ה־"מ" נמחק מהמחרוזת והסמן חוזר למקום בו
|
||||
הוא מצא את "ס" לראשונה.
|
||||
|
||||
אם במהלך החיפוש תפעילו פקודה כלשהי ע"י הקשה על מקש תוך לחיצה על
|
||||
אם במהלך החיפוש תפעילו פקודה כלשהי ע״י הקשה על מקש תוך לחיצה על
|
||||
CONTROL או META, החיפוש יסתיים. (כמה תווים יוצאים מכלל זה -- אלו תווים
|
||||
מיוחדים בעת חיפוש, כדוגמת C-s ו־C-r.)
|
||||
|
||||
|
@ -800,7 +800,7 @@ CONTROL או META, החיפוש יסתיים. (כמה תווים יוצאים מ
|
|||
הסמן בחלון העליון יישאר במקום בו הוא היה לפני־כן.
|
||||
|
||||
תוכלו להמשיך להשתמש ב־C-x o כדי לדלג בין החלונות. "החלון הנבחר", אותו
|
||||
חלון בו הנכם עורכים טקסט, מזוהה ע"י סמן בולט שמהבהב בזמן שאינכם
|
||||
חלון בו הנכם עורכים טקסט, מזוהה ע״י סמן בולט שמהבהב בזמן שאינכם
|
||||
מקלידים. לכל החלונות האחרים מיקום סמן משלהם; אם הפעלתם את Emacs על צג
|
||||
גרפי, מיקום הסמן בחלונות האחרים מוצג כתיבה ריקה שאינה מהבהבת.
|
||||
|
||||
|
@ -809,9 +809,9 @@ CONTROL או META, החיפוש יסתיים. (כמה תווים יוצאים מ
|
|||
הנבחר.
|
||||
|
||||
C-M-v היא דוגמא אחת של פקודת CONTROL-META. אם במקלדת שלכם קיים מקש
|
||||
META (או Alt) אמיתי, תוכלו להקיש את הפקודה ע"י לחיצה והחזקה של מקשי
|
||||
META (או Alt) אמיתי, תוכלו להקיש את הפקודה ע״י לחיצה והחזקה של מקשי
|
||||
CONTROL ו־META גם יחד ואז להקיש v. הסדר שבו תלחצו על CONTROL ו־META
|
||||
אינו משנה כי שני המקשים הללו פועלים ע"י שינוי התו המוקש יחד איתם.
|
||||
אינו משנה כי שני המקשים הללו פועלים ע״י שינוי התו המוקש יחד איתם.
|
||||
|
||||
אם אין במקלדת מקש META אמיתי ואתם משתמשים ב־<ESC> כתחליף, הסדר כן
|
||||
משנה: חייבים להקיש <ESC> ורק לאחר מכן CONTROL-v, וזאת משום
|
||||
|
@ -854,8 +854,8 @@ CONTROL ו־META גם יחד ואז להקיש v. הסדר שבו תלחצו ע
|
|||
>> הקישו M-x delete-frame <Return>.
|
||||
התבנית שבה הקשתם את הפקודה תיסגר ותיעלם מהמסך.
|
||||
|
||||
כמו־כן, ניתן לסגור תבנית בדרך הרגילה הנתמכת ע"י התצוגה הגרפית של
|
||||
המערכת שלכם (בדרך־כלל, ע"י הקלקה על הכפתור המסומן ב־"X" בפינה עליונה
|
||||
כמו־כן, ניתן לסגור תבנית בדרך הרגילה הנתמכת ע״י התצוגה הגרפית של
|
||||
המערכת שלכם (בדרך־כלל, ע״י הקלקה על הכפתור המסומן ב־"X" בפינה עליונה
|
||||
של התבנית.) שום מידע אינו הולך לעיבוד כאשר סוגרים תבנית (או חלון).
|
||||
המידע הזה פשוט יורד מהתצוגה, אבל ניתן לאחזרו מאוחר יותר.
|
||||
|
||||
|
@ -863,7 +863,7 @@ CONTROL ו־META גם יחד ואז להקיש v. הסדר שבו תלחצו ע
|
|||
* רמות עריכה רקורסיביות
|
||||
-----------------------
|
||||
|
||||
יתכן ותיקלעו למצב שקרוי "רמת עריכה רקורסיבית". Emacs מציין זאת ע"י
|
||||
יתכן ותיקלעו למצב שקרוי "רמת עריכה רקורסיבית". Emacs מציין זאת ע״י
|
||||
סוגריים מרובעים בשורת הסטטוס מסביב לשם האופן הראשי. למשל, יוצג שם
|
||||
[(Fundamental)] במקום (Fundamental).
|
||||
|
||||
|
@ -910,7 +910,7 @@ M-x help <Return> כתחליף.)
|
|||
לציין מה הן עושות, השמות עשויים לשמש כתיעוד מקוצר -- מספיק כדי להזכיר
|
||||
לכם את הפקודות שלמדתם בעבר.
|
||||
|
||||
ניתן לציין אחרי C-h c גם פקודות שמופעלות ע"י סדרת מקשים באורך גדול
|
||||
ניתן לציין אחרי C-h c גם פקודות שמופעלות ע״י סדרת מקשים באורך גדול
|
||||
מאחד, כגון C-x C-s או (אם אין מקש META או EDIT או ALT) <ESC> v.
|
||||
|
||||
לקבלת מידע מפורט יותר על פקודה, השתמשו בפקודה C-h k במקום C-h c.
|
||||
|
@ -934,7 +934,7 @@ M-x help <Return> כתחליף.)
|
|||
|
||||
C-h a פקודות בנוגע לנושא מסויים. הקישו מילת מפתח ו־Emacs
|
||||
יציג את רשימת הפקודות ששמותיהן מכילות את מילת המפתח.
|
||||
כל הפקודות הללו ניתנות להפעלה ע"י META-x. עבור חלק
|
||||
כל הפקודות הללו ניתנות להפעלה ע״י META-x. עבור חלק
|
||||
מהפקודות תוצג גם סדרת מקשים שמפעילה את הפקודה.
|
||||
|
||||
>> הקישו C-h a file <Return>.
|
||||
|
@ -960,9 +960,9 @@ find-file.
|
|||
* עוד תכונות
|
||||
------------
|
||||
|
||||
תוכלו ללמוד עוד על־אודות Emacs ע"י קריאה במדריך למשתמש שלו, אם כספר
|
||||
תוכלו ללמוד עוד על־אודות Emacs ע״י קריאה במדריך למשתמש שלו, אם כספר
|
||||
מודפס או בגירסה מקוונת בתוך Emacs עצמו. (תוכלו להגיע אל המדריך דרך
|
||||
תפריט Help או ע"י הקשה על C-h r.) אולם שתי תכונות שבוודאי ימצאו חן
|
||||
תפריט Help או ע״י הקשה על C-h r.) אולם שתי תכונות שבוודאי ימצאו חן
|
||||
בעיניכם הן השלמה אשר חוסכת הקשות, ו־dired שמאפשרת טיפול נוח בקבצים.
|
||||
|
||||
השלמה היא דרך להימנע מהקשות מיותרות. למשל, אם ברצונכם לעבור לחוצץ
|
||||
|
@ -991,7 +991,7 @@ find-file.
|
|||
--------------
|
||||
|
||||
שיעור זה הינו צאצא של שורה ארוכה של שיעורים בשימוש ב־Emacs, החל מהגרסה
|
||||
הראשונה שנכתבה ע"י Stuart Cracraft עבור גירסת ה־Emacs המקורית.
|
||||
הראשונה שנכתבה ע״י Stuart Cracraft עבור גירסת ה־Emacs המקורית.
|
||||
|
||||
גירסה זו של השיעור הינה חלק מחבילת GNU Emacs. היא מוגנת בזכויות יוצרים
|
||||
וניתנת להעתקה והפצת עותקים בתנאים מסויימים כדלקמן:
|
||||
|
@ -999,7 +999,7 @@ find-file.
|
|||
Copyright (C) 2010-2015 Free Software Foundation, Inc.
|
||||
|
||||
GNU Emacs הינו תכנה חפשית; זכותכם להפיצו ו\או לשנותו בכפוף לתנאי
|
||||
הרשיון GNU General Public License, כפי שהוא יוצא לאור ע"י Free
|
||||
הרשיון GNU General Public License, כפי שהוא יוצא לאור ע״י Free
|
||||
Software Foundation, אם בגרסא 3 של הרשיון, ואם (כאופציה השמורה לכם)
|
||||
בכל גרסא מאוחרת יותר.
|
||||
|
||||
|
@ -1012,7 +1012,7 @@ Software Foundation, אם בגרסא 3 של הרשיון, ואם (כאופציה
|
|||
|
||||
הנכם מוזמנים לקרוא את הקובץ COPYING ואז אכן לחלק עותקים של GNU Emacs
|
||||
לחבריכם. עזרו לנו לחסל את "הבעלות" על תוכנה שאינה אלא חבלה בתוכנה,
|
||||
וזאת ע"י שימוש, כתיבה ושיתוף של תוכנה חופשית!
|
||||
וזאת ע״י שימוש, כתיבה ושיתוף של תוכנה חופשית!
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1578,6 +1578,7 @@ time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(
|
|||
-e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \
|
||||
-e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
|
||||
-e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
|
||||
-e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \
|
||||
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
|
||||
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
|
||||
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
|
||||
|
|
|
@ -55,6 +55,8 @@
|
|||
# include <sys/time.h>
|
||||
# elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
|
||||
# include <pthread.h>
|
||||
# elif @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
|
||||
# include <unistd.h>
|
||||
# else
|
||||
|
||||
# ifdef __cplusplus
|
||||
|
|
235
lisp/ChangeLog
235
lisp/ChangeLog
|
@ -1,15 +1,233 @@
|
|||
2015-01-31 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* emacs-lisp/eieio.el (defclass): Use new eieio-make-class-predicate
|
||||
and eieio-make-child-predicate.
|
||||
(eieio-class-parents): Use eieio--class-object.
|
||||
(slot-boundp, find-class, eieio-override-prin1): Avoid class-p.
|
||||
(slot-exists-p): Use find-class.
|
||||
|
||||
* emacs-lisp/eieio-opt.el (eieio-help-class, eieio-help-constructor):
|
||||
Use find-lisp-object-file-name, help-fns-short-filename and new calling
|
||||
convention for eieio-class-def.
|
||||
(eieio-build-class-list): Remove function, unused.
|
||||
(eieio-method-def): Remove button type, unused.
|
||||
(eieio-class-def): Inherit from help-function-def.
|
||||
(eieio--defclass-regexp): New constant.
|
||||
(find-function-regexp-alist): Use it.
|
||||
(eieio--specializers-apply-to-class-p): Handle eieio--static as well.
|
||||
(eieio-help-find-method-definition, eieio-help-find-class-definition):
|
||||
Remove functions.
|
||||
|
||||
* emacs-lisp/eieio-core.el (eieio--check-type): Remove.
|
||||
Use cl-check-type everywhere instead.
|
||||
(eieio-class-object): Remove, use find-class instead when needed.
|
||||
(class-p): Don't inline.
|
||||
(eieio-object-p): Check more thoroughly, so we don't treat cl-structs,
|
||||
such as eieio classes, as objects. Don't inline.
|
||||
(object-p): Mark as obsolete.
|
||||
(eieio-defclass-autoload, eieio-defclass-internal, eieio-oref)
|
||||
(eieio--generic-tagcode): Avoid `class-p'.
|
||||
(eieio-make-class-predicate, eieio-make-child-predicate): New functions.
|
||||
(eieio-defclass-internal): Use current-load-list rather than
|
||||
`class-location'.
|
||||
|
||||
* emacs-lisp/cl-generic.el (cl--generic-search-method): Fix regexp.
|
||||
|
||||
2015-01-30 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* emacs-lisp/backquote.el (backquote-delay-process): Don't reuse `s'
|
||||
since it may be "equivalent" in some sense, yet different (bug#19734).
|
||||
|
||||
2015-01-30 Oleh Krehel <ohwoeowho@gmail.com>
|
||||
|
||||
* outline.el (outline-font-lock-face): Add docstring.
|
||||
(outline-invisible-p): Improve docstring.
|
||||
(outline-invent-heading): Add docstring.
|
||||
(outline-promote): Improve docstring.
|
||||
(outline-demote): Improve docstring.
|
||||
(outline-head-from-level): Improve docstring.
|
||||
(outline-end-of-heading): Add docstring.
|
||||
(outline-next-visible-heading): Improve docstring.
|
||||
(outline-previous-visible-heading): Improve docstring.
|
||||
(outline-hide-region-body): Improve docstring.
|
||||
(outline-flag-subtree): Add docstring.
|
||||
(outline-end-of-subtree): Add docstring.
|
||||
(outline-headers-as-kill): Improve docstring.
|
||||
|
||||
2015-01-30 Oleh Krehel <ohwoeowho@gmail.com>
|
||||
|
||||
* outline.el (outline-hide-entry): Rename from `hide-entry'.
|
||||
(hide-entry): Declare as obsolete.
|
||||
(outline-show-entry): Rename from `show-entry'.
|
||||
(show-entry): Declare as obsolete.
|
||||
(outline-hide-body): Rename from `hide-body'.
|
||||
(hide-body): Declare as obsolete.
|
||||
(outline-hide-region-body): Rename from `hide-region-body'.
|
||||
(hide-region-body): Declare as obsolete.
|
||||
(outline-show-all): Rename from `show-all'.
|
||||
(show-all): Declare as obsolete.
|
||||
(outline-hide-subtree): Rename from `hide-subtree'.
|
||||
(hide-subtree): Declare as obsolete.
|
||||
(outline-hide-leaves): Rename from `hide-leaves'.
|
||||
(hide-leaves): Declare as obsolete.
|
||||
(outline-show-subtree): Rename from `show-subtree'.
|
||||
(show-subtree): Declare as obsolete.
|
||||
(outline-hide-sublevels): Rename from `hide-sublevels'.
|
||||
(hide-sublevels): Declare as obsolete.
|
||||
(outline-hide-other): Rename from `hide-other'.
|
||||
(hide-other): Declare as obsolete.
|
||||
(outline-show-children): Rename from `show-children'.
|
||||
(show-children): Declare as obsolete.
|
||||
(outline-show-branches): Rename from `show-branches'.
|
||||
(show-branches): Declare as obsolete.
|
||||
|
||||
2015-01-30 Oleh Krehel <ohwoeowho@gmail.com>
|
||||
|
||||
* outline.el (outline-mode): Clean up docstring.
|
||||
(font-lock-warning-face): Remove obsolete declaration.
|
||||
(outline-font-lock-face): Remove obsolete comment.
|
||||
|
||||
2015-01-30 Oleh Krehel <ohwoeowho@gmail.com>
|
||||
|
||||
* lisp/custom.el (defface): Set `indent' to 1.
|
||||
|
||||
2015-01-30 Oleh Krehel <ohwoeowho@gmail.com>
|
||||
|
||||
* emacs-lisp/easy-mmode.el (define-minor-mode): Set `indent' to 1.
|
||||
|
||||
2015-01-30 Michal Nazarewicz <mina86@mina86.com>
|
||||
|
||||
* lisp/files.el (save-buffers-kill-emacs): If `confirm-kill-emacs'
|
||||
is set, but user has just been asked whether they really want to
|
||||
kill Emacs (for example with a ‘Modified buffers exist; exit
|
||||
anyway?’ prompt), do not ask them for another confirmation.
|
||||
|
||||
2015-01-29 Jay Belanger <jay.p.belanger@gmail.com>
|
||||
|
||||
* lisp/calc/calc-units.el (calc-convert-exact-units): New function.
|
||||
(calc-convert-units): Check for missing units.
|
||||
(math-consistent-units-p): Strengthen the test for consistent units.
|
||||
|
||||
* lisp/calc/calc-ext.el (calc-init-extensions): Autoload
|
||||
`calc-convert-exact-units' and assign it a keybinding.
|
||||
|
||||
* lisp/calc/calc-help (calc-u-prefix-help): Add help for the
|
||||
"un" keybinding.
|
||||
|
||||
2015-01-28 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* emacs-lisp/cl.el (cl--function-convert): Simplify.
|
||||
|
||||
2015-01-28 Tassilo Horn <tsdh@gnu.org>
|
||||
|
||||
* textmodes/reftex.el (reftex-syntax-table-for-bib): Give ( and )
|
||||
punctuation syntax since to allow bibtex fields with values such
|
||||
as {Test 1) and 2)} (bug#19205, bug#19707).
|
||||
(reftex--prepare-syntax-tables): New function.
|
||||
(reftex-mode): Use it.
|
||||
|
||||
2015-01-28 Fabián Ezequiel Gallina <fgallina@gnu.org>
|
||||
|
||||
python.el: New non-global state dependent indentation engine.
|
||||
(Bug#18319, Bug#19595)
|
||||
* progmodes/python.el (python-syntax-comment-or-string-p):
|
||||
Accept PPSS as argument.
|
||||
(python-syntax-closing-paren-p): New function.
|
||||
(python-indent-current-level)
|
||||
(python-indent-levels): Mark obsolete.
|
||||
(python-indent-context): Return more context cases.
|
||||
(python-indent--calculate-indentation)
|
||||
(python-indent--calculate-levels): New functions.
|
||||
(python-indent-calculate-levels): Use them.
|
||||
(python-indent-calculate-indentation, python-indent-line):
|
||||
(python-indent-line-function): Rewritten to use new API.
|
||||
(python-indent-dedent-line): Simplify logic.
|
||||
(python-indent-dedent-line-backspace): Use `unless`.
|
||||
(python-indent-toggle-levels): Delete function.
|
||||
|
||||
2015-01-28 Daniel Koning <dk@danielkoning.com> (tiny change)
|
||||
|
||||
* subr.el (posnp): Correct docstring of `posnp'.
|
||||
(posn-col-row): Make it work with all mouse position objects.
|
||||
* textmodes/artist.el (artist-mouse-draw-continously):
|
||||
Cancel timers if an error occurs during continuous drawing. (Bug#6130)
|
||||
|
||||
2015-01-28 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* button.el (button-activate, push-button): Doc fix. (Bug#19628)
|
||||
|
||||
2015-01-28 Michael Albinus <michael.albinus@gmx.de>
|
||||
|
||||
* filenotify.el (file-notify-descriptors, file-notify-handle-event):
|
||||
Adapt docstring.
|
||||
(file-notify--descriptor): New defun.
|
||||
(file-notify-callback, file-notify-add-watch, file-notify-rm-watch):
|
||||
Adapt docstring. Handle multiple values for
|
||||
`file-notify-descriptors' entries. (Bug#18880)
|
||||
|
||||
* net/tramp.el (tramp-handle-file-notify-rm-watch): Do not check
|
||||
`file-notify-descriptors', the implementation has been changed.
|
||||
|
||||
2015-01-28 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* net/net-utils.el (net-utils-run-program, net-utils-run-simple):
|
||||
On MS-Windows, bind coding-system-for-read to the console output
|
||||
codepage. (Bug#19458)
|
||||
|
||||
2015-01-28 Dmitry Gutov <dgutov@yandex.ru>
|
||||
|
||||
Unbreak `mouse-action' property in text buttons.
|
||||
* button.el (push-button): Fix regression from 2012-12-06.
|
||||
|
||||
2015-01-28 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* progmodes/sh-script.el (sh-mode): Doc fix.
|
||||
(sh-basic-indent-line): Handle electric newline. (Bug#18756)
|
||||
|
||||
2015-01-28 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Fix dired quoting bug with "Hit`N`Hide". Fixes Bug#19498.
|
||||
* files.el (shell-quote-wildcard-pattern): Also quote "`".
|
||||
|
||||
2015-01-28 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
Tighten up the tagcode used for eieio and cl-struct objects.
|
||||
* loadup.el: Load cl-preloaded.
|
||||
* emacs-lisp/eieio-core.el (eieio-defclass-internal): Set the function
|
||||
slot of the tag symbol to :quick-object-witness-check.
|
||||
(eieio-object-p): Use :quick-object-witness-check.
|
||||
(eieio--generic-tagcode): Use cl--generic-struct-tag.
|
||||
* emacs-lisp/cl-preloaded.el: New file.
|
||||
* emacs-lisp/cl-macs.el (cl--bind-inits): Remove, unused.
|
||||
(cl--transform-lambda, cl-destructuring-bind): Remove cl--bind-inits.
|
||||
(cl--make-usage-args): Strip away &aux args.
|
||||
(cl-case, cl-typecase, cl--parse-loop-clause): Use macroexp-let2.
|
||||
(cl-the, cl-check-type): Use macroexp-let2 and cl-typep.
|
||||
(cl-defstruct): Use `declare' and cl-struct-define.
|
||||
* emacs-lisp/cl-generic.el (cl--generic-struct-tag): New function.
|
||||
(cl--generic-struct-tagcode): Use it to tighten the tagcode.
|
||||
|
||||
2015-01-27 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||
|
||||
* emacs-lisp/cl.el (cl--function-convert):
|
||||
Merge cache that cl--labels-convert adds (bug#19699).
|
||||
|
||||
2015-01-27 Ivan Shmakov <ivan@siamics.net>
|
||||
|
||||
* tar-mode.el: Allow for adding new archive members. (Bug#19274)
|
||||
(tar-new-regular-file-header, tar--pad-to, tar--put-at)
|
||||
(tar-header-serialize): New functions.
|
||||
(tar-current-position): Split from tar-current-descriptor.
|
||||
(tar-current-descriptor): Use it.
|
||||
(tar-new-entry): New command.
|
||||
(tar-mode-map): Bind it.
|
||||
|
||||
2015-01-27 Sam Steingold <sds@gnu.org>
|
||||
|
||||
* progmodes/python.el (python-check-custom-command): Buffer local
|
||||
because it usually includes the buffer name.
|
||||
(python-check-command): Set to epylint when pyflakes is not available.
|
||||
|
||||
2015-01-27 Thomas Fitzsimmons <fitzsim@fitzsim.org>
|
||||
|
||||
* net/eudcb-bbdb.el, net/eudcb-ldap.el, net/eudcb-mab.el,
|
||||
net/eudc-bob.el, net/eudcb-ph.el, net/eudc.el, net/eudc-export.el,
|
||||
net/eudc-hotlist.el, net/eudc-vars.el: New maintainer.
|
||||
|
||||
2015-01-27 Artur Malabarba <bruce.connor.am@gmail.com>
|
||||
|
||||
* isearch.el (isearch-process-search-char): Add docstring.
|
||||
|
@ -70,6 +288,8 @@
|
|||
2015-01-26 Lars Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* net/shr.el (shr-make-table-1): Fix colspan typo.
|
||||
(shr-make-table-1): Add comments.
|
||||
(shr-make-table-1): Make colspan display more sensibly.
|
||||
|
||||
* net/eww.el (eww-add-bookmark): Fix prompt and clean up the code
|
||||
slightly.
|
||||
|
@ -1742,8 +1962,7 @@
|
|||
2014-12-14 Steve Purcell <steve@sanityinc.com> (tiny change)
|
||||
|
||||
* emacs-lisp/package.el (package-menu-mode): Use an extra column
|
||||
for the "Version" column, to accomodate date-and-time-based
|
||||
versions.
|
||||
for the "Version" column, to accomodate date-and-time-based versions.
|
||||
|
||||
2014-12-14 Cameron Desautels <camdez@gmail.com>
|
||||
|
||||
|
|
|
@ -224,10 +224,10 @@ changes to a supertype are not reflected in its subtypes)."
|
|||
prop val))))
|
||||
|
||||
(defun button-activate (button &optional use-mouse-action)
|
||||
"Call BUTTON's action property.
|
||||
If USE-MOUSE-ACTION is non-nil, invoke the button's mouse-action
|
||||
instead of its normal action; if the button has no mouse-action,
|
||||
the normal action is used instead.
|
||||
"Call BUTTON's `action' property.
|
||||
If USE-MOUSE-ACTION is non-nil, invoke the button's `mouse-action'
|
||||
property instead of `action'; if the button has no `mouse-action',
|
||||
the value of `action' is used instead.
|
||||
|
||||
The action can either be a marker or a function. If it's a
|
||||
marker then goto it. Otherwise it it is a function then it is
|
||||
|
@ -429,11 +429,13 @@ instead of starting at the next button."
|
|||
(defun push-button (&optional pos use-mouse-action)
|
||||
"Perform the action specified by a button at location POS.
|
||||
POS may be either a buffer position or a mouse-event. If
|
||||
USE-MOUSE-ACTION is non-nil, invoke the button's mouse-action
|
||||
instead of its normal action; if the button has no mouse-action,
|
||||
the normal action is used instead. The action may be either a
|
||||
function to call or a marker to display and is invoked using
|
||||
`button-activate' (which see).
|
||||
USE-MOUSE-ACTION is non-nil, invoke the button's `mouse-action'
|
||||
property instead of its `action' property; if the button has no
|
||||
`mouse-action', the value of `action' is used instead.
|
||||
|
||||
The action in both cases may be either a function to call or a
|
||||
marker to display and is invoked using `button-activate' (which
|
||||
see).
|
||||
|
||||
POS defaults to point, except when `push-button' is invoked
|
||||
interactively as the result of a mouse-event, in which case, the
|
||||
|
|
|
@ -561,6 +561,7 @@
|
|||
(define-key calc-mode-map "ud" 'calc-define-unit)
|
||||
(define-key calc-mode-map "ue" 'calc-explain-units)
|
||||
(define-key calc-mode-map "ug" 'calc-get-unit-definition)
|
||||
(define-key calc-mode-map "un" 'calc-convert-exact-units)
|
||||
(define-key calc-mode-map "up" 'calc-permanent-units)
|
||||
(define-key calc-mode-map "ur" 'calc-remove-units)
|
||||
(define-key calc-mode-map "us" 'calc-simplify-units)
|
||||
|
@ -1176,7 +1177,8 @@ calc-trail-scroll-right calc-trail-yank)
|
|||
("calc-undo" calc-last-args calc-redo)
|
||||
|
||||
("calc-units" calc-autorange-units calc-base-units
|
||||
calc-convert-temperature calc-convert-units calc-define-unit
|
||||
calc-convert-temperature calc-convert-units
|
||||
calc-convert-exact-units calc-define-unit
|
||||
calc-enter-units-table calc-explain-units calc-extract-units
|
||||
calc-get-unit-definition calc-permanent-units calc-quick-units
|
||||
calc-remove-units calc-simplify-units calc-undefine-unit
|
||||
|
|
|
@ -647,7 +647,7 @@ C-w Describe how there is no warranty for Calc."
|
|||
(defun calc-u-prefix-help ()
|
||||
(interactive)
|
||||
(calc-do-prefix-help
|
||||
'("Simplify, Convert, Temperature-convert, Base-units"
|
||||
'("Simplify, Convert, coNvert exact, Temperature-convert, Base-units"
|
||||
"Autorange; Remove, eXtract; Explain; View-table; 0-9"
|
||||
"Define, Undefine, Get-defn, Permanent"
|
||||
"SHIFT + View-table-other-window"
|
||||
|
|
|
@ -470,6 +470,8 @@ If COMP or STD is non-nil, put that in the units table instead."
|
|||
(if (string-match "\\` */" uoldname)
|
||||
(setq uoldname (concat "1" uoldname)))
|
||||
(math-read-expr uoldname))))))
|
||||
(unless (math-units-in-expr-p uold t)
|
||||
(error "No units specified"))
|
||||
(when (eq (car-safe uold) 'error)
|
||||
(error "Bad format in units expression: %s" (nth 1 uold)))
|
||||
(setq expr (math-mul expr uold))))
|
||||
|
@ -514,6 +516,38 @@ If COMP or STD is non-nil, put that in the units table instead."
|
|||
(math-put-default-units (if noold units res) (if comp units)))
|
||||
(calc-enter-result 1 "cvun" res))))))
|
||||
|
||||
(defun calc-convert-exact-units ()
|
||||
(interactive)
|
||||
(calc-slow-wrapper
|
||||
(let* ((expr (calc-top-n 1)))
|
||||
(unless (math-units-in-expr-p expr t)
|
||||
(error "No units in expression."))
|
||||
(let* ((old-units (math-extract-units expr))
|
||||
(defunits (math-get-default-units expr))
|
||||
units
|
||||
(new-units
|
||||
(read-string (concat "New units"
|
||||
(if defunits
|
||||
(concat
|
||||
" (default "
|
||||
defunits
|
||||
"): ")
|
||||
": ")))))
|
||||
(if (and
|
||||
(string= new-units "")
|
||||
defunits)
|
||||
(setq new-units defunits))
|
||||
(setq units (math-read-expr new-units))
|
||||
(when (eq (car-safe units) 'error)
|
||||
(error "Bad format in units expression: %s" (nth 2 units)))
|
||||
(math-check-unit-consistency old-units units)
|
||||
(let ((res
|
||||
(list '* (math-mul (math-remove-units expr)
|
||||
(math-simplify-units
|
||||
(math-to-standard-units (list '/ old-units units) nil)))
|
||||
units)))
|
||||
(calc-enter-result 1 "cvxu" res))))))
|
||||
|
||||
(defun calc-autorange-units (arg)
|
||||
(interactive "P")
|
||||
(calc-wrapper
|
||||
|
@ -945,7 +979,7 @@ If COMP or STD is non-nil, put that in the units table instead."
|
|||
(or
|
||||
(and (eq (car-safe newunits) 'var)
|
||||
(assq (nth 1 newunits) math-standard-units-systems))
|
||||
(math-numberp (math-get-units (list '/ expr newunits)))))
|
||||
(math-numberp (math-get-units (math-to-standard-units (list '/ expr newunits) nil)))))
|
||||
|
||||
(defun math-check-unit-consistency (expr units)
|
||||
"Give an error if EXPR and UNITS do not have consistent units."
|
||||
|
|
|
@ -411,7 +411,8 @@ In the ATTS property list, possible attributes are `:family',
|
|||
|
||||
See Info node `(elisp) Faces' in the Emacs Lisp manual for more
|
||||
information."
|
||||
(declare (doc-string 3))
|
||||
(declare (doc-string 3)
|
||||
(indent 1))
|
||||
;; It is better not to use backquote in this file,
|
||||
;; because that makes a bootstrapping problem
|
||||
;; if you need to recompile all the Lisp files using interpreted code.
|
||||
|
|
|
@ -120,9 +120,7 @@ Vectors work just like lists. Nested backquotes are permitted."
|
|||
This simply recurses through the body."
|
||||
(let ((exp (backquote-listify (list (cons 0 (list 'quote (car s))))
|
||||
(backquote-process (cdr s) level))))
|
||||
(if (eq (car-safe exp) 'quote)
|
||||
(cons 0 (list 'quote s))
|
||||
(cons 1 exp))))
|
||||
(cons (if (eq (car-safe exp) 'quote) 0 1) exp)))
|
||||
|
||||
(defun backquote-process (s &optional level)
|
||||
"Process the body of a backquote.
|
||||
|
|
|
@ -635,7 +635,8 @@ Can only be used from within the lexical body of a primary or around method."
|
|||
|
||||
(defun cl--generic-search-method (met-name)
|
||||
(let ((base-re (concat "(\\(?:cl-\\)?defmethod[ \t]+"
|
||||
(regexp-quote (format "%s\\_>" (car met-name))))))
|
||||
(regexp-quote (format "%s" (car met-name)))
|
||||
"\\_>")))
|
||||
(or
|
||||
(re-search-forward
|
||||
(concat base-re "[^&\"\n]*"
|
||||
|
@ -724,6 +725,14 @@ Can only be used from within the lexical body of a primary or around method."
|
|||
|
||||
(add-function :before-until cl-generic-tagcode-function
|
||||
#'cl--generic-struct-tagcode)
|
||||
|
||||
(defun cl--generic-struct-tag (name)
|
||||
`(and (vectorp ,name)
|
||||
(> (length ,name) 0)
|
||||
(let ((tag (aref ,name 0)))
|
||||
(if (eq (symbol-function tag) :quick-object-witness-check)
|
||||
tag))))
|
||||
|
||||
(defun cl--generic-struct-tagcode (type name)
|
||||
(and (symbolp type)
|
||||
(get type 'cl-struct-type)
|
||||
|
@ -733,12 +742,19 @@ Can only be used from within the lexical body of a primary or around method."
|
|||
(or (equal '(cl-tag-slot) (car (get type 'cl-struct-slots)))
|
||||
(error "Can't dispatch on cl-struct %S: no tag in slot 0"
|
||||
type))
|
||||
;; We could/should check the vector has length >0,
|
||||
;; but really, mixing vectors and structs is a bad idea,
|
||||
;; so let's not waste time trying to handle the case
|
||||
;; of an empty vector.
|
||||
;; BEWARE: this returns a bogus tag for non-struct vectors.
|
||||
`(50 . (and (vectorp ,name) (aref ,name 0)))))
|
||||
;; It's tempting to use (and (vectorp ,name) (aref ,name 0))
|
||||
;; but that would suffer from some problems:
|
||||
;; - the vector may have size 0.
|
||||
;; - when called on an actual vector (rather than an object), we'd
|
||||
;; end up returning an arbitrary value, possibly colliding with
|
||||
;; other tagcode's values.
|
||||
;; - it can also result in returning all kinds of irrelevant
|
||||
;; values which would end up filling up the method-cache with
|
||||
;; lots of irrelevant/redundant entries.
|
||||
;; FIXME: We could speed this up by introducing a dedicated
|
||||
;; vector type at the C level, so we could do something like
|
||||
;; (and (vector-objectp ,name) (aref ,name 0))
|
||||
`(50 . ,(cl--generic-struct-tag name))))
|
||||
|
||||
(add-function :before-until cl-generic-tag-types-function
|
||||
#'cl--generic-struct-tag-types)
|
||||
|
|
|
@ -221,7 +221,7 @@ The name is made by appending a number to PREFIX, default \"G\"."
|
|||
'(&optional &rest &key &allow-other-keys &aux &whole &body &environment))
|
||||
|
||||
(defvar cl--bind-block) (defvar cl--bind-defs) (defvar cl--bind-enquote)
|
||||
(defvar cl--bind-inits) (defvar cl--bind-lets) (defvar cl--bind-forms)
|
||||
(defvar cl--bind-lets) (defvar cl--bind-forms)
|
||||
|
||||
(defun cl--transform-lambda (form bind-block)
|
||||
"Transform a function form FORM of name BIND-BLOCK.
|
||||
|
@ -229,9 +229,11 @@ BIND-BLOCK is the name of the symbol to which the function will be bound,
|
|||
and which will be used for the name of the `cl-block' surrounding the
|
||||
function's body.
|
||||
FORM is of the form (ARGS . BODY)."
|
||||
;; FIXME: (lambda (a &aux b) 1) expands to (lambda (a &rest --cl-rest--) ...)
|
||||
;; where the --cl-rest-- is clearly undesired.
|
||||
(let* ((args (car form)) (body (cdr form)) (orig-args args)
|
||||
(cl--bind-block bind-block) (cl--bind-defs nil) (cl--bind-enquote nil)
|
||||
(cl--bind-inits nil) (cl--bind-lets nil) (cl--bind-forms nil)
|
||||
(cl--bind-lets nil) (cl--bind-forms nil)
|
||||
(header nil) (simple-args nil))
|
||||
(while (or (stringp (car body))
|
||||
(memq (car-safe (car body)) '(interactive declare cl-declare)))
|
||||
|
@ -244,10 +246,10 @@ FORM is of the form (ARGS . BODY)."
|
|||
(if (setq cl--bind-enquote (memq '&cl-quote args))
|
||||
(setq args (delq '&cl-quote args)))
|
||||
(if (memq '&whole args) (error "&whole not currently implemented"))
|
||||
(let* ((p (memq '&environment args)) (v (cadr p))
|
||||
(env-exp 'macroexpand-all-environment))
|
||||
(let* ((p (memq '&environment args))
|
||||
(v (cadr p)))
|
||||
(if p (setq args (nconc (delq (car p) (delq v args))
|
||||
(list '&aux (list v env-exp))))))
|
||||
`(&aux (,v macroexpand-all-environment))))))
|
||||
(while (and args (symbolp (car args))
|
||||
(not (memq (car args) '(nil &rest &body &key &aux)))
|
||||
(not (and (eq (car args) '&optional)
|
||||
|
@ -261,8 +263,7 @@ FORM is of the form (ARGS . BODY)."
|
|||
(cl--do-arglist args nil (- (length simple-args)
|
||||
(if (memq '&optional simple-args) 1 0)))
|
||||
(setq cl--bind-lets (nreverse cl--bind-lets))
|
||||
(cl-list* (and cl--bind-inits `(cl-eval-when (compile load eval)
|
||||
,@(nreverse cl--bind-inits)))
|
||||
(cl-list* nil
|
||||
(nconc (nreverse simple-args)
|
||||
(list '&rest (car (pop cl--bind-lets))))
|
||||
(nconc (let ((hdr (nreverse header)))
|
||||
|
@ -390,6 +391,11 @@ its argument list allows full Common Lisp conventions."
|
|||
(t x)))
|
||||
|
||||
(defun cl--make-usage-args (arglist)
|
||||
(let ((aux (ignore-errors (cl-position '&aux arglist))))
|
||||
(when aux
|
||||
;; `&aux' args aren't arguments, so let's just drop them from the
|
||||
;; usage info.
|
||||
(setq arglist (cl-subseq arglist 0 aux))))
|
||||
(if (cdr-safe (last arglist)) ;Not a proper list.
|
||||
(let* ((last (last arglist))
|
||||
(tail (cdr last)))
|
||||
|
@ -426,7 +432,7 @@ its argument list allows full Common Lisp conventions."
|
|||
))))
|
||||
arglist))))
|
||||
|
||||
(defun cl--do-arglist (args expr &optional num) ; uses bind-*
|
||||
(defun cl--do-arglist (args expr &optional num) ; uses cl--bind-*
|
||||
(if (nlistp args)
|
||||
(if (or (memq args cl--lambda-list-keywords) (not (symbolp args)))
|
||||
(error "Invalid argument name: %s" args)
|
||||
|
@ -441,9 +447,9 @@ its argument list allows full Common Lisp conventions."
|
|||
(keys nil)
|
||||
(laterarg nil) (exactarg nil) minarg)
|
||||
(or num (setq num 0))
|
||||
(if (listp (cadr restarg))
|
||||
(setq restarg (make-symbol "--cl-rest--"))
|
||||
(setq restarg (cadr restarg)))
|
||||
(setq restarg (if (listp (cadr restarg))
|
||||
(make-symbol "--cl-rest--")
|
||||
(cadr restarg)))
|
||||
(push (list restarg expr) cl--bind-lets)
|
||||
(if (eq (car args) '&whole)
|
||||
(push (list (cl--pop2 args) restarg) cl--bind-lets))
|
||||
|
@ -570,12 +576,11 @@ its argument list allows full Common Lisp conventions."
|
|||
"Bind the variables in ARGS to the result of EXPR and execute BODY."
|
||||
(declare (indent 2)
|
||||
(debug (&define cl-macro-list def-form cl-declarations def-body)))
|
||||
(let* ((cl--bind-lets nil) (cl--bind-forms nil) (cl--bind-inits nil)
|
||||
(let* ((cl--bind-lets nil) (cl--bind-forms nil)
|
||||
(cl--bind-defs nil) (cl--bind-block 'cl-none) (cl--bind-enquote nil))
|
||||
(cl--do-arglist (or args '(&aux)) expr)
|
||||
(append '(progn) cl--bind-inits
|
||||
(list `(let* ,(nreverse cl--bind-lets)
|
||||
,@(nreverse cl--bind-forms) ,@body)))))
|
||||
(macroexp-let* (nreverse cl--bind-lets)
|
||||
(macroexp-progn (append (nreverse cl--bind-forms) body)))))
|
||||
|
||||
|
||||
;;; The `cl-eval-when' form.
|
||||
|
@ -655,30 +660,26 @@ allowed only in the final clause, and matches if no other keys match.
|
|||
Key values are compared by `eql'.
|
||||
\n(fn EXPR (KEYLIST BODY...)...)"
|
||||
(declare (indent 1) (debug (form &rest (sexp body))))
|
||||
(let* ((temp (if (cl--simple-expr-p expr 3) expr (make-symbol "--cl-var--")))
|
||||
(head-list nil)
|
||||
(body (cons
|
||||
'cond
|
||||
(mapcar
|
||||
(function
|
||||
(lambda (c)
|
||||
(cons (cond ((memq (car c) '(t otherwise)) t)
|
||||
((eq (car c) 'cl--ecase-error-flag)
|
||||
`(error "cl-ecase failed: %s, %s"
|
||||
,temp ',(reverse head-list)))
|
||||
((listp (car c))
|
||||
(setq head-list (append (car c) head-list))
|
||||
`(cl-member ,temp ',(car c)))
|
||||
(t
|
||||
(if (memq (car c) head-list)
|
||||
(error "Duplicate key in case: %s"
|
||||
(car c)))
|
||||
(push (car c) head-list)
|
||||
`(eql ,temp ',(car c))))
|
||||
(or (cdr c) '(nil)))))
|
||||
clauses))))
|
||||
(if (eq temp expr) body
|
||||
`(let ((,temp ,expr)) ,body))))
|
||||
(macroexp-let2 macroexp-copyable-p temp expr
|
||||
(let* ((head-list nil))
|
||||
`(cond
|
||||
,@(mapcar
|
||||
(lambda (c)
|
||||
(cons (cond ((memq (car c) '(t otherwise)) t)
|
||||
((eq (car c) 'cl--ecase-error-flag)
|
||||
`(error "cl-ecase failed: %s, %s"
|
||||
,temp ',(reverse head-list)))
|
||||
((listp (car c))
|
||||
(setq head-list (append (car c) head-list))
|
||||
`(cl-member ,temp ',(car c)))
|
||||
(t
|
||||
(if (memq (car c) head-list)
|
||||
(error "Duplicate key in case: %s"
|
||||
(car c)))
|
||||
(push (car c) head-list)
|
||||
`(eql ,temp ',(car c))))
|
||||
(or (cdr c) '(nil))))
|
||||
clauses)))))
|
||||
|
||||
;;;###autoload
|
||||
(defmacro cl-ecase (expr &rest clauses)
|
||||
|
@ -698,24 +699,22 @@ final clause, and matches if no other keys match.
|
|||
\n(fn EXPR (TYPE BODY...)...)"
|
||||
(declare (indent 1)
|
||||
(debug (form &rest ([&or cl-type-spec "otherwise"] body))))
|
||||
(let* ((temp (if (cl--simple-expr-p expr 3) expr (make-symbol "--cl-var--")))
|
||||
(type-list nil)
|
||||
(body (cons
|
||||
'cond
|
||||
(mapcar
|
||||
(function
|
||||
(lambda (c)
|
||||
(cons (cond ((eq (car c) 'otherwise) t)
|
||||
((eq (car c) 'cl--ecase-error-flag)
|
||||
`(error "cl-etypecase failed: %s, %s"
|
||||
,temp ',(reverse type-list)))
|
||||
(t
|
||||
(push (car c) type-list)
|
||||
(cl--make-type-test temp (car c))))
|
||||
(or (cdr c) '(nil)))))
|
||||
clauses))))
|
||||
(if (eq temp expr) body
|
||||
`(let ((,temp ,expr)) ,body))))
|
||||
(macroexp-let2 macroexp-copyable-p temp expr
|
||||
(let* ((type-list nil))
|
||||
(cons
|
||||
'cond
|
||||
(mapcar
|
||||
(function
|
||||
(lambda (c)
|
||||
(cons (cond ((eq (car c) 'otherwise) t)
|
||||
((eq (car c) 'cl--ecase-error-flag)
|
||||
`(error "cl-etypecase failed: %s, %s"
|
||||
,temp ',(reverse type-list)))
|
||||
(t
|
||||
(push (car c) type-list)
|
||||
`(cl-typep ,temp ',(car c))))
|
||||
(or (cdr c) '(nil)))))
|
||||
clauses)))))
|
||||
|
||||
;;;###autoload
|
||||
(defmacro cl-etypecase (expr &rest clauses)
|
||||
|
@ -1439,16 +1438,14 @@ For more details, see Info node `(cl)Loop Facility'.
|
|||
(push `(progn (if ,what (cl-incf ,var)) t) cl--loop-body)))
|
||||
|
||||
((memq word '(minimize minimizing maximize maximizing))
|
||||
(let* ((what (pop cl--loop-args))
|
||||
(temp (if (cl--simple-expr-p what) what
|
||||
(make-symbol "--cl-var--")))
|
||||
(var (cl--loop-handle-accum nil))
|
||||
(func (intern (substring (symbol-name word) 0 3)))
|
||||
(set `(setq ,var (if ,var (,func ,var ,temp) ,temp))))
|
||||
(push `(progn ,(if (eq temp what) set
|
||||
`(let ((,temp ,what)) ,set))
|
||||
t)
|
||||
cl--loop-body)))
|
||||
(push `(progn ,(macroexp-let2 macroexp-copyable-p temp
|
||||
(pop cl--loop-args)
|
||||
(let* ((var (cl--loop-handle-accum nil))
|
||||
(func (intern (substring (symbol-name word)
|
||||
0 3))))
|
||||
`(setq ,var (if ,var (,func ,var ,temp) ,temp))))
|
||||
t)
|
||||
cl--loop-body))
|
||||
|
||||
((eq word 'with)
|
||||
(let ((bindings nil))
|
||||
|
@ -2104,14 +2101,11 @@ values. For compatibility, (cl-values A B C) is a synonym for (list A B C).
|
|||
(< cl--optimize-speed 3)
|
||||
(= cl--optimize-safety 3)))
|
||||
form
|
||||
(let* ((temp (if (cl--simple-expr-p form 3)
|
||||
form (make-symbol "--cl-var--")))
|
||||
(body `(progn (unless ,(cl--make-type-test temp type)
|
||||
(signal 'wrong-type-argument
|
||||
(list ',type ,temp ',form)))
|
||||
,temp)))
|
||||
(if (eq temp form) body
|
||||
`(let ((,temp ,form)) ,body)))))
|
||||
(macroexp-let2 macroexp-copyable-p temp form
|
||||
`(progn (unless (cl-typep ,temp ',type)
|
||||
(signal 'wrong-type-argument
|
||||
(list ',type ,temp ',form)))
|
||||
,temp))))
|
||||
|
||||
(defvar cl--proclaim-history t) ; for future compilers
|
||||
(defvar cl--declare-stack t) ; for future compilers
|
||||
|
@ -2425,15 +2419,11 @@ non-nil value, that slot cannot be set via `setf'.
|
|||
(tag (intern (format "cl-struct-%s" name)))
|
||||
(tag-symbol (intern (format "cl-struct-%s-tags" name)))
|
||||
(include-descs nil)
|
||||
(side-eff nil)
|
||||
(type nil)
|
||||
(named nil)
|
||||
(forms nil)
|
||||
(docstring (if (stringp (car descs)) (pop descs)))
|
||||
pred-form pred-check)
|
||||
(if (stringp (car descs))
|
||||
(push `(put ',name 'structure-documentation
|
||||
,(pop descs))
|
||||
forms))
|
||||
(setq descs (cons '(cl-tag-slot)
|
||||
(mapcar (function (lambda (x) (if (consp x) x (list x))))
|
||||
descs)))
|
||||
|
@ -2458,6 +2448,7 @@ non-nil value, that slot cannot be set via `setf'.
|
|||
((eq opt :predicate)
|
||||
(if args (setq predicate (car args))))
|
||||
((eq opt :include)
|
||||
(when include (error "Can't :include more than once"))
|
||||
(setq include (car args)
|
||||
include-descs (mapcar (function
|
||||
(lambda (x)
|
||||
|
@ -2511,20 +2502,19 @@ non-nil value, that slot cannot be set via `setf'.
|
|||
(if named (setq tag name)))
|
||||
(setq type 'vector named 'true)))
|
||||
(or named (setq descs (delq (assq 'cl-tag-slot descs) descs)))
|
||||
(push `(defvar ,tag-symbol) forms)
|
||||
(when (and (null predicate) named)
|
||||
(setq predicate (intern (format "cl--struct-%s-p" name))))
|
||||
(setq pred-form (and named
|
||||
(let ((pos (- (length descs)
|
||||
(length (memq (assq 'cl-tag-slot descs)
|
||||
descs)))))
|
||||
(if (eq type 'vector)
|
||||
`(and (vectorp cl-x)
|
||||
(>= (length cl-x) ,(length descs))
|
||||
(memq (aref cl-x ,pos) ,tag-symbol))
|
||||
(if (= pos 0)
|
||||
`(memq (car-safe cl-x) ,tag-symbol)
|
||||
`(and (consp cl-x)
|
||||
(cond
|
||||
((eq type 'vector)
|
||||
`(and (vectorp cl-x)
|
||||
(>= (length cl-x) ,(length descs))
|
||||
(memq (aref cl-x ,pos) ,tag-symbol)))
|
||||
((= pos 0) `(memq (car-safe cl-x) ,tag-symbol))
|
||||
(t `(and (consp cl-x)
|
||||
(memq (nth ,pos cl-x) ,tag-symbol))))))
|
||||
pred-check (and pred-form (> safety 0)
|
||||
(if (and (eq (cl-caadr pred-form) 'vectorp)
|
||||
|
@ -2546,6 +2536,7 @@ non-nil value, that slot cannot be set via `setf'.
|
|||
(push slot slots)
|
||||
(push (nth 1 desc) defaults)
|
||||
(push `(cl-defsubst ,accessor (cl-x)
|
||||
(declare (side-effect-free t))
|
||||
,@(and pred-check
|
||||
(list `(or ,pred-check
|
||||
(error "%s accessing a non-%s"
|
||||
|
@ -2554,7 +2545,6 @@ non-nil value, that slot cannot be set via `setf'.
|
|||
(if (= pos 0) '(car cl-x)
|
||||
`(nth ,pos cl-x))))
|
||||
forms)
|
||||
(push (cons accessor t) side-eff)
|
||||
(if (cadr (memq :read-only (cddr desc)))
|
||||
(push `(gv-define-expander ,accessor
|
||||
(lambda (_cl-do _cl-x)
|
||||
|
@ -2587,15 +2577,14 @@ non-nil value, that slot cannot be set via `setf'.
|
|||
defaults (nreverse defaults))
|
||||
(when pred-form
|
||||
(push `(cl-defsubst ,predicate (cl-x)
|
||||
(declare (side-effect-free error-free))
|
||||
,(if (eq (car pred-form) 'and)
|
||||
(append pred-form '(t))
|
||||
`(and ,pred-form t)))
|
||||
forms)
|
||||
(push `(put ',name 'cl-deftype-satisfies ',predicate) forms)
|
||||
(push (cons predicate 'error-free) side-eff))
|
||||
(push `(put ',name 'cl-deftype-satisfies ',predicate) forms))
|
||||
(and copier
|
||||
(progn (push `(defun ,copier (x) (copy-sequence x)) forms)
|
||||
(push (cons copier t) side-eff)))
|
||||
(push `(defalias ',copier #'copy-sequence) forms))
|
||||
(if constructor
|
||||
(push (list constructor
|
||||
(cons '&key (delq nil (copy-sequence slots))))
|
||||
|
@ -2607,11 +2596,11 @@ non-nil value, that slot cannot be set via `setf'.
|
|||
(make (cl-mapcar (function (lambda (s d) (if (memq s anames) s d)))
|
||||
slots defaults)))
|
||||
(push `(cl-defsubst ,name
|
||||
(&cl-defs '(nil ,@descs) ,@args)
|
||||
(&cl-defs '(nil ,@descs) ,@args)
|
||||
,@(if (cl--safe-expr-p `(progn ,@(mapcar #'cl-second descs)))
|
||||
'((declare (side-effect-free t))))
|
||||
(,type ,@make))
|
||||
forms)
|
||||
(if (cl--safe-expr-p `(progn ,@(mapcar #'cl-second descs)))
|
||||
(push (cons name t) side-eff))))
|
||||
forms)))
|
||||
(if print-auto (nconc print-func (list '(princ ")" cl-s) t)))
|
||||
;; Don't bother adding to cl-custom-print-functions since it's not used
|
||||
;; by anything anyway!
|
||||
|
@ -2624,17 +2613,14 @@ non-nil value, that slot cannot be set via `setf'.
|
|||
;; (and ,pred-form ,print-func))
|
||||
;; cl-custom-print-functions))
|
||||
;; forms))
|
||||
(push `(setq ,tag-symbol (list ',tag)) forms)
|
||||
(push `(cl-eval-when (compile load eval)
|
||||
(put ',name 'cl-struct-slots ',descs)
|
||||
(put ',name 'cl-struct-type ',(list type (eq named t)))
|
||||
(put ',name 'cl-struct-include ',include)
|
||||
(put ',name 'cl-struct-print ,print-auto)
|
||||
,@(mapcar (lambda (x)
|
||||
`(function-put ',(car x) 'side-effect-free ',(cdr x)))
|
||||
side-eff))
|
||||
forms)
|
||||
`(progn ,@(nreverse (cons `',name forms)))))
|
||||
`(progn
|
||||
(defvar ,tag-symbol)
|
||||
,@(nreverse forms)
|
||||
(eval-and-compile
|
||||
(cl-struct-define ',name ,docstring ',include
|
||||
',type ,(eq named t) ',descs ',tag-symbol ',tag
|
||||
',print-auto))
|
||||
',name)))
|
||||
|
||||
(defun cl-struct-sequence-type (struct-type)
|
||||
"Return the sequence used to build STRUCT-TYPE.
|
||||
|
@ -2741,14 +2727,11 @@ STRING is an optional description of the desired type."
|
|||
(declare (debug (place cl-type-spec &optional stringp)))
|
||||
(and (or (not (cl--compiling-file))
|
||||
(< cl--optimize-speed 3) (= cl--optimize-safety 3))
|
||||
(let* ((temp (if (cl--simple-expr-p form 3)
|
||||
form (make-symbol "--cl-var--")))
|
||||
(body `(or ,(cl--make-type-test temp type)
|
||||
(signal 'wrong-type-argument
|
||||
(list ,(or string `',type)
|
||||
,temp ',form)))))
|
||||
(if (eq temp form) `(progn ,body nil)
|
||||
`(let ((,temp ,form)) ,body nil)))))
|
||||
(macroexp-let2 macroexp-copyable-p temp form
|
||||
`(progn (or (cl-typep ,temp ',type)
|
||||
(signal 'wrong-type-argument
|
||||
(list ,(or string `',type) ,temp ',form)))
|
||||
nil))))
|
||||
|
||||
;;;###autoload
|
||||
(defmacro cl-assert (form &optional show-args string &rest args)
|
||||
|
|
48
lisp/emacs-lisp/cl-preloaded.el
Normal file
48
lisp/emacs-lisp/cl-preloaded.el
Normal file
|
@ -0,0 +1,48 @@
|
|||
;;; cl-preloaded.el --- Preloaded part of the CL library -*- lexical-binding: t; -*-
|
||||
|
||||
;; Copyright (C) 2015 Free Software Foundation, Inc
|
||||
|
||||
;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; GNU Emacs is free software: you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Emacs is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; The expectation is that structs defined with cl-defstruct do not
|
||||
;; need cl-lib at run-time, but we'd like to hide the details of the
|
||||
;; cl-struct metadata behind the cl-struct-define function, so we put
|
||||
;; it in this pre-loaded file.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(defun cl-struct-define (name docstring parent type named slots children-sym
|
||||
tag print-auto)
|
||||
(if (boundp children-sym)
|
||||
(add-to-list children-sym tag)
|
||||
(set children-sym (list tag)))
|
||||
;; If the cl-generic support, we need to be able to check
|
||||
;; if a vector is a cl-struct object, without knowing its particular type.
|
||||
;; So we use the (otherwise) unused function slots of the tag symbol
|
||||
;; to put a special witness value, to make the check easy and reliable.
|
||||
(unless named (fset tag :quick-object-witness-check))
|
||||
(put name 'cl-struct-slots slots)
|
||||
(put name 'cl-struct-type (list type named))
|
||||
(if parent (put name 'cl-struct-include parent))
|
||||
(if print-auto (put name 'cl-struct-print print-auto))
|
||||
(if docstring (put name 'structure-documentation docstring)))
|
||||
|
||||
(provide 'cl-preloaded)
|
||||
;;; cl-preloaded.el ends here
|
|
@ -376,7 +376,6 @@ The two cases that are handled are:
|
|||
(setq cl--function-convert-cache (cons newf res))
|
||||
res))))
|
||||
(t
|
||||
(setq cl--labels-convert-cache cl--function-convert-cache)
|
||||
(cl--labels-convert f))))
|
||||
|
||||
(defmacro lexical-let (bindings &rest body)
|
||||
|
|
|
@ -149,11 +149,12 @@ For example, you could write
|
|||
...BODY CODE...)"
|
||||
(declare (doc-string 2)
|
||||
(debug (&define name string-or-null-p
|
||||
[&optional [¬ keywordp] sexp
|
||||
&optional [¬ keywordp] sexp
|
||||
&optional [¬ keywordp] sexp]
|
||||
[&rest [keywordp sexp]]
|
||||
def-body)))
|
||||
[&optional [¬ keywordp] sexp
|
||||
&optional [¬ keywordp] sexp
|
||||
&optional [¬ keywordp] sexp]
|
||||
[&rest [keywordp sexp]]
|
||||
def-body))
|
||||
(indent 1))
|
||||
|
||||
;; Allow skipping the first three args.
|
||||
(cond
|
||||
|
|
|
@ -219,7 +219,7 @@ for CLASS. Optional ALLOW-SUBCLASS says that it is ok for
|
|||
being pedantic."
|
||||
(unless class
|
||||
(message "Unsafe call to `eieio-persistent-read'."))
|
||||
(when class (eieio--check-type class-p class))
|
||||
(when class (cl-check-type class class))
|
||||
(let ((ret nil)
|
||||
(buffstr nil))
|
||||
(unwind-protect
|
||||
|
@ -481,7 +481,7 @@ instance."
|
|||
|
||||
(cl-defmethod eieio-object-set-name-string ((obj eieio-named) name)
|
||||
"Set the string which is OBJ's NAME."
|
||||
(eieio--check-type stringp name)
|
||||
(cl-check-type name string)
|
||||
(eieio-oset obj 'object-name name))
|
||||
|
||||
(cl-defmethod clone ((obj eieio-named) &rest params)
|
||||
|
|
|
@ -40,6 +40,8 @@
|
|||
(declare-function slot-unbound "eieio")
|
||||
(declare-function slot-missing "eieio")
|
||||
(declare-function child-of-class-p "eieio")
|
||||
(declare-function same-class-p "eieio")
|
||||
(declare-function object-of-class-p "eieio")
|
||||
|
||||
|
||||
;;;
|
||||
|
@ -154,15 +156,6 @@ Currently under control of this var:
|
|||
|
||||
|
||||
;;; Important macros used internally in eieio.
|
||||
;;
|
||||
(defmacro eieio--check-type (type obj)
|
||||
(unless (symbolp obj)
|
||||
(error "eieio--check-type wants OBJ to be a variable"))
|
||||
`(if (not ,(cond
|
||||
((eq 'or (car-safe type))
|
||||
`(or ,@(mapcar (lambda (type) `(,type ,obj)) (cdr type))))
|
||||
(t `(,type ,obj))))
|
||||
(signal 'wrong-type-argument (list ',type ,obj))))
|
||||
|
||||
(defmacro eieio--class-v (class) ;Use a macro, so it acts as a GV place.
|
||||
"Internal: Return the class vector from the CLASS symbol."
|
||||
|
@ -183,27 +176,17 @@ Currently under control of this var:
|
|||
(eq (aref class 0) 'defclass)
|
||||
(error nil)))
|
||||
|
||||
(defsubst eieio-class-object (class)
|
||||
"Check that CLASS is a class and return the corresponding object."
|
||||
(let ((c (eieio--class-object class)))
|
||||
(eieio--check-type eieio--class-p c)
|
||||
c))
|
||||
|
||||
(defsubst class-p (class)
|
||||
(defun class-p (class)
|
||||
"Return non-nil if CLASS is a valid class vector.
|
||||
CLASS is a symbol." ;FIXME: Is it a vector or a symbol?
|
||||
;; this new method is faster since it doesn't waste time checking lots of
|
||||
;; things.
|
||||
(condition-case nil
|
||||
(eq (aref (eieio--class-v class) 0) 'defclass)
|
||||
(error nil)))
|
||||
(and (symbolp class) (eieio--class-p (eieio--class-v class))))
|
||||
|
||||
(defun eieio-class-name (class)
|
||||
"Return a Lisp like symbol name for CLASS."
|
||||
;; FIXME: What's a "Lisp like symbol name"?
|
||||
;; FIXME: CLOS returns a symbol, but the code returns a string.
|
||||
(if (eieio--class-p class) (setq class (eieio--class-symbol class)))
|
||||
(eieio--check-type class-p class)
|
||||
(cl-check-type class class)
|
||||
;; I think this is supposed to return a symbol, but to me CLASS is a symbol,
|
||||
;; and I wanted a string. Arg!
|
||||
(format "#<class %s>" (symbol-name class)))
|
||||
|
@ -221,14 +204,17 @@ CLASS is a symbol." ;FIXME: Is it a vector or a symbol?
|
|||
Return nil if that option doesn't exist."
|
||||
(eieio--class-option-assoc (eieio--class-options class) option))
|
||||
|
||||
(defsubst eieio-object-p (obj)
|
||||
(defun eieio-object-p (obj)
|
||||
"Return non-nil if OBJ is an EIEIO object."
|
||||
(and (vectorp obj)
|
||||
(condition-case nil
|
||||
(eq (aref (eieio--object-class-object obj) 0) 'defclass)
|
||||
(error nil))))
|
||||
(> (length obj) 0)
|
||||
(let ((tag (eieio--object-class-tag obj)))
|
||||
(and (symbolp tag)
|
||||
;; (eq (symbol-function tag) :quick-object-witness-check)
|
||||
(boundp tag)
|
||||
(eieio--class-p (symbol-value tag))))))
|
||||
|
||||
(defalias 'object-p 'eieio-object-p)
|
||||
(define-obsolete-function-alias 'object-p 'eieio-object-p "25.1")
|
||||
|
||||
(defsubst class-abstract-p (class)
|
||||
"Return non-nil if CLASS is abstract.
|
||||
|
@ -266,10 +252,9 @@ It creates an autoload function for CNAME's constructor."
|
|||
;; simply not exist yet. So instead we just don't store the list of parents
|
||||
;; here in eieio-defclass-autoload at all, since it seems that they're just
|
||||
;; not needed before the class is actually loaded.
|
||||
(let* ((oldc (when (class-p cname) (eieio--class-v cname)))
|
||||
(newc (eieio--class-make cname))
|
||||
)
|
||||
(if oldc
|
||||
(let* ((oldc (eieio--class-v cname))
|
||||
(newc (eieio--class-make cname)))
|
||||
(if (eieio--class-p oldc)
|
||||
nil ;; Do nothing if we already have this class.
|
||||
|
||||
;; turn this into a usable self-pointing symbol
|
||||
|
@ -300,7 +285,21 @@ It creates an autoload function for CNAME's constructor."
|
|||
(cl-every (lambda (elem) (cl-typep elem ',elem-type))
|
||||
list)))))
|
||||
|
||||
(declare-function eieio--defmethod "eieio-generic" (method kind argclass code))
|
||||
|
||||
(defun eieio-make-class-predicate (class)
|
||||
(lambda (obj)
|
||||
;; (:docstring (format "Test OBJ to see if it's an object of type %S."
|
||||
;; class))
|
||||
(and (eieio-object-p obj)
|
||||
(same-class-p obj class))))
|
||||
|
||||
(defun eieio-make-child-predicate (class)
|
||||
(lambda (obj)
|
||||
;; (:docstring (format
|
||||
;; "Test OBJ to see if it's an object is a child of type %S."
|
||||
;; class))
|
||||
(and (eieio-object-p obj)
|
||||
(object-of-class-p obj class))))
|
||||
|
||||
(defun eieio-defclass-internal (cname superclasses slots options)
|
||||
"Define CNAME as a new subclass of SUPERCLASSES.
|
||||
|
@ -314,7 +313,7 @@ See `defclass' for more information."
|
|||
(setq eieio-hook nil)
|
||||
|
||||
(let* ((pname superclasses)
|
||||
(oldc (when (class-p cname) (eieio--class-v cname)))
|
||||
(oldc (let ((c (eieio--class-v cname))) (if (eieio--class-p c) c)))
|
||||
(newc (if (and oldc (not (eieio--class-default-object-cache oldc)))
|
||||
;; The oldc class is a stub setup by eieio-defclass-autoload.
|
||||
;; Reuse it instead of creating a new one, so that existing
|
||||
|
@ -342,19 +341,20 @@ See `defclass' for more information."
|
|||
(if pname
|
||||
(progn
|
||||
(dolist (p pname)
|
||||
(if (and p (symbolp p))
|
||||
(if (not (class-p p))
|
||||
(if (not (and p (symbolp p)))
|
||||
(error "Invalid parent class %S" p)
|
||||
(let ((c (eieio--class-v p)))
|
||||
(if (not (eieio--class-p c))
|
||||
;; bad class
|
||||
(error "Given parent class %S is not a class" p)
|
||||
;; good parent class...
|
||||
;; save new child in parent
|
||||
(cl-pushnew cname (eieio--class-children (eieio--class-v p)))
|
||||
(cl-pushnew cname (eieio--class-children c))
|
||||
;; Get custom groups, and store them into our local copy.
|
||||
(mapc (lambda (g) (cl-pushnew g groups :test #'equal))
|
||||
(eieio--class-option (eieio--class-v p) :custom-groups))
|
||||
;; save parent in child
|
||||
(push (eieio--class-v p) (eieio--class-parent newc)))
|
||||
(error "Invalid parent class %S" p)))
|
||||
(eieio--class-option c :custom-groups))
|
||||
;; Save parent in child.
|
||||
(push c (eieio--class-parent newc))))))
|
||||
;; Reverse the list of our parents so that they are prioritized in
|
||||
;; the same order as specified in the code.
|
||||
(cl-callf nreverse (eieio--class-parent newc)))
|
||||
|
@ -506,13 +506,7 @@ See `defclass' for more information."
|
|||
(eieio--class-option-assoc options :documentation))
|
||||
|
||||
;; Save the file location where this class is defined.
|
||||
(let ((fname (if load-in-progress
|
||||
load-file-name
|
||||
buffer-file-name)))
|
||||
(when fname
|
||||
(when (string-match "\\.elc\\'" fname)
|
||||
(setq fname (substring fname 0 (1- (length fname)))))
|
||||
(put cname 'class-location fname)))
|
||||
(add-to-list 'current-load-list `(eieio-defclass . ,cname))
|
||||
|
||||
;; We have a list of custom groups. Store them into the options.
|
||||
(let ((g (eieio--class-option-assoc options :custom-groups)))
|
||||
|
@ -539,6 +533,7 @@ See `defclass' for more information."
|
|||
;; objects readable.
|
||||
(tag (intern (format "eieio-class-tag--%s" cname))))
|
||||
(set tag newc)
|
||||
(fset tag :quick-object-witness-check)
|
||||
(setf (eieio--object-class-tag cache) tag)
|
||||
(let ((eieio-skip-typecheck t))
|
||||
;; All type-checking has been done to our satisfaction
|
||||
|
@ -908,12 +903,13 @@ Argument FN is the function calling this verifier."
|
|||
;;
|
||||
(defun eieio-oref (obj slot)
|
||||
"Return the value in OBJ at SLOT in the object vector."
|
||||
(eieio--check-type (or eieio-object-p class-p) obj)
|
||||
(eieio--check-type symbolp slot)
|
||||
(if (class-p obj) (eieio-class-un-autoload obj))
|
||||
(cl-check-type slot symbol)
|
||||
(cl-check-type obj (or eieio-object class))
|
||||
(let* ((class (cond ((symbolp obj)
|
||||
(error "eieio-oref called on a class!")
|
||||
(eieio--class-v obj))
|
||||
(let ((c (eieio--class-v obj)))
|
||||
(if (eieio--class-p c) (eieio-class-un-autoload obj))
|
||||
c))
|
||||
(t (eieio--object-class-object obj))))
|
||||
(c (eieio--slot-name-index class obj slot)))
|
||||
(if (not c)
|
||||
|
@ -928,15 +924,15 @@ Argument FN is the function calling this verifier."
|
|||
(slot-missing obj slot 'oref)
|
||||
;;(signal 'invalid-slot-name (list (eieio-object-name obj) slot))
|
||||
)
|
||||
(eieio--check-type eieio-object-p obj)
|
||||
(cl-check-type obj eieio-object)
|
||||
(eieio-barf-if-slot-unbound (aref obj c) obj slot 'oref))))
|
||||
|
||||
|
||||
(defun eieio-oref-default (obj slot)
|
||||
"Do the work for the macro `oref-default' with similar parameters.
|
||||
Fills in OBJ's SLOT with its default value."
|
||||
(eieio--check-type (or eieio-object-p class-p) obj)
|
||||
(eieio--check-type symbolp slot)
|
||||
(cl-check-type obj (or eieio-object class))
|
||||
(cl-check-type slot symbol)
|
||||
(let* ((cl (cond ((symbolp obj) (eieio--class-v obj))
|
||||
(t (eieio--object-class-object obj))))
|
||||
(c (eieio--slot-name-index cl obj slot)))
|
||||
|
@ -974,8 +970,8 @@ Fills in OBJ's SLOT with its default value."
|
|||
(defun eieio-oset (obj slot value)
|
||||
"Do the work for the macro `oset'.
|
||||
Fills in OBJ's SLOT with VALUE."
|
||||
(eieio--check-type eieio-object-p obj)
|
||||
(eieio--check-type symbolp slot)
|
||||
(cl-check-type obj eieio-object)
|
||||
(cl-check-type slot symbol)
|
||||
(let* ((class (eieio--object-class-object obj))
|
||||
(c (eieio--slot-name-index class obj slot)))
|
||||
(if (not c)
|
||||
|
@ -999,8 +995,8 @@ Fills in OBJ's SLOT with VALUE."
|
|||
"Do the work for the macro `oset-default'.
|
||||
Fills in the default value in CLASS' in SLOT with VALUE."
|
||||
(setq class (eieio--class-object class))
|
||||
(eieio--check-type eieio--class-p class)
|
||||
(eieio--check-type symbolp slot)
|
||||
(cl-check-type class eieio--class)
|
||||
(cl-check-type slot symbol)
|
||||
(let* ((c (eieio--slot-name-index class nil slot)))
|
||||
(if (not c)
|
||||
;; It might be missing because it is a :class allocated slot.
|
||||
|
@ -1222,10 +1218,11 @@ method invocation orders of the involved classes."
|
|||
;; A class must be defined before it can be used as a parameter
|
||||
;; specializer in a defmethod form.
|
||||
;; So we can ignore types that are not known to denote classes.
|
||||
(and (class-p type)
|
||||
;; Prefer (aref ,name 0) over (eieio--class-tag ,name) so that
|
||||
;; the tagcode is identical to the tagcode used for cl-struct.
|
||||
`(50 . (and (vectorp ,name) (aref ,name 0)))))
|
||||
(and (eieio--class-p (eieio--class-object type))
|
||||
;; Use the exact same code as for cl-struct, so that methods
|
||||
;; that dispatch on both kinds of objects get to share this
|
||||
;; part of the dispatch code.
|
||||
`(50 . ,(cl--generic-struct-tag name))))
|
||||
|
||||
(add-function :before-until cl-generic-tag-types-function
|
||||
#'eieio--generic-tag-types)
|
||||
|
|
|
@ -117,7 +117,7 @@ PREBUTTONTEXT is some text between PREFIX and the object button."
|
|||
(setq publa (cdr publa)))))))
|
||||
|
||||
;;; Augment the Data debug thing display list.
|
||||
(data-debug-add-specialized-thing (lambda (thing) (object-p thing))
|
||||
(data-debug-add-specialized-thing (lambda (thing) (eieio-object-p thing))
|
||||
#'data-debug-insert-object-button)
|
||||
|
||||
;;; DEBUG METHODS
|
||||
|
|
|
@ -45,7 +45,7 @@ variable `eieio-default-superclass'."
|
|||
nil t)))
|
||||
nil))
|
||||
(if (not root-class) (setq root-class 'eieio-default-superclass))
|
||||
(eieio--check-type class-p root-class)
|
||||
(cl-check-type root-class class)
|
||||
(display-buffer (get-buffer-create "*EIEIO OBJECT BROWSE*") t)
|
||||
(with-current-buffer (get-buffer "*EIEIO OBJECT BROWSE*")
|
||||
(erase-buffer)
|
||||
|
@ -58,7 +58,7 @@ variable `eieio-default-superclass'."
|
|||
Argument THIS-ROOT is the local root of the tree.
|
||||
Argument PREFIX is the character prefix to use.
|
||||
Argument CH-PREFIX is another character prefix to display."
|
||||
(eieio--check-type class-p this-root)
|
||||
(cl-check-type this-root class)
|
||||
(let ((myname (symbol-name this-root))
|
||||
(chl (eieio--class-children (eieio--class-v this-root)))
|
||||
(fprefix (concat ch-prefix " +--"))
|
||||
|
@ -85,12 +85,12 @@ If CLASS is actually an object, then also display current values of that object.
|
|||
"n abstract"
|
||||
"")
|
||||
" class")
|
||||
(let ((location (get class 'class-location)))
|
||||
(let ((location (find-lisp-object-file-name class 'eieio-defclass)))
|
||||
(when location
|
||||
(insert " in `")
|
||||
(help-insert-xref-button
|
||||
(file-name-nondirectory location)
|
||||
'eieio-class-def class location)
|
||||
(help-fns-short-filename location)
|
||||
'eieio-class-def class location 'eieio-defclass)
|
||||
(insert "'")))
|
||||
(insert ".\n")
|
||||
;; Parents
|
||||
|
@ -204,15 +204,6 @@ Outputs to the current buffer."
|
|||
prot (cdr prot)
|
||||
i (1+ i)))))
|
||||
|
||||
(defun eieio-build-class-list (class)
|
||||
"Return a list of all classes that inherit from CLASS."
|
||||
(if (class-p class)
|
||||
(cl-mapcan
|
||||
(lambda (c)
|
||||
(append (list c) (eieio-build-class-list c)))
|
||||
(eieio--class-children (eieio--class-v class)))
|
||||
(list class)))
|
||||
|
||||
(defun eieio-build-class-alist (&optional class instantiable-only buildlist)
|
||||
"Return an alist of all currently active classes for completion purposes.
|
||||
Optional argument CLASS is the class to start with.
|
||||
|
@ -256,24 +247,22 @@ are not abstract."
|
|||
|
||||
;;; METHOD COMPLETION / DOC
|
||||
|
||||
(define-button-type 'eieio-method-def
|
||||
:supertype 'help-xref
|
||||
'help-function (lambda (class method file)
|
||||
(eieio-help-find-method-definition class method file))
|
||||
'help-echo (purecopy "mouse-2, RET: find method's definition"))
|
||||
|
||||
(define-button-type 'eieio-class-def
|
||||
:supertype 'help-xref
|
||||
'help-function (lambda (class file)
|
||||
(eieio-help-find-class-definition class file))
|
||||
:supertype 'help-function-def
|
||||
'help-echo (purecopy "mouse-2, RET: find class definition"))
|
||||
|
||||
(defconst eieio--defclass-regexp "(defclass[ \t\r\n]+%s[ \t\r\n]+")
|
||||
(with-eval-after-load 'find-func
|
||||
(defvar find-function-regexp-alist)
|
||||
(add-to-list 'find-function-regexp-alist
|
||||
`(eieio-defclass . eieio--defclass-regexp)))
|
||||
|
||||
;;;###autoload
|
||||
(defun eieio-help-constructor (ctr)
|
||||
"Describe CTR if it is a class constructor."
|
||||
(when (class-p ctr)
|
||||
(erase-buffer)
|
||||
(let ((location (get ctr 'class-location))
|
||||
(let ((location (find-lisp-object-file-name ctr 'eieio-defclass))
|
||||
(def (symbol-function ctr)))
|
||||
(goto-char (point-min))
|
||||
(prin1 ctr)
|
||||
|
@ -288,8 +277,8 @@ are not abstract."
|
|||
(when location
|
||||
(insert " in `")
|
||||
(help-insert-xref-button
|
||||
(file-name-nondirectory location)
|
||||
'eieio-class-def ctr location)
|
||||
(help-fns-short-filename location)
|
||||
'eieio-class-def ctr location 'eieio-defclass)
|
||||
(insert "'"))
|
||||
(insert ".\nCreates an object of class " (symbol-name ctr) ".")
|
||||
(goto-char (point-max))
|
||||
|
@ -304,7 +293,7 @@ are not abstract."
|
|||
"Return non-nil if a method with SPECIALIZERS applies to CLASS."
|
||||
(let ((applies nil))
|
||||
(dolist (specializer specializers)
|
||||
(if (eq 'subclass (car-safe specializer))
|
||||
(if (memq (car-safe specializer) '(subclass eieio--static))
|
||||
(setq specializer (nth 1 specializer)))
|
||||
;; Don't include the methods that are "too generic", such as those
|
||||
;; applying to `eieio-default-superclass'.
|
||||
|
@ -443,60 +432,6 @@ The value returned is a list of elements of the form
|
|||
(terpri)
|
||||
))
|
||||
|
||||
;;; HELP AUGMENTATION
|
||||
;;
|
||||
(defun eieio-help-find-method-definition (class method file)
|
||||
(let ((filename (find-library-name file))
|
||||
location buf)
|
||||
(when (symbolp class)
|
||||
(setq class (symbol-name class)))
|
||||
(when (symbolp method)
|
||||
(setq method (symbol-name method)))
|
||||
(when (null filename)
|
||||
(error "Cannot find library %s" file))
|
||||
(setq buf (find-file-noselect filename))
|
||||
(with-current-buffer buf
|
||||
(goto-char (point-min))
|
||||
(when
|
||||
(re-search-forward
|
||||
;; Regexp for searching methods.
|
||||
(concat "(defmethod[ \t\r\n]+" method
|
||||
"\\([ \t\r\n]+:[a-zA-Z]+\\)?"
|
||||
"[ \t\r\n]+(\\s-*(\\(\\sw\\|\\s_\\)+\\s-+"
|
||||
class
|
||||
"\\s-*)")
|
||||
nil t)
|
||||
(setq location (match-beginning 0))))
|
||||
(if (null location)
|
||||
(message "Unable to find location in file")
|
||||
(pop-to-buffer buf)
|
||||
(goto-char location)
|
||||
(recenter)
|
||||
(beginning-of-line))))
|
||||
|
||||
(defun eieio-help-find-class-definition (class file)
|
||||
(when (symbolp class)
|
||||
(setq class (symbol-name class)))
|
||||
(let ((filename (find-library-name file))
|
||||
location buf)
|
||||
(when (null filename)
|
||||
(error "Cannot find library %s" file))
|
||||
(setq buf (find-file-noselect filename))
|
||||
(with-current-buffer buf
|
||||
(goto-char (point-min))
|
||||
(when
|
||||
(re-search-forward
|
||||
;; Regexp for searching a class.
|
||||
(concat "(defclass[ \t\r\n]+" class "[ \t\r\n]+")
|
||||
nil t)
|
||||
(setq location (match-beginning 0))))
|
||||
(if (null location)
|
||||
(message "Unable to find location in file")
|
||||
(pop-to-buffer buf)
|
||||
(goto-char location)
|
||||
(recenter)
|
||||
(beginning-of-line))))
|
||||
|
||||
;;; SPEEDBAR SUPPORT
|
||||
;;
|
||||
|
||||
|
@ -546,7 +481,7 @@ current expansion depth."
|
|||
|
||||
(defun eieio-class-button (class depth)
|
||||
"Draw a speedbar button at the current point for CLASS at DEPTH."
|
||||
(eieio--check-type class-p class)
|
||||
(cl-check-type class class)
|
||||
(let ((subclasses (eieio--class-children (eieio--class-v class))))
|
||||
(if subclasses
|
||||
(speedbar-make-tag-line 'angle ?+
|
||||
|
|
|
@ -110,7 +110,7 @@ Options in CLOS not supported in EIEIO:
|
|||
Due to the way class options are set up, you can add any tags you wish,
|
||||
and reference them using the function `class-option'."
|
||||
(declare (doc-string 4))
|
||||
(eieio--check-type listp superclasses)
|
||||
(cl-check-type superclasses list)
|
||||
|
||||
(cond ((and (stringp (car options-and-doc))
|
||||
(/= 1 (% (length options-and-doc) 2)))
|
||||
|
@ -223,18 +223,9 @@ This method is obsolete."
|
|||
;; referencing classes. ei, a class whose slot can contain only
|
||||
;; pointers to itself.
|
||||
|
||||
;; Create the test function.
|
||||
(defun ,testsym1 (obj)
|
||||
,(format "Test OBJ to see if it an object of type %S." name)
|
||||
(and (eieio-object-p obj)
|
||||
(same-class-p obj ',name)))
|
||||
|
||||
(defun ,testsym2 (obj)
|
||||
,(format
|
||||
"Test OBJ to see if it an object is a child of type %S."
|
||||
name)
|
||||
(and (eieio-object-p obj)
|
||||
(object-of-class-p obj ',name)))
|
||||
;; Create the test functions.
|
||||
(defalias ',testsym1 (eieio-make-class-predicate ',name))
|
||||
(defalias ',testsym2 (eieio-make-child-predicate ',name))
|
||||
|
||||
,@(when eieio-backward-compatibility
|
||||
(let ((f (intern (format "%s-child-p" name))))
|
||||
|
@ -374,7 +365,7 @@ variable name of the same name as the slot."
|
|||
(defun eieio-object-name (obj &optional extra)
|
||||
"Return a Lisp like symbol string for object OBJ.
|
||||
If EXTRA, include that in the string returned to represent the symbol."
|
||||
(eieio--check-type eieio-object-p obj)
|
||||
(cl-check-type obj eieio-object)
|
||||
(format "#<%s %s%s>" (eieio--object-class-name obj)
|
||||
(eieio-object-name-string obj) (or extra "")))
|
||||
(define-obsolete-function-alias 'object-name #'eieio-object-name "24.4")
|
||||
|
@ -394,7 +385,7 @@ If EXTRA, include that in the string returned to represent the symbol."
|
|||
(cl-defmethod eieio-object-set-name-string (obj name)
|
||||
"Set the string which is OBJ's NAME."
|
||||
(declare (obsolete eieio-named "25.1"))
|
||||
(eieio--check-type stringp name)
|
||||
(cl-check-type name string)
|
||||
(setf (gethash obj eieio--object-names) name))
|
||||
(define-obsolete-function-alias
|
||||
'object-set-name-string 'eieio-object-set-name-string "24.4")
|
||||
|
@ -402,7 +393,7 @@ If EXTRA, include that in the string returned to represent the symbol."
|
|||
(defun eieio-object-class (obj)
|
||||
"Return the class struct defining OBJ."
|
||||
;; FIXME: We say we return a "struct" but we return a symbol instead!
|
||||
(eieio--check-type eieio-object-p obj)
|
||||
(cl-check-type obj eieio-object)
|
||||
(eieio--object-class-name obj))
|
||||
(define-obsolete-function-alias 'object-class #'eieio-object-class "24.4")
|
||||
;; CLOS name, maybe?
|
||||
|
@ -410,7 +401,7 @@ If EXTRA, include that in the string returned to represent the symbol."
|
|||
|
||||
(defun eieio-object-class-name (obj)
|
||||
"Return a Lisp like symbol name for OBJ's class."
|
||||
(eieio--check-type eieio-object-p obj)
|
||||
(cl-check-type obj eieio-object)
|
||||
(eieio-class-name (eieio--object-class-name obj)))
|
||||
(define-obsolete-function-alias
|
||||
'object-class-name 'eieio-object-class-name "24.4")
|
||||
|
@ -419,15 +410,14 @@ If EXTRA, include that in the string returned to represent the symbol."
|
|||
"Return parent classes to CLASS. (overload of variable).
|
||||
|
||||
The CLOS function `class-direct-superclasses' is aliased to this function."
|
||||
(let ((c (eieio-class-object class)))
|
||||
(eieio--class-parent c)))
|
||||
(eieio--class-parent (eieio--class-object class)))
|
||||
|
||||
(define-obsolete-function-alias 'class-parents #'eieio-class-parents "24.4")
|
||||
|
||||
(defun eieio-class-children (class)
|
||||
"Return child classes to CLASS.
|
||||
The CLOS function `class-direct-subclasses' is aliased to this function."
|
||||
(eieio--check-type class-p class)
|
||||
(cl-check-type class class)
|
||||
(eieio--class-children (eieio--class-v class)))
|
||||
(define-obsolete-function-alias
|
||||
'class-children #'eieio-class-children "24.4")
|
||||
|
@ -446,13 +436,13 @@ The CLOS function `class-direct-subclasses' is aliased to this function."
|
|||
(defun same-class-p (obj class)
|
||||
"Return t if OBJ is of class-type CLASS."
|
||||
(setq class (eieio--class-object class))
|
||||
(eieio--check-type eieio--class-p class)
|
||||
(eieio--check-type eieio-object-p obj)
|
||||
(cl-check-type class eieio--class)
|
||||
(cl-check-type obj eieio-object)
|
||||
(eq (eieio--object-class-object obj) class))
|
||||
|
||||
(defun object-of-class-p (obj class)
|
||||
"Return non-nil if OBJ is an instance of CLASS or CLASS' subclasses."
|
||||
(eieio--check-type eieio-object-p obj)
|
||||
(cl-check-type obj eieio-object)
|
||||
;; class will be checked one layer down
|
||||
(child-of-class-p (eieio--object-class-object obj) class))
|
||||
;; Backwards compatibility
|
||||
|
@ -461,13 +451,13 @@ The CLOS function `class-direct-subclasses' is aliased to this function."
|
|||
(defun child-of-class-p (child class)
|
||||
"Return non-nil if CHILD class is a subclass of CLASS."
|
||||
(setq child (eieio--class-object child))
|
||||
(eieio--check-type eieio--class-p child)
|
||||
(cl-check-type child eieio--class)
|
||||
;; `eieio-default-superclass' is never mentioned in eieio--class-parent,
|
||||
;; so we have to special case it here.
|
||||
(or (eq class 'eieio-default-superclass)
|
||||
(let ((p nil))
|
||||
(setq class (eieio--class-object class))
|
||||
(eieio--check-type eieio--class-p class)
|
||||
(cl-check-type class eieio--class)
|
||||
(while (and child (not (eq child class)))
|
||||
(setq p (append p (eieio--class-parent child))
|
||||
child (pop p)))
|
||||
|
@ -475,11 +465,11 @@ The CLOS function `class-direct-subclasses' is aliased to this function."
|
|||
|
||||
(defun object-slots (obj)
|
||||
"Return list of slots available in OBJ."
|
||||
(eieio--check-type eieio-object-p obj)
|
||||
(cl-check-type obj eieio-object)
|
||||
(eieio--class-public-a (eieio--object-class-object obj)))
|
||||
|
||||
(defun eieio--class-slot-initarg (class slot) "Fetch from CLASS, SLOT's :initarg."
|
||||
(eieio--check-type eieio--class-p class)
|
||||
(cl-check-type class eieio--class)
|
||||
(let ((ia (eieio--class-initarg-tuples class))
|
||||
(f nil))
|
||||
(while (and ia (not f))
|
||||
|
@ -517,7 +507,7 @@ OBJECT can be an instance or a class."
|
|||
;; Return nil if the magic symbol is in there.
|
||||
(not (eq (cond
|
||||
((eieio-object-p object) (eieio-oref object slot))
|
||||
((class-p object) (eieio-oref-default object slot))
|
||||
((symbolp object) (eieio-oref-default object slot))
|
||||
(t (signal 'wrong-type-argument (list 'eieio-object-p object))))
|
||||
eieio-unbound))))
|
||||
|
||||
|
@ -529,7 +519,8 @@ OBJECT can be an instance or a class."
|
|||
"Return non-nil if OBJECT-OR-CLASS has SLOT."
|
||||
(let ((cv (cond ((eieio-object-p object-or-class)
|
||||
(eieio--object-class-object object-or-class))
|
||||
(t (eieio-class-object object-or-class)))))
|
||||
((eieio--class-p object-or-class) object-or-class)
|
||||
(t (find-class object-or-class 'error)))))
|
||||
(or (memq slot (eieio--class-public-a cv))
|
||||
(memq slot (eieio--class-class-allocation-a cv)))
|
||||
))
|
||||
|
@ -538,10 +529,10 @@ OBJECT can be an instance or a class."
|
|||
"Return the class that SYMBOL represents.
|
||||
If there is no class, nil is returned if ERRORP is nil.
|
||||
If ERRORP is non-nil, `wrong-argument-type' is signaled."
|
||||
(if (not (class-p symbol))
|
||||
(if errorp (signal 'wrong-type-argument (list 'class-p symbol))
|
||||
nil)
|
||||
(eieio--class-v symbol)))
|
||||
(let ((class (eieio--class-v symbol)))
|
||||
(cond
|
||||
((eieio--class-p class) class)
|
||||
(errorp (signal 'wrong-type-argument (list 'class-p symbol))))))
|
||||
|
||||
;;; Slightly more complex utility functions for objects
|
||||
;;
|
||||
|
@ -551,7 +542,7 @@ LIST is a list of objects whose slots are searched.
|
|||
Objects in LIST do not need to have a slot named SLOT, nor does
|
||||
SLOT need to be bound. If these errors occur, those objects will
|
||||
be ignored."
|
||||
(eieio--check-type listp list)
|
||||
(cl-check-type list list)
|
||||
(while (and list (not (condition-case nil
|
||||
;; This prevents errors for missing slots.
|
||||
(equal key (eieio-oref (car list) slot))
|
||||
|
@ -563,7 +554,7 @@ be ignored."
|
|||
"Return an association list with the contents of SLOT as the key element.
|
||||
LIST must be a list of objects with SLOT in it.
|
||||
This is useful when you need to do completing read on an object group."
|
||||
(eieio--check-type listp list)
|
||||
(cl-check-type list list)
|
||||
(let ((assoclist nil))
|
||||
(while list
|
||||
(setq assoclist (cons (cons (eieio-oref (car list) slot)
|
||||
|
@ -577,7 +568,7 @@ This is useful when you need to do completing read on an object group."
|
|||
LIST must be a list of objects, but those objects do not need to have
|
||||
SLOT in it. If it does not, then that element is left out of the association
|
||||
list."
|
||||
(eieio--check-type listp list)
|
||||
(cl-check-type list list)
|
||||
(let ((assoclist nil))
|
||||
(while list
|
||||
(if (slot-exists-p (car list) slot)
|
||||
|
@ -869,12 +860,8 @@ this object."
|
|||
(object-write thing))
|
||||
((consp thing)
|
||||
(eieio-list-prin1 thing))
|
||||
((class-p thing)
|
||||
((eieio--class-p thing)
|
||||
(princ (eieio-class-name thing)))
|
||||
((or (keywordp thing) (booleanp thing))
|
||||
(prin1 thing))
|
||||
((symbolp thing)
|
||||
(princ (concat "'" (symbol-name thing))))
|
||||
(t (prin1 thing))))
|
||||
|
||||
(defun eieio-list-prin1 (list)
|
||||
|
@ -942,7 +929,7 @@ Optional argument GROUP is the sub-group of slots to display.
|
|||
|
||||
;;;***
|
||||
|
||||
;;;### (autoloads nil "eieio-opt" "eieio-opt.el" "b849f8bf1312d5ef57e53d02173e4b5a")
|
||||
;;;### (autoloads nil "eieio-opt" "eieio-opt.el" "ff1097f185bc2c253276a7d19fe2f54a")
|
||||
;;; Generated autoloads from eieio-opt.el
|
||||
|
||||
(autoload 'eieio-browse "eieio-opt" "\
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2015-01-28 Dima Kogan <dima@secretsauce.net>
|
||||
|
||||
* erc-backend.el (define-erc-response-handler): Give hook-name
|
||||
default value of nil and add-to-list (bug#19363).
|
||||
|
||||
2015-01-22 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Don't downcase system diagnostics' first letters
|
||||
|
|
|
@ -1162,8 +1162,11 @@ add things to `%s' instead."
|
|||
(cl-loop for alias in aliases
|
||||
collect (intern (format "erc-server-%s-functions" alias)))))
|
||||
`(prog2
|
||||
;; Normal hook variable.
|
||||
(defvar ,hook-name ',fn-name ,(format hook-doc name))
|
||||
;; Normal hook variable. The variable may already have a
|
||||
;; value at this point, so I default to nil, and (add-hook)
|
||||
;; unconditionally
|
||||
(defvar ,hook-name nil ,(format hook-doc name))
|
||||
(add-to-list ',hook-name ',fn-name)
|
||||
;; Handler function
|
||||
(defun ,fn-name (proc parsed)
|
||||
,fn-doc
|
||||
|
|
|
@ -41,13 +41,21 @@ could use another implementation.")
|
|||
"Hash table for registered file notification descriptors.
|
||||
A key in this hash table is the descriptor as returned from
|
||||
`gfilenotify', `inotify', `w32notify' or a file name handler.
|
||||
The value in the hash table is the cons cell (DIR FILE CALLBACK).")
|
||||
The value in the hash table is a list
|
||||
|
||||
\(DIR (FILE . CALLBACK) (FILE . CALLBACK) ...)
|
||||
|
||||
Several values for a given DIR happen only for `inotify', when
|
||||
different files from the same directory are watched.")
|
||||
|
||||
;; This function is used by `gfilenotify', `inotify' and `w32notify' events.
|
||||
;;;###autoload
|
||||
(defun file-notify-handle-event (event)
|
||||
"Handle file system monitoring event.
|
||||
If EVENT is a filewatch event, call its callback.
|
||||
If EVENT is a filewatch event, call its callback. It has the format
|
||||
|
||||
\(file-notify (DESCRIPTOR ACTIONS FILE COOKIE) CALLBACK)
|
||||
|
||||
Otherwise, signal a `file-notify-error'."
|
||||
(interactive "e")
|
||||
(if (and (eq (car event) 'file-notify)
|
||||
|
@ -81,12 +89,23 @@ This is available in case a file has been moved."
|
|||
This is available in case a file has been moved."
|
||||
(nth 3 event))
|
||||
|
||||
;; `inotify' returns the same descriptor when the file (directory)
|
||||
;; uses the same inode. We want to distinguish, and apply a virtual
|
||||
;; descriptor which make the difference.
|
||||
(defun file-notify--descriptor (descriptor file)
|
||||
"Return the descriptor to be used in `file-notify-*-watch'.
|
||||
For `gfilenotify' and `w32notify' it is the same descriptor as
|
||||
used in the low-level file notification package."
|
||||
(if (and (natnump descriptor) (eq file-notify--library 'inotify))
|
||||
(cons descriptor file)
|
||||
descriptor))
|
||||
|
||||
;; The callback function used to map between specific flags of the
|
||||
;; respective file notifications, and the ones we return.
|
||||
(defun file-notify-callback (event)
|
||||
"Handle an EVENT returned from file notification.
|
||||
EVENT is the same one as in `file-notify-handle-event' except the
|
||||
car of that event, which is the symbol `file-notify'."
|
||||
EVENT is the cdr of the event in `file-notify-handle-event'
|
||||
\(DESCRIPTOR ACTIONS FILE COOKIE)."
|
||||
(let* ((desc (car event))
|
||||
(registered (gethash desc file-notify-descriptors))
|
||||
(pending-event (assoc desc file-notify--pending-events))
|
||||
|
@ -97,99 +116,113 @@ car of that event, which is the symbol `file-notify'."
|
|||
;; Make actions a list.
|
||||
(unless (consp actions) (setq actions (cons actions nil)))
|
||||
|
||||
;; Check, that event is meant for us.
|
||||
(unless (setq callback (nth 2 registered))
|
||||
(setq actions nil))
|
||||
;; Loop over registered entries. In fact, more than one entry
|
||||
;; happens only for `inotify'.
|
||||
(dolist (entry (cdr registered))
|
||||
|
||||
;; Loop over actions. In fact, more than one action happens only
|
||||
;; for `inotify'.
|
||||
(dolist (action actions)
|
||||
;; Check, that event is meant for us.
|
||||
(unless (setq callback (cdr entry))
|
||||
(setq actions nil))
|
||||
|
||||
;; Send pending event, if it doesn't match.
|
||||
(when (and pending-event
|
||||
;; The cookie doesn't match.
|
||||
(not (eq (file-notify--event-cookie pending-event)
|
||||
(file-notify--event-cookie event)))
|
||||
(or
|
||||
;; inotify.
|
||||
(and (eq (nth 1 pending-event) 'moved-from)
|
||||
(not (eq action 'moved-to)))
|
||||
;; w32notify.
|
||||
(and (eq (nth 1 pending-event) 'renamed-from)
|
||||
(not (eq action 'renamed-to)))))
|
||||
(funcall callback
|
||||
(list desc 'deleted
|
||||
(file-notify--event-file-name pending-event)))
|
||||
(setq file-notify--pending-events
|
||||
(delete pending-event file-notify--pending-events)))
|
||||
;; Loop over actions. In fact, more than one action happens only
|
||||
;; for `inotify'.
|
||||
(dolist (action actions)
|
||||
|
||||
;; Map action. We ignore all events which cannot be mapped.
|
||||
(setq action
|
||||
(cond
|
||||
;; gfilenotify.
|
||||
((memq action '(attribute-changed changed created deleted)) action)
|
||||
((eq action 'moved)
|
||||
(setq file1 (file-notify--event-file1-name event))
|
||||
'renamed)
|
||||
;; Send pending event, if it doesn't match.
|
||||
(when (and pending-event
|
||||
;; The cookie doesn't match.
|
||||
(not (eq (file-notify--event-cookie pending-event)
|
||||
(file-notify--event-cookie event)))
|
||||
(or
|
||||
;; inotify.
|
||||
(and (eq (nth 1 pending-event) 'moved-from)
|
||||
(not (eq action 'moved-to)))
|
||||
;; w32notify.
|
||||
(and (eq (nth 1 pending-event) 'renamed-from)
|
||||
(not (eq action 'renamed-to)))))
|
||||
(funcall callback
|
||||
(list desc 'deleted
|
||||
(file-notify--event-file-name pending-event)))
|
||||
(setq file-notify--pending-events
|
||||
(delete pending-event file-notify--pending-events)))
|
||||
|
||||
;; inotify.
|
||||
((eq action 'attrib) 'attribute-changed)
|
||||
((eq action 'create) 'created)
|
||||
((eq action 'modify) 'changed)
|
||||
((memq action '(delete 'delete-self move-self)) 'deleted)
|
||||
;; Make the event pending.
|
||||
((eq action 'moved-from)
|
||||
(add-to-list 'file-notify--pending-events
|
||||
(list desc action file
|
||||
(file-notify--event-cookie event)))
|
||||
nil)
|
||||
;; Look for pending event.
|
||||
((eq action 'moved-to)
|
||||
(if (null pending-event)
|
||||
'created
|
||||
(setq file1 file
|
||||
file (file-notify--event-file-name pending-event)
|
||||
file-notify--pending-events
|
||||
(delete pending-event file-notify--pending-events))
|
||||
'renamed))
|
||||
;; Map action. We ignore all events which cannot be mapped.
|
||||
(setq action
|
||||
(cond
|
||||
;; gfilenotify.
|
||||
((memq action '(attribute-changed changed created deleted))
|
||||
action)
|
||||
((eq action 'moved)
|
||||
(setq file1 (file-notify--event-file1-name event))
|
||||
'renamed)
|
||||
|
||||
;; w32notify.
|
||||
((eq action 'added) 'created)
|
||||
((eq action 'modified) 'changed)
|
||||
((eq action 'removed) 'deleted)
|
||||
;; Make the event pending.
|
||||
((eq 'renamed-from action)
|
||||
(add-to-list 'file-notify--pending-events
|
||||
(list desc action file
|
||||
(file-notify--event-cookie event)))
|
||||
nil)
|
||||
;; Look for pending event.
|
||||
((eq 'renamed-to action)
|
||||
(if (null pending-event)
|
||||
'created
|
||||
(setq file1 file
|
||||
file (file-notify--event-file-name pending-event)
|
||||
file-notify--pending-events
|
||||
(delete pending-event file-notify--pending-events))
|
||||
'renamed))))
|
||||
;; inotify.
|
||||
((eq action 'attrib) 'attribute-changed)
|
||||
((eq action 'create) 'created)
|
||||
((eq action 'modify) 'changed)
|
||||
((memq action '(delete 'delete-self move-self)) 'deleted)
|
||||
;; Make the event pending.
|
||||
((eq action 'moved-from)
|
||||
(add-to-list 'file-notify--pending-events
|
||||
(list desc action file
|
||||
(file-notify--event-cookie event)))
|
||||
nil)
|
||||
;; Look for pending event.
|
||||
((eq action 'moved-to)
|
||||
(if (null pending-event)
|
||||
'created
|
||||
(setq file1 file
|
||||
file (file-notify--event-file-name pending-event)
|
||||
file-notify--pending-events
|
||||
(delete pending-event file-notify--pending-events))
|
||||
'renamed))
|
||||
|
||||
;; Apply callback.
|
||||
(when (and action
|
||||
(or
|
||||
;; If there is no relative file name for that watch,
|
||||
;; we watch the whole directory.
|
||||
(null (nth 1 registered))
|
||||
;; File matches.
|
||||
(string-equal
|
||||
(nth 1 registered) (file-name-nondirectory file))
|
||||
;; File1 matches.
|
||||
(and (stringp file1)
|
||||
(string-equal
|
||||
(nth 1 registered) (file-name-nondirectory file1)))))
|
||||
(if file1
|
||||
(funcall callback (list desc action file file1))
|
||||
(funcall callback (list desc action file)))))))
|
||||
;; w32notify.
|
||||
((eq action 'added) 'created)
|
||||
((eq action 'modified) 'changed)
|
||||
((eq action 'removed) 'deleted)
|
||||
;; Make the event pending.
|
||||
((eq action 'renamed-from)
|
||||
(add-to-list 'file-notify--pending-events
|
||||
(list desc action file
|
||||
(file-notify--event-cookie event)))
|
||||
nil)
|
||||
;; Look for pending event.
|
||||
((eq action 'renamed-to)
|
||||
(if (null pending-event)
|
||||
'created
|
||||
(setq file1 file
|
||||
file (file-notify--event-file-name pending-event)
|
||||
file-notify--pending-events
|
||||
(delete pending-event file-notify--pending-events))
|
||||
'renamed))))
|
||||
|
||||
;; Apply callback.
|
||||
(when (and action
|
||||
(or
|
||||
;; If there is no relative file name for that watch,
|
||||
;; we watch the whole directory.
|
||||
(null (nth 0 entry))
|
||||
;; File matches.
|
||||
(string-equal
|
||||
(nth 0 entry) (file-name-nondirectory file))
|
||||
;; File1 matches.
|
||||
(and (stringp file1)
|
||||
(string-equal
|
||||
(nth 0 entry) (file-name-nondirectory file1)))))
|
||||
(if file1
|
||||
(funcall
|
||||
callback
|
||||
`(,(file-notify--descriptor desc (nth 0 entry))
|
||||
,action ,file ,file1))
|
||||
(funcall
|
||||
callback
|
||||
`(,(file-notify--descriptor desc (nth 0 entry))
|
||||
,action ,file))))))))
|
||||
|
||||
;; `gfilenotify' and `w32notify' return a unique descriptor for every
|
||||
;; `file-notify-add-watch', while `inotify' returns a unique
|
||||
;; descriptor per inode only.
|
||||
(defun file-notify-add-watch (file flags callback)
|
||||
"Add a watch for filesystem events pertaining to FILE.
|
||||
This arranges for filesystem events pertaining to FILE to be reported
|
||||
|
@ -206,7 +239,7 @@ include the following symbols:
|
|||
`attribute-change' -- watch for file attributes changes, like
|
||||
permissions or modification time
|
||||
|
||||
If FILE is a directory, 'change' watches for file creation or
|
||||
If FILE is a directory, `change' watches for file creation or
|
||||
deletion in that directory. This does not work recursively.
|
||||
|
||||
When any event happens, Emacs will call the CALLBACK function passing
|
||||
|
@ -240,82 +273,96 @@ FILE is the name of the file whose event is being reported."
|
|||
(if (file-directory-p file)
|
||||
file
|
||||
(file-name-directory file))))
|
||||
desc func l-flags)
|
||||
desc func l-flags registered)
|
||||
|
||||
;; Check, whether this has been registered already.
|
||||
; (maphash
|
||||
; (lambda (key value)
|
||||
; (when (equal (cons file callback) value) (setq desc key)))
|
||||
; file-notify-descriptors)
|
||||
(if handler
|
||||
;; A file name handler could exist even if there is no local
|
||||
;; file notification support.
|
||||
(setq desc (funcall
|
||||
handler 'file-notify-add-watch dir flags callback))
|
||||
|
||||
(unless desc
|
||||
(if handler
|
||||
;; A file name handler could exist even if there is no local
|
||||
;; file notification support.
|
||||
(setq desc (funcall
|
||||
handler 'file-notify-add-watch dir flags callback))
|
||||
;; Check, whether Emacs has been compiled with file
|
||||
;; notification support.
|
||||
(unless file-notify--library
|
||||
(signal 'file-notify-error
|
||||
'("No file notification package available")))
|
||||
|
||||
;; Check, whether Emacs has been compiled with file
|
||||
;; notification support.
|
||||
(unless file-notify--library
|
||||
(signal 'file-notify-error
|
||||
'("No file notification package available")))
|
||||
;; Determine low-level function to be called.
|
||||
(setq func
|
||||
(cond
|
||||
((eq file-notify--library 'gfilenotify) 'gfile-add-watch)
|
||||
((eq file-notify--library 'inotify) 'inotify-add-watch)
|
||||
((eq file-notify--library 'w32notify) 'w32notify-add-watch)))
|
||||
|
||||
;; Determine low-level function to be called.
|
||||
(setq func
|
||||
(cond
|
||||
((eq file-notify--library 'gfilenotify) 'gfile-add-watch)
|
||||
((eq file-notify--library 'inotify) 'inotify-add-watch)
|
||||
((eq file-notify--library 'w32notify) 'w32notify-add-watch)))
|
||||
;; Determine respective flags.
|
||||
(if (eq file-notify--library 'gfilenotify)
|
||||
(setq l-flags '(watch-mounts send-moved))
|
||||
(when (memq 'change flags)
|
||||
(setq
|
||||
l-flags
|
||||
(cond
|
||||
((eq file-notify--library 'inotify) '(create modify move delete))
|
||||
((eq file-notify--library 'w32notify)
|
||||
'(file-name directory-name size last-write-time)))))
|
||||
(when (memq 'attribute-change flags)
|
||||
(add-to-list
|
||||
'l-flags
|
||||
(cond
|
||||
((eq file-notify--library 'inotify) 'attrib)
|
||||
((eq file-notify--library 'w32notify) 'attributes)))))
|
||||
|
||||
;; Determine respective flags.
|
||||
(if (eq file-notify--library 'gfilenotify)
|
||||
(setq l-flags '(watch-mounts send-moved))
|
||||
(when (memq 'change flags)
|
||||
(setq
|
||||
l-flags
|
||||
(cond
|
||||
((eq file-notify--library 'inotify) '(create modify move delete))
|
||||
((eq file-notify--library 'w32notify)
|
||||
'(file-name directory-name size last-write-time)))))
|
||||
(when (memq 'attribute-change flags)
|
||||
(add-to-list
|
||||
'l-flags
|
||||
(cond
|
||||
((eq file-notify--library 'inotify) 'attrib)
|
||||
((eq file-notify--library 'w32notify) 'attributes)))))
|
||||
;; Call low-level function.
|
||||
(setq desc (funcall func dir l-flags 'file-notify-callback)))
|
||||
|
||||
;; Call low-level function.
|
||||
(setq desc (funcall func dir l-flags 'file-notify-callback))))
|
||||
;; Modify `file-notify-descriptors'.
|
||||
(setq registered (gethash desc file-notify-descriptors))
|
||||
(puthash
|
||||
desc
|
||||
`(,dir
|
||||
(,(unless (file-directory-p file) (file-name-nondirectory file))
|
||||
. ,callback)
|
||||
. ,(cdr registered))
|
||||
file-notify-descriptors)
|
||||
|
||||
;; Return descriptor.
|
||||
(puthash desc
|
||||
(list (directory-file-name
|
||||
(if (file-directory-p dir) dir (file-name-directory dir)))
|
||||
(unless (file-directory-p file)
|
||||
(file-name-nondirectory file))
|
||||
callback)
|
||||
file-notify-descriptors)
|
||||
desc))
|
||||
(file-notify--descriptor
|
||||
desc (unless (file-directory-p file) (file-name-nondirectory file)))))
|
||||
|
||||
(defun file-notify-rm-watch (descriptor)
|
||||
"Remove an existing watch specified by its DESCRIPTOR.
|
||||
DESCRIPTOR should be an object returned by `file-notify-add-watch'."
|
||||
(let ((file (car (gethash descriptor file-notify-descriptors)))
|
||||
handler)
|
||||
(let* ((desc (if (consp descriptor) (car descriptor) descriptor))
|
||||
(file (if (consp descriptor) (cdr descriptor)))
|
||||
(dir (car (gethash desc file-notify-descriptors)))
|
||||
handler registered)
|
||||
|
||||
(when (stringp file)
|
||||
(setq handler (find-file-name-handler file 'file-notify-rm-watch))
|
||||
(if handler
|
||||
(funcall handler 'file-notify-rm-watch descriptor)
|
||||
(funcall
|
||||
(cond
|
||||
((eq file-notify--library 'gfilenotify) 'gfile-rm-watch)
|
||||
((eq file-notify--library 'inotify) 'inotify-rm-watch)
|
||||
((eq file-notify--library 'w32notify) 'w32notify-rm-watch))
|
||||
descriptor)))
|
||||
(when (stringp dir)
|
||||
(setq handler (find-file-name-handler dir 'file-notify-rm-watch))
|
||||
|
||||
(remhash descriptor file-notify-descriptors)))
|
||||
;; Modify `file-notify-descriptors'.
|
||||
(if (not file)
|
||||
(remhash desc file-notify-descriptors)
|
||||
|
||||
(setq registered (gethash desc file-notify-descriptors))
|
||||
(setcdr registered
|
||||
(delete (assoc file (cdr registered)) (cdr registered)))
|
||||
(if (null (cdr registered))
|
||||
(remhash desc file-notify-descriptors)
|
||||
(puthash desc registered file-notify-descriptors)))
|
||||
|
||||
;; Call low-level function.
|
||||
(when (null (cdr registered))
|
||||
(if handler
|
||||
;; A file name handler could exist even if there is no local
|
||||
;; file notification support.
|
||||
(funcall handler 'file-notify-rm-watch desc)
|
||||
|
||||
(funcall
|
||||
(cond
|
||||
((eq file-notify--library 'gfilenotify) 'gfile-rm-watch)
|
||||
((eq file-notify--library 'inotify) 'inotify-rm-watch)
|
||||
((eq file-notify--library 'w32notify) 'w32notify-rm-watch))
|
||||
desc))))))
|
||||
|
||||
;; The end:
|
||||
(provide 'filenotify)
|
||||
|
|
|
@ -6094,7 +6094,7 @@ and `list-directory-verbose-switches'."
|
|||
|
||||
PATTERN is assumed to represent a file-name wildcard suitable for the
|
||||
underlying filesystem. For Unix and GNU/Linux, each character from the
|
||||
set [ \\t\\n;<>&|()'\"#$] is quoted with a backslash; for DOS/Windows, all
|
||||
set [ \\t\\n;<>&|()`'\"#$] is quoted with a backslash; for DOS/Windows, all
|
||||
the parts of the pattern which don't include wildcard characters are
|
||||
quoted with double quotes.
|
||||
|
||||
|
@ -6108,12 +6108,12 @@ need to be passed verbatim to shell commands."
|
|||
;; argument has quotes, we can safely assume it is already
|
||||
;; quoted by the caller.
|
||||
(if (or (string-match "[\"]" pattern)
|
||||
;; We quote [&()#$'] in case their shell is a port of a
|
||||
;; We quote [&()#$`'] in case their shell is a port of a
|
||||
;; Unixy shell. We quote [,=+] because stock DOS and
|
||||
;; Windows shells require that in some cases, such as
|
||||
;; passing arguments to batch files that use positional
|
||||
;; arguments like %1.
|
||||
(not (string-match "[ \t;&()#$',=+]" pattern)))
|
||||
(not (string-match "[ \t;&()#$`',=+]" pattern)))
|
||||
pattern
|
||||
(let ((result "\"")
|
||||
(beg 0)
|
||||
|
@ -6128,7 +6128,7 @@ need to be passed verbatim to shell commands."
|
|||
(concat result (substring pattern beg) "\""))))
|
||||
(t
|
||||
(let ((beg 0))
|
||||
(while (string-match "[ \t\n;<>&|()'\"#$]" pattern beg)
|
||||
(while (string-match "[ \t\n;<>&|()`'\"#$]" pattern beg)
|
||||
(setq pattern
|
||||
(concat (substring pattern 0 (match-beginning 0))
|
||||
"\\"
|
||||
|
@ -6590,35 +6590,40 @@ Runs the members of `kill-emacs-query-functions' in turn and stops
|
|||
if any returns nil. If `confirm-kill-emacs' is non-nil, calls it."
|
||||
(interactive "P")
|
||||
(save-some-buffers arg t)
|
||||
(and (or (not (memq t (mapcar (function
|
||||
(lambda (buf) (and (buffer-file-name buf)
|
||||
(buffer-modified-p buf))))
|
||||
(buffer-list))))
|
||||
(yes-or-no-p "Modified buffers exist; exit anyway? "))
|
||||
(or (not (fboundp 'process-list))
|
||||
;; process-list is not defined on MSDOS.
|
||||
(let ((processes (process-list))
|
||||
active)
|
||||
(while processes
|
||||
(and (memq (process-status (car processes)) '(run stop open listen))
|
||||
(process-query-on-exit-flag (car processes))
|
||||
(setq active t))
|
||||
(setq processes (cdr processes)))
|
||||
(or (not active)
|
||||
(with-current-buffer-window
|
||||
(get-buffer-create "*Process List*") nil
|
||||
#'(lambda (window _value)
|
||||
(with-selected-window window
|
||||
(unwind-protect
|
||||
(yes-or-no-p "Active processes exist; kill them and exit anyway? ")
|
||||
(when (window-live-p window)
|
||||
(quit-restore-window window 'kill)))))
|
||||
(list-processes t)))))
|
||||
;; Query the user for other things, perhaps.
|
||||
(run-hook-with-args-until-failure 'kill-emacs-query-functions)
|
||||
(or (null confirm-kill-emacs)
|
||||
(funcall confirm-kill-emacs "Really exit Emacs? "))
|
||||
(kill-emacs)))
|
||||
(let ((confirm confirm-kill-emacs))
|
||||
(and
|
||||
(or (not (memq t (mapcar (function
|
||||
(lambda (buf) (and (buffer-file-name buf)
|
||||
(buffer-modified-p buf))))
|
||||
(buffer-list))))
|
||||
(progn (setq confirm nil)
|
||||
(yes-or-no-p "Modified buffers exist; exit anyway? ")))
|
||||
(or (not (fboundp 'process-list))
|
||||
;; process-list is not defined on MSDOS.
|
||||
(let ((processes (process-list))
|
||||
active)
|
||||
(while processes
|
||||
(and (memq (process-status (car processes)) '(run stop open listen))
|
||||
(process-query-on-exit-flag (car processes))
|
||||
(setq active t))
|
||||
(setq processes (cdr processes)))
|
||||
(or (not active)
|
||||
(with-current-buffer-window
|
||||
(get-buffer-create "*Process List*") nil
|
||||
#'(lambda (window _value)
|
||||
(with-selected-window window
|
||||
(unwind-protect
|
||||
(progn
|
||||
(setq confirm nil)
|
||||
(yes-or-no-p "Active processes exist; kill them and exit anyway? "))
|
||||
(when (window-live-p window)
|
||||
(quit-restore-window window 'kill)))))
|
||||
(list-processes t)))))
|
||||
;; Query the user for other things, perhaps.
|
||||
(run-hook-with-args-until-failure 'kill-emacs-query-functions)
|
||||
(or (null confirm)
|
||||
(funcall confirm "Really exit Emacs? "))
|
||||
(kill-emacs))))
|
||||
|
||||
(defun save-buffers-kill-terminal (&optional arg)
|
||||
"Offer to save each buffer, then kill the current connection.
|
||||
|
|
|
@ -1,3 +1,30 @@
|
|||
2015-01-30 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* gnus-registry.el (gnus-registry-max-pruned-entries)
|
||||
(gnus-registry-prune-factor, gnus-registry-default-sort-function):
|
||||
Fix :version.
|
||||
(gnus-registry-default-sort-function): Improve :type.
|
||||
|
||||
2015-01-29 Lars Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* nnimap.el (nnimap-request-group): Allow running this function on
|
||||
groups that don't exist in Gnus yet.
|
||||
(nnimap-request-group): Revert previous patch since that made it
|
||||
impossible to enter nnimap groups.
|
||||
|
||||
* message.el (message-smtpmail-send-it): Remove the mail header
|
||||
separator before sending.
|
||||
|
||||
2015-01-28 Elias Oltmanns <eo@nebensachen.de>
|
||||
|
||||
* nnimap.el (nnimap-find-expired-articles): Fix handling of
|
||||
(expiry-wait . never).
|
||||
|
||||
2015-01-28 Lars Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* nnimap.el (nnimap-request-group): Clear the buffer before returning
|
||||
the data.
|
||||
|
||||
2015-01-27 Lars Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* nnir.el (nnir-imap-expr-to-imap): Check for literal+ capability in
|
||||
|
|
|
@ -176,7 +176,8 @@ nnmairix groups are specifically excluded because they are ephemeral."
|
|||
(make-obsolete-variable 'gnus-registry-max-track-groups nil "23.4")
|
||||
(make-obsolete-variable 'gnus-registry-entry-caching nil "23.4")
|
||||
(make-obsolete-variable 'gnus-registry-trim-articles-without-groups nil "23.4")
|
||||
(make-obsolete-variable 'gnus-registry-max-pruned-entries nil "24.4")
|
||||
;; FIXME it was simply deleted.
|
||||
(make-obsolete-variable 'gnus-registry-max-pruned-entries nil "25.1")
|
||||
|
||||
(defcustom gnus-registry-track-extra '(subject sender recipient)
|
||||
"Whether the registry should track extra data about a message.
|
||||
|
@ -253,21 +254,18 @@ exactly how much less. For example, given a maximum size of
|
|||
cut the registry back to \(- 50000 \(* 50000 0.1\)\) -> 45000
|
||||
entries. The pruning process is constrained by the presence of
|
||||
\"precious\" entries."
|
||||
:version "24.4"
|
||||
:version "25.1"
|
||||
:group 'gnus-registry
|
||||
:type 'float)
|
||||
|
||||
(defcustom gnus-registry-default-sort-function
|
||||
#'gnus-registry-sort-by-creation-time
|
||||
"Sort function to use when pruning the registry.
|
||||
|
||||
Entries which sort to the front of the list will be pruned
|
||||
first.
|
||||
|
||||
Entries that sort to the front of the list are pruned first.
|
||||
This can slow pruning down. Set to nil to perform no sorting."
|
||||
:version "24.4"
|
||||
:version "25.1"
|
||||
:group 'gnus-registry
|
||||
:type 'symbol)
|
||||
:type '(choice (const :tag "No sorting" nil) function))
|
||||
|
||||
(defun gnus-registry-sort-by-creation-time (l r)
|
||||
"Sort older entries to front of list."
|
||||
|
|
|
@ -4906,6 +4906,11 @@ evaluates `message-send-mail-hook' just before sending a message.
|
|||
It is useful if your ISP requires the POP-before-SMTP
|
||||
authentication. See the Gnus manual for details."
|
||||
(run-hooks 'message-send-mail-hook)
|
||||
;; Change header-delimiter to be what smtpmail expects.
|
||||
(goto-char (point-min))
|
||||
(when (re-search-forward
|
||||
(concat "^" (regexp-quote mail-header-separator) "\n"))
|
||||
(replace-match "\n"))
|
||||
(smtpmail-send-it))
|
||||
|
||||
(defun message-send-mail-with-mailclient ()
|
||||
|
|
|
@ -889,7 +889,7 @@ external if displayed external."
|
|||
(when (and (boundp 'gnus-summary-buffer)
|
||||
(bufferp gnus-summary-buffer)
|
||||
(buffer-name gnus-summary-buffer))
|
||||
;; So that we pop back to the right place, sortof.
|
||||
;; So that we pop back to the right place, sort of.
|
||||
(switch-to-buffer gnus-summary-buffer)
|
||||
(switch-to-buffer mm))
|
||||
(delete-other-windows)
|
||||
|
|
|
@ -812,6 +812,7 @@ textual parts.")
|
|||
(nnimap-finish-retrieve-group-infos server (list info) sequences
|
||||
t)
|
||||
(setq active (nth 2 (assoc group nnimap-current-infos)))))
|
||||
(erase-buffer)
|
||||
(insert (format "211 %d %d %d %S\n"
|
||||
(- (cdr active) (car active))
|
||||
(car active)
|
||||
|
@ -1020,20 +1021,20 @@ textual parts.")
|
|||
|
||||
(defun nnimap-find-expired-articles (group)
|
||||
(let ((cutoff (nnmail-expired-article-p group nil nil)))
|
||||
(with-current-buffer (nnimap-buffer)
|
||||
(let ((result
|
||||
(nnimap-command
|
||||
"UID SEARCH SENTBEFORE %s"
|
||||
(format-time-string
|
||||
(format "%%d-%s-%%Y"
|
||||
(upcase
|
||||
(car (rassoc (nth 4 (decode-time cutoff))
|
||||
parse-time-months))))
|
||||
cutoff))))
|
||||
(and (car result)
|
||||
(delete 0 (mapcar #'string-to-number
|
||||
(cdr (assoc "SEARCH" (cdr result))))))))))
|
||||
|
||||
(when cutoff
|
||||
(with-current-buffer (nnimap-buffer)
|
||||
(let ((result
|
||||
(nnimap-command
|
||||
"UID SEARCH SENTBEFORE %s"
|
||||
(format-time-string
|
||||
(format "%%d-%s-%%Y"
|
||||
(upcase
|
||||
(car (rassoc (nth 4 (decode-time cutoff))
|
||||
parse-time-months))))
|
||||
cutoff))))
|
||||
(and (car result)
|
||||
(delete 0 (mapcar #'string-to-number
|
||||
(cdr (assoc "SEARCH" (cdr result)))))))))))
|
||||
|
||||
(defun nnimap-find-article-by-message-id (group server message-id
|
||||
&optional limit)
|
||||
|
|
|
@ -145,7 +145,8 @@
|
|||
(file-error (load "ldefs-boot.el")))
|
||||
|
||||
(load "emacs-lisp/nadvice")
|
||||
(load "minibuffer")
|
||||
(load "emacs-lisp/cl-preloaded")
|
||||
(load "minibuffer") ;After loaddefs, for define-minor-mode.
|
||||
(load "abbrev") ;lisp-mode.el and simple.el use define-abbrev-table.
|
||||
(load "simple")
|
||||
|
||||
|
|
|
@ -328,7 +328,15 @@ This variable is only used if the variable
|
|||
|
||||
(defun net-utils-run-program (name header program args)
|
||||
"Run a network information program."
|
||||
(let ((buf (get-buffer-create (concat "*" name "*"))))
|
||||
(let ((buf (get-buffer-create (concat "*" name "*")))
|
||||
(coding-system-for-read
|
||||
;; MS-Windows versions of network utilities output text
|
||||
;; encoded in the console (a.k.a. "OEM") codepage, which is
|
||||
;; different from the default system (a.k.a. "ANSI")
|
||||
;; codepage.
|
||||
(if (eq system-type 'windows-nt)
|
||||
(intern (format "cp%d" (w32-get-console-output-codepage)))
|
||||
coding-system-for-read)))
|
||||
(set-buffer buf)
|
||||
(erase-buffer)
|
||||
(insert header "\n")
|
||||
|
@ -352,7 +360,15 @@ This variable is only used if the variable
|
|||
(when proc
|
||||
(set-process-filter proc nil)
|
||||
(delete-process proc)))
|
||||
(let ((inhibit-read-only t))
|
||||
(let ((inhibit-read-only t)
|
||||
(coding-system-for-read
|
||||
;; MS-Windows versions of network utilities output text
|
||||
;; encoded in the console (a.k.a. "OEM") codepage, which is
|
||||
;; different from the default system (a.k.a. "ANSI")
|
||||
;; codepage.
|
||||
(if (eq system-type 'windows-nt)
|
||||
(intern (format "cp%d" (w32-get-console-output-codepage)))
|
||||
coding-system-for-read)))
|
||||
(erase-buffer))
|
||||
(net-utils-mode)
|
||||
(setq-local net-utils--revert-cmd
|
||||
|
|
|
@ -1628,6 +1628,8 @@ The preference is a float determined from `shr-prefer-media-type'."
|
|||
(let ((trs nil)
|
||||
(shr-inhibit-decoration (not fill))
|
||||
(rowspans (make-vector (length widths) 0))
|
||||
(colspan-remaining 0)
|
||||
colspan-width colspan-count
|
||||
width colspan)
|
||||
(dolist (row (dom-non-text-children dom))
|
||||
(when (eq (dom-tag row) 'tr)
|
||||
|
@ -1659,24 +1661,39 @@ The preference is a float determined from `shr-prefer-media-type'."
|
|||
(if column
|
||||
(aref widths width-column)
|
||||
10))
|
||||
(when (and fill
|
||||
(setq colspan (dom-attr column 'colspan)))
|
||||
(when (setq colspan (dom-attr column 'colspan))
|
||||
(setq colspan (min (string-to-number colspan)
|
||||
;; The colspan may be wrong, so
|
||||
;; truncate it to the length of the
|
||||
;; remaining columns.
|
||||
(- (length widths) i)))
|
||||
(dotimes (j (1- colspan))
|
||||
(if (> (+ i 1 j) (1- (length widths)))
|
||||
(setq width (aref widths (1- (length widths))))
|
||||
(setq width (+ width
|
||||
shr-table-separator-length
|
||||
(aref widths (+ i 1 j))))))
|
||||
(setq width-column (+ width-column (1- colspan))))
|
||||
(setq width
|
||||
(if (> (+ i 1 j) (1- (length widths)))
|
||||
;; If we have a colspan spec that's longer
|
||||
;; than the table is wide, just use the last
|
||||
;; width as the width.
|
||||
(aref widths (1- (length widths)))
|
||||
;; Sum up the widths of the columns we're
|
||||
;; spanning.
|
||||
(+ width
|
||||
shr-table-separator-length
|
||||
(aref widths (+ i 1 j))))))
|
||||
(setq width-column (+ width-column (1- colspan))
|
||||
colspan-count colspan
|
||||
colspan-remaining colspan))
|
||||
(when (or column
|
||||
(not fill))
|
||||
(push (shr-render-td column width fill)
|
||||
tds))
|
||||
(let ((data (shr-render-td column width fill)))
|
||||
(if (and (not fill)
|
||||
(> colspan-remaining 0))
|
||||
(progn
|
||||
(when (= colspan-count colspan-remaining)
|
||||
(setq colspan-width data))
|
||||
(let ((this-width (/ colspan-width colspan-count)))
|
||||
(push this-width tds)
|
||||
(setq colspan-remaining (1- colspan-remaining))))
|
||||
(push data tds))))
|
||||
(setq i (1+ i)
|
||||
width-column (1+ width-column))))
|
||||
(push (nreverse tds) trs))))
|
||||
|
|
|
@ -64,7 +64,6 @@
|
|||
(defvar bkup-backup-directory-info)
|
||||
(defvar directory-sep-char)
|
||||
(defvar eshell-path-env)
|
||||
(defvar file-notify-descriptors)
|
||||
(defvar ls-lisp-use-insert-directory-program)
|
||||
(defvar outline-regexp)
|
||||
|
||||
|
@ -3415,7 +3414,7 @@ of."
|
|||
(defun tramp-handle-file-notify-rm-watch (proc)
|
||||
"Like `file-notify-rm-watch' for Tramp files."
|
||||
;; The descriptor must be a process object.
|
||||
(unless (and (processp proc) (gethash proc file-notify-descriptors))
|
||||
(unless (processp proc)
|
||||
(tramp-error proc 'file-notify-error "Not a valid descriptor %S" proc))
|
||||
(tramp-message proc 6 "Kill %S" proc)
|
||||
(kill-process proc))
|
||||
|
|
320
lisp/outline.el
320
lisp/outline.el
|
@ -35,9 +35,6 @@
|
|||
|
||||
;;; Code:
|
||||
|
||||
(defvar font-lock-warning-face)
|
||||
|
||||
|
||||
(defgroup outlines nil
|
||||
"Support for hierarchical outlining."
|
||||
:prefix "outline-"
|
||||
|
@ -65,73 +62,66 @@ in the file it applies to.")
|
|||
(define-key map "@" 'outline-mark-subtree)
|
||||
(define-key map "\C-n" 'outline-next-visible-heading)
|
||||
(define-key map "\C-p" 'outline-previous-visible-heading)
|
||||
(define-key map "\C-i" 'show-children)
|
||||
(define-key map "\C-s" 'show-subtree)
|
||||
(define-key map "\C-d" 'hide-subtree)
|
||||
(define-key map "\C-i" 'outline-show-children)
|
||||
(define-key map "\C-s" 'outline-show-subtree)
|
||||
(define-key map "\C-d" 'outline-hide-subtree)
|
||||
(define-key map "\C-u" 'outline-up-heading)
|
||||
(define-key map "\C-f" 'outline-forward-same-level)
|
||||
(define-key map "\C-b" 'outline-backward-same-level)
|
||||
(define-key map "\C-t" 'hide-body)
|
||||
(define-key map "\C-a" 'show-all)
|
||||
(define-key map "\C-c" 'hide-entry)
|
||||
(define-key map "\C-e" 'show-entry)
|
||||
(define-key map "\C-l" 'hide-leaves)
|
||||
(define-key map "\C-k" 'show-branches)
|
||||
(define-key map "\C-q" 'hide-sublevels)
|
||||
(define-key map "\C-o" 'hide-other)
|
||||
(define-key map "\C-t" 'outline-hide-body)
|
||||
(define-key map "\C-a" 'outline-show-all)
|
||||
(define-key map "\C-c" 'outline-hide-entry)
|
||||
(define-key map "\C-e" 'outline-show-entry)
|
||||
(define-key map "\C-l" 'outline-hide-leaves)
|
||||
(define-key map "\C-k" 'outline-show-branches)
|
||||
(define-key map "\C-q" 'outline-hide-sublevels)
|
||||
(define-key map "\C-o" 'outline-hide-other)
|
||||
(define-key map "\C-^" 'outline-move-subtree-up)
|
||||
(define-key map "\C-v" 'outline-move-subtree-down)
|
||||
(define-key map [(control ?<)] 'outline-promote)
|
||||
(define-key map [(control ?>)] 'outline-demote)
|
||||
(define-key map "\C-m" 'outline-insert-heading)
|
||||
;; Where to bind outline-cycle ?
|
||||
map))
|
||||
|
||||
(defvar outline-mode-menu-bar-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
|
||||
(define-key map [hide] (cons "Hide" (make-sparse-keymap "Hide")))
|
||||
|
||||
(define-key map [hide hide-other]
|
||||
'(menu-item "Hide Other" hide-other
|
||||
(define-key map [hide outline-hide-other]
|
||||
'(menu-item "Hide Other" outline-hide-other
|
||||
:help "Hide everything except current body and parent and top-level headings"))
|
||||
(define-key map [hide hide-sublevels]
|
||||
'(menu-item "Hide Sublevels" hide-sublevels
|
||||
(define-key map [hide outline-hide-sublevels]
|
||||
'(menu-item "Hide Sublevels" outline-hide-sublevels
|
||||
:help "Hide everything but the top LEVELS levels of headers, in whole buffer"))
|
||||
(define-key map [hide hide-subtree]
|
||||
'(menu-item "Hide Subtree" hide-subtree
|
||||
(define-key map [hide outline-hide-subtree]
|
||||
'(menu-item "Hide Subtree" outline-hide-subtree
|
||||
:help "Hide everything after this heading at deeper levels"))
|
||||
(define-key map [hide hide-entry]
|
||||
'(menu-item "Hide Entry" hide-entry
|
||||
(define-key map [hide outline-hide-entry]
|
||||
'(menu-item "Hide Entry" outline-hide-entry
|
||||
:help "Hide the body directly following this heading"))
|
||||
(define-key map [hide hide-body]
|
||||
'(menu-item "Hide Body" hide-body
|
||||
(define-key map [hide outline-hide-body]
|
||||
'(menu-item "Hide Body" outline-hide-body
|
||||
:help "Hide all body lines in buffer, leaving all headings visible"))
|
||||
(define-key map [hide hide-leaves]
|
||||
'(menu-item "Hide Leaves" hide-leaves
|
||||
(define-key map [hide outline-hide-leaves]
|
||||
'(menu-item "Hide Leaves" outline-hide-leaves
|
||||
:help "Hide the body after this heading and at deeper levels"))
|
||||
|
||||
(define-key map [show] (cons "Show" (make-sparse-keymap "Show")))
|
||||
|
||||
(define-key map [show show-subtree]
|
||||
'(menu-item "Show Subtree" show-subtree
|
||||
(define-key map [show outline-show-subtree]
|
||||
'(menu-item "Show Subtree" outline-show-subtree
|
||||
:help "Show everything after this heading at deeper levels"))
|
||||
(define-key map [show show-children]
|
||||
'(menu-item "Show Children" show-children
|
||||
(define-key map [show outline-show-children]
|
||||
'(menu-item "Show Children" outline-show-children
|
||||
:help "Show all direct subheadings of this heading"))
|
||||
(define-key map [show show-branches]
|
||||
'(menu-item "Show Branches" show-branches
|
||||
(define-key map [show outline-show-branches]
|
||||
'(menu-item "Show Branches" outline-show-branches
|
||||
:help "Show all subheadings of this heading, but not their bodies"))
|
||||
(define-key map [show show-entry]
|
||||
'(menu-item "Show Entry" show-entry
|
||||
(define-key map [show outline-show-entry]
|
||||
'(menu-item "Show Entry" outline-show-entry
|
||||
:help "Show the body directly following this heading"))
|
||||
(define-key map [show show-all]
|
||||
'(menu-item "Show All" show-all
|
||||
(define-key map [show outline-show-all]
|
||||
'(menu-item "Show All" outline-show-all
|
||||
:help "Show all of the text in the buffer"))
|
||||
|
||||
(define-key map [headings]
|
||||
(cons "Headings" (make-sparse-keymap "Headings")))
|
||||
|
||||
(define-key map [headings demote-subtree]
|
||||
'(menu-item "Demote Subtree" outline-demote
|
||||
:help "Demote headings lower down the tree"))
|
||||
|
@ -152,23 +142,18 @@ in the file it applies to.")
|
|||
'(menu-item "New Heading" outline-insert-heading
|
||||
:help "Insert a new heading at same depth at point"))
|
||||
(define-key map [headings outline-backward-same-level]
|
||||
|
||||
'(menu-item "Previous Same Level" outline-backward-same-level
|
||||
:help "Move backward to the arg'th subheading at same level as this one."))
|
||||
(define-key map [headings outline-forward-same-level]
|
||||
|
||||
'(menu-item "Next Same Level" outline-forward-same-level
|
||||
:help "Move forward to the arg'th subheading at same level as this one"))
|
||||
(define-key map [headings outline-previous-visible-heading]
|
||||
|
||||
'(menu-item "Previous" outline-previous-visible-heading
|
||||
:help "Move to the previous heading line"))
|
||||
(define-key map [headings outline-next-visible-heading]
|
||||
|
||||
'(menu-item "Next" outline-next-visible-heading
|
||||
:help "Move to the next visible heading line"))
|
||||
(define-key map [headings outline-up-heading]
|
||||
|
||||
'(menu-item "Up" outline-up-heading
|
||||
:help "Move to the visible heading line of which the present line is a subheading"))
|
||||
map))
|
||||
|
@ -190,7 +175,6 @@ in the file it applies to.")
|
|||
outline-mode-menu-bar-map))))))
|
||||
map))
|
||||
|
||||
|
||||
(defvar outline-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(define-key map "\C-c" outline-mode-prefix-map)
|
||||
|
@ -198,7 +182,7 @@ in the file it applies to.")
|
|||
map))
|
||||
|
||||
(defvar outline-font-lock-keywords
|
||||
'(;;
|
||||
'(
|
||||
;; Highlight headings according to the level.
|
||||
(eval . (list (concat "^\\(?:" outline-regexp "\\).+")
|
||||
0 '(outline-font-lock-face) nil t)))
|
||||
|
@ -248,33 +232,14 @@ in the file it applies to.")
|
|||
[outline-1 outline-2 outline-3 outline-4
|
||||
outline-5 outline-6 outline-7 outline-8])
|
||||
|
||||
;; (defvar outline-font-lock-levels nil)
|
||||
;; (make-variable-buffer-local 'outline-font-lock-levels)
|
||||
|
||||
(defun outline-font-lock-face ()
|
||||
;; (save-excursion
|
||||
;; (outline-back-to-heading t)
|
||||
;; (let* ((count 0)
|
||||
;; (start-level (funcall outline-level))
|
||||
;; (level start-level)
|
||||
;; face-level)
|
||||
;; (while (not (setq face-level
|
||||
;; (if (or (bobp) (eq level 1)) 0
|
||||
;; (cdr (assq level outline-font-lock-levels)))))
|
||||
;; (outline-up-heading 1 t)
|
||||
;; (setq count (1+ count))
|
||||
;; (setq level (funcall outline-level)))
|
||||
;; ;; Remember for later.
|
||||
;; (unless (zerop count)
|
||||
;; (setq face-level (+ face-level count))
|
||||
;; (push (cons start-level face-level) outline-font-lock-levels))
|
||||
;; (condition-case nil
|
||||
;; (aref outline-font-lock-faces face-level)
|
||||
;; (error font-lock-warning-face))))
|
||||
"Return one of `outline-font-lock-faces' for current level."
|
||||
(save-excursion
|
||||
(goto-char (match-beginning 0))
|
||||
(looking-at outline-regexp)
|
||||
(aref outline-font-lock-faces (% (1- (funcall outline-level)) (length outline-font-lock-faces)))))
|
||||
(aref outline-font-lock-faces
|
||||
(% (1- (funcall outline-level))
|
||||
(length outline-font-lock-faces)))))
|
||||
|
||||
(defvar outline-view-change-hook nil
|
||||
"Normal hook to be run after outline visibility changes.")
|
||||
|
@ -296,29 +261,11 @@ invisible, or visible again. Invisible lines are attached to the end
|
|||
of the heading, so they move with it, if the line is killed and yanked
|
||||
back. A heading with text hidden under it is marked with an ellipsis (...).
|
||||
|
||||
Commands:\\<outline-mode-map>
|
||||
\\[outline-next-visible-heading] outline-next-visible-heading move by visible headings
|
||||
\\[outline-previous-visible-heading] outline-previous-visible-heading
|
||||
\\[outline-forward-same-level] outline-forward-same-level similar but skip subheadings
|
||||
\\[outline-backward-same-level] outline-backward-same-level
|
||||
\\[outline-up-heading] outline-up-heading move from subheading to heading
|
||||
|
||||
\\[hide-body] make all text invisible (not headings).
|
||||
\\[show-all] make everything in buffer visible.
|
||||
\\[hide-sublevels] make only the first N levels of headers visible.
|
||||
|
||||
The remaining commands are used when point is on a heading line.
|
||||
They apply to some of the body or subheadings of that heading.
|
||||
\\[hide-subtree] hide-subtree make body and subheadings invisible.
|
||||
\\[show-subtree] show-subtree make body and subheadings visible.
|
||||
\\[show-children] show-children make direct subheadings visible.
|
||||
No effect on body, or subheadings 2 or more levels down.
|
||||
With arg N, affects subheadings N levels down.
|
||||
\\[hide-entry] make immediately following body invisible.
|
||||
\\[show-entry] make it visible.
|
||||
\\[hide-leaves] make body under heading and under its subheadings invisible.
|
||||
The subheadings remain visible.
|
||||
\\[show-branches] make all subheadings at all levels visible.
|
||||
\\{outline-mode-map}
|
||||
The commands `outline-hide-subtree', `outline-show-subtree',
|
||||
`outline-show-children', `outline-hide-entry',
|
||||
`outline-show-entry', `outline-hide-leaves', and `outline-show-branches'
|
||||
are used when point is on a heading line.
|
||||
|
||||
The variable `outline-regexp' can be changed to control what is a heading.
|
||||
A line is a heading if `outline-regexp' matches something at the
|
||||
|
@ -340,7 +287,7 @@ Turning on outline mode calls the value of `text-mode-hook' and then of
|
|||
'(outline-font-lock-keywords t nil nil backward-paragraph))
|
||||
(setq imenu-generic-expression
|
||||
(list (list nil (concat "^\\(?:" outline-regexp "\\).*$") 0)))
|
||||
(add-hook 'change-major-mode-hook 'show-all nil t))
|
||||
(add-hook 'change-major-mode-hook 'outline-show-all nil t))
|
||||
|
||||
(defcustom outline-minor-mode-prefix "\C-c@"
|
||||
"Prefix key to use for Outline commands in Outline minor mode.
|
||||
|
@ -373,7 +320,7 @@ See the command `outline-mode' for more information on this mode."
|
|||
;; Cause use of ellipses for invisible text.
|
||||
(remove-from-invisibility-spec '(outline . t))
|
||||
;; When turning off outline mode, get rid of any outline hiding.
|
||||
(show-all)))
|
||||
(outline-show-all)))
|
||||
|
||||
(defvar outline-level 'outline-level
|
||||
"Function of no args to compute a header's nesting level in an outline.
|
||||
|
@ -441,7 +388,8 @@ at the end of the buffer."
|
|||
nil 'move))
|
||||
|
||||
(defsubst outline-invisible-p (&optional pos)
|
||||
"Non-nil if the character after point is invisible."
|
||||
"Non-nil if the character after POS is invisible.
|
||||
If POS is nil, use `point' instead."
|
||||
(get-char-property (or pos (point)) 'invisible))
|
||||
|
||||
(defun outline-back-to-heading (&optional invisible-ok)
|
||||
|
@ -454,7 +402,7 @@ Only visible heading lines are considered, unless INVISIBLE-OK is non-nil."
|
|||
(while (not found)
|
||||
(or (re-search-backward (concat "^\\(?:" outline-regexp "\\)")
|
||||
nil t)
|
||||
(error "before first heading"))
|
||||
(error "Before first heading"))
|
||||
(setq found (and (or invisible-ok (not (outline-invisible-p)))
|
||||
(point)))))
|
||||
(goto-char found)
|
||||
|
@ -489,6 +437,9 @@ If INVISIBLE-OK is non-nil, an invisible heading line is ok too."
|
|||
(run-hooks 'outline-insert-heading-hook)))
|
||||
|
||||
(defun outline-invent-heading (head up)
|
||||
"Create a heading by using heading HEAD as a template.
|
||||
When UP is non-nil, the created heading will be one level above.
|
||||
Otherwise, it will be one level below."
|
||||
(save-match-data
|
||||
;; Let's try to invent one by repeating or deleting the last char.
|
||||
(let ((new-head (if up (substring head 0 -1)
|
||||
|
@ -504,7 +455,7 @@ If INVISIBLE-OK is non-nil, an invisible heading line is ok too."
|
|||
|
||||
(defun outline-promote (&optional which)
|
||||
"Promote headings higher up the tree.
|
||||
If transient-mark-mode is on, and mark is active, promote headings in
|
||||
If `transient-mark-mode' is on, and mark is active, promote headings in
|
||||
the region (from a Lisp program, pass `region' for WHICH). Otherwise:
|
||||
without prefix argument, promote current heading and all headings in the
|
||||
subtree (from a Lisp program, pass `subtree' for WHICH); with prefix
|
||||
|
@ -543,7 +494,7 @@ nil for WHICH, or do not pass any argument)."
|
|||
|
||||
(defun outline-demote (&optional which)
|
||||
"Demote headings lower down the tree.
|
||||
If transient-mark-mode is on, and mark is active, demote headings in
|
||||
If `transient-mark-mode' is on, and mark is active, demote headings in
|
||||
the region (from a Lisp program, pass `region' for WHICH). Otherwise:
|
||||
without prefix argument, demote current heading and all headings in the
|
||||
subtree (from a Lisp program, pass `subtree' for WHICH); with prefix
|
||||
|
@ -585,7 +536,7 @@ nil for WHICH, or do not pass any argument)."
|
|||
(replace-match down-head nil t)))))
|
||||
|
||||
(defun outline-head-from-level (level head &optional alist)
|
||||
"Get new heading with level LEVEL from ALIST.
|
||||
"Get new heading with level LEVEL, closest to HEAD, from ALIST.
|
||||
If there are no such entries, return nil.
|
||||
ALIST defaults to `outline-heading-alist'.
|
||||
Similar to (car (rassoc LEVEL ALIST)).
|
||||
|
@ -677,16 +628,17 @@ the match data is set appropriately."
|
|||
(move-marker ins-point (point))
|
||||
(insert (delete-and-extract-region beg end))
|
||||
(goto-char ins-point)
|
||||
(if folded (hide-subtree))
|
||||
(if folded (outline-hide-subtree))
|
||||
(move-marker ins-point nil)))
|
||||
|
||||
(defun outline-end-of-heading ()
|
||||
"Move to one char before the next `outline-heading-end-regexp'."
|
||||
(if (re-search-forward outline-heading-end-regexp nil 'move)
|
||||
(forward-char -1)))
|
||||
|
||||
(defun outline-next-visible-heading (arg)
|
||||
"Move to the next visible heading line.
|
||||
With argument, repeats or can move backward if negative.
|
||||
With ARG, repeats or can move backward if negative.
|
||||
A heading line is one that starts with a `*' (or that
|
||||
`outline-regexp' matches)."
|
||||
(interactive "p")
|
||||
|
@ -714,7 +666,7 @@ A heading line is one that starts with a `*' (or that
|
|||
|
||||
(defun outline-previous-visible-heading (arg)
|
||||
"Move to the previous heading line.
|
||||
With argument, repeats or can move forward if negative.
|
||||
With ARG, repeats or can move forward if negative.
|
||||
A heading line is one that starts with a `*' (or that
|
||||
`outline-regexp' matches)."
|
||||
(interactive "p")
|
||||
|
@ -739,7 +691,7 @@ This puts point at the start of the current subtree, and mark at the end."
|
|||
(defvar outline-isearch-open-invisible-function nil
|
||||
"Function called if `isearch' finishes in an invisible overlay.
|
||||
The function is called with the overlay as its only argument.
|
||||
If nil, `show-entry' is called to reveal the invisible text.")
|
||||
If nil, `outline-show-entry' is called to reveal the invisible text.")
|
||||
|
||||
(put 'outline 'reveal-toggle-invisible 'outline-reveal-toggle-invisible)
|
||||
(defun outline-flag-region (from to flag)
|
||||
|
@ -763,51 +715,51 @@ If FLAG is nil then text is shown, while if FLAG is t the text is hidden."
|
|||
(save-excursion
|
||||
(goto-char (overlay-start o))
|
||||
(if hidep
|
||||
;; When hiding the area again, we could just clean it up and let
|
||||
;; reveal do the rest, by simply doing:
|
||||
;; (remove-overlays (overlay-start o) (overlay-end o)
|
||||
;; 'invisible 'outline)
|
||||
;;
|
||||
;; That works fine as long as everything is in sync, but if the
|
||||
;; structure of the document is changed while revealing parts of it,
|
||||
;; the resulting behavior can be ugly. I.e. we need to make
|
||||
;; sure that we hide exactly a subtree.
|
||||
(progn
|
||||
(let ((end (overlay-end o)))
|
||||
(delete-overlay o)
|
||||
(while (progn
|
||||
(hide-subtree)
|
||||
(outline-next-visible-heading 1)
|
||||
(and (not (eobp)) (< (point) end))))))
|
||||
;; When hiding the area again, we could just clean it up and let
|
||||
;; reveal do the rest, by simply doing:
|
||||
;; (remove-overlays (overlay-start o) (overlay-end o)
|
||||
;; 'invisible 'outline)
|
||||
;;
|
||||
;; That works fine as long as everything is in sync, but if the
|
||||
;; structure of the document is changed while revealing parts of it,
|
||||
;; the resulting behavior can be ugly. I.e. we need to make
|
||||
;; sure that we hide exactly a subtree.
|
||||
(progn
|
||||
(let ((end (overlay-end o)))
|
||||
(delete-overlay o)
|
||||
(while (progn
|
||||
(outline-hide-subtree)
|
||||
(outline-next-visible-heading 1)
|
||||
(and (not (eobp)) (< (point) end))))))
|
||||
|
||||
;; When revealing, we just need to reveal sublevels. If point is
|
||||
;; inside one of the sublevels, reveal will call us again.
|
||||
;; But we need to preserve the original overlay.
|
||||
(let ((o1 (copy-overlay o)))
|
||||
(overlay-put o 'invisible nil) ;Show (most of) the text.
|
||||
(while (progn
|
||||
(show-entry)
|
||||
(show-children)
|
||||
;; Normally just the above is needed.
|
||||
;; But in odd cases, the above might fail to show anything.
|
||||
;; To avoid an infinite loop, we have to make sure that
|
||||
;; *something* gets shown.
|
||||
(and (equal (overlay-start o) (overlay-start o1))
|
||||
(< (point) (overlay-end o))
|
||||
(= 0 (forward-line 1)))))
|
||||
;; If still nothing was shown, just kill the damn thing.
|
||||
(when (equal (overlay-start o) (overlay-start o1))
|
||||
;; I've seen it happen at the end of buffer.
|
||||
(delete-overlay o1))))))
|
||||
(overlay-put o 'invisible nil) ;Show (most of) the text.
|
||||
(while (progn
|
||||
(outline-show-entry)
|
||||
(outline-show-children)
|
||||
;; Normally just the above is needed.
|
||||
;; But in odd cases, the above might fail to show anything.
|
||||
;; To avoid an infinite loop, we have to make sure that
|
||||
;; *something* gets shown.
|
||||
(and (equal (overlay-start o) (overlay-start o1))
|
||||
(< (point) (overlay-end o))
|
||||
(= 0 (forward-line 1)))))
|
||||
;; If still nothing was shown, just kill the damn thing.
|
||||
(when (equal (overlay-start o) (overlay-start o1))
|
||||
;; I've seen it happen at the end of buffer.
|
||||
(delete-overlay o1))))))
|
||||
|
||||
;; Function to be set as an outline-isearch-open-invisible' property
|
||||
;; to the overlay that makes the outline invisible (see
|
||||
;; `outline-flag-region').
|
||||
(defun outline-isearch-open-invisible (_overlay)
|
||||
;; We rely on the fact that isearch places point on the matched text.
|
||||
(show-entry))
|
||||
(outline-show-entry))
|
||||
|
||||
(defun hide-entry ()
|
||||
(defun outline-hide-entry ()
|
||||
"Hide the body directly following this heading."
|
||||
(interactive)
|
||||
(save-excursion
|
||||
|
@ -815,22 +767,31 @@ If FLAG is nil then text is shown, while if FLAG is t the text is hidden."
|
|||
(outline-end-of-heading)
|
||||
(outline-flag-region (point) (progn (outline-next-preface) (point)) t)))
|
||||
|
||||
(defun show-entry ()
|
||||
(define-obsolete-function-alias
|
||||
'hide-entry 'outline-hide-entry "25.1")
|
||||
|
||||
(defun outline-show-entry ()
|
||||
"Show the body directly following this heading.
|
||||
Show the heading too, if it is currently invisible."
|
||||
(interactive)
|
||||
(save-excursion
|
||||
(outline-back-to-heading t)
|
||||
(outline-flag-region (1- (point))
|
||||
(progn (outline-next-preface) (point)) nil)))
|
||||
(progn (outline-next-preface) (point)) nil)))
|
||||
|
||||
(defun hide-body ()
|
||||
(define-obsolete-function-alias
|
||||
'show-entry 'outline-show-entry "25.1")
|
||||
|
||||
(defun outline-hide-body ()
|
||||
"Hide all body lines in buffer, leaving all headings visible."
|
||||
(interactive)
|
||||
(hide-region-body (point-min) (point-max)))
|
||||
(outline-hide-region-body (point-min) (point-max)))
|
||||
|
||||
(defun hide-region-body (start end)
|
||||
"Hide all body lines in the region, but not headings."
|
||||
(define-obsolete-function-alias
|
||||
'hide-body 'outline-hide-body "25.1")
|
||||
|
||||
(defun outline-hide-region-body (start end)
|
||||
"Hide all body lines between START and END, but not headings."
|
||||
;; Nullify the hook to avoid repeated calls to `outline-flag-region'
|
||||
;; wasting lots of time running `lazy-lock-fontify-after-outline'
|
||||
;; and run the hook finally.
|
||||
|
@ -850,30 +811,47 @@ Show the heading too, if it is currently invisible."
|
|||
(outline-end-of-heading))))))
|
||||
(run-hooks 'outline-view-change-hook))
|
||||
|
||||
(defun show-all ()
|
||||
(define-obsolete-function-alias
|
||||
'hide-region-body 'outline-hide-region-body "25.1")
|
||||
|
||||
(defun outline-show-all ()
|
||||
"Show all of the text in the buffer."
|
||||
(interactive)
|
||||
(outline-flag-region (point-min) (point-max) nil))
|
||||
|
||||
(defun hide-subtree ()
|
||||
(define-obsolete-function-alias
|
||||
'show-all 'outline-show-all "25.1")
|
||||
|
||||
(defun outline-hide-subtree ()
|
||||
"Hide everything after this heading at deeper levels."
|
||||
(interactive)
|
||||
(outline-flag-subtree t))
|
||||
|
||||
(defun hide-leaves ()
|
||||
(define-obsolete-function-alias
|
||||
'hide-subtree 'outline-hide-subtree "25.1")
|
||||
|
||||
(defun outline-hide-leaves ()
|
||||
"Hide the body after this heading and at deeper levels."
|
||||
(interactive)
|
||||
(save-excursion
|
||||
(outline-back-to-heading)
|
||||
;; Turned off to fix bug reported by Otto Maddox on 22 Nov 2005.
|
||||
;; (outline-end-of-heading)
|
||||
(hide-region-body (point) (progn (outline-end-of-subtree) (point)))))
|
||||
;; Turned off to fix bug reported by Otto Maddox on 22 Nov 2005.
|
||||
;; (outline-end-of-heading)
|
||||
(outline-hide-region-body
|
||||
(point)
|
||||
(progn (outline-end-of-subtree) (point)))))
|
||||
|
||||
(defun show-subtree ()
|
||||
(define-obsolete-function-alias
|
||||
'hide-leaves 'outline-hide-leaves "25.1")
|
||||
|
||||
(defun outline-show-subtree ()
|
||||
"Show everything after this heading at deeper levels."
|
||||
(interactive)
|
||||
(outline-flag-subtree nil))
|
||||
|
||||
(define-obsolete-function-alias
|
||||
'show-subtree 'outline-show-subtree "25.1")
|
||||
|
||||
(defun outline-show-heading ()
|
||||
"Show the current heading and move to its end."
|
||||
(outline-flag-region (- (point)
|
||||
|
@ -884,7 +862,7 @@ Show the heading too, if it is currently invisible."
|
|||
(progn (outline-end-of-heading) (point))
|
||||
nil))
|
||||
|
||||
(defun hide-sublevels (levels)
|
||||
(defun outline-hide-sublevels (levels)
|
||||
"Hide everything but the top LEVELS levels of headers, in whole buffer."
|
||||
(interactive (list
|
||||
(cond
|
||||
|
@ -922,14 +900,17 @@ Show the heading too, if it is currently invisible."
|
|||
(outline-flag-region (1- (point)) (point) nil))))
|
||||
(run-hooks 'outline-view-change-hook))
|
||||
|
||||
(defun hide-other ()
|
||||
(define-obsolete-function-alias
|
||||
'hide-sublevels 'outline-hide-sublevels "25.1")
|
||||
|
||||
(defun outline-hide-other ()
|
||||
"Hide everything except current body and parent and top-level headings."
|
||||
(interactive)
|
||||
(hide-sublevels 1)
|
||||
(outline-hide-sublevels 1)
|
||||
(let (outline-view-change-hook)
|
||||
(save-excursion
|
||||
(outline-back-to-heading t)
|
||||
(show-entry)
|
||||
(outline-show-entry)
|
||||
(while (condition-case nil (progn (outline-up-heading 1 t) (not (bobp)))
|
||||
(error nil))
|
||||
(outline-flag-region (1- (point))
|
||||
|
@ -937,17 +918,21 @@ Show the heading too, if it is currently invisible."
|
|||
nil))))
|
||||
(run-hooks 'outline-view-change-hook))
|
||||
|
||||
(define-obsolete-function-alias
|
||||
'hide-other 'outline-hide-other "25.1")
|
||||
|
||||
(defun outline-toggle-children ()
|
||||
"Show or hide the current subtree depending on its current state."
|
||||
(interactive)
|
||||
(save-excursion
|
||||
(outline-back-to-heading)
|
||||
(if (not (outline-invisible-p (line-end-position)))
|
||||
(hide-subtree)
|
||||
(show-children)
|
||||
(show-entry))))
|
||||
(outline-hide-subtree)
|
||||
(outline-show-children)
|
||||
(outline-show-entry))))
|
||||
|
||||
(defun outline-flag-subtree (flag)
|
||||
"Assign FLAG to the current subtree."
|
||||
(save-excursion
|
||||
(outline-back-to-heading)
|
||||
(outline-end-of-heading)
|
||||
|
@ -956,6 +941,7 @@ Show the heading too, if it is currently invisible."
|
|||
flag)))
|
||||
|
||||
(defun outline-end-of-subtree ()
|
||||
"Move to the end of the current subtree."
|
||||
(outline-back-to-heading)
|
||||
(let ((first t)
|
||||
(level (funcall outline-level)))
|
||||
|
@ -972,12 +958,15 @@ Show the heading too, if it is currently invisible."
|
|||
;; leave blank line before heading
|
||||
(forward-char -1))))))
|
||||
|
||||
(defun show-branches ()
|
||||
(defun outline-show-branches ()
|
||||
"Show all subheadings of this heading, but not their bodies."
|
||||
(interactive)
|
||||
(show-children 1000))
|
||||
(outline-show-children 1000))
|
||||
|
||||
(defun show-children (&optional level)
|
||||
(define-obsolete-function-alias
|
||||
'show-branches 'outline-show-branches "25.1")
|
||||
|
||||
(defun outline-show-children (&optional level)
|
||||
"Show all direct subheadings of this heading.
|
||||
Prefix arg LEVEL is how many levels below the current level should be shown.
|
||||
Default is enough to cause the following heading to appear."
|
||||
|
@ -1004,6 +993,9 @@ Default is enough to cause the following heading to appear."
|
|||
(if (eobp) (point-max) (1+ (point)))))))
|
||||
(run-hooks 'outline-view-change-hook))
|
||||
|
||||
(define-obsolete-function-alias
|
||||
'show-children 'outline-show-children "25.1")
|
||||
|
||||
|
||||
|
||||
(defun outline-up-heading (arg &optional invisible-ok)
|
||||
|
@ -1086,7 +1078,7 @@ If there is no such heading, return nil."
|
|||
(point)))))
|
||||
|
||||
(defun outline-headers-as-kill (beg end)
|
||||
"Save the visible outline headers in region at the start of the kill ring.
|
||||
"Save the visible outline headers between BEG and END to the kill ring.
|
||||
|
||||
Text shown between the headers isn't copied. Two newlines are
|
||||
inserted between saved headers. Yanking the result may be a
|
||||
|
|
|
@ -463,9 +463,14 @@ The type returned can be `comment', `string' or `paren'."
|
|||
((nth 8 ppss) (if (nth 4 ppss) 'comment 'string))
|
||||
((nth 1 ppss) 'paren))))
|
||||
|
||||
(defsubst python-syntax-comment-or-string-p ()
|
||||
"Return non-nil if point is inside 'comment or 'string."
|
||||
(nth 8 (syntax-ppss)))
|
||||
(defsubst python-syntax-comment-or-string-p (&optional ppss)
|
||||
"Return non-nil if PPSS is inside 'comment or 'string."
|
||||
(nth 8 (or ppss (syntax-ppss))))
|
||||
|
||||
(defsubst python-syntax-closing-paren-p ()
|
||||
"Return non-nil if char after point is a closing paren."
|
||||
(= (syntax-class (syntax-after (point)))
|
||||
(syntax-class (string-to-syntax ")"))))
|
||||
|
||||
(define-obsolete-function-alias
|
||||
'python-info-ppss-context #'python-syntax-context "24.3")
|
||||
|
@ -704,11 +709,28 @@ It makes underscores and dots word constituent chars.")
|
|||
'python-guess-indent 'python-indent-guess-indent-offset "24.3")
|
||||
|
||||
(defvar python-indent-current-level 0
|
||||
"Current indentation level `python-indent-line-function' is using.")
|
||||
"Deprecated var available for compatibility.")
|
||||
|
||||
(defvar python-indent-levels '(0)
|
||||
"Levels of indentation available for `python-indent-line-function'.
|
||||
Can also be `noindent' if automatic indentation can't be used.")
|
||||
"Deprecated var available for compatibility.")
|
||||
|
||||
(make-obsolete-variable
|
||||
'python-indent-current-level
|
||||
"The indentation API changed to avoid global state.
|
||||
The function `python-indent-calculate-levels' does not use it
|
||||
anymore. If you were defadvising it and or depended on this
|
||||
variable for indentation customizations, refactor your code to
|
||||
work on `python-indent-calculate-indentation' instead."
|
||||
"24.5")
|
||||
|
||||
(make-obsolete-variable
|
||||
'python-indent-levels
|
||||
"The indentation API changed to avoid global state.
|
||||
The function `python-indent-calculate-levels' does not use it
|
||||
anymore. If you were defadvising it and or depended on this
|
||||
variable for indentation customizations, refactor your code to
|
||||
work on `python-indent-calculate-indentation' instead."
|
||||
"24.5")
|
||||
|
||||
(defun python-indent-guess-indent-offset ()
|
||||
"Guess and set `python-indent-offset' for the current buffer."
|
||||
|
@ -748,362 +770,358 @@ Can also be `noindent' if automatic indentation can't be used.")
|
|||
python-indent-offset)))))))
|
||||
|
||||
(defun python-indent-context ()
|
||||
"Get information on indentation context.
|
||||
Context information is returned with a cons with the form:
|
||||
(STATUS . START)
|
||||
"Get information about the current indentation context.
|
||||
Context is returned in a cons with the form (STATUS . START).
|
||||
|
||||
Where status can be any of the following symbols:
|
||||
STATUS can be one of the following:
|
||||
|
||||
* after-comment: When current line might continue a comment block
|
||||
* inside-paren: If point in between (), {} or []
|
||||
* inside-string: If point is inside a string
|
||||
* after-backslash: Previous line ends in a backslash
|
||||
* after-beginning-of-block: Point is after beginning of block
|
||||
* after-line: Point is after normal line
|
||||
* dedenter-statement: Point is on a dedenter statement.
|
||||
* no-indent: Point is at beginning of buffer or other special case
|
||||
START is the buffer position where the sexp starts."
|
||||
keyword
|
||||
-------
|
||||
|
||||
:after-comment
|
||||
- Point is after a comment line.
|
||||
- START is the position of the \"#\" character.
|
||||
:inside-string
|
||||
- Point is inside string.
|
||||
- START is the position of the first quote that starts it.
|
||||
:no-indent
|
||||
- No possible indentation case matches.
|
||||
- START is always zero.
|
||||
|
||||
:inside-paren
|
||||
- Fallback case when point is inside paren.
|
||||
- START is the first non space char position *after* the open paren.
|
||||
:inside-paren-at-closing-nested-paren
|
||||
- Point is on a line that contains a nested paren closer.
|
||||
- START is the position of the open paren it closes.
|
||||
:inside-paren-at-closing-paren
|
||||
- Point is on a line that contains a paren closer.
|
||||
- START is the position of the open paren.
|
||||
:inside-paren-newline-start
|
||||
- Point is inside a paren with items starting in their own line.
|
||||
- START is the position of the open paren.
|
||||
:inside-paren-newline-start-from-block
|
||||
- Point is inside a paren with items starting in their own line
|
||||
from a block start.
|
||||
- START is the position of the open paren.
|
||||
|
||||
:after-backslash
|
||||
- Fallback case when point is after backslash.
|
||||
- START is the char after the position of the backslash.
|
||||
:after-backslash-assignment-continuation
|
||||
- Point is after a backslashed assignment.
|
||||
- START is the char after the position of the backslash.
|
||||
:after-backslash-block-continuation
|
||||
- Point is after a backslashed block continuation.
|
||||
- START is the char after the position of the backslash.
|
||||
:after-backslash-dotted-continuation
|
||||
- Point is after a backslashed dotted continuation. Previous
|
||||
line must contain a dot to align with.
|
||||
- START is the char after the position of the backslash.
|
||||
:after-backslash-first-line
|
||||
- First line following a backslashed continuation.
|
||||
- START is the char after the position of the backslash.
|
||||
|
||||
:after-block-end
|
||||
- Point is after a line containing a block ender.
|
||||
- START is the position where the ender starts.
|
||||
:after-block-start
|
||||
- Point is after a line starting a block.
|
||||
- START is the position where the block starts.
|
||||
:after-line
|
||||
- Point is after a simple line.
|
||||
- START is the position where the previous line starts.
|
||||
:at-dedenter-block-start
|
||||
- Point is on a line starting a dedenter block.
|
||||
- START is the position where the dedenter block starts."
|
||||
(save-restriction
|
||||
(widen)
|
||||
(let ((ppss (save-excursion (beginning-of-line) (syntax-ppss)))
|
||||
(start))
|
||||
(cons
|
||||
(cond
|
||||
;; Beginning of buffer
|
||||
((save-excursion
|
||||
(goto-char (line-beginning-position))
|
||||
(bobp))
|
||||
'no-indent)
|
||||
;; Comment continuation
|
||||
((save-excursion
|
||||
(when (and
|
||||
(or
|
||||
(python-info-current-line-comment-p)
|
||||
(python-info-current-line-empty-p))
|
||||
(progn
|
||||
(forward-comment -1)
|
||||
(python-info-current-line-comment-p)))
|
||||
(setq start (point))
|
||||
'after-comment)))
|
||||
;; Inside string
|
||||
((setq start (python-syntax-context 'string ppss))
|
||||
'inside-string)
|
||||
;; Inside a paren
|
||||
((setq start (python-syntax-context 'paren ppss))
|
||||
'inside-paren)
|
||||
;; After backslash
|
||||
((setq start (when (not (or (python-syntax-context 'string ppss)
|
||||
(python-syntax-context 'comment ppss)))
|
||||
(let ((line-beg-pos (line-number-at-pos)))
|
||||
(python-info-line-ends-backslash-p
|
||||
(1- line-beg-pos)))))
|
||||
'after-backslash)
|
||||
;; After beginning of block
|
||||
((setq start (save-excursion
|
||||
(when (progn
|
||||
(back-to-indentation)
|
||||
(python-util-forward-comment -1)
|
||||
(equal (char-before) ?:))
|
||||
;; Move to the first block start that's not in within
|
||||
;; a string, comment or paren and that's not a
|
||||
;; continuation line.
|
||||
(while (and (re-search-backward
|
||||
(python-rx block-start) nil t)
|
||||
(or
|
||||
(python-syntax-context-type)
|
||||
(python-info-continuation-line-p))))
|
||||
(when (looking-at (python-rx block-start))
|
||||
(point-marker)))))
|
||||
'after-beginning-of-block)
|
||||
((when (setq start (python-info-dedenter-statement-p))
|
||||
'dedenter-statement))
|
||||
;; After normal line
|
||||
((setq start (save-excursion
|
||||
(let ((ppss (save-excursion
|
||||
(beginning-of-line)
|
||||
(syntax-ppss))))
|
||||
(cond
|
||||
;; Beginning of buffer.
|
||||
((= (line-number-at-pos) 1)
|
||||
(cons :no-indent 0))
|
||||
;; Comment continuation (maybe).
|
||||
((save-excursion
|
||||
(when (and
|
||||
(or
|
||||
(python-info-current-line-comment-p)
|
||||
(python-info-current-line-empty-p))
|
||||
(forward-comment -1)
|
||||
(python-info-current-line-comment-p))
|
||||
(cons :after-comment (point)))))
|
||||
;; Inside a string.
|
||||
((let ((start (python-syntax-context 'string ppss)))
|
||||
(when start
|
||||
(cons :inside-string start))))
|
||||
;; Inside a paren.
|
||||
((let* ((start (python-syntax-context 'paren ppss))
|
||||
(starts-in-newline
|
||||
(when start
|
||||
(save-excursion
|
||||
(goto-char start)
|
||||
(forward-char)
|
||||
(not
|
||||
(= (line-number-at-pos)
|
||||
(progn
|
||||
(python-util-forward-comment)
|
||||
(line-number-at-pos))))))))
|
||||
(when start
|
||||
(cond
|
||||
;; Current line only holds the closing paren.
|
||||
((save-excursion
|
||||
(skip-syntax-forward " ")
|
||||
(when (and (python-syntax-closing-paren-p)
|
||||
(progn
|
||||
(forward-char 1)
|
||||
(not (python-syntax-context 'paren))))
|
||||
(cons :inside-paren-at-closing-paren start))))
|
||||
;; Current line only holds a closing paren for nested.
|
||||
((save-excursion
|
||||
(back-to-indentation)
|
||||
(python-syntax-closing-paren-p))
|
||||
(cons :inside-paren-at-closing-nested-paren start))
|
||||
;; This line starts from a opening block in its own line.
|
||||
((save-excursion
|
||||
(goto-char start)
|
||||
(when (and
|
||||
starts-in-newline
|
||||
(save-excursion
|
||||
(back-to-indentation)
|
||||
(looking-at (python-rx block-start))))
|
||||
(cons
|
||||
:inside-paren-newline-start-from-block start))))
|
||||
(starts-in-newline
|
||||
(cons :inside-paren-newline-start start))
|
||||
;; General case.
|
||||
(t (cons :inside-paren
|
||||
(save-excursion
|
||||
(goto-char (1+ start))
|
||||
(skip-syntax-forward "(" 1)
|
||||
(skip-syntax-forward " ")
|
||||
(point))))))))
|
||||
;; After backslash.
|
||||
((let ((start (when (not (python-syntax-comment-or-string-p ppss))
|
||||
(python-info-line-ends-backslash-p
|
||||
(1- (line-number-at-pos))))))
|
||||
(when start
|
||||
(cond
|
||||
;; Continuation of dotted expression.
|
||||
((save-excursion
|
||||
(back-to-indentation)
|
||||
(when (eq (char-after) ?\.)
|
||||
;; Move point back until it's not inside a paren.
|
||||
(while (prog2
|
||||
(forward-line -1)
|
||||
(and (not (bobp))
|
||||
(python-syntax-context 'paren))))
|
||||
(goto-char (line-end-position))
|
||||
(while (and (search-backward
|
||||
"." (line-beginning-position) t)
|
||||
(python-syntax-context-type)))
|
||||
;; Ensure previous statement has dot to align with.
|
||||
(when (and (eq (char-after) ?\.)
|
||||
(not (python-syntax-context-type)))
|
||||
(cons :after-backslash-dotted-continuation (point))))))
|
||||
;; Continuation of block definition.
|
||||
((let ((block-continuation-start
|
||||
(python-info-block-continuation-line-p)))
|
||||
(when block-continuation-start
|
||||
(save-excursion
|
||||
(goto-char block-continuation-start)
|
||||
(re-search-forward
|
||||
(python-rx block-start (* space))
|
||||
(line-end-position) t)
|
||||
(cons :after-backslash-block-continuation (point))))))
|
||||
;; Continuation of assignment.
|
||||
((let ((assignment-continuation-start
|
||||
(python-info-assignment-continuation-line-p)))
|
||||
(when assignment-continuation-start
|
||||
(save-excursion
|
||||
(goto-char assignment-continuation-start)
|
||||
(cons :after-backslash-assignment-continuation (point))))))
|
||||
;; First line after backslash continuation start.
|
||||
((save-excursion
|
||||
(goto-char start)
|
||||
(when (or (= (line-number-at-pos) 1)
|
||||
(not (python-info-beginning-of-backslash
|
||||
(1- (line-number-at-pos)))))
|
||||
(cons :after-backslash-first-line start))))
|
||||
;; General case.
|
||||
(t (cons :after-backslash start))))))
|
||||
;; After beginning of block.
|
||||
((let ((start (save-excursion
|
||||
(back-to-indentation)
|
||||
(skip-chars-backward (rx (or whitespace ?\n)))
|
||||
(python-util-forward-comment -1)
|
||||
(when (equal (char-before) ?:)
|
||||
(python-nav-beginning-of-block)))))
|
||||
(when start
|
||||
(cons :after-block-start start))))
|
||||
;; At dedenter statement.
|
||||
((let ((start (python-info-dedenter-statement-p)))
|
||||
(when start
|
||||
(cons :at-dedenter-block-start start))))
|
||||
;; After normal line.
|
||||
((let ((start (save-excursion
|
||||
(back-to-indentation)
|
||||
(skip-chars-backward " \t\n")
|
||||
(python-nav-beginning-of-statement)
|
||||
(point-marker)))
|
||||
'after-line)
|
||||
;; Do not indent
|
||||
(t 'no-indent))
|
||||
start))))
|
||||
(point))))
|
||||
(when start
|
||||
(if (save-excursion
|
||||
(python-util-forward-comment -1)
|
||||
(python-nav-beginning-of-statement)
|
||||
(looking-at (python-rx block-ender)))
|
||||
(cons :after-block-end start)
|
||||
(cons :after-line start)))))
|
||||
;; Default case: do not indent.
|
||||
(t (cons :no-indent 0))))))
|
||||
|
||||
(defun python-indent-calculate-indentation ()
|
||||
"Calculate correct indentation offset for the current line.
|
||||
Returns `noindent' if the indentation does not depend on Python syntax,
|
||||
such as in strings."
|
||||
(let* ((indentation-context (python-indent-context))
|
||||
(context-status (car indentation-context))
|
||||
(context-start (cdr indentation-context)))
|
||||
(save-restriction
|
||||
(widen)
|
||||
(save-excursion
|
||||
(pcase context-status
|
||||
(`no-indent 0)
|
||||
(`after-comment
|
||||
(goto-char context-start)
|
||||
(current-indentation))
|
||||
;; When point is after beginning of block just add one level
|
||||
;; of indentation relative to the context-start
|
||||
(`after-beginning-of-block
|
||||
(goto-char context-start)
|
||||
(+ (current-indentation) python-indent-offset))
|
||||
;; When after a simple line just use previous line
|
||||
;; indentation.
|
||||
(`after-line
|
||||
(let* ((pair (save-excursion
|
||||
(goto-char context-start)
|
||||
(cons
|
||||
(current-indentation)
|
||||
(python-info-beginning-of-block-p))))
|
||||
(context-indentation (car pair))
|
||||
;; TODO: Separate block enders into its own case.
|
||||
(adjustment
|
||||
(if (save-excursion
|
||||
(python-util-forward-comment -1)
|
||||
(python-nav-beginning-of-statement)
|
||||
(looking-at (python-rx block-ender)))
|
||||
python-indent-offset
|
||||
0)))
|
||||
(- context-indentation adjustment)))
|
||||
;; When point is on a dedenter statement, search for the
|
||||
;; opening block that corresponds to it and use its
|
||||
;; indentation. If no opening block is found just remove
|
||||
;; indentation as this is an invalid python file.
|
||||
(`dedenter-statement
|
||||
(let ((block-start-point
|
||||
(python-info-dedenter-opening-block-position)))
|
||||
(save-excursion
|
||||
(if (not block-start-point)
|
||||
0
|
||||
(goto-char block-start-point)
|
||||
(current-indentation)))))
|
||||
;; When inside of a string, do nothing. just use the current
|
||||
;; indentation. XXX: perhaps it would be a good idea to
|
||||
;; invoke standard text indentation here
|
||||
(`inside-string 'noindent)
|
||||
;; After backslash we have several possibilities.
|
||||
(`after-backslash
|
||||
(cond
|
||||
;; Check if current line is a dot continuation. For this
|
||||
;; the current line must start with a dot and previous
|
||||
;; line must contain a dot too.
|
||||
((save-excursion
|
||||
(back-to-indentation)
|
||||
(when (looking-at "\\.")
|
||||
;; If after moving one line back point is inside a paren it
|
||||
;; needs to move back until it's not anymore
|
||||
(while (prog2
|
||||
(forward-line -1)
|
||||
(and (not (bobp))
|
||||
(python-syntax-context 'paren))))
|
||||
(goto-char (line-end-position))
|
||||
(while (and (re-search-backward
|
||||
"\\." (line-beginning-position) t)
|
||||
(python-syntax-context-type)))
|
||||
(if (and (looking-at "\\.")
|
||||
(not (python-syntax-context-type)))
|
||||
;; The indentation is the same column of the
|
||||
;; first matching dot that's not inside a
|
||||
;; comment, a string or a paren
|
||||
(current-column)
|
||||
;; No dot found on previous line, just add another
|
||||
;; indentation level.
|
||||
(+ (current-indentation) python-indent-offset)))))
|
||||
;; Check if prev line is a block continuation
|
||||
((let ((block-continuation-start
|
||||
(python-info-block-continuation-line-p)))
|
||||
(when block-continuation-start
|
||||
;; If block-continuation-start is set jump to that
|
||||
;; marker and use first column after the block start
|
||||
;; as indentation value.
|
||||
(goto-char block-continuation-start)
|
||||
(re-search-forward
|
||||
(python-rx block-start (* space))
|
||||
(line-end-position) t)
|
||||
(current-column))))
|
||||
;; Check if current line is an assignment continuation
|
||||
((let ((assignment-continuation-start
|
||||
(python-info-assignment-continuation-line-p)))
|
||||
(when assignment-continuation-start
|
||||
;; If assignment-continuation is set jump to that
|
||||
;; marker and use first column after the assignment
|
||||
;; operator as indentation value.
|
||||
(goto-char assignment-continuation-start)
|
||||
(current-column))))
|
||||
(t
|
||||
(forward-line -1)
|
||||
(goto-char (python-info-beginning-of-backslash))
|
||||
(if (save-excursion
|
||||
(and
|
||||
(forward-line -1)
|
||||
(goto-char
|
||||
(or (python-info-beginning-of-backslash) (point)))
|
||||
(python-info-line-ends-backslash-p)))
|
||||
;; The two previous lines ended in a backslash so we must
|
||||
;; respect previous line indentation.
|
||||
(current-indentation)
|
||||
;; What happens here is that we are dealing with the second
|
||||
;; line of a backslash continuation, in that case we just going
|
||||
;; to add one indentation level.
|
||||
(+ (current-indentation) python-indent-offset)))))
|
||||
;; When inside a paren there's a need to handle nesting
|
||||
;; correctly
|
||||
(`inside-paren
|
||||
(cond
|
||||
;; If current line closes the outermost open paren use the
|
||||
;; current indentation of the context-start line.
|
||||
((save-excursion
|
||||
(skip-syntax-forward "\s" (line-end-position))
|
||||
(when (and (looking-at (regexp-opt '(")" "]" "}")))
|
||||
(progn
|
||||
(forward-char 1)
|
||||
(not (python-syntax-context 'paren))))
|
||||
(goto-char context-start)
|
||||
(current-indentation))))
|
||||
;; If open paren is contained on a line by itself add another
|
||||
;; indentation level, else look for the first word after the
|
||||
;; opening paren and use it's column position as indentation
|
||||
;; level.
|
||||
((let* ((content-starts-in-newline)
|
||||
(indent
|
||||
(save-excursion
|
||||
(if (setq content-starts-in-newline
|
||||
(progn
|
||||
(goto-char context-start)
|
||||
(forward-char)
|
||||
(save-restriction
|
||||
(narrow-to-region
|
||||
(line-beginning-position)
|
||||
(line-end-position))
|
||||
(python-util-forward-comment))
|
||||
(looking-at "$")))
|
||||
(+ (current-indentation) python-indent-offset)
|
||||
(current-column)))))
|
||||
;; Adjustments
|
||||
(cond
|
||||
;; If current line closes a nested open paren de-indent one
|
||||
;; level.
|
||||
((progn
|
||||
(back-to-indentation)
|
||||
(looking-at (regexp-opt '(")" "]" "}"))))
|
||||
(- indent python-indent-offset))
|
||||
;; If the line of the opening paren that wraps the current
|
||||
;; line starts a block add another level of indentation to
|
||||
;; follow new pep8 recommendation. See: http://ur1.ca/5rojx
|
||||
((save-excursion
|
||||
(when (and content-starts-in-newline
|
||||
(progn
|
||||
(goto-char context-start)
|
||||
(back-to-indentation)
|
||||
(looking-at (python-rx block-start))))
|
||||
(+ indent python-indent-offset))))
|
||||
(t indent)))))))))))
|
||||
(defun python-indent--calculate-indentation ()
|
||||
"Internal implementation of `python-indent-calculate-indentation'.
|
||||
May return an integer for the maximum possible indentation at
|
||||
current context or a list of integers. The latter case is only
|
||||
happening for :at-dedenter-block-start context since the
|
||||
possibilities can be narrowed to especific indentation points."
|
||||
(save-restriction
|
||||
(widen)
|
||||
(save-excursion
|
||||
(pcase (python-indent-context)
|
||||
(`(:no-indent . ,_) 0)
|
||||
(`(,(or :after-line
|
||||
:after-comment
|
||||
:inside-string
|
||||
:after-backslash
|
||||
:inside-paren-at-closing-paren
|
||||
:inside-paren-at-closing-nested-paren) . ,start)
|
||||
;; Copy previous indentation.
|
||||
(goto-char start)
|
||||
(current-indentation))
|
||||
(`(,(or :after-block-start
|
||||
:after-backslash-first-line
|
||||
:inside-paren-newline-start) . ,start)
|
||||
;; Add one indentation level.
|
||||
(goto-char start)
|
||||
(+ (current-indentation) python-indent-offset))
|
||||
(`(,(or :inside-paren
|
||||
:after-backslash-block-continuation
|
||||
:after-backslash-assignment-continuation
|
||||
:after-backslash-dotted-continuation) . ,start)
|
||||
;; Use the column given by the context.
|
||||
(goto-char start)
|
||||
(current-column))
|
||||
(`(:after-block-end . ,start)
|
||||
;; Subtract one indentation level.
|
||||
(goto-char start)
|
||||
(- (current-indentation) python-indent-offset))
|
||||
(`(:at-dedenter-block-start . ,_)
|
||||
;; List all possible indentation levels from opening blocks.
|
||||
(let ((opening-block-start-points
|
||||
(python-info-dedenter-opening-block-positions)))
|
||||
(if (not opening-block-start-points)
|
||||
0 ; if not found default to first column
|
||||
(mapcar (lambda (pos)
|
||||
(save-excursion
|
||||
(goto-char pos)
|
||||
(current-indentation)))
|
||||
opening-block-start-points))))
|
||||
(`(,(or :inside-paren-newline-start-from-block) . ,start)
|
||||
;; Add two indentation levels to make the suite stand out.
|
||||
(goto-char start)
|
||||
(+ (current-indentation) (* python-indent-offset 2)))))))
|
||||
|
||||
(defun python-indent--calculate-levels (indentation)
|
||||
"Calculate levels list given INDENTATION.
|
||||
Argument INDENTATION can either be an integer or a list of
|
||||
integers. Levels are returned in ascending order, and in the
|
||||
case INDENTATION is a list, this order is enforced."
|
||||
(if (listp indentation)
|
||||
(sort (copy-sequence indentation) #'<)
|
||||
(let* ((remainder (% indentation python-indent-offset))
|
||||
(steps (/ (- indentation remainder) python-indent-offset))
|
||||
(levels (mapcar (lambda (step)
|
||||
(* python-indent-offset step))
|
||||
(number-sequence steps 0 -1))))
|
||||
(reverse
|
||||
(if (not (zerop remainder))
|
||||
(cons indentation levels)
|
||||
levels)))))
|
||||
|
||||
(defun python-indent--previous-level (levels indentation)
|
||||
"Return previous level from LEVELS relative to INDENTATION."
|
||||
(let* ((levels (sort (copy-sequence levels) #'>))
|
||||
(default (car levels)))
|
||||
(catch 'return
|
||||
(dolist (level levels)
|
||||
(when (funcall #'< level indentation)
|
||||
(throw 'return level)))
|
||||
default)))
|
||||
|
||||
(defun python-indent-calculate-indentation (&optional previous)
|
||||
"Calculate indentation.
|
||||
Get indentation of PREVIOUS level when argument is non-nil.
|
||||
Return the max level of the cycle when indentation reaches the
|
||||
minimum."
|
||||
(let* ((indentation (python-indent--calculate-indentation))
|
||||
(levels (python-indent--calculate-levels indentation)))
|
||||
(if previous
|
||||
(python-indent--previous-level levels (current-indentation))
|
||||
(apply #'max levels))))
|
||||
|
||||
(defun python-indent-line (&optional previous)
|
||||
"Internal implementation of `python-indent-line-function'.
|
||||
Use the PREVIOUS level when argument is non-nil, otherwise indent
|
||||
to the maxium available level. When indentation is the minimum
|
||||
possible and PREVIOUS is non-nil, cycle back to the maximum
|
||||
level."
|
||||
(let ((follow-indentation-p
|
||||
;; Check if point is within indentation.
|
||||
(and (<= (line-beginning-position) (point))
|
||||
(>= (+ (line-beginning-position)
|
||||
(current-indentation))
|
||||
(point)))))
|
||||
(save-excursion
|
||||
(indent-line-to
|
||||
(python-indent-calculate-indentation previous))
|
||||
(python-info-dedenter-opening-block-message))
|
||||
(when follow-indentation-p
|
||||
(back-to-indentation))))
|
||||
|
||||
(defun python-indent-calculate-levels ()
|
||||
"Calculate `python-indent-levels' and reset `python-indent-current-level'."
|
||||
(if (or (python-info-continuation-line-p)
|
||||
(not (python-info-dedenter-statement-p)))
|
||||
;; XXX: This asks for a refactor. Even if point is on a
|
||||
;; dedenter statement, it could be multiline and in that case
|
||||
;; the continuation lines should be indented with normal rules.
|
||||
(let* ((indentation (python-indent-calculate-indentation)))
|
||||
(if (not (numberp indentation))
|
||||
(setq python-indent-levels indentation)
|
||||
(let* ((remainder (% indentation python-indent-offset))
|
||||
(steps (/ (- indentation remainder) python-indent-offset)))
|
||||
(setq python-indent-levels (list 0))
|
||||
(dotimes (step steps)
|
||||
(push (* python-indent-offset (1+ step)) python-indent-levels))
|
||||
(when (not (eq 0 remainder))
|
||||
(push (+ (* python-indent-offset steps) remainder)
|
||||
python-indent-levels)))))
|
||||
(setq python-indent-levels
|
||||
(or
|
||||
(mapcar (lambda (pos)
|
||||
(save-excursion
|
||||
(goto-char pos)
|
||||
(current-indentation)))
|
||||
(python-info-dedenter-opening-block-positions))
|
||||
(list 0))))
|
||||
(when (listp python-indent-levels)
|
||||
(setq python-indent-current-level (1- (length python-indent-levels))
|
||||
python-indent-levels (nreverse python-indent-levels))))
|
||||
|
||||
(defun python-indent-toggle-levels ()
|
||||
"Toggle `python-indent-current-level' over `python-indent-levels'."
|
||||
(setq python-indent-current-level (1- python-indent-current-level))
|
||||
(when (< python-indent-current-level 0)
|
||||
(setq python-indent-current-level (1- (length python-indent-levels)))))
|
||||
|
||||
(defun python-indent-line (&optional force-toggle)
|
||||
"Internal implementation of `python-indent-line-function'.
|
||||
Uses the offset calculated in
|
||||
`python-indent-calculate-indentation' and available levels
|
||||
indicated by the variable `python-indent-levels' to set the
|
||||
current indentation.
|
||||
|
||||
When the variable `last-command' is equal to one of the symbols
|
||||
inside `python-indent-trigger-commands' or FORCE-TOGGLE is
|
||||
non-nil it cycles levels indicated in the variable
|
||||
`python-indent-levels' by setting the current level in the
|
||||
variable `python-indent-current-level'.
|
||||
|
||||
When the variable `last-command' is not equal to one of the
|
||||
symbols inside `python-indent-trigger-commands' and FORCE-TOGGLE
|
||||
is nil it calculates possible indentation levels and saves them
|
||||
in the variable `python-indent-levels'. Afterwards it sets the
|
||||
variable `python-indent-current-level' correctly so offset is
|
||||
equal to
|
||||
(nth python-indent-current-level python-indent-levels)"
|
||||
(if (and (or (and (memq this-command python-indent-trigger-commands)
|
||||
(eq last-command this-command))
|
||||
force-toggle)
|
||||
(not (equal python-indent-levels '(0))))
|
||||
(if (listp python-indent-levels)
|
||||
(python-indent-toggle-levels))
|
||||
(python-indent-calculate-levels))
|
||||
(if (eq python-indent-levels 'noindent)
|
||||
python-indent-levels
|
||||
(let* ((starting-pos (point-marker))
|
||||
(indent-ending-position
|
||||
(+ (line-beginning-position) (current-indentation)))
|
||||
(follow-indentation-p
|
||||
(or (bolp)
|
||||
(and (<= (line-beginning-position) starting-pos)
|
||||
(>= indent-ending-position starting-pos))))
|
||||
(next-indent (nth python-indent-current-level python-indent-levels)))
|
||||
(unless (= next-indent (current-indentation))
|
||||
(beginning-of-line)
|
||||
(delete-horizontal-space)
|
||||
(indent-to next-indent)
|
||||
(goto-char starting-pos))
|
||||
(and follow-indentation-p (back-to-indentation)))
|
||||
(python-info-dedenter-opening-block-message)))
|
||||
"Return possible indentation levels."
|
||||
(python-indent--calculate-levels
|
||||
(python-indent--calculate-indentation)))
|
||||
|
||||
(defun python-indent-line-function ()
|
||||
"`indent-line-function' for Python mode.
|
||||
See `python-indent-line' for details."
|
||||
(python-indent-line))
|
||||
When the variable `last-command' is equal to one of the symbols
|
||||
inside `python-indent-trigger-commands' it cycles possible
|
||||
indentation levels from right to left."
|
||||
(python-indent-line
|
||||
(and (memq this-command python-indent-trigger-commands)
|
||||
(eq last-command this-command))))
|
||||
|
||||
(defun python-indent-dedent-line ()
|
||||
"De-indent current line."
|
||||
(interactive "*")
|
||||
(when (and (not (python-syntax-comment-or-string-p))
|
||||
(<= (point) (save-excursion
|
||||
(back-to-indentation)
|
||||
(point)))
|
||||
(> (current-column) 0))
|
||||
(python-indent-line t)
|
||||
t))
|
||||
(when (and (not (bolp))
|
||||
(not (python-syntax-comment-or-string-p))
|
||||
(= (+ (line-beginning-position)
|
||||
(current-indentation))
|
||||
(point)))
|
||||
(python-indent-line t)
|
||||
t))
|
||||
|
||||
(defun python-indent-dedent-line-backspace (arg)
|
||||
"De-indent current line.
|
||||
Argument ARG is passed to `backward-delete-char-untabify' when
|
||||
point is not in between the indentation."
|
||||
(interactive "*p")
|
||||
(when (not (python-indent-dedent-line))
|
||||
(unless (python-indent-dedent-line)
|
||||
(backward-delete-char-untabify arg)))
|
||||
|
||||
(put 'python-indent-dedent-line-backspace 'delete-selection 'supersede)
|
||||
|
||||
(defun python-indent-region (start end)
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
;;; sh-script.el --- shell-script editing commands for Emacs -*- lexical-binding:t -*-
|
||||
|
||||
;; Copyright (C) 1993-1997, 1999, 2001-2015 Free Software Foundation,
|
||||
;; Inc.
|
||||
;; Copyright (C) 1993-1997, 1999, 2001-2015 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Daniel Pfeiffer <occitan@esperanto.org>
|
||||
;; Version: 2.0f
|
||||
|
@ -1599,7 +1598,6 @@ buffer indents as it currently is indented.
|
|||
|
||||
|
||||
\\[backward-delete-char-untabify] Delete backward one position, even if it was a tab.
|
||||
\\[newline-and-indent] Delete unquoted space and indent new line same as this one.
|
||||
\\[sh-end-of-command] Go to end of successive commands.
|
||||
\\[sh-beginning-of-command] Go to beginning of successive commands.
|
||||
\\[sh-set-shell] Set this buffer's shell, and maybe its magic number.
|
||||
|
@ -2501,7 +2499,8 @@ Lines containing only comments are considered empty."
|
|||
(current-column)))
|
||||
current)
|
||||
(save-excursion
|
||||
(indent-to (if (eq this-command 'newline-and-indent)
|
||||
(indent-to (if (or (eq this-command 'newline-and-indent)
|
||||
(and electric-indent-mode (eq this-command 'newline)))
|
||||
previous
|
||||
(if (< (current-column)
|
||||
(setq current (progn (back-to-indentation)
|
||||
|
|
33
lisp/subr.el
33
lisp/subr.el
|
@ -1082,7 +1082,12 @@ The return value is a positive integer."
|
|||
;;;; Extracting fields of the positions in an event.
|
||||
|
||||
(defun posnp (obj)
|
||||
"Return non-nil if OBJ appears to be a valid `posn' object."
|
||||
"Return non-nil if OBJ appears to be a valid `posn' object specifying a window.
|
||||
If OBJ is a valid `posn' object, but specifies a frame rather
|
||||
than a window, return nil."
|
||||
;; FIXME: Correct the behavior of this function so that all valid
|
||||
;; `posn' objects are recognized, after updating other code that
|
||||
;; depends on its present behavior.
|
||||
(and (windowp (car-safe obj))
|
||||
(atom (car-safe (setq obj (cdr obj)))) ;AREA-OR-POS.
|
||||
(integerp (car-safe (car-safe (setq obj (cdr obj))))) ;XOFFSET.
|
||||
|
@ -1142,24 +1147,28 @@ For a scroll-bar event, the result column is 0, and the row
|
|||
corresponds to the vertical position of the click in the scroll bar.
|
||||
POSITION should be a list of the form returned by the `event-start'
|
||||
and `event-end' functions."
|
||||
(let* ((pair (posn-x-y position))
|
||||
(window (posn-window position))
|
||||
(area (posn-area position)))
|
||||
(let* ((pair (posn-x-y position))
|
||||
(frame-or-window (posn-window position))
|
||||
(frame (if (framep frame-or-window)
|
||||
frame-or-window
|
||||
(window-frame frame-or-window)))
|
||||
(window (when (windowp frame-or-window) frame-or-window))
|
||||
(area (posn-area position)))
|
||||
(cond
|
||||
((null window)
|
||||
((null frame-or-window)
|
||||
'(0 . 0))
|
||||
((eq area 'vertical-scroll-bar)
|
||||
(cons 0 (scroll-bar-scale pair (1- (window-height window)))))
|
||||
((eq area 'horizontal-scroll-bar)
|
||||
(cons (scroll-bar-scale pair (window-width window)) 0))
|
||||
(t
|
||||
(let* ((frame (if (framep window) window (window-frame window)))
|
||||
;; FIXME: This should take line-spacing properties on
|
||||
;; newlines into account.
|
||||
(spacing (when (display-graphic-p frame)
|
||||
(or (with-current-buffer (window-buffer window)
|
||||
line-spacing)
|
||||
(frame-parameter frame 'line-spacing)))))
|
||||
;; FIXME: This should take line-spacing properties on
|
||||
;; newlines into account.
|
||||
(let* ((spacing (when (display-graphic-p frame)
|
||||
(or (with-current-buffer
|
||||
(window-buffer (frame-selected-window frame))
|
||||
line-spacing)
|
||||
(frame-parameter frame 'line-spacing)))))
|
||||
(cond ((floatp spacing)
|
||||
(setq spacing (truncate (* spacing
|
||||
(frame-char-height frame)))))
|
||||
|
|
115
lisp/tar-mode.el
115
lisp/tar-mode.el
|
@ -50,9 +50,6 @@
|
|||
;;
|
||||
;; o chmod should understand "a+x,og-w".
|
||||
;;
|
||||
;; o It's not possible to add a NEW file to a tar archive; not that
|
||||
;; important, but still...
|
||||
;;
|
||||
;; o The code is less efficient that it could be - in a lot of places, I
|
||||
;; pull a 512-character string out of the buffer and parse it, when I could
|
||||
;; be parsing it in place, not garbaging a string. Should redo that.
|
||||
|
@ -369,6 +366,80 @@ write-date, checksum, link-type, and link-name."
|
|||
string)
|
||||
(tar-parse-octal-integer string))
|
||||
|
||||
(defun tar-new-regular-file-header (filename &optional size time)
|
||||
"Return a Tar header for a regular file.
|
||||
The header will lack a proper checksum; use `tar-header-block-checksum'
|
||||
to compute one, or request `tar-header-serialize' to do that.
|
||||
|
||||
Other tar-mode facilities may also require the data-start header
|
||||
field to be set to a valid value.
|
||||
|
||||
If SIZE is not given or nil, it defaults to 0.
|
||||
If TIME is not given or nil, assume now."
|
||||
(make-tar-header
|
||||
nil
|
||||
filename
|
||||
#o644 0 0 (or size 0)
|
||||
(or time (current-time))
|
||||
nil ; checksum
|
||||
nil nil
|
||||
nil nil nil nil nil))
|
||||
|
||||
(defun tar--pad-to (pos)
|
||||
(make-string (+ pos (- (point)) (point-min)) 0))
|
||||
|
||||
(defun tar--put-at (pos val &optional fmt mask)
|
||||
(when val
|
||||
(insert (tar--pad-to pos)
|
||||
(if fmt
|
||||
(format fmt (if mask (logand mask val) val))
|
||||
val))))
|
||||
|
||||
(defun tar-header-serialize (header &optional update-checksum)
|
||||
"Return the serialization of a Tar HEADER as a string.
|
||||
This function calls `tar-header-block-check-checksum' to ensure the
|
||||
checksum is correct.
|
||||
|
||||
If UPDATE-CHECKSUM is non-nil, update HEADER with the newly-computed
|
||||
checksum before doing the check."
|
||||
(with-temp-buffer
|
||||
(set-buffer-multibyte nil)
|
||||
(let ((encoded-name
|
||||
(encode-coding-string (tar-header-name header)
|
||||
tar-file-name-coding-system)))
|
||||
(unless (< (length encoded-name) 99)
|
||||
;; FIXME: Implement it.
|
||||
(error "Long file name support is not implemented"))
|
||||
(insert encoded-name))
|
||||
(tar--put-at tar-mode-offset (tar-header-mode header) "%6o\0 " #o777777)
|
||||
(tar--put-at tar-uid-offset (tar-header-uid header) "%6o\0 " #o777777)
|
||||
(tar--put-at tar-gid-offset (tar-header-gid header) "%6o\0 " #o777777)
|
||||
(tar--put-at tar-size-offset (tar-header-size header) "%11o ")
|
||||
(insert (tar--pad-to tar-time-offset)
|
||||
(tar-octal-time (tar-header-date header))
|
||||
" ")
|
||||
;; Omit tar-header-checksum (tar-chk-offset) for now.
|
||||
(tar--put-at tar-linkp-offset (tar-header-link-type header))
|
||||
(tar--put-at tar-link-offset (tar-header-link-name header))
|
||||
(when (tar-header-magic header)
|
||||
(tar--put-at tar-magic-offset (tar-header-magic header))
|
||||
(tar--put-at tar-uname-offset (tar-header-uname header))
|
||||
(tar--put-at tar-gname-offset (tar-header-gname header))
|
||||
(tar--put-at tar-dmaj-offset (tar-header-dmaj header) "%7o\0" #o7777777)
|
||||
(tar--put-at tar-dmin-offset (tar-header-dmin header) "%7o\0" #o7777777))
|
||||
(tar--put-at 512 "")
|
||||
(let ((ck (tar-header-block-checksum (buffer-string))))
|
||||
(goto-char (+ (point-min) tar-chk-offset))
|
||||
(delete-char 8)
|
||||
(insert (format "%6o\0 " ck))
|
||||
(when update-checksum
|
||||
(setf (tar-header-checksum header) ck))
|
||||
(tar-header-block-check-checksum (buffer-string)
|
||||
(tar-header-checksum header)
|
||||
(tar-header-name header)))
|
||||
;; .
|
||||
(buffer-string)))
|
||||
|
||||
|
||||
(defun tar-header-block-checksum (string)
|
||||
"Compute and return a tar-acceptable checksum for this block."
|
||||
|
@ -547,6 +618,7 @@ MODE should be an integer which is a file mode value."
|
|||
(define-key map "p" 'tar-previous-line)
|
||||
(define-key map "\^P" 'tar-previous-line)
|
||||
(define-key map [up] 'tar-previous-line)
|
||||
(define-key map "I" 'tar-new-entry)
|
||||
(define-key map "R" 'tar-rename-entry)
|
||||
(define-key map "u" 'tar-unflag)
|
||||
(define-key map "v" 'tar-view)
|
||||
|
@ -731,10 +803,14 @@ tar-file's buffer."
|
|||
(interactive "p")
|
||||
(tar-next-line (- arg)))
|
||||
|
||||
(defun tar-current-position ()
|
||||
"Return the `tar-parse-info' index for the current line."
|
||||
(count-lines (point-min) (line-beginning-position)))
|
||||
|
||||
(defun tar-current-descriptor (&optional noerror)
|
||||
"Return the tar-descriptor of the current line, or signals an error."
|
||||
;; I wish lines had plists, like in ZMACS...
|
||||
(or (nth (count-lines (point-min) (line-beginning-position))
|
||||
(or (nth (tar-current-position)
|
||||
tar-parse-info)
|
||||
(if noerror
|
||||
nil
|
||||
|
@ -948,6 +1024,37 @@ the current tar-entry."
|
|||
(write-region start end to-file nil nil nil t)))
|
||||
(message "Copied tar entry %s to %s" name to-file)))
|
||||
|
||||
(defun tar-new-entry (filename &optional index)
|
||||
"Insert a new empty regular file before point."
|
||||
(interactive "*sFile name: ")
|
||||
(let* ((buffer (current-buffer))
|
||||
(index (or index (tar-current-position)))
|
||||
(d-list (and (not (zerop index))
|
||||
(nthcdr (+ -1 index) tar-parse-info)))
|
||||
(pos (if d-list
|
||||
(tar-header-data-end (car d-list))
|
||||
(point-min)))
|
||||
(new-descriptor
|
||||
(tar-new-regular-file-header filename)))
|
||||
;; Update the data buffer; fill the missing descriptor fields.
|
||||
(with-current-buffer tar-data-buffer
|
||||
(goto-char pos)
|
||||
(insert (tar-header-serialize new-descriptor t))
|
||||
(setf (tar-header-data-start new-descriptor)
|
||||
(copy-marker (point) nil)))
|
||||
;; Update tar-parse-info.
|
||||
(if d-list
|
||||
(setcdr d-list (cons new-descriptor (cdr d-list)))
|
||||
(setq tar-parse-info (cons new-descriptor tar-parse-info)))
|
||||
;; Update the listing buffer.
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(forward-line index)
|
||||
(let ((inhibit-read-only t))
|
||||
(insert (tar-header-block-summarize new-descriptor) ?\n)))
|
||||
;; .
|
||||
index))
|
||||
|
||||
(defun tar-flag-deleted (p &optional unflag)
|
||||
"In Tar mode, mark this sub-file to be deleted from the tar file.
|
||||
With a prefix argument, mark that many files."
|
||||
|
|
|
@ -4963,52 +4963,55 @@ The event, EV, is the mouse event."
|
|||
(artist-funcall init-fn x1 y1)
|
||||
(if (not artist-rubber-banding)
|
||||
(artist-no-rb-set-point1 x1 y1))
|
||||
(track-mouse
|
||||
(while (or (mouse-movement-p ev)
|
||||
(member 'down (event-modifiers ev)))
|
||||
(setq ev-start-pos (artist-coord-win-to-buf
|
||||
(posn-col-row (event-start ev))))
|
||||
(setq x1 (car ev-start-pos))
|
||||
(setq y1 (cdr ev-start-pos))
|
||||
(unwind-protect
|
||||
(track-mouse
|
||||
(while (or (mouse-movement-p ev)
|
||||
(member 'down (event-modifiers ev)))
|
||||
(setq ev-start-pos (artist-coord-win-to-buf
|
||||
(posn-col-row (event-start ev))))
|
||||
(setq x1 (car ev-start-pos))
|
||||
(setq y1 (cdr ev-start-pos))
|
||||
|
||||
;; Cancel previous timer
|
||||
(if timer
|
||||
(cancel-timer timer))
|
||||
;; Cancel previous timer
|
||||
(if timer
|
||||
(cancel-timer timer))
|
||||
|
||||
(if (not (eq initial-win (posn-window (event-start ev))))
|
||||
;; If we moved outside the window, do nothing
|
||||
nil
|
||||
(if (not (eq initial-win (posn-window (event-start ev))))
|
||||
;; If we moved outside the window, do nothing
|
||||
nil
|
||||
|
||||
;; Still in same window:
|
||||
;;
|
||||
;; Check if user presses or releases shift key
|
||||
(if (artist-shift-has-changed shift-state ev)
|
||||
;; Still in same window:
|
||||
;;
|
||||
;; Check if user presses or releases shift key
|
||||
(if (artist-shift-has-changed shift-state ev)
|
||||
|
||||
;; First check that the draw-how is the same as we
|
||||
;; already have. Otherwise, ignore the changed shift-state.
|
||||
(if (not (eq draw-how
|
||||
(artist-go-get-draw-how-from-symbol
|
||||
(if (not shift-state) shifted unshifted))))
|
||||
(message "Cannot switch to shifted operation")
|
||||
;; First check that the draw-how is the same as we
|
||||
;; already have. Otherwise, ignore the changed shift-state.
|
||||
(if (not (eq draw-how
|
||||
(artist-go-get-draw-how-from-symbol
|
||||
(if (not shift-state) shifted unshifted))))
|
||||
(message "Cannot switch to shifted operation")
|
||||
|
||||
;; progn is "implicit" since this is the else-part
|
||||
(setq shift-state (not shift-state))
|
||||
(setq op (if shift-state shifted unshifted))
|
||||
(setq draw-how (artist-go-get-draw-how-from-symbol op))
|
||||
(setq draw-fn (artist-go-get-draw-fn-from-symbol op))))
|
||||
;; progn is "implicit" since this is the else-part
|
||||
(setq shift-state (not shift-state))
|
||||
(setq op (if shift-state shifted unshifted))
|
||||
(setq draw-how (artist-go-get-draw-how-from-symbol op))
|
||||
(setq draw-fn (artist-go-get-draw-fn-from-symbol op))))
|
||||
|
||||
;; Draw the new shape
|
||||
(setq shape (artist-funcall draw-fn x1 y1))
|
||||
(artist-move-to-xy x1 y1)
|
||||
;; Draw the new shape
|
||||
(setq shape (artist-funcall draw-fn x1 y1))
|
||||
(artist-move-to-xy x1 y1)
|
||||
|
||||
;; Start the timer to call `draw-fn' repeatedly every
|
||||
;; `interval' second
|
||||
(if (and interval draw-fn)
|
||||
(setq timer (run-at-time interval interval draw-fn x1 y1))))
|
||||
|
||||
;; Read next event
|
||||
(setq ev (read-event))))
|
||||
;; Start the timer to call `draw-fn' repeatedly every
|
||||
;; `interval' second
|
||||
(if (and interval draw-fn)
|
||||
(setq timer (run-at-time interval interval draw-fn x1 y1))))
|
||||
|
||||
;; Read next event
|
||||
(setq ev (read-event))))
|
||||
;; Cleanup: get rid of any active timer.
|
||||
(if timer
|
||||
(cancel-timer timer)))
|
||||
;; Cancel any timers
|
||||
(if timer
|
||||
(cancel-timer timer))
|
||||
|
|
|
@ -106,17 +106,21 @@
|
|||
(defvar reftex-syntax-table nil)
|
||||
(defvar reftex-syntax-table-for-bib nil)
|
||||
|
||||
(unless reftex-syntax-table
|
||||
(defun reftex--prepare-syntax-tables ()
|
||||
(setq reftex-syntax-table (copy-syntax-table))
|
||||
(modify-syntax-entry ?\( "." reftex-syntax-table)
|
||||
(modify-syntax-entry ?\) "." reftex-syntax-table))
|
||||
(modify-syntax-entry ?\) "." reftex-syntax-table)
|
||||
|
||||
(unless reftex-syntax-table-for-bib
|
||||
(setq reftex-syntax-table-for-bib (copy-syntax-table))
|
||||
(modify-syntax-entry ?\' "." reftex-syntax-table-for-bib)
|
||||
(modify-syntax-entry ?\" "." reftex-syntax-table-for-bib)
|
||||
(modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib)
|
||||
(modify-syntax-entry ?\] "." reftex-syntax-table-for-bib))
|
||||
(modify-syntax-entry ?\] "." reftex-syntax-table-for-bib)
|
||||
(modify-syntax-entry ?\( "." reftex-syntax-table-for-bib)
|
||||
(modify-syntax-entry ?\) "." reftex-syntax-table-for-bib))
|
||||
|
||||
(unless (and reftex-syntax-table reftex-syntax-table-for-bib)
|
||||
(reftex--prepare-syntax-tables))
|
||||
|
||||
;; The following definitions are out of place, but I need them here
|
||||
;; to make the compilation of reftex-mode not complain.
|
||||
|
@ -180,15 +184,7 @@ on the menu bar.
|
|||
(put 'reftex-auto-recenter-toc 'initialized t))
|
||||
|
||||
;; Prepare the special syntax tables.
|
||||
(setq reftex-syntax-table (copy-syntax-table (syntax-table)))
|
||||
(modify-syntax-entry ?\( "." reftex-syntax-table)
|
||||
(modify-syntax-entry ?\) "." reftex-syntax-table)
|
||||
|
||||
(setq reftex-syntax-table-for-bib (copy-syntax-table))
|
||||
(modify-syntax-entry ?\' "." reftex-syntax-table-for-bib)
|
||||
(modify-syntax-entry ?\" "." reftex-syntax-table-for-bib)
|
||||
(modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib)
|
||||
(modify-syntax-entry ?\] "." reftex-syntax-table-for-bib)
|
||||
(reftex--prepare-syntax-tables)
|
||||
|
||||
(run-hooks 'reftex-mode-hook))
|
||||
;; Mode was turned off
|
||||
|
|
19
m4/time_h.m4
19
m4/time_h.m4
|
@ -2,7 +2,7 @@
|
|||
|
||||
# Copyright (C) 2000-2001, 2003-2007, 2009-2015 Free Software Foundation, Inc.
|
||||
|
||||
# serial 8
|
||||
# serial 9
|
||||
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -26,7 +26,7 @@ AC_DEFUN([gl_HEADER_TIME_H_BODY],
|
|||
])
|
||||
|
||||
dnl Check whether 'struct timespec' is declared
|
||||
dnl in time.h, sys/time.h, or pthread.h.
|
||||
dnl in time.h, sys/time.h, pthread.h, or unistd.h.
|
||||
|
||||
AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC],
|
||||
[
|
||||
|
@ -44,6 +44,7 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC],
|
|||
TIME_H_DEFINES_STRUCT_TIMESPEC=0
|
||||
SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0
|
||||
PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0
|
||||
UNISTD_H_DEFINES_STRUCT_TIMESPEC=0
|
||||
if test $gl_cv_sys_struct_timespec_in_time_h = yes; then
|
||||
TIME_H_DEFINES_STRUCT_TIMESPEC=1
|
||||
else
|
||||
|
@ -70,12 +71,26 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC],
|
|||
[gl_cv_sys_struct_timespec_in_pthread_h=no])])
|
||||
if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then
|
||||
PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1
|
||||
else
|
||||
AC_CACHE_CHECK([for struct timespec in <unistd.h>],
|
||||
[gl_cv_sys_struct_timespec_in_unistd_h],
|
||||
[AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[#include <unistd.h>
|
||||
]],
|
||||
[[static struct timespec x; x.tv_sec = x.tv_nsec;]])],
|
||||
[gl_cv_sys_struct_timespec_in_unistd_h=yes],
|
||||
[gl_cv_sys_struct_timespec_in_unistd_h=no])])
|
||||
if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then
|
||||
UNISTD_H_DEFINES_STRUCT_TIMESPEC=1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC])
|
||||
AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC])
|
||||
AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC])
|
||||
AC_SUBST([UNISTD_H_DEFINES_STRUCT_TIMESPEC])
|
||||
])
|
||||
|
||||
AC_DEFUN([gl_TIME_MODULE_INDICATOR],
|
||||
|
|
140
src/ChangeLog
140
src/ChangeLog
|
@ -1,3 +1,143 @@
|
|||
2015-01-31 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* coding.c (raw_text_coding_system_p): New function.
|
||||
|
||||
* keyboard.c (read_decoded_event_from_main_queue): Use it when the
|
||||
keyboard coding-system is 'raw-text'. (Bug#19532)
|
||||
|
||||
* coding.h (raw_text_coding_system_p): Add prototype.
|
||||
|
||||
2015-01-31 Andreas Schwab <schwab@linux-m68k.org>
|
||||
|
||||
* Makefile.in (gl-stamp): Generate globals.h through the use of
|
||||
move-if-change.
|
||||
(globals.h): Replace with empty command.
|
||||
|
||||
2015-01-31 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* keyboard.c (kbd_buffer_store_event_hold): Ignore FOCUS_OUT_EVENT
|
||||
and ICONIFY_EVENT for the purposes of breaking while-no-input
|
||||
loops. (Bug#19547)
|
||||
|
||||
* dired.c (read_dirent): Correct the "MSDOS hacks" hack: the
|
||||
special code for errno = ENOENT or EACCES is needed for WINDOWSNT,
|
||||
not for MSDOS.
|
||||
|
||||
2015-01-31 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Simplify read_dirent's MSDOS hacks
|
||||
* dired.c (read_dirent): Simplify by removing the need for the
|
||||
DIR_ENTRY argument. All callers changed. This separates the
|
||||
MS-DOS idiosyncrasies better from the rest of the code.
|
||||
|
||||
2015-01-30 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* dired.c (read_dirent): Accept an additional argument
|
||||
FIRST_ENTRY. If readdir fails with ENOENT or EACCES the first
|
||||
time it is called, report the error as if it happened in
|
||||
open_directory.
|
||||
(directory_files_internal, file_name_completion): Adjust callers
|
||||
or read_dirent.
|
||||
|
||||
2015-01-30 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Refactor calls to opendir for simplicity
|
||||
* dired.c (open_directory): Accept Lisp_Object, not char *, for
|
||||
dirname. Signal an error if the open fails. All callers changed.
|
||||
|
||||
2015-01-29 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Report readdir failures
|
||||
Previously, on non-MS-Windows platforms the code treated most
|
||||
readdir failures as EOF. This was incorrect, e.g., when readdir
|
||||
fails with errno == EOVERFLOW. Signal an error instead.
|
||||
* dired.c (read_dirent):
|
||||
New function, which signals an error when readdir fails.
|
||||
(directory_files_internal, file_name_completion): Use it.
|
||||
|
||||
2015-01-29 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
Use bool for boolean in w32menu.c, w32font.c, w32uniscribe.c.
|
||||
* w32uniscribe.c (uniscribe_list, uniscribe_match): Use bool where
|
||||
appropriate.
|
||||
|
||||
* w32font.c (struct font_callback_data, w32font_list_internal)
|
||||
(w32font_driver, w32font_match_internal): Use bool where appropriate.
|
||||
|
||||
* w32menu.c (x_activate_menubar, set_frame_menubar)
|
||||
(w32_dialog_show, initialize_frame_menubar, w32_menu_show)
|
||||
(is_simple_dialog): Use bool where appropriate.
|
||||
|
||||
2015-01-28 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Use bool, not int, to track face changes
|
||||
* xfaces.c (face_change): Rename from face_change_count, and
|
||||
change from int to bool. The var is now true (instead of nonzero)
|
||||
if attributes have changed; this is simpler. All uses changed.
|
||||
(Bug#19698)
|
||||
|
||||
2015-01-28 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* dired.c (directory_files_internal, file_name_completion)
|
||||
[WINDOWSNT]: Signal an error when errno is set non-zero by
|
||||
'readdir', regardless of its value.
|
||||
|
||||
* w32.c (sys_readdir): Set errno to ENOENT when the directory
|
||||
doesn't exist and to EACCES when it's not accessible to the
|
||||
current user. Set errno to zero when FindNextFile exhausts the
|
||||
directory, so that callers don't interpret that as an error and
|
||||
don't signal a file-error.
|
||||
(open_unc_volume): Set errno to ENOENT if WNetOpenEnum fails.
|
||||
|
||||
* dired.c (directory_files_internal) [WINDOWSNT]: If readdir
|
||||
returns NULL and errno is ENOTDIR, behave as if opendir failed to
|
||||
open the directory. (Bug#19701)
|
||||
|
||||
* w32.c (sys_readdir): If FindFirstFile fails because the
|
||||
directory doesn't exist, set errno to ENOTDIR.
|
||||
|
||||
2015-01-28 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* nsterm.m (drawRect:): Add block/unblock_input (Bug#19660).
|
||||
|
||||
2015-01-28 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Fix coding.c subscript error
|
||||
* coding.c (CODING_ISO_INVOKED_CHARSET):
|
||||
Avoid undefined behavior if CODING_ISO_INVOCATION returns negative.
|
||||
|
||||
2015-01-28 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* xdisp.c (produce_image_glyph): Fix display of images in R2L
|
||||
screen lines: prepend the new glyph to the ones already there
|
||||
instead of appending it.
|
||||
|
||||
* w32fns.c (w32_set_title_bar_text): New function, including
|
||||
support for titles with non-ASCII characters outside of the
|
||||
current system codepage.
|
||||
(x_set_name, x_set_title): Use it. (Bug#19590)
|
||||
|
||||
* indent.c (Fvertical_motion): Return zero if we started from ZV
|
||||
and there's an overlay after-string there. (Bug#19553)
|
||||
|
||||
* emacs.c (usage_message): Fix the description of the -nl switch.
|
||||
(Bug#19542)
|
||||
|
||||
* xdisp.c (move_it_to, try_cursor_movement): Don't use the window
|
||||
end information if the window_end_valid flag is unset.
|
||||
(try_window_id): If the call to display_line invalidated the
|
||||
window end information, give up the try_window_id optimization.
|
||||
(Bug#19511)
|
||||
|
||||
* w32fns.c (Fx_server_version, Fx_server_vendor): Doc fix.
|
||||
* xfns.c (Fx_server_version, Fx_server_vendor): Doc fix.
|
||||
|
||||
* emacs.c (syms_of_emacs) <system-configuration>: Doc fix. (Bug#19502)
|
||||
|
||||
2015-01-28 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* lisp.mk (lisp): Add cl-preloaded.
|
||||
|
||||
2015-01-27 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Use bool for boolean in xfaces.c
|
||||
|
|
|
@ -504,11 +504,17 @@ buildobj.h: Makefile
|
|||
|
||||
GLOBAL_SOURCES = $(base_obj:.o=.c) $(NS_OBJC_OBJ:.o=.m)
|
||||
|
||||
gl-stamp: $(libsrc)/make-docfile$(EXEEXT) $(GLOBAL_SOURCES)
|
||||
$(AM_V_GEN)$(libsrc)/make-docfile -d $(srcdir) -g $(obj) >$@
|
||||
AM_V_GLOBALS = $(am__v_GLOBALS_@AM_V@)
|
||||
am__v_GLOBALS_ = $(am__v_GLOBALS_@AM_DEFAULT_V@)
|
||||
am__v_GLOBALS_0 = @echo " GEN " globals.h;
|
||||
am__v_GLOBALS_1 =
|
||||
|
||||
globals.h: gl-stamp
|
||||
$(AM_V_GEN)cmp $< $@ >/dev/null || cp $< $@
|
||||
gl-stamp: $(libsrc)/make-docfile$(EXEEXT) $(GLOBAL_SOURCES)
|
||||
$(AM_V_GLOBALS)$(libsrc)/make-docfile -d $(srcdir) -g $(obj) > globals.tmp
|
||||
$(AM_V_at)$(top_srcdir)/build-aux/move-if-change globals.tmp globals.h
|
||||
$(AM_V_at)echo timestamp > $@
|
||||
|
||||
globals.h: gl-stamp; @true
|
||||
|
||||
$(ALLOBJS): globals.h
|
||||
|
||||
|
|
12
src/coding.c
12
src/coding.c
|
@ -350,7 +350,8 @@ static Lisp_Object Vbig5_coding_system;
|
|||
#define CODING_ISO_BOL(coding) \
|
||||
((coding)->spec.iso_2022.bol)
|
||||
#define CODING_ISO_INVOKED_CHARSET(coding, plane) \
|
||||
CODING_ISO_DESIGNATION ((coding), CODING_ISO_INVOCATION ((coding), (plane)))
|
||||
(CODING_ISO_INVOCATION (coding, plane) < 0 ? -1 \
|
||||
: CODING_ISO_DESIGNATION (coding, CODING_ISO_INVOCATION (coding, plane)))
|
||||
#define CODING_ISO_CMP_STATUS(coding) \
|
||||
(&(coding)->spec.iso_2022.cmp_status)
|
||||
#define CODING_ISO_EXTSEGMENT_LEN(coding) \
|
||||
|
@ -5978,6 +5979,15 @@ raw_text_coding_system (Lisp_Object coding_system)
|
|||
: AREF (raw_text_eol_type, 2));
|
||||
}
|
||||
|
||||
/* Return true if CODING corresponds to raw-text coding-system. */
|
||||
|
||||
bool
|
||||
raw_text_coding_system_p (struct coding_system *coding)
|
||||
{
|
||||
return (coding->decoder == decode_coding_raw_text
|
||||
&& coding->encoder == encode_coding_raw_text) ? true : false;
|
||||
}
|
||||
|
||||
|
||||
/* If CODING_SYSTEM doesn't specify end-of-line format, return one of
|
||||
the subsidiary that has the same eol-spec as PARENT (if it is not
|
||||
|
|
|
@ -705,6 +705,7 @@ extern Lisp_Object code_convert_string_norecord (Lisp_Object, Lisp_Object,
|
|||
extern Lisp_Object encode_file_name (Lisp_Object);
|
||||
extern Lisp_Object decode_file_name (Lisp_Object);
|
||||
extern Lisp_Object raw_text_coding_system (Lisp_Object);
|
||||
extern bool raw_text_coding_system_p (struct coding_system *);
|
||||
extern Lisp_Object coding_inherit_eol_type (Lisp_Object, Lisp_Object);
|
||||
extern Lisp_Object complement_process_encoding_system (Lisp_Object);
|
||||
|
||||
|
|
105
src/dired.c
105
src/dired.c
|
@ -66,8 +66,9 @@ dirent_namelen (struct dirent *dp)
|
|||
}
|
||||
|
||||
static DIR *
|
||||
open_directory (char const *name, int *fdp)
|
||||
open_directory (Lisp_Object dirname, int *fdp)
|
||||
{
|
||||
char *name = SSDATA (dirname);
|
||||
DIR *d;
|
||||
int fd, opendir_errno;
|
||||
|
||||
|
@ -98,8 +99,9 @@ open_directory (char const *name, int *fdp)
|
|||
|
||||
unblock_input ();
|
||||
|
||||
if (!d)
|
||||
report_file_errno ("Opening directory", dirname, opendir_errno);
|
||||
*fdp = fd;
|
||||
errno = opendir_errno;
|
||||
return d;
|
||||
}
|
||||
|
||||
|
@ -120,6 +122,35 @@ directory_files_internal_unwind (void *dh)
|
|||
unblock_input ();
|
||||
}
|
||||
|
||||
/* Return the next directory entry from DIR; DIR's name is DIRNAME.
|
||||
If there are no more directory entries, return a null pointer.
|
||||
Signal any unrecoverable errors. */
|
||||
|
||||
static struct dirent *
|
||||
read_dirent (DIR *dir, Lisp_Object dirname)
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
errno = 0;
|
||||
struct dirent *dp = readdir (dir);
|
||||
if (dp || errno == 0)
|
||||
return dp;
|
||||
if (! (errno == EAGAIN || errno == EINTR))
|
||||
{
|
||||
#ifdef WINDOWSNT
|
||||
/* The MS-Windows implementation of 'opendir' doesn't
|
||||
actually open a directory until the first call to
|
||||
'readdir'. If 'readdir' fails to open the directory, it
|
||||
sets errno to ENOENT or EACCES, see w32.c. */
|
||||
if (errno == ENOENT || errno == EACCES)
|
||||
report_file_error ("Opening directory", dirname);
|
||||
#endif
|
||||
report_file_error ("Reading directory", dirname);
|
||||
}
|
||||
QUIT;
|
||||
}
|
||||
}
|
||||
|
||||
/* Function shared by Fdirectory_files and Fdirectory_files_and_attributes.
|
||||
If not ATTRS, return a list of directory filenames;
|
||||
if ATTRS, return a list of directory filenames and their attributes.
|
||||
|
@ -130,15 +161,12 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full,
|
|||
Lisp_Object match, Lisp_Object nosort, bool attrs,
|
||||
Lisp_Object id_format)
|
||||
{
|
||||
DIR *d;
|
||||
int fd;
|
||||
ptrdiff_t directory_nbytes;
|
||||
Lisp_Object list, dirfilename, encoded_directory;
|
||||
struct re_pattern_buffer *bufp = NULL;
|
||||
bool needsep = 0;
|
||||
ptrdiff_t count = SPECPDL_INDEX ();
|
||||
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
|
||||
struct dirent *dp;
|
||||
#ifdef WINDOWSNT
|
||||
Lisp_Object w32_save = Qnil;
|
||||
#endif
|
||||
|
@ -182,9 +210,8 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full,
|
|||
/* Now *bufp is the compiled form of MATCH; don't call anything
|
||||
which might compile a new regexp until we're done with the loop! */
|
||||
|
||||
d = open_directory (SSDATA (dirfilename), &fd);
|
||||
if (d == NULL)
|
||||
report_file_error ("Opening directory", directory);
|
||||
int fd;
|
||||
DIR *d = open_directory (dirfilename, &fd);
|
||||
|
||||
/* Unfortunately, we can now invoke expand-file-name and
|
||||
file-attributes on filenames, both of which can throw, so we must
|
||||
|
@ -221,28 +248,13 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full,
|
|||
|| !IS_ANY_SEP (SREF (directory, directory_nbytes - 1)))
|
||||
needsep = 1;
|
||||
|
||||
/* Loop reading blocks until EOF or error. */
|
||||
for (;;)
|
||||
/* Loop reading directory entries. */
|
||||
for (struct dirent *dp; (dp = read_dirent (d, directory)); )
|
||||
{
|
||||
ptrdiff_t len;
|
||||
bool wanted = 0;
|
||||
Lisp_Object name, finalname;
|
||||
ptrdiff_t len = dirent_namelen (dp);
|
||||
Lisp_Object name = make_unibyte_string (dp->d_name, len);
|
||||
Lisp_Object finalname = name;
|
||||
struct gcpro gcpro1, gcpro2;
|
||||
|
||||
errno = 0;
|
||||
dp = readdir (d);
|
||||
if (!dp)
|
||||
{
|
||||
if (errno == EAGAIN || errno == EINTR)
|
||||
{
|
||||
QUIT;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
len = dirent_namelen (dp);
|
||||
name = finalname = make_unibyte_string (dp->d_name, len);
|
||||
GCPRO2 (finalname, name);
|
||||
|
||||
/* Note: DECODE_FILE can GC; it should protect its argument,
|
||||
|
@ -255,9 +267,8 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full,
|
|||
immediate_quit = 1;
|
||||
QUIT;
|
||||
|
||||
if (NILP (match)
|
||||
|| re_search (bufp, SSDATA (name), len, 0, len, 0) >= 0)
|
||||
wanted = 1;
|
||||
bool wanted = (NILP (match)
|
||||
|| re_search (bufp, SSDATA (name), len, 0, len, 0) >= 0);
|
||||
|
||||
immediate_quit = 0;
|
||||
|
||||
|
@ -446,8 +457,6 @@ static Lisp_Object
|
|||
file_name_completion (Lisp_Object file, Lisp_Object dirname, bool all_flag,
|
||||
Lisp_Object predicate)
|
||||
{
|
||||
DIR *d;
|
||||
int fd;
|
||||
ptrdiff_t bestmatchsize = 0;
|
||||
int matchcount = 0;
|
||||
/* If ALL_FLAG is 1, BESTMATCH is the list of all matches, decoded.
|
||||
|
@ -481,37 +490,17 @@ file_name_completion (Lisp_Object file, Lisp_Object dirname, bool all_flag,
|
|||
work with decoded file names, but we still do some filtering based
|
||||
on the encoded file name. */
|
||||
encoded_file = ENCODE_FILE (file);
|
||||
|
||||
encoded_dir = ENCODE_FILE (Fdirectory_file_name (dirname));
|
||||
|
||||
d = open_directory (SSDATA (encoded_dir), &fd);
|
||||
if (!d)
|
||||
report_file_error ("Opening directory", dirname);
|
||||
|
||||
int fd;
|
||||
DIR *d = open_directory (encoded_dir, &fd);
|
||||
record_unwind_protect_ptr (directory_files_internal_unwind, d);
|
||||
|
||||
/* Loop reading blocks */
|
||||
/* (att3b compiler bug requires do a null comparison this way) */
|
||||
while (1)
|
||||
/* Loop reading directory entries. */
|
||||
for (struct dirent *dp; (dp = read_dirent (d, dirname)); )
|
||||
{
|
||||
struct dirent *dp;
|
||||
ptrdiff_t len;
|
||||
ptrdiff_t len = dirent_namelen (dp);
|
||||
bool canexclude = 0;
|
||||
|
||||
errno = 0;
|
||||
dp = readdir (d);
|
||||
if (!dp)
|
||||
{
|
||||
if (errno == EAGAIN || errno == EINTR)
|
||||
{
|
||||
QUIT;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
len = dirent_namelen (dp);
|
||||
|
||||
QUIT;
|
||||
if (len < SCHARS (encoded_file)
|
||||
|| (scmp (dp->d_name, SSDATA (encoded_file),
|
||||
|
|
|
@ -1860,10 +1860,10 @@ GLYPH_CODE_P (Lisp_Object gc)
|
|||
: TYPE_MAXIMUM (EMACS_INT)))));
|
||||
}
|
||||
|
||||
/* Non-zero means face attributes have been changed since the last
|
||||
/* True means face attributes have been changed since the last
|
||||
redisplay. Used in redisplay_internal. */
|
||||
|
||||
extern int face_change_count;
|
||||
extern bool face_change;
|
||||
|
||||
/* For reordering of bidirectional text. */
|
||||
|
||||
|
|
|
@ -234,7 +234,7 @@ Initialization options:\n\
|
|||
"\
|
||||
--no-desktop do not load a saved desktop\n\
|
||||
--no-init-file, -q load neither ~/.emacs nor default.el\n\
|
||||
--no-shared-memory, -nl do not use shared memory\n\
|
||||
--no-loadup, -nl do not load loadup.el into bare Emacs\n\
|
||||
--no-site-file do not load site-start.el\n\
|
||||
--no-site-lisp, -nsl do not add site-lisp directories to load-path\n\
|
||||
--no-splash do not display a splash screen on startup\n\
|
||||
|
@ -2398,9 +2398,7 @@ hpux, irix, usg-unix-v) indicates some sort of Unix system. */);
|
|||
/* See configure.ac (and config.nt) for the possible SYSTEM_TYPEs. */
|
||||
|
||||
DEFVAR_LISP ("system-configuration", Vsystem_configuration,
|
||||
doc: /* Value is string indicating configuration Emacs was built for.
|
||||
On MS-Windows, the value reflects the OS flavor and version on which
|
||||
Emacs is running. */);
|
||||
doc: /* Value is string indicating configuration Emacs was built for. */);
|
||||
Vsystem_configuration = build_string (EMACS_CONFIGURATION);
|
||||
|
||||
DEFVAR_LISP ("system-configuration-options", Vsystem_configuration_options,
|
||||
|
|
|
@ -3632,7 +3632,7 @@ x_set_font_backend (struct frame *f, Lisp_Object new_value, Lisp_Object old_valu
|
|||
|
||||
XSETFRAME (frame, f);
|
||||
x_set_font (f, Fframe_parameter (frame, Qfont), Qnil);
|
||||
++face_change_count;
|
||||
face_change = true;
|
||||
windows_or_buffers_changed = 18;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2137,10 +2137,15 @@ whether or not it is currently displayed in some window. */)
|
|||
if (nlines > 1)
|
||||
move_it_by_lines (&it, min (PTRDIFF_MAX, nlines - 1));
|
||||
}
|
||||
else
|
||||
else /* it_start = ZV */
|
||||
{
|
||||
it.vpos = 0;
|
||||
move_it_by_lines (&it, min (PTRDIFF_MAX, nlines));
|
||||
/* We could have some display or overlay string at ZV,
|
||||
in which case it.vpos will be nonzero now, while
|
||||
actually we didn't move vertically at all. */
|
||||
if (IT_CHARPOS (it) == CHARPOS (pt) && CHARPOS (pt) == it_start)
|
||||
it.vpos = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/* Buffer insertion/deletion and gap motion for GNU Emacs.
|
||||
|
||||
Copyright (C) 1985-1986, 1993-1995, 1997-2015 Free Software Foundation,
|
||||
Inc.
|
||||
Copyright (C) 1985-1986, 1993-1995, 1997-2015 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
This file is part of GNU Emacs.
|
||||
|
||||
|
|
|
@ -2288,30 +2288,41 @@ read_decoded_event_from_main_queue (struct timespec *end_time,
|
|||
{ /* An encoded byte sequence, let's try to decode it. */
|
||||
struct coding_system *coding
|
||||
= TERMINAL_KEYBOARD_CODING (terminal);
|
||||
unsigned char src[MAX_ENCODED_BYTES];
|
||||
unsigned char dest[MAX_ENCODED_BYTES * MAX_MULTIBYTE_LENGTH];
|
||||
int i;
|
||||
for (i = 0; i < n; i++)
|
||||
src[i] = XINT (events[i]);
|
||||
if (meta_key != 2)
|
||||
for (i = 0; i < n; i++)
|
||||
src[i] &= ~0x80;
|
||||
coding->destination = dest;
|
||||
coding->dst_bytes = sizeof dest;
|
||||
decode_coding_c_string (coding, src, n, Qnil);
|
||||
eassert (coding->produced_char <= n);
|
||||
if (coding->produced_char == 0)
|
||||
{ /* The encoded sequence is incomplete. */
|
||||
if (n < MAX_ENCODED_BYTES) /* Avoid buffer overflow. */
|
||||
continue; /* Read on! */
|
||||
|
||||
if (raw_text_coding_system_p (coding))
|
||||
{
|
||||
int i;
|
||||
if (meta_key != 2)
|
||||
for (i = 0; i < n; i++)
|
||||
events[i] = make_number (XINT (events[i]) & ~0x80);
|
||||
}
|
||||
else
|
||||
{
|
||||
const unsigned char *p = coding->destination;
|
||||
eassert (coding->carryover_bytes == 0);
|
||||
n = 0;
|
||||
while (n < coding->produced_char)
|
||||
events[n++] = make_number (STRING_CHAR_ADVANCE (p));
|
||||
unsigned char src[MAX_ENCODED_BYTES];
|
||||
unsigned char dest[MAX_ENCODED_BYTES * MAX_MULTIBYTE_LENGTH];
|
||||
int i;
|
||||
for (i = 0; i < n; i++)
|
||||
src[i] = XINT (events[i]);
|
||||
if (meta_key != 2)
|
||||
for (i = 0; i < n; i++)
|
||||
src[i] &= ~0x80;
|
||||
coding->destination = dest;
|
||||
coding->dst_bytes = sizeof dest;
|
||||
decode_coding_c_string (coding, src, n, Qnil);
|
||||
eassert (coding->produced_char <= n);
|
||||
if (coding->produced_char == 0)
|
||||
{ /* The encoded sequence is incomplete. */
|
||||
if (n < MAX_ENCODED_BYTES) /* Avoid buffer overflow. */
|
||||
continue; /* Read on! */
|
||||
}
|
||||
else
|
||||
{
|
||||
const unsigned char *p = coding->destination;
|
||||
eassert (coding->carryover_bytes == 0);
|
||||
n = 0;
|
||||
while (n < coding->produced_char)
|
||||
events[n++] = make_number (STRING_CHAR_ADVANCE (p));
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Now `events' should hold decoded events.
|
||||
|
@ -3639,7 +3650,9 @@ kbd_buffer_store_event_hold (register struct input_event *event,
|
|||
as input, set quit-flag to cause an interrupt. */
|
||||
if (!NILP (Vthrow_on_input)
|
||||
&& event->kind != FOCUS_IN_EVENT
|
||||
&& event->kind != FOCUS_OUT_EVENT
|
||||
&& event->kind != HELP_EVENT
|
||||
&& event->kind != ICONIFY_EVENT
|
||||
&& event->kind != DEICONIFY_EVENT)
|
||||
{
|
||||
Vquit_flag = Vthrow_on_input;
|
||||
|
|
|
@ -71,6 +71,7 @@ lisp = \
|
|||
$(lispsource)/faces.elc \
|
||||
$(lispsource)/button.elc \
|
||||
$(lispsource)/startup.elc \
|
||||
$(lispsource)/emacs-lisp/cl-preloaded.elc \
|
||||
$(lispsource)/emacs-lisp/nadvice.elc \
|
||||
$(lispsource)/minibuffer.elc \
|
||||
$(lispsource)/abbrev.elc \
|
||||
|
|
|
@ -1733,7 +1733,7 @@ IT_set_frame_parameters (struct frame *f, Lisp_Object alist)
|
|||
|
||||
if (redraw)
|
||||
{
|
||||
face_change_count++; /* forces xdisp.c to recompute basic faces */
|
||||
face_change = true; /* forces xdisp.c to recompute basic faces */
|
||||
if (f == SELECTED_FRAME ())
|
||||
redraw_frame (f);
|
||||
}
|
||||
|
|
|
@ -6773,7 +6773,9 @@ - (void)drawRect: (NSRect)rect
|
|||
return;
|
||||
|
||||
ns_clear_frame_area (emacsframe, x, y, width, height);
|
||||
block_input ();
|
||||
expose_frame (emacsframe, x, y, width, height);
|
||||
unblock_input ();
|
||||
|
||||
/*
|
||||
drawRect: may be called (at least in OS X 10.5) for invisible
|
||||
|
|
46
src/w32.c
46
src/w32.c
|
@ -3433,17 +3433,51 @@ sys_readdir (DIR *dirp)
|
|||
}
|
||||
|
||||
if (dir_find_handle == INVALID_HANDLE_VALUE)
|
||||
return NULL;
|
||||
{
|
||||
/* Any changes in the value of errno here should be in sync
|
||||
with what directory_files_internal does when it calls
|
||||
readdir. */
|
||||
switch (GetLastError ())
|
||||
{
|
||||
/* Windows uses this value when FindFirstFile finds no
|
||||
files that match the wildcard. This is not supposed
|
||||
to happen, since our wildcard is "*", but just in
|
||||
case, if there's some weird empty directory with not
|
||||
even "." and ".." entries... */
|
||||
case ERROR_FILE_NOT_FOUND:
|
||||
errno = 0;
|
||||
/* FALLTHRU */
|
||||
default:
|
||||
break;
|
||||
case ERROR_ACCESS_DENIED:
|
||||
case ERROR_NETWORK_ACCESS_DENIED:
|
||||
errno = EACCES;
|
||||
break;
|
||||
case ERROR_PATH_NOT_FOUND:
|
||||
case ERROR_INVALID_DRIVE:
|
||||
case ERROR_BAD_NETPATH:
|
||||
case ERROR_BAD_NET_NAME:
|
||||
errno = ENOENT;
|
||||
break;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else if (w32_unicode_filenames)
|
||||
{
|
||||
if (!FindNextFileW (dir_find_handle, &dir_find_data_w))
|
||||
return NULL;
|
||||
{
|
||||
errno = 0;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!FindNextFileA (dir_find_handle, &dir_find_data_a))
|
||||
return NULL;
|
||||
{
|
||||
errno = 0;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* Emacs never uses this value, so don't bother making it match
|
||||
|
@ -3545,7 +3579,11 @@ open_unc_volume (const char *path)
|
|||
if (result == NO_ERROR)
|
||||
return henum;
|
||||
else
|
||||
return INVALID_HANDLE_VALUE;
|
||||
{
|
||||
/* Make sure directory_files_internal reports a sensible error. */
|
||||
errno = ENOENT;
|
||||
return INVALID_HANDLE_VALUE;
|
||||
}
|
||||
}
|
||||
|
||||
static void *
|
||||
|
|
103
src/w32fns.c
103
src/w32fns.c
|
@ -1759,6 +1759,50 @@ x_change_tool_bar_height (struct frame *f, int height)
|
|||
x_clear_under_internal_border (f);
|
||||
}
|
||||
|
||||
static void
|
||||
w32_set_title_bar_text (struct frame *f, Lisp_Object name)
|
||||
{
|
||||
if (FRAME_W32_WINDOW (f))
|
||||
{
|
||||
block_input ();
|
||||
#ifdef __CYGWIN__
|
||||
GUI_FN (SetWindowText) (FRAME_W32_WINDOW (f),
|
||||
GUI_SDATA (GUI_ENCODE_SYSTEM (name)));
|
||||
#else
|
||||
/* The frame's title many times shows the name of the file
|
||||
visited in the selected window's buffer, so it makes sense to
|
||||
support non-ASCII characters outside of the current system
|
||||
codepage in the title. */
|
||||
if (w32_unicode_filenames)
|
||||
{
|
||||
Lisp_Object encoded_title = ENCODE_UTF_8 (name);
|
||||
wchar_t *title_w;
|
||||
int tlen = pMultiByteToWideChar (CP_UTF8, 0, SSDATA (encoded_title),
|
||||
-1, NULL, 0);
|
||||
|
||||
if (tlen > 0)
|
||||
{
|
||||
/* Windows truncates the title text beyond what fits on
|
||||
a single line, so we can limit the length to some
|
||||
reasonably large value, and use alloca. */
|
||||
if (tlen > 10000)
|
||||
tlen = 10000;
|
||||
title_w = alloca ((tlen + 1) * sizeof (wchar_t));
|
||||
pMultiByteToWideChar (CP_UTF8, 0, SSDATA (encoded_title), -1,
|
||||
title_w, tlen);
|
||||
title_w[tlen] = L'\0';
|
||||
SetWindowTextW (FRAME_W32_WINDOW (f), title_w);
|
||||
}
|
||||
else /* Conversion to UTF-16 failed, so we punt. */
|
||||
SetWindowTextA (FRAME_W32_WINDOW (f),
|
||||
SSDATA (ENCODE_SYSTEM (name)));
|
||||
}
|
||||
else
|
||||
SetWindowTextA (FRAME_W32_WINDOW (f), SSDATA (ENCODE_SYSTEM (name)));
|
||||
#endif
|
||||
unblock_input ();
|
||||
}
|
||||
}
|
||||
|
||||
/* Change the name of frame F to NAME. If NAME is nil, set F's name to
|
||||
w32_id_name.
|
||||
|
@ -1812,13 +1856,7 @@ x_set_name (struct frame *f, Lisp_Object name, bool explicit)
|
|||
if (! NILP (f->title))
|
||||
name = f->title;
|
||||
|
||||
if (FRAME_W32_WINDOW (f))
|
||||
{
|
||||
block_input ();
|
||||
GUI_FN (SetWindowText) (FRAME_W32_WINDOW (f),
|
||||
GUI_SDATA (GUI_ENCODE_SYSTEM (name)));
|
||||
unblock_input ();
|
||||
}
|
||||
w32_set_title_bar_text (f, name);
|
||||
}
|
||||
|
||||
/* This function should be called when the user's lisp code has
|
||||
|
@ -1856,13 +1894,7 @@ x_set_title (struct frame *f, Lisp_Object name, Lisp_Object old_name)
|
|||
if (NILP (name))
|
||||
name = f->name;
|
||||
|
||||
if (FRAME_W32_WINDOW (f))
|
||||
{
|
||||
block_input ();
|
||||
GUI_FN (SetWindowText) (FRAME_W32_WINDOW (f),
|
||||
GUI_SDATA (GUI_ENCODE_SYSTEM (name)));
|
||||
unblock_input ();
|
||||
}
|
||||
w32_set_title_bar_text (f, name);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -4895,25 +4927,38 @@ If omitted or nil, that stands for the selected frame's display. */)
|
|||
}
|
||||
|
||||
DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0,
|
||||
doc: /* Return the "vendor ID" string of the W32 system (Microsoft).
|
||||
The optional argument DISPLAY specifies which display to ask about.
|
||||
DISPLAY should be either a frame or a display name (a string).
|
||||
doc: /* Return the "vendor ID" string of the GUI software on TERMINAL.
|
||||
|
||||
\(Labeling every distributor as a "vendor" embodies the false assumption
|
||||
that operating systems cannot be developed and distributed noncommercially.)
|
||||
|
||||
For GNU and Unix systems, this queries the X server software; for
|
||||
MS-Windows, this queries the OS.
|
||||
|
||||
The optional argument TERMINAL specifies which display to ask about.
|
||||
TERMINAL should be a terminal object, a frame or a display name (a string).
|
||||
If omitted or nil, that stands for the selected frame's display. */)
|
||||
(Lisp_Object display)
|
||||
(Lisp_Object terminal)
|
||||
{
|
||||
return build_string ("Microsoft Corp.");
|
||||
}
|
||||
|
||||
DEFUN ("x-server-version", Fx_server_version, Sx_server_version, 0, 1, 0,
|
||||
doc: /* Return the version numbers of the server of DISPLAY.
|
||||
The value is a list of three integers: the major and minor
|
||||
version numbers of the X Protocol in use, and the distributor-specific
|
||||
release number. See also the function `x-server-vendor'.
|
||||
doc: /* Return the version numbers of the GUI software on TERMINAL.
|
||||
The value is a list of three integers specifying the version of the GUI
|
||||
software in use.
|
||||
|
||||
The optional argument DISPLAY specifies which display to ask about.
|
||||
DISPLAY should be either a frame or a display name (a string).
|
||||
For GNU and Unix system, the first 2 numbers are the version of the X
|
||||
Protocol used on TERMINAL and the 3rd number is the distributor-specific
|
||||
release number. For MS-Windows, the 3 numbers report the version and
|
||||
the build number of the OS.
|
||||
|
||||
See also the function `x-server-vendor'.
|
||||
|
||||
The optional argument TERMINAL specifies which display to ask about.
|
||||
TERMINAL should be a terminal object, a frame or a display name (a string).
|
||||
If omitted or nil, that stands for the selected frame's display. */)
|
||||
(Lisp_Object display)
|
||||
(Lisp_Object terminal)
|
||||
{
|
||||
return list3i (w32_major_version, w32_minor_version, w32_build_number);
|
||||
}
|
||||
|
@ -5623,7 +5668,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
|
|||
ptrdiff_t count = SPECPDL_INDEX ();
|
||||
struct gcpro gcpro1, gcpro2, gcpro3;
|
||||
struct kboard *kb;
|
||||
int face_change_count_before = face_change_count;
|
||||
bool face_change_before = face_change;
|
||||
Lisp_Object buffer;
|
||||
struct buffer *old_buffer;
|
||||
|
||||
|
@ -5835,11 +5880,11 @@ x_create_tip_frame (struct w32_display_info *dpyinfo,
|
|||
f->can_x_set_window_size = true;
|
||||
|
||||
/* Setting attributes of faces of the tooltip frame from resources
|
||||
and similar will increment face_change_count, which leads to the
|
||||
and similar will set face_change, which leads to the
|
||||
clearing of all current matrices. Since this isn't necessary
|
||||
here, avoid it by resetting face_change_count to the value it
|
||||
here, avoid it by resetting face_change to the value it
|
||||
had before we created the tip frame. */
|
||||
face_change_count = face_change_count_before;
|
||||
face_change = face_change_before;
|
||||
|
||||
/* Discard the unwind_protect. */
|
||||
return unbind_to (count, frame);
|
||||
|
|
|
@ -95,7 +95,7 @@ struct font_callback_data
|
|||
/* The list to add matches to. */
|
||||
Lisp_Object list;
|
||||
/* Whether to match only opentype fonts. */
|
||||
int opentype_only;
|
||||
bool opentype_only;
|
||||
};
|
||||
|
||||
/* Handles the problem that EnumFontFamiliesEx will not return all
|
||||
|
@ -746,7 +746,8 @@ w32font_otf_drive (struct font *font, Lisp_Object features,
|
|||
Additional parameter opentype_only restricts the returned fonts to
|
||||
opentype fonts, which can be used with the Uniscribe backend. */
|
||||
Lisp_Object
|
||||
w32font_list_internal (struct frame *f, Lisp_Object font_spec, int opentype_only)
|
||||
w32font_list_internal (struct frame *f, Lisp_Object font_spec,
|
||||
bool opentype_only)
|
||||
{
|
||||
struct font_callback_data match_data;
|
||||
HDC dc;
|
||||
|
@ -798,7 +799,8 @@ w32font_list_internal (struct frame *f, Lisp_Object font_spec, int opentype_only
|
|||
Additional parameter opentype_only restricts the returned fonts to
|
||||
opentype fonts, which can be used with the Uniscribe backend. */
|
||||
Lisp_Object
|
||||
w32font_match_internal (struct frame *f, Lisp_Object font_spec, int opentype_only)
|
||||
w32font_match_internal (struct frame *f, Lisp_Object font_spec,
|
||||
bool opentype_only)
|
||||
{
|
||||
struct font_callback_data match_data;
|
||||
HDC dc;
|
||||
|
@ -2459,7 +2461,7 @@ w32font_filter_properties (Lisp_Object font, Lisp_Object alist)
|
|||
struct font_driver w32font_driver =
|
||||
{
|
||||
LISP_INITIALLY_ZERO, /* Qgdi */
|
||||
0, /* case insensitive */
|
||||
false, /* case insensitive */
|
||||
w32font_get_cache,
|
||||
w32font_list,
|
||||
w32font_match,
|
||||
|
|
|
@ -66,10 +66,10 @@ struct w32font_info
|
|||
Lisp_Object w32font_get_cache (struct frame *fe);
|
||||
Lisp_Object w32font_list_internal (struct frame *f,
|
||||
Lisp_Object font_spec,
|
||||
int opentype_only);
|
||||
bool opentype_only);
|
||||
Lisp_Object w32font_match_internal (struct frame *f,
|
||||
Lisp_Object font_spec,
|
||||
int opentype_only);
|
||||
bool opentype_only);
|
||||
int w32font_open_internal (struct frame *f, Lisp_Object font_entity,
|
||||
int pixel_size, Lisp_Object font_object);
|
||||
void w32font_close (struct font *font);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Heap management routines for GNU Emacs on the Microsoft Windows
|
||||
API. Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
|
||||
/* Heap management routines for GNU Emacs on the Microsoft Windows API.
|
||||
Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Emacs.
|
||||
|
||||
|
|
|
@ -103,7 +103,7 @@ void set_frame_menubar (struct frame *, bool, bool);
|
|||
#ifdef HAVE_DIALOGS
|
||||
static Lisp_Object w32_dialog_show (struct frame *, Lisp_Object, Lisp_Object, char **);
|
||||
#else
|
||||
static int is_simple_dialog (Lisp_Object);
|
||||
static bool is_simple_dialog (Lisp_Object);
|
||||
static Lisp_Object simple_dialog_show (struct frame *, Lisp_Object, Lisp_Object);
|
||||
#endif
|
||||
|
||||
|
@ -166,7 +166,7 @@ w32_popup_dialog (struct frame *f, Lisp_Object header, Lisp_Object contents)
|
|||
void
|
||||
x_activate_menubar (struct frame *f)
|
||||
{
|
||||
set_frame_menubar (f, 0, 1);
|
||||
set_frame_menubar (f, false, true);
|
||||
|
||||
/* Lock out further menubar changes while active. */
|
||||
f->output_data.w32->menubar_active = 1;
|
||||
|
@ -289,7 +289,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p)
|
|||
XSETFRAME (Vmenu_updating_frame, f);
|
||||
|
||||
if (! menubar_widget)
|
||||
deep_p = 1;
|
||||
deep_p = true;
|
||||
|
||||
if (deep_p)
|
||||
{
|
||||
|
@ -388,7 +388,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p)
|
|||
else
|
||||
first_wv->contents = wv;
|
||||
/* Don't set wv->name here; GC during the loop might relocate it. */
|
||||
wv->enabled = 1;
|
||||
wv->enabled = true;
|
||||
wv->button_type = BUTTON_TYPE_NONE;
|
||||
prev_wv = wv;
|
||||
}
|
||||
|
@ -501,7 +501,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p)
|
|||
/* Force the window size to be recomputed so that the frame's text
|
||||
area remains the same, if menubar has just been created. */
|
||||
if (old_widget == NULL)
|
||||
adjust_frame_size (f, -1, -1, 2, 0, Qmenu_bar_lines);
|
||||
adjust_frame_size (f, -1, -1, 2, false, Qmenu_bar_lines);
|
||||
}
|
||||
|
||||
unblock_input ();
|
||||
|
@ -518,7 +518,7 @@ initialize_frame_menubar (struct frame *f)
|
|||
/* This function is called before the first chance to redisplay
|
||||
the frame. It has to be, so the frame will have the right size. */
|
||||
fset_menu_bar_items (f, menu_bar_items (FRAME_MENU_BAR_ITEMS (f)));
|
||||
set_frame_menubar (f, 1, 1);
|
||||
set_frame_menubar (f, true, true);
|
||||
}
|
||||
|
||||
/* Get rid of the menu bar of frame F, and free its storage.
|
||||
|
@ -570,7 +570,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags,
|
|||
Lisp_Object *subprefix_stack
|
||||
= (Lisp_Object *) alloca (menu_items_used * word_size);
|
||||
int submenu_depth = 0;
|
||||
int first_pane;
|
||||
bool first_pane;
|
||||
|
||||
*error = NULL;
|
||||
|
||||
|
@ -590,7 +590,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags,
|
|||
wv = make_widget_value ("menu", NULL, true, Qnil);
|
||||
wv->button_type = BUTTON_TYPE_NONE;
|
||||
first_wv = wv;
|
||||
first_pane = 1;
|
||||
first_pane = true;
|
||||
|
||||
/* Loop over all panes and items, filling in the tree. */
|
||||
i = 0;
|
||||
|
@ -601,14 +601,14 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags,
|
|||
submenu_stack[submenu_depth++] = save_wv;
|
||||
save_wv = prev_wv;
|
||||
prev_wv = 0;
|
||||
first_pane = 1;
|
||||
first_pane = false;
|
||||
i++;
|
||||
}
|
||||
else if (EQ (AREF (menu_items, i), Qlambda))
|
||||
{
|
||||
prev_wv = save_wv;
|
||||
save_wv = submenu_stack[--submenu_depth];
|
||||
first_pane = 0;
|
||||
first_pane = false;
|
||||
i++;
|
||||
}
|
||||
else if (EQ (AREF (menu_items, i), Qt)
|
||||
|
@ -664,7 +664,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags,
|
|||
save_wv = wv;
|
||||
prev_wv = 0;
|
||||
}
|
||||
first_pane = 0;
|
||||
first_pane = false;
|
||||
i += MENU_ITEMS_PANE_LENGTH;
|
||||
}
|
||||
else
|
||||
|
@ -883,8 +883,9 @@ w32_dialog_show (struct frame *f, Lisp_Object title,
|
|||
|
||||
/* Number of elements seen so far, before boundary. */
|
||||
int left_count = 0;
|
||||
/* 1 means we've seen the boundary between left-hand elts and right-hand. */
|
||||
int boundary_seen = 0;
|
||||
/* true means we've seen the boundary between left-hand elts and
|
||||
right-hand. */
|
||||
bool boundary_seen = false;
|
||||
|
||||
*error = NULL;
|
||||
|
||||
|
@ -928,7 +929,7 @@ w32_dialog_show (struct frame *f, Lisp_Object title,
|
|||
{
|
||||
/* This is the boundary between left-side elts
|
||||
and right-side elts. Stop incrementing right_count. */
|
||||
boundary_seen = 1;
|
||||
boundary_seen = true;
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
|
@ -986,7 +987,7 @@ w32_dialog_show (struct frame *f, Lisp_Object title,
|
|||
/* Actually create the dialog. */
|
||||
dialog_id = widget_id_tick++;
|
||||
menu = lw_create_widget (first_wv->name, "dialog", dialog_id, first_wv,
|
||||
f->output_data.w32->widget, 1, 0,
|
||||
f->output_data.w32->widget, true, 0,
|
||||
dialog_selection_callback, 0);
|
||||
lw_modify_all_widgets (dialog_id, first_wv->contents, TRUE);
|
||||
|
||||
|
@ -1037,25 +1038,25 @@ w32_dialog_show (struct frame *f, Lisp_Object title,
|
|||
anywhere in Emacs that uses the other specific dialog choices that
|
||||
MessageBox provides. */
|
||||
|
||||
static int
|
||||
static bool
|
||||
is_simple_dialog (Lisp_Object contents)
|
||||
{
|
||||
Lisp_Object options;
|
||||
Lisp_Object name, yes, no, other;
|
||||
|
||||
if (!CONSP (contents))
|
||||
return 0;
|
||||
return false;
|
||||
options = XCDR (contents);
|
||||
|
||||
yes = build_string ("Yes");
|
||||
no = build_string ("No");
|
||||
|
||||
if (!CONSP (options))
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
name = XCAR (options);
|
||||
if (!CONSP (name))
|
||||
return 0;
|
||||
return false;
|
||||
name = XCAR (name);
|
||||
|
||||
if (!NILP (Fstring_equal (name, yes)))
|
||||
|
@ -1063,18 +1064,18 @@ is_simple_dialog (Lisp_Object contents)
|
|||
else if (!NILP (Fstring_equal (name, no)))
|
||||
other = yes;
|
||||
else
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
options = XCDR (options);
|
||||
if (!CONSP (options))
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
name = XCAR (options);
|
||||
if (!CONSP (name))
|
||||
return 0;
|
||||
return false;
|
||||
name = XCAR (name);
|
||||
if (NILP (Fstring_equal (name, other)))
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
/* Check there are no more options. */
|
||||
options = XCDR (options);
|
||||
|
|
|
@ -67,7 +67,7 @@ memq_no_quit (Lisp_Object elt, Lisp_Object list)
|
|||
static Lisp_Object
|
||||
uniscribe_list (struct frame *f, Lisp_Object font_spec)
|
||||
{
|
||||
Lisp_Object fonts = w32font_list_internal (f, font_spec, 1);
|
||||
Lisp_Object fonts = w32font_list_internal (f, font_spec, true);
|
||||
FONT_ADD_LOG ("uniscribe-list", font_spec, fonts);
|
||||
return fonts;
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ uniscribe_list (struct frame *f, Lisp_Object font_spec)
|
|||
static Lisp_Object
|
||||
uniscribe_match (struct frame *f, Lisp_Object font_spec)
|
||||
{
|
||||
Lisp_Object entity = w32font_match_internal (f, font_spec, 1);
|
||||
Lisp_Object entity = w32font_match_internal (f, font_spec, true);
|
||||
FONT_ADD_LOG ("uniscribe-match", font_spec, entity);
|
||||
return entity;
|
||||
}
|
||||
|
|
40
src/xdisp.c
40
src/xdisp.c
|
@ -2730,9 +2730,9 @@ init_iterator (struct it *it, struct window *w,
|
|||
free realized faces now because they depend on face definitions
|
||||
that might have changed. Don't free faces while there might be
|
||||
desired matrices pending which reference these faces. */
|
||||
if (face_change_count && !inhibit_free_realized_faces)
|
||||
if (face_change && !inhibit_free_realized_faces)
|
||||
{
|
||||
face_change_count = 0;
|
||||
face_change = false;
|
||||
free_all_realized_faces (Qnil);
|
||||
}
|
||||
|
||||
|
@ -9316,6 +9316,7 @@ move_it_to (struct it *it, ptrdiff_t to_charpos, int to_x, int to_y, int to_vpos
|
|||
&& it->current_x == it->last_visible_x - 1
|
||||
&& it->c != '\n'
|
||||
&& it->c != '\t'
|
||||
&& it->w->window_end_valid
|
||||
&& it->vpos < it->w->window_end_vpos)
|
||||
{
|
||||
it->continuation_lines_width += it->current_x;
|
||||
|
@ -13425,10 +13426,10 @@ redisplay_internal (void)
|
|||
last_glyphless_glyph_frame = NULL;
|
||||
last_glyphless_glyph_face_id = (1 << FACE_ID_BITS);
|
||||
|
||||
/* If face_change_count is non-zero, init_iterator will free all
|
||||
realized faces, which includes the faces referenced from current
|
||||
matrices. So, we can't reuse current matrices in this case. */
|
||||
if (face_change_count)
|
||||
/* If face_change, init_iterator will free all realized faces, which
|
||||
includes the faces referenced from current matrices. So, we
|
||||
can't reuse current matrices in this case. */
|
||||
if (face_change)
|
||||
windows_or_buffers_changed = 47;
|
||||
|
||||
if ((FRAME_TERMCAP_P (sf) || FRAME_MSDOS_P (sf))
|
||||
|
@ -15436,7 +15437,8 @@ try_cursor_movement (Lisp_Object window, struct text_pos startp, int *scroll_ste
|
|||
/* Likewise there was a check whether window_end_vpos is nil or larger
|
||||
than the window. Now window_end_vpos is int and so never nil, but
|
||||
let's leave eassert to check whether it fits in the window. */
|
||||
eassert (w->window_end_vpos < w->current_matrix->nrows);
|
||||
eassert (!w->window_end_valid
|
||||
|| w->window_end_vpos < w->current_matrix->nrows);
|
||||
|
||||
/* Handle case where text has not changed, only point, and it has
|
||||
not moved off the frame. */
|
||||
|
@ -18183,6 +18185,21 @@ try_window_id (struct window *w)
|
|||
if (f->fonts_changed)
|
||||
return -1;
|
||||
|
||||
/* The redisplay iterations in display_line above could have
|
||||
triggered font-lock, which could have done something that
|
||||
invalidates IT->w window's end-point information, on which we
|
||||
rely below. E.g., one package, which will remain unnamed, used
|
||||
to install a font-lock-fontify-region-function that called
|
||||
bury-buffer, whose side effect is to switch the buffer displayed
|
||||
by IT->w, and that predictably resets IT->w's window_end_valid
|
||||
flag, which we already tested at the entry to this function.
|
||||
Amply punish such packages/modes by giving up on this
|
||||
optimization in those cases. */
|
||||
if (!w->window_end_valid)
|
||||
{
|
||||
clear_glyph_matrix (w->desired_matrix);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Compute differences in buffer positions, y-positions etc. for
|
||||
lines reused at the bottom of the window. Compute what we can
|
||||
|
@ -25728,6 +25745,15 @@ produce_image_glyph (struct it *it)
|
|||
enum glyph_row_area area = it->area;
|
||||
|
||||
glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area];
|
||||
if (it->glyph_row->reversed_p)
|
||||
{
|
||||
struct glyph *g;
|
||||
|
||||
/* Make room for the new glyph. */
|
||||
for (g = glyph - 1; g >= it->glyph_row->glyphs[it->area]; g--)
|
||||
g[1] = *g;
|
||||
glyph = it->glyph_row->glyphs[it->area];
|
||||
}
|
||||
if (glyph < it->glyph_row->glyphs[area + 1])
|
||||
{
|
||||
glyph->charpos = CHARPOS (it->position);
|
||||
|
|
32
src/xfaces.c
32
src/xfaces.c
|
@ -313,10 +313,10 @@ static int clear_font_table_count;
|
|||
|
||||
#endif /* HAVE_WINDOW_SYSTEM */
|
||||
|
||||
/* Non-zero means face attributes have been changed since the last
|
||||
/* True means face attributes have been changed since the last
|
||||
redisplay. Used in redisplay_internal. */
|
||||
|
||||
int face_change_count;
|
||||
bool face_change;
|
||||
|
||||
/* True means don't display bold text if a face's foreground
|
||||
and background colors are the inverse of the default colors of the
|
||||
|
@ -694,7 +694,7 @@ Optional THOROUGHLY non-nil means try to free unused fonts, too. */)
|
|||
(Lisp_Object thoroughly)
|
||||
{
|
||||
clear_face_cache (!NILP (thoroughly));
|
||||
++face_change_count;
|
||||
face_change = true;
|
||||
windows_or_buffers_changed = 53;
|
||||
return Qnil;
|
||||
}
|
||||
|
@ -2530,11 +2530,11 @@ Value is a vector of face attributes. */)
|
|||
/* Changing a named face means that all realized faces depending on
|
||||
that face are invalid. Since we cannot tell which realized faces
|
||||
depend on the face, make sure they are all removed. This is done
|
||||
by incrementing face_change_count. The next call to
|
||||
init_iterator will then free realized faces. */
|
||||
by setting face_change. The next call to init_iterator will then
|
||||
free realized faces. */
|
||||
if (NILP (Fget (face, Qface_no_inherit)))
|
||||
{
|
||||
++face_change_count;
|
||||
face_change = true;
|
||||
windows_or_buffers_changed = 54;
|
||||
}
|
||||
|
||||
|
@ -2609,11 +2609,11 @@ The value is TO. */)
|
|||
/* Changing a named face means that all realized faces depending on
|
||||
that face are invalid. Since we cannot tell which realized faces
|
||||
depend on the face, make sure they are all removed. This is done
|
||||
by incrementing face_change_count. The next call to
|
||||
init_iterator will then free realized faces. */
|
||||
by setting face_change. The next call to init_iterator will then
|
||||
free realized faces. */
|
||||
if (NILP (Fget (to, Qface_no_inherit)))
|
||||
{
|
||||
++face_change_count;
|
||||
face_change = true;
|
||||
windows_or_buffers_changed = 55;
|
||||
}
|
||||
|
||||
|
@ -3107,13 +3107,13 @@ FRAME 0 means change the face on all frames, and change the default
|
|||
/* Changing a named face means that all realized faces depending on
|
||||
that face are invalid. Since we cannot tell which realized faces
|
||||
depend on the face, make sure they are all removed. This is done
|
||||
by incrementing face_change_count. The next call to
|
||||
init_iterator will then free realized faces. */
|
||||
by setting face_change. The next call to init_iterator will then
|
||||
free realized faces. */
|
||||
if (!EQ (frame, Qt)
|
||||
&& NILP (Fget (face, Qface_no_inherit))
|
||||
&& NILP (Fequal (old_value, value)))
|
||||
{
|
||||
++face_change_count;
|
||||
face_change = true;
|
||||
windows_or_buffers_changed = 56;
|
||||
}
|
||||
|
||||
|
@ -3281,12 +3281,12 @@ update_face_from_frame_parameter (struct frame *f, Lisp_Object param,
|
|||
/* Changing a named face means that all realized faces depending on
|
||||
that face are invalid. Since we cannot tell which realized faces
|
||||
depend on the face, make sure they are all removed. This is done
|
||||
by incrementing face_change_count. The next call to
|
||||
init_iterator will then free realized faces. */
|
||||
by setting face_change. The next call to init_iterator will then
|
||||
free realized faces. */
|
||||
if (!NILP (face)
|
||||
&& NILP (Fget (face, Qface_no_inherit)))
|
||||
{
|
||||
++face_change_count;
|
||||
face_change = true;
|
||||
windows_or_buffers_changed = 57;
|
||||
}
|
||||
}
|
||||
|
@ -5820,7 +5820,7 @@ is non-nil. */)
|
|||
(Lisp_Object suppress)
|
||||
{
|
||||
tty_suppress_bold_inverse_default_colors_p = !NILP (suppress);
|
||||
++face_change_count;
|
||||
face_change = true;
|
||||
return suppress;
|
||||
}
|
||||
|
||||
|
|
33
src/xfns.c
33
src/xfns.c
|
@ -3542,10 +3542,15 @@ If omitted or nil, that stands for the selected frame's display. */)
|
|||
}
|
||||
|
||||
DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0,
|
||||
doc: /* Return the "vendor ID" string of the X server of display TERMINAL.
|
||||
doc: /* Return the "vendor ID" string of the GUI software on TERMINAL.
|
||||
|
||||
\(Labeling every distributor as a "vendor" embodies the false assumption
|
||||
that operating systems cannot be developed and distributed noncommercially.)
|
||||
The optional argument TERMINAL specifies which display to ask about.
|
||||
|
||||
For GNU and Unix systems, this queries the X server software; for
|
||||
MS-Windows, this queries the OS.
|
||||
|
||||
TERMINAL should be a terminal object, a frame or a display name (a string).
|
||||
If omitted or nil, that stands for the selected frame's display. */)
|
||||
(Lisp_Object terminal)
|
||||
|
@ -3558,10 +3563,16 @@ If omitted or nil, that stands for the selected frame's display. */)
|
|||
}
|
||||
|
||||
DEFUN ("x-server-version", Fx_server_version, Sx_server_version, 0, 1, 0,
|
||||
doc: /* Return the version numbers of the X server of display TERMINAL.
|
||||
The value is a list of three integers: the major and minor
|
||||
version numbers of the X Protocol in use, and the distributor-specific release
|
||||
number. See also the function `x-server-vendor'.
|
||||
doc: /* Return the version numbers of the GUI software on TERMINAL.
|
||||
The value is a list of three integers specifying the version of the GUI
|
||||
software in use.
|
||||
|
||||
For GNU and Unix system, the first 2 numbers are the version of the X
|
||||
Protocol used on TERMINAL and the 3rd number is the distributor-specific
|
||||
release number. For MS-Windows, the 3 numbers report the version and
|
||||
the build number of the OS.
|
||||
|
||||
See also the function `x-server-vendor'.
|
||||
|
||||
The optional argument TERMINAL specifies which display to ask about.
|
||||
TERMINAL should be a terminal object, a frame or a display name (a string).
|
||||
|
@ -4921,7 +4932,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
|
|||
int width, height;
|
||||
ptrdiff_t count = SPECPDL_INDEX ();
|
||||
struct gcpro gcpro1, gcpro2, gcpro3;
|
||||
int face_change_count_before = face_change_count;
|
||||
bool face_change_before = face_change;
|
||||
Lisp_Object buffer;
|
||||
struct buffer *old_buffer;
|
||||
|
||||
|
@ -5218,11 +5229,11 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
|
|||
f->can_x_set_window_size = true;
|
||||
|
||||
/* Setting attributes of faces of the tooltip frame from resources
|
||||
and similar will increment face_change_count, which leads to the
|
||||
clearing of all current matrices. Since this isn't necessary
|
||||
here, avoid it by resetting face_change_count to the value it
|
||||
had before we created the tip frame. */
|
||||
face_change_count = face_change_count_before;
|
||||
and similar will set face_change, which leads to the clearing of
|
||||
all current matrices. Since this isn't necessary here, avoid it
|
||||
by resetting face_change to the value it had before we created
|
||||
the tip frame. */
|
||||
face_change = face_change_before;
|
||||
|
||||
/* Discard the unwind_protect. */
|
||||
return unbind_to (count, frame);
|
||||
|
|
|
@ -1,3 +1,38 @@
|
|||
2015-01-31 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* automated/eieio-tests.el (eieio-test-23-inheritance-check): Simplify.
|
||||
|
||||
2015-01-30 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* automated/core-elisp-tests.el (core-elisp-tests-3-backquote): New test.
|
||||
|
||||
2015-01-28 Fabián Ezequiel Gallina <fgallina@gnu.org>
|
||||
|
||||
* automated/python-tests.el (python-indent-pep8-1)
|
||||
(python-indent-pep8-2, python-indent-pep8-3)
|
||||
(python-indent-after-comment-1, python-indent-after-comment-2)
|
||||
(python-indent-inside-paren-1, python-indent-inside-paren-2)
|
||||
(python-indent-after-block-1, python-indent-after-block-2)
|
||||
(python-indent-after-backslash-1, python-indent-after-backslash-2)
|
||||
(python-indent-after-backslash-3, python-indent-block-enders-1)
|
||||
(python-indent-block-enders-2, python-indent-block-enders-3)
|
||||
(python-indent-block-enders-4, python-indent-block-enders-5)
|
||||
(python-indent-dedenters-1, python-indent-dedenters-2)
|
||||
(python-indent-dedenters-3, python-indent-dedenters-4)
|
||||
(python-indent-dedenters-5, python-indent-dedenters-6)
|
||||
(python-indent-dedenters-7, python-indent-dedenters-8): Fix tests.
|
||||
(python-indent-base-case, python-indent-after-block-3)
|
||||
(python-indent-after-backslash-5, python-indent-inside-paren-3)
|
||||
(python-indent-inside-paren-4, python-indent-inside-paren-5)
|
||||
(python-indent-inside-paren-6, python-indent-inside-string-1)
|
||||
(python-indent-inside-string-2, python-indent-inside-string-3)
|
||||
(python-indent-dedent-line-backspace-1): New Tests.
|
||||
|
||||
2015-01-28 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* automated/regexp-tests.el: Require regexp-opt, which is
|
||||
not preloaded --without-x.
|
||||
|
||||
2015-01-26 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* automated/cl-generic-tests.el: Try and make sure cl-lib is not
|
||||
|
@ -33,6 +68,11 @@
|
|||
* automated/cl-generic-tests.el (setf cl--generic-2): Make sure
|
||||
the setf can be used already in the body of the method.
|
||||
|
||||
2015-01-20 Jorgen Schaefer <contact@jorgenschaefer.de>
|
||||
|
||||
* automated/package-test.el (package-test-install-prioritized):
|
||||
Remove test due to unreproducible failures.
|
||||
|
||||
2015-01-20 Michal Nazarewicz <mina86@mina86.com>
|
||||
|
||||
* automated/descr-text-test.el: New file with tests for
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
;;; Code:
|
||||
|
||||
(ert-deftest core-elisp-tests ()
|
||||
(ert-deftest core-elisp-tests-1-defvar-in-let ()
|
||||
"Test some core Elisp rules."
|
||||
(with-temp-buffer
|
||||
;; Check that when defvar is run within a let-binding, the toplevel default
|
||||
|
@ -36,7 +36,7 @@
|
|||
c-e-x)
|
||||
'(1 2)))))
|
||||
|
||||
(ert-deftest core-elisp-test-window-configurations ()
|
||||
(ert-deftest core-elisp-tests-2-window-configurations ()
|
||||
"Test properties of window-configurations."
|
||||
(let ((wc (current-window-configuration)))
|
||||
(with-current-buffer (window-buffer (frame-selected-window))
|
||||
|
@ -45,5 +45,8 @@
|
|||
(set-window-configuration wc)
|
||||
(should (or (not mark-active) (mark)))))
|
||||
|
||||
(ert-deftest core-elisp-tests-3-backquote ()
|
||||
(should (eq 3 (eval ``,,'(+ 1 2)))))
|
||||
|
||||
(provide 'core-elisp-tests)
|
||||
;;; core-elisp-tests.el ends here
|
||||
|
|
|
@ -537,9 +537,8 @@ METHOD is the method that was attempting to be called."
|
|||
(should (object-of-class-p eitest-ab 'class-b))
|
||||
(should (object-of-class-p eitest-ab 'class-ab))
|
||||
(should (eq (eieio-class-parents 'class-a) nil))
|
||||
;; FIXME: eieio-class-parents now returns class objects!
|
||||
(should (equal (mapcar #'eieio-class-object (eieio-class-parents 'class-ab))
|
||||
(mapcar #'eieio-class-object '(class-a class-b))))
|
||||
(should (equal (eieio-class-parents 'class-ab)
|
||||
(mapcar #'find-class '(class-a class-b))))
|
||||
(should (same-class-p eitest-a 'class-a))
|
||||
(should (class-a-p eitest-a))
|
||||
(should (not (class-a-p eitest-ab)))
|
||||
|
|
|
@ -174,13 +174,13 @@ aliqua."
|
|||
foo = long_function_name(var_one, var_two,
|
||||
var_three, var_four)
|
||||
"
|
||||
(should (eq (car (python-indent-context)) 'no-indent))
|
||||
(should (eq (car (python-indent-context)) :no-indent))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at "foo = long_function_name(var_one, var_two,")
|
||||
(should (eq (car (python-indent-context)) 'after-line))
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at "var_three, var_four)")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren))
|
||||
(should (= (python-indent-calculate-indentation) 25))))
|
||||
|
||||
(ert-deftest python-indent-pep8-2 ()
|
||||
|
@ -192,19 +192,22 @@ def long_function_name(
|
|||
var_four):
|
||||
print (var_one)
|
||||
"
|
||||
(should (eq (car (python-indent-context)) 'no-indent))
|
||||
(should (eq (car (python-indent-context)) :no-indent))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at "def long_function_name(")
|
||||
(should (eq (car (python-indent-context)) 'after-line))
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at "var_one, var_two, var_three,")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context))
|
||||
:inside-paren-newline-start-from-block))
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(python-tests-look-at "var_four):")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context))
|
||||
:inside-paren-newline-start-from-block))
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(python-tests-look-at "print (var_one)")
|
||||
(should (eq (car (python-indent-context)) 'after-beginning-of-block))
|
||||
(should (eq (car (python-indent-context))
|
||||
:after-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))))
|
||||
|
||||
(ert-deftest python-indent-pep8-3 ()
|
||||
|
@ -215,18 +218,34 @@ foo = long_function_name(
|
|||
var_one, var_two,
|
||||
var_three, var_four)
|
||||
"
|
||||
(should (eq (car (python-indent-context)) 'no-indent))
|
||||
(should (eq (car (python-indent-context)) :no-indent))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at "foo = long_function_name(")
|
||||
(should (eq (car (python-indent-context)) 'after-line))
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at "var_one, var_two,")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "var_three, var_four)")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))))
|
||||
|
||||
(ert-deftest python-indent-base-case ()
|
||||
"Check base case does not trigger errors."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
|
||||
"
|
||||
(goto-char (point-min))
|
||||
(should (eq (car (python-indent-context)) :no-indent))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(forward-line 1)
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(forward-line 1)
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))))
|
||||
|
||||
(ert-deftest python-indent-after-comment-1 ()
|
||||
"The most simple after-comment case that shouldn't fail."
|
||||
(python-tests-with-temp-buffer
|
||||
|
@ -240,23 +259,23 @@ class Blag(object):
|
|||
# with the exception with which the first child failed.
|
||||
"
|
||||
(python-tests-look-at "# We only complete")
|
||||
(should (eq (car (python-indent-context)) 'after-line))
|
||||
(should (eq (car (python-indent-context)) :after-block-end))
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(python-tests-look-at "# terminal state")
|
||||
(should (eq (car (python-indent-context)) 'after-comment))
|
||||
(should (eq (car (python-indent-context)) :after-comment))
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(python-tests-look-at "# with the exception")
|
||||
(should (eq (car (python-indent-context)) 'after-comment))
|
||||
(should (eq (car (python-indent-context)) :after-comment))
|
||||
;; This one indents relative to previous block, even given the fact
|
||||
;; that it was under-indented.
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "# terminal state" -1)
|
||||
;; It doesn't hurt to check again.
|
||||
(should (eq (car (python-indent-context)) 'after-comment))
|
||||
(should (eq (car (python-indent-context)) :after-comment))
|
||||
(python-indent-line)
|
||||
(should (= (current-indentation) 8))
|
||||
(python-tests-look-at "# with the exception")
|
||||
(should (eq (car (python-indent-context)) 'after-comment))
|
||||
(should (eq (car (python-indent-context)) :after-comment))
|
||||
;; Now everything should be lined up.
|
||||
(should (= (python-indent-calculate-indentation) 8))))
|
||||
|
||||
|
@ -275,33 +294,33 @@ now_we_do_mess_cause_this_is_not_a_comment = 1
|
|||
# yeah, that.
|
||||
"
|
||||
(python-tests-look-at "# I don't do much")
|
||||
(should (eq (car (python-indent-context)) 'after-beginning-of-block))
|
||||
(should (eq (car (python-indent-context)) :after-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "return arg")
|
||||
;; Comment here just gets ignored, this line is not a comment so
|
||||
;; the rules won't apply here.
|
||||
(should (eq (car (python-indent-context)) 'after-beginning-of-block))
|
||||
(should (eq (car (python-indent-context)) :after-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "# This comment is badly")
|
||||
(should (eq (car (python-indent-context)) 'after-line))
|
||||
(should (eq (car (python-indent-context)) :after-block-end))
|
||||
;; The return keyword moves indentation backwards 4 spaces, but
|
||||
;; let's assume this comment was placed there because the user
|
||||
;; wanted to (manually adding spaces or whatever).
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at "# but we won't mess")
|
||||
(should (eq (car (python-indent-context)) 'after-comment))
|
||||
(should (eq (car (python-indent-context)) :after-comment))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
;; Behave the same for blank lines: potentially a comment.
|
||||
(forward-line 1)
|
||||
(should (eq (car (python-indent-context)) 'after-comment))
|
||||
(should (eq (car (python-indent-context)) :after-comment))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "now_we_do_mess")
|
||||
;; Here is where comment indentation starts to get ignored and
|
||||
;; where the user can't freely indent anymore.
|
||||
(should (eq (car (python-indent-context)) 'after-line))
|
||||
(should (eq (car (python-indent-context)) :after-block-end))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at "# yeah, that.")
|
||||
(should (eq (car (python-indent-context)) 'after-line))
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))))
|
||||
|
||||
(ert-deftest python-indent-inside-paren-1 ()
|
||||
|
@ -325,49 +344,53 @@ data = {
|
|||
}
|
||||
"
|
||||
(python-tests-look-at "data = {")
|
||||
(should (eq (car (python-indent-context)) 'after-line))
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at "'key':")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "{")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "'objlist': [")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(python-tests-look-at "{")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
|
||||
(should (= (python-indent-calculate-indentation) 12))
|
||||
(python-tests-look-at "'pk': 1,")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
|
||||
(should (= (python-indent-calculate-indentation) 16))
|
||||
(python-tests-look-at "'name': 'first',")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
|
||||
(should (= (python-indent-calculate-indentation) 16))
|
||||
(python-tests-look-at "},")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context))
|
||||
:inside-paren-at-closing-nested-paren))
|
||||
(should (= (python-indent-calculate-indentation) 12))
|
||||
(python-tests-look-at "{")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
|
||||
(should (= (python-indent-calculate-indentation) 12))
|
||||
(python-tests-look-at "'pk': 2,")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
|
||||
(should (= (python-indent-calculate-indentation) 16))
|
||||
(python-tests-look-at "'name': 'second',")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
|
||||
(should (= (python-indent-calculate-indentation) 16))
|
||||
(python-tests-look-at "}")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context))
|
||||
:inside-paren-at-closing-nested-paren))
|
||||
(should (= (python-indent-calculate-indentation) 12))
|
||||
(python-tests-look-at "]")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context))
|
||||
:inside-paren-at-closing-nested-paren))
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(python-tests-look-at "}")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context))
|
||||
:inside-paren-at-closing-nested-paren))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "}")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-at-closing-paren))
|
||||
(should (= (python-indent-calculate-indentation) 0))))
|
||||
|
||||
(ert-deftest python-indent-inside-paren-2 ()
|
||||
|
@ -384,43 +407,121 @@ data = {'key': {
|
|||
}}
|
||||
"
|
||||
(python-tests-look-at "data = {")
|
||||
(should (eq (car (python-indent-context)) 'after-line))
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at "'objlist': [")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "{'pk': 1,")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(python-tests-look-at "'name': 'first'},")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren))
|
||||
(should (= (python-indent-calculate-indentation) 9))
|
||||
(python-tests-look-at "{'pk': 2,")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(python-tests-look-at "'name': 'second'}")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren))
|
||||
(should (= (python-indent-calculate-indentation) 9))
|
||||
(python-tests-look-at "]")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context))
|
||||
:inside-paren-at-closing-nested-paren))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "}}")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context))
|
||||
:inside-paren-at-closing-nested-paren))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at "}")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-at-closing-paren))
|
||||
(should (= (python-indent-calculate-indentation) 0))))
|
||||
|
||||
(ert-deftest python-indent-inside-paren-3 ()
|
||||
"The simplest case possible."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
data = ('these',
|
||||
'are',
|
||||
'the',
|
||||
'tokens')
|
||||
"
|
||||
(python-tests-look-at "data = ('these',")
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(forward-line 1)
|
||||
(should (eq (car (python-indent-context)) :inside-paren))
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(forward-line 1)
|
||||
(should (eq (car (python-indent-context)) :inside-paren))
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(forward-line 1)
|
||||
(should (eq (car (python-indent-context)) :inside-paren))
|
||||
(should (= (python-indent-calculate-indentation) 8))))
|
||||
|
||||
(ert-deftest python-indent-inside-paren-4 ()
|
||||
"Respect indentation of first column."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
data = [ [ 'these', 'are'],
|
||||
['the', 'tokens' ] ]
|
||||
"
|
||||
(python-tests-look-at "data = [ [ 'these', 'are'],")
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(forward-line 1)
|
||||
(should (eq (car (python-indent-context)) :inside-paren))
|
||||
(should (= (python-indent-calculate-indentation) 9))))
|
||||
|
||||
(ert-deftest python-indent-inside-paren-5 ()
|
||||
"Test when :inside-paren initial parens are skipped in context start."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
while ((not some_condition) and
|
||||
another_condition):
|
||||
do_something_interesting(
|
||||
with_some_arg)
|
||||
"
|
||||
(python-tests-look-at "while ((not some_condition) and")
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(forward-line 1)
|
||||
(should (eq (car (python-indent-context)) :inside-paren))
|
||||
(should (= (python-indent-calculate-indentation) 7))
|
||||
(forward-line 1)
|
||||
(should (eq (car (python-indent-context)) :after-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(forward-line 1)
|
||||
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
|
||||
(should (= (python-indent-calculate-indentation) 8))))
|
||||
|
||||
(ert-deftest python-indent-inside-paren-6 ()
|
||||
"This should be aligned.."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
CHOICES = (('some', 'choice'),
|
||||
('another', 'choice'),
|
||||
('more', 'choices'))
|
||||
"
|
||||
(python-tests-look-at "CHOICES = (('some', 'choice'),")
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(forward-line 1)
|
||||
(should (eq (car (python-indent-context)) :inside-paren))
|
||||
(should (= (python-indent-calculate-indentation) 11))
|
||||
(forward-line 1)
|
||||
(should (eq (car (python-indent-context)) :inside-paren))
|
||||
(should (= (python-indent-calculate-indentation) 11))))
|
||||
|
||||
(ert-deftest python-indent-after-block-1 ()
|
||||
"The most simple after-block case that shouldn't fail."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
def foo(a, b, c=True):
|
||||
"
|
||||
(should (eq (car (python-indent-context)) 'no-indent))
|
||||
(should (eq (car (python-indent-context)) :no-indent))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(goto-char (point-max))
|
||||
(should (eq (car (python-indent-context)) 'after-beginning-of-block))
|
||||
(should (eq (car (python-indent-context)) :after-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))))
|
||||
|
||||
(ert-deftest python-indent-after-block-2 ()
|
||||
|
@ -432,9 +533,28 @@ def foo(a, b, c={
|
|||
}):
|
||||
"
|
||||
(goto-char (point-max))
|
||||
(should (eq (car (python-indent-context)) 'after-beginning-of-block))
|
||||
(should (eq (car (python-indent-context)) :after-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))))
|
||||
|
||||
(ert-deftest python-indent-after-block-3 ()
|
||||
"A weird (malformed) sample, usually found in python shells."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
In [1]:
|
||||
def func():
|
||||
pass
|
||||
|
||||
In [2]:
|
||||
something
|
||||
"
|
||||
(python-tests-look-at "pass")
|
||||
(should (eq (car (python-indent-context)) :after-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "something")
|
||||
(end-of-line)
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))))
|
||||
|
||||
(ert-deftest python-indent-after-backslash-1 ()
|
||||
"The most common case."
|
||||
(python-tests-with-temp-buffer
|
||||
|
@ -444,16 +564,16 @@ from foo.bar.baz import something, something_1 \\\\
|
|||
something_4, something_5
|
||||
"
|
||||
(python-tests-look-at "from foo.bar.baz import something, something_1")
|
||||
(should (eq (car (python-indent-context)) 'after-line))
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at "something_2 something_3,")
|
||||
(should (eq (car (python-indent-context)) 'after-backslash))
|
||||
(should (eq (car (python-indent-context)) :after-backslash-first-line))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "something_4, something_5")
|
||||
(should (eq (car (python-indent-context)) 'after-backslash))
|
||||
(should (eq (car (python-indent-context)) :after-backslash))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(goto-char (point-max))
|
||||
(should (eq (car (python-indent-context)) 'after-line))
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))))
|
||||
|
||||
(ert-deftest python-indent-after-backslash-2 ()
|
||||
|
@ -471,40 +591,104 @@ objects = Thing.objects.all() \\\\
|
|||
.values_list()
|
||||
"
|
||||
(python-tests-look-at "objects = Thing.objects.all()")
|
||||
(should (eq (car (python-indent-context)) 'after-line))
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at ".filter(")
|
||||
(should (eq (car (python-indent-context)) 'after-backslash))
|
||||
(should (eq (car (python-indent-context))
|
||||
:after-backslash-dotted-continuation))
|
||||
(should (= (python-indent-calculate-indentation) 23))
|
||||
(python-tests-look-at "type='toy',")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
|
||||
(should (= (python-indent-calculate-indentation) 27))
|
||||
(python-tests-look-at "status='bought'")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
|
||||
(should (= (python-indent-calculate-indentation) 27))
|
||||
(python-tests-look-at ") \\\\")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-at-closing-paren))
|
||||
(should (= (python-indent-calculate-indentation) 23))
|
||||
(python-tests-look-at ".aggregate(")
|
||||
(should (eq (car (python-indent-context)) 'after-backslash))
|
||||
(should (eq (car (python-indent-context))
|
||||
:after-backslash-dotted-continuation))
|
||||
(should (= (python-indent-calculate-indentation) 23))
|
||||
(python-tests-look-at "Sum('amount')")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-newline-start))
|
||||
(should (= (python-indent-calculate-indentation) 27))
|
||||
(python-tests-look-at ") \\\\")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren-at-closing-paren))
|
||||
(should (= (python-indent-calculate-indentation) 23))
|
||||
(python-tests-look-at ".values_list()")
|
||||
(should (eq (car (python-indent-context)) 'after-backslash))
|
||||
(should (eq (car (python-indent-context))
|
||||
:after-backslash-dotted-continuation))
|
||||
(should (= (python-indent-calculate-indentation) 23))
|
||||
(forward-line 1)
|
||||
(should (eq (car (python-indent-context)) 'after-line))
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))))
|
||||
|
||||
(ert-deftest python-indent-after-backslash-3 ()
|
||||
"Backslash continuation from block start."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
with open('/path/to/some/file/you/want/to/read') as file_1, \\\\
|
||||
open('/path/to/some/file/being/written', 'w') as file_2:
|
||||
file_2.write(file_1.read())
|
||||
"
|
||||
(python-tests-look-at
|
||||
"with open('/path/to/some/file/you/want/to/read') as file_1, \\\\")
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at
|
||||
"open('/path/to/some/file/being/written', 'w') as file_2")
|
||||
(should (eq (car (python-indent-context))
|
||||
:after-backslash-block-continuation))
|
||||
(should (= (python-indent-calculate-indentation) 5))
|
||||
(python-tests-look-at "file_2.write(file_1.read())")
|
||||
(should (eq (car (python-indent-context)) :after-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))))
|
||||
|
||||
(ert-deftest python-indent-after-backslash-4 ()
|
||||
"Backslash continuation from assignment."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
super_awful_assignment = some_calculation() and \\\\
|
||||
another_calculation() and \\\\
|
||||
some_final_calculation()
|
||||
"
|
||||
(python-tests-look-at
|
||||
"super_awful_assignment = some_calculation() and \\\\")
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at "another_calculation() and \\\\")
|
||||
(should (eq (car (python-indent-context))
|
||||
:after-backslash-assignment-continuation))
|
||||
(should (= (python-indent-calculate-indentation) 25))
|
||||
(python-tests-look-at "some_final_calculation()")
|
||||
(should (eq (car (python-indent-context)) :after-backslash))
|
||||
(should (= (python-indent-calculate-indentation) 25))))
|
||||
|
||||
(ert-deftest python-indent-after-backslash-5 ()
|
||||
"Dotted continuation bizarre example."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
def delete_all_things():
|
||||
Thing \\\\
|
||||
.objects.all() \\\\
|
||||
.delete()
|
||||
"
|
||||
(python-tests-look-at "Thing \\\\")
|
||||
(should (eq (car (python-indent-context)) :after-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at ".objects.all() \\\\")
|
||||
(should (eq (car (python-indent-context)) :after-backslash-first-line))
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(python-tests-look-at ".delete()")
|
||||
(should (eq (car (python-indent-context))
|
||||
:after-backslash-dotted-continuation))
|
||||
(should (= (python-indent-calculate-indentation) 16))))
|
||||
|
||||
(ert-deftest python-indent-block-enders-1 ()
|
||||
"Test de-indentation for pass keyword."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
"
|
||||
Class foo(object):
|
||||
|
||||
def bar(self):
|
||||
|
@ -516,17 +700,18 @@ Class foo(object):
|
|||
else:
|
||||
pass
|
||||
"
|
||||
(python-tests-look-at "3)")
|
||||
(forward-line 1)
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(python-tests-look-at "pass")
|
||||
(forward-line 1)
|
||||
(should (= (python-indent-calculate-indentation) 8))))
|
||||
(python-tests-look-at "3)")
|
||||
(forward-line 1)
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(python-tests-look-at "pass")
|
||||
(forward-line 1)
|
||||
(should (eq (car (python-indent-context)) :after-block-end))
|
||||
(should (= (python-indent-calculate-indentation) 8))))
|
||||
|
||||
(ert-deftest python-indent-block-enders-2 ()
|
||||
"Test de-indentation for return keyword."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
"
|
||||
Class foo(object):
|
||||
'''raise lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
|
||||
|
||||
|
@ -539,64 +724,68 @@ Class foo(object):
|
|||
2,
|
||||
3)
|
||||
"
|
||||
(python-tests-look-at "def")
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "if")
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(python-tests-look-at "return")
|
||||
(should (= (python-indent-calculate-indentation) 12))
|
||||
(goto-char (point-max))
|
||||
(should (= (python-indent-calculate-indentation) 8))))
|
||||
(python-tests-look-at "def")
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "if")
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(python-tests-look-at "return")
|
||||
(should (= (python-indent-calculate-indentation) 12))
|
||||
(goto-char (point-max))
|
||||
(should (eq (car (python-indent-context)) :after-block-end))
|
||||
(should (= (python-indent-calculate-indentation) 8))))
|
||||
|
||||
(ert-deftest python-indent-block-enders-3 ()
|
||||
"Test de-indentation for continue keyword."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
"
|
||||
for element in lst:
|
||||
if element is None:
|
||||
continue
|
||||
"
|
||||
(python-tests-look-at "if")
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "continue")
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(forward-line 1)
|
||||
(should (= (python-indent-calculate-indentation) 4))))
|
||||
(python-tests-look-at "if")
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "continue")
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(forward-line 1)
|
||||
(should (eq (car (python-indent-context)) :after-block-end))
|
||||
(should (= (python-indent-calculate-indentation) 4))))
|
||||
|
||||
(ert-deftest python-indent-block-enders-4 ()
|
||||
"Test de-indentation for break keyword."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
"
|
||||
for element in lst:
|
||||
if element is None:
|
||||
break
|
||||
"
|
||||
(python-tests-look-at "if")
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "break")
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(forward-line 1)
|
||||
(should (= (python-indent-calculate-indentation) 4))))
|
||||
(python-tests-look-at "if")
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "break")
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(forward-line 1)
|
||||
(should (eq (car (python-indent-context)) :after-block-end))
|
||||
(should (= (python-indent-calculate-indentation) 4))))
|
||||
|
||||
(ert-deftest python-indent-block-enders-5 ()
|
||||
"Test de-indentation for raise keyword."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
"
|
||||
for element in lst:
|
||||
if element is None:
|
||||
raise ValueError('Element cannot be None')
|
||||
"
|
||||
(python-tests-look-at "if")
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "raise")
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(forward-line 1)
|
||||
(should (= (python-indent-calculate-indentation) 4))))
|
||||
(python-tests-look-at "if")
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "raise")
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(forward-line 1)
|
||||
(should (eq (car (python-indent-context)) :after-block-end))
|
||||
(should (= (python-indent-calculate-indentation) 4))))
|
||||
|
||||
(ert-deftest python-indent-dedenters-1 ()
|
||||
"Test de-indentation for the elif keyword."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
"
|
||||
if save:
|
||||
try:
|
||||
write_to_disk(data)
|
||||
|
@ -604,15 +793,15 @@ if save:
|
|||
cleanup()
|
||||
elif
|
||||
"
|
||||
(python-tests-look-at "elif\n")
|
||||
(should (eq (car (python-indent-context)) 'dedenter-statement))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(should (equal (python-indent-calculate-levels) '(0)))))
|
||||
(python-tests-look-at "elif\n")
|
||||
(should (eq (car (python-indent-context)) :at-dedenter-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(should (= (python-indent-calculate-indentation t) 0))))
|
||||
|
||||
(ert-deftest python-indent-dedenters-2 ()
|
||||
"Test de-indentation for the else keyword."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
"
|
||||
if save:
|
||||
try:
|
||||
write_to_disk(data)
|
||||
|
@ -627,43 +816,50 @@ if save:
|
|||
finally:
|
||||
data.free()
|
||||
"
|
||||
(python-tests-look-at "else\n")
|
||||
(should (eq (car (python-indent-context)) 'dedenter-statement))
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(should (equal (python-indent-calculate-levels) '(0 4 8)))))
|
||||
(python-tests-look-at "else\n")
|
||||
(should (eq (car (python-indent-context)) :at-dedenter-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(python-indent-line t)
|
||||
(should (= (python-indent-calculate-indentation t) 4))
|
||||
(python-indent-line t)
|
||||
(should (= (python-indent-calculate-indentation t) 0))
|
||||
(python-indent-line t)
|
||||
(should (= (python-indent-calculate-indentation t) 8))))
|
||||
|
||||
(ert-deftest python-indent-dedenters-3 ()
|
||||
"Test de-indentation for the except keyword."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
"
|
||||
if save:
|
||||
try:
|
||||
write_to_disk(data)
|
||||
except
|
||||
"
|
||||
(python-tests-look-at "except\n")
|
||||
(should (eq (car (python-indent-context)) 'dedenter-statement))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(should (equal (python-indent-calculate-levels) '(4)))))
|
||||
(python-tests-look-at "except\n")
|
||||
(should (eq (car (python-indent-context)) :at-dedenter-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-indent-line t)
|
||||
(should (= (python-indent-calculate-indentation t) 4))))
|
||||
|
||||
(ert-deftest python-indent-dedenters-4 ()
|
||||
"Test de-indentation for the finally keyword."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
"
|
||||
if save:
|
||||
try:
|
||||
write_to_disk(data)
|
||||
finally
|
||||
"
|
||||
(python-tests-look-at "finally\n")
|
||||
(should (eq (car (python-indent-context)) 'dedenter-statement))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(should (equal (python-indent-calculate-levels) '(4)))))
|
||||
(python-tests-look-at "finally\n")
|
||||
(should (eq (car (python-indent-context)) :at-dedenter-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-indent-line t)
|
||||
(should (= (python-indent-calculate-indentation) 4))))
|
||||
|
||||
(ert-deftest python-indent-dedenters-5 ()
|
||||
"Test invalid levels are skipped in a complex example."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
"
|
||||
if save:
|
||||
try:
|
||||
write_to_disk(data)
|
||||
|
@ -676,29 +872,31 @@ if save:
|
|||
do_cleanup()
|
||||
else
|
||||
"
|
||||
(python-tests-look-at "else\n")
|
||||
(should (eq (car (python-indent-context)) 'dedenter-statement))
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(should (equal (python-indent-calculate-levels) '(0 8)))))
|
||||
(python-tests-look-at "else\n")
|
||||
(should (eq (car (python-indent-context)) :at-dedenter-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 8))
|
||||
(should (= (python-indent-calculate-indentation t) 0))
|
||||
(python-indent-line t)
|
||||
(should (= (python-indent-calculate-indentation t) 8))))
|
||||
|
||||
(ert-deftest python-indent-dedenters-6 ()
|
||||
"Test indentation is zero when no opening block for dedenter."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
"
|
||||
try:
|
||||
# if save:
|
||||
write_to_disk(data)
|
||||
else
|
||||
"
|
||||
(python-tests-look-at "else\n")
|
||||
(should (eq (car (python-indent-context)) 'dedenter-statement))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(should (equal (python-indent-calculate-levels) '(0)))))
|
||||
(python-tests-look-at "else\n")
|
||||
(should (eq (car (python-indent-context)) :at-dedenter-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(should (= (python-indent-calculate-indentation t) 0))))
|
||||
|
||||
(ert-deftest python-indent-dedenters-7 ()
|
||||
"Test indentation case from Bug#15163."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
"
|
||||
if a:
|
||||
if b:
|
||||
pass
|
||||
|
@ -706,10 +904,10 @@ if a:
|
|||
pass
|
||||
else:
|
||||
"
|
||||
(python-tests-look-at "else:" 2)
|
||||
(should (eq (car (python-indent-context)) 'dedenter-statement))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(should (equal (python-indent-calculate-levels) '(0)))))
|
||||
(python-tests-look-at "else:" 2)
|
||||
(should (eq (car (python-indent-context)) :at-dedenter-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(should (= (python-indent-calculate-indentation t) 0))))
|
||||
|
||||
(ert-deftest python-indent-dedenters-8 ()
|
||||
"Test indentation for Bug#18432."
|
||||
|
@ -721,10 +919,99 @@ if (a == 1 or
|
|||
elif (a == 3 or
|
||||
a == 4):
|
||||
"
|
||||
(python-tests-look-at "elif (a == 3 or")
|
||||
(should (eq (car (python-indent-context)) :at-dedenter-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(should (= (python-indent-calculate-indentation t) 0))
|
||||
(python-tests-look-at "a == 4):\n")
|
||||
(should (eq (car (python-indent-context)) 'inside-paren))
|
||||
(should (eq (car (python-indent-context)) :inside-paren))
|
||||
(should (= (python-indent-calculate-indentation) 6))
|
||||
(should (equal (python-indent-calculate-levels) '(0 4 6)))))
|
||||
(python-indent-line)
|
||||
(should (= (python-indent-calculate-indentation t) 4))
|
||||
(python-indent-line t)
|
||||
(should (= (python-indent-calculate-indentation t) 0))
|
||||
(python-indent-line t)
|
||||
(should (= (python-indent-calculate-indentation t) 6))))
|
||||
|
||||
(ert-deftest python-indent-inside-string-1 ()
|
||||
"Test indentation for strings."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
multiline = '''
|
||||
bunch
|
||||
of
|
||||
lines
|
||||
'''
|
||||
"
|
||||
(python-tests-look-at "multiline = '''")
|
||||
(should (eq (car (python-indent-context)) :after-line))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at "bunch")
|
||||
(should (eq (car (python-indent-context)) :inside-string))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at "of")
|
||||
(should (eq (car (python-indent-context)) :inside-string))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at "lines")
|
||||
(should (eq (car (python-indent-context)) :inside-string))
|
||||
(should (= (python-indent-calculate-indentation) 0))
|
||||
(python-tests-look-at "'''")
|
||||
(should (eq (car (python-indent-context)) :inside-string))
|
||||
(should (= (python-indent-calculate-indentation) 0))))
|
||||
|
||||
(ert-deftest python-indent-inside-string-2 ()
|
||||
"Test indentation for docstrings."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
def fn(a, b, c=True):
|
||||
'''docstring
|
||||
bunch
|
||||
of
|
||||
lines
|
||||
'''
|
||||
"
|
||||
(python-tests-look-at "'''docstring")
|
||||
(should (eq (car (python-indent-context)) :after-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "bunch")
|
||||
(should (eq (car (python-indent-context)) :inside-string))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "of")
|
||||
(should (eq (car (python-indent-context)) :inside-string))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "lines")
|
||||
(should (eq (car (python-indent-context)) :inside-string))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "'''")
|
||||
(should (eq (car (python-indent-context)) :inside-string))
|
||||
(should (= (python-indent-calculate-indentation) 4))))
|
||||
|
||||
(ert-deftest python-indent-inside-string-3 ()
|
||||
"Test indentation for nested strings."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
def fn(a, b, c=True):
|
||||
some_var = '''
|
||||
bunch
|
||||
of
|
||||
lines
|
||||
'''
|
||||
"
|
||||
(python-tests-look-at "some_var = '''")
|
||||
(should (eq (car (python-indent-context)) :after-block-start))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "bunch")
|
||||
(should (eq (car (python-indent-context)) :inside-string))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "of")
|
||||
(should (eq (car (python-indent-context)) :inside-string))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "lines")
|
||||
(should (eq (car (python-indent-context)) :inside-string))
|
||||
(should (= (python-indent-calculate-indentation) 4))
|
||||
(python-tests-look-at "'''")
|
||||
(should (eq (car (python-indent-context)) :inside-string))
|
||||
(should (= (python-indent-calculate-indentation) 4))))
|
||||
|
||||
(ert-deftest python-indent-electric-colon-1 ()
|
||||
"Test indentation case from Bug#18228."
|
||||
|
@ -1802,6 +2089,23 @@ def f():
|
|||
(python-nav-backward-up-list)
|
||||
(should (looking-at "def f():"))))
|
||||
|
||||
(ert-deftest python-indent-dedent-line-backspace-1 ()
|
||||
"Check de-indentation on first call. Bug#18319."
|
||||
(python-tests-with-temp-buffer
|
||||
"
|
||||
if True:
|
||||
x ()
|
||||
if False:
|
||||
"
|
||||
(python-tests-look-at "if False:")
|
||||
(call-interactively #'python-indent-dedent-line-backspace)
|
||||
(should (zerop (current-indentation)))
|
||||
;; XXX: This should be a call to `undo' but it's triggering errors.
|
||||
(insert " ")
|
||||
(should (= (current-indentation) 4))
|
||||
(call-interactively #'python-indent-dedent-line-backspace)
|
||||
(should (zerop (current-indentation)))))
|
||||
|
||||
|
||||
;;; Shell integration
|
||||
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
|
||||
;;; Code:
|
||||
|
||||
(require 'regexp-opt)
|
||||
|
||||
(ert-deftest regexp-test-regexp-opt ()
|
||||
"Test the `compilation-error-regexp-alist' regexps.
|
||||
The test data is in `compile-tests--test-regexps-data'."
|
||||
|
|
Loading…
Add table
Reference in a new issue