texlive[43706] Build/source/texk: gregorio 5.0.0-rc1

commits+kakuto at tug.org commits+kakuto at tug.org
Thu Apr 6 07:08:54 CEST 2017


Revision: 43706
          http://tug.org/svn/texlive?view=revision&revision=43706
Author:   kakuto
Date:     2017-04-06 07:08:53 +0200 (Thu, 06 Apr 2017)
Log Message:
-----------
gregorio 5.0.0-rc1

Modified Paths:
--------------
    trunk/Build/source/texk/README
    trunk/Build/source/texk/gregorio/ChangeLog
    trunk/Build/source/texk/gregorio/Makefile.am
    trunk/Build/source/texk/gregorio/Makefile.in
    trunk/Build/source/texk/gregorio/TLpatches/ChangeLog
    trunk/Build/source/texk/gregorio/TLpatches/TL-Changes
    trunk/Build/source/texk/gregorio/config_.h.in
    trunk/Build/source/texk/gregorio/configure
    trunk/Build/source/texk/gregorio/configure.ac
    trunk/Build/source/texk/gregorio/gregorio-src/.gregorio-version
    trunk/Build/source/texk/gregorio/gregorio-src/CHANGELOG.md
    trunk/Build/source/texk/gregorio/gregorio-src/CONTRIBUTORS.md
    trunk/Build/source/texk/gregorio/gregorio-src/Makefile.am
    trunk/Build/source/texk/gregorio/gregorio-src/README.md
    trunk/Build/source/texk/gregorio/gregorio-src/UPGRADE.md
    trunk/Build/source/texk/gregorio/gregorio-src/VersionManager.py
    trunk/Build/source/texk/gregorio/gregorio-src/configure.ac
    trunk/Build/source/texk/gregorio/gregorio-src/contrib/900_gregorio.xml
    trunk/Build/source/texk/gregorio/gregorio-src/contrib/Makefile.am
    trunk/Build/source/texk/gregorio/gregorio-src/contrib/README.md
    trunk/Build/source/texk/gregorio/gregorio-src/contrib/TeXShop/Makefile.am
    trunk/Build/source/texk/gregorio/gregorio-src/contrib/TeXShop/auto-configure.command
    trunk/Build/source/texk/gregorio/gregorio-src/contrib/gabc.lang
    trunk/Build/source/texk/gregorio/gregorio-src/contrib/gabc.vim
    trunk/Build/source/texk/gregorio/gregorio-src/contrib/gprocess
    trunk/Build/source/texk/gregorio/gregorio-src/contrib/system-setup.bat
    trunk/Build/source/texk/gregorio/gregorio-src/contrib/system-setup.command
    trunk/Build/source/texk/gregorio/gregorio-src/doc/Appendix_Font_Tables.tex
    trunk/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_User.tex
    trunk/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_gregorio.tex
    trunk/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_internal.tex
    trunk/Build/source/texk/gregorio/gregorio-src/doc/Gabc.tex
    trunk/Build/source/texk/gregorio/gregorio-src/doc/GregorioNabcRef.pdf
    trunk/Build/source/texk/gregorio/gregorio-src/doc/GregorioNabcRef.tex
    trunk/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef.lua
    trunk/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef.pdf
    trunk/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef.tex
    trunk/Build/source/texk/gregorio/gregorio-src/doc/Makefile.am
    trunk/Build/source/texk/gregorio/gregorio-src/examples/Makefile.am
    trunk/Build/source/texk/gregorio/gregorio-src/install-gtex.sh
    trunk/Build/source/texk/gregorio/gregorio-src/install.sh
    trunk/Build/source/texk/gregorio/gregorio-src/src/Makefile.am
    trunk/Build/source/texk/gregorio/gregorio-src/src/bool.h
    trunk/Build/source/texk/gregorio/gregorio-src/src/characters.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/characters.h
    trunk/Build/source/texk/gregorio/gregorio-src/src/config.h
    trunk/Build/source/texk/gregorio/gregorio-src/src/dump/dump.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/encode_utf8strings.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/enum_generator.h
    trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-elements-determination.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-glyphs-determination.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-notes-determination-l.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-notes-determination.l
    trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-l.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-l.h
    trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-y.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-y.h
    trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.h
    trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.l
    trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.y
    trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-write.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc.h
    trunk/Build/source/texk/gregorio/gregorio-src/src/gregorio-utils.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex-position.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex-write.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex.h
    trunk/Build/source/texk/gregorio/gregorio-src/src/messages.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/messages.h
    trunk/Build/source/texk/gregorio/gregorio-src/src/plugins.h
    trunk/Build/source/texk/gregorio/gregorio-src/src/sha1.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/sha1.h
    trunk/Build/source/texk/gregorio/gregorio-src/src/struct.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/struct.h
    trunk/Build/source/texk/gregorio/gregorio-src/src/struct_iter.h
    trunk/Build/source/texk/gregorio/gregorio-src/src/support.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/support.h
    trunk/Build/source/texk/gregorio/gregorio-src/src/unicode.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/unicode.h
    trunk/Build/source/texk/gregorio/gregorio-src/src/utf8strings.h
    trunk/Build/source/texk/gregorio/gregorio-src/src/utf8strings.h.in
    trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules-l.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules-y.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules.h
    trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules.l
    trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules.y
    trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel.c
    trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel.h
    trunk/Build/source/texk/gregorio/gregorio-src/windows/gregorio-resources.rc
    trunk/Build/source/texk/gregorio/gregorio.test
    trunk/Build/source/texk/gregorio/version.ac

Added Paths:
-----------
    trunk/Build/source/texk/gregorio/gregorio-src/contrib/checkSyllabation.py
    trunk/Build/source/texk/gregorio/gregorio-src/doc/omnes.gabc

Removed Paths:
-------------
    trunk/Build/source/texk/gregorio/gregorio-src/contrib/gregorio-scribus.lua

Modified: trunk/Build/source/texk/README
===================================================================
--- trunk/Build/source/texk/README	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/README	2017-04-06 05:08:53 UTC (rev 43706)
@@ -61,7 +61,7 @@
 dvisvgm 2.1.3 - checked 21feb17
   http://dvisvgm.bplaced.net/Downloads
 
-gregorio 4.2.0 - checked 25sep16
+gregorio 5.0.0-rc1 - checked 06apr17
   https://github.com/gregorio-project/gregorio/releases/
 
 gsftopk - from Paul Vojta's xdvi?

Modified: trunk/Build/source/texk/gregorio/ChangeLog
===================================================================
--- trunk/Build/source/texk/gregorio/ChangeLog	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/ChangeLog	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,6 +1,10 @@
-2017-03-27  Karl Berry  <karl at freefriends.org>
+2017-04-06  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
 
-	* Makefile.am (AM_TESTS_ENVIRONMENT): use instead of TESTS_ENVIRONMENT.
+	* Import gregorio-5.0.0-rc1.
+	* configure.ac (FILENAME_VERSION): Gregorio developers seem to want to
+	use FILENAME_VERSION postfix for the executable name in TeX Live 2017.
+	* gregorio.test (gregorio): use $FILENAME_VERSION.
+	* Makefile.am (bin_PROGRAMS): use $FILENAME_VERSION.
 
 2016-09-29  Karl Berry  <karl at tug.org>
 

Modified: trunk/Build/source/texk/gregorio/Makefile.am
===================================================================
--- trunk/Build/source/texk/gregorio/Makefile.am	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/Makefile.am	2017-04-06 05:08:53 UTC (rev 43706)
@@ -23,9 +23,9 @@
 	$(KPATHSEA_INCLUDES) -D_GNU_SOURCE -DUSE_KPSE
 AM_CFLAGS = $(WARNING_CFLAGS)
 
-bin_PROGRAMS = gregorio
+bin_PROGRAMS = gregorio-$(FILENAME_VERSION)
 
-gregorio_SOURCES = \
+gregorio___FILENAME_VERSION__SOURCES = \
 	@GREGORIO_TREE@/src/characters.c \
 	@GREGORIO_TREE@/src/gregorio-utils.c \
 	@GREGORIO_TREE@/src/messages.c \
@@ -49,7 +49,7 @@
 
 LDADD = $(KPATHSEA_LIBS)
 
-$(gregorio_OBJECTS): $(KPATHSEA_DEPEND)
+$(gregorio___FILENAME_VERSION__OBJECTS): $(KPATHSEA_DEPEND)
 
 ## Rebuild libkpathsea
 @KPATHSEA_RULE@
@@ -57,7 +57,7 @@
 ## TESTS
 AM_TESTS_ENVIRONMENT = GREGORIO_TREE='$(GREGORIO_TREE)'; export GREGORIO_TREE;
 TESTS = gregorio.test
-gregorio.log: gregorio$(EXEEXT)
+gregorio.log: gregorio-$(FILENAME_VERSION)$(EXEEXT)
 
 EXTRA_DIST += $(TESTS)
 DISTCLEANFILES = factus.gtex veni.gtex

Modified: trunk/Build/source/texk/gregorio/Makefile.in
===================================================================
--- trunk/Build/source/texk/gregorio/Makefile.in	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/Makefile.in	2017-04-06 05:08:53 UTC (rev 43706)
@@ -88,7 +88,7 @@
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-bin_PROGRAMS = gregorio$(EXEEXT)
+bin_PROGRAMS = gregorio-$(FILENAME_VERSION)$(EXEEXT)
 subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/../../m4/kpse-common.m4 \
@@ -113,7 +113,8 @@
 am__installdirs = "$(DESTDIR)$(bindir)"
 PROGRAMS = $(bin_PROGRAMS)
 am__dirstamp = $(am__leading_dot)dirstamp
-am_gregorio_OBJECTS = @GREGORIO_TREE@/src/characters.$(OBJEXT) \
+am_gregorio___FILENAME_VERSION__OBJECTS =  \
+	@GREGORIO_TREE@/src/characters.$(OBJEXT) \
 	@GREGORIO_TREE@/src/gregorio-utils.$(OBJEXT) \
 	@GREGORIO_TREE@/src/messages.$(OBJEXT) \
 	@GREGORIO_TREE@/src/sha1.$(OBJEXT) \
@@ -133,10 +134,11 @@
 	@GREGORIO_TREE@/src/vowel/vowel.$(OBJEXT) \
 	@GREGORIO_TREE@/src/vowel/vowel-rules-l.$(OBJEXT) \
 	@GREGORIO_TREE@/src/vowel/vowel-rules-y.$(OBJEXT)
-gregorio_OBJECTS = $(am_gregorio_OBJECTS)
-gregorio_LDADD = $(LDADD)
+gregorio___FILENAME_VERSION__OBJECTS =  \
+	$(am_gregorio___FILENAME_VERSION__OBJECTS)
+gregorio___FILENAME_VERSION__LDADD = $(LDADD)
 am__DEPENDENCIES_1 =
-gregorio_DEPENDENCIES = $(am__DEPENDENCIES_1)
+gregorio___FILENAME_VERSION__DEPENDENCIES = $(am__DEPENDENCIES_1)
 AM_V_lt = $(am__v_lt_ at AM_V@)
 am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
 am__v_lt_0 = --silent
@@ -175,8 +177,8 @@
 am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(gregorio_SOURCES)
-DIST_SOURCES = $(gregorio_SOURCES)
+SOURCES = $(gregorio___FILENAME_VERSION__SOURCES)
+DIST_SOURCES = $(gregorio___FILENAME_VERSION__SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -463,6 +465,7 @@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
+FILENAME_VERSION = @FILENAME_VERSION@
 GREGORIO_TREE = @GREGORIO_TREE@
 GREP = @GREP@
 INSTALL = @INSTALL@
@@ -576,7 +579,7 @@
 	$(KPATHSEA_INCLUDES) -D_GNU_SOURCE -DUSE_KPSE
 
 AM_CFLAGS = $(WARNING_CFLAGS)
-gregorio_SOURCES = \
+gregorio___FILENAME_VERSION__SOURCES = \
 	@GREGORIO_TREE@/src/characters.c \
 	@GREGORIO_TREE@/src/gregorio-utils.c \
 	@GREGORIO_TREE@/src/messages.c \
@@ -796,9 +799,9 @@
 	@GREGORIO_TREE@/src/vowel/$(am__dirstamp) \
 	@GREGORIO_TREE@/src/vowel/$(DEPDIR)/$(am__dirstamp)
 
-gregorio$(EXEEXT): $(gregorio_OBJECTS) $(gregorio_DEPENDENCIES) $(EXTRA_gregorio_DEPENDENCIES) 
-	@rm -f gregorio$(EXEEXT)
-	$(AM_V_CCLD)$(LINK) $(gregorio_OBJECTS) $(gregorio_LDADD) $(LIBS)
+gregorio-$(FILENAME_VERSION)$(EXEEXT): $(gregorio___FILENAME_VERSION__OBJECTS) $(gregorio___FILENAME_VERSION__DEPENDENCIES) $(EXTRA_gregorio___FILENAME_VERSION__DEPENDENCIES) 
+	@rm -f gregorio-$(FILENAME_VERSION)$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(gregorio___FILENAME_VERSION__OBJECTS) $(gregorio___FILENAME_VERSION__LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -1397,10 +1400,10 @@
 dist-hook:
 	cd "$(distdir)" && rm -rf $(NEVER_DIST)
 
-$(gregorio_OBJECTS): $(KPATHSEA_DEPEND)
+$(gregorio___FILENAME_VERSION__OBJECTS): $(KPATHSEA_DEPEND)
 
 @KPATHSEA_RULE@
-gregorio.log: gregorio$(EXEEXT)
+gregorio.log: gregorio-$(FILENAME_VERSION)$(EXEEXT)
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.

Modified: trunk/Build/source/texk/gregorio/TLpatches/ChangeLog
===================================================================
--- trunk/Build/source/texk/gregorio/TLpatches/ChangeLog	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/TLpatches/ChangeLog	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,3 +1,7 @@
+2017-04-06  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
+
+	Import gregorio-5.0.0-rc1.
+
 2016-09-25  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
 
 	Import gregorio-4.2.0.

Modified: trunk/Build/source/texk/gregorio/TLpatches/TL-Changes
===================================================================
--- trunk/Build/source/texk/gregorio/TLpatches/TL-Changes	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/TLpatches/TL-Changes	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,5 +1,5 @@
-Changes applied to the gregorio-4.2.0 tree as obtained from:
-	https://github.com/gregorio-project/gregorio/releases/tag/v4.2.0/
+Changes applied to the gregorio-5.0.0-rc1 tree as obtained from:
+	https://github.com/gregorio-project/gregorio/releases/download/v5.0.0-rc1
 
 Remove:
 	Makefile.in

Modified: trunk/Build/source/texk/gregorio/config_.h.in
===================================================================
--- trunk/Build/source/texk/gregorio/config_.h.in	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/config_.h.in	2017-04-06 05:08:53 UTC (rev 43706)
@@ -9,6 +9,9 @@
 /* Define to 1 if the `closedir' function returns void instead of `int'. */
 #undef CLOSEDIR_VOID
 
+/* version suitable for file names */
+#undef FILENAME_VERSION
+
 /* Define to 1 if realpath() can malloc memory, always gives an absolute path,
    and handles trailing slash correctly. */
 #undef FUNC_REALPATH_WORKS

Modified: trunk/Build/source/texk/gregorio/configure
===================================================================
--- trunk/Build/source/texk/gregorio/configure	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/configure	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Gregorio (TeX Live) 4.2.0.
+# Generated by GNU Autoconf 2.69 for Gregorio (TeX Live) 5.0.0-rc1.
 #
 # Report bugs to <tex-k at tug.org>.
 #
@@ -590,8 +590,8 @@
 # Identity of this package.
 PACKAGE_NAME='Gregorio (TeX Live)'
 PACKAGE_TARNAME='gregorio--tex-live-'
-PACKAGE_VERSION='4.2.0'
-PACKAGE_STRING='Gregorio (TeX Live) 4.2.0'
+PACKAGE_VERSION='5.0.0-rc1'
+PACKAGE_STRING='Gregorio (TeX Live) 5.0.0-rc1'
 PACKAGE_BUGREPORT='tex-k at tug.org'
 PACKAGE_URL='http://gregorio-project.github.io/'
 
@@ -724,6 +724,7 @@
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+FILENAME_VERSION
 target_alias
 host_alias
 build_alias
@@ -1330,7 +1331,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures Gregorio (TeX Live) 4.2.0 to adapt to many kinds of systems.
+\`configure' configures Gregorio (TeX Live) 5.0.0-rc1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1401,7 +1402,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of Gregorio (TeX Live) 4.2.0:";;
+     short | recursive ) echo "Configuration of Gregorio (TeX Live) 5.0.0-rc1:";;
    esac
   cat <<\_ACEOF
 
@@ -1521,7 +1522,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-Gregorio (TeX Live) configure 4.2.0
+Gregorio (TeX Live) configure 5.0.0-rc1
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2360,7 +2361,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by Gregorio (TeX Live) $as_me 4.2.0, which was
+It was created by Gregorio (TeX Live) $as_me 5.0.0-rc1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2709,8 +2710,15 @@
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
+FILENAME_VERSION="5_0_0-rc1"
 
 
+cat >>confdefs.h <<_ACEOF
+#define FILENAME_VERSION "$FILENAME_VERSION"
+_ACEOF
+
+
+
 ac_aux_dir=
 for ac_dir in ../../build-aux "$srcdir"/../../build-aux; do
   if test -f "$ac_dir/install-sh"; then
@@ -8046,7 +8054,7 @@
 
 # Define the identity of the package.
  PACKAGE='gregorio--tex-live-'
- VERSION='4.2.0'
+ VERSION='5.0.0-rc1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -14466,7 +14474,7 @@
 Report bugs to <bug-libtool at gnu.org>."
 
 lt_cl_version="\
-Gregorio (TeX Live) config.lt 4.2.0
+Gregorio (TeX Live) config.lt 5.0.0-rc1
 configured by $0, generated by GNU Autoconf 2.69.
 
 Copyright (C) 2011 Free Software Foundation, Inc.
@@ -16053,7 +16061,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by Gregorio (TeX Live) $as_me 4.2.0, which was
+This file was extended by Gregorio (TeX Live) $as_me 5.0.0-rc1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -16120,7 +16128,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-Gregorio (TeX Live) config.status 4.2.0
+Gregorio (TeX Live) config.status 5.0.0-rc1
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 

Modified: trunk/Build/source/texk/gregorio/configure.ac
===================================================================
--- trunk/Build/source/texk/gregorio/configure.ac	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/configure.ac	2017-04-06 05:08:53 UTC (rev 43706)
@@ -10,6 +10,9 @@
 dnl
 m4_include([version.ac])[] dnl define gregorio_version
 AC_INIT([Gregorio (TeX Live)], gregorio_version, [tex-k at tug.org], [gregorio--tex-live-], [http://gregorio-project.github.io/])
+FILENAME_VERSION="5_0_0-rc1"
+AC_SUBST(FILENAME_VERSION)
+AC_DEFINE_UNQUOTED(FILENAME_VERSION, "$FILENAME_VERSION", [version suitable for file names])
 AC_PREREQ([2.65])
 AC_CONFIG_SRCDIR([gregorio-src/src/gregorio-utils.c])
 AC_CONFIG_AUX_DIR([../../build-aux])

Modified: trunk/Build/source/texk/gregorio/gregorio-src/.gregorio-version
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/.gregorio-version	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/.gregorio-version	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,4 +1,4 @@
-4.2.0
+5.0.0-rc1
 
 *** Do not modify this file. ***
 Use VersionManager.py to change the version.

Modified: trunk/Build/source/texk/gregorio/gregorio-src/CHANGELOG.md
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/CHANGELOG.md	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/CHANGELOG.md	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,6 +2,76 @@
 All notable changes to this project will be documented in this file.
 As of v3.0.0 this project adheres to [Semantic Versioning](http://semver.org/). It follows [some conventions](http://keepachangelog.com/).
 
+## [Unreleased][unreleased]
+
+
+## [5.0.0-rc1] - 2017-04-04
+### Fixed
+- The printing of the commentary box is no longer tied to the printing of the inital.  As a result it is now possible to have a score which has a commentary but not an initial.  See [this thread on the user list](http://www.mail-archive.com/gregorio-users@gna.org/msg03911.html).
+- Elisions after a vowel centering prefix will no longer cause the center to be placed on the vowel in the prefix.  Since prefixes are unvoiced vowels, this makes more sense than the previous behavior.  As usual, you may use the manual centering features to force the centering where you want if this does not produce what you want.  See [#1320](https://github.com/gregorio-project/gregorio/issues/1320).
+- Dynmanic line spacing when a clef change occurs at the end of a line is fixed so that the line after the clef change is spaced appropriately.  See [#1285](https://github.com/gregorio-project/gregorio/issues/1285).
+- Spaces in the filename of a score no longer cause Gregoriotex to fail. See [#1224](https://github.com/gregorio-project/gregorio/issues/1224).
+
+## [5.0.0-beta2] - 2017-02-24
+### Fixed
+- Glyphs for pes quadratum shapes with initio debilis are no longer missing. Use `-fqg` to engrave them.  See [#1310](https://github.com/gregorio-project/gregorio/issues/1310).
+
+### Changed
+- The default behaviour of `\gregorioscore` has been changed to autocompile.
+- When the note after an oriscus is at the same pitch, the oriscus direction now depends on the first non-unison, non-oriscus note after the oriscus (see [#1179](https://github.com/gregorio-project/gregorio/issues/1179)).
+- 6 new St. Gall neume glyphs have been added to the `gregall` font and glyph for nabc `to!ciG` has been changed (see [#1303](https://github.com/gregorio-project/gregorio/issues/1303), [#1305](https://github.com/gregorio-project/gregorio/issues/1305), [#1313](https://github.com/gregorio-project/gregorio/issues/1313), [#1314](https://github.com/gregorio-project/gregorio/issues/1314), [#1315](https://github.com/gregorio-project/gregorio/issues/1315)).
+
+## [5.0.0-beta1] - 2017-01-31
+### Fixed
+- Horizontal episemata bridge spaces more correctly.  As mentioned earlier, you can prevent this by appending `2` to the `_` on the note before the space you do not want bridged.  See [#1216](https://github.com/gregorio-project/gregorio/issues/1216).
+- A rising note after an oriscus flexus will no longer generate a porrectus (see [#1220](https://github.com/gregorio-project/gregorio/issues/1220)).
+- The Scribus external tool script now uses latexmk in order to handle the multi-pass features of Gregorio (see [#1236](https://github.com/gregorio-project/gregorio/issues/1236)).
+- Translation text in a syllable with a trailing (forced) hyphen is no longer truncated to its first character (see [#1254](https://github.com/gregorio-project/gregorio/issues/1254)).
+- A trailing (forced) hyphen in a syllable no longer generates a forced hyphen in the previous syllable (see [#1255](https://github.com/gregorio-project/gregorio/issues/1255)).
+- A trailing space on a header line is now ignored (see [#1269](https://github.com/gregorio-project/gregorio/issues/1269)).
+- A pes whose second note is an oriscus now obeys the oriscus orientation rules (see [#1272](https://github.com/gregorio-project/gregorio/issues/1272))
+
+### Changed
+- Notes are now left-aligned as if all clefs had the same width as the largest clef in the score. You can get previous behavior back with `\grebolshiftcleftype{current}`, or temporary force alignment until the end of a score with `\grelocalbolshiftcleftype`. See Documentation of these functions and [#1189](https://github.com/gregorio-project/gregorio/issues/1189).
+- A clef change immediately before a line break `(z)` will now typeset the new clef at the beginning of the next line.  An explicit custos `(z0)` immediately before such a clef change (or separated by only a bar) will be suppressed.  See [#1190](https://github.com/gregorio-project/gregorio/issues/1190).
+- Ledger lines are now extended through notes on either side of a ledger line that crosses a stem, as long as the notes are within the same "element."  If the algorithm doesn't produce the result you want, you can use `[oll:0]` to suppress an over-the-staff ledger line on a note, `[ull:0]` to suppress an under-the-staff ledger line on a note, `[oll:1]` to force an over-the-line ledger line on a note, or [ull:1] to force an under-the-staff ledger line on a note.  Please note that other forms of `[oll:...]` and `[ull:...]` can interfere with these new settings. See [UPGRADE.md](UPGRADE.md) and [#1215](https://github.com/gregorio-project/gregorio/issues/1215) for details.
+- The left stem of Dominican plicae on lines has been shortened (see [#1238](https://github.com/gregorio-project/gregorio/issues/1238)).
+- Clefs on the top or bottom line adjust the spacing as if there were a note above the top line or below the bottom line, respectively (see [#1007](https://github.com/gregorio-project/gregorio/issues/1007)).
+- Default spaces have been adjusted (see [#1182](https://github.com/gregorio-project/gregorio/issues/1182)).
+- `\grechangenextscorelinedim` can now take a comma-separated list of line numbers as its first argument (see [#1280](https://github.com/gregorio-project/gregorio/issues/1280)).
+
+### Added
+- More cavum shapes are now available.  To use them, simply add `r` in gabc to any note in a glyph.  See [#844](https://github.com/gregorio-project/gregorio/issues/844).
+- Square brackets can be placed around notes by using `[[` and `]]` to surround said notes in gabc (see [#844](https://github.com/gregorio-project/gregorio/issues/844)).
+- a font `grelaon` for Laon style adiastematic notation has been added (see GregorioNabcRef.pdf for details). This is a preview, backward incompatible change are possible in future releases.
+- 9 new St. Gall neume glyphs have been added to the `gregall` font.
+- 5 new St. Gall neume glyphs have been added to the `gresgmodern` font.
+- install-gtex.sh now generates uninstall-gtex.sh, which can be used to uninstall the TeX portion of the installation when GregorioTeX was installed from source.
+- A `<clear>` tag may be added to a syllable to indicate that its text should not overlap any previous syllable (see [#1029](https://github.com/gregorio-project/gregorio/issues/1029)).
+- More general support for protrusions.  The `<pr>` tag in gabc indicates where a protrusion should begin.  There is an optional argument `<pr:.5>` that allows the protrusion factor to be specified (in this example, `.5`).  Additionally, the comma, semicolon, colon, and period are automatically protruded, with configurable protrusion factors.  See GregorioRef and [#931](https://github.com/gregorio-project/gregorio/issues/931) for more information.
+- `minimalinitialwidth` space, controlling the minimum amount of space an initial should take require; ignored when `manualinitialwidth` is set to something non-zero (see [#1213](https://github.com/gregorio-project/gregorio/issues/1213)).
+- new scripts in `contrib/` to check the syllabation of a gabc score against hyphenation rules, such as those on [hyphen-la](https://github.com/gregorio-project/hyphen-la)
+- the visibility of a particular nabc voice can now be set by `\gresetnabc{n}{(in)visible}`, where `n` is the number of the nabc voice (see [#1257](https://github.com/gregorio-project/gregorio/issues/1257)).
+- `[nocustos]` may be used in gabc to prevent a custos should the line end at that point (see [#1271](https://github.com/gregorio-project/gregorio/issues/1271)).
+- Musica ficta signs: Add `r6`, `r7`, and `r8` to a note for a flat, natural, or sharp (respectively) above the note (see [#1278](https://github.com/gregorio-project/gregorio/issues/1278)).
+- The spacing added for low notes in the staff is now adjustable by setting dimension `noteadditionalspacelinestext`, with the number of notes settable as count `noteadditionalspacelinestextthreshold`.  See GregorioRef and [#1125](https://github.com/gregorio-project/gregorio/issues/1125) for details.
+- Some counts can now be adjusted for a particular line in a score.  Use `\grechangenextscorelinecount` prior to including the score to set the desired values.  The various spacing thresholds may be changed with this command.  See GregorioRef for details.
+
+### Deprecated
+- `\gresethyphenprotrusion{percentage}`, supplanted by `\gresetprotrusionfactor{eolhyphen}{factor}`.  Note that the value the new command takes is a factor rather than a percentage.
+
+### Removed
+- `initial-style` gabc header, supplanted by the `\gresetinitiallines` TeX command.
+- `biginitial` style, consolidated into the `initial` style.
+- `\grescorereference`
+- The Gregorio and Grana Padano fonts are no longer distributed with the Gregorio distribution archive.  They will now be available for download separately (along with their Dominican "-op" variants) in `supp_fonts-5_0_0.zip` (the version number will change to match future releases).  See [UPGRADE.md](UPGRADE.md) and [#844](https://github.com/gregorio-project/gregorio/issues/844) for details.
+
+
+## [4.2.1][Unreleased]
+### Fixed
+- Debian build scripts now use directories compatible with the TeXLive 2016 packaging of Gregorio (see [#1241](https://github.com/gregorio-project/gregorio/issues/1241)).
+
+
 ## [4.2.0] - 2016-09-23
 ### Fixed
 - When the note after an oriscus is at the same pitch, the oriscus will now point downwards by default (see [#1177](https://github.com/gregorio-project/gregorio/issues/1177)).

Modified: trunk/Build/source/texk/gregorio/gregorio-src/CONTRIBUTORS.md
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/CONTRIBUTORS.md	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/CONTRIBUTORS.md	2017-04-06 05:08:53 UTC (rev 43706)
@@ -34,11 +34,13 @@
  * David Gippner
  * Quentin Lamy
  * [The Abbey of Solesmes (FR)](http://www.solesmes.com/)
+ * [The Abbey of Flavigny (FR)](http://www.clairval.com)
  * [Abbazia di Praglia (IT)](http://www.praglia.it)
  * [Abbazia Mater Ecclesiae (IT)](http://it.wikipedia.org/wiki/Abbazia_Mater_Ecclesiae)
  * [e-codices](http://www.e-codices.unifr.ch)
  * [Stiftsbibliothek, St. Gallen (CH)](http://www.stibi.ch/)
  * [Stiftsbibliothek, Einsiedeln (CH)](http://kloster-einsiedeln.ch/)
+ * [Bibliothèque municipale de Laon (FR)](http://manuscrit.ville-laon.fr/)
  * [Gna!](http://gna.org)
  * [Github](https://github.com/)
 

Modified: trunk/Build/source/texk/gregorio/gregorio-src/Makefile.am
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/Makefile.am	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/Makefile.am	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,4 +1,4 @@
-# Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+# Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
 #
 # This file is part of Gregorio.
 #

Modified: trunk/Build/source/texk/gregorio/gregorio-src/README.md
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/README.md	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/README.md	2017-04-06 05:08:53 UTC (rev 43706)
@@ -16,11 +16,11 @@
 
 You need a recent and working [TeXLive](https://www.tug.org/texlive/), on top of which you just need to install latest [Gregorio release](https://github.com/gregorio-project/gregorio/releases). See [the website](http://gregorio-project.github.io/installation.html) for more details.
 
-**Note:** Due to a bug in the current release (v2.7-fix-3) of `luaotfload` the documentation cannot be built against TeXLive 2016 (see [#1188](https://github.com/gregorio-project/gregorio/issues/1188)).  As a result, building from a clone of the repository will fail against that version.  A work around for this bug exists ([9fe9139](https://github.com/henryso/gregorio/commit/9fe9139178dce6adebffbae65016800748450b61), but using it breaks compilation under TeXLive 2015 and the bug has been fixed in the latest master for `luaotfload`.  The result is that users should do one of the following:
+**Note:** Due to a bug in the v2.7-fix-3 release of `luaotfload` the documentation cannot be built against TeXLive 2016 if you have that version of `luaotfload` (see [#1188](https://github.com/gregorio-project/gregorio/issues/1188)).  The result is that users should do one of the following:
 
-- Install from the distribution tar ball (recommended for those installing a stable release).
-- Switch to TeXLive 2015 to build the docs.
-- Upgrade your `luaotfload` to a more recent version (v2.8-rc1 or later).
+- Install from the distribution tar ball where the documentation is already built (recommended for those installing a stable release).
+- Switch to TeXLive 2015 (which uses an earlier version of `luaotfload`) to build the docs.
+- Upgrade your `luaotfload` to a more recent version (v2.8 or later).
 
 ## Documentation
 

Modified: trunk/Build/source/texk/gregorio/gregorio-src/UPGRADE.md
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/UPGRADE.md	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/UPGRADE.md	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,11 +2,59 @@
 
 This file contains instructions to upgrade to a new release of Gregorio.
 
+## 5.0
+
+### Auto-compilation
+
+The `autocompile` option is now the default option for the behavior of `\gregorioscore`.  If you want to go back to the old, manual behavior, then you should pass the `nevercompile` option when loading `gregoriotex`.
+
+### Additional fonts
+
+With the addition of more cavum shapes, the number of font options which come with Gregorio (the package) by default has been reduced in order to control the download size.  From now on only Greciliae (and its "-op" Dominican variant) will be installed by default.  The Gregorio and Grana Padano fonts, as well as their "-op" Dominican variants, will now be available as a separate download.  If you were using these fonts, either download `supp_fonts-5_0_0.zip` and install them or switch to Greciliae.
+
+To install the new versions of Gregorio (the font) and Grana Padano, unzip `supp_fonts-5_0_0.zip`, navigate to the uncompressed folder in Terminal (or Command Prompt on Windows) and execute `texlua install_supp_fonts.lua` after you have installed the main Gregorio distribution.  This script will look for the location of Greciliae and copy the other fonts to that location.  If you wish to control the installation of the fonts manually, the script takes an optional argument with one of the following values:
+
+ * `auto` (optional): the same folder as Greciliae
+ * `system`: the appropriate font folder in `$TEXMFLOCAL`
+ * `user`: the appropriate font folder in `$TEXMFHOME`
+ * `<dir>`: the name of an alternate texmf root directory you want to use
+ 
+Additionally, if you are building the fonts yourself from a git clone, `install-gtex.sh` and `install_supp_fonts.lua` will install all the fonts you have built, not just the ones they are normally distributed with.
+
+**Note:** All the above methods assume you only need to access the fonts from within a TeX document (and thus are designed to put them into the correct folder in a texmf tree).  If you want to use the fonts in other programs, then you will need to consult the documentation appropriate to your platform and/or the program and manually move, copy, or link the fonts to the necessary location.
+
+### Ledger lines
+
+As of version 5.0, ledger lines are extended through notes on either side of a ledger line that crosses a stem, as long as the notes are within the same element.
+
+The algorithm for this is simple so it can be predictable, and it cannot take into account spacing adjustments made it TeX.  This means it may not produce the exactly desired results.  In order to get the results you want, you can override the automatic behavior in gabc:
+
+- `[oll:1]` will force an over-the-staff ledger line on a note.
+- `[oll:0]` will suppress an over-the-staff ledger line on a note.
+- `[ull:1]` will force an under-the-staff ledger line on a note.
+- `[ull:0]` will suppress an under-the-staff ledger line on a note.
+
+The other `oll` and `ull` forms take precendence over and will interfere with the above settings, so if you are using them, you may need to adjust them to get the output you want.
+
+Note: You may need to use a construct such as `/!` to keep notes that are separated in the same element.  For example, `abcV` is two elements (`ab` and `cV`), so the ledger line on `b` is not extended to `cV`.  In contrast, `ab/!cV` is one element, so the ledger line on `b` is extended to `cV`.
+
+### End-of-line hyphen protrusion factor
+
+As of version 5.0, the `\gresethyphenprotrusion{percentage}` command is deprecated.  To set this protrusion factor, use `\gresetprotrusionfactor{eolhyphen}{factor}` instead.  Note that the `factor` taken by the new command is a factor rather than the percentage taken by the deprecated command, so for example, use `\gresetprotrusionfactor{eolhyphen}{0.5}` instead of `\gresethyphenprotrusion{50}`.
+
+### Oriscus orientation at the unison
+
+As of version 5.0, when the note after the oriscus is at the same pitch as the oriscus, the oriscus will point towards the first non-unison note after the oriscus or downwards if at the end of the score.  Use the `0` (for downwards) `1` (for upwards) modifiers to force a different orientation.
+
+### Elisions in vowel centering
+
+As of version 5.0, elisions after a vowel centering prefix will not cause the center to be placed on the vowel at the end of the prefix.  Since elisions are unvoiced vowels, this makes more sense than the previous behavior.  However, if this change does not produce your desired output, you may surround the center manually with `{` and `}` in gabc.
+
 ## 4.2
 
 ### Executable file name
 
-In order to facilitate installation alongside TeX Live, the version number is now appended to the gregorio executable file name.  In version 4.2.0, the filename is gregorio-4.2.0.  If you run the executable directly, you will need to modify your procedures and/or scripts to use the new name.  Alternately, creating a symbolic link, if your system supports it, may work for you.
+In order to facilitate installation alongside TeX Live, the version number is now appended to the gregorio executable file name.  In version 4.2.0, the filename is `gregorio-4_2_0`.  If you run the executable directly, you will need to modify your procedures and/or scripts to use the new name.  Alternately, creating a symbolic link, if your system supports it, may work for you.
 
 If you auto-compile or force-compile your GABC files and are *not* using the Gregorio packaged with TeX Live, you will probably need to use the `--shell-escape` option when compiling your `.tex` files.  Alternately, you can add the new filename to your system's `shell_escape_commands` TeX option.
 
@@ -16,10 +64,6 @@
 
 As of version 4.2, the orientation of the stemmed oriscus flexus `(gOe)` is consistent with the unstemmed oriscus flexus `(goe)` in that the oriscus points downwards (since the note which follows is of lower pitch).  If you prefer the oriscus to point upwards, you will need to use the `1` modifier (as in `(gO1e)`), which will force an upward orientation of the oriscus.
 
-### Oriscus orientation at the unision
-
-As of version 4.2, when the note after the oriscus is at the same pitch as the oriscus, the oriscus will point downwards by default.  If you prefer it to point upwards, append the `1` modifier to force the upward orientation.
-
 ### Podatus followed by a virga
 
 As of version 4.2, a podatus followed by a virga of the same or higher pitch as the second note in the podatus (e.g., `(eghv)`) will be kept together, disallowing a line break between the two shapes.  If you would like to allow a line break between the two shapes, use a `/` or some other breakable space between them (e.g., `(eg/hv)`).

Modified: trunk/Build/source/texk/gregorio/gregorio-src/VersionManager.py
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/VersionManager.py	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/VersionManager.py	2017-04-06 05:08:53 UTC (rev 43706)
@@ -5,7 +5,7 @@
 
     See VersionUpdate.py -h for help
 
-    Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+    Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
 
     This file is part of Gregorio.
 
@@ -61,8 +61,8 @@
                   "tex/gregoriotex-nabc.tex",
                   "tex/gregoriotex-nabc.lua",
                   "tex/gregoriosyms.sty",
+                  "tex/gregoriotex-common.tex",
                   "fonts/squarize.py",
-                  "contrib/gregorio-scribus.lua",
                  ]
 
 def get_parser():

Modified: trunk/Build/source/texk/gregorio/gregorio-src/configure.ac
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/configure.ac	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/configure.ac	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,5 +1,5 @@
 dnl Gregorio
-dnl Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+dnl Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
 dnl
 dnl This file is part of Gregorio.
 dnl
@@ -16,8 +16,8 @@
 dnl You should have received a copy of the GNU General Public License
 dnl along with Gregorio.  If not, see <http://www.gnu.org/licenses/>.
 
-AC_INIT([gregorio],[4.2.0],[https://github.com/gregorio-project/gregorio/issues],[gregorio],[http://gregorio-project.github.io/])
-FILENAME_VERSION="4_2_0"
+AC_INIT([gregorio],[5.0.0-rc1],[https://github.com/gregorio-project/gregorio/issues],[gregorio],[http://gregorio-project.github.io/])
+FILENAME_VERSION="5_0_0-rc1"
 AC_SUBST(FILENAME_VERSION)
 AC_DEFINE_UNQUOTED(FILENAME_VERSION, "$FILENAME_VERSION", [version suitable for file names])
 MK=""

Modified: trunk/Build/source/texk/gregorio/gregorio-src/contrib/900_gregorio.xml
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/contrib/900_gregorio.xml	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/contrib/900_gregorio.xml	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,6 +2,8 @@
 <!--
  XML file for using gregorio inside scribus.
  Copyright (C) 2009 Pierre Couderc <pierre at couderc.eu>.
+ Copyright (C) 2010 Elie Roux <elie.roux at telecom-bretagne.eu>
+ Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
 
  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
@@ -20,8 +22,7 @@
  See the different comments in the file to change the default configuration.
 -->
 <editorsettings description="gregorio" icon="gregorio.png">
-    <!-- change the path to gregorio-scribus.lua here. -->
-    <executable command='texlua /usr/share/scribus/editorconfig/gregorio-scribus.lua "%file" "%dir"'/>
+    <executable command="texlua"/>
     <imagefile extension=".pdf"/>
     <highlighter>
         <rule name="gabc header" regex="[a-zA-Z]+:" color="blue" minimal="true"/>
@@ -33,7 +34,8 @@
 (c3) Pó(eh/hi)pu(h)lus(h) Si(hi)on,(hgh.)
     </empty-frame-text>
     <!-- you can change the basic headers there -->
-    <preamble>\documentclass[a4paper,$scribus_grefontsize$]{extarticle}
+    <preamble>data_from_scribus = [==========[% Generated from Scribus
+\documentclass[a4paper,$scribus_grefontsize$]{extarticle}
 \usepackage[left=0cm,top=0cm,right=0cm,bottom=0cm,nohead,nofoot]{geometry}
 \usepackage{color}
 \title{Scribus-Latex-gregorio-File}
@@ -44,8 +46,49 @@
 \setlength{\textwidth}{$scribus_realwidth$ pt}
 \begin{document}
 $scribus_greconf$
+%%% BEGIN GABC %%%
 </preamble>
-    <postamble></postamble>
+    <postamble>]==========]
+require"lfs"
+
+local latexmkbin = "latexmk"
+local lualatexbin = "lualatex"
+
+local function basename(name)
+  return name and string.match(name,"^.+[/\\](.-)$") or name
+end
+
+local f = basename(arg[0])
+
+local texfile = io.open(f .. ".tex", "w")
+local gabcfile = io.open(f .. "-score.gabc", "w")
+local in_tex = true
+local l
+for l in string.gmatch(data_from_scribus, "[^\r\n]+") do
+  if l == "%%% BEGIN GABC %%%" then
+    in_tex = false
+  elseif in_tex then
+    texfile:write(l .. '\n')
+  else
+    gabcfile:write(l .. '\n')
+  end
+end
+
+local format = string.format
+
+texfile:write("\n\\gregorioscore[f]{" .. f .. "-score}\n\\end{document}\n")
+texfile:close()
+gabcfile:close()
+
+print("calling "..latexmkbin.."\n")
+os.exec({
+    latexmkbin,
+    '-g',
+    '-pdf',
+    '-pdflatex=' .. lualatexbin .. ' --interaction=nonstopmode --shell-escape',
+    f
+})
+</postamble>
     <tab type="settings">
         <title>
             <i18n>

Modified: trunk/Build/source/texk/gregorio/gregorio-src/contrib/Makefile.am
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/contrib/Makefile.am	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/contrib/Makefile.am	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,4 +1,4 @@
-# Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+# Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
 #
 # This file is part of Gregorio.
 #
@@ -17,4 +17,4 @@
 
 SUBDIRS = TeXShop
 
-EXTRA_DIST = gprocess gabc.xml gabc.lang gabc.vim 900_gregorio.xml gregorio-scribus.lua gregorio.png gabc-syntax.plist README.md system-setup.command system-setup.bat config-texworks.command
+EXTRA_DIST = gprocess gabc.xml gabc.lang gabc.vim 900_gregorio.xml gregorio.png gabc-syntax.plist README.md system-setup.command system-setup.bat config-texworks.command checkSyllabation.py

Modified: trunk/Build/source/texk/gregorio/gregorio-src/contrib/README.md
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/contrib/README.md	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/contrib/README.md	2017-04-06 05:08:53 UTC (rev 43706)
@@ -20,20 +20,52 @@
    * click `Add` in the `Render Frames`
    * select the file `900_gregorio.xml`
 
-After that you can insert a render frame using Gregorio, and simply 
+After that you can insert a render frame using Gregorio, and simply
 typing gabc (`right-click->edit sources`).
 
 For more details see [the website](http://home.gna.org/gregorio/scribus).
 
+## Syllabation checker
+
+The scripts in this folder allow to check the syllabation of a gabc score against syllabation rules that you must provide.
+
+#### Dependencies
+
+The main script, `checkSyllabation.py` is in Python3, so you obviously need it. It uses the [pyphen](http://pyphen.org/) package. You will also need the hyphenation of the text language in the `libhyphen` format in order to run it.
+
+If you want liturgical Latin hyphenation rules, you can pick those from the [hyphen-la](https://github.com/gregorio-project/hyphen-la) project. They are available in `libhyphen` format on the [webpage](http://gregorio-project.github.io/hyphen-la/).
+
+#### Running the scripts
+
+Once you have the hyphenation rules in the `libhyphen` format, you can check one score by running
+
+```
+checkSyllabation.py -p path/to/file.dic my_file.gabc
+```
+
+where `path/to/file.dic` is the path to the hyphenation rules file (default is `hyph_la_liturgical.dic` in the current directory). You can also analyze all gabc scores of a directory (with subdirectories) by replacing `my_file.gabc` by the name of the directory. By default, the script analyzes the current directory. The script outputs the report to `stdout` on Unix systems, and to `check-syllabation.log` on Windows systems.
+
+You can see more options by running
+
+```
+checkSyllabation.py --help
+```
+
+#### Hyphenation problems
+
+If you encounter problems of hyphenation, meaning you disagree with the proposed hyphenation, please contact the author of the hyphenation rules you are using ([here](https://github.com/gregorio-project/hyphen-la/issues) for `hyphen-la` for example).
+
+If you encounter problems because the script got confused by a gabc construct you are using or has bugs not directly related to hyphenation, please report it on the [gregorio tracker](https://github.com/gregorio-project/gregorio/issues).
+
 ## Kde editors (Kate, Kedit)
 
-You can use `gabc.xml` for syntax highlighting in kate (and Kedit, etc.). To 
+You can use `gabc.xml` for syntax highlighting in kate (and Kedit, etc.). To
 install it, copy the file in `/usr/share/apps/katepart/syntax`. This path
 may vary according to your distribution.
 
 ## Gnome editors (Gedit)
 
-You can use `gabc.lang` for syntax highlighting in GtkSourceView (Gedit, etc.). To 
+You can use `gabc.lang` for syntax highlighting in GtkSourceView (Gedit, etc.). To
 install it, copy the file in `/usr/share/gtksourceview-3.0/language-specs`. This path
 may vary according to your distribution.
 
@@ -45,7 +77,7 @@
 
 To get gabc syntax highlighting in [Vim](http://www.vim.org/):
 
- * copy `gabc.vim` in `/usr/share/vim/vimcurrent/syntax` 
+ * copy `gabc.vim` in `/usr/share/vim/vimcurrent/syntax`
  * add the line `au BufNewFile,BufRead *.gabc setf gabc`
 somewhere near lines of the same type (near line 100 for example) in
 `/usr/share/vim/vimcurrent/filetype.vim`. This will autodetect the filetypes.

Modified: trunk/Build/source/texk/gregorio/gregorio-src/contrib/TeXShop/Makefile.am
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/contrib/TeXShop/Makefile.am	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/contrib/TeXShop/Makefile.am	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,4 +1,4 @@
-# Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+# Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
 #
 # This file is part of Gregorio.
 #

Modified: trunk/Build/source/texk/gregorio/gregorio-src/contrib/TeXShop/auto-configure.command
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/contrib/TeXShop/auto-configure.command	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/contrib/TeXShop/auto-configure.command	2017-04-06 05:08:53 UTC (rev 43706)
@@ -30,44 +30,5 @@
     exit 1
 fi
 
-#Add 'gabc' to the list of file extensions which TeXShop knows
-TeXShopDir=`osascript -e 'POSIX path of (path to app "TeXShop")'`
-
-echo "Adding gabc to list of valid extensions in TeXShop"
-defaults write "$TeXShopDir/Contents/Info.plist" CFBundleDocumentTypes -array-add '<dict>
-<key>CFBundleTypeExtensions</key>
-<array>
-<string>gabc</string>
-</array>
-<key>CFBundleTypeName</key>
-<string>gabc</string>
-<key>CFBundleTypeOSTypes</key>
-<array>
-<string>GABC</string>
-</array>
-<key>CFBundleTypeRole</key>
-<string>Editor</string>
-<key>LSItemContentTypes</key>
-<array>
-<string>com.unknown.gabc</string>
-</array>
-<key>LSTypeIsPackage</key>
-<false/>
-<key>NSDocumentClass</key>
-<string>TSDocument</string>
-<key>NSPersistentStoreTypeKey</key>
-<string>Binary</string>
-</dict>'
-
-echo "Adding Gregorio file extensions to appropriate preference lists"
-#enable syntax coloring and the Typeset button for gabc files
-defaults write TeXShop OtherTeXExtensions -array-add "gabc"
-defaults write TeXShop OtherTeXExtensions -array-add "gtex"
-
-#Add gtex and gaux to the list of aux files deleted with Trash Aux Files
-defaults write TeXShop OtherTrashExtensions -array-add "gtex"
-defaults write TeXShop OtherTrashExtensions -array-add "gaux"
-defaults write TeXShop OtherTrashExtensions -array-add "glog"
-
 echo "Configuration complete"
 exit 0

Added: trunk/Build/source/texk/gregorio/gregorio-src/contrib/checkSyllabation.py
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/contrib/checkSyllabation.py	                        (rev 0)
+++ trunk/Build/source/texk/gregorio/gregorio-src/contrib/checkSyllabation.py	2017-04-06 05:08:53 UTC (rev 43706)
@@ -0,0 +1,156 @@
+#! /usr/bin/env python3
+
+"""
+    A script to check the syllabation of a gabc file
+
+    See checkSyllabation.py -h for help
+
+    Copyright (C) 2016-2017 Elie Roux
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy of
+    this software and associated documentation files (the "Software"), to deal in
+    the Software without restriction, including without limitation the rights to
+    use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+    of the Software, and to permit persons to whom the Software is furnished to do
+    so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE.
+
+    Depends on pyphen: http://pyphen.org/
+    You also need the hyph_la_liturgical.dic file. To get it, get the
+      hyphen-la project on https://github.com/gregorio-project/hyphen-la
+      and run "make" in the "patterns" directory.
+
+"""
+
+import sys
+import re
+import argparse
+import pyphen
+import os
+import glob
+
+DEFAULT_OUTFILE = False
+if os.name == 'nt':
+    DEFAULT_OUTFILE = 'check-syllabation.log'
+
+def get_parser():
+    "Return command line parser"
+    parser = argparse.ArgumentParser(
+        description='A script to check the syllabation of gabc files')
+    parser.add_argument('-p', '--pat-path',
+                        help='hyphenation pattern file',
+                        action='store', default="hyph_la_liturgical.dic")
+    parser.add_argument('-o', '--outfile',
+                        help='The file that will contain the report',
+                        action='store', default=DEFAULT_OUTFILE)
+    parser.add_argument('-v', '--verbose',
+                        help='Report also files without error',
+                        action='store_true', default=False)
+    parser.add_argument('path',
+                        help='Path to a gabc file or a directory containing gabc files',
+                        action='store', default=".")
+    return parser
+
+def deacc(accstr):
+  return accstr.replace('á', 'a').replace('é', 'e').replace('í', 'i').replace('ó', 'o').replace('ú', 'u').replace('ý', 'y').replace('́', '').replace('ǽ', 'æ')
+
+def checkwords(words_list, hyphenator):
+    errors = []
+    for word in words_list:
+        initialword = deacc(word.lower())
+        if initialword.find('-') == -1:
+            # no need for noise
+            continue
+        correctword = hyphenator.inserted(initialword.replace('-',''))
+        if correctword != initialword:
+            errors.append( (initialword,correctword) )
+    return errors
+
+def get_words_list(gabc_content):
+    gabc_content = gabc_content.split('%%\n', 1)[1] # no headers
+    gabc_content = re.sub(r'%.*\n', '', gabc_content)
+    gabc_content = gabc_content.replace('\n', ' ').replace('\r', ' ').replace('{','')
+    gabc_content = gabc_content.replace('}','').replace('<sp>\'ae</sp>', 'ǽ')
+    gabc_content = gabc_content.replace('<sp>oe</sp>', 'œ').replace('<sp>\'oe</sp>', 'œ')
+    gabc_content = gabc_content.replace('<sp>ae</sp>', 'æ').replace('<sp>\'æ</sp>', 'ǽ')
+    gabc_content = gabc_content.replace('<sp>\'œ</sp>', 'œ')
+    gabc_content = re.sub(r'\([^\)]*\)', '-', gabc_content)
+    gabc_content = re.sub(r'<\/?[ibuec]>', '', gabc_content)
+    gabc_content = re.sub(r'<\/?sc>', '', gabc_content)
+    gabc_content = re.sub(r'<\/?eu>', '', gabc_content)
+    gabc_content = re.sub(r'<v>[^<]*<\/v>', '', gabc_content)
+    gabc_content = re.sub(r'<v>[^>]*<\/v>', '', gabc_content)
+    gabc_content = re.sub(r'<sp>[^>]*<\/sp>', '', gabc_content)
+    gabc_content = re.sub(r'<alt>[^>]*<\/alt>', '', gabc_content)
+    gabc_content = re.sub(r'\[[^\]]*\]', '', gabc_content)
+    gabc_content = re.sub(r'-+', '-', gabc_content)
+    gabc_content = re.sub(r'-?(\s+|$)', ' ', gabc_content)
+    gabc_content = re.sub(r'[^a-záéíóæúýœǽ\u0301 -]', '', gabc_content, flags=re.IGNORECASE)
+    gabc_content = re.sub(r'(^|\s+)-', ' ', gabc_content)
+    return gabc_content.split()
+
+def get_file_list(path):
+    if os.path.isfile(path):
+        return [path]
+    elif os.path.isdir(path):
+        files = glob.glob(os.path.join(path, '**/*.gabc'), recursive=True)
+        files = sorted(files)
+        return files
+    else:
+        print('Error! Cannot find '+path, file=sys.stderr)
+        sys.exit(1)
+
+def check_file(filepath, hyphenator, outfd, report_no_error=False):
+    words_list = []
+    with open(filepath, 'r', encoding='utf8') as inputf:
+        words_list = get_words_list(inputf.read())
+    errors = checkwords(words_list, hyphenator)
+    nb_errors = len(errors)
+    if nb_errors > 0 or report_no_error :
+        outfd.write('analyzing '+filepath+':\n')
+        if nb_errors == 0:
+            outfd.write('  no error!\n')
+        else:
+            for t in errors:
+                outfd.write('  '+t[0]+' should be '+t[1]+'\n')
+        outfd.write('\n')
+    return nb_errors
+
+def main():
+    "Main function"
+    parser = get_parser()
+    if len(sys.argv) == 1:
+        parser.print_help()
+        sys.exit(1)
+    args = parser.parse_args()
+    hyphenator = pyphen.Pyphen(filename=args.pat_path,left=1,right=1)
+    outfd = sys.stdout
+    if args.outfile != False:
+        outfd = open(args.outfile, 'w', encoding='utf8')
+    file_list = get_file_list(args.path)
+    nb_errors = 0
+    for f in file_list:
+        nb_errors += check_file(f, hyphenator, outfd, args.verbose)
+    if len(file_list) > 1 and nb_errors > 0:
+        outfd.write('Total errors: '+str(nb_errors)+'\n')
+    elif nb_errors == 0 and not args.verbose:
+        outfd.write('No error!\n')
+    if outfd is not sys.stdout:
+        outfd.close()
+    if nb_errors == 0:
+        sys.exit(0)
+    else:
+        sys.exit(2)
+
+if __name__ == "__main__":
+    main()

Modified: trunk/Build/source/texk/gregorio/gregorio-src/contrib/gabc.lang
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/contrib/gabc.lang	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/contrib/gabc.lang	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
 <!--
 
  Author: Elie Roux <elie.roux at telecom-bretagne.fr>
- Copyright (C) 2008 Elie Roux <elie.roux at telecom-bretagne.fr>
+ Copyright (C) 2008-2017 Elie Roux <elie.roux at telecom-bretagne.fr>
 
  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by

Modified: trunk/Build/source/texk/gregorio/gregorio-src/contrib/gabc.vim
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/contrib/gabc.vim	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/contrib/gabc.vim	2017-04-06 05:08:53 UTC (rev 43706)
@@ -15,7 +15,7 @@
 syn match gabcAlteration "[\<\>~xy#vVwWqQR\-Ss\.+]" contained
 syn match gabcAlteration "_[0-5]*" contained
 syn match gabcAlteration "[oO'\.][01]\?" contained
-syn match gabcAlteration "r[0-5]\?" contained
+syn match gabcAlteration "r[0-8]\?" contained
 syn match gabcClef "[cf]b\?[1-5]" contained
 syn match gabcTextMarkup "</\?e>" contained
 syn match gabcTextMarkup "</\?b>" contained
@@ -37,6 +37,9 @@
 syn match gabcSpace "Z[-+]\?" contained
 syn match gabcSpace "/\[[^\]]*\]" contained extend
 syn match gabcCommand "@\@<!\[[^\]]*\]" contained extend
+syn match gabcCommand "[{}]" contained extend
+syn match gabcBracket "\[\[" contained
+syn match gabcBracket "\]\]" contained
 
 syn region gabcComment start="%" end="$" keepend extend
 syn region gabcAlt matchgroup=gabcTextMarkup start="<alt>" end="</alt>"
@@ -48,7 +51,7 @@
 syn region gabcNabc matchgroup=gabcNabcCut start="|" end="[|)]" keepend
 syn cluster gabcFusible contains=gabcBasicNote,gabcAlteration,gabcBar,gabcSpace,
             \gabcComment,gabcCommand,gabcNoteError,gabcFuse,
-            \gabcTextOrNoteMarkup,gabcClef,gabcNabc
+            \gabcTextOrNoteMarkup,gabcClef,gabcNabc,gabcBracket
 syn region gabcFuseGroup matchGroup=gabcFuseGroup start="@\[" end="\]"
             \ contains=@gabcFusible,gabcFuseEnd contained keepend
 syn region gabcNotes matchgroup=gabcNote start="(" end=")"
@@ -79,6 +82,7 @@
 hi def link gabcBar                 Special
 hi def link gabcSpace               Special
 hi def link gabcNabcCut             Delimiter
+hi def link gabcBracket             Delimiter
 hi def link gabcFuse                Constant
 hi def link gabcFuseGroup           Constant
 hi def link gabcFuseEnd             Constant

Modified: trunk/Build/source/texk/gregorio/gregorio-src/contrib/gprocess
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/contrib/gprocess	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/contrib/gprocess	2017-04-06 05:08:53 UTC (rev 43706)
@@ -14,7 +14,7 @@
 # --
 #
 # v0.1
-# Copyright (C) 2008 Richard Chonak <chonak at yahoo.com>
+# Copyright (C) 2008-2017 Richard Chonak <chonak at yahoo.com>
 #
 
 # This program is free software: you can redistribute it and/or modify

Deleted: trunk/Build/source/texk/gregorio/gregorio-src/contrib/gregorio-scribus.lua
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/contrib/gregorio-scribus.lua	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/contrib/gregorio-scribus.lua	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,95 +0,0 @@
-#!/usr/bin/env texlua
---[[
-Gregorio/Scribus script.
-Copyright (C) 2010 Elie Roux <elie.roux at telecom-bretagne.eu>
-
-This program 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.
-
-This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
-
-You must run this program with texlua, if possible under TeXLive 2010 (or later).
-This program allows gregorio to be integrated in Scribus.
---]]
-
-require"lfs"
-
-local gregoriobin = 'gregorio-4_2_0' -- FILENAME_VERSION
-local lualatexbin = "lualatex"
-
-local function basename(name)
-  return name and string.match(name,"^.+[/\\](.-)$") or name
-end
-
-local f = arg[1]
-local dir = arg[2]
-local current = ""
-
--- first we need to rebuild the arguments that are lost in pieces
-for i, a in ipairs(arg) do
-  if a:sub(1,1) == '"' then
-    if a:sub(-1,-1) == '"' then
-      current = a:sub(2, -2)
-      if not f then
-	f = current
-      else
-	dir = current
-      end
-    else
-      current = a:sub(2, -1)
-    end
-  elseif a:sub(-1,-1) == '"' then
-    current = current..' '..a:sub(1, -2)
-    if not f then
-      f = current
-    else
-      dir = current
-    end
-    current = ""
-  else
-    current = current..' '..a
-  end
-end
-
-if dir then
-  lfs.chdir(dir)
-end
-
-local pathbase = basename(f)
-
-local fd = io.open(f, "r")
-local texfile = io.open(f..".tex", "w")
-local gabcfile = io.open(f.."-score.gabc", "w")
-for l in fd:lines() do
-  if string.match(l, "^\\") then
-    texfile:write(l..'\n')
-  elseif l=="\n" then
-  else
-    gabcfile:write(l..'\n')
-  end
-end
-
-local format = string.format
-
-texfile:write(format("\n\\gregorioscore{%s-score.gtex}\n\\end{document}\n", pathbase))
-texfile:close()
-gabcfile:close()
-
-print(format("calling 'gregorio %s-score.gabc'\n", f))
-os.remove(format("%s-score.gtex", f))
-os.spawn(format("%s %s-score.gabc", gregoriobin, pathbase))
-if not lfs.isfile(format("%s-score.gtex", pathbase)) then
-  print("error: gregorio did not work as expected\n")
-  exit(1)
-end
-
-print(format("calling 'lualatex --interaction nonstopmode %s.tex'\n", pathbase))
-os.spawn(format("%s --interaction=nonstopmode %s.tex", lualatexbin, pathbase))

Modified: trunk/Build/source/texk/gregorio/gregorio-src/contrib/system-setup.bat
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/contrib/system-setup.bat	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/contrib/system-setup.bat	2017-04-06 05:08:53 UTC (rev 43706)
@@ -96,6 +96,7 @@
 gregoriotex-signs.tex ^
 gregoriotex-spaces.tex ^
 gregoriotex-syllable.tex ^
+gregoriotex-common.tex ^
 gregoriotex-symbols.tex
 
 for %%G in (%files%) do (
@@ -171,12 +172,24 @@
 
 :: Font Files
 set files=greciliae.ttf ^
+greciliae-hollow.ttf ^
+greciliae-hole.ttf ^
 greciliae-op.ttf ^
+greciliae-op-hollow.ttf ^
+greciliae-op-hole.ttf ^
 greextra.ttf ^
 gregorio.ttf ^
+gregorio-hollow.ttf ^
+gregorio-hole.ttf ^
 gregorio-op.ttf ^
+gregorio-op-hollow.ttf ^
+gregorio-op-hole.ttf ^
 granapadano.ttf ^
+granapadano-hollow.ttf ^
+granapadano-hole.ttf ^
 granapadano-op.ttf ^
+granapadano-op-hollow.ttf ^
+granapadano-op-hole.ttf ^
 gregall.ttf
 
 for %%G in (%files%) do (

Modified: trunk/Build/source/texk/gregorio/gregorio-src/contrib/system-setup.command
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/contrib/system-setup.command	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/contrib/system-setup.command	2017-04-06 05:08:53 UTC (rev 43706)
@@ -130,6 +130,7 @@
 gregoriotex-syllable.tex
 gregoriotex-symbols.lua
 gregoriotex-symbols.tex
+gregoriotex-common.tex
 gregoriotex.lua"
 
 for f in $files
@@ -158,12 +159,24 @@
 
 # Font Files
 files="greciliae.ttf
+greciliae-hollow.ttf
+greciliae-hole.ttf
 greciliae-op.ttf
+greciliae-op-hollow.ttf
+greciliae-op-hole.ttf
 greextra.ttf
 gregorio.ttf
+gregorio-hollow.ttf
+gregorio-hole.ttf
 gregorio-op.ttf
+gregorio-op-hollow.ttf
+gregorio-op-hole.ttf
 granapadano.ttf
+granapadano-hollow.ttf
+granapadano-hole.ttf
 granapadano-op.ttf
+granapadano-op-hollow.ttf
+granapadano-op-hole.ttf
 gregall.ttf"
 
 for f in $files

Modified: trunk/Build/source/texk/gregorio/gregorio-src/doc/Appendix_Font_Tables.tex
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/doc/Appendix_Font_Tables.tex	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/doc/Appendix_Font_Tables.tex	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,7 +1,7 @@
 % !TEX root = GregorioRef.tex
 % !TEX program = LuaLaTeX+se
 %
-% Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
 %
 % This file is part of Gregorio.
 %
@@ -24,60 +24,66 @@
 
 \subsection{Score Font Glyphs}
 
-The following table lists all of the score glyphs available in the greciliae,
-gregorio, and granapadano fonts, and any variant glyphs contained within.  If a
-variant glyph is unavailable in a given font, it will be listed as
-{\itshape\small N/A} under the appropriate column.  Some of the glyphs listed
-are representative of sets of glyphs differentiated by the ambitus of the
-component notes.  These are listed with English words for the numbers in
-italics, such as {\itshape TwoTwo}.  The gabc column lists a gabc sequence that
-uses the given glyph.  If there are small, slanted characters, such as
-\excluded{gege} in this column, they produce glyphs additional to the given
-glyph, but are necessary for the given glyph to appear.  Note: glyphs for the
-horizontal episema (activated using {\ttfamily\char`_} in gabc) are excluded from
-this table.
+The following table lists all of the score glyphs available in the greciliae
+font and any variant glyphs contained within.  Some of the glyphs listed are
+representative of sets of glyphs differentiated by the ambitus of the component
+notes.  These are listed with English words for the numbers in italics, such as
+{\itshape TwoTwo}.  The gabc column lists a gabc sequence that uses the given
+glyph.  If there are small, slanted characters, such as \excluded{gege} in this
+column, they produce glyphs additional to the given glyph, but are necessary
+for the given glyph to appear.  Note: glyphs for the horizontal episema
+(activated using {\ttfamily\char`_} in gabc) are excluded from this table.
 
 \newcommand\ScoreFontTable[1]{%
-	\begin{longtable}{llccccccc}
+	\begin{longtable}{llc|cc|lc|cc}
 			\caption{Score Glyphs}\\
-			&&&&&\multicolumn{4}{c}{\bfseries Variants}\\
-			\hhline{>{\arrayrulecolor{lightgray}}----->{\arrayrulecolor{black}}----}
+			&
+			&%
+			&%
+			\multicolumn{2}{c|}{\bfseries Variants}&
+			\multicolumn{2}{c|}{\bfseries Cavum}&
+			\multicolumn{2}{c}{\bfseries Cavum Variants}\\
+			\hhline{>{\arrayrulecolor{lightgray}}--->{\arrayrulecolor{black}}------}
 			{\bfseries Glyph Name}&%
 			{\scriptsize\bfseries Sample gabc}&%
-			{\scriptsize\bfseries greciliae}&%
-			{\scriptsize\bfseries gregorio}&%
-			{\scriptsize\bfseries granapadano}&%
+			{\scriptsize\bfseries Glyph}&%
 			{\scriptsize\bfseries Name}&%
-			{\scriptsize\bfseries greciliae}&%
-			{\scriptsize\bfseries gregorio}&%
-			{\scriptsize\bfseries granapadano}\\
+			{\scriptsize\bfseries Glyph}&%
+			{\scriptsize\bfseries Sample gabc}&%
+			{\scriptsize\bfseries Glyph}&%
+			{\scriptsize\bfseries Name}&%
+			{\scriptsize\bfseries Glyph}\\
 			\hline
 		\endfirsthead
-			&&&&&\multicolumn{4}{c}{\bfseries Variants}\\
-			\hhline{>{\arrayrulecolor{lightgray}}----->{\arrayrulecolor{black}}----}
+			&%
+			&%
+			&%
+			\multicolumn{2}{c|}{\bfseries Variants}&
+			\multicolumn{2}{c|}{\bfseries Cavum}&
+			\multicolumn{2}{c}{\bfseries Cavum Variants}\\
+			\hhline{>{\arrayrulecolor{lightgray}}--->{\arrayrulecolor{black}}------}
 			{\bfseries Glyph Name}&%
 			{\scriptsize\bfseries Sample gabc}&%
-			{\scriptsize\bfseries greciliae}&%
-			{\scriptsize\bfseries gregorio}&%
-			{\scriptsize\bfseries granapadano}&%
+			{\scriptsize\bfseries Glyph}&%
 			{\scriptsize\bfseries Name}&%
-			{\scriptsize\bfseries greciliae}&%
-			{\scriptsize\bfseries gregorio}&%
-			{\scriptsize\bfseries granapadano}\\
+			{\scriptsize\bfseries Glyph}&%
+			{\scriptsize\bfseries Sample gabc}&%
+			{\scriptsize\bfseries Glyph}&%
+			{\scriptsize\bfseries Name}&%
+			{\scriptsize\bfseries Glyph}\\
 			\hline
 		\endhead
 		\directlua{GregorioRef.emit_score_glyphs(#1)}
 	\end{longtable}
 }%
-\ScoreFontTable{'greciliae','gregorio','granapadano'}
+\ScoreFontTable{'greciliae', 'greciliaeHollow'}
 
 \subsection{Dominican Score Font Glyphs}
 
 The following table lists all of the score glyphs available in the Dominican
-versions of the greciliae, gregorio, and granapadano fonts in the same vein as
-the prior table.
+versions of the greciliae fonts in the same vein as the prior table.
 
-\ScoreFontTable{'greciliaeOp','gregorioOp','granapadanoOp'}
+\ScoreFontTable{'greciliaeOp', 'greciliaeOpHollow'}
 
 \subsection{Extra Glyphs}\label{subsec:greextra}
 

Modified: trunk/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_User.tex
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_User.tex	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_User.tex	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,7 +1,7 @@
 % !TEX root = GregorioRef.tex
 % !TEX program = LuaLaTeX+se
 %
-% Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
 %
 % This file is part of Gregorio.
 %
@@ -38,7 +38,7 @@
 \begin{tabular}{lp{10cm plus .5cm}}
 	Argument & Description \\
 	\hline
-	\texttt{debug} & Debug messages will be printed to the output log.  Can also be specified as \verb:debug={<types>}:, in which case only messages of the types listed will be printed to the output log.\\
+	\texttt{debug} & Debug messages will be printed to the output log.  Can also be specified as \verb:debug={<types>}:, in which case only messages of the categories (see \nameref{DebugCategory}) listed will be printed to the output log.\\
 	\hline
 	\texttt{nevercompile} & Default. The classic behavior of Gregorio\TeX. The user is %
 		responsible for compiling gabc scores into gtex files.\\
@@ -271,12 +271,18 @@
 Changes one of Gregorio\TeX’s distances for a given line in the next included score.  This works with \texttt{spaceabovelines}, \texttt{spacebeneathtext}, and \texttt{spacelinestext}.
 
 \begin{argtable}
-	\#1 & integer & The number of the line in the next score to be adjusted.\\
-	\#2 & string & The name of the distance to be changed.  See \nameref{distances} below.\\
-	\#3 & string & The distance in string format.  \textbf{Note:} You cannot use a length register for this argument.  You \emph{must} use a string because of the way that Gregorio\TeX\ handles spaces.\\
+	\#1 & list of integers & A comma-separated list of line numbers in the next
+													 score to be adjusted.\\
+	\#2 & string & The name of the distance to be changed.  See
+								 \nameref{distances} below.\\
+	\#3 & string & The distance in string format.  \textbf{Note:} You cannot use
+								 a length register for this argument.  You \emph{must} use a
+								 string because of the way that Gregorio\TeX\ handles spaces.\\
 	\#4 & \texttt{fixed} & Distance will not scale when staff size is changed.\\
 	& \texttt{scalable} & Distance will scale when staff size is changed.\\
-	& \texttt{inherited} & Distance will inherit its value from another distance.  When this argument is used, then \#3 should be the name of another Gregorio\TeX\ distance.
+	& \texttt{inherited} & Distance will inherit its value from another
+												 distance.  When this argument is used, then \#3 should
+												 be the name of another Gregorio\TeX\ distance.
 \end{argtable}
 
 \macroname{\textbackslash grescaledim}{\{\#1\}\{\#2\}}{gregoriotex-spaces.tex}
@@ -298,6 +304,17 @@
 	\#2 & integer & The new value.\\
 \end{argtable}
 
+\macroname{\textbackslash grechangenextscorelinecount}{\{\#1\}\{\#2\}\{\#3\}}{gregoriotex-spaces.tex}
+Changes one of Gregorio\TeX’s counts or penalties for a given line in the next included score.
+
+\begin{argtable}
+	\#1 & list of integers & A comma-separated list of line numbers in the next
+													 score to be adjusted.\\
+	\#2 & string & The name of the count to be changed.  See \nameref{counts} and
+								 \nameref{penalties} below.\\
+	\#3 & integer & The new value.\\
+\end{argtable}
+
 \macroname{\textbackslash greloadspaceconf}{\{\#1\}}{gregoriotex-spaces.tex}
 Macro to load a space configuration file.  Space configuration file names have the format \verb=gsp-identifier.tex= and must be in the same directory as your project or in your texmf directory.
 
@@ -436,6 +453,14 @@
 
 The two first arguments are the same as \texttt{\textbackslash gresetgregoriofont}. The third argument is an integer representing the scaling factor, where the one used by \texttt{\textbackslash gresetgregoriofont} is 100000.
 
+\macroname{\textbackslash greloadholehollowfonts}{\{\#1\}}{gregoriotex-main.tex}
+
+If set to false, will not load the \texttt{hollow} and \texttt{hole} variants of the next font to load. Use it before loading third party fonts not having these variants (rare case).
+
+\begin{argtable}
+	\#1 & string & \texttt{true} or \texttt{false}.\\
+\end{argtable}
+
 \subsubsection{Glyph Alteration}
 In addition to the normal glyphs loaded by the choice of font, Gregorio\TeX\ also supports several methods for fine tuning the choice of glyphs.  Using the below functions, you can choose from alternative glyphs which are already built into Gregorio\TeX\ or import custom glyphs you have designed yourself.
 
@@ -496,6 +521,36 @@
 	\greresetglyph{TorculusResupinus*}
 \end{latexcode}
 
+\macroname{\textbackslash grechangecavumglyph}{\{\#1\}\{\#2\}\{\#3\}[\optional{\#4}][\optional{\#5}]}{gregoriotex-main.tex}
+Substitutes the given Gregorio\TeX\ score cavum glyphs with the specified glyphs
+from the specified font.
+
+\begin{argtable}
+	\#1 & string & The name of the Gregorio\TeX\ glyph to replace.\\
+	\#2 & string & The name of the font to use for the cavum glyph.\\
+	\#3 & number & The code point of the cavum glyph to use.\\
+	& \texttt{.}string & The name of the variant (appended to \#1) to use for the cavum glyph.\\
+	& string & (any other string) The name of the cavum glyph to use.\\
+	\#4 & string & The name of the font to use for the glyph to fill in the cavum hole.\\
+	\#5 & number & The code point of the glyph to use to fill in the cavum hole.\\
+	& \texttt{.}string & The name of the variant (appended to \#1) to use to fill in the the cavum hole.\\
+	& string & (any other string) The name of the glyph to use to fill in the cavum hole.\\
+\end{argtable}
+
+\textbf{Nota Bene:} The usage of wildcards (\texttt{*}s) for \texttt{\#1},
+\texttt{\#2}, and \texttt{\#4} is similar to \verb=\grechangeglyph=.
+
+\macroname{\textbackslash greresetcavumglyph}{\{\#1\}}{gregoriotex-main.tex}
+Removes a pair of Gregorio\TeX\ score cavum glyph substitution, restoring them
+back to their original form.
+
+\begin{argtable}
+	\#1 & string & The name of the Gregorio\TeX\ cavum glyph to restore.\\
+\end{argtable}
+
+\textbf{Nota Bene:} The usage of wildcards (\texttt{*}s) for \texttt{\#1} is
+similar to \verb=\greresetcavumglyph=.
+
 \macroname{\textbackslash gredefsymbol}{\{\#1\}\{\#2\}\{\#3\}}{gregoriotex-symbols.tex}
 Defines (or redefines) a \TeX\ control sequence to be a non-score symbol.
 If defined this way, the symbol will scale with the text font.
@@ -729,7 +784,8 @@
 	\stylename{abovelinestext} & above line text (\texttt{<alt></alt>} in gabc, appears above the staff) & normal\\
 	\stylename{additionalstafflines} & short lines behind notes above or below the staff & special\footnotemark[1]\\
 	\stylename{annotation} & the annotation & none\\
-	\stylename{commentary} & the commentary & {\footnotesize\it footnote-size italics}\\
+	\stylename{commentary} & the commentary & {\footnotesize\it footnote-size italics} (\LaTeX)\\
+	&& {\textit{italics}} (Plain \TeX)\\
 	\stylename{elision} & elisions (\texttt{<e></e>} in gabc) & {\textit{\small small-size italics}} (\LaTeX)\\
 											&& {\textit{italics}} (Plain \TeX)\\
 	\stylename{firstsyllable} & the first syllable of the score excluding the score initial & none\\
@@ -913,6 +969,40 @@
 												syllables.\\
 \end{argtable}
 
+\macroname{\textbackslash gresetprotrusionfactor}{\{\#1\}\{\#2\}}{gregoriotex-spaces.tex}
+Sets a global protrusion factor.  Depending on the first argument, these
+protrusion factors will be used for various characters as well as for
+\verb=<pr>= tags with no specified protrusion factor.  A protrusion factor of 0
+means no protrusion and 1 means full protrusion.  Any floating-point value from
+0 to 1 is allowed.  All of these global protrusion factors may be set in
+gsp-default.tex or in your own \TeX\ files.
+
+\begin{argtable}
+	\#1 & \texttt{,}         & Sets the automatic protrusion factor for a comma at
+														 the end of a syllable.  Default is
+														 \GreProtrusionFactor{comma}.\\
+			& \texttt{;}         & Sets the automatic protrusion factor for a
+														 semicolon at the end of a syllable.  Default is
+														 \GreProtrusionFactor{semicolon}.\\
+			& \texttt{:}         & Sets the automatic protrusion factor for a colon at
+														 the end of a syllable.  Default is
+														 \GreProtrusionFactor{colon}.\\
+			& \texttt{.}         & Sets the automatic protrusion factor for a period
+														 at the end of a syllable.  Default is
+														 \GreProtrusionFactor{period}.\\
+			& \texttt{eolhyphen} & Sets the protrusion factor for a hyphen at
+														 the end of a line.  Default is
+														 \GreProtrusionFactor{eolhyphen}.  This protrusion
+														 factor only applies to hyphens inserted by the Lua
+														 pass), so use it with caution.\\
+			& \texttt{default}   & Sets the default protrusion factor for a
+														 \verb=<pr>= tag in gabc.  Default is
+														 \GreProtrusionFactor{default}.\\
+	\#2 & factor             & The desired protrusion factor, a floating point
+														 value from 0 (no protrusion) to 1 (full
+														 protrusion).  See defaults above.\\
+\end{argtable}
+
 \subsubsection{End of Line Behavior}
 While Gregorio\TeX\ will automatically wrap scores to fit your page, there are several ways to fine tune that line breaking behavior with the following commands.
 
@@ -996,6 +1086,26 @@
 	& \texttt{disable} & The shifts are not applied.
 \end{argtable}
 
+\macroname{\textbackslash grebolshiftcleftype}{\{\#1\}}{gregoriotex-spaces.tex}
+Macro to determine how notes should be left aligned in the case where clefs of different widths appear in the same score.
+
+\begin{argtable}
+	\#1 & \texttt{largest} & The notes are aligned as if all clefs had the width of the largest clef (default)\\
+	& \texttt{current} & The notes are aligned on the current clef, which leads to unaligned notes. This was the default of Gregorio < \texttt{5.0}.
+\end{argtable}
+
+\macroname{\textbackslash grelocalbolshiftcleftype}{\{\#1\}}{gregoriotex-spaces.tex}
+Equivalent of \verb=\grebolshiftcleftype= but valid only until the next end of a score, and with more options. This can be used before a score or even inside a \verb=<v>verbatim</v>= in gabc for corner cases like different alignment on a score taking two pages.
+
+\begin{argtable}
+	\#1 & \texttt{largest} & The notes are aligned as if all clefs had the width of the largest clef (default)\\
+	& \texttt{current} & The notes are aligned on the current clef, which leads to unaligned notes\\
+	& \texttt{f} & Force left alignment of notes as if all clef were f clef\\
+	& \texttt{c} & Idem with c clef\\
+	& \texttt{fb} & Idem with flatted f clef\\
+	& \texttt{cb} & Idem with flatted c clef\\
+\end{argtable}
+
 \macroname{\textbackslash gresetlastline}{\{\#1\}}{gregoriotex-main.tex}
 Macro to determine whether the last line of the score should be justified or not.
 
@@ -1056,6 +1166,15 @@
 
 \textbf{Nota Bene:} If the notes are set to be invisible, then bar lines, rythmic signs, and the like will also be invisible.  However, the staff lines and clefs will still show up (since their visibility is controlled by other settings).
 
+\macroname{\textbackslash gresetnabc}{\{\#1\}\{\#2\}}{gregoriotex-nabc.tex}
+Sets the visibility of a nabc voice.
+
+\begin{argtable}
+	\#1 & integer & The nabc voice number.\\
+	\#2 & \texttt{visible} & Notes are visible (default).\\
+	& \texttt{invisible} & Notes are not visible.\\
+\end{argtable}
+
 \macroname{\textbackslash greprintsigns}{\{\#1\}\{\#2\}}{gregoriotex-signs.tex}
 Macro to prevent rythmic signs from printing (all signs are printed by default):
 
@@ -1096,15 +1215,6 @@
 	& \texttt{zero} & The hyphen is considered to take up no space
 \end{argtable}
 
-\macroname{\textbackslash gresethyphenprotrusion}{\{\#1\}}{gregoriotex-spaces.tex}
-Sets the protrusion factor of hyphens at end of lines. The default value is 50, a good compromise in the tested scores.
-
-\begin{argtable}
-	\#1 & \texttt{number} & The protrusion factor, percent
-\end{argtable}
-
-Note that a proper interface for setting protrusion factor of punctuation signs might appear in the next version, deprecating this one. Also, this protrusion factor does not apply to all hyphens (only those inserted by the Lua pass), so use it with caution.
-
 \subsubsection{Clef Visibility}
 
 \macroname{\textbackslash gresetclef}{\{\#1\}}{gregoriotex-signs.tex}
@@ -1241,10 +1351,10 @@
 
 \begin{gcount}{additionaltopspacethreshold}
 The threshold above which we start accounting notes above lines for additional
-vertical space. For instance with a threshold of \texttt{2}, notes with a pitch
-of \texttt{k} and \texttt{l} will not interfere with the space above lines.
-Set it to a high value if you don't want high notes to interfere with space
-above lines.
+vertical space. For instance with a threshold of \texttt{2} and four line
+staves, notes with a pitch of \texttt{k} and \texttt{l} will not interfere with
+the space above lines.  Set it to a high value if you don't want high notes to
+interfere with space above lines.
 \end{gcount}
 
 \begin{gcount}{additionaltopspacealtthreshold}
@@ -1258,6 +1368,13 @@
 baseline.
 \end{gcount}
 
+\begin{gcount}{noteadditionalspacelinestextthreshold}
+The number of low notes which will add on the
+\texttt{noteadditionalspacelinestext} space.  For instance, with a threshold of
+\texttt{2}, every note below \texttt{c} will add {noteadditionalspacelinestext}
+space for each pitch needed below \texttt{c}, accounting for the various signs.
+\end{gcount}
+
 \subsection{Distances}\label{distances}
 
 Each of the following distances controls some aspect of the spacing of the Gregorio\TeX\ score.  They are changed using \verb=\grechangedim=, documented above.  If the distance permits a rubber value, then the default value will indicate the stretch and shrink (even if they are zero by default).  Distances whose default value does not include a stretch or shrink may not take a rubber value.
@@ -1498,6 +1615,10 @@
 Space to force the initial width to.  Ignored when 0.
 \end{gdimension}
 
+\begin{gdimension}{minimalinitialwidth}
+Minimum width of the initial.  Ignored when \texttt{manualinitialwidth} is non-zero.
+\end{gdimension}
+
 \begin{gdimension}{annotationseparation}
 This space is the one between lines in the annotation (text above the initial).
 
@@ -1553,6 +1674,11 @@
 The space between the lines and the bottom of the text.
 \end{gdimension}
 
+\begin{gdimension}{noteadditionalspacelinestext}
+The space added between the lines and the bottom of the text for every pitch
+below the \texttt{noteadditionalspacelinestextthreshold}.
+\end{gdimension}
+
 \begin{gdimension}{spacebeneathtext}
 The space beneath the text.
 \end{gdimension}
@@ -1566,7 +1692,7 @@
 \end{gdimension}
 
 \begin{gdimension}{braceshift}
-An additional shift you can give to the brace above the bars.
+An additional shift you can give to the brace above the staff.
 \end{gdimension}
 
 \begin{gdimension}{curlybraceaccentusshift}
@@ -1657,6 +1783,16 @@
 Distance to place a ``rare'' sign above the top space in a score.
 \end{gdimension}
 
+\begin{gdimension}{bracketupshift}
+Distance to shift a bracket up when the lowest note in the brackets is on a
+line or below the staff.
+\end{gdimension}
+
+\begin{gdimension}{bracketdownshift}
+Distance to shift a bracket down when the lowest note in the brackets is
+neither on a line nor below the staff.
+\end{gdimension}
+
 \begin{gdimension}{parskip}
 The effective \verb=\parskip= inside of a score.
 \end{gdimension}

Modified: trunk/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_gregorio.tex
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_gregorio.tex	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_gregorio.tex	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,7 +1,7 @@
 % !TEX root = GregorioRef.tex
 % !TEX program = LuaLaTeX+se
 %
-% Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
 %
 % This file is part of Gregorio.
 %
@@ -38,7 +38,7 @@
 	\#2 & string & Second line text to place above the initial.\\
 \end{argtable}
 
-\macroname{\textbackslash GreBeginScore}{\#1\#2\#3\#4\#5\#6\#7}{gregoriotex-main.tex}
+\macroname{\textbackslash GreBeginScore}{\#1\#2\#3\#4\#5\#6\#7\#8}{gregoriotex-main.tex}
 Macro to start a score.
 
 \begin{argtable}
@@ -51,6 +51,8 @@
 			& 1 & there is above lines text somewhere in the score\\
 	\#6 & string  & the absolute filename of the gabc file if point-and-click is enabled\\
 	\#7 & integer & the number of staff lines\\
+	\#8 & \TeX\ code & macros to run before the score (\eg, setting clef
+										 extrema)\\
 \end{argtable}
 
 \macroname{\textbackslash GreEndScore}{}{gregoriotex-main.tex}
@@ -67,7 +69,7 @@
 
 \begin{argtable}
 	\#1 & integer & height number of episema\\
-	\#2 & string  & Type of glyph the episema is attached to. See \nameref{EpisemaSpecial} argument for description of options.\\
+	\#2 & string  & Type of glyph the episema is attached to. See \Nameref{NoteOffset} for a description of options.\\
 \end{argtable}
 
 \macroname{\textbackslash GreAdditionalLine}{\#1\#2\#3}{gregoriotex-signs.tex}
@@ -74,7 +76,7 @@
 Macro to typeset the additional line above or below the staff.
 
 \begin{argtable}
-	\#1 & string  & See \nameref{EpisemaSpecial}.\\
+	\#1 & string  & See \Nameref{NoteOffset}.\\
 	\#2 & integer & The ambitus of the porrectus or porrectus flexus if the first references these glyph types; ignored otherwise.\\
 	\#3 & integer & Set horizontal episema (0), horizontal episema under a note (1), line at top of staff (2), line at bottom of staff (3), choral sign (4).\\
 \end{argtable}
@@ -102,7 +104,7 @@
 Macro for typesetting a bar brace.
 
 \begin{argtable}
-	\#1 & string & Type of glyph the episema is attached to.  See \nameref{EpisemaSpecial} argument for description of options.\\
+	\#1 & string & Type of glyph the episema is attached to.  See \Nameref{NoteOffset} for a description of options.\\
 \end{argtable}
 
 \macroname{\textbackslash GreBarSyllable}{\#1\#2\#3\#4\#5\#6\#7\#8\#9}{gregoriotex-syllable.tex}
@@ -125,7 +127,7 @@
 Macro to typeset a vertical episema on a bar.
 
 \begin{argtable}
-	\#1 & string & Type of glyph the episema is attached to.  See \nameref{EpisemaSpecial} argument for description of options.\\
+	\#1 & string & Type of glyph the episema is attached to.  See \Nameref{NoteOffset} for a description of options.\\
 \end{argtable}
 
 \macroname{\textbackslash GreBeginEUOUAE}{\#1}{gregoriotex-main.tex}
@@ -152,6 +154,18 @@
 	\#1 & string & Text to be typeset in bold.\\
 \end{argtable}
 
+\macroname{\textbackslash GreBracket}{\#1\#2\#3\#4}{gregoriotex-signs.tex}
+Typesets a bracket.
+
+\begin{argtable}
+	\#1 & \texttt{0} & Typeset a left bracket.\\
+			& \texttt{1} & Typeset a right bracket.\\
+	\#2 & integer    & The height of the lowest note within the brackets.\\
+	\#3 & integer    & The height of the highest note within the brackets.\\
+	\#4 & string     & the line, byte offset, and column address for textedit
+										 links when point-and-click is enabled.\\
+\end{argtable}
+
 \macroname{\textbackslash GreChangeClef}{\#1\#2\#3\#4\#5\#6\#7}{gregoriotex-signs.tex}
 Macro called when key changes
 
@@ -171,9 +185,12 @@
 
 \begin{argtable}
 	\#1 & integer & Height number of circulus.\\
-	\#2 & string  & Type of glyph the circulus is attached to.  See \nameref{EpisemaSpecial} argument for description of options.\\
+	\#2 & string  & Type of glyph the circulus is attached to.  See \Nameref{NoteOffset} for a description of options.\\
 \end{argtable}
 
+\macroname{\textbackslash GreClearSyllableText}{\#1\#2}{gregoriotex-syllable.tex}
+Macro indicating that the text in this syllable should not overlap any previous syllable.
+
 \macroname{\textbackslash GreColored}{\#1}{gregoriotex.sty \textup{and} gregoriotex.tex}
 Colors argument (a string) in \verb=gregoriocolor.=  Corresponds to ``<c></c>'' tags in gabc.  Does nothing in Plain \TeX\ because color is not supported there.
 
@@ -189,6 +206,19 @@
 \macroname{\textbackslash GreCP...}{}{gregoriotex-main.tex}
 A class of macros which point to the individual characters in a Gregoiro\TeX\ compatible font.  This class of macros is dynamically mapped from the glyph names embedded in the \texttt{ttf} file via a Lua script to ensure that the code points match up with the installed font.
 
+\macroname{\textbackslash GreHollowCP...}{}{gregoriotex-main.tex}
+A class of macros which point to the individual characters in a Gregoiro\TeX\ compatible cavum neume font.  This class of macros is dynamically mapped from the glyph names embedded in the \texttt{ttf} file via a Lua script to ensure that the code points match up with the installed font.
+
+\macroname{\textbackslash GreHoleCP...}{}{gregoriotex-main.tex}
+A class of macros which point to the individual characters in a Gregoiro\TeX\ compatible cavum neume hole font.  This class of macros is dynamically mapped from the glyph names embedded in the \texttt{ttf} file via a Lua script to ensure that the code points match up with the installed font.
+
+\macroname{\textbackslash GreCavum}{\#1}{gregoriotex-signs.tex}
+Typesets a cavum glyph.
+
+\begin{argtable}
+	\#1 & string & The name of the cavum glyph.\\
+\end{argtable}
+
 \macroname{\textbackslash GreCustos}{\#1\#2}{gregoriotex-signs.tex}
 Typesets a custos.
 
@@ -489,7 +519,7 @@
 
 \begin{argtable}
 	\#1 & integer & Height number of the episema.\\
-	\#2 & string  & See \nameref{EpisemaSpecial}.\\
+	\#2 & string  & See \Nameref{NoteOffset}.\\
 	\#3 & integer & The ambitus for a two note episema at the diagonal stroke of a
 		porrectus, porrectus flexus, orculus resupinus, or torculus resupinus
 		flexus.\\
@@ -570,6 +600,15 @@
 \macroname{\textbackslash GreInDominica}{\#1\#2\#3}{gregoriotex-signs.tex}
 Same as \verb=\GreDominica= except inside a syllable.
 
+\macroname{\textbackslash GreInitialClefPosition}{\#1\#2}{gregoriotex-signs.tex}
+Saves the extrema of the initial clef.
+
+\begin{argtable}
+	\#1 & integer & the line of the primary clef (1 is the bottom line)\\
+	\#2 & integer & the line of the secondary clef (1 is the bottom line, 0 means
+									no secondary clef)\\
+\end{argtable}
+
 \macroname{\textbackslash GreInVirgula}{\#1\#2\#3}{gregoriotex-signs.tex}
 Same as \verb=\GreVirgula= except inside a syllable.
 
@@ -597,27 +636,6 @@
 			& \texttt{1} & There is a line break between this syllable and the beginning of the EUOUAE block.\\
 \end{argtable}
 
-\macroname{\textbackslash GreLinea}{\#1\#2\#3}{gregoriotex-signs.tex}
-Macro for typesetting a linea.
-
-\begin{argtable}
-	\#1 & length  & Argument \#2 from \verb=\GreGlyph=. Height to raise the glyph.\\
-	\#2 & length  & Argument \#3 from \verb=\GreGlyph=. Height of the next note.\\
-	\#3 & integer & Argument \#4 from \verb=\GreGlyph=. The type of glyph.\\
-\end{argtable}
-
-\macroname{\textbackslash GreLineaPunctumCavum}{\#1\#2\#3\#4\#5\#6}{gregoriotex-signs.tex}
-Macro to typeset a linea punctum cavum.
-
-\begin{argtable}
-	\#1 & length  & Argument \#2 from \verb=\GreGlyph=. Height to raise the glyph.\\
-	\#2 & length  & Argument \#3 from \verb=\GreGlyph=. Height of the next note.\\
-	\#3 & integer & Argument \#4 from \verb=\GreGlyph=. The type of glyph.\\
-	\#4 & \TeX\ code    & Macros executed before the punctum cavum is written.\\
-	\#5 & character & Argument \#5 from \verb=\GreGlyph=. The signs to typeset before the glyph.\\
-	\#6 & string & the line, byte offset, and column address for textedit links when point-and-click is enabled.
-\end{argtable}
-
 \macroname{\textbackslash GreLowChoralSign}{\#1\#2\#3}{gregoriotex-signs.tex}
 Macro for typesetting low choral signs.
 
@@ -641,6 +659,30 @@
 	\#3 & \TeX\ code & Arbitrary code to typeset, in the \texttt{modedifferentia} style, after \#2.\\
 \end{argtable}
 
+\macroname{\textbackslash GreMusicaFictaFlat}{\#1\#2}{gregoriotex-signs.tex}
+Macro for typesetting a musica ficta flat.
+
+\begin{argtable}
+	\#1 & integer & Height number of the musica ficta flat.\\
+	\#2 & string  & Type of glyph the musica ficta flat is attached to. See \Nameref{NoteOffset} for a description of options.\\
+\end{argtable}
+
+\macroname{\textbackslash GreMusicaFictaNatural}{\#1\#2}{gregoriotex-signs.tex}
+Macro for typesetting a musica ficta natural.
+
+\begin{argtable}
+	\#1 & integer & Height number of the musica ficta natural.\\
+	\#2 & string  & Type of glyph the musica ficta natural is attached to. See \Nameref{NoteOffset} for a description of options.\\
+\end{argtable}
+
+\macroname{\textbackslash GreMusicaFictaSharp}{\#1\#2}{gregoriotex-signs.tex}
+Macro for typesetting a musica ficta sharp.
+
+\begin{argtable}
+	\#1 & integer & Height number of the musica ficta sharp.\\
+	\#2 & string  & Type of glyph the musica ficta sharp is attached to. See \Nameref{NoteOffset} for a description of options.\\
+\end{argtable}
+
 \macroname{\textbackslash GreNatural}{\#1\#2\#3\#4\#5}{gregoriotex-signs.tex}
 Macro to typeset a natural.
 
@@ -674,6 +716,14 @@
 			& \textit{empty} & The custos should not have an alteration.\\
 \end{argtable}
 
+\macroname{\textbackslash GreSuppressEolCustos}{}{gregoriotex-main.tex}
+Macro which disables automatic custos at the end of lines.
+
+\macroname{\textbackslash GreResetEolCustos}{}{gregoriotex-main.tex}
+Alias that resets the use of automatic custos to the value set by
+\verb=\greseteolcustos=.  This macro is aliased to \verb=\gre at useautoeolcustos=
+or \verb=\GreSuppressEolCustos= by \verb=\greseteolcustos=.
+
 \macroname{\textbackslash GreNextSyllableBeginsEUOUAE}{\#1\#2}{gregoriotex-syllable.tex}
 Indicates that the syllable which follows begins a EUOUAE block.
 
@@ -743,42 +793,25 @@
 	& \texttt{1} & Typeset an accentus above the brace.
 \end{argtable}
 
-\macroname{\textbackslash GrePunctumCavum}{\#1\#2\#3\#4\#5\#6}{gregoriotex-signs.tex}
-Macro to typeset a punctum cavum.
+\macroname{\textbackslash GreProtrusion}{\#1\#2}{gregoriotex-spaces.tex}
+Typesets a protrusion.
 
 \begin{argtable}
-	\#1 & length  & Argument \#2 from \verb=\GreGlyph=. Height to raise the glyph.\\
-	\#2 & length  & Argument \#3 from \verb=\GreGlyph=. Height of the next note.\\
-	\#3 & integer & Argument \#4 from \verb=\GreGlyph=. The type of glyph.\\
-	\#4 & \TeX\ code & Macros executed before the punctum cavum is written.\\
-	\#5 & character & Argument \#5 from \verb=\GreGlyph=. The signs to typeset before the glyph.\\
-	\#6 & string & the line, byte offset, and column address for textedit links when point-and-click is enabled.
+	\#1 & float & The protrusion factor.  May be a call to \verb=\GreProtrusionFactor=\\
+	\#2 & \TeX\ code & The content of the protrusion.\\
 \end{argtable}
 
-\macroname{\textbackslash GrePunctumCavumInclinatum}{\#1\#2\#3\#4\#5\#6}{gregoriotex-signs.tex}
-Macro to typeset a punctum cavum inclinatus.
+\macroname{\textbackslash GreProtrusionFactor}{\#1}{gregoriotex-spaces.tex}
+Returns a automatic protrusion factor.  The argument is character whose
+automatic protrusion factor is desired.
 
 \begin{argtable}
-	\#1 & length  & Argument \#2 from \verb=\GreGlyph=. Height to raise the glyph.\\
-	\#2 & length  & Argument \#3 from \verb=\GreGlyph=. Height of the next note.\\
-	\#3 & integer & Argument \#4 from \verb=\GreGlyph=. The type of glyph.\\
-	\#4 & \TeX\ code & Macros executed before the punctum cavum is written.\\
-	\#5 & character & Argument \#5 from \verb=\GreGlyph=. The signs to typeset before the glyph.\\
-	\#6 & string & the line, byte offset, and column address for textedit links when point-and-click is enabled.
+	\#1 & \texttt{,} & The comma protrusion factor.\\
+			& \texttt{;} & The semicolon protrusion factor.\\
+			& \texttt{:} & The colon protrusion factor.\\
+			& \texttt{.} & The period protrusion factor.\\
 \end{argtable}
 
-\macroname{\textbackslash GrePunctumCavumInclinatumAuctus}{\#1\#2\#3\#4\#5\#6}{gregoriotex-signs.tex}
-Macro to typeset a punctum cavum inclinatus auctus.
-
-\begin{argtable}
-	\#1 & length  & Argument \#2 from \verb=\GreGlyph=. Height to raise the glyph.\\
-	\#2 & length  & Argument \#3 from \verb=\GreGlyph=. Height of the next note.\\
-	\#3 & integer & Argument \#4 from \verb=\GreGlyph=. The type of glyph.\\
-	\#4 & \TeX\ code & Macros executed before the punctum cavum is written.\\
-	\#5 & character & Argument \#5 from \verb=\GreGlyph=. The signs to typeset before the glyph.\\
-	\#6 & string & the line, byte offset, and column address for textedit links when point-and-click is enabled.
-\end{argtable}
-
 \macroname{\textbackslash GrePunctumMora}{\#1\#2\#3\#4}{gregoriotex-signs.tex}
 Macro for typesetting punctum mora.
 
@@ -799,7 +832,7 @@
 
 \begin{argtable}
 	\#1 & integer & Height number of accentus.\\
-	\#2 & string  & Type of glyph the accentus is attached to. See \nameref{EpisemaSpecial} argument for description of options.\\
+	\#2 & string  & Type of glyph the accentus is attached to. See \Nameref{NoteOffset} for a description of options.\\
 \end{argtable}
 
 \macroname{\textbackslash GreReversedSemicirculus}{\#1\#2}{gregoriotex-signs.tex}
@@ -807,7 +840,7 @@
 
 \begin{argtable}
 	\#1 & integer & Height number of semicirculus.\\
-	\#2 & string  & Type of glyph the semicirculus is attached to. See \nameref{EpisemaSpecial} argument for description of options.\\
+	\#2 & string  & Type of glyph the semicirculus is attached to. See \Nameref{NoteOffset} for a description of options.\\
 \end{argtable}
 
 \macroname{\textbackslash GreScoreOpening}{\#1\#2\#3\#4\#5}{gregoriotex-syllable.tex}
@@ -826,7 +859,7 @@
 
 \begin{argtable}
 	\#1 & integer & Height number of semicirculus.\\
-	\#2 & string  & Type of glyph the semicirculus is attached to. See \nameref{EpisemaSpecial} argument for description of options.\\
+	\#2 & string  & Type of glyph the semicirculus is attached to. See \Nameref{NoteOffset} for a description of options.\\
 \end{argtable}
 
 \macroname{\textbackslash GreSetFirstSyllableText}{\#1\#2\#3\#4\#5\#6}{gregoriotex-syllable.tex}
@@ -888,7 +921,7 @@
 	\#7 & integer & \texttt{0} if clef and first note are far enough to use a shorter space, 1 otherwise.\\
 \end{argtable}
 
-\macroname{\textbackslash GreSetLinesClef}{\#1\#2\#3\#4\#5\#6\#7}{gregoriotex-main.tex}
+\macroname{\textbackslash GreSetLinesClef}{\#1\#2\#3\#4\#5\#6\#7}{gregoriotex-signs.tex}
 Macro to define the clef that will appear at the beginning of the lines.
 
 \begin{argtable}
@@ -902,6 +935,11 @@
 	\#7 & integer & Height of flat in secondary clef (\texttt{3} for no flat).\\
 \end{argtable}
 
+\macroname{\textbackslash GreSetLargestClef}{\#1\#2\#3\#4\#5\#6}{gregoriotex-signs.tex}
+Macro defining the largest clef of the score (for notes left alignment).
+The arguments are the same as \verb=\GreSetInitialClef= without the \#7th one, which is always considered
+to be \texttt{1}.
+
 \macroname{\textbackslash GreSetNabcAboveLines}{\#1}{gregoriotex-main.tex}
 Macro to place argument containing Nabc neumes above the lines and empty
 \verb=\gre at currenttextabovelines= when done.
@@ -1084,7 +1122,7 @@
 
 \begin{argtable}
 	\#1 & integer & Height number of episema.\\
-	\#2 & string  & Type of glyph the episema is attached to. See \nameref{EpisemaSpecial} argument for description of options.\\
+	\#2 & string  & Type of glyph the episema is attached to. See \Nameref{NoteOffset} for a description of options.\\
 \end{argtable}
 
 \macroname{\textbackslash GreVirgula}{\#1\#2\#3}{gregoriotex-signs.tex}
@@ -1122,12 +1160,14 @@
 \macroname{\textbackslash GreScoreId}{}{gregoriotex-main.tex}
 A Lua\TeX\ attribute which designates a unique identifier for each score.
 
-\macroname{\textbackslash GreNABCNeumes}{\#1\#2}{gregoriotex-nabc.tex}
+\macroname{\textbackslash GreNABCNeumes}{\#1\#2\#3\#4}{gregoriotex-nabc.tex}
 Macro to print a nabc character above the lines.
 
 \begin{argtable}
 	\#1 & integer & the line on which the character should appear (currently unused)\\
 	\#2 & string & The \texttt{nabc} syntax which indicates what neumes are to be printed\\
+	\#3 & integer & The high pitch of the notes covered by the nabc character(s).\\
+	\#4 & integer & The low pitch of the notes covered by the nabc character(s).\\
 \end{argtable}
 
 \macroname{\textbackslash GreNABCChar}{\#1}{gregoriotex-nabc.tex}

Modified: trunk/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_internal.tex
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_internal.tex	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_internal.tex	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,7 +1,7 @@
 % !TEX root = GregorioRef.tex
 % !TEX program = LuaLaTeX+se
 %
-% Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
 %
 % This file is part of Gregorio.
 %
@@ -47,7 +47,7 @@
 	\#1 & \MP{} commands & The \MP{} commands to execute.
 \end{argtable}
 
-\macroname{\textbackslash gre at deprecated}{\#1\#2}{gregoriotex-main.tex}
+\macroname{\textbackslash gre at deprecated}{\#1\#2}{gregoriotex-common.tex}
 Macro that handles deprecation messages. By default, deprecated macros
 are allowed and a warning is printed. If the package option
 \texttt{deprecated=false} is set, then deprecated macros raise a
@@ -58,7 +58,7 @@
 	\#2 & string & name of the correct macro to use\\
 \end{argtable}
 
-\macroname{\textbackslash gre at obsolete}{\#1\#2}{gregoriotex-main.tex}
+\macroname{\textbackslash gre at obsolete}{\#1\#2}{gregoriotex-common.tex}
 Macro that handles obsolescence errors.
 
 \begin{argtable}
@@ -161,6 +161,7 @@
 	& \texttt{14} & case of the punctum mora in a space with a note on the line below it\\
 	& \texttt{15} & case of the over-the-notes slur\\
 	& \texttt{16} & case of the under-the-notes slur\\
+	& \texttt{17} & case of the bracket\\
 	\#3 & \texttt{0} & for horizontal episema cases, use automatic positioning within the space\\
 	& \texttt{1} & for horizontal episema cases, position in the middle of the space\\
 	& \texttt{2} & for horizontal episema cases, position low within the space as if the episema is over the note\\
@@ -200,7 +201,7 @@
 Change the scale of a single distance from one factor to another.
 
 \begin{argtable}
-	\#1 & string & name of the distance to be scaled.  See \nameref{distances}.\\
+	\#1 & string & name of the distance to be scaled.  See \Nameref{distances}.\\
 	\#2 & integer & the factor the distance is currently in\\
 	\#3 & integer & the factor the distance is to be put into\\
 \end{argtable}
@@ -221,7 +222,7 @@
 	\#2 & string & the first letters of the next syllable\\
 	\#3 & string & the middle letters of the next syllable (the vowel in Latin, the whole syllable in English)\\
 	\#4 & string & the end letters of the next syllable\\
-	\#5 & $0 \le$ integer $\le 19$ & the type of notes alignment.  See \nameref{notesalign}.\\
+	\#5 & $0 \le$ integer $\le 19$ & the type of notes alignment.  See \Nameref{notesalign}.\\
 	& $20 \le$ integer $\le 39$ & Same as below 20 except there is a flat before the notes.  Subtract 20 to get the type of notes alignment.\\
 	& $40 \le$ integer $\le 59$ & Same as below 20 except there is a natural before the notes.  Subtract 40 to get the type of notes alignment.
 \end{argtable}
@@ -625,11 +626,13 @@
 
 Default: 17 (approximately the size found in graduals)
 
-\macroname{\textbackslash gre at fillhole}{\#1}{gregoriotex-signs.tex}
+\macroname{\textbackslash gre at fillhole}{\#1\#2}{gregoriotex-signs.tex}
 Macro to fill the hole in a glyph so that staff lines do not show through a hole in it.
 
 \begin{argtable}
 	\#1 & Gregorio\TeX\ char & character to use to fill the hole\\
+	\#1 & \texttt{0} & the hole is being filled for an alteration\\
+	\#1 & \texttt{1} & the hole is being filled for a cavum glyph\\
 \end{argtable}
 
 \macroname{\textbackslash gre at calculate@notesaligncenter}{\#1}{gregoriotex-syllable.tex}
@@ -717,7 +720,7 @@
 
 \begin{argtable}
 	\#1 & character & the letter of the height of the episema (not the height of the note it corresponds to.\\
-	\#2 & integer & See \nameref{EpisemaSpecial}\\
+	\#2 & string & See \Nameref{NoteOffset}.\\
 	\#3 & Gregorio\TeX\ glyph & the sign glyph\\
 	\#4 & \texttt{1} & vertical episema\\
 	& \texttt{2} & rare sign\\
@@ -757,9 +760,6 @@
 \macroname{\textbackslash gre at prephepisemaledgerlineheuristics}{}{gregoriotex-spaces.tex}
 Prepares the system to accept ledger line heuristics for the horizontal episema.
 
-\macroname{\textbackslash gre at reseteolcustos}{}{gregoriotex-main.tex}
-Alias that resets the use of automatic custos to the value set by \verb=\greseteolcustos=.  This macro is aliased to \verb=\gre at useautoeolcustos= or \verb=\gre at usemanualeolcustos= by \verb=\greseteolcustos=.
-
 \macroname{\textbackslash gre at resetledgerlineheuristics}{}{gregoriotex-spaces.tex}
 Resets the ledger line heuristic flags.
 
@@ -808,6 +808,10 @@
 	\#8 & integer & if \texttt{3}, it means that we must not put a flat after the secondary clef, otherwise it’s the height of the flat\\
 \end{argtable}
 
+\macroname{\textbackslash gre at boxclef}{\#1\#2\#3\#4\#5\#6\#7\#8\#9}{gregoriotex-signs.tex}
+Macro filling \verb=\gre at box@temp at width= with a clef. The arguments are the same as \verb=gre at typeclef=.
+
+
 \macroname{\textbackslash gre at typesingleclef}{\#1\#2\#3\#4}{gregoriotex-signs.tex}
 Macro which typesets a single clef.
 
@@ -825,9 +829,6 @@
 \macroname{\textbackslash gre at useautoeolcustos}{}{gregoriotex-main.tex}
 Macro which enables automatic custos at the end of lines.
 
-\macroname{\textbackslash gre at usemanualeolcustos}{}{gregoriotex-main.tex}
-Macro which disables automatic custos at the end of lines.
-
 \macroname{\textbackslash gre at usestylecommon}{}{gregoriotex-signs.tex}
 Macro which specifies the alternate glyphs which are common to all of the styles.
 
@@ -926,16 +927,29 @@
 Macro to hold the original distance which is to be scaled by \verb=\gre at changeonedimenfactor=
 
 \macroname{\textbackslash gre at debug}{}{gregoriotex.sty \textup{and} gregoriotex.tex}
-Macro to hold the list of debug messages which should be designated as printing.
+Macro to hold the list of debug messages which should be designated as printing.  Contains comma-separated values from \Nameref{DebugCategory}, set via the \texttt{debug} package keyword parameter.
 
-\macroname{\textbackslash gre at debugmsg}{\#1\#2}{gregoriotex-main.tex}
+\macroname{\textbackslash gre at debugmsg}{\#1\#2}{gregoriotex-common.tex}
 Macro to print debugging messages.
 
 \begin{argtable}
-	\#1 & string & The category of the message (used in conjunction with \verb=\gre at debug= to determine whether to print the message or not\\
+	\#1 & string & The category of the message (used in conjunction with \verb=\gre at debug= to determine whether to print the message or not; see \Nameref{DebugCategory}\\
 	\#2 & string & The debug message\\
 \end{argtable}
 
+\macroname{\textbackslash gre at trace}{\#1}{gregoriotex-common.tex}
+Macro to mark the beginning of a function in the log with a GreTrace message.
+
+\begin{argtable}
+	\#1 & string & name and argument list of the function being identified.
+\end{argtable}
+
+\macroname{\textbackslash gre at trace@end}{\#1}{gregoriotex-common.tex}
+Macro to mark the end of a function in the log with a GreTrace message.
+
+\macroname{\textbackslash gre at trace@prefix}{gregoriotex-common.tex}
+Macro to hold the prefix of GreTrace messages (value is manipulated to control indentation and indicate nesting).
+
 \macroname{\textbackslash gre at declarefileversion}{\#1\#2}{gregoriotex-main.tex}
 Macro which checks for version consistency between Gregorio\TeX\ files.
 
@@ -960,20 +974,6 @@
 	\#2 & string & Camel case name of horizontal episema porrectus to be defined\\
 \end{argtable}
 
-\macroname{\textbackslash gre at char@cavum}{\#1\#2\#3\#4\#5\#6\#7\#8}{gregoriotex-signs.tex}
-Macro to typeset a “cavum” character.
-
-\begin{argtable}
-	\#1 & length  & Argument \#2 from \verb=\GreGlyph=. Height to raise the glyph.\\
-	\#2 & length  & Argument \#3 from \verb=\GreGlyph=. Height of the next note.\\
-	\#3 & integer & Argument \#4 from \verb=\GreGlyph=. The type of glyph.\\
-	\#4 & \TeX\ code    & Macros executed before the punctum cavum is written.\\
-	\#5 & character & Argument \#5 from \verb=\GreGlyph=. The signs to typeset before the glyph.\\
-	\#6 & string & the line, byte offset, and column address for textedit links when point-and-click is enabled.\\
-	\#7 & control sequence & The control sequence for the glyph.\\
-	\#8 & control sequence & The control sequence for the hole glyph.
-\end{argtable}
-
 \macroname{\textbackslash gre at get@spaceskip}{\#1}{gregoriotex-signs.tex}
 Loads \verb=\gre at skip@temp at four= with the appropriate rubber length given the
 desired case.
@@ -1028,6 +1028,9 @@
 \macroname{\textbackslash gre at nextmiddlesyllablepart}{}{gregoriotex-syllable.tex}
 Macro which stores the middle part of the next syllable (the part which aligns with the notes).
 
+\macroname{\textbackslash gre at fixdebug}{}{gregoriotex-common.tex}
+Fixes the raw \verb=\gre at debug= value for use with \verb=\gre at debugmsg=.
+
 \macroname{\textbackslash gre at fixedtextformat}{\#1}{gregoriotex-syllable.tex}
 A macro which applies formatting that needs to apply to the whole syllable (rather than the parts individually) for the current syllable.  Necessary to preserve ligatures across parts within a syllable.
 
@@ -1161,6 +1164,22 @@
 \macroname{\textbackslash gre at pitch@nominal}{}{gregoriotex-main.tex}
 A pitch guaranteed to be in the staff.
 
+\macroname{\textbackslash gre at pitch@cleftop}{}{gregoriotex-spaces.tex}
+The pitch of the highest point of the current clef.
+
+\macroname{\textbackslash gre at pitch@clefbottom}{}{gregoriotex-spaces.tex}
+The pitch of the lowest point of the current clef.
+
+\macroname{\textbackslash gre at saveclefextrema}{\#1\#2}{gregoriotex-signs.tex}
+Computes the pitches of the lowest and highest points of a clef and saves them
+into \verb=\gre at pitch@cleftop= and \verb=\gre at pitch@clefbottom=.
+
+\begin{argtable}
+	\#1 & integer & the line of the primary clef (1 is the bottom line)\\
+	\#2 & integer & the line of the secondary clef (1 is the bottom line, 0 means
+									no secondary clef)\\
+\end{argtable}
+
 \macroname{\textbackslash gre at pointandclick}{\#1\#2}{gregoriotex-main.tex}
 Macro to generate the point-and-click links.
 
@@ -1235,6 +1254,11 @@
 are the same as \verb=\grechangedim=.  Used to temporarily change the dimension
 for a given line, which is restored at the next beginning of the next line.
 
+\macroname{\textbackslash gre at changecountforline}{\#1\#2}{gregoriotex-spaces.tex}
+Saves the current value of the count and then changes it.  The arguments
+are the same as \verb=\grechangeocount=.  Used to temporarily change the count
+for a given line, which is restored at the next beginning of the next line.
+
 \macroname{\textbackslash gre at setstafflines}{\#1}{gregoriotex-main.tex}
 Sets the number of staff lines.
 
@@ -1312,7 +1336,7 @@
 \begin{argtable}
 	\#1 & 0 & bar is not the end of a word\\
 	& 1 & bar is the end of a word\\
-	\#2 & integer & alignment type of the first glyph in the next syllable.  See \nameref{notesalign}\\
+	\#2 & integer & alignment type of the first glyph in the next syllable.  See \Nameref{notesalign}\\
 \end{argtable}
 
 \macroname{\textbackslash gre at newlinearg}{}{gregoriotex-syllable.tex}
@@ -1339,6 +1363,9 @@
 	& 0 & other cases\\
 \end{argtable}
 
+\macroname{\textbackslash gre at changecavumhole}{\#1[\#2][\#3]}{gregoriotex-main.tex}
+Macro used by \verb=\grechangecavumglyph= to handle the optional arguments.
+
 \macroname{\textbackslash gre at alterationadjustment}{\#1}{gregoriotex-spaces.tex}
 Macro to make adjustments to \verb=nextbegindifference= in order to account for an alteration at the begining of the next syllable.
 
@@ -1345,7 +1372,31 @@
 \macroname{\textbackslash gre at punctummoraadjustment}{}{gregoriotex-spaces.tex}
 Macro to make adjustments to cursor position and \verb=previousenddifference= based on the presence of a punctum mora at the end of the last syllable.
 
+\macroname{\textbackslash gre at num@min}{\#1\#2}{gregoriotex-spaces.tex}
+Puts the lower of its two integer arguments into \verb=\gre at count@temp at one=.
 
+\begin{argtable}
+	\#1 & integer & the first value to compare\\
+	\#2 & integer & the second value to compare\\
+\end{argtable}
+
+\macroname{\textbackslash gre at num@max}{\#1\#2}{gregoriotex-spaces.tex}
+Puts the greater of its two integer arguments into \verb=\gre at count@temp at one=.
+
+\begin{argtable}
+	\#1 & integer & the first value to compare\\
+	\#2 & integer & the second value to compare\\
+\end{argtable}
+
+\macroname{\textbackslash gre at evaluatenextsyllable}{\#1}{gregoriotex-syllable.tex}
+Evaluates its first argument as an advance computation against the next syllable.  Twiddles the \verb=ifgre at evaluatingnextsyllable= flag around evaluation of the macro argument.
+
+\macroname{\textbackslash gre at save@additionalspaces}{}{gregoriotex-spaces.tex}
+Macro to save the additional vertical spaces associated with the line (\texttt{additionalbottomspace}, \texttt{additionaltopspace}, \texttt{additionaltopspacealt}, \texttt{additionaltopspacenabc}, \texttt{currenttranslationheight}, \texttt{textlower}, \texttt{currentabovelinestextheight}, and \texttt{constantglyphraise}) so that they can be restored later.
+
+\macroname{\textbackslash gre at restore@additionalspaces}{}{gregoriotex-spaces.tex}
+Macro to restore the additional vertical spaces associated with the line from their saved values.
+
 \subsection{Auxiliary File}
 Gregorio\TeX\ creates its own auxiliary file (extension \texttt{gaux}) which it uses to store information between successive typesetting runs.  This allows for such features as the dynamic interline spacing.  The following functions are used to interact with that auxiliary file.
 
@@ -1372,6 +1423,12 @@
 \macroname{\textbackslash gre at font@music}{}{gregoriotex-main.tex}
 The font for the neumes and other principle score elements.
 
+\macroname{\textbackslash gre at font@music at hollow}{}{gregoriotex-main.tex}
+The font for cavum neumes.
+
+\macroname{\textbackslash gre at font@music at hole}{}{gregoriotex-main.tex}
+The font for cavum neume holes.
+
 \macroname{\textbackslash gre at font@style}{}{gregoriotex-main.tex}
 The font for some of the extra characters, such as the bar for barred letters.
 
@@ -1409,18 +1466,6 @@
 \macroname{\textbackslash gre at fontchar@sharphole}{}{gregoriotex-chars.tex}
 The sharp hole character (\ie, the character needed to prevent lines from showing through the center of the sharp).
 
-\macroname{\textbackslash gre at fontchar@punctumcavum}{}{gregoriotex-signs.tex}
-The punctum cavum character.
-
-\macroname{\textbackslash gre at fontchar@punctumcavumhole}{}{gregoriotex-signs.tex}
-The punctum cavum hole character (\ie, the character needed to prevent lines from showing through the center of the punctum cavum).
-
-\macroname{\textbackslash gre at fontchar@lineapunctumcavum}{}{gregoriotex-signs.tex}
-The linea punctum cavum character.
-
-\macroname{\textbackslash gre at fontchar@lineapunctumcavumhole}{}{gregoriotex-signs.tex}
-The linea punctum cavum hole character (\ie, the character needed to prevent lines from showing through the center of the linea punctum cavum).
-
 \macroname{\textbackslash gre at fontchar@incclef}{}{gregoriotex-chars.tex}
 The \texttt{c}-clef which appears in the middle of a line.
 
@@ -1649,6 +1694,9 @@
 \macroname{\textbackslash ifgre at usestylefont}{}{gregoriotex-main.tex}
 Boolean which specifies whether the style font should be loaded or not.
 
+\macroname{\textbackslash ifgre at loadholehollowfonts}{}{gregoriotex-main.tex}
+Boolean which specifies whether the hole and hollow fonts should be loaded or not.
+
 \macroname{\textbackslash ifgre at keeprightbox}{}{gregoriotex-signs.tex}
 Boolean which specifies if we have to keep the localrightbox until the end.
 
@@ -1789,6 +1837,9 @@
 \macroname{\textbackslash ifgre at shownotes}{}{gregoriotex-syllable.tex}
 Boolean indicating whether the notes should be shown.
 
+\macroname{\textbackslash ifgre at nabcvoice@i at visible}{}{gregoriotex-nabc.tex}
+Boolean indicating whether the first nabc voice should be shown.
+
 \macroname{\textbackslash ifgre at showlyrics}{}{gregoriotex-syllable.tex}
 Boolean indicating whether the lyrics should be shown.
 
@@ -1798,6 +1849,12 @@
 \macroname{\textbackslash ifgre at rewritethissyllable}{}{gregoriotex-syllable.tex}
 Boolean indicating that a syllable should be rewritten to improve ligature rendering.
 
+\macroname{\textbackslash ifgre at textcleared}{}{gregoriotex-syllable.tex}
+Boolean indicating that the text of this syllable should not overlap any previous syllable.
+
+\macroname{\textbackslash ifgre at evaluatingnextsyllable}{}{gregoriotex-syllable.tex}
+Boolean indicating that some aspect of the next syllable is being evaluated in advance.
+
 \subsection{Boxes}
 
 Boxes are used to store elements of the score before they are printed for the purposes of reusing them and/or measuring them in order to determine their appropriate placement.
@@ -1846,12 +1903,13 @@
 
 
 \subsection{Protrusion factors}
-Protrusion factors are counts representing a protrusion factor over 100.
 
-\macroname{\textbackslash gre at count@protrusion at hyphen@eol}{}{gregoriotex-spaces.tex}
-Protrusion factor applied to hyphens at end of lines.
 
+\macroname{\textbackslash gre at protrusionfactor@...}{}{gregoriotex-spaces.tex}
+Macros that store the protrusion factors created by
+\verb=\gresetprotrusionfactor=.
 
+
 \subsection{Distances}
 All of the distances listed in \nameref{distances} have an internal associated
 with them, of the form of \verb=\gre at space@*@*=, which stores the value of the
@@ -1861,12 +1919,22 @@
 
 These additional distances are calculated by Gregorio based on the values for the user customizable distances and what may be going on in the score at the time of their use.
 
+In some cases it is necessary to temporarily manipulate some of these distances for the purpose of some particular operation and then restore them to their previous values.  In that case the distance will have a \verb=\gre at saved@...= register associated with it (\eg \verb=\gre at dimen@constantglyphraise= is saved to and restored from \verb=\gre at saved@dimen at constantglyphraise=).
+
+We also have save registries for \verb=\baselineskip=, \verb=\lineskip=, \verb=\lineskiplimit=, \verb=\parskip=, and \verb=\parfillskip= so that we can modify the way line breaking decisions are handled inside a score without affecting the rest of the document.
+
 \macroname{\textbackslash gre at dimen@morawidth}{}{gregoriotex-spaces.tex}
 Width of a punctum mora (reinitialized at each score, lazily recomputed).
 
-\macroname{\textbackslash gre at dimen@clefwidth}{}{gregoriotex-spaces.tex}
+\macroname{\textbackslash gre at dimen@clefwidth at current}{}{gregoriotex-spaces.tex}
 Width of the current clef.
 
+\macroname{\textbackslash gre at dimen@clefwidth at largest}{}{gregoriotex-spaces.tex}
+Width of the largest clef in the score.
+
+\macroname{\textbackslash gre at dimen@clefwidth at bol}{}{gregoriotex-spaces.tex}
+Width of the clef used to compute bolshift.
+
 \macroname{\textbackslash gre at dimen@constantglyphraise}{}{gregoriotex-spaces.tex}
 Dimension representing the space between the 0 of the gregorian fonts and the effective 0 of the TeX score.
 
@@ -1961,9 +2029,6 @@
 \macroname{\textbackslash gre at skip@temp at ...}{}{gregoriotex-spaces.tex}
 Temporary skips used in calculations.  There are currently four of these.
 
-\macroname{\textbackslash gre at dimen@savedglyphraise}{}{gregoriotex-signs.tex}
-Macro to hold the value of the glyph raise so that it can be restored after some calculations which may change it are performed.
-
 \macroname{\textbackslash gre at dimen@eolshift}{}{gregoriotex-spaces.tex}
 The left kern that should appear before an end of line.
 
@@ -1997,9 +2062,6 @@
 \macroname{\textbackslash gre at skip@minShiftNotes}{}{gregoriotex-spaces.tex}
 Minimum shift required for the notes.
 
-\macroname{\textbackslash gre at save@parfillskip}{}{gregoriotex-main.tex}
-Macro to store \verb=\parfillskip= value so that we can restore it at the end of the score (needed to force the last line of a score to be justified).
-
 \macroname{\textbackslash gre at scaledist}{}{gregoriotex-spaces.tex}
 Working alias for \verb=\gre at skip@temp at one= or \verb=\gre at dimen@temp at one=, as appropriate, used when rescaling a distance due to a change in \verb=\gre at factor=.
 
@@ -2037,19 +2099,8 @@
 \macroname{\textbackslash gre at skip@alterationshift}{}{gregoriotex-spaces.tex}
 Displacement of whole syllable to account for the presence of an alteration at the beginning of the next syllable.
 
-\macroname{\textbackslash gre at skip@baselineskip at save}{}{gregoriotex-spaces.tex}
-Saved value of \verb=\baselineskip= from before a score so that it can be restored when the score ends.
 
-\macroname{\textbackslash gre at skip@lineskip at save}{}{gregoriotex-spaces.tex}
-Saved value of \verb=\lineskip= from before a score so that it can be restored when the score ends.
 
-\macroname{\textbackslash gre at skip@lineskiplimit at save}{}{gregoriotex-spaces.tex}
-Saved value of \verb=\lineskiplimit= from before a score so that it can be restored when the score ends.
-
-\macroname{\textbackslash gre at skip@parskip at save}{}{gregoriotex-spaces.tex}
-Saved value of \verb=\parskip= from before a score so that it can be restored when the score ends.
-
-
 \subsection{Penalties}
 These are the macros that Gregorio\TeX\ uses to manipulate the penalties in order to control line and page breaks within a score without affect the surrounding text.
 
@@ -2208,7 +2259,7 @@
 	\texttt{16} & no note
  \end{tabulary}
 
-\subsection{Episema Special}\label{EpisemaSpecial}
+\subsection{Note Offset Specifier}\label{NoteOffset}
 \definecolor{shadecolor}{named}{lightgray}%
 \begin{shaded*}%
 \vspace{-1.4\baselineskip}
@@ -2276,6 +2327,39 @@
 \end{description}
 \end{shaded*}
 
+\subsection{Debug Category}\label{DebugCategory}
+\definecolor{shadecolor}{named}{lightgray}%
+\begin{shaded*}%
+\vspace{-1.4\baselineskip}
+\begin{center}String with the following possibilities:\end{center}
+\vspace{-0.8\baselineskip}
+\hrule
+\vspace{-0.8\baselineskip}
+\begin{description}
+	\item[annotation] Annotation-related (text above the score initial) messages.
+	\item[barspacing] Bar spacing computations.
+	\item[bolshift] Beginning-of-line shift computations.
+	\item[clear] Syllable clearing messages.  Generated when handling the \texttt{<clear>} gabc directive.
+	\item[changeglyph] Glyph changes.  Generated when glyph substitutions are made.
+	\item[commentary] Commentary-related messages.
+	\item[compile] Auto-compile messages.  Generating when handing \verb=\gregorioscore=
+	\item[custos] Custos-related messages.  Generating when computing and handling custodes.
+	\item[eolshift] End-of-line shift computations.
+	\item[general] Non-specific messages.
+	\item[hyphen] Hyphen-related messages.  Generated when computing and handling automatic hyphens.
+	\item[ifdim] Dimension comparisons.
+	\item[initial] Score-initial-related messages.
+	\item[lineheight] Line height events.  Generated when line heights are computed or exercised.
+	\item[linesglue] Messages about line glue.  Generated during line break processing in Lua.
+	\item[mapfont] Font mapping messages.  Generated when analyzing score fonts.
+	\item[offsetcase] Offset case messages.  Generated when the offset cases (for \Nameref{NoteOffset}) are generated in Lua.
+	\item[spacing] Random spacing-related messages.
+	\item[syllablerewriting] Syllable rewrite messages.  Generated when rewriting syllables for better kerning and ligaturing.
+	\item[syllablespacing] Syllable spacing computations.
+	\item[trace] Messages to trace the calling of functions.
+\end{description}
+\end{shaded*}
+
 %%% Local Variables:
 %%% mode: latex
 %%% TeX-master: “GregorioRef”

Modified: trunk/Build/source/texk/gregorio/gregorio-src/doc/Gabc.tex
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/doc/Gabc.tex	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/doc/Gabc.tex	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,7 +1,7 @@
 % !TEX root = GregorioRef.tex
 % !TEX program = LuaLaTeX+se
 %
-% Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
 %
 % This file is part of Gregorio.
 %
@@ -69,7 +69,8 @@
 	recommended where appropriate. \textbf{This field is required.}
 \item[gabc-copyright] This license is the copyright notice (in English) of the gabc file, as chosen by the person named in the transcriber field. As well as the notice itself, it may include a brief description of the license, such as public domain, CC-by-sa; for a list of commonly found open source licenses and exceptions, please see \url{https://spdx.org/licenses/}.  A separate text file will be necessary for the complete legal license. For the legal issues about Gregorian chant scores, please see \url{http://gregorio-project.github.io/legalissues}. An example of this field would be:
 	\begin{lstlisting}[autogobble]
-		gabc-copyright: CC0-1.0 by Elie Roux, 2009 <http://creativecommons.org/publicdomain/zero/1.0/>;
+		gabc-copyright: CC0-1.0 by Elie Roux, 2009
+		<http://creativecommons.org/publicdomain/zero/1.0/>;;
 	\end{lstlisting}
 \item[score-copyright] This license is the copyright notice (in English) of the score itself from which the gabc was transcribed. Like the \texttt{gabc-copyright}, there may be a brief description of the license too. In unclear or complex cases it may be omitted; it is most suitable for use when the transcriber is the copyright holder and licensor of the score as well. One again, reading the page on legal issues (linked above) is recommended. An example of this field would be:
 	\begin{lstlisting}[autogobble]
@@ -84,7 +85,7 @@
 	placed above the initial unless one of the following conditions are
 	met:
 	\begin{itemize}
-	\item There is a \verb=\greannotation= defined immediatly prior to \verb=\gregorioscore=.
+	\item There is a \verb=\greannotation= defined immediately prior to \verb=\gregorioscore=.
 	\item The \texttt{annotation} header field is defined.
 	\end{itemize}
 \item[mode-modifier] The mode ``modifier'' of the piece. This may be any
@@ -181,6 +182,15 @@
 	{\scriptsize\verb=t. irregularis=} & & & \writemode{t. irregularis}{}{} \\
 \end{tabularx}
 
+\subsection{General Syntax}
+
+\subsection{Note Syntax}
+
+\verb=[nocustos]= will prevent a custos from appearing at the point where
+specified, if line formatting causes a line break there.  The \verb=[nocustos]=
+tag must appear \emph{before} spaces appearing at the point specified or it will
+have no effect.
+
 \subsection{Neume Fusion}
 
 Neume fusion allows for the composition of new shapes based on a set of

Modified: trunk/Build/source/texk/gregorio/gregorio-src/doc/GregorioNabcRef.pdf
===================================================================
(Binary files differ)

Modified: trunk/Build/source/texk/gregorio/gregorio-src/doc/GregorioNabcRef.tex
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/doc/GregorioNabcRef.tex	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/doc/GregorioNabcRef.tex	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,6 +1,6 @@
 % !TEX program = LuaLaTeX+se
 %
-% Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
 %
 % This file is part of Gregorio.
 %
@@ -23,6 +23,7 @@
 \usepackage{fontspec}
 \usepackage{luacode}
 \usepackage{multicol}
+\usepackage{multirow}
 \usepackage{fixltx2e}
 \usepackage{hyperref}
 \usepackage{color}
@@ -59,9 +60,30 @@
 			\end{list}%
 		\endgroup%
 
+		\vspace{1cm}
+		\begingroup%
+			\greannotation{\scriptsize{CO}}
+			\greannotation{\scriptsize{II}}
+			\gresetnabcfont{grelaon}{8}
+			\color{black!60}
+			\setmainfont[SmallCapsFont=AlegreyaSC]{Alegreya}%
+			\addtolength{\hsize}{-4cm}%
+			\setlength{\fboxsep}{5mm}%
+			\begin{list}{}{%
+				\setlength{\topsep}{0pt}%
+				\setlength{\leftmargin}{1.5cm}%
+				\setlength{\rightmargin}{1.5cm}%
+				\setlength{\listparindent}{0pt}%
+				\setlength{\itemindent}{0pt}%
+				\setlength{\parsep}{0pt}%
+			}\item[]{\fbox{\parbox{\hsize}{\gregorioscore[f]{omnes}}}}%
+			\end{list}%
+		\endgroup%
+
 \vfill
 \pagebreak
 
+\gresetnabcfont{grelaon}{8}
 \gresetnabcfont{gresgmodern}{8}
 \gresetnabcfont{gregall}{8}
 
@@ -105,12 +127,26 @@
 	\endgroup %
 }
 
+\def\lneume{%
+	\begingroup %
+		\catcode`\~=12{}%
+		\catcode`\@=11{}%
+		\lneumebody%
+}
+
+\def\lneumebody#1{%
+		\font\grefontnabc={name:grelaon} at 6pt\grefontnabc\begin{gre at style@nabc}%
+		\directlua{tex.sprint(gregoriotex.nabc_font_tables["grelaon"]["\luatexluaescapestring{#1}"] or "")}%
+		\end{gre at style@nabc}%
+	\endgroup %
+}
+
 {
 \setlength\parindent{0cm}
 
 The \texttt{nabc} language provides the ability to describe some adiastematic neumes, for
-now just the St.\ Gallen style.  The language is partially based on Dom
-Eugène Cardine's Table of neumatic signs, but for more complex neumes
+now just the St.\ Gallen and Laon (Metz notation family) style.  The language is partially
+based on Dom Eugène Cardine's Table of neumatic signs, but for more complex neumes
 doesn't always match how the neumes are called; instead attempts to make it
 easier to compose complex neumes from basic glyphs.  To describe
 adiastematic neumes in \texttt{gabc}, the header should contain
@@ -164,6 +200,10 @@
 followed by optional \textit{glyph modifiers}, followed by optional
 \textit{pitch descriptor}.
 
+The following description is for the St. Gall family of neumes,
+when using the gregall or gresgmodern fonts.  For details on Laon (Metz
+notation family) neumes see \pageref{nabclaon}.
+
 The \textit{basic glyph descriptor} is a two-letter string from the
 following table:
 \begin{multicols}{5}
@@ -205,7 +245,7 @@
 	\item \texttt{M} melodic modification
 	\item \texttt{-} addition of episema
 	\item \texttt{>} augmentive liquescence
-	\item ~~\texttt{\~} diminutive liquescence
+	\item \texttt{\textasciitilde} diminutive liquescence
 \end{itemize}
 If Dom Cardine's table contains multiple glyphs with the same modifiers,
 a positive number is added afterwards.  E.g.\ for augmentive liquescent
@@ -304,6 +344,7 @@
 \texttt{lspar} \sneume{lspar} paratim\\
 \texttt{lspfec} \sneume{lspfec} perfecte\\
 \texttt{lspm} \sneume{lspm} parvum mediocriter\\
+\texttt{lspulcre} \sneume{lspulcre} pulcre\\
 \texttt{lss} \sneume{lss} sursum\\
 \texttt{lssb} \sneume{lssb} sursum bene\\
 \texttt{lssc} \sneume{lssc} sursum celeriter\\
@@ -348,6 +389,109 @@
 
 \texttt{ql>ppu3} \GreNABCChar{ql>ppu3} is a 3 loop liquescent quilisma
 with 3 tractulis with episema before it.
+
+\vfill
+\pagebreak
+
+\label{nabclaon}
+The \textit{basic glyph descriptor} for Laon neumes is very similar to the
+one used for St. Gall neumes, but with uncinus and oriscus-clivis added and
+stropha, 2 loops quilisma and gravis removed:
+\begin{multicols}{4}
+\texttt{un} \lneume{un} uncinus\\
+\texttt{vi} \lneume{vi} virga\\
+\texttt{pu} \lneume{pu} punctum\\
+\texttt{ta} \lneume{ta} tractulus\\
+\texttt{gr} \lneume{gr} gravis\\
+\texttt{cl} \lneume{cl} clivis\\
+\texttt{oc} \lneume{oc} oriscus-clivis\\
+\texttt{pe} \lneume{pe} pes\\
+\texttt{po} \lneume{po} porrectus\\
+\texttt{to} \lneume{to} torculus\\
+\texttt{ci} \lneume{ci} climacus\\
+\texttt{sc} \lneume{sc} scandicus\\
+\texttt{pf} \lneume{pf} porrectus flexus\\
+\texttt{sf} \lneume{sf} scandicus flexus\\
+\texttt{tr} \lneume{tr} torculus resupinus\\
+\texttt{ds} \lneume{ds} distropha\\
+\texttt{ts} \lneume{ts} tristropha\\
+\texttt{tg} \lneume{tg} trigonus\\
+\texttt{bv} \lneume{bv} bivirga\\
+\texttt{tv} \lneume{tv} trivirga\\
+\texttt{pr} \lneume{pr} pressus maior\\
+\texttt{pi} \lneume{pi} pressus minor\\
+\texttt{vs} \lneume{vs} virga strata\\
+\texttt{or} \lneume{or} oriscus\\
+\texttt{sa} \lneume{sa} scandicus\\
+\texttt{pq} \lneume{pq} pes quassus\\
+\texttt{ql} \lneume{ql} quilisma\\
+\texttt{pt} \lneume{pt1} pes stratus
+\end{multicols}
+
+The \textit{subpunctis and prepunctis descriptor} consists of the letters
+\texttt{su} for subpunctis or \texttt{pp} for prepunctis, followed
+optionally by a modifier letter from the following table and finally a mandatory
+positive number of repetitions.  If the modifier letter is missing, it is a
+punctum.
+\begin{itemize}
+	\item \texttt{n} \lneume{un} uncinus
+	\item \texttt{q} \lneume{ql} quilisma
+	\item \texttt{z} \lneume{vi} virga
+	\item \texttt{x} \lneume{vi>} cephalicus
+\end{itemize}
+
+The \textit{significant letter descriptor} for Laon neumes allows another
+position, \texttt{5}, which stands for inside the neume.  The exact position
+of the letter depends on the glyph, if there is no glyph with the neume
+inside of it, it can't be positioned inside the neume.
+
+The shorthands, including the \texttt{ls} prefix, which should be followed
+by the above mentioned position digit for Laon neumes are:
+\begin{multicols}{2}
+\texttt{lsa} \lneume{lsa} augete\\
+\texttt{lsc} \lneume{lsc} celeriter\\
+\texttt{lseq} \lneume{lseq} equaliter\\
+\texttt{lseq-} \lneume{lseq-} equaliter\\
+\texttt{lsequ} \lneume{lsequ} equaliter\\
+\texttt{lsf} \lneume{lsf} fastigium\\
+\texttt{lsh} \lneume{lsh} humiliter\\
+\texttt{lshn} \lneume{lshn} humiliter nectum\\
+\texttt{lshp} \lneume{lshp} humiliter parum\\
+\texttt{lsl} \lneume{lsl} levare\\
+\texttt{lsn} \lneume{lsn} non (tenere), negare, nectum, naturaliter\\
+\texttt{lsnl} \lneume{lsnl} non levare\\
+\texttt{lsnt} \lneume{lsnt} non tenere\\
+\texttt{lsm} \lneume{lsm} mediocriter\\
+\texttt{lsmd} \lneume{lsmd} mediocriter\\
+\texttt{lss} \lneume{lss} sursum\\
+\texttt{lssimp} \lneume{lssimp} simpliciter\\
+\texttt{lssimpl} \lneume{lssimpl} simpliciter\\
+\texttt{lssp} \lneume{lssp} sursum parum\\
+\texttt{lsst} \lneume{lsst} sursum tenere\\
+\texttt{lst} \lneume{lst} tenere\\
+\texttt{lsth} \lneume{lsth} tenere humiliter
+\end{multicols}
+
+For the Tironian notes the form of the \textit{significant letter descriptor}
+starts with the \texttt{lt} prefix followed by letters from the following
+list, followed by above mentioned position digit (\texttt{5} can't be used):
+\begin{multicols}{2}
+\texttt{lti} \lneume{lti} iusum\\
+\texttt{ltdo} \lneume{ltdo} deorsum\\
+\texttt{ltdr} \lneume{ltdr} devertit\\
+\texttt{ltdx} \lneume{ltdx} devexum\\
+\texttt{ltps} \lneume{ltps} prode sub eam (trade subtus)\\
+\texttt{ltqm} \lneume{ltqm} quam mox\\
+\texttt{ltsb} \lneume{ltsb} sub\\
+\texttt{ltse} \lneume{ltse} seorsum\\
+\texttt{ltsj} \lneume{ltsj} subjice\\
+\texttt{ltsl} \lneume{ltsl} saltim\\
+\texttt{ltsn} \lneume{ltsn} sonare\\
+\texttt{ltsp} \lneume{ltsp} supra\\
+\texttt{ltsr} \lneume{ltsr} sursum\\
+\texttt{ltst} \lneume{ltst} saltate (salte)\\
+\texttt{ltus} \lneume{ltus} ut supra
+\end{multicols}
 }
 
 \vfill
@@ -402,7 +546,54 @@
 \vfill
 \pagebreak
 
+\gresetnabcfont{grelaon}{8}
+
+{
+\noindent\footnotesize
+\begin{tabular}{|l|l|l|l|l|l|l|l|l|}
+\hline
+Name of & Simple & \multicolumn{3}{c|}{Symbols differentiated by} & \multicolumn{3}{c|}{Symbols indicating} \\
+Symbols & Symbols & \multicolumn{3}{c|}{} & \multicolumn{3}{c|}{a special meaning} \\ \hline
+& & \multicolumn{2}{c|}{the modification} & the addition & melodic & \multicolumn{2}{c|}{phonetic} \\ \cline{3-4}\cline{6-8}
+& & of the mark & of the grouping & of letters & & \multicolumn{2}{c|}{Liquescence} \\ \cline{7-8}
+& & & (neumatic break) & & & augment. & diminut. \\ \cline{3-5}\cline{7-8}
+uncinus & \neume{un} & & & & & & \\
+punctum & \neume{pu} & & & & & & \\
+virga & \neume{vi} & \neume{viS} \neume{vipp2su2vihh} & & & & \neume{vi>1} & \\
+tractulus & \neume{ta} & \neume{ds} \neume{ts} & & \neume{talst2} \neume{tslsc2lst2} & & \neume{ta>2} & \\
+clivis & \neume{cl} & & \neume{clG} & \neume{cllsn9} \neume{cllst9} \neume{clGlsa5} & \neume{clG1} \neume{clM} & \neume{cl>} \neume{cl>1} & \neume{vi>} \neume{ta>2} \\
+pes & \neume{pe} & & \neume{peG} & \neume{pelsn3} \neume{pelst2} \neume{pelsc2} & & \neume{pe>1} & \neume{ta>} \\
+porrectus & \neume{po} & & \neume{poG} & & \neume{poM} & \neume{po>} & \\
+torculus & \neume{to} & \neume{toS1} & \neume{toG} & \neume{toGlsa5} \neume{toSlsa5} \neume{toSsun1lsa5} \neume{tolst9} & & \neume{to>} & \\
+climacus & \neume{ci} & \neume{pusu1sun1} \neume{visu2} \neume{unsun2} & & \neume{visu2lst3} & & & \neume{cl>1} \\
+scandicus & \neume{sc} \neume{sc1} & \neume{vippn1pp1} \neume{vippn2} & \neume{pevihl} & \neume{sclst2} \neume{pelst2vihl} \neume{pelsa2vihl} & & \neume{vi>1pp2} & \neume{ta>ppn1} \neume{ta>pp2} \\
+\vbox{\hbox{porrectus}\hbox{flexus}} & \neume{pf1} & \neume{pfS} & \neume{unhg`to} \neume{po`un} & \neume{unhglst2`to} \neume{po`unlsa2} & \neume{pfM} & \neume{pf>} & \\
+\vbox{\hbox{(pes}\hbox{subbipunctis)}} & \neume{tosu1} & \neume{tosun1} & \neume{vippn1su2} \neume{unppn1sun2} & \neume{tosu1lsc5} \neume{tosun1lsa5} & & & \\
+& & & \multicolumn{1}{r|}{\neume{visu1sun1}} & \multicolumn{1}{r|}{\neume{unlst2`puhisu1sun1}} & & & \\
+\vbox{\hbox{scandicus}\hbox{flexus}} & \neume{sf} & & \neume{unhd`to} \neume{sfG} & \neume{unhdlst2`to} \neume{pelst2clhh} & & & \\
+\vbox{\hbox{torculus}\hbox{resupinus}} & \neume{tr} & \neume{trS} & \neume{poppn1} \neume{pe`peG} & \neume{trSlsc1} \neume{trlst3} \neume{trlst9} & & \neume{tr>} & \neume{pe`ta>} \\
+& & & \multicolumn{1}{r|}{\neume{tovihg} \neume{toGvihg}} & & & & \\
+\vbox{\hbox{clivis + pes}\hbox{or torculus}} & \multicolumn{1}{l}{\neume{cl!pe} \neume{cl!to}} & \multicolumn{1}{l}{\rightarrow \hspace{5mm} \neume{toS!pe}} & \multicolumn{5}{l|}{\neume{toS!to}} \\
+\multirow{7}{*}{oriscus} & \multicolumn{1}{l}{\multirow{7}{*}{\neume{or} \neume{or1} $ \left\{ \rule{0pt}{22mm} \right. $ }} & \multicolumn{1}{l}{isolated  \&} & \multicolumn{3}{l}{\neume{ql}} & \multicolumn{2}{l|}{\neume{or>}} \\
+& \multicolumn{1}{l}{} & \multicolumn{1}{l}{\vbox{\hbox{at the syllabic}\hbox{articulation}}} & \multicolumn{5}{l|}{\neume{oc} \neume{oc!vi} \neume{pq} \neume{pq1}} \\
+& \multicolumn{1}{l}{} & \multicolumn{1}{l}{\multirow{5}{*}{\vbox{\hbox{inside}\hbox{the neume}} $ \left\{ \rule{0pt}{18mm} \right. $ }} & \multicolumn{5}{l|}{\neume{tg}} \\
+& \multicolumn{1}{l}{} & \multicolumn{1}{l}{} & \multicolumn{5}{l|}{\neume{cl1!or} \neume{cl1!pi} \neume{cl1!pi!vi} \neume{cl1!pi!cl} \neume{cl1!pi!to} } \\
+& \multicolumn{1}{l}{} & \multicolumn{1}{l}{} & \multicolumn{5}{l|}{\neume{to!or}} \\
+& \multicolumn{1}{l}{} & \multicolumn{1}{l}{} & \multicolumn{5}{l|}{\neume{sa} \neume{sa1}} \\
+& \multicolumn{1}{l}{} & \multicolumn{1}{l}{} & \multicolumn{1}{l}{\neume{vs} \neume{vsG}} & \multicolumn{1}{r}{\neume{pe!or}} & \multicolumn{3}{l|}{} \\
+quilisma & \multicolumn{7}{l|}{\neume{ql} \neume{ql!cl} \neume{ql!po}} \\
+pes stratus & \multicolumn{1}{l}{} & \multicolumn{6}{l|}{\neume{pt1}} \\ \hline
+\end{tabular}
+}
+
 \begin{center}
+Table from Cardine's Gregorian Semiology, pp.\ 14-15 with nabc strings and grelaon glyphs.
+\end{center}
+
+\vfill
+\pagebreak
+
+\begin{center}
 Table with nabc strings and corresponding gregall and gresgmodern glyphs:
 \end{center}
 
@@ -447,6 +638,34 @@
 \pagebreak
 
 \begin{center}
+Table with nabc strings and corresponding grelaon glyphs:
+\end{center}
+
+\begin{luacode*}
+	local i
+	local last
+	local key
+	local str
+	local keym
+	local arr = {}
+	for key in pairs(gregoriotex.nabc_font_tables['grelaon']) do
+		table.insert(arr, key)
+	end
+	table.sort(arr)
+	tex.sprint("\\begin{multicols}{4}\\noindent");
+	for i, key in ipairs(arr) do
+		keym = key:gsub("~","\\~{}")
+		str = keym .. "\\hfill"
+		str = str .. "{\\font\\grefontnabc={name:grelaon} at 8pt\\grefontnabc\\begin{gre at style@nabc}" .. gregoriotex.nabc_font_tables['grelaon'][key] .. "\\end{gre at style@nabc}}"
+		tex.sprint(str .. "\\\\")
+	end
+	tex.sprint("\\end{multicols}")
+\end{luacode*}
+
+\vfill
+\pagebreak
+
+\begin{center}
 \huge{manuscript sources of the gregall font}
 \end{center}
 
@@ -509,6 +728,7 @@
 \texttt{C54A} Audi filia \texttt{GT417}\\
 \texttt{C56B} Beatus vir \texttt{GT475}\\
 \texttt{C56D} Desiderium animae \texttt{GT432}\\
+\texttt{C57B} Beatus vir \texttt{GT481}\\
 \texttt{C58A} Adiutor \texttt{GT69}\\
 \texttt{C59D} De profundis \texttt{GT673}\\
 \texttt{C60S} Sciant gentes \texttt{GT88}\\
@@ -553,6 +773,7 @@
 \texttt{C149A} Alleluia. Paratum cor meum \texttt{GT344}\\
 \texttt{C150L} Alleluia Laetatus \texttt{GT19}\\
 \texttt{C153S} Alleluia Sancti tui, Domine, benedicent \texttt{GT463}\\
+\texttt{C153B} Alleluia Beatus vir qui suffert \texttt{GT511}\\
 \texttt{C154A} Alleluia Gaudete iusti \texttt{GT430}
 
 \noindent\textbf{Einsiedeln codex 121}
@@ -577,6 +798,7 @@
 \texttt{E39E} Exiit sermo inter \texttt{GT636}\\
 \texttt{E42A} Anima nostra \texttt{GT466}\\
 \texttt{E51R} Reges tharsis \texttt{OT21}\\
+\texttt{E64L} Laetamini in Domino \texttt{OT140}\\
 \texttt{E69P} Posuisti Domine \texttt{GT477}\\
 \texttt{E75G} Gaudeamus omnes \texttt{GT545}\\
 \texttt{E82D} De profundis \texttt{GT673}\\
@@ -649,9 +871,13 @@
 \texttt{H114N} Nativitas tua \texttt{AM1035}\\
 \texttt{H118G} Gaude, Maria Virgo \texttt{NR130*}\\
 \texttt{H119C} Cum inducerent\\
+\texttt{H173I} Insurrexerunt in me \texttt{NR364}\\
+\texttt{H173C} Contumelias et terrores \texttt{NR365}\\
 \texttt{H179L} Liberavit Dominus \texttt{ARII183}\\
 \texttt{H179A} Amicus meus osculi \texttt{NR381}\\
 \texttt{H179I} Iudas mercator \texttt{NR382}\\
+\texttt{H219T} Tradiderunt me \texttt{NR408}\\
+\texttt{H219I} Iesum tradidit impius \texttt{NR409}\\
 \texttt{H266D} Domino si in tempore\\
 \texttt{H269S} Spiritus Sanctus\\
 \texttt{H269D} Dum complerentur \texttt{NR493}\\
@@ -844,6 +1070,7 @@
 \sneume{toS3lst2} & \texttt{toS3lst2} & \texttt{C59D} & tuae\\
 \sneume{pq!cl-} & \texttt{pq!cl-} & \texttt{C87E} & sanasti\\
 \sneume{to>1} & \texttt{to>1} & \texttt{E130I} & obdormiam & \fbox{2.166x}\\
+\sneume{to>2} & \texttt{to>2} & \texttt{H219T} & fortes: & \fbox{1.63x}\\
 \sneume{to->} & \texttt{to->} & \texttt{E158D} & respexit & \fbox{2.166x}\\
 \sneume{toS2sux1} & \texttt{toS2sux1} & \texttt{C46O} & Surge\\ \hline
 & \multicolumn{3}{l}{\textbf{climacus}} & \\
@@ -895,6 +1122,7 @@
 \sneume{vi-su1sut1} & \texttt{vi-su1sut1} \textit{Cf.} \sneume{vi-su1sut1su2} & \multicolumn{3}{l}{\texttt{vi-su1sut1su2} minus subpunctis}\\
 \sneume{vi-su2sut1} & \texttt{vi-su2sut1} & \texttt{N296V} & alleluia\\
 \sneume{vi-su1sux1} & \texttt{vi-su1sux1} & \texttt{E373B} & Sanctum & \fbox{2.133x}\\
+\sneume{vi-su2sux1} & \texttt{vi-su2sux1} & \texttt{C49I} & eum\\
 \sneume{vi-sut4} & \texttt{vi-sut4} & \texttt{H16A} & servient & \fbox{1.7x}\\
 \sneume{vi-suu2} & \texttt{vi-suu2} & \texttt{H23E} & ecce & \fbox{1.7x}\\
 \sneume{vi-suu3} & \texttt{vi-suu3} & \texttt{H35G} & veniet & \fbox{1.7x}\\
@@ -944,6 +1172,7 @@
 \sneume{pe-su2} & \texttt{pe-su2} & \texttt{H73S} & adoraverunt\\
 \sneume{pe-1su2} & \texttt{pe-1su2} & \texttt{C64Q} & habitat\\
 \sneume{pe-1sut2} & \texttt{pe-1sut2} & \texttt{H104T} & confitemur\\
+\sneume{pe-1sut1suw1} & \texttt{pe-1sut1suw1} & \texttt{H219I} & videret & \fbox{1.63x}\\
 \sneume{peSsu2} & \texttt{peSsu2} & \texttt{A17T} & eius\\
 \sneume{peSsut2} & \texttt{peSsut2} & \texttt{C27E} & sanctos\\
 \sneume{vippt1su2} & \texttt{vippt1su2} & \texttt{C56B} & benedicetur.\\
@@ -1118,7 +1347,9 @@
 \sneume{su1sut2} & \texttt{su1sut2} \textit{Cf.} \sneume{visu1sut2} & \multicolumn{2}{l}{\texttt{visu1sut2}}\\
 \sneume{su1suu1} & \texttt{su1suu1} \textit{Cf.} \sneume{visu1suu1} & \multicolumn{2}{l}{\texttt{visu1suu1}}\\
 \sneume{su2suw1} & \texttt{su2suw1} \textit{Cf.} \sneume{visu2suw1} & \multicolumn{2}{l}{\texttt{visu2suw1}}\\
+\sneume{su2sux1} & \texttt{su2sux1} \textit{Cf.} \sneume{vi-su2sux1} & \multicolumn{2}{l}{\texttt{vi-su2sux1}}\\
 \sneume{sut1su2} & \texttt{sut1su2} \textit{Cf.} \sneume{visut1su2} & \multicolumn{2}{l}{\texttt{visut1su2}}\\
+\sneume{sut1suw1} & \texttt{sut1suw1} \textit{Cf.} \sneume{pe-1sut1suw1} & \multicolumn{2}{l}{\texttt{pe-1sut1suw1}}\\
 \sneume{sut3} & \texttt{sut3} \textit{Cf.} \sneume{visut3} & \multicolumn{2}{l}{\texttt{visut3}}\\
 \sneume{suv1su2} & \texttt{suv1su2} \textit{Cf.} \sneume{visuv1su2} & \multicolumn{2}{l}{\texttt{visuv1su2}}\\
 \sneume{sut4} & \texttt{sut4} \textit{Cf.} \sneume{visut4} & \multicolumn{2}{l}{\texttt{visut4}}\\
@@ -1211,6 +1442,7 @@
 \sneume{qi!cl-} & \texttt{qi!cl-} & \texttt{C148A} & factus\\
 \sneume{qi!cl>} & \texttt{qi!cl>} & \texttt{H77S} & Magi\\
 \sneume{qi!po} & \texttt{qi!po} & \texttt{H87E} & Deus\\
+\sneume{qi!po>} & \texttt{qi!po>} & \texttt{H173C} & adversum & \fbox{1.9x}\\
 \sneume{pf!clM-ppt1} & \texttt{pf!clM-ppt1} & \texttt{E327O} & narante & \fbox{2.166x}\\
 \sneume{cl!po>ppt1} & \texttt{cl!po>ppt1} & \texttt{E327O} & narante & \fbox{2.166x}\\
 \sneume{qlppt1} & \texttt{qlppt1} & \texttt{C38T} & Sede\\
@@ -1255,7 +1487,8 @@
 \sneume{ql-su1sut1} & \texttt{ql-su1sut1} & \texttt{H307F} & iustitiae & \fbox{2.0x}\\
 \sneume{qippt2sut2} & \texttt{qippt2sut2} & \texttt{H297B} & generationes & \fbox{2.0x}\\
 \sneume{ql!vssu3} & \texttt{ql!vssu3} & \texttt{H443V} & ei & \fbox{2.0x}\\
-\sneume{to!ciG} & \texttt{to!ciG} & \texttt{C28T} & gloriae.\\
+\sneume{to!ciG} & \texttt{to!ciG} & \texttt{E51R} & eum & \fbox{2.0x}\\
+\sneume{to!ciGhh} & \texttt{to!ciG} & \texttt{C28T} & gloriae.\\
 \sneume{to!cl} & \texttt{to!cl} & \texttt{C84T} & pupillo\\
 \sneume{to!cl!cl!cl} & \texttt{to!cl!cl!cl} & \texttt{C64Q} & sepavit,\\
 \sneume{to!cl!po} & \texttt{to!cl!po} & \texttt{E31T} & veritas & \fbox{2.166x}\\
@@ -1267,6 +1500,7 @@
 \sneume{to!clS} & \texttt{to!clS} & \texttt{C43A} & terram.\\
 \sneume{to!cl!cl} & \texttt{to!cl!cl} & \texttt{C43A} & Domini,\\
 \sneume{to!po} & \texttt{to!po} & \texttt{C64Q} & sagitta\\
+\sneume{to!posu2} & \texttt{to!posu2} & \texttt{C49I} & eo,\\
 \sneume{to!pr} & \texttt{to!pr} & \texttt{G11V} & Deo & \fbox{0.85x}\\
 \sneume{to!pi} & \texttt{to!pi} & \texttt{C60C} & tui.\\
 \sneume{toSsu2} & \texttt{toSsu2} & \texttt{H72H} & mihi\\
@@ -1286,11 +1520,17 @@
 \sneume{toS2sut2} & \texttt{toS2sut2} & \texttt{C150L} & dicta\\
 \sneume{to-1su2} & \texttt{to-1su2} & \texttt{H322C} & ostendere & \fbox{2.0x}\\
 \sneume{to-1su1} & \texttt{to-1su1} & \texttt{H323B} & Gallus & \fbox{2.0x}\\
+\sneume{to-1suu1} & \texttt{to-1suu1} & \texttt{H173I} & me & \fbox{1.8x}\\
 \sneume{to-1suu1su2} & \texttt{to-1suu1su2} & \texttt{H324V} & cognovi & \fbox{2.0x}\\
 \sneume{po-1pp2su1sux1} & \texttt{po-1pp2su1sux1} & \texttt{H323D} & desiderium & \fbox{2.0x}\\
 \sneume{po-1su1sux1} & \texttt{po-1su1sux1} \textit{Cf.} \sneume{po-1pp2su1sux1} & \multicolumn{3}{l}{\texttt{po-1pp2su1sux1} minus bipunctis}\\
 \sneume{pisu1} & \texttt{pisu1} & \texttt{H307N} & annuntiavit & \fbox{2.0x}\\
-\sneume{pq-su2} & \texttt{pq-su2} & \texttt{C132D} & praetioso\\ \hline
+\sneume{pisut1} & \texttt{pisut1} & \texttt{C153B} & Alleluia\\
+\sneume{pq-su2} & \texttt{pq-su2} & \texttt{C132D} & praetioso\\
+\sneume{pe!vi} & \texttt{pe!vi} & \texttt{C57B} & qui\\
+\sneume{tgsuu1} & \texttt{tgsuu1} & \texttt{C49I} & eum.\\
+\sneume{tgSsuu1} & \texttt{tgSsuu1} & \texttt{C57B} & nimis.\\
+\sneume{sa-su2sut1} & \texttt{sa-su2sut1} & \texttt{C49I} & eum\\ \hline
 \end{supertabular}
 
 \begin{supertabular}{llllll}\noindent
@@ -1326,6 +1566,7 @@
 \sneume{lspar} & \texttt{lspar} & \texttt{E104S} & miserere & paratim & \fbox{2.166x}\\
 \sneume{lspfec} & \texttt{lspfec} & \texttt{E2D} & fructum & perfecte & \fbox{2.166x}\\
 \sneume{lspm} & \texttt{lspm} & \texttt{C40V} & suam. & \multicolumn{2}{l}{parvum mediocriter}\\
+\sneume{lspulcre} & \texttt{lspulcre} & \texttt{E64L} & hac & pulcre & \fbox{2.0x}\\
 \sneume{lss} & \texttt{lss} & \texttt{C27E} & sanctos & \multicolumn{2}{l}{sursum}\\
 \sneume{lssb} & \texttt{lssb} & \texttt{C40V} & iustitiam & \multicolumn{2}{l}{sursum bene}\\
 \sneume{lssc} & \texttt{lssc} & \texttt{C84T} & Tibi & \multicolumn{2}{l}{sursum celeriter}\\
@@ -1342,6 +1583,812 @@
 \sneume{lsvol} & \texttt{lsvol} & \texttt{C58A} & aeternum & \multicolumn{2}{l}{volubiliter}\\
 \sneume{lsx} & \texttt{lsx} & \texttt{C87E} & me: & \multicolumn{2}{l}{expectare}\\ \hline
 \end{supertabular}
+\onecolumn
 }
 
+\vfill
+\pagebreak
+
+\begin{center}
+\huge{manuscript sources of the grelaon font}
+\end{center}
+
+\textit{The list of glyphs uses following abbreviations for manuscript
+references; the page number is always for the start of some antiphon,
+responsory, mass propers, even when the actual neume is on a later page.
+At the end of lines, \texttt{GT} stands for Graduale Triplex, Solesmes,
+1979, \texttt{OT} for Offertoriale Triplex, Solesmes, 1985, \texttt{GN}
+for Graduale Novum de Dominicis et Festis, Conbrio Verlag Regensburg, 2011,
+followed by page number which also contains the corresponding
+propers, antiphons or responsories.}
+
+\textit{All the grelaon font glyphs taken from the LAON\_BM\_ms239 codex with
+the permission from the Bibliothèque municipale de la ville de Laon
+\url{http://manuscrit.ville-laon.fr}, the picture fragments from there are
+only present in the font source file to help drawing the glyphs.}
+
+{\footnotesize
+
+\begin{multicols}{2}
+
+\noindent\textbf{Graduale Laudunensis, codex 239}
+
+\noindent 
+\texttt{L1} = \url{http://manuscrit.ville-laon.fr/_app/_visualisation.php?cote=Ms239&vue=9}\\
+\texttt{L8U} Universi qui te \texttt{GT16}\\
+\texttt{L8A} Ad te Domine levavi \texttt{OT5}\\
+\texttt{L8D} Dominus dabit \texttt{GT17}\\
+\texttt{L9E} Ex Sion species \texttt{GT18}\\
+\texttt{L10I} Ierusalem surge \texttt{GT20}\\
+\texttt{L11Q} Qui sedes, Domine \texttt{GT22}\\
+\texttt{L13A} Ave Maria \texttt{GT36}\\
+\texttt{L14P} Prope es tu Domine \texttt{GT24}\\
+\texttt{L14O} Ostende nobis \texttt{GT31}\\
+\texttt{L17H} Hodie scietis \texttt{GT38}\\
+\texttt{L19B} Benedictus qui venit \texttt{GT45}\\
+\texttt{L20P} Puer natus est \texttt{GT47}\\
+\texttt{L24D} Dextera Domini \texttt{GT194}\\
+\texttt{L24T} Timebunt gentes \texttt{GT265}\\
+\texttt{L25L} Laetabitur iustus \texttt{GT473}\\
+\texttt{L25M} Mirabantus omnes \texttt{GN232}\\
+\texttt{L28G} Gaudeamus omnes \texttt{GT545}\\
+\texttt{L31D} De profundis \texttt{GT673}\\
+\texttt{L33S} Sciant gentes \texttt{GT88}\\
+\texttt{L33C} Commovisti Domine \texttt{GT89}\\
+\texttt{L33P} Perfice gressus \texttt{OT90}\\
+\texttt{L34E} Esto mihi in Deum \texttt{GT275}\\
+\texttt{L35T} Tu es Deus \texttt{GT244}\\
+\texttt{L37M} Misereris omnium \texttt{GT62}\\
+\texttt{L37S} Miserere mei Deus \texttt{GT63}\\
+\texttt{L38I} Iacta cogitatum \texttt{GT285}\\
+\texttt{L40Q} Qui habitat \texttt{GT73}\\
+\texttt{L43L} Levabo oculos meos \texttt{GT78}\\
+\texttt{L43S} Scapulis suis \texttt{GT77}\\
+\texttt{L43I} Sicut oculi servorum \texttt{GT77}\\
+\texttt{L44D} Domine refugium \texttt{GT79}\\
+\texttt{L44I} Dirigatur oratio \texttt{GT340}\\
+\texttt{L45R} Reminiscere miserationum \texttt{GT81}\\
+\texttt{L53C} Confitemini Domino \texttt{GT158}\\
+\texttt{L54A} Adiutor meus \texttt{GT86}\\
+\texttt{L54B} Benedicam Dominum \texttt{OT88}\\
+\texttt{L56D} Deus in adiutorium \texttt{GT315}\\
+\texttt{L56S} Salvum fac populum \texttt{GT354}\\
+\texttt{L56I} Iustus Dominus \texttt{GT93}\\
+\texttt{L56P} Propitius esto Domine \texttt{GT288}\\
+\texttt{L58A} Ad Dominum dum tribularer \texttt{GT282}\\
+\texttt{L60E} Exsurge Domine \texttt{GT96}\\
+\texttt{L60A} Ad te levavi \texttt{GT97}\\
+\texttt{L61I} Iustitiae Domini \texttt{GT309}\\
+\texttt{L64O} Oculi omnium \texttt{GT343}\\
+\texttt{L64D} Domine fac mecum \texttt{OT37}\\
+\texttt{L67Q} Qui biberit aquam \texttt{GT99}\\
+\texttt{L67S} Si ambulem \texttt{GT125}\\
+\texttt{L68N} Nemo te condemnavit \texttt{GT124}\\
+\texttt{L68Q} Qui confidunt \texttt{GT109}\\
+\texttt{L71D} Dum santificatus fuero \texttt{GT249}\\
+\texttt{L72B} Benedicite gentes \texttt{GT231}\\
+\texttt{L75V} Videns Dominus \texttt{GT124}\\
+\texttt{L76E} Eripe me Domine \texttt{GT121}\\
+\texttt{L77S} Saepe expugnaverunt \texttt{GT122}\\
+\texttt{L77C} Confitebor tibi Domine \texttt{GT123}\\
+\texttt{L78H} Hoc corpus \texttt{GT170}\\
+\texttt{L80S} Sperent in te omnes \texttt{GT286}\\
+\texttt{L81E} Exaltabo te Domine \texttt{GT112}\\
+\texttt{L81R} Eripe me de inimicis \texttt{GT129}\\
+\texttt{L82O} Omnia quae fecisti \texttt{GT342}\\
+\texttt{L82T} Tollite hostias \texttt{GT272}\\
+\texttt{L84B} Benedictus es, Domine \texttt{OT48}\\
+\texttt{L90D} Deus Deus meus \texttt{GT144}\\
+\texttt{L92E} Exsurge Domine \texttt{GT150}\\
+\texttt{L93E} Erubescant et revereantur \texttt{GT152}\\
+\texttt{L93G} Ego autem dum mihi \texttt{GT152}\\
+\texttt{L94C} Custodi me Domine \texttt{GT154}\\
+\texttt{L95D} Domine, exaudi orationem \texttt{GT172}\\
+\texttt{L99P} Popule meus quid \texttt{GT176}\\
+\texttt{L101V} Vinea facta est \texttt{GT188}\\
+\texttt{L103R} Resurrexi \texttt{GT196}\\
+\texttt{L103H} Haec dies \texttt{GT196}\\
+\texttt{L103P} Alleluia Pascha nostrum \texttt{GT197}\\
+\texttt{L103T} Terra tremuit \texttt{GT199}\\
+\texttt{L104I} Introduxit vos Dominus \texttt{GT200}\\
+\texttt{L105A} Angelus Dominus \texttt{GT217}\\
+\texttt{L105N} Angelus Dominus \texttt{GT201}\\
+\texttt{L106S} Surrexit Dominus \texttt{GT207}\\
+\texttt{L107H} Haec dies \texttt{GT206}\\
+\texttt{L109P} Populus acquisitionis \texttt{GT210}\\
+\texttt{L112D} Deus Deus meus \texttt{GT224}\\
+\texttt{L112O} Omnes qui in Christo \texttt{GT61}\\
+\texttt{L113E} Ego sum pastor \texttt{GT224}\\
+\texttt{L114C} Cantate Domino \texttt{GT225}\\
+\texttt{L114V} Vocem iucunditatis \texttt{GT229}\\
+\texttt{L117R} Repleti sumus \texttt{GT441}\\
+\texttt{L118E} Ego sum vitis vera \texttt{GT228}\\
+\texttt{L122N} Non vos relinquam \texttt{GT232}\\
+\texttt{L122V} Viri Galilaei \texttt{OT172}\\
+\texttt{L123A} Ascendit Deus \texttt{GT237}\\
+\texttt{L123E} Exaudi Domine vocem \texttt{GT241}\\
+\texttt{L125U} Ultimo festivitatis \texttt{GT251}\\
+\texttt{L125S} Spiritus Domini \texttt{GT252}\\
+\texttt{L126F} Factus est repente \texttt{GT256}\\
+\texttt{L128S} Spiritus ubi vult spirat \texttt{GT218}\\
+\texttt{L132E} Ecce quam bonum \texttt{GT351}\\
+\texttt{L136A} Amen dico vobis quod vos \texttt{GT436}\\
+\texttt{L138S} Semel iuravi \texttt{GT492}\\
+\texttt{L144C} Clamaverunt iusti \texttt{GT454}\\
+\texttt{L149E} Ego dixi Domine \texttt{GT279}\\
+\texttt{L149C} Cantabo Domino qui bona \texttt{GT283}\\
+\texttt{L152S} Sicut in holocausto \texttt{GT299}\\
+\texttt{L152I} Inclina aurem tuam \texttt{GT300}\\
+\texttt{L164D} De profundis \texttt{GT368}\\
+\texttt{L168I} Iubilate Deo \texttt{GT258}\\
+\texttt{L168S} Specie tua \texttt{GT416}\\
+\texttt{L168L} Laudate Deum \texttt{GT262}\\
+\texttt{L169A} Adorabo ad templum \texttt{GT270}\\
+\texttt{L173D} Deus iudes iustus \texttt{GT286}\\
+\texttt{L174D} Domine in virtute tua \texttt{GT292}\\
+\texttt{L174I} In te Domine speravi \texttt{GT296}\\
+\texttt{L174O} Omnes gentes plaudite manibus \texttt{GT298}\\
+\texttt{L174T} Te dece hymnus \texttt{GT305}\\
+
+\end{multicols}
+}
+
+{
+\footnotesize
+\twocolumn
+\begin{supertabular}{lllll}\noindent
+& \multicolumn{3}{l}{\textbf{uncinus}} & \\
+\lneume{un} & \texttt{un} & \texttt{L78H} & testamenti\\
+\lneume{un1} & \texttt{un1} & \texttt{L78H} & calix\\
+\lneume{un2} & \texttt{un2} \textit{Cf.} \lneume{un2lsm1} & \multicolumn{3}{l}{\texttt{un2lsm1} minus letter} \\
+\lneume{un2lsm1} & \texttt{un2lsm1} & \texttt{L82O} & fecisti\\
+\lneume{unlsm1} & \texttt{unlsm1} & \texttt{L75V} & qui\\
+\lneume{unlst1} & \texttt{unlst1} & \texttt{L103R} & alleluia\\
+\lneume{unlst2} & \texttt{unlst2} & \texttt{L82O} & fac\\
+\lneume{unlst8} & \texttt{unlst8} & \texttt{L24D} & opera\\
+\lneume{un1lst8} & \texttt{un1lst8} & \texttt{L112O} & Christo\\
+\lneume{unlsm2lss3lst8} & \texttt{unlsm2lss3lst8} & \texttt{L43S} & scuto\\ \hline
+& \multicolumn{3}{l}{\textbf{punctum}} & \\
+\lneume{pu} & \texttt{pu} & \texttt{L82O} & iudicio\\
+\lneume{pu1} & \texttt{pu1} & \texttt{L56D} & revereantur\\
+\lneume{pulsnt3} & \texttt{pulsnt3} & \texttt{L75V} & flentes\\ \hline
+& \multicolumn{3}{l}{\textbf{virga}} & \\
+\lneume{vi} & \texttt{vi} & \texttt{L82O} & Domine\\
+\lneume{viS} & \texttt{viS} \textit{Cf.} \lneume{vipp2su2} & \multicolumn{3}{l}{\texttt{vipp2su2} minus punctis} \\
+\lneume{vi>} & \texttt{vi>} & \texttt{L78H} & in\\
+\lneume{vi>1} & \texttt{vi>1} \textit{Cf.} \lneume{vi>1lsa2lsc8} & \multicolumn{3}{l}{\texttt{vi>1lsa2lsc8} minus letters} \\
+\lneume{vi>2} & \texttt{vi>2} & \texttt{L82O} & nobiscum\\
+\lneume{vilst1} & \texttt{vilst1} & \texttt{L78H} & meam\\
+\lneume{vilst2} & \texttt{vilst2} & \texttt{L95D} & meus\\
+\lneume{vilst9} & \texttt{vilst9} & \texttt{L105A} & quaeritis,\\
+\lneume{vilss1} & \texttt{vilss1} & \texttt{L103P} & Alleluia.\\
+\lneume{vilss2} & \texttt{vilss2} & \texttt{L95D} & avertas\\
+\lneume{vilsst1} & \texttt{vilsst1} & \texttt{L103P} & Alleluia.\\
+\lneume{vilst2lsa8} & \texttt{vilst2lsa8} & \texttt{L95D} & eius.\\
+\lneume{vi>lsa6} & \texttt{vi>lsa6} & \texttt{L78H} & testamenti\\
+\lneume{vi>lsc6} & \texttt{vi>lsc6} & \texttt{L56D} & adiuvandum\\
+\lneume{vi>1lsa2lsc8} & \texttt{vi>1lsa2lsc8} & \texttt{L126F} & loquentes\\ \hline
+& \multicolumn{3}{l}{\textbf{tractulus}} & \\
+\lneume{ta} & \texttt{ta} & \texttt{L24T} & tuam.\\
+\lneume{ta>} & \texttt{ta>} & \texttt{L78H} & dicit\\
+\lneume{ta>1} & \texttt{ta>1} & \texttt{L82O} & mandatis\\
+\lneume{ta>2} & \texttt{ta>2} & \texttt{L90D} & sancto\\
+\lneume{ta>lsnl2} & \texttt{ta>lsnl2} & \texttt{L45R} & dominentur\\
+\lneume{ta>2lsc2} & \texttt{ta>2lsc2} & \texttt{L90D} & Libera\\ \hline
+& \multicolumn{3}{l}{\textbf{pes}} & \\
+\lneume{pe} & \texttt{pe} & \texttt{L78H} & commemorationem\\
+\lneume{peG} & \texttt{peG} & \texttt{L78H} & vobis\\
+\lneume{pe>} & \texttt{pe>} & \texttt{L95D} & exaudi\\
+\lneume{pe>1} & \texttt{pe>1} & \texttt{L78H} & sanguine\\
+\lneume{peG1} & \texttt{peG1} & \texttt{L67S} & tua,\\
+\lneume{pelsa2} & \texttt{pelsa2} & \texttt{L82O} & peccavimus\\
+\lneume{pelsc2} & \texttt{pelsc2} & \texttt{L67S} & tuus,\\
+\lneume{pelsl2} & \texttt{pelsl2} & \texttt{L43L} & iustitiam\\
+\lneume{pelsm2} & \texttt{pelsm2} & \texttt{L81E} & meam,\\
+\lneume{pelsn2} & \texttt{pelsn2} & \texttt{L149C} & qui\\
+\lneume{pelsn3} & \texttt{pelsn3} & \texttt{L125S} & replevit\\
+\lneume{pelsst1} & \texttt{pelsst1} & \texttt{L103P} & immolatum\\
+\lneume{pelsst1lsm4} & \texttt{pelsst1lsm4} & \texttt{L44I} & Elevatio\\
+\lneume{pelst2} & \texttt{pelst2} & \texttt{L103H} & saeculum\\
+\lneume{peGlsf1} & \texttt{peGlsf1} & \texttt{L67S} & non\\
+\lneume{peGlsa6} & \texttt{peGlsa6} & \texttt{L109P} & vocavit\\
+\lneume{pe>1lsa6} & \texttt{pe>1lsa6} & \texttt{L114V} & alleluia\\ \hline
+& \multicolumn{3}{l}{\textbf{porrectus}} & \\
+\lneume{po} & \texttt{po} & \texttt{L78H} & facite\\
+\lneume{poG} & \texttt{poG} & \texttt{L64D} & mecum\\
+\lneume{poM} & \texttt{poM} \textit{Cf.} \lneume{poMsun1} & \multicolumn{3}{l}{\texttt{poMsun1} minus uncinus} \\
+\lneume{po>} & \texttt{po>} \textit{Cf.} \lneume{po>pp2} & \multicolumn{3}{l}{\texttt{po>pp2} minus prepunctis} \\
+\lneume{po>1} & \texttt{po>1} & \texttt{L81E} & descendentibus\\
+\lneume{polsf2lst3} & \texttt{polsf2lst3} & \texttt{L95D} & meus\\
+\lneume{polst2} & \texttt{polst2} & \texttt{L103H} & saeculum\\ \hline
+& \multicolumn{3}{l}{\textbf{clivis}} & \\
+\lneume{cl} & \texttt{cl} \textit{Cf.} \lneume{cllsn9} & \multicolumn{3}{l}{\texttt{cllsn9} minus letter} \\
+\lneume{clG} & \texttt{clG} & \texttt{L78H} & hoc\\
+\lneume{clG1} & \texttt{clG1} & \texttt{L105N} & accedens\\
+\lneume{clGlsa5} & \texttt{clGlsa5} & \texttt{L82O} & obedivimus\\
+\lneume{clGlsnl2} & \texttt{clGlsnl2} & \texttt{L44I} & Elevatio\\
+\lneume{clM} & \texttt{clM} & \texttt{L78H} & quotiescumque\\
+\lneume{cl>} & \texttt{cl>} & \texttt{L75V} & monumentum\\
+\lneume{cl>1} & \texttt{cl>1} & \texttt{L34E} & locum\\
+\lneume{cllshn8} & \texttt{cllshn8} & \texttt{L64O} & imples\\
+\lneume{cllsn8} & \texttt{cllsn8} & \texttt{L95D} & velociter\\
+\lneume{cllsn9} & \texttt{cllsn9} & \texttt{L67S} & tua,\\
+\lneume{cllsst8} & \texttt{cllsst8} & \texttt{L64O} & imples\\
+\lneume{cllst9} & \texttt{cllst9} & \texttt{L95D} & tempus\\
+\lneume{cllsst6} & \texttt{cllsst6} & \texttt{L43L} & mirabilia\\
+\lneume{cllsm2} & \texttt{cllsm2} & \texttt{L45R} & nobis\\
+\lneume{cllsnt2} & \texttt{cllsnt2} & \texttt{L92E} & me\\
+\lneume{cl>lsa5} & \texttt{cl>lsa5} & \texttt{L71D} & effundam\\ \hline
+& \multicolumn{3}{l}{\textbf{oriscus-clivis}} & \\
+\lneume{oc} & \texttt{oc} & \texttt{L78H} & sanguine\\
+\lneume{ocG} & \texttt{ocG} & \texttt{L56D} & Deus\\
+\lneume{ocG1} & \texttt{ocG1} & \texttt{L11Q} & veniet\\
+\lneume{ocGlsa5} & \texttt{ocGlsa5} & \texttt{L103T} & resurgeret\\
+\lneume{oclst8} & \texttt{oclst8} & \texttt{L95D} & Domine\\ \hline
+& \multicolumn{3}{l}{\textbf{torculus}} & \\
+\lneume{to} & \texttt{to} & \texttt{L78H} & pro\\
+\lneume{toS} & \texttt{toS} & \texttt{L56S} & populum\\
+\lneume{toS1} & \texttt{toS1} & \texttt{L68N} & Nemo\\
+\lneume{toG} & \texttt{toG} & \texttt{L78H} & tradetur\\
+\lneume{to>} & \texttt{to>} & \texttt{L67S} & mortis\\
+\lneume{to~} & \texttt{to~} & \texttt{L37M} & et\\
+\lneume{tolsf4} & \texttt{tolsf4} & \texttt{L95D} & tempus\\
+\lneume{tolsn8} & \texttt{tolsn8} & \texttt{L44I} & vespertinum.\\
+\lneume{tolst9} & \texttt{tolst9} & \texttt{L103P} & Alleluia.\\
+\lneume{tolsth8} & \texttt{tolsth8} & \texttt{L56I} & Dominus,\\
+\lneume{tolsnt2lst9} & \texttt{tolsnt2lst9} & \texttt{L92E} & me\\
+\lneume{toGlsa1lst8} & \texttt{toGlsa1lst8} & \texttt{L109P} & alleluia.\\
+\lneume{toGlsa5} & \texttt{toGlsa5} & \texttt{L68N} & condemnabo\\
+\lneume{toSlsa5} & \texttt{toSlsa5} & \texttt{L77S} & enim\\
+\lneume{to>lsa5} & \texttt{to>lsa5} & \texttt{L118E} & in\\
+\lneume{to>2lsa3} & \texttt{to>2lsa3} & \texttt{L67Q} & salientis\\
+\lneume{to>2lsc1lsa3} & \texttt{to>2lsc1lsa3} & \texttt{L104I} & terram\\ \hline
+& \multicolumn{3}{l}{\textbf{climacus}} & \\
+\lneume{ci} & \texttt{ci} & \texttt{L95D} & eius.\\
+\lneume{unsun2} & \texttt{unsun2} & \texttt{L82O} & da\\
+\lneume{unsun3} & \texttt{unsun3} & \texttt{L103P} & immolatus\\
+\lneume{unsux1} & \texttt{unsux1} & \texttt{L169A} & sanctum\\
+\lneume{unsun1su2} & \texttt{unsun1su2} & \texttt{L109P} & tenebris\\
+\lneume{pusu1sun1} & \texttt{pusu1sun1} & \texttt{L78H} & tradetur\\
+\lneume{pusu1sun2} & \texttt{pusu1sun2} & \texttt{L95D} & Sion\\
+\lneume{pusu2sun1} & \texttt{pusu2sun1} & \texttt{L95D} & eius.\\
+\lneume{visu1sun1} & \texttt{visu1sun1} & \texttt{L95D} & faciem\\
+\lneume{visu1sun2} & \texttt{visu1sun2} & \texttt{L40Q} & latere\\
+\lneume{visu1sun2lsa5} & \texttt{visu1sun2lsa5} & \texttt{L174D} & et\\
+\lneume{visu1sun2lsa6} & \texttt{visu1sun2lsa6} & \texttt{L174D} & et\\
+\lneume{visu1sun1su1} & \texttt{visu1sun1su1} \textit{Cf.} \lneume{visu1sun1su1lst6} & \multicolumn{3}{l}{\texttt{visu1sun1su1lst6} minus letter} \\
+\lneume{visu1sun1su1lst6} & \texttt{visu1sun1su1lst6} & \texttt{L105N} & descendit\\
+\lneume{visu1sun1su2} & \texttt{visu1sun1su2} \textit{Cf.} \lneume{visu1sun1su2lss1lst6} & \multicolumn{3}{l}{\texttt{visu1sun1su2lss1lst6} minus letters} \\
+\lneume{visu1sun1su2lss1lst6} & \texttt{visu1sun1su2lss1lst6} & \texttt{L168I} & Alleluia.\\
+\lneume{visu2} & \texttt{visu2} & \texttt{L95D} & misereberis\\
+\lneume{visun1su1sun1} & \texttt{visun1su1sun1} & \texttt{L60E} & conspectu\\
+\lneume{visun1su1sun1lst6} & \texttt{visun1su1sun1lst6} & \texttt{L35T} & virtutem\\
+\lneume{cilsf1} & \texttt{cilsf1} & \texttt{L95D} & Sion\\
+\lneume{cilsn8} & \texttt{cilsn8} & \texttt{L58A} & iniquis,\\
+\lneume{pusu1sun1lsf1} & \texttt{pusu1sun1lsf1} & \texttt{L95D} & mei\\
+\lneume{pusu1sun2lsa5} & \texttt{pusu1sun2lsa5} & \texttt{L67S} & timebo\\
+\lneume{pusu1sun1lst7} & \texttt{pusu1sun1lst7} & \texttt{L60E} & homo\\
+\lneume{pusu3} & \texttt{pusu3} & \texttt{L64O} & escam\\
+\lneume{pusu4} & \texttt{pusu4} & \texttt{L92E} & persequntur.\\
+\lneume{unsun2su1} & \texttt{unsun2su1} & \texttt{L64O} & escam\\
+\lneume{unsun1su1} & \texttt{unsun1su1} \textit{Cf.} \lneume{unsun1su1lst2lsc6} & \multicolumn{3}{l}{\texttt{unsun1su1lst2lsc6} minus letters} \\
+\end{supertabular}
+
+\vfill
+\pagebreak
+
+\begin{supertabular}{lllll}\noindent
+\lneume{unsun1su1lst2lsc6} & \texttt{unsun1su1lst2lsc6} & \texttt{L11Q} & deducis\\
+\lneume{unsun2lsa5} & \texttt{unsun2lsa5} & \texttt{L19B} & mirabile\\
+\lneume{unsun3lsa3} & \texttt{unsun3lsa3} & \texttt{L24T} & gentes\\
+\lneume{unsun3lsa6} & \texttt{unsun3lsa6} & \texttt{L24T} & tuam.\\
+\lneume{unsun2su2} & \texttt{unsun2su2} & \texttt{L169A} & confitebor\\
+\lneume{un1sun2su2} & \texttt{un1sun2su2} & \texttt{L136A} & aeternam\\
+\lneume{un1sun1su1sun1lsa1lsc4} & \texttt{un1sun1su1sun1lsa1lsc4} & \texttt{L60E} & retrorsum\\
+\lneume{un1sun1su1sun1lsa3lsc6} & \texttt{un1sun1su1sun1lsa3lsc6} & \texttt{L60E} & retrorsum\\
+\lneume{un1sun1su2} & \texttt{un1sun1su2} \textit{Cf.} \lneume{un1sun1su2lsa5} & \multicolumn{3}{l}{\texttt{un1sun1su2lsa5} minus letter} \\
+\lneume{un1sun1su2lsa5} & \texttt{un1sun1su2lsa5} & \texttt{L107H} & Domini\\ \hline
+& \multicolumn{3}{l}{\textbf{scandicus}} & \\
+\lneume{sc} & \texttt{sc} \textit{Cf.} \lneume{sclst2} & \multicolumn{3}{l}{\texttt{sclst2} minus letter} \\
+\lneume{sc1} & \texttt{sc1} & \texttt{L82O} & quia\\
+\lneume{sclst2} & \texttt{sclst2} & \texttt{L78H} & quotiescumque\\
+\lneume{sc1lsc4} & \texttt{sc1lsc4} & \texttt{L109P} & vocavit\\ \hline
+& \multicolumn{3}{l}{\textbf{porrectus flexus}} & \\
+\lneume{pf} & \texttt{pf} & \texttt{L78H} & corpus\\
+\lneume{pf1} & \texttt{pf1} & \texttt{L95D} & exaudi\\
+\lneume{pf2} & \texttt{pf2} & \texttt{L101V} & Sorec,\\
+\lneume{pfS} & \texttt{pfS} & \texttt{L56D} & festina\\
+\lneume{pfM} & \texttt{pfM} \textit{Cf.} \lneume{pfMlsmd3} & \multicolumn{3}{l}{\texttt{pfMlsmd3} minus letter} \\
+\lneume{pfMlsmd3} & \texttt{pfMlsmd3} & \texttt{L81E} & meam,\\
+\lneume{pf>} & \texttt{pf>} & \texttt{L164D} & ad\\
+\lneume{pf>1} & \texttt{pf>1} & \texttt{L90D} & miserunt\\
+\lneume{pf>2} & \texttt{pf>2} & \texttt{L104I} & alleluia,\\
+\lneume{pf~} & \texttt{pf~} & \texttt{L95D} & clamor\\
+\lneume{pf~1} & \texttt{pf~1} & \texttt{L31D} & ad\\ \hline
+& \multicolumn{3}{l}{\textbf{pes subbipunctis}} & \\
+\lneume{tosu1} & \texttt{tosu1} & \texttt{L82O} & Domine\\
+\lneume{tosun1} & \texttt{tosun1} & \texttt{L95D} & fumus\\
+\lneume{tosun2} & \texttt{tosun2} & \texttt{L105N} & revolvit\\
+\lneume{vippn1su2} & \texttt{vippn1su2} & \texttt{L82O} & misericordiae\\
+\lneume{topp1su1} & \texttt{topp1su1} \textit{Cf.} \lneume{topp1su1lsa6} & \multicolumn{3}{l}{\texttt{topp1su1lsa6} minus letter} \\
+\lneume{topp1su1lsa6} & \texttt{topp1su1lsa6} & \texttt{L95D} & ad\\
+\lneume{pesu2} & \texttt{pesu2} \textit{Cf.} \lneume{pesu2lst3} & \multicolumn{3}{l}{\texttt{pesu2lst3} minus letter} \\
+\lneume{pesu2lst3} & \texttt{pesu2lst3} & \texttt{L152I} & eruas\\
+\lneume{pesun3} & \texttt{pesun3} \textit{Cf.} \lneume{pesun3lss1lsa3} & \multicolumn{3}{l}{\texttt{pesun3lss1lsa3} minus letters} \\
+\lneume{pesun3lss1lsa3} & \texttt{pesun3lss1lsa3} & \texttt{L67S} & medio\\
+\lneume{pesu2sun1} & \texttt{pesu2sun1} & \texttt{L24T} & terrae\\
+\lneume{tosun1lsa5} & \texttt{tosun1lsa5} & \texttt{L67S} & tua,\\
+\lneume{tosu1lsc5} & \texttt{tosu1lsc5} & \texttt{L19B} & venit\\
+\lneume{toSsun1lsa5} & \texttt{toSsun1lsa5} & \texttt{L138S} & luna\\
+\lneume{tosun1su1sun1} & \texttt{tosun1su1sun1} & \texttt{L33S} & venti.\\
+\lneume{tosun1su2lsn3lst6} & \texttt{tosun1su2lsn3lst6} & \texttt{L112D} & nomine\\
+\lneume{tosun2lsa6} & \texttt{tosun2lsa6} & \texttt{L123A} & alleluia.\\ \hline
+& \multicolumn{3}{l}{\textbf{scandicus flexus}} & \\
+\lneume{sf} & \texttt{sf} & \texttt{L78H} & meo\\
+\lneume{sfG} & \texttt{sfG} & \texttt{L33C} & eam.\\ \hline
+& \multicolumn{3}{l}{\textbf{torculus resupinus}} & \\
+\lneume{tr} & \texttt{tr} & \texttt{L78H} & sumitis\\
+\lneume{trS} & \texttt{trS} & \texttt{L95D} & Domine,\\
+\lneume{tr>} & \texttt{tr>} & \texttt{L64D} & diligerent\\
+\lneume{poppn1} & \texttt{poppn1} & \texttt{L82O} & vero\\
+\lneume{po>ppn1} & \texttt{po>ppn1} & \texttt{L82O} & secundum\\
+\lneume{po>pp2} & \texttt{po>pp2} & \texttt{L28G} & angeli,\\
+\lneume{trlst3lshp7} & \texttt{trlst3lshp7} & \texttt{L109P} & alleluia.\\
+\lneume{trlss1lss3} & \texttt{trlss1lss3} & \texttt{L103P} & Christus.\\
+\lneume{trSlsc1} & \texttt{trSlsc1} & \texttt{L103P} & nostrum\\ \hline
+& \multicolumn{3}{l}{\textbf{distropha}} & \\
+\lneume{ds} & \texttt{ds} \textit{Cf.} \lneume{dslst2} & \multicolumn{3}{l}{\texttt{dslst2} minus letter} \\
+\lneume{dslst2} & \texttt{dslst2} & \texttt{L95D} & meam\\
+\lneume{dslst8} & \texttt{dslst8} & \texttt{L71D} & effundam\\
+\lneume{ds1} & \texttt{ds1} \textit{Cf.} \lneume{ds1pp3} & \multicolumn{3}{l}{\texttt{ds1pp3} minus prepunctis} \\ \hline
+\end{supertabular}
+
+\vfill
+\pagebreak
+
+\begin{supertabular}{lllll}\noindent
+& \multicolumn{3}{l}{\textbf{tristropha}} & \\
+\lneume{ts} & \texttt{ts} & \texttt{L82O} & fac\\
+\lneume{ts1} & \texttt{ts1} & \texttt{L76E} & Eripe\\
+\lneume{ts>} & \texttt{ts>} & \texttt{L56D} & adiuvandum\\
+\lneume{ts>1} & \texttt{ts>1} & \texttt{L103R} & alleluia\\
+\lneume{tslsa2} & \texttt{tslsa2} & \texttt{L13A} & tecum\\
+\lneume{tslsc2lst2} & \texttt{tslsc2lst2} & \texttt{L58A} & Domine,\\
+\lneume{ts>lsc2} & \texttt{ts>lsc2} & \texttt{L103R} & alleluia\\
+\lneume{ts>lsc6} & \texttt{ts>lsc6} & \texttt{L103T} & dum\\ \hline
+& \multicolumn{3}{l}{\textbf{trigonus}} & \\
+\lneume{tg} & \texttt{tg} & \texttt{L67S} & tua,\\
+\lneume{tglsn8} & \texttt{tglsn8} & \texttt{L67S} & mala\\
+\lneume{tglst9} & \texttt{tglst9} & \texttt{L103R} & alleluia\\ \hline
+& \multicolumn{3}{l}{\textbf{bivirga}} & \\
+\lneume{bv} & \texttt{bv} & \texttt{L82O} & Domine\\
+\lneume{bvlsa2} & \texttt{bvlsa2} & \texttt{L82O} & nobis\\ \hline
+& \multicolumn{3}{l}{\textbf{trivirga}} & \\
+\lneume{tv} & \texttt{tv} & \texttt{L103H} & bonus\\
+\lneume{tvlsm2} & \texttt{tvlsm2} & \texttt{L44I} & Elevatio\\ \hline
+& \multicolumn{3}{l}{\textbf{pressus}} & \\
+\lneume{pr} & \texttt{pr} & \texttt{L95D} & veniat\\
+\lneume{pi} & \texttt{pi} \textit{Cf.} \lneume{cl1!pi} & \multicolumn{3}{l}{\texttt{cl1!pi} minus clivis} \\ \hline
+& \multicolumn{3}{l}{\textbf{virga strata}} & \\
+\lneume{vs} & \texttt{vs} & \texttt{L64D} & Deus\\
+\lneume{vsG} & \texttt{vsG} & \texttt{L64D} & suavis\\ \hline
+& \multicolumn{3}{l}{\textbf{oriscus}} & \\
+\lneume{or} & \texttt{or} \textit{Cf.} \lneume{ocG} & \multicolumn{3}{l}{\texttt{ocG} minus uncinus} \\
+\lneume{orlst3} & \texttt{orlst3} & \texttt{L103P} & Alleluia.\\
+\lneume{or1} & \texttt{or1} \textit{Cf.} \lneume{ocG1} & \multicolumn{3}{l}{\texttt{ocG1} minus uncinus} \\
+\lneume{or>} & \texttt{or>} \textit{Cf.} \lneume{or>lsa1} & \multicolumn{3}{l}{\texttt{or>lsa1} minus letter} \\
+\lneume{or>lsa1} & \texttt{or>lsa1} & \texttt{L103R} & alleluia,\\ \hline
+& \multicolumn{3}{l}{\textbf{salicus}} & \\
+\lneume{sa} & \texttt{sa} & \texttt{L82O} & nomini\\
+\lneume{sa1} & \texttt{sa1} & \texttt{L78H} & novi\\
+\lneume{sa>1} & \texttt{sa>1} & \texttt{L9E} & sanctos\\
+\lneume{salsc4} & \texttt{salsc4} & \texttt{L93G} & exsurge\\
+\lneume{salsc6} & \texttt{salsc6} & \texttt{L93G} & autem,\\
+\lneume{sa1lsc4} & \texttt{sa1lsc4} & \texttt{L81E} & salvasti\\
+\lneume{sa1lsc6} & \texttt{sa1lsc6} & \texttt{L113E} & bonus,\\ \hline
+& \multicolumn{3}{l}{\textbf{pes quassus}} & \\
+\lneume{pq} & \texttt{pq} & \texttt{L103H} & eius.\\
+\lneume{pq1} & \texttt{pq1} & \texttt{L169A} & Alleluia. & \texttt{L174T}\\ \hline
+& \multicolumn{3}{l}{\textbf{quilisma}} & \\
+\lneume{ql} & \texttt{ql} \textit{Cf.} \lneume{qllsst2} & \multicolumn{3}{l}{\texttt{qllsst2} minus letter} \\
+\lneume{qllsst2} & \texttt{qllsst2} & \texttt{L53C} & Domine,\\
+\lneume{ql>} & \texttt{ql>} \textit{Cf.} \lneume{ql>ppn1} & \multicolumn{3}{l}{\texttt{ql>ppn1} minus uncinus} \\ \hline
+& \multicolumn{3}{l}{\textbf{pes stratus}} & \\
+\lneume{pt1} & \texttt{pt1} & \texttt{L13A} & ventris\\
+\lneume{pt2} & \texttt{pt2} & \texttt{L8U} & confundentur,\\
+\lneume{pt3} & \texttt{pt3} & \texttt{L94C} & Domine.\\ \hline
+& \multicolumn{3}{l}{\textbf{subpunctis}} & \\
+\lneume{su1} & \texttt{su1} \textit{Cf.} \lneume{cl1!pi!tosu1} & \multicolumn{2}{l}{\texttt{cl1!pi!tosu1}}\\
+\lneume{su1sun1} & \texttt{su1sun1} \textit{Cf.} \lneume{cl!toppz1su1sun1} & \multicolumn{2}{l}{\texttt{cl!toppz1su1sun1}}\\
+\lneume{su1sun1su1} & \texttt{su1sun1su1} \textit{Cf.} \lneume{visu1sun1su1lst6} & \multicolumn{2}{l}{\texttt{visu1sun1su1lst6}}\\
+\lneume{su1sun1su2} & \texttt{su1sun1su2} \textit{Cf.} \lneume{visu1sun1su2lss1lst6} & \multicolumn{2}{l}{\texttt{visu1sun1su2lss1lst6}}\\
+\lneume{su1sun2} & \texttt{su1sun2} \textit{Cf.} \lneume{pusu1sun2} & \multicolumn{2}{l}{\texttt{pusu1sun2}}\\
+\lneume{su1sux1} & \texttt{su1sux1} \textit{Cf.} \lneume{popp2su1sux1} & \multicolumn{2}{l}{\texttt{popp2su1sux1}}\\
+\lneume{su2} & \texttt{su2} \textit{Cf.} \lneume{cl1!pi!pesu2} & \multicolumn{2}{l}{\texttt{cl1!pi!pesu2}}\\
+\lneume{su2sun1} & \texttt{su2sun1} \textit{Cf.} \lneume{clsu2sun1lst6} & \multicolumn{2}{l}{\texttt{clsu2sun1lst6}}\\
+\lneume{su3} & \texttt{su3} \textit{Cf.} \lneume{pusu3} & \multicolumn{2}{l}{\texttt{pusu3}}\\
+\lneume{su4} & \texttt{su4} \textit{Cf.} \lneume{pusu4} & \multicolumn{2}{l}{\texttt{pusu4}}\\
+\lneume{sun1} & \texttt{sun1} \textit{Cf.} \lneume{cl1!pi!orsun1} & \multicolumn{2}{l}{\texttt{cl1!pi!orsun1}}\\
+\lneume{sun1su1} & \texttt{sun1su1} \textit{Cf.} \lneume{unsun1su1lst2lsc6} & \multicolumn{2}{l}{\texttt{unsun1su1lst2lsc6}}\\
+\lneume{sun1su1sun1} & \texttt{sun1su1sun1} \textit{Cf.} \lneume{visun1su1sun1} & \multicolumn{2}{l}{\texttt{visun1su1sun1}}\\
+\lneume{sun1su2} & \texttt{sun1su2} \textit{Cf.} \lneume{qlppn1sun1su2} & \multicolumn{2}{l}{\texttt{qlppn1sun1su2}}\\
+\lneume{sun2} & \texttt{sun2} \textit{Cf.} \lneume{qlsun2} & \multicolumn{2}{l}{\texttt{qlsun2}}\\
+\lneume{sun2su1} & \texttt{sun2su1} \textit{Cf.} \lneume{unsun2su1} & \multicolumn{2}{l}{\texttt{unsun2su1}}\\
+\lneume{sun2su2} & \texttt{sun2su2} \textit{Cf.} \lneume{unsun2su2} & \multicolumn{2}{l}{\texttt{unsun2su2}}\\
+\end{supertabular}
+
+\vfill
+\pagebreak
+
+\begin{supertabular}{lllll}\noindent
+\lneume{sun3} & \texttt{sun3} \textit{Cf.} \lneume{unsun3} & \multicolumn{2}{l}{\texttt{unsun3}}\\
+\lneume{sun4} & \texttt{sun4} \textit{Cf.} \lneume{bvsun4} & \multicolumn{2}{l}{\texttt{bvsun4}}\\
+\lneume{sux1} & \texttt{sux1} \textit{Cf.} \lneume{posux1} & \multicolumn{2}{l}{\texttt{posux1}}\\ \hline
+& \multicolumn{3}{l}{\textbf{prepunctis}} & \\
+\lneume{pp1} & \texttt{pp1} \textit{Cf.} \lneume{pupp1su2} & \multicolumn{2}{l}{\texttt{pupp1su2}}\\
+\lneume{pp2} & \texttt{pp2} \textit{Cf.} \lneume{cl1!pipp2} & \multicolumn{2}{l}{\texttt{cl1!pipp2}}\\
+\lneume{pp2ppn1} & \texttt{pp2ppn1} \textit{Cf.} \lneume{vipp2ppn1} & \multicolumn{2}{l}{\texttt{vipp2ppn1}}\\
+\lneume{pp3} & \texttt{pp3} \textit{Cf.} \lneume{vipp3lsn3} & \multicolumn{2}{l}{\texttt{vipp3lsn3}}\\
+\lneume{pp4} & \texttt{pp4} \textit{Cf.} \lneume{vipp4lst2} & \multicolumn{2}{l}{\texttt{vipp4lst2}}\\
+\lneume{ppn1} & \texttt{ppn1} \textit{Cf.} \lneume{po>ppn1} & \multicolumn{2}{l}{\texttt{po>ppn1}}\\
+\lneume{ppn1pp1} & \texttt{ppn1pp1} \textit{Cf.} \lneume{vippn1pp1} & \multicolumn{2}{l}{\texttt{vippn1pp1}}\\
+\lneume{ppn1pp1ppz1} & \texttt{ppn1pp1ppz1} \textit{Cf.} \lneume{vippn1pp1ppz1lst8} & \multicolumn{2}{l}{\texttt{vippn1pp1ppz1lst8}}\\
+\lneume{ppn1ppq1} & \texttt{ppn1ppq1} \textit{Cf.} \lneume{vippn1ppq1} & \multicolumn{2}{l}{\texttt{vippn1ppq1}}\\
+\lneume{ppn1ppz1} & \texttt{ppn1ppz1} \textit{Cf.} \lneume{ql!cl!orppn1ppz1} & \multicolumn{2}{l}{\texttt{ql!cl!orppn1ppz1}}\\
+\lneume{ppn1ppz1ppq1} & \texttt{ppn1ppz1ppq1} \textit{Cf.} \lneume{vi>1ppn1ppz1ppq1} & \multicolumn{2}{l}{\texttt{vi>1ppn1ppz1ppq1}}\\
+\lneume{ppn2} & \texttt{ppn2} \textit{Cf.} \lneume{vippn2lst3lsa4} & \multicolumn{2}{l}{\texttt{vippn2lst3lsa4}}\\
+\lneume{ppn2ppz1} & \texttt{ppn2ppz1} \textit{Cf.} \lneume{vippn2ppz1sun1lsa5} & \multicolumn{2}{l}{\texttt{vippn2ppz1sun1lsa5}}\\
+\lneume{ppn2ppz1ppq1} & \texttt{ppn2ppz1ppq1} \textit{Cf.} \lneume{vippn2ppz1ppq1lst2lsa8} & \multicolumn{2}{l}{\texttt{vippn2ppz1ppq1lst2lsa8}}\\
+\lneume{ppn3} & \texttt{ppn3} \textit{Cf.} \lneume{unppn3sun1lsa5} & \multicolumn{2}{l}{\texttt{unppn3sun1lsa5}}\\
+\lneume{ppn3ppz1} & \texttt{ppn3ppz1} \textit{Cf.} \lneume{toppn3ppz1sun1} & \multicolumn{2}{l}{\texttt{toppn3ppz1sun1}}\\
+\lneume{ppn4} & \texttt{ppn4} \textit{Cf.} \lneume{vippn4} & \multicolumn{2}{l}{\texttt{vippn4}}\\
+\lneume{ppq1} & \texttt{ppq1} \textit{Cf.} \lneume{vippq1} & \multicolumn{2}{l}{\texttt{vippq1}}\\
+\lneume{ppz1} & \texttt{ppz1} \textit{Cf.} \lneume{puppz1su2} & \multicolumn{2}{l}{\texttt{puppz1su2}}\\
+\lneume{ppz1ppq1} & \texttt{ppz1ppq1} \textit{Cf.} \lneume{vi>1ppz1ppq1} & \multicolumn{2}{l}{\texttt{vi>1ppz1ppq1}}\\ \hline
+& \multicolumn{3}{l}{\textbf{combined glyphs}} & \\
+\lneume{pe!ta} & \texttt{pe!ta} \textit{Cf.} \lneume{pe!talsa2} & \multicolumn{3}{l}{\texttt{pe!talsa2} minus letter} \\
+\lneume{pe!talsa2} & \texttt{pe!talsa2} & \texttt{L82O} & iudicio\\
+\lneume{pe!talsc1lst2} & \texttt{pe!talsc1lst2} & \texttt{L114C} & revelavit\\
+\lneume{pe!un} & \texttt{pe!un} \textit{Cf.} \lneume{pe!unlsc2} & \multicolumn{3}{l}{\texttt{pe!unlsc2} minus letter} \\
+\lneume{pe!unlsc2} & \texttt{pe!unlsc2} & \texttt{L95D} & meam\\
+\lneume{pe!pu} & \texttt{pe!pu} & \texttt{L95D} & eius.\\
+\lneume{pe!ta>2} & \texttt{pe!ta>2} \textit{Cf.} \lneume{pe!ta>2lsa2} & \multicolumn{3}{l}{\texttt{pe!ta>2lsa2} minus letter} \\
+\lneume{pe!ta>2lsa2} & \texttt{pe!ta>2lsa2} & \texttt{L60E} & gentes\\
+\lneume{pe!or} & \texttt{pe!or} & \texttt{L93G} & induebam\\
+\lneume{qlppn1sun1} & \texttt{qlppn1sun1} & \texttt{L53C} & Domino,\\
+\lneume{qlppn1sun1su2} & \texttt{qlppn1sun1su2} & \texttt{L82O} & tibi\\
+\lneume{qlppn1su1sun2} & \texttt{qlppn1su1sun2} & \texttt{L95D} & frixorio\\
+\lneume{qlppn1su2} & \texttt{qlppn1su2} \textit{Cf.} \lneume{qlppn1su2lsnl1} & \multicolumn{3}{l}{\texttt{qlppn1su2lsnl1} minus letters} \\
+\lneume{qlppn1su2lsnl1} & \texttt{qlppn1su2lsnl1} & \texttt{L75V} & mortuus.\\
+\lneume{qlppn1sun1lsc5} & \texttt{qlppn1sun1lsc5} & \texttt{L54B} & quoniam\\
+\lneume{qlppn1su1sun1} & \texttt{qlppn1su1sun1} & \texttt{L107H} & fecit\\
+\lneume{qlsu1sun1} & \texttt{qlsu1sun1} & \texttt{L43L} & tua\\
+\lneume{qlsu2} & \texttt{qlsu2} & \texttt{L67S} & tua,\\
+\lneume{qlsux1} & \texttt{qlsux1} & \texttt{L53C} & quoniam\\
+\lneume{qlsun1su2} & \texttt{qlsun1su2} & \texttt{L44I} & mearum\\
+\lneume{qlsun1} & \texttt{qlsun1} \textit{Cf.} \lneume{qlsun1lsa5} & \multicolumn{3}{l}{\texttt{qlsun1lsa5} minus letter} \\
+\lneume{qlsun1lsa5} & \texttt{qlsun1lsa5} & \texttt{L40Q} & millia\\
+\lneume{qlsun2} & \texttt{qlsun2} & \texttt{L122N} & alleluia.\\
+\lneume{qlsun2lsa5} & \texttt{qlsun2lsa5} & \texttt{L125U} & alleluia.\\
+\lneume{ql!po} & \texttt{ql!po} & \texttt{L82O} & obedivimus\\
+\lneume{ql!poppz1} & \texttt{ql!poppz1} \textit{Cf.} \lneume{ql!poppz1lsa3} & \multicolumn{3}{l}{\texttt{ql!poppz1lsa3} minus letter} \\
+\lneume{ql!poppz1lsa3} & \texttt{ql!poppz1lsa3} & \texttt{L95D} & Domine,\\
+\lneume{ql!poppn1} & \texttt{ql!poppn1} & \texttt{L43L} & Domine,\\
+\lneume{ql!posu1sun1} & \texttt{ql!posu1sun1} \textit{Cf.} \lneume{ql!poppz1su1sun1} & \multicolumn{3}{l}{\texttt{ql!poppz1su1sun1} minus uncinus} \\
+\lneume{ql!poppz1su1sun1} & \texttt{ql!poppz1su1sun1} & \texttt{L43L} & mandata\\
+\lneume{ql!posun1} & \texttt{ql!posun1} \textit{Cf.} \lneume{ql!poppn1sun1} & \multicolumn{3}{l}{\texttt{ql!poppn1sun1} minus uncinus} \\
+\lneume{ql!poppn1sun1} & \texttt{ql!poppn1sun1} & \texttt{L61I} & Iustitiae\\
+\lneume{ql!poppn1lst2} & \texttt{ql!poppn1lst2} & \texttt{L103P} & Alleluia.\\
+\lneume{ql!posux1} & \texttt{ql!posux1} \textit{Cf.} \lneume{ql!poppn1sux1} & \multicolumn{3}{l}{\texttt{ql!poppn1sux1} minus uncinus} \\
+\lneume{ql!poppn1sux1} & \texttt{ql!poppn1sux1} & \texttt{L61I} & corda,\\
+\end{supertabular}
+
+\vfill
+\pagebreak
+
+\begin{supertabular}{lllll}\noindent
+\lneume{ql!polsm1} & \texttt{ql!polsm1} & \texttt{L103P} & immolatus\\
+\lneume{ql!polsa1lsa3lsa9} & \texttt{ql!polsa1lsa3lsa9} & \texttt{L56P} & nostris\\
+\lneume{ql!po>} & \texttt{ql!po>} \textit{Cf.} \lneume{ql!po>ppn1} & \multicolumn{3}{l}{\texttt{ql!po>ppn1} minus uncinus} \\
+\lneume{ql!po>ppn1} & \texttt{ql!po>ppn1} & \texttt{L60A} & ancillae\\
+\lneume{ql!cl} & \texttt{ql!cl} & \texttt{L43L} & doceas\\
+\lneume{ql!cl!to} & \texttt{ql!cl!to} \textit{Cf.} \lneume{ql!cl!tolst6} & \multicolumn{3}{l}{\texttt{ql!cl!tolst6} minus letter} \\
+\lneume{ql!cl!tolst6} & \texttt{ql!cl!tolst6} & \texttt{L95D} & me.\\
+\lneume{ql!cl!to!or} & \texttt{ql!cl!to!or} \textit{Cf.} \lneume{ql!cl!to!orsun1} & \multicolumn{3}{l}{\texttt{ql!cl!to!orsun1} minus uncinus} \\
+\lneume{ql!cl!to!orsun1} & \texttt{ql!cl!to!orsun1} & \texttt{L19B} & nobis.\\
+\lneume{ql!cl!toppn1} & \texttt{ql!cl!toppn1} & \texttt{L72B} & vitam,\\
+\lneume{ql!cl!tosu3} & \texttt{ql!cl!tosu3} \textit{Cf.} \lneume{ql!cl!tosu3lst6} & \multicolumn{3}{l}{\texttt{ql!cl!tosu3lst6} minus letter} \\
+\lneume{ql!cl!tosu3lst6} & \texttt{ql!cl!tosu3lst6} & \texttt{L82T} & hostias,\\
+\lneume{ql!cl!or} & \texttt{ql!cl!or} \textit{Cf.} \lneume{ql!cl!orppn1ppz1} & \multicolumn{3}{l}{\texttt{ql!cl!orppn1ppz1} minus uncinus \& virga} \\
+\lneume{ql!cl!orppn1ppz1} & \texttt{ql!cl!orppn1ppz1} & \texttt{L109P} & Populus\\
+\lneume{ql!cl!tr>} & \texttt{ql!cl!tr>} \textit{Cf.} \lneume{ql!cl!tr>ppz1} & \multicolumn{3}{l}{\texttt{ql!cl!tr>ppz1} minus virga} \\
+\lneume{ql!cl!tr>ppz1} & \texttt{ql!cl!tr>ppz1} & \texttt{L54B} & vias\\
+\lneume{ql!clppn1} & \texttt{ql!clppn1} & \texttt{L54B} & a\\
+\lneume{qlppn1} & \texttt{qlppn1} & \texttt{L82O} & nomini\\
+\lneume{qlppn1ppz1} & \texttt{qlppn1ppz1} & \texttt{L82O} & gloriam\\
+\lneume{qlppn1ppz1lst2} & \texttt{qlppn1ppz1lst2} & \texttt{L82O} & da\\
+\lneume{qlppn1ppz1sun1} & \texttt{qlppn1ppz1sun1} \textit{Cf.} \lneume{qlppn1ppz1sun1lsa5} & \multicolumn{3}{l}{\texttt{qlppn1ppz1sun1lsa5} minus letter} \\
+\lneume{qlppn1ppz1sun1lsa5} & \texttt{qlppn1ppz1sun1lsa5} & \texttt{L54B} & mihi\\
+\lneume{qlppn1ppz1su1sun1} & \texttt{qlppn1ppz1su1sun1} & \texttt{L43I} & dominorum\\
+\lneume{qlppn2sun1} & \texttt{qlppn2sun1} \textit{Cf.} \lneume{qlppn2sun1lsa5} & \multicolumn{3}{l}{\texttt{qlppn2sun1lsa5} minus letter} \\
+\lneume{qlppn2sun1lsa5} & \texttt{qlppn2sun1lsa5} & \texttt{L53C} & Beati\\
+\lneume{qlppn2sun2} & \texttt{qlppn2sun2} \textit{Cf.} \lneume{qlppn2sun2lsa5lsa5} & \multicolumn{3}{l}{\texttt{qlppn2sun2lsa5lsa5} minus letters} \\
+\lneume{qlppn2sun2lsa5lsa5} & \texttt{qlppn2sun2lsa5lsa5} & \texttt{L122V} & sic\\
+\lneume{qlppz1su2} & \texttt{qlppz1su2} & \texttt{L40Q} & draconem.\\
+\lneume{qlppz1su1sun1} & \texttt{qlppz1su1sun1} & \texttt{L53C} & nos\\
+\lneume{ql>ppn1} & \texttt{ql>ppn1} & \texttt{L95D} & confrixa\\
+\lneume{ql>ppn1lsc3} & \texttt{ql>ppn1lsc3} & \texttt{L90D} & speraverunt\\
+\lneume{popp2} & \texttt{popp2} & \texttt{L82O} & multitudinem\\
+\lneume{popp2su1sux1} & \texttt{popp2su1sux1} & \texttt{L8U} & confundentur,\\
+\lneume{posux1} & \texttt{posux1} & \texttt{L20P} & eius\\
+\lneume{posux1lsa5} & \texttt{posux1lsa5} & \texttt{L114V} & alleluia,\\
+\lneume{posun1lsa5} & \texttt{posun1lsa5} & \texttt{L123A} & alleluia.\\
+\lneume{poMsun1} & \texttt{poMsun1} & \texttt{L81E} & meos\\
+\lneume{posu1sun1} & \texttt{posu1sun1} & \texttt{L123E} & alleluia.\\
+\lneume{vippn1su1} & \texttt{vippn1su1} & \texttt{L56D} & Deus\\
+\lneume{vippn1sux1} & \texttt{vippn1sux1} & \texttt{L53C} & Memento\\
+\lneume{vippn1su1sun1} & \texttt{vippn1su1sun1} & \texttt{L45R} & tuae,\\
+\lneume{vippn1su1sun1lst2} & \texttt{vippn1su1sun1lst2} & \texttt{L95D} & Domine,\\
+\lneume{vippn2sun1} & \texttt{vippn2sun1} \textit{Cf.} \lneume{vippn2sun1lsa4} & \multicolumn{3}{l}{\texttt{vippn2sun1lsa4} minus letter} \\
+\lneume{vippn2sun1lsa4} & \texttt{vippn2sun1lsa4} & \texttt{L44I} & mea\\
+\lneume{vippn2} & \texttt{vippn2} \textit{Cf.} \lneume{vippn2lsa4} & \multicolumn{3}{l}{\texttt{vippn2lsa4} minus letter} \\
+\lneume{vippn2lsc4} & \texttt{vippn2lsc4} & \texttt{L56D} & quaerunt\\
+\lneume{vippn2lsa4} & \texttt{vippn2lsa4} & \texttt{L44I} & Elevatio\\
+\lneume{vippn2lst3lsa4} & \texttt{vippn2lst3lsa4} & \texttt{L103P} & Alleluia.\\
+\lneume{vippn3} & \texttt{vippn3} & \texttt{L38I} & Domino,\\
+\lneume{vippn4} & \texttt{vippn4} & \texttt{L60E} & homo\\
+\lneume{vipp2ppn1} & \texttt{vipp2ppn1} & \texttt{L13A} & gratia\\
+\lneume{cl!pe} & \texttt{cl!pe} \textit{Cf.} \lneume{cl!pelsc2} & \multicolumn{3}{l}{\texttt{cl!pelsc2} minus letter} \\
+\lneume{cl!pelst2} & \texttt{cl!pelst2} & \texttt{L95D} & sum\\
+\lneume{cl!pelsc2} & \texttt{cl!pelsc2} & \texttt{L105A} & Domini\\
+\lneume{cl!pelsn7} & \texttt{cl!pelsn7} & \texttt{L103H} & ea.\\
+\lneume{vipp2su2} & \texttt{vipp2su2} & \texttt{L43L} & mihi\\
+\lneume{vipp2sun1lsa5} & \texttt{vipp2sun1lsa5} & \texttt{L168L} & eum\\
+\lneume{vipp3} & \texttt{vipp3} \textit{Cf.} \lneume{vipp3lsn3} & \multicolumn{3}{l}{\texttt{vipp3lsn3} minus letter} \\
+\end{supertabular}
+
+\vfill
+\pagebreak
+
+\begin{supertabular}{lllll}\noindent
+\lneume{vipp3lsn3} & \texttt{vipp3lsn3} & \texttt{L152S} & Sicut\\
+\lneume{vippn1pp1} & \texttt{vippn1pp1} & \texttt{L11Q} & Israel,\\
+\lneume{vippn1pp1su1sun2} & \texttt{vippn1pp1su1sun2} & \texttt{L40Q} & volante\\
+\lneume{vippn3su4} & \texttt{vippn3su4} & \texttt{L173D} & Alleluia.\\
+\lneume{vipp4} & \texttt{vipp4} \textit{Cf.} \lneume{vipp4lst2} & \multicolumn{3}{l}{\texttt{vipp4lst2} minus letter} \\
+\lneume{vipp4lst2} & \texttt{vipp4lst2} & \texttt{L13A} & Ave\\
+\lneume{vippz1ppq1} & \texttt{vippz1ppq1} & \texttt{L40Q} & lapidem\\
+\lneume{vippn1ppq1} & \texttt{vippn1ppq1} & \texttt{L33S} & venti.\\
+\lneume{vippn1ppz1ppq1} & \texttt{vippn1ppz1ppq1} & \texttt{L101V} & Israel\\
+\lneume{vippn1pp1ppz1} & \texttt{vippn1pp1ppz1} \textit{Cf.} \lneume{vippn1pp1ppz1lst8} & \multicolumn{3}{l}{\texttt{vippn1pp1ppz1lst8} minus letter} \\
+\lneume{vippn1pp1ppz1lst8} & \texttt{vippn1pp1ppz1lst8} & \texttt{L25M} & ore\\
+\lneume{vippn2ppz1ppq1} & \texttt{vippn2ppz1ppq1} \textit{Cf.} \lneume{vippn2ppz1ppq1lst2lsa8} & \multicolumn{3}{l}{\texttt{vippn2ppz1ppq1lst2lsa8} minus} \\
+& & \multicolumn{3}{r}{letters} \\
+\lneume{vippn2ppz1ppq1lst2lsa8} & \texttt{vippn2ppz1ppq1lst2lsa8} & \texttt{L169A} & confitebor\\
+\lneume{vippn2ppz1sun1lsa5} & \texttt{vippn2ppz1sun1lsa5} & \texttt{L173D} & Alleluia.\\
+\lneume{vippn3sun1lsa5} & \texttt{vippn3sun1lsa5} & \texttt{L173D} & Alleluia.\\
+\lneume{vippq1} & \texttt{vippq1} & \texttt{L168S} & regna.\\
+\lneume{cl1!or} & \texttt{cl1!or} \textit{Cf.} \lneume{cl1!orlss3} & \multicolumn{3}{l}{\texttt{cl1!orlss3} minus letter} \\
+\lneume{cl1!orlss3} & \texttt{cl1!orlss3} & \texttt{L60E} & iudicentur\\
+\lneume{cl1!orlsc3} & \texttt{cl1!orlsc3} & \texttt{L60E} & conspectu\\
+\lneume{cl1!pi} & \texttt{cl1!pi} & \texttt{L95D} & avertas\\
+\lneume{cl1!pi>} & \texttt{cl1!pi>} & \texttt{L53C} & misericordia\\
+\lneume{cl1!pi!to} & \texttt{cl1!pi!to} & \texttt{L82O} & fecisti\\
+\lneume{cl1!pi!vi} & \texttt{cl1!pi!vi} & \texttt{L95D} & Domine,\\
+\lneume{cl!pi!vi>} & \texttt{cl!pi!vi>} & \texttt{L67S} & Virga\\
+\lneume{cl1!pi!cl} & \texttt{cl1!pi!cl} & \texttt{L64O} & implebis\\
+\lneume{cl1!pi!pesu2} & \texttt{cl1!pi!pesu2} & \texttt{L61I} & dulciora\\
+\lneume{cl1!pilsm3lsa6} & \texttt{cl1!pilsm3lsa6} & \texttt{L174I} & me\\
+\lneume{cl1!pilsn8} & \texttt{cl1!pilsn8} & \texttt{L53C} & iudicium,\\
+\lneume{cl1!pilsn9} & \texttt{cl1!pilsn9} & \texttt{L64O} & Aperis\\
+\lneume{cl1!pilst9} & \texttt{cl1!pilst9} & \texttt{L90D} & Longe\\
+\lneume{cl1!pipp2} & \texttt{cl1!pipp2} & \texttt{L60A} & Deum\\
+\lneume{cl1!pi!orsun1} & \texttt{cl1!pi!orsun1} & \texttt{L90D} & Israel.\\
+\lneume{cl!po} & \texttt{cl!po} & \texttt{L67S} & es,\\
+\lneume{cl!popp3} & \texttt{cl!popp3} & \texttt{L122V} & ascendentem\\
+\lneume{cl!to} & \texttt{cl!to} & \texttt{L17H} & eius.\\
+\lneume{cl!tosu1} & \texttt{cl!tosu1} & \texttt{L17H} & eius.\\
+\lneume{cl!tosu1lsc6} & \texttt{cl!tosu1lsc6} & \texttt{L81E} & me\\
+\lneume{cl!tosu1lsc6lst8} & \texttt{cl!tosu1lsc6lst8} & \texttt{L81E} & me\\
+\lneume{cl!topp2} & \texttt{cl!topp2} & \texttt{L64D} & misericordia\\
+\lneume{cl!toppz1su1sun1} & \texttt{cl!toppz1su1sun1} & \texttt{L35T} & Israel\\
+\lneume{cl!tolst9} & \texttt{cl!tolst9} & \texttt{L56I} & dilexit\\
+\lneume{cl!to>} & \texttt{cl!to>} & \texttt{L56I} & aequitatem\\
+\lneume{cl!tosun1lsa5} & \texttt{cl!tosun1lsa5} & \texttt{L164D} & meam.\\
+\lneume{cl!to!pi} & \texttt{cl!to!pi} \textit{Cf.} \lneume{cl!to!pipp2} & \multicolumn{3}{l}{\texttt{cl!to!pipp2} minus prepunctis} \\
+\lneume{cl!to!pipp2} & \texttt{cl!to!pipp2} & \texttt{L33C} & arcus,\\
+\lneume{cl!to!pi!cl} & \texttt{cl!to!pi!cl} & \texttt{L77S} & Israel\\
+\lneume{cl!to!pi!clpp2} & \texttt{cl!to!pi!clpp2} & \texttt{L33C} & eius,\\
+\lneume{cl!to!pi!clpp2lsn9} & \texttt{cl!to!pi!clpp2lsn9} & \texttt{L68Q} & Sion\\
+\lneume{cl!to!cl!cl} & \texttt{cl!to!cl!cl} & \texttt{L81R} & meis,\\
+\lneume{to!cl} & \texttt{to!cl} & \texttt{L95D} & Domine,\\
+\lneume{to!cl!cl} & \texttt{to!cl!cl} \textit{Cf.} \lneume{to!cl!cllst9} & \multicolumn{3}{l}{\texttt{to!cl!cllst9} minus letter} \\
+\lneume{to!cl!clsun2} & \texttt{to!cl!clsun2} \textit{Cf.} \lneume{to!cl!clsun2lsa5} & \multicolumn{3}{l}{\texttt{to!cl!clsun2lsa5} minus letter} \\
+\lneume{to!cl!clsun2lsa5} & \texttt{to!cl!clsun2lsa5} & \texttt{L43L} & tuam\\
+\lneume{to!cl!cllst9} & \texttt{to!cl!cllst9} & \texttt{L8A} & invocavite.\\
+\lneume{to!cl!clsu1} & \texttt{to!cl!clsu1} & \texttt{L33P} & meam.\\
+\lneume{to!cl!pi} & \texttt{to!cl!pi} & \texttt{L84B} & iniqui\\
+\lneume{to!cl!orsun1} & \texttt{to!cl!orsun1} & \texttt{L114V} & terrae\\
+\lneume{to!clsun1} & \texttt{to!clsun1} & \texttt{L54B} & quoniam\\
+\lneume{to!clsun1lsa5} & \texttt{to!clsun1lsa5} & \texttt{L11Q} & Ioseph.\\
+\lneume{to!clsu2} & \texttt{to!clsu2} \textit{Cf.} \lneume{to!clsu2lsn6} & \multicolumn{3}{l}{\texttt{to!clsu2lsn6} minus letter} \\
+\lneume{to!clsu2lsn6} & \texttt{to!clsu2lsn6} & \texttt{L8D} & dabit\\
+\lneume{to!clsu1sun1} & \texttt{to!clsu1sun1} \textit{Cf.} \lneume{to!clsu1sun1lsm6} & \multicolumn{3}{l}{\texttt{to!clsu1sun1lsm6} minus letter} \\
+\lneume{to!clsu1sun1lsm6} & \texttt{to!clsu1sun1lsm6} & \texttt{L24D} & opera\\
+\lneume{clsu2sun1lst6} & \texttt{clsu2sun1lst6} & \texttt{L35T} & tuam.\\
+\end{supertabular}
+
+\vfill
+\pagebreak
+
+\begin{supertabular}{lllll}\noindent
+\lneume{to!clM} & \texttt{to!clM} & \texttt{L77C} & corde\\
+\lneume{to!cl>1} & \texttt{to!cl>1} & \texttt{L77C} & tuum,\\
+\lneume{to!po} & \texttt{to!po} & \texttt{L84B} & Appropinquaverunt\\
+\lneume{to!pohd} & \texttt{to!pohd} & \texttt{L105A} & quaeritis,\\
+\lneume{to!to} & \texttt{to!to} \textit{Cf.} \lneume{to!toppn1sun1} & \multicolumn{3}{l}{\texttt{to!toppn1sun1} minus 2x uncinus} \\
+\lneume{to!tosun1} & \texttt{to!tosun1} \textit{Cf.} \lneume{to!toppn1sun1} & \multicolumn{3}{l}{\texttt{to!toppn1sun1} minus uncinus} \\
+\lneume{to!toppn1sun1} & \texttt{to!toppn1sun1} & \texttt{L43L} & discam\\
+\lneume{to!to!pi!cl} & \texttt{to!to!pi!cl} \textit{Cf.} \lneume{to!to!pi!clpp2} & \multicolumn{3}{l}{\texttt{to!to!pi!clpp2} minus prepunctis} \\
+\lneume{to!to!pi!clpp2} & \texttt{to!to!pi!clpp2} & \texttt{L60A} & nostrum,\\
+\lneume{toS!to} & \texttt{toS!to} & \texttt{L53C} & Confitemini\\
+\lneume{toS!tolst9} & \texttt{toS!tolst9} & \texttt{L90D} & Deus,\\
+\lneume{toS!pe} & \texttt{toS!pe} & \texttt{L123E} & Exaudi,\\
+\lneume{to!or} & \texttt{to!or} & \texttt{L67S} & Domine.\\
+\lneume{to!orsun1lsa5} & \texttt{to!orsun1lsa5} & \texttt{L8U} & Domine.\\
+\lneume{to!orlst3} & \texttt{to!orlst3} & \texttt{L114V} & audiatur,\\
+\lneume{to!orlsc6} & \texttt{to!orlsc6} & \texttt{L152S} & taurorum,\\
+\lneume{to!pi!cl} & \texttt{to!pi!cl} & \texttt{L31D} & est,\\
+\lneume{to!pi!cl!pi!pi} & \texttt{to!pi!cl!pi!pi} & \texttt{L40Q} & millia\\
+\lneume{to!pi!cl!pi!orsun1lsa5} & \texttt{to!pi!cl!pi!orsun1lsa5} & \texttt{L40Q} & speravit,\\
+\lneume{oc!vi} & \texttt{oc!vi} \textit{Cf.} \lneume{oc!visun1} & \multicolumn{3}{l}{\texttt{oc!visun1} minus uncinus} \\
+\lneume{oc!visun1} & \texttt{oc!visun1} & \texttt{L95D} & Domine,\\
+\lneume{orsu1sun1} & \texttt{orsu1sun1} & \texttt{L94C} & Domine.\\
+\lneume{orsu1sun1lsc2} & \texttt{orsu1sun1lsc2} & \texttt{L94C} & Domine.\\
+\lneume{orsu1sun1lsc3} & \texttt{orsu1sun1lsc3} & \texttt{L94C} & iniquis\\
+\lneume{un!clG} & \texttt{un!clG} & \texttt{L95D} & exaudi\\
+\lneume{topp2} & \texttt{topp2} & \texttt{L95D} & meus\\
+\lneume{topp2sun1} & \texttt{topp2sun1} & \texttt{L45R} & tuarum,\\
+\lneume{toppn3ppz1sun1} & \texttt{toppn3ppz1sun1} & \texttt{L58A} & me.\\
+\lneume{to>pp2} & \texttt{to>pp2} & \texttt{L90D} & insipientiam\\
+\lneume{pupp2su1sun1} & \texttt{pupp2su1sun1} & \texttt{L95D} & sunt.\\
+\lneume{pupp2su2} & \texttt{pupp2su2} & \texttt{L93E} & me.\\
+\lneume{pupp1su2} & \texttt{pupp1su2} & \texttt{L64O} & opportuno.\\
+\lneume{pupp1su1sun1} & \texttt{pupp1su1sun1} & \texttt{L58A} & clamavi,\\
+\lneume{puppn1su1sun2} & \texttt{puppn1su1sun2} & \texttt{L40Q} & mille,\\
+\lneume{puppz1su1sun2} & \texttt{puppz1su1sun2} & \texttt{L40Q} & mille,\\
+\lneume{puppz1su2} & \texttt{puppz1su2} & \texttt{L168S} & tua\\
+\lneume{ds1!ds1} & \texttt{ds1!ds1} & \texttt{L43L} & meos,\\
+\lneume{ds1!ts} & \texttt{ds1!ts} & \texttt{L67S} & mecum\\
+\lneume{ds1!ts1} & \texttt{ds1!ts1} & \texttt{L60E} & tuo.\\
+\lneume{cl1!orsun1} & \texttt{cl1!orsun1} & \texttt{L43L} & considerabo\\
+\lneume{cl1!orsun1lsa5} & \texttt{cl1!orsun1lsa5} & \texttt{L8U} & fac\\
+\lneume{cl!or} & \texttt{cl!or} \textit{Cf.} \lneume{cl!orpp2} & \multicolumn{3}{l}{\texttt{cl!orpp2} minus prepunctis} \\
+\lneume{cl!orpp2} & \texttt{cl!orpp2} & \texttt{L93G} & induebam\\
+\lneume{cl1!orpp2} & \texttt{cl1!orpp2} & \texttt{L103R} & mirabilis\\
+\lneume{ds1!clsun2} & \texttt{ds1!clsun2} \textit{Cf.} \lneume{ds1!clsun2lst5} & \multicolumn{3}{l}{\texttt{ds1!clsun2lst5} minus letter} \\
+\lneume{ds1!clsun2lst5} & \texttt{ds1!clsun2lst5} & \texttt{L43L} & doceas\\
+\lneume{ds1!clsu1sun1} & \texttt{ds1!clsu1sun1} \textit{Cf.} \lneume{ds1!clsu1sun1lst5} & \multicolumn{3}{l}{\texttt{ds1!clsu1sun1lst5} minus letter} \\
+\lneume{ds1!clsu1sun1lst5} & \texttt{ds1!clsu1sun1lst5} & \texttt{L56S} & Salvum\\
+\lneume{ds1pp3} & \texttt{ds1pp3} & \texttt{L149E} & tibi.\\
+\lneume{vi>1pp2} & \texttt{vi>1pp2} & \texttt{L67S} & umbrae\\
+\lneume{vi>1ppz1ppq1} & \texttt{vi>1ppz1ppq1} & \texttt{L40Q} & custodiant\\
+\lneume{vi>1ppn1ppz1ppq1} & \texttt{vi>1ppn1ppz1ppq1} & \texttt{L106S} & Alleluia.\\
+\lneume{pfsun1} & \texttt{pfsun1} \textit{Cf.} \lneume{pfsun1lsn5} & \multicolumn{3}{l}{\texttt{pfsun1lsn5} minus letter} \\
+\lneume{pfsun1lsn5} & \texttt{pfsun1lsn5} & \texttt{L67S} & tua,\\
+\lneume{pfppn1ppq1sun1lsa5} & \texttt{pfppn1ppq1sun1lsa5} & \texttt{L123A} & Deus\\
+\lneume{un1ppn1ppq1sun2} & \texttt{un1ppn1ppq1sun2} & \texttt{L112O} & estis,\\
+\lneume{un1sun2} & \texttt{un1sun2} \textit{Cf.} \lneume{un1ppn1ppq1sun2} & \multicolumn{3}{l}{\texttt{un1ppn1ppq1sun2} minus uncinus} \\
+& & \multicolumn{3}{r}{\& quilisma} \\
+\lneume{un1ppn1sun2} & \texttt{un1ppn1sun2} & \texttt{L112O} & Christum\\
+\lneume{un1ppn1sun1su2lsa5} & \texttt{un1ppn1sun1su2lsa5} & \texttt{L152I} & accelera,\\
+\lneume{clsun1lst5} & \texttt{clsun1lst5} & \texttt{L44I} & vespertinum.\\
+\lneume{clsu3lst5} & \texttt{clsu3lst5} & \texttt{L60E} & tuo.\\
+\lneume{tosu1sun1} & \texttt{tosu1sun1} \textit{Cf.} \lneume{tosu1sun1lsn6} & \multicolumn{3}{l}{\texttt{tosu1sun1lsn6} minus letter} \\
+\lneume{tosu1sun1lsc6lst7} & \texttt{tosu1sun1lsc6lst7} & \texttt{L109P} & vocavit\\
+\end{supertabular}
+
+\vfill
+\pagebreak
+
+\begin{supertabular}{lllll}\noindent
+\lneume{tosu1sun1lsn6} & \texttt{tosu1sun1lsn6} & \texttt{L19B} & venit\\
+\lneume{tosu2} & \texttt{tosu2} \textit{Cf.} \lneume{tosu2lst6} & \multicolumn{3}{l}{\texttt{tosu2lst6} minus letter} \\
+\lneume{tosu2lst6} & \texttt{tosu2lst6} & \texttt{L37M} & tu\\
+\lneume{tgsun1lsa5} & \texttt{tgsun1lsa5} & \texttt{L103H} & quoniam\\
+\lneume{cl!cl!clsun1lsa5} & \texttt{cl!cl!clsun1lsa5} & \texttt{L103P} & Alleluia.\\
+\lneume{cl!cl!cl} & \texttt{cl!cl!cl} \textit{Cf.} \lneume{cl!cl!cllsn9} & \multicolumn{3}{l}{\texttt{cl!cl!cllsn9} minus letter} \\
+\lneume{cl!cl!cllsn9} & \texttt{cl!cl!cllsn9} & \texttt{L31D} & Domine\\
+\lneume{cl!cl!pi} & \texttt{cl!cl!pi} & \texttt{L54B} & commovear\\
+\lneume{cl!cl!pi!vi} & \texttt{cl!cl!pi!vi} & \texttt{L123A} & Dominus\\
+\lneume{cl!cl!to} & \texttt{cl!cl!to} & \texttt{L149E} & meam,\\
+\lneume{cl!cl!po} & \texttt{cl!cl!po} & \texttt{L81R} & insurgentibus\\
+\lneume{cl1!pi!pi!vi} & \texttt{cl1!pi!pi!vi} & \texttt{L54B} & es\\
+\lneume{cl1!pi!pisun1lsa5} & \texttt{cl1!pi!pisun1lsa5} & \texttt{L174O} & plaudite\\
+\lneume{cl1!pi!tosu1} & \texttt{cl1!pi!tosu1} & \texttt{L37S} & mei\\
+\lneume{cl1!pi!tosun1} & \texttt{cl1!pi!tosun1} & \texttt{L174O} & plaudite\\
+\lneume{sa1sun1lsa5} & \texttt{sa1sun1lsa5} & \texttt{L11Q} & tuam\\
+\lneume{trsun2} & \texttt{trsun2} \textit{Cf.} \lneume{trsun2lsa5} & \multicolumn{3}{l}{\texttt{trsun2lsa5} minus letter} \\
+\lneume{trsun2lsa5} & \texttt{trsun2lsa5} & \texttt{L13A} & Ave\\
+\lneume{trsux1} & \texttt{trsux1} \textit{Cf.} \lneume{trsux1lsa5} & \multicolumn{3}{l}{\texttt{trsux1lsa5} minus letter} \\
+\lneume{trsux1lst8} & \texttt{trsux1lst8} & \texttt{L20P} & eius,\\
+\lneume{trsux1lsa5} & \texttt{trsux1lsa5} & \texttt{L136A} & aeternam\\
+\lneume{trsu2} & \texttt{trsu2} \textit{Cf.} \lneume{trsu2lst3lsm8} & \multicolumn{3}{l}{\texttt{trsu2lst3lsm8} minus letters} \\
+\lneume{trsu2lst3lsm8} & \texttt{trsu2lst3lsm8} & \texttt{L136A} & vobis\\
+\lneume{trsun1su2} & \texttt{trsun1su2} \textit{Cf.} \lneume{trsun1su2lsa3} & \multicolumn{3}{l}{\texttt{trsun1su2lsa3} minus letter} \\
+\lneume{trsun1su2lsa3} & \texttt{trsun1su2lsa3} & \texttt{L149C} & Domini\\
+\lneume{bvsun4} & \texttt{bvsun4} & \texttt{L8U} & me.\\
+\lneume{oc!cl} & \texttt{oc!cl} & \texttt{L31D} & Domine.\\
+\lneume{oc!clM} & \texttt{oc!clM} & \texttt{L77S} & peccatorum.\\
+\lneume{oc!pe!pu} & \texttt{oc!pe!pu} & \texttt{L53C} & tuo.\\
+\lneume{tg!cl} & \texttt{tg!cl} & \texttt{L31D} & est,\\
+\lneume{tg!cl>1} & \texttt{tg!cl>1} & \texttt{L33C} & eius,\\
+\lneume{tg!cllsn9} & \texttt{tg!cllsn9} & \texttt{L68Q} & Sion\\
+\lneume{tg!or} & \texttt{tg!or} & \texttt{L77C} & tibi\\
+\lneume{unppn1sun2} & \texttt{unppn1sun2} & \texttt{L40Q} & Cadent\\
+\lneume{unppn1sun2lsa5} & \texttt{unppn1sun2lsa5} & \texttt{L123E} & quaesivi\\
+\lneume{unppn1sux1} & \texttt{unppn1sux1} & \texttt{L72B} & eius\\
+\lneume{unppn1sux1lsa5} & \texttt{unppn1sux1lsa5} & \texttt{L24D} & exaltavit\\
+\lneume{unppn1sun1su2} & \texttt{unppn1sun1su2} & \texttt{L58A} & Domine,\\
+\lneume{unppn1ppz1sun1} & \texttt{unppn1ppz1sun1} \textit{Cf.} \lneume{unppn1ppz1sun1lsa5} & \multicolumn{3}{l}{\texttt{unppn1ppz1sun1lsa5} minus letter} \\
+\lneume{unppn1ppz1sun1lsa5} & \texttt{unppn1ppz1sun1lsa5} & \texttt{L80S} & habitat\\
+\lneume{unppn3sun1lsa5} & \texttt{unppn3sun1lsa5} & \texttt{L24D} & fecit\\
+\lneume{ta>ppn1} & \texttt{ta>ppn1} & \texttt{L95D} & et\\
+\lneume{ta>pp2} & \texttt{ta>pp2} & \texttt{L33C} & ut\\
+\lneume{pt1ppn1} & \texttt{pt1ppn1} & \texttt{L99P} & tuo.\\
+\lneume{tssun1lsa5} & \texttt{tssun1lsa5} & \texttt{L24D} & dextera\\
+\lneume{cl>1pp2} & \texttt{cl>1pp2} & \texttt{L114C} & alleluia,\\
+\lneume{tasu2} & \texttt{tasu2} & \texttt{L24T} & tuam.\\ \hline
+\end{supertabular}
+
+\vfill
+\pagebreak
+
+\begin{supertabular}{llllll}\noindent
+& \multicolumn{4}{l}{\textbf{significative letters}} & \\
+\lneume{lsa} & \texttt{lsa} \textit{Cf.} \lneume{vi>lsa6} & \multicolumn{2}{l}{\texttt{vi>lsa6}} & augete\\
+\lneume{lsc} & \texttt{lsc} \textit{Cf.} \lneume{pe!unlsc2} & \multicolumn{2}{l}{\texttt{pe!unlsc2}} & celeriter\\
+\lneume{lseq} & \texttt{lseq} & \texttt{L78H} & hic & equaliter\\
+\lneume{lseq-} & \texttt{lseq-} & \texttt{L78H} & quotiescumque & equaliter\\
+\lneume{lsequ} & \texttt{lsequ} & \texttt{L56D} & confundantur & equaliter\\
+\lneume{lsf} & \texttt{lsf} \textit{Cf.} \lneume{polsf2lst3} & \multicolumn{2}{l}{\texttt{polsf2lst3}} & fastigium\\
+\lneume{lsh} & \texttt{lsh} & \texttt{L44D} & a & humiliter\\
+\lneume{lshn} & \texttt{lshn} \textit{Cf.} \lneume{cllshn8} & \multicolumn{2}{l}{\texttt{cllshn8}} & humiliter nectum\\
+\lneume{lshp} & \texttt{lshp} \textit{Cf.} \lneume{trlst3lshp7} & \multicolumn{2}{l}{\texttt{trlst3lshp7}} & humiliter parum\\
+\lneume{lsl} & \texttt{lsl} \textit{Cf.} \lneume{pelsl2} & \multicolumn{2}{l}{\texttt{pelsl2}} & levare\\
+\lneume{lsn} & \texttt{lsn} \textit{Cf.} \lneume{cllsn9} & \multicolumn{2}{l}{\texttt{cllsn9}} & non (tenere), negare,\\
+& & & & nectum, naturaliter\\
+\lneume{lsnl} & \texttt{lsnl} \textit{Cf.} \lneume{clGlsnl2} & \multicolumn{2}{l}{\texttt{clGlsnl2}} & non levare\\
+\lneume{lsnt} & \texttt{lsnt} \textit{Cf.} \lneume{pulsnt3} & \multicolumn{2}{l}{\texttt{pulsnt3}} & non tenere\\
+\lneume{lsm} & \texttt{lsm} & \texttt{L67S} & Virga & mediocriter\\
+\lneume{lsmd} & \texttt{lsmd} & \texttt{L82O} & da & mediocriter\\
+\lneume{lss} & \texttt{lss} & \texttt{L95D} & tempus & sursum\\
+\lneume{lssimp} & \texttt{lssimp} & \texttt{L8U} & Domine, & simpliciter\\
+\lneume{lssimpl} & \texttt{lssimpl} & \texttt{L81R} & insurgentibus & simpliciter\\
+\lneume{lssp} & \texttt{lssp} & \texttt{L54Ae} & Domine, & sursum parum\\
+\lneume{lsst} & \texttt{lsst} \textit{Cf.} \lneume{pelsst1lsm4} & \multicolumn{2}{l}{\texttt{pelsst1lsm4}} & sursum tenere\\
+\lneume{lst} & \texttt{lst} \textit{Cf.} \lneume{clsun1lst5} & \multicolumn{2}{l}{\texttt{clsun1lst5}} & tenere\\
+\lneume{lsth} & \texttt{lsth} \textit{Cf.} \lneume{tolsth8} & \multicolumn{2}{l}{\texttt{tolsth8}} & tenere humiliter\\ \hline
+\end{supertabular}
+
+\begin{supertabular}{llllll}\noindent
+& \multicolumn{4}{l}{\textbf{tironian notes}} & \\
+\lneume{lti} & \texttt{lti} & \texttt{L78H} & pro & iusum\\
+\lneume{ltdo} & \texttt{ltdo} & \texttt{L14O} & misericordiam & deorsum\\
+\lneume{ltdr} & \texttt{ltdr} & \texttt{L132E} & descendit & devertit\\
+\lneume{ltdx} & \texttt{ltdx} & \texttt{L122V} & intuerentus & devexum\\
+\lneume{ltps} & \texttt{ltps} & \texttt{L128S} & veniat, & prode sub eam (trade subtus)\\
+\lneume{ltqm} & \texttt{ltqm} & \texttt{L118E} & sum & quam mox\\
+\lneume{ltsb} & \texttt{ltsb} & \texttt{L11Q} & et & sub\\
+\lneume{ltse} & \texttt{ltse} & \texttt{L144C} & corde & seorsum\\
+\lneume{ltsj} & \texttt{ltsj} & \texttt{L164D} & meam & subjice\\
+\lneume{ltsl} & \texttt{ltsl} & \texttt{L117R} & delectati & saltim\\
+\lneume{ltsn} & \texttt{ltsn} & \texttt{L17H} & gloriam & sonare\\
+\lneume{ltsp} & \texttt{ltsp} & \texttt{L10I} & Ierusalem & supra\\
+\lneume{ltsr} & \texttt{ltsr} & \texttt{L14P} & et & sursum\\
+\lneume{ltst} & \texttt{ltst} & \texttt{L25L} & omnes & saltate (salte)\\
+\lneume{ltus} & \texttt{ltus} & \texttt{L17H} & eius. & ut supra\\ \hline
+\end{supertabular}
+}
+
 \end{document}

Modified: trunk/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef.lua
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef.lua	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef.lua	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,4 +1,4 @@
--- Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+-- Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
 --
 -- This file is part of Gregorio.
 --
@@ -43,9 +43,70 @@
 local EXCLUDE = {
   ['.notdef'] = true,
   ['.null'] = true,
+  notdef = true,
   nonmarkingreturn = true,
   AscendensOriscusLineBLTR = true,
   AscendensOriscusLineTR = true,
+  BracketLeftZero = true,
+  BracketLeftSix = true,
+  BracketLeftSeven = true,
+  BracketLeftEight = true,
+  BracketLeftNine = true,
+  BracketLeftTen = true,
+  BracketLeftEleven = true,
+  BracketLeftTwelve = true,
+  BracketLeftThirteen = true,
+  BracketLeftFourteen = true,
+  BracketLeftShortZero = true,
+  BracketLeftShortSix = true,
+  BracketLeftShortSeven = true,
+  BracketLeftShortEight = true,
+  BracketLeftShortNine = true,
+  BracketLeftShortTen = true,
+  BracketLeftShortEleven = true,
+  BracketLeftShortTwelve = true,
+  BracketLeftShortThirteen = true,
+  BracketLeftShortFourteen = true,
+  BracketLeftLongZero = true,
+  BracketLeftLongSix = true,
+  BracketLeftLongSeven = true,
+  BracketLeftLongEight = true,
+  BracketLeftLongNine = true,
+  BracketLeftLongTen = true,
+  BracketLeftLongEleven = true,
+  BracketLeftLongTwelve = true,
+  BracketLeftLongThirteen = true,
+  BracketLeftLongFourteen = true,
+  BracketRightZero = true,
+  BracketRightSix = true,
+  BracketRightSeven = true,
+  BracketRightEight = true,
+  BracketRightNine = true,
+  BracketRightTen = true,
+  BracketRightEleven = true,
+  BracketRightTwelve = true,
+  BracketRightThirteen = true,
+  BracketRightFourteen = true,
+  BracketRightShortZero = true,
+  BracketRightShortSix = true,
+  BracketRightShortSeven = true,
+  BracketRightShortEight = true,
+  BracketRightShortNine = true,
+  BracketRightShortTen = true,
+  BracketRightShortEleven = true,
+  BracketRightShortTwelve = true,
+  BracketRightShortThirteen = true,
+  BracketRightShortFourteen = true,
+  BracketRightLongZero = true,
+  BracketRightLongSix = true,
+  BracketRightLongSeven = true,
+  BracketRightLongEight = true,
+  BracketRightLongNine = true,
+  BracketRightLongTen = true,
+  BracketRightLongEleven = true,
+  BracketRightLongTwelve = true,
+  BracketRightLongThirteen = true,
+  BracketRightLongFourteen = true,
   PunctumAuctusLineBL = true,
   PunctumLineBLBR = true,
   PunctumLineBR = true,
@@ -73,22 +134,28 @@
   VirgaBaseLineBL = true,
 }
 
+-- &&& in the following two tables is a placeholder for the cavum shape 'r'
+
 local GABC = {
   Accentus = [[\excluded{g}r1]],
   AccentusReversus = [[\excluded{g}r2]],
-  Ancus = [[gec]],
-  AncusLongqueue = [[hfd]],
-  AscendensOriscusCavum = [[go1r]],
-  AscendensOriscusCavumHole = [[\excluded{gor}]],
-  AscendensOriscus = [[go1]],
-  AscendensOriscusLineBL = [[\excluded{e}@go1]],
-  AscendensOriscusLineTL = [[\excluded{i}@go1]],
-  AscendensOriscusScapus = [[gO1]],
-  AscendensOriscusScapusLongqueue = [[hO1]],
-  AscendensOriscusScapusOpenqueue = [[aO1]],
-  AscendensPunctumInclinatum = [[G1]],
+  Ancus = [[g&&&ec]],
+  AncusLongqueue = [[h&&&fd]],
+  AscendensOriscus = [[g&&&o1]],
+  AscendensOriscusLineBL = [[\excluded{e}@g&&&o1]],
+  AscendensOriscusLineTL = [[\excluded{i}@g&&&o1]],
+  AscendensOriscusScapus = [[g&&&O1]],
+  AscendensOriscusScapusLongqueue = [[h&&&O1]],
+  AscendensOriscusScapusOpenqueue = [[a&&&O1]],
+  AscendensPunctumInclinatum = [[G&&&1]],
   AuctumMora = [[\excluded{g}.]],
   BarBrace = [[\excluded{,}\_]],
+  BracketLeft = [=[[[\excluded{ce]]}]=],
+  BracketLeftShort = [=[[[\excluded{fh]]}]=],
+  BracketLeftLong = [=[[[\excluded{gi]]}]=],
+  BracketRight = [=[\excluded{[[ce}]]]=],
+  BracketRightShort = [=[\excluded{[[fh}]]]=],
+  BracketRightLong = [=[\excluded{[[gi}]]]=],
   CClef = [[c3]],
   CClefChange = [[c3]],
   Circulus = [[\excluded{g}r3]],
@@ -99,15 +166,13 @@
   CustosUpLong = [[f+]],
   CustosUpMedium = [[a+]],
   CustosUpShort = [[g+]],
-  DescendensOriscusCavum = [[go0r]],
-  DescendensOriscusCavumHole = [[\excluded{go0r}]],
-  DescendensOriscus = [[go0]],
-  DescendensOriscusLineBL = [[\excluded{e}@go0]],
-  DescendensOriscusLineTL = [[\excluded{i}@go0]],
-  DescendensOriscusScapus = [[gO0]],
-  DescendensOriscusScapusLongqueue = [[hO0]],
-  DescendensOriscusScapusOpenqueue = [[aO0]],
-  DescendensPunctumInclinatum = [[G0]],
+  DescendensOriscus = [[g&&&o0]],
+  DescendensOriscusLineBL = [[\excluded{e}@g&&&o0]],
+  DescendensOriscusLineTL = [[\excluded{i}@g&&&o0]],
+  DescendensOriscusScapus = [[g&&&O0]],
+  DescendensOriscusScapusLongqueue = [[h&&&O0]],
+  DescendensOriscusScapusOpenqueue = [[a&&&O0]],
+  DescendensPunctumInclinatum = [[G&&&0]],
   DivisioDominican = [[,3]],
   DivisioDominicanAlt = [[,4]],
   DivisioMaior = [[:]],
@@ -117,102 +182,93 @@
   FClef = [[f3]],
   Flat = [[gx]],
   FlatHole = [[\excluded{gx}]],
-  Flexus = [[ge]],
-  FlexusLongqueue = [[hf]],
-  FlexusNobar = [[@hf]],
-  FlexusOriscus = [[goe]],
-  FlexusOriscusInusitatus = [[go1e]],
-  FlexusOriscusScapus = [[gOe]],
-  FlexusOriscusScapusInusitatus = [[gO1e]],
-  FlexusOriscusScapusInusitatusLongqueue = [[hO1f]],
-  FlexusOriscusScapusLongqueue = [[hOf]],
-  LeadingOriscus = [[go\excluded{igig}]],
-  LeadingPunctum = [[g\excluded{igig}]],
-  LeadingQuilisma = [[gw\excluded{igig}]],
-  Linea = [[g=]],
-  LineaPunctumCavum = [[gr0]],
-  LineaPunctumCavumHole = [[\excluded{gr0}]],
-  LineaPunctum = [[gR]],
+  Flexus = [[g&&&e]],
+  FlexusLongqueue = [[h&&&f]],
+  FlexusNobar = [[@h&&&f]],
+  FlexusOriscus = [[g&&&oe]],
+  FlexusOriscusInusitatus = [[g&&&o1e]],
+  FlexusOriscusScapus = [[g&&&Oe]],
+  FlexusOriscusScapusInusitatus = [[g&&&O1e]],
+  FlexusOriscusScapusInusitatusLongqueue = [[h&&&O1f]],
+  FlexusOriscusScapusLongqueue = [[h&&&Of]],
+  LeadingOriscus = [[g&&&o\excluded{igig}]],
+  LeadingPunctum = [[g&&&\excluded{igig}]],
+  LeadingQuilisma = [[g&&&w\excluded{igig}]],
+  Linea = [[g&&&=]],
+  LineaPunctum = [[g&&&R]],
   Natural = [[gy]],
   NaturalHole = [[\excluded{gy}]],
-  OblatusAscendensOriscus = [[go1]],
-  OblatusDescendensOriscus = [[go0]],
-  OblatusFlexusOriscus = [[goe]],
-  OblatusFlexusOriscusInusitatus = [[go1e]],
-  OblatusPesQuassus = [[goi]],
-  OblatusPesQuassusLongqueue = [[hoj]],
-  OblatusPesQuassusInusitatus = [[go0i]],
-  OblatusPesQuassusInusitatusLongqueue = [[ho0j]],
-  Oriscus = [[go]], -- for Deminutus
-  OriscusCavum = [[gor]], -- for Deminutus
-  OriscusCavumDeminutusHole = [[\excluded{gor\~{}}]],
-  Pes = [[gi]],
-  PesQuadratum = [[gqi]],
-  PesQuadratumLongqueue = [[hqj]],
-  PesQuassus = [[goi]],
-  PesQuassusInusitatus = [[go0i]],
-  PesQuassusInusitatusLongqueue = [[ho0j]],
-  PesQuassusLongqueue = [[hoj]],
-  PesQuilisma = [[gwi]],
-  PesQuilismaQuadratum = [[gWi]],
-  PesQuilismaQuadratumLongqueue = [[hWj]],
-  PorrectusFlexus = [[gege]],
-  PorrectusFlexusNobar = [[\excluded{e}gege]],
-  Porrectus = [[geg]],
-  PorrectusLongqueue = [[hfh]],
-  PorrectusNobar = [[@geg]],
-  PunctumCavum = [[gr]],
-  PunctumCavumHole = [[\excluded{gr}]],
-  PunctumCavumInclinatumAuctus = [[Gr>]],
-  PunctumCavumInclinatumAuctusHole = [[\excluded{Gr>}]],
-  PunctumCavumInclinatum = [[Gr]],
-  PunctumCavumInclinatumHole = [[\excluded{Gr}]],
-  Punctum = [[g]],
-  PunctumInclinatum = [[G]], -- for deminutus
-  PunctumInclinatumAuctus = [[G>]],
-  PunctumLineBL = [[\excluded{e}@g]],
-  PunctumLineTL = [[\excluded{i}@g]],
-  Quilisma = [[gw]],
+  OblatusAscendensOriscus = [[g&&&o1]],
+  OblatusDescendensOriscus = [[g&&&o0]],
+  OblatusFlexusOriscus = [[g&&&oe]],
+  OblatusFlexusOriscusInusitatus = [[g&&&o1e]],
+  OblatusPesQuassus = [[g&&&oi]],
+  OblatusPesQuassusLongqueue = [[h&&&oj]],
+  OblatusPesQuassusInusitatus = [[g&&&o0i]],
+  OblatusPesQuassusInusitatusLongqueue = [[h&&&o0j]],
+  Oriscus = [[g&&&o]], -- for Deminutus
+  Pes = [[g&&&i]],
+  PesAscendensOriscus = [[g&&&iO\excluded{/j}]],
+  PesDescendensOriscus = [[g&&&iO\excluded{/h}]],
+  PesQuadratum = [[g&&&qi]],
+  PesQuadratumLongqueue = [[h&&&qj]],
+  PesQuassus = [[g&&&oi]],
+  PesQuassusInusitatus = [[g&&&o0i]],
+  PesQuassusInusitatusLongqueue = [[h&&&o0j]],
+  PesQuassusLongqueue = [[h&&&oj]],
+  PorrectusFlexus = [[g&&&ege]],
+  PorrectusFlexusNobar = [[\excluded{e}g&&&ege]],
+  Porrectus = [[g&&&eg]],
+  PorrectusLongqueue = [[h&&&fh]],
+  PorrectusNobar = [[@g&&&eg]],
+  Punctum = [[g&&&]],
+  PunctumInclinatum = [[G&&&]], -- for deminutus
+  PunctumInclinatumAuctus = [[G&&&>]],
+  PunctumLineBL = [[\excluded{e}@g&&&]],
+  PunctumLineTL = [[\excluded{i}@g&&&]],
+  Quilisma = [[g&&&w]],
+  QuilismaPes = [[g&&&wi]],
+  QuilismaPesQuadratum = [[g&&&Wi]],
+  QuilismaPesQuadratumLongqueue = [[h&&&Wj]],
   RoundBraceDown = '[ub:1;6mm]',
   RoundBrace = '[ob:1;6mm]',
-  SalicusFlexus = [[giOki]],
-  Salicus = [[giOk]],
-  SalicusLongqueue = [[hjOl]],
-  Scandicus = [[gik]],
+  SalicusFlexus = [[g&&&iOki]],
+  Salicus = [[g&&&iOk]],
+  SalicusLongqueue = [[h&&&jOl]],
+  Scandicus = [[g&&&ik]],
   Semicirculus = [[\excluded{g}r4]],
   SemicirculusReversus = [[\excluded{g}r5]],
   Sharp = [[g\#{}]],
   SharpHole = [[\excluded{g\#{}}]],
-  StrophaAucta = [[gs>]],
-  StrophaAuctaLongtail = [[hs>]],
-  Stropha = [[gs]],
-  Torculus = [[gig]],
-  TorculusLiquescens = [[gige]],
-  TorculusLiquescensQuilisma = [[gwige]],
-  TorculusQuilisma = [[gwig]],
-  TorculusResupinus = [[gigi]],
-  TorculusResupinusQuilisma = [[gwigi]],
+  StrophaAucta = [[g&&&s>]],
+  StrophaAuctaLongtail = [[h&&&s>]],
+  Stropha = [[g&&&s]],
+  Torculus = [[g&&&ig]],
+  TorculusLiquescens = [[g&&&ige]],
+  TorculusLiquescensQuilisma = [[g&&&wige]],
+  TorculusQuilisma = [[g&&&wig]],
+  TorculusResupinus = [[g&&&igi]],
+  TorculusResupinusQuilisma = [[g&&&wigi]],
   VEpisema = [[\excluded{g}^^^^0027]],
-  Virga = [[gv]],
-  VirgaLongqueue = [[hv]],
-  VirgaOpenqueue = [[av]],
-  VirgaReversa = [[gV]],
-  VirgaReversaLongqueue = [[hV]],
-  VirgaReversaOpenqueue = [[aV]],
-  VirgaStrata = [[giO]],
+  Virga = [[g&&&v]],
+  VirgaLongqueue = [[h&&&v]],
+  VirgaOpenqueue = [[a&&&v]],
+  VirgaReversa = [[g&&&V]],
+  VirgaReversaLongqueue = [[h&&&V]],
+  VirgaReversaOpenqueue = [[a&&&V]],
   Virgula = [[^^^^0060]],
 }
 
 local GABC_AMBITUS_ONE = {
-  PorrectusLongqueue = [[hgh]],
-  PorrectusFlexusLongqueue = [[hghg]],
-  FlexusOpenqueue = [[ba]],
-  FlexusOriscusScapusOpenqueue = [[bOa]],
-  PesQuadratumOpenqueue = [[aqb]],
-  PesQuassusOpenqueue = [[aob]],
-  PesQuilismaQuadratumOpenqueue = [[aWb]],
-  OblatusPesQuassusInusitatusOpenqueue = [[ao0b]],
-  OblatusPesQuassusOpenqueue = [[boc]],
+  PorrectusLongqueue = [[h&&&gh]],
+  PorrectusFlexusLongqueue = [[h&&&ghg]],
+  FlexusOpenqueue = [[b&&&a]],
+  FlexusOriscusScapusOpenqueue = [[b&&&Oa]],
+  PesQuadratumOpenqueue = [[a&&&qb]],
+  PesQuassusOpenqueue = [[a&&&ob]],
+  QuilismaPesQuadratumOpenqueue = [[a&&&Wb]],
+  OblatusPesQuassusInusitatusOpenqueue = [[a&&&o0b]],
+  OblatusPesQuassusOpenqueue = [[b&&&oc]],
 }
 
 -- if the item is a table, the values will replace fuse_head and gabc
@@ -305,18 +361,20 @@
 
 GregorioRef = {}
 
-function GregorioRef.emit_score_glyphs(cs_greciliae, cs_gregorio, cs_granapadano)
+function GregorioRef.emit_score_glyphs(cs_normal, cs_hollow)
   local common_glyphs = {}
-  local greciliae = {}
-  local gregorio = {}
-  local granapadano = {}
+  local normal_variants = {}
+  local normal_names = {}
+  local hollow_variants = {}
+  local hollow_names = {}
 
-  local function index_font(csname, variants, common)
+  local function index_font(csname, variants, names, common)
     local glyphs = font.fonts[font.id(csname)].resources.unicodes
     -- force-load the code points of the font --
     local ignored = glyphs['___magic___']
     local glyph, cp
     for glyph, cp in pairs(glyphs) do
+      names[glyph] = true
       if cp >= 0xe000 and not EXCLUDE[glyph] and not glyph:match('^HEpisema') then
         local name, variant = glyph:match('^([^.]*)(%.%a*)$')
         if name then
@@ -333,9 +391,8 @@
     end
   end
 
-  index_font(cs_greciliae, greciliae, common_glyphs)
-  index_font(cs_gregorio, gregorio)
-  index_font(cs_granapadano, granapadano)
+  index_font(cs_normal, normal_variants, normal_names, common_glyphs)
+  index_font(cs_hollow, hollow_variants, hollow_names, common_glyphs)
 
   local function maybe_emit_glyph(csname, variants, name, variant)
     local cp = variants[name]
@@ -378,26 +435,44 @@
     else
       texio.write_nl('GregorioRef Warning: missing GABC for '..name)
     end
-    tex.sprint(string.format(
-        [[{\scriptsize %s{\bfseries %s}{\itshape %s}%s%s}&{\ttfamily\small %s}&{\%s\char%d}&{\%s\char%d}&{\%s\char%d}&]],
-        fusion, shape, ambitus, debilis, liquescence, gabc or '', cs_greciliae, char, cs_gregorio, char, cs_granapadano, char
-    ))
+    local sorted_normal = sort_unique_keys{normal_variants[name]}
+    local sorted_hollow = sort_unique_keys{hollow_variants[name]}
+    local n = math.max(1, #sorted_normal, #sorted_hollow)
     local emitted = false, i, variant
-    for i, variant in ipairs(sort_unique_keys{greciliae[name], gregorio[name], granapadano[name]}) do
+    for i = 1,n do
       if emitted then
-        tex.sprint([[\nopagebreak&&&&&]])
+        tex.sprint([[\nopagebreak&&&]])
       else
-        emitted = true
+        tex.sprint(string.format(
+            [[{\scriptsize %s{\bfseries %s}{\itshape %s}%s%s}&{\ttfamily\small %s}&{\%s\char%d}&]],
+            fusion, shape, ambitus, debilis, liquescence, gabc and gabc:gsub('&&&', '') or '', cs_normal, char
+        ))
       end
-      tex.sprint(string.format([[{\scriptsize %s}]], variant))
-      maybe_emit_glyph('greciliae', greciliae, name, variant)
-      maybe_emit_glyph('gregorio', gregorio, name, variant)
-      maybe_emit_glyph('granapadano', granapadano, name, variant)
+      variant = sorted_normal[i]
+      if variant then
+        tex.sprint(string.format([[{\scriptsize %s}]], variant))
+        maybe_emit_glyph(cs_normal, normal_variants, name, variant)
+      else
+        tex.print([[&]])
+      end
+      if emitted or not hollow_names[name] then
+        tex.sprint([[&&&]])
+      else
+        tex.sprint(string.format(
+            [[&{\ttfamily\small %s}&{\%s\char%d}&]],
+            gabc and gabc:gsub('&&&', 'r') or '', cs_hollow, char
+        ))
+      end
+      variant = sorted_hollow[i]
+      if variant then
+        tex.sprint(string.format([[{\scriptsize %s}]], variant))
+        maybe_emit_glyph(cs_hollow, hollow_variants, name, variant)
+      else
+        tex.print([[&]])
+      end
       tex.print([[\\]])
+      emitted = true
     end
-    if not emitted then
-      tex.print([[&&&\\]])
-    end
   end
 
   local glyph_names = {}

Modified: trunk/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef.pdf
===================================================================
(Binary files differ)

Modified: trunk/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef.tex
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef.tex	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef.tex	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,6 +1,6 @@
 % !TEX program = LuaLaTeX+se
 %
-% Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
 %
 % This file is part of Gregorio.
 %
@@ -124,11 +124,9 @@
 
 % for the character tables
 \font\greciliae = {name:greciliae} at 1000000 sp\relax
-\font\gregorio = {name:gregorio} at 1000000 sp\relax
-\font\granapadano = {name:granapadano} at 1000000 sp\relax
+\font\greciliaeHollow = {name:greciliae-hollow} at 1000000 sp\relax
 \font\greciliaeOp = {name:greciliae-op} at 1000000 sp\relax
-\font\gregorioOp = {name:gregorio-op} at 1000000 sp\relax
-\font\granapadanoOp = {name:granapadano-op} at 1000000 sp\relax
+\font\greciliaeOpHollow = {name:greciliae-op-hollow} at 1000000 sp\relax
 \font\greextra = {name:greextra} at 12 pt\relax
 \newcommand{\excluded}[1]{{\tiny\itshape #1}}
 
@@ -179,7 +177,7 @@
 
 		\vspace{1cm}
 
-		\large Version \textbf{4.2.0}, 23 September 2016 %% PARSE_VERSION_DATE
+		\large Version \textbf{5.0.0-rc1}, 4 April 2017 %% PARSE_VERSION_DATE
 
 		\vspace{1.5cm}
 	\end{center}

Modified: trunk/Build/source/texk/gregorio/gregorio-src/doc/Makefile.am
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/doc/Makefile.am	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/doc/Makefile.am	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,4 +1,4 @@
-# Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+# Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
 #
 # This file is part of Gregorio.
 #
@@ -19,7 +19,7 @@
 SRCFILES = GregorioRef.tex Command_Index_gregorio.tex \
 		   Command_Index_internal.tex Command_Index_User.tex \
 		   Gabc.tex Appendix_Font_Tables.tex GregorioRef.lua factus.gabc
-NABCSRCFILES = GregorioNabcRef.tex veni.gabc
+NABCSRCFILES = GregorioNabcRef.tex veni.gabc omnes.gabc
 
 GREGORIO=gregorio-$(FILENAME_VERSION)
 
@@ -40,6 +40,7 @@
 GregorioNabcRef.pdf: $(NABCSRCFILES)
 	$(MAKE) $(AM_MAKEFLAGS) -C ../src $(GREGORIO)
 	../src/$(GREGORIO) -o veni.gtex $(<D)/veni.gabc
+	../src/$(GREGORIO) -o omnes.gtex $(<D)/omnes.gabc
 	TEXINPUTS=$(<D):$(<D)/../tex: LUAINPUTS=$(<D):$(<D)/../tex: \
 		 TTFONTS=$(<D)/../fonts: PATH=../src:${PATH} latexmk -recorder -pdf \
 		 -interaction=nonstopmode -halt-on-error \

Added: trunk/Build/source/texk/gregorio/gregorio-src/doc/omnes.gabc
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/doc/omnes.gabc	                        (rev 0)
+++ trunk/Build/source/texk/gregorio/gregorio-src/doc/omnes.gabc	2017-04-06 05:08:53 UTC (rev 43706)
@@ -0,0 +1,13 @@
+name: Omnes qui;
+office-part: Communio;
+mode: 2;
+book: Graduale Romanum, 1961, p. 261; Graduale Triplex, 1976, p. 61;
+transcriber: Andrew Hinkley, Jakub Jelínek;
+nabc-lines: 1;
+%%
+(f3)
+OM(f_c/ef~|clGhhta>)nes(f.|un1hg) *(,)
+qui(e|puhd) in(f|pu) Chris(f/ghf|un1helst8`tohi)to(f_ef.|clGhglsa5vi) (,)
+bap(f|puhd)ti(hh|bvlsa2)zá(h|un)ti(fe|unhd) es(e!gwh!ivHG'/hwihi|un1hbppn1ppq1sun2ql!po)tis,(ie..|clGhg) (;)
+Chris(f_e/f!gwhh|clGhdlsa5vihbqlheunhh)tum(hiH'F|un1heppn1sun2) in(hhf~|unlsa2`vi>)du(hh|bvlsa2)í(fgF'E|tosu1)stis,(e.|unhd) (;)
+al(hhf~|unlsa2`vi>)le(hh|bvlsa2)lú(hih|to>ltsr6)ia.(f.|unhd) (::)

Modified: trunk/Build/source/texk/gregorio/gregorio-src/examples/Makefile.am
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/examples/Makefile.am	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/examples/Makefile.am	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,4 +1,4 @@
-# Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+# Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
 #
 # This file is part of Gregorio.
 #

Modified: trunk/Build/source/texk/gregorio/gregorio-src/install-gtex.sh
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/install-gtex.sh	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/install-gtex.sh	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 
-# Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+# Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
 #
 # This file is part of Gregorio.
 #
@@ -60,6 +60,10 @@
 # To do this, set the SKIP environment variable to a comma-separated list of
 # the parts you want don't want installed: tex, latex, fonts, docs, examples,
 # and/or font-sources
+#
+# Setting the GENERATE_UNINSTALL environment variable to "false" will bypass
+# uninstall script generation and any existing uninstall script will be left
+# alone.
 
 VERSION=`head -1 .gregorio-version`
 FILEVERSION=`echo $VERSION | sed 's/\./_/g'`
@@ -67,15 +71,14 @@
 TEXFILES=(tex/gregoriotex*.tex tex/gsp-default.tex tex/gregoriotex*.lua
           tex/*.dat)
 LATEXFILES=(tex/gregorio*.sty)
-TTFFILES=(gregorio.ttf greciliae.ttf granapadano.ttf gregorio-op.ttf
-          greciliae-op.ttf granapadano-op.ttf greextra.ttf gregall.ttf
-          gresgmodern.ttf)
+TTFFILES=(fonts/*.ttf)
 DOCFILES=(doc/*.tex doc/*.lua doc/*.gabc doc/*.pdf doc/README.md)
 EXAMPLEFILES=(examples/FactusEst.gabc examples/PopulusSion.gabc
               examples/main-lualatex.tex examples/debugging.tex)
-FONTSRCFILES=(gregorio-base.sfd granapadano-base.sfd greciliae-base.sfd
-              greextra.sfd squarize.py convertsfdtottf.py gregall.sfd
+FONTSRCFILES=(greextra.sfd squarize.py convertsfdtottf.py gregall.sfd
               gresgmodern.sfd README.md)
+FONTSRCFILES=("${FONTSRCFILES[@]/#/fonts/}")
+FONTSRCFILES+=(fonts/*-base.sfd)
 # Files which have been eliminated, or whose installation location have been
 # changed.  We will remove existing versions of these files in the target texmf
 # tree before installing.
@@ -84,7 +87,14 @@
              tex/luatex/gregoriotex/gregoriotex-ictus.tex
              fonts/truetype/public/gregoriotex/parmesan.ttf
              fonts/truetype/public/gregoriotex/parmesan-op.ttf
-             fonts/source/gregoriotex/parmesan-base.sfd)
+             fonts/source/gregoriotex/parmesan-base.sfd
+             fonts/truetype/public/gregoriotex/gresym.ttf
+             fonts/truetype/public/gregoriotex/gregorio.ttf
+             fonts/truetype/public/gregoriotex/gregorio-op.ttf
+             fonts/source/gregoriotex/gregorio-base.sfd
+             fonts/truetype/public/gregoriotex/granapadano.ttf
+             fonts/truetype/public/gregoriotex/granapadano-op.ttf
+             fonts/source/gregoriotex/granapadano-base.sfd)
 
 NAME=${NAME:-gregoriotex}
 FORMAT=${FORMAT:-luatex}
@@ -94,8 +104,9 @@
 CP=${CP:-cp}
 RM=${RM:-rm}
 
-TTFFILES=("${TTFFILES[@]/#/fonts/}")
-FONTSRCFILES=("${FONTSRCFILES[@]/#/fonts/}")
+GENERATE_UNINSTALL=${GENERATE_UNINSTALL:-true}
+AUTO_UNINSTALL=${AUTO_UNINSTALL:-false}
+REMOVE_OLD_FILES=${REMOVE_OLD_FILES:-true}
 
 arg="$1"
 case "$arg" in
@@ -145,9 +156,15 @@
     echo "Usage: $0 var:{tex-variable}"
     echo "       $0 dir:{directory}"
     echo "       $0 system|user|tds"
+    echo
+    echo "Please read the documentation in the script for additional options"
     exit 1
 fi
 
+UNINSTALL_SCRIPT_DIR="scripts/gregoriotex"
+UNINSTALL_SCRIPT_FILE="uninstall-gtex.sh"
+UNINSTALL_SCRIPT="${TEXMFROOT}/${UNINSTALL_SCRIPT_DIR}/${UNINSTALL_SCRIPT_FILE}"
+
 function die {
     echo 'Failed.'
     exit 1
@@ -156,8 +173,18 @@
 function install_to {
     dir="$1"
     shift
-    mkdir -p "$dir" || die
-    $CP "$@" "$dir" || die
+    mkdir -p "${TEXMFROOT}/$dir" || die
+    $CP "$@" "${TEXMFROOT}/$dir" || die
+
+    if ${GENERATE_UNINSTALL}
+    then
+        for name in "$@"
+        do
+            echo '$RM'" $dir/$(basename $name)" >> "${UNINSTALL_SCRIPT}"
+        done
+        echo "rmdir -p $dir 2> /dev/null || true" >> "${UNINSTALL_SCRIPT}"
+        echo >> "${UNINSTALL_SCRIPT}"
+    fi
 }
 
 function find_and_remove {
@@ -175,9 +202,44 @@
     echo "install-gtex.sh: not installing $@"
 }
 
-echo "Removing old files"
-find_and_remove "${LEGACYFILES[@]}"
+if ${GENERATE_UNINSTALL}
+then
+    if [ -e "${UNINSTALL_SCRIPT}" ]
+    then
+        echo "${UNINSTALL_SCRIPT} exists."
+        echo "This suggests that some version of GregorioTeX is already installed."
+        if ${AUTO_UNINSTALL}
+        then
+            echo "AUTO_UNINSTALL=true, so uninstalling the old version of GregorioTeX."
+            bash "${UNINSTALL_SCRIPT}"
+        else
+            echo "Re-run this script setting the environment variable AUTO_UNINSTALL=true"
+            echo "to automatically uninstall the other version before installing the new one,"
+            echo "or clean up the old installation files manually."
+            exit 1
+        fi
+    fi
 
+    mkdir -p "${TEXMFROOT}/${UNINSTALL_SCRIPT_DIR}" || die
+    echo '# This script uninstalls GregorioTeX.' > "${UNINSTALL_SCRIPT}"
+    echo '# Run it with "bash /path/to/uninstall-gtex.sh".' >> "${UNINSTALL_SCRIPT}"
+    echo >> "${UNINSTALL_SCRIPT}"
+    echo 'RM=${RM:-rm}' >> "${UNINSTALL_SCRIPT}"
+    echo 'TEXHASH=${TEXHASH:-texhash}' >> "${UNINSTALL_SCRIPT}"
+    echo >> "${UNINSTALL_SCRIPT}"
+    echo 'cd $(dirname ${BASH_SOURCE[0]})/../..' >> "${UNINSTALL_SCRIPT}"
+    echo >> "${UNINSTALL_SCRIPT}"
+elif [ "$arg" != 'tds' ]
+then
+    echo "Not generating "${UNINSTALL_SCRIPT}""
+fi
+
+if ${REMOVE_OLD_FILES}
+then
+    echo "Removing old files."
+    find_and_remove "${LEGACYFILES[@]}"
+fi
+
 declare -A skip_install
 if [ -n "$SKIP" ]
 then
@@ -193,22 +255,32 @@
 
 echo "Installing in '${TEXMFROOT}'."
 ${skip_install[tex]:-false} && not_installing tex files ||
-    install_to "${TEXMFROOT}/tex/${FORMAT}/${NAME}" "${TEXFILES[@]}"
+    install_to "tex/${FORMAT}/${NAME}" "${TEXFILES[@]}"
 ${skip_install[latex]:-false} && not_installing latex files ||
-    install_to "${TEXMFROOT}/tex/${LATEXFORMAT}/${NAME}" "${LATEXFILES[@]}"
+    install_to "tex/${LATEXFORMAT}/${NAME}" "${LATEXFILES[@]}"
 ${skip_install[fonts]:-false} && not_installing fonts ||
-    install_to "${TEXMFROOT}/fonts/truetype/public/${NAME}" "${TTFFILES[@]}"
+    install_to "fonts/truetype/public/${NAME}" "${TTFFILES[@]}"
 ${skip_install[docs]:-false} && not_installing docs ||
-    install_to "${TEXMFROOT}/doc/${FORMAT}/${NAME}" "${DOCFILES[@]}"
+    install_to "doc/${FORMAT}/${NAME}" "${DOCFILES[@]}"
 ${skip_install[examples]:-false} && not_installing examples ||
-    install_to "${TEXMFROOT}/doc/${FORMAT}/${NAME}/examples" "${EXAMPLEFILES[@]}"
+    install_to "doc/${FORMAT}/${NAME}/examples" "${EXAMPLEFILES[@]}"
 ${skip_install[font-sources]:-false} && not_installing font sources ||
-    install_to "${TEXMFROOT}/fonts/source/${NAME}" "${FONTSRCFILES[@]}"
+    install_to "fonts/source/${NAME}" "${FONTSRCFILES[@]}"
 
+if ${GENERATE_UNINSTALL}
+then
+    echo '$RM'" ${UNINSTALL_SCRIPT_DIR}/${UNINSTALL_SCRIPT_FILE}" >> "${UNINSTALL_SCRIPT}"
+    echo "rmdir -p ${UNINSTALL_SCRIPT_DIR} 2> /dev/null || true" >> "${UNINSTALL_SCRIPT}"
+    echo >> "${UNINSTALL_SCRIPT}"
+
+    echo '${TEXHASH}' >> "${UNINSTALL_SCRIPT}"
+fi
+
 if [ "$arg" = 'tds' ]
 then
     echo "Making TDS-ready archive ${TDS_ZIP}."
     rm -f ${TDS_ZIP}
+    (rm ${TEXMFROOT}/fonts/source/gregoriotex/gregorio-base.sfd ${TEXMFROOT}/fonts/source/gregoriotex/granapadano-base.sfd ) || die
     (cd ${TEXMFROOT} && zip -9 ../${TDS_ZIP} -q -r .) || die
     rm -r ${TEXMFROOT} || die
 else

Modified: trunk/Build/source/texk/gregorio/gregorio-src/install.sh
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/install.sh	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/install.sh	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-# Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+# Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
 # 
 # This file is part of Gregorio.
 #

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/Makefile.am
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/Makefile.am	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/Makefile.am	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,4 +1,4 @@
-# Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+# Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
 #
 # This file is part of Gregorio.
 #
@@ -35,9 +35,13 @@
 @MK at else
 @MK@  ifneq ($(wildcard ../.hg/git),)
 @MK@    _gitnode_ = $(shell hg log --template='{gitnode}' -r .)
- at MK@    _tag_ = $(shell git --git-dir=../.hg/git describe --exact-match $(_gitnode_) 2>/dev/null)
- at MK@    ifeq ($(_tag_),)
- at MK@      DEFS += -DBRANCH_VERSION='"$(shell cat ../.hg/bookmarks.current)-$(shell git --git-dir=../.hg/git rev-parse --short '$(_gitnode_)')-$(shell git --git-dir=../.hg/git rev-list '$(_gitnode_)' --count)"'
+ at MK@    ifeq ($(_gitnode_),)
+ at MK@      DEFS += -DBRANCH_VERSION='"$(shell hg log --template='{activebookmark}-hg:{manifest}' -r .)"'
+ at MK@    else
+ at MK@      _tag_ = $(shell git --git-dir=../.hg/git describe --exact-match '$(_gitnode_)' 2>/dev/null)
+ at MK@      ifeq ($(_tag_),)
+ at MK@        DEFS += -DBRANCH_VERSION='"$(shell hg log --template='{activebookmark}' -r .)-$(shell git --git-dir=../.hg/git rev-parse --short '$(_gitnode_)')-$(shell git --git-dir=../.hg/git rev-list '$(_gitnode_)' --count)"'
+ at MK@      endif
 @MK@    endif
 @MK@  endif
 @MK at endif
@@ -73,7 +77,7 @@
 endif
 
 gabc/gabc-score-determination-y.c: gabc/gabc-score-determination.y
-	$(YACC) -d -p "gabc_score_determination_" -o $@ $<
+	$(YACC) -v -d -p "gabc_score_determination_" -o $@ $<
 gabc/gabc-score-determination-y.h: gabc/gabc-score-determination-y.c
 	## Recover from the removal of gabc/gabc-score-determination-y.h, see
 	## https://www.gnu.org/software/automake/manual/html_node/Multiple-Outputs.html
@@ -96,7 +100,7 @@
 	$(LEX) -o $@ $<
 
 vowel/vowel-rules-y.c: vowel/vowel-rules.y
-	$(YACC) -d -o $@ $<
+	$(YACC) -v -d -o $@ $<
 vowel/vowel-rules-y.h: vowel/vowel-rules-y.c
 	## Recover from the removal of vowel/vowel-rules-y.h, see
 	## https://www.gnu.org/software/automake/manual/html_node/Multiple-Outputs.html

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/bool.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/bool.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/bool.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This header provides a minimum of C11-like bool functionality.
  *
- * Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
  * 
  * This file is part of Gregorio.
  *

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/characters.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/characters.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/characters.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX.
  * This file contains functions that deal with lyrics and styles.
  *
- * Copyright (C) 2008-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2008-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *
@@ -120,8 +120,8 @@
     }
 }
 
-static __inline gregorio_character *skip_verbatim_or_special(
-        gregorio_character *ch)
+static __inline const gregorio_character *skip_verbatim_or_special(
+        const gregorio_character *ch)
 {
     /* skip past verbatim and special characters */
     if (ch->cos.s.type == ST_T_BEGIN && (ch->cos.s.style == ST_VERBATIM
@@ -160,43 +160,66 @@
     return true;
 }
 
-static void determine_center(gregorio_character *character, int *start,
-        int *end)
+static __inline int for_each_centerable_character(
+        const gregorio_character *const character,
+        void (*capture)(grewchar *, int, grewchar), grewchar *buffer)
 {
     int count;
-    grewchar *subject;
-    gregorio_character *ch;
-    bool in_elision;
+    const gregorio_character *ch;
+    bool in_elision = false;
 
-    *start = *end = -1;
-
-    in_elision = false;
     for (count = 0, ch = character; ch; ch = ch->next_character) {
         if (ch->is_character) {
             if (!in_elision) {
+                if (capture) {
+                    capture(buffer, count, ch->cos.character);
+                }
                 ++count;
             }
-        } else if (!handle_elision(ch, &in_elision)) {
-            ch = skip_verbatim_or_special(ch);
+        } else {
+            if (ch->cos.s.style == ST_PROTRUSION_FACTOR) {
+                /* if there is a protrusion, we will always encounter the
+                 * protrusion factor first */
+                break;
+            }
+            if (ch->cos.s.type == ST_T_BEGIN && ch->cos.s.style == ST_ELISION) {
+                /* put in a special character at the beginning of an elision
+                 * that represents the elision */
+                if (capture) {
+                    capture(buffer, count, GREVOWEL_ELISION_MARK);
+                }
+                ++count;
+            }
+            if (!handle_elision(ch, &in_elision)) {
+                ch = skip_verbatim_or_special(ch);
+            }
         }
     }
+    return count;
+}
+
+/* this function assumes subject is sized correctly */
+static void capture_subject(grewchar *const subject, const int count,
+        const grewchar character)
+{
+    subject[count] = character;
+}
+
+static void determine_center(gregorio_character *character, int *start,
+        int *end)
+{
+    const int count = for_each_centerable_character(character, NULL, NULL);
+    grewchar *subject;
+
     if (count == 0) {
         return;
     }
 
-    in_elision = false;
     subject = (grewchar *)gregorio_malloc((count + 1) * sizeof(grewchar));
-    for (count = 0, ch = character; ch; ch = ch->next_character) {
-        if (ch->is_character) {
-            if (!in_elision) {
-                subject[count ++] = ch->cos.character;
-            }
-        } else if (!handle_elision(ch, &in_elision)) {
-            ch = skip_verbatim_or_special(ch);
-        }
-    }
+    for_each_centerable_character(character, capture_subject, subject);
     subject[count] = (grewchar)0;
 
+    *start = *end = -1;
     gregorio_find_vowel_group(subject, start, end);
 
     free(subject);
@@ -913,6 +936,12 @@
                     }
                 }
 
+                if (style == ST_ELISION) {
+                    /* skip over the elision marker in the vowel determination
+                     * buffer */
+                    ++index;
+                }
+
                 switch (style) {
                 case ST_VERBATIM:
                 case ST_SPECIAL_CHAR:
@@ -960,8 +989,15 @@
                         /* just loop */
                     }
                     if (current_style) {
+                        /* repeated styles should already have been filtered out
+                         * during parsing, so if this is hit, it's a programming
+                         * error */
+                        /* LCOV_EXCL_START */
+                        gregorio_fail(gregorio_rebuild_characters,
+                                "encountered repeated style");
                         current_character = suppress_character(current_character);
                         continue;
+                        /* LCOV_EXCL_STOP */
                     }
                     /* if it is something to add then we just push the style in the
                      * stack and continue. */
@@ -1126,9 +1162,13 @@
     /* now we are going to place the two INITIAL styles (begin and end) */
     while (current_character) {
         if (!current_character->is_character
-                && current_character->cos.s.style == ST_FORCED_CENTER) {
+                && (current_character->cos.s.style == ST_FORCED_CENTER
+                    || current_character->cos.s.style == ST_PROTRUSION_FACTOR)) {
             /* we don't touch anything after a FORCED_CENTER, so we put an
-             * empty INITIAL style just before */
+             * empty INITIAL style just before; we handle the weird case of
+             * a protrusion (manual or automatic) at the initial the same way
+             * (we need only check for PROTRUSION_FACTOR since that will come
+             * before PROTRUSION) */
             current_character = first_character;
             insert_style_before(ST_T_BEGIN, ST_INITIAL, current_character);
             current_character = current_character->previous_character;
@@ -1219,13 +1259,26 @@
                 insert_style_after(ST_T_END, ST_FIRST_SYLLABLE_INITIAL,
                         &current_character);
             }
-            if (!current_character->is_character
-                    && (current_character->cos.s.style == ST_CENTER
-                    || current_character->cos.s.style == ST_FORCED_CENTER)) {
-                insert_style_before(ST_T_END, ST_FIRST_SYLLABLE,
-                        current_character);
-                insert_style_after(ST_T_BEGIN, ST_FIRST_SYLLABLE,
-                        &current_character);
+            if (!current_character->is_character) {
+                switch (current_character->cos.s.style) {
+                case ST_CENTER:
+                case ST_FORCED_CENTER:
+                    insert_style_before(ST_T_END, ST_FIRST_SYLLABLE,
+                            current_character);
+                    insert_style_after(ST_T_BEGIN, ST_FIRST_SYLLABLE,
+                            &current_character);
+                    break;
+
+                case ST_PROTRUSION_FACTOR:
+                    /* protrusion is not allowed to be the syllable initial;
+                     * we only need to check PROTRUSION_FACTOR since that will
+                     * come before PROTRUSION */
+                    marked_syllable_initial = true;
+                    break;
+
+                default:
+                    break;
+                }
             }
             if (!current_character->next_character) {
                 insert_style_after(ST_T_END, ST_FIRST_SYLLABLE,
@@ -1269,7 +1322,7 @@
         }
     }
     /* else there are no more characters here */
-    
+
     if (*character) {
         gregorio_go_to_first_character_c(character);
     }

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/characters.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/characters.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/characters.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This header prototypes the lyric handling data structures and entry points.
  *
- * Copyright (C) 2008-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2008-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/config.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/config.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/config.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -4,7 +4,7 @@
  *
  * Gregorio configuration headers.
  *
- * Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  * 

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/dump/dump.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/dump/dump.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/dump/dump.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX.
  * This file provides functions to dump out Gregorio structures.
  *
- * Copyright (C) 2007-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2007-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  * 
@@ -215,6 +215,9 @@
             fprintf(f, "   euouae                    %s\n",
                     gregorio_euouae_to_string(syllable->euouae));
         }
+        if (syllable->clear) {
+            fprintf(f, "   clear                     true\n");
+        }
         if (syllable->text) {
             if (syllable->translation) {
                 fprintf(f, "\n  Text\n");
@@ -256,6 +259,9 @@
                     fprintf(f, "     force_pitch             true\n");
                 }
                 break;
+            case GRE_SUPPRESS_CUSTOS:
+                /* not handling this would generate an error below */
+                break;
             case GRE_SPACE:
                 if (element->u.misc.unpitched.info.space) {
                     char *factor = element->u.misc.unpitched.info.
@@ -269,7 +275,7 @@
                 break;
             case GRE_TEXVERB_ELEMENT:
                 fprintf(f, "     TeX string              \"%s\"\n",
-                        element->texverb);
+                        gregorio_texverb(element->texverb));
                 break;
             case GRE_NLBA:
                 fprintf(f, "     nlba                    %d (%s)\n",
@@ -279,7 +285,7 @@
                 break;
             case GRE_ALT:
                 fprintf(f, "     Above lines text        \"%s\"\n",
-                        element->texverb);
+                        gregorio_texverb(element->texverb));
                 break;
             case GRE_BAR:
                 if (element->u.misc.unpitched.info.bar) {
@@ -338,7 +344,7 @@
                     switch (glyph->type) {
                     case GRE_TEXVERB_GLYPH:
                         fprintf(f, "       TeX string            \"%s\"\n",
-                                glyph->texverb);
+                                gregorio_texverb(glyph->texverb));
                         break;
 
                     case GRE_SPACE:
@@ -353,6 +359,9 @@
                                 glyph->u.notes.glyph_type,
                                 gregorio_glyph_type_to_string(glyph->u.notes.
                                                               glyph_type));
+                        if (glyph->u.notes.is_cavum) {
+                            fprintf(f, "       is_cavum              true\n");
+                        }
                         if (glyph->u.notes.liquescentia) {
                             fprintf(f, "       liquescentia          %d (%s)\n",
                                     glyph->u.notes.liquescentia,
@@ -391,6 +400,9 @@
                                             gregorio_shape_to_string(
                                                     note->u.note.shape));
                                 }
+                                if (note->u.note.is_cavum) {
+                                    fprintf(f, "         is_cavum               true\n");
+                                }
                                 if (note->u.note.liquescentia) {
                                     fprintf(f, "         liquescentia           %d (%s)\n",
                                             note->u.note.liquescentia,
@@ -409,7 +421,7 @@
                             }
                             if (note->texverb) {
                                 fprintf(f, "         TeX string             \"%s\"\n",
-                                        note->texverb);
+                                        gregorio_texverb(note->texverb));
                             }
                             if (note->choral_sign) {
                                 fprintf(f, "         Choral Sign            \"%s\"\n",
@@ -471,13 +483,37 @@
                             dump_hepisema_adjustment(f, note, SO_OVER, "above");
                             dump_hepisema_adjustment(f, note, SO_UNDER,
                                     "below");
-                            if (note->explicit_high_ledger_line) {
+                            switch (note->high_ledger_specificity) {
+                            case LEDGER_SUPPOSED:
+                                break;
+                            case LEDGER_EXPLICIT:
                                 fprintf(f, "         explicit high line     %s\n",
-                                        dump_bool(note->supposed_high_ledger_line));
+                                        dump_bool(note->high_ledger_line));
+                                break;
+                            case LEDGER_DRAWN:
+                                fprintf(f, "         drawn high line        %s\n",
+                                        dump_bool(note->high_ledger_line));
+                                break;
+                            case LEDGER_EXPLICITLY_DRAWN:
+                                fprintf(f, "         forced drawn high line %s\n",
+                                        dump_bool(note->high_ledger_line));
+                                break;
                             }
-                            if (note->explicit_low_ledger_line) {
+                            switch (note->low_ledger_specificity) {
+                            case LEDGER_SUPPOSED:
+                                break;
+                            case LEDGER_EXPLICIT:
                                 fprintf(f, "         explicit low line      %s\n",
-                                        dump_bool(note->supposed_low_ledger_line));
+                                        dump_bool(note->low_ledger_line));
+                                break;
+                            case LEDGER_DRAWN:
+                                fprintf(f, "         drawn low line         %s\n",
+                                        dump_bool(note->low_ledger_line));
+                                break;
+                            case LEDGER_EXPLICITLY_DRAWN:
+                                fprintf(f, "         forced drawn low line  %s\n",
+                                        dump_bool(note->low_ledger_line));
+                                break;
                             }
                         }
                     }

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/encode_utf8strings.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/encode_utf8strings.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/encode_utf8strings.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,7 +1,7 @@
 /*
  * Utility program to convert utf8strings.h.in into utf8strings.h
  *
- * Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/enum_generator.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/enum_generator.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/enum_generator.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-elements-determination.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-elements-determination.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-elements-determination.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX.
  * This file provides functions for determining elements from notes.
  *
- * Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  * 
@@ -175,7 +175,7 @@
             }
             first_glyph = current_glyph->next;
             previous_glyph = NULL;
-            current_glyph->texverb = NULL;
+            current_glyph->texverb = 0;
             gregorio_free_one_glyph(&current_glyph);
             continue;
         }

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-glyphs-determination.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-glyphs-determination.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-glyphs-determination.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This file provides functions for determining glyphs from notes.
  *
- * Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *
@@ -41,6 +41,12 @@
     return loc;
 }
 
+static __inline bool is_normal_punctum(const gregorio_note *const note)
+{
+    return note->u.note.shape == S_PUNCTUM
+        && note->u.note.liquescentia != L_INITIO_DEBILIS;
+}
+
 /****************************
  *
  * This function is the basis of all the determination of glyphs. The
@@ -88,6 +94,10 @@
         gabc_determination *end_of_glyph,
         gregorio_shape *punctum_inclinatum_orientation)
 {
+    #define this_note_starts_new_glyph { \
+        next_glyph_type = G_PUNCTUM; \
+        *end_of_glyph = DET_END_OF_PREVIOUS; \
+    }
 
     /* next glyph type is the type of the glyph that will be returned (the
      * new type of the glyph with the note added to it, or the type of the
@@ -106,9 +116,7 @@
     }
 
     switch (shape) {
-    case S_PUNCTUM_CAVUM:
     case S_LINEA_PUNCTUM:
-    case S_LINEA_PUNCTUM_CAVUM:
     case S_LINEA:
         next_glyph_type = G_PUNCTUM;
         *end_of_glyph = DET_END_OF_BOTH;
@@ -124,8 +132,7 @@
          * we determine here the shape of the thing if it is made of puncta
          */
         if (current_pitch == last_pitch) {
-            next_glyph_type = G_PUNCTUM;
-            *end_of_glyph = DET_END_OF_PREVIOUS;
+            this_note_starts_new_glyph;
             break;
         }
         switch (current_glyph_type) {
@@ -138,14 +145,11 @@
             break;
         case G_PODATUS:
             if (current_pitch > last_pitch) {
-                if (current_glyph_first_note->u.note.shape == S_PUNCTUM &&
-                        current_glyph_first_note->u.note.liquescentia !=
-                        L_INITIO_DEBILIS) {
+                if (is_normal_punctum(current_glyph_first_note)) {
                     next_glyph_type = G_SCANDICUS;
                     *end_of_glyph = DET_END_OF_CURRENT;
                 } else {
-                    next_glyph_type = G_PUNCTUM;
-                    *end_of_glyph = DET_END_OF_PREVIOUS;
+                    this_note_starts_new_glyph;
                 }
             } else {
                 next_glyph_type = G_TORCULUS;
@@ -164,16 +168,15 @@
                 next_glyph_type = G_PES_QUADRATUM;
                 *end_of_glyph = DET_END_OF_CURRENT;
             } else {
-                next_glyph_type = G_PUNCTUM;
-                *end_of_glyph = DET_END_OF_PREVIOUS;
+                this_note_starts_new_glyph;
             }
             break;
-        case G_VIRGA_STRATA: /* really a pes stratus */
+        case G_PES_ASCENDENS_ORISCUS:
+        case G_PES_DESCENDENS_ORISCUS:
             if (current_pitch > last_pitch) {
                 next_glyph_type = G_SALICUS;
             } else {
-                next_glyph_type = G_PUNCTUM;
-                *end_of_glyph = DET_END_OF_PREVIOUS;
+                this_note_starts_new_glyph;
             }
             break;
         case G_SALICUS:
@@ -181,20 +184,22 @@
                 next_glyph_type = G_SALICUS_FLEXUS;
                 *end_of_glyph = DET_END_OF_CURRENT;
             } else {
-                next_glyph_type = G_PUNCTUM;
-                *end_of_glyph = DET_END_OF_PREVIOUS;
+                this_note_starts_new_glyph;
             }
             break;
         case G_FLEXA:
             if (current_pitch > last_pitch) {
-                next_glyph_type = G_PORRECTUS;
+                if (is_normal_punctum(current_glyph_first_note)) {
+                    next_glyph_type = G_PORRECTUS;
+                } else {
+                    this_note_starts_new_glyph;
+                }
             } else {
                 if (liquescentia & L_DEMINUTUS) {
                     *end_of_glyph = DET_END_OF_CURRENT;
                     next_glyph_type = G_ANCUS;
                 } else {
-                    *end_of_glyph = DET_END_OF_PREVIOUS;
-                    next_glyph_type = G_PUNCTUM;
+                    this_note_starts_new_glyph;
                 }
             }
             break;
@@ -205,14 +210,12 @@
                 *end_of_glyph = DET_END_OF_CURRENT;
                 next_glyph_type = G_TORCULUS_LIQUESCENS;
             } else {
-                *end_of_glyph = DET_END_OF_PREVIOUS;
-                next_glyph_type = G_PUNCTUM;
+                this_note_starts_new_glyph;
             }
             break;
         case G_TORCULUS_RESUPINUS:
             if (current_pitch > last_pitch) {
-                *end_of_glyph = DET_END_OF_PREVIOUS;
-                next_glyph_type = G_PUNCTUM;
+                this_note_starts_new_glyph;
             } else {
                 *end_of_glyph = DET_END_OF_CURRENT;
                 next_glyph_type = G_TORCULUS_RESUPINUS_FLEXUS;
@@ -220,8 +223,7 @@
             break;
         case G_PORRECTUS:
             if (current_pitch > last_pitch) {
-                *end_of_glyph = DET_END_OF_PREVIOUS;
-                next_glyph_type = G_PUNCTUM;
+                this_note_starts_new_glyph;
             } else {
                 *end_of_glyph = DET_END_OF_CURRENT;
                 next_glyph_type = G_PORRECTUS_FLEXUS;
@@ -228,8 +230,7 @@
             }
             break;
         default:
-            *end_of_glyph = DET_END_OF_PREVIOUS;
-            next_glyph_type = G_PUNCTUM;
+            this_note_starts_new_glyph;
             break;
         }
         break;
@@ -237,13 +238,8 @@
     case S_ORISCUS_ASCENDENS:
     case S_ORISCUS_DESCENDENS:
     case S_ORISCUS_DEMINUTUS:
-    case S_ORISCUS_CAVUM_UNDETERMINED:
-    case S_ORISCUS_CAVUM_ASCENDENS:
-    case S_ORISCUS_CAVUM_DESCENDENS:
-    case S_ORISCUS_CAVUM_DEMINUTUS:
     case S_QUILISMA:
-        *end_of_glyph = DET_END_OF_PREVIOUS;
-        next_glyph_type = G_PUNCTUM;
+        this_note_starts_new_glyph;
         break;
     case S_VIRGA:
         if (current_glyph_type == G_VIRGA && last_pitch == current_pitch) {
@@ -284,18 +280,25 @@
         break;
     case S_ORISCUS_SCAPUS_UNDETERMINED:
     case S_ORISCUS_SCAPUS_ASCENDENS:
+        if (current_glyph_type == G_PUNCTUM && last_pitch < current_pitch) {
+            next_glyph_type = G_PES_ASCENDENS_ORISCUS;
+            /* Therefore G_PES_ASCENDENS_ORISCUS might be fronting an
+             * undetermined oriscus scapus.  This will be resolved during
+             * oriscus orientation determination */
+        } else {
+            this_note_starts_new_glyph;
+        }
+        break;
     case S_ORISCUS_SCAPUS_DESCENDENS:
         if (current_glyph_type == G_PUNCTUM && last_pitch < current_pitch) {
-            next_glyph_type = G_VIRGA_STRATA;
+            next_glyph_type = G_PES_DESCENDENS_ORISCUS;
         } else {
-            *end_of_glyph = DET_END_OF_PREVIOUS;
-            next_glyph_type = G_PUNCTUM;
+            this_note_starts_new_glyph;
         }
         break;
     case S_PUNCTUM_INCLINATUM_UNDETERMINED:
     case S_PUNCTUM_INCLINATUM_ASCENDENS:
     case S_PUNCTUM_INCLINATUM_DESCENDENS:
-    case S_PUNCTUM_CAVUM_INCLINATUM:
         /*
          * Warning : this part of the code is specific to the
          * declarations of the header file
@@ -467,10 +470,6 @@
     }
 
     switch (shape) {
-    case S_PUNCTUM_CAVUM_INCLINATUM:
-        /* treat this as descendens */
-        *punctum_inclinatum_orientation = S_PUNCTUM_INCLINATUM_DESCENDENS;
-        break;
     case S_PUNCTUM_INCLINATUM_ASCENDENS:
     case S_PUNCTUM_INCLINATUM_DESCENDENS:
         *punctum_inclinatum_orientation = shape;
@@ -485,6 +484,21 @@
     return next_glyph_type;
 }
 
+static bool is_cavum(gregorio_note *note, gregorio_note *last_note)
+{
+    bool is_cavum = false;
+    for (; note; note = note->next) {
+        if (note->type == GRE_NOTE) {
+            is_cavum = is_cavum || note->u.note.is_cavum;
+        }
+        /* don't look past the last note */
+        if (note == last_note) {
+            break;
+        }
+    }
+    return is_cavum;
+}
+
 /****************************
  *
  * First see the comments of
@@ -513,7 +527,9 @@
         glyph_type = G_PUNCTUM;
     }
 
-    gregorio_add_glyph(last_glyph, glyph_type, *first_note, liquescentia);
+    gregorio_add_glyph(last_glyph, glyph_type, *first_note, liquescentia,
+            is_cavum(*first_note, current_note));
+
     if (current_note->next) {
         current_note->next->previous = NULL;
         *first_note = current_note->next;
@@ -659,7 +675,7 @@
 
         gregorio_add_unpitched_element_as_glyph(last_glyph, first_note->type,
                 &(first_note->u.other), _NO_SIGN, first_note->texverb);
-        first_note->texverb = NULL;
+        first_note->texverb = 0;
         gregorio_free_one_note(&first_note);
 
         if (on_last_note) {
@@ -698,7 +714,7 @@
             gregorio_add_unpitched_element_as_glyph(last_glyph,
                     (*first_note)->type, &((*first_note)->u.other), _NO_SIGN,
                     (*first_note)->texverb);
-            (*first_note)->texverb = NULL;
+            (*first_note)->texverb = 0;
             gregorio_assert(*first_note != last_note,
                     close_fusion_glyph, "Unexpected texverb at end of fusion",
                     return last_note);
@@ -927,7 +943,8 @@
             bool force = false;
             gregorio_sign sign = _NO_SIGN;
 
-            if (current_glyph_type == G_FUSED && type == GRE_TEXVERB_GLYPH) {
+            if (current_glyph_type == G_FUSED
+                    && (type == GRE_TEXVERB_GLYPH || type == GRE_TEXVERB_ELEMENT)) {
                 current_note = next_note;
                 continue;
             }
@@ -1003,7 +1020,7 @@
                 }
             }
             current_glyph_first_note = current_note->next;
-            current_note->texverb = NULL;
+            current_note->texverb = 0;
             gregorio_free_one_note(&current_note);
             last_pitch = USELESS_VALUE;
             continue;
@@ -1128,18 +1145,13 @@
                     /* special cases of oriscus descendens, treated like normal
                      * oriscus in some cases. */
                     if (score->legacy_oriscus_orientation) {
-                        if ((current_note->u.note.shape == S_ORISCUS_DESCENDENS
-                                    || current_note->u.note.shape
-                                    == S_ORISCUS_CAVUM_DESCENDENS)
+                        if (current_note->u.note.shape == S_ORISCUS_DESCENDENS
                                 && current_note->next
                                 && current_note->next->type == GRE_NOTE
                                 && current_note->next->u.note.pitch <
                                 current_note->u.note.pitch) {
                             last_pitch = current_note->u.note.pitch;
-                            current_note->u.note.shape =
-                                    current_note->u.note.shape
-                                    == S_ORISCUS_DESCENDENS? S_ORISCUS_ASCENDENS
-                                    : S_ORISCUS_CAVUM_ASCENDENS;
+                            current_note->u.note.shape = S_ORISCUS_ASCENDENS;
                             current_note->u.note.liquescentia =
                                     L_NO_LIQUESCENTIA;
                             current_note = next_note;
@@ -1181,31 +1193,6 @@
                             continue;
                         }
                     }
-                    if (current_note->u.note.shape == S_PUNCTUM_CAVUM_INCLINATUM) {
-                        switch (current_note->u.note.liquescentia
-                                & TAIL_LIQUESCENTIA_MASK) {
-                        case L_AUCTUS_DESCENDENS:
-                        case L_AUCTUS_ASCENDENS:
-                            current_note->u.note.shape =
-                                    S_PUNCTUM_CAVUM_INCLINATUM_AUCTUS;
-                            break;
-                        }
-
-                        if (current_note->next
-                                && current_note->next->type == GRE_NOTE
-                                && (current_note->next->u.note.shape
-                                    == S_PUNCTUM_INCLINATUM_ASCENDENS
-                                    || current_note->next->u.note.shape
-                                    == S_PUNCTUM_INCLINATUM_DESCENDENS
-                                    || current_note->next->u.note.shape
-                                    == S_PUNCTUM_INCLINATUM_UNDETERMINED)
-                                && current_note->next->u.note.liquescentia ==
-                                L_DEMINUTUS) {
-                            last_pitch = current_note->u.note.pitch;
-                            current_note = next_note;
-                            continue;
-                        }
-                    }
                     liquescentia |= current_note->u.note.liquescentia;
                     /* once again, only works with the good values in the header
                      * file */
@@ -1266,30 +1253,6 @@
                             continue;
                         }
                     }
-                    if (current_note->u.note.shape == S_PUNCTUM_CAVUM_INCLINATUM) {
-                        switch (current_note->u.note.liquescentia
-                                & TAIL_LIQUESCENTIA_MASK) {
-                        case L_AUCTUS_DESCENDENS:
-                        case L_AUCTUS_ASCENDENS:
-                            current_note->u.note.shape =
-                                    S_PUNCTUM_CAVUM_INCLINATUM_AUCTUS;
-                            break;
-                        }
-
-                        if (current_note->next
-                                && current_note->next->type == GRE_NOTE
-                                && (current_note->next->u.note.shape
-                                    == S_PUNCTUM_INCLINATUM_ASCENDENS
-                                    || current_note->next->u.note.shape
-                                    == S_PUNCTUM_INCLINATUM_DESCENDENS
-                                    || current_note->next->u.note.shape
-                                    == S_PUNCTUM_INCLINATUM_UNDETERMINED)
-                                && current_note->next->u.note.liquescentia ==
-                                L_DEMINUTUS) {
-                            current_note = next_note;
-                            continue;
-                        }
-                    }
                     current_note = close_glyph(&last_glyph, current_glyph_type,
                             &current_glyph_first_note,
                             current_note->u.note.liquescentia, current_note,

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-notes-determination-l.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-notes-determination-l.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-notes-determination-l.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2383,9 +2383,9 @@
       -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,
       -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,
       -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,
-      -63,  -63,  -63,  -63,  -63,  -63,  -63,  135,  -63,  136,
-      -63,  137,  -63,  138,  139,  -63,  -63,  -63,  140,  -63,
-      141,  142,  -63,  -63,  -63,  -63,  -63,  143,  -63,  -63,
+      -63,  135,  -63,  -63,  -63,  -63,  -63,  136,  -63,  137,
+      -63,  138,  -63,  139,  140,  -63,  -63,  -63,  141,  -63,
+      142,  143,  -63,  -63,  -63,  -63,  -63,  144,  -63,  -63,
 
       -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,
       -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,
@@ -2415,6 +2415,7 @@
       -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,
       -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,
       -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,
+      -64,  -64,  -64,  145,  -64,  -64,  -64,  -64,  -64,  -64,
       -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,
       -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,
       -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,
@@ -2421,7 +2422,6 @@
       -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,
       -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,
       -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,
-      -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,
 
       -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,
       -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,
@@ -2441,8 +2441,8 @@
       -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,
       -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,
       -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,
-      -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,  144,  144,
-      144,  144,  144,  144,  -65,  -65,  -65,  -65,  -65,  -65,
+      -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,  146,  146,
+      146,  146,  146,  146,  -65,  -65,  -65,  -65,  -65,  -65,
       -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,
       -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,
       -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,
@@ -2504,7 +2504,7 @@
       -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,
       -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,
       -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,
-      -67,  -67,  -67,  145,  -67,  -67,  -67,  -67,  -67,  -67,
+      -67,  -67,  -67,  147,  -67,  -67,  -67,  -67,  -67,  -67,
       -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,
       -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,
       -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,
@@ -2536,12 +2536,12 @@
 
       -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,
       -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,
-      -68,  -68,  -68,  145,  -68,  -68,  -68,  -68,  -68,  146,
-      146,  146,  146,  146,  -68,  -68,  -68,  -68,  -68,  -68,
+      -68,  -68,  -68,  147,  -68,  -68,  -68,  -68,  -68,  148,
+      148,  148,  148,  148,  -68,  -68,  -68,  -68,  -68,  -68,
       -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,
       -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,
       -68,  -68,  -68,  -68,  -68,  -68,  128,  -68,  -68,  -68,
-      -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,  147,  -68,
+      -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,  149,  -68,
       -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,
       -68,  -68,  -68,  -68,  -68,  129,  -68,  -68,  130,  -68,
 
@@ -2567,7 +2567,7 @@
       -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,
       -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,
       -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,
-      -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,  148,  149,
+      -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,  150,  151,
       -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,
 
       -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,
@@ -2631,8 +2631,8 @@
       -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,
       -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,
 
-      -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,  150,  151,
-      152,  153,  154,  155,  -71,  -71,  -71,  -71,  -71,  -71,
+      -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,  152,  153,
+      154,  155,  156,  157,  158,  159,  160,  -71,  -71,  -71,
       -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,
       -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,
       -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,
@@ -2820,7 +2820,7 @@
       -77,  -77,  -77,  -77,  -77,  -77,  -77,  -77,  -77,  -77,
       -77,  -77,  -77,  -77,  -77,  -77,  -77,  -77,  -77,  -77,
       -77,  -77,  -77,  -77,  -77,  -77,  -77,  -77,  -77,  -77,
-      -77,  -77,  -77,  156,  -77,  157,  -77,  -77,  158,  -77,
+      -77,  -77,  -77,  161,  -77,  162,  -77,  -77,  163,  -77,
       -77,  -77,  -77,  -77,  -77,  -77,  -77,  -77,  -77,  -77,
       -77,  -77,  -77,  -77,  -77,  -77,  -77,  -77,  -77,  -77,
       -77,  -77,  -77,  -77,  -77,  -77,  -77,  -77,  -77,  -77,
@@ -2942,35 +2942,35 @@
     },
 
     {
-       39,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
+       39,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
 
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  -81,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  -81,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
 
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
 
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159
+      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+      164,  164,  164,  164,  164,  164
     },
 
     {
@@ -3005,166 +3005,8 @@
     },
 
     {
-       39,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  -83,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160
-    },
-
-    {
-       39,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  -84,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161
-
-    },
-
-    {
-       39,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  -85,  162,  162,  162,  162,  162,  162,
-
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162
-    },
-
-    {
-       39,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  -86,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163
-    },
-
-    {
-       39,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  -87,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-      164,  164,  164,  164,  164,  164
-    },
-
-    {
        39,  165,  165,  165,  165,  165,  165,  165,  165,  165,
-      -88,  165,  165,  -88,  165,  165,  165,  165,  165,  165,
+      165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
 
       165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
       165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
@@ -3173,9 +3015,9 @@
       165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
       165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
       165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+      165,  165,  165,  -83,  165,  165,  165,  165,  165,  165,
       165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
       165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
-      165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
 
       165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
       165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
@@ -3195,34 +3037,34 @@
     },
 
     {
-       39,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      166,  -89,  -89,  166,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+       39,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
 
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  -84,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
 
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,  -89,  -89,  -89,  -89,  -89
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166
 
     },
 
@@ -3236,7 +3078,7 @@
       167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
       167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
       167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
-      167,  167,  167,  -90,  167,  167,  167,  167,  167,  167,
+      167,  167,  167,  -85,  167,  167,  167,  167,  167,  167,
 
       167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
       167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
@@ -3268,7 +3110,7 @@
       168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
       168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
       168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
-      168,  168,  168,  -91,  168,  168,  168,  168,  168,  168,
+      168,  168,  168,  -86,  168,  168,  168,  168,  168,  168,
       168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
       168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
       168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
@@ -3300,7 +3142,7 @@
       169,  169,  169,  169,  169,  169,  169,  169,  169,  169,
 
       169,  169,  169,  169,  169,  169,  169,  169,  169,  169,
-      169,  169,  169,  -92,  169,  169,  169,  169,  169,  169,
+      169,  169,  169,  -87,  169,  169,  169,  169,  169,  169,
       169,  169,  169,  169,  169,  169,  169,  169,  169,  169,
       169,  169,  169,  169,  169,  169,  169,  169,  169,  169,
       169,  169,  169,  169,  169,  169,  169,  169,  169,  169,
@@ -3322,7 +3164,7 @@
 
     {
        39,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+      -88,  170,  170,  -88,  170,  170,  170,  170,  170,  170,
 
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
@@ -3331,9 +3173,9 @@
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170,  -93,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
 
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
@@ -3353,6 +3195,164 @@
     },
 
     {
+       39,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      171,  -89,  -89,  171,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,  -89,  -89,  -89,  -89,  -89
+
+    },
+
+    {
+       39,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  -90,  172,  172,  172,  172,  172,  172,
+
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172
+    },
+
+    {
+       39,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  -91,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173
+    },
+
+    {
+       39,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  -92,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174
+    },
+
+    {
+       39,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  -93,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175
+    },
+
+    {
        39,  -94,  -94,  -94,  -94,  -94,  -94,  -94,  -94,  -94,
       -94,  -94,  -94,  -94,  -94,  -94,  -94,  -94,  -94,  -94,
       -94,  -94,  -94,  -94,  -94,  -94,  -94,  -94,  -94,  -94,
@@ -3389,8 +3389,8 @@
       -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,
       -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,
       -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,
-      -95,  -95,  -95,  -95,  -95,  -95,  171,  -95,  172,  172,
-      172,  172,  172,  172,  172,  172,  172,  172,  -95,  -95,
+      -95,  -95,  -95,  -95,  -95,  -95,  176,  -95,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  -95,  -95,
       -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,
       -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,
       -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,
@@ -3421,8 +3421,8 @@
       -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,
       -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,
 
-      -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,  173,  173,
-      173,  173,  173,  173,  173,  173,  173,  173,  -96,  -96,
+      -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  -96,  -96,
       -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,
       -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,
       -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,
@@ -3452,13 +3452,13 @@
       -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,
       -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,
       -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,
-      -97,  -97,  -97,  -97,  -97,  -97,  174,  -97,  172,  172,
-      172,  172,  172,  172,  172,  172,  172,  172,  -97,  -97,
+      -97,  -97,  -97,  -97,  -97,  -97,  179,  -97,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  -97,  -97,
       -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,
       -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,
 
       -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,
-      -97,  -97,  -97,  175,  -97,  -97,  -97,  -97,  -97,  -97,
+      -97,  -97,  -97,  180,  -97,  -97,  -97,  -97,  -97,  -97,
       -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,
       -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,
       -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,
@@ -3484,8 +3484,8 @@
 
       -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,
       -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,
-      -98,  -98,  -98,  -98,  -98,  -98,  176,  -98,  177,  177,
-      177,  177,  177,  177,  177,  177,  177,  177,  -98,  -98,
+      -98,  -98,  -98,  -98,  -98,  -98,  181,  -98,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  -98,  -98,
       -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,
       -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,
       -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,
@@ -3515,8 +3515,8 @@
       -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,
       -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,
       -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,
-      -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  -99,  -99,
+      -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183,  -99,  -99,
 
       -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,
       -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,
@@ -3547,12 +3547,12 @@
      -100, -100, -100, -100, -100, -100, -100, -100, -100, -100,
      -100, -100, -100, -100, -100, -100, -100, -100, -100, -100,
      -100, -100, -100, -100, -100, -100, -100, -100, -100, -100,
-     -100, -100, -100, -100, -100, -100,  179, -100,  177,  177,
-      177,  177,  177,  177,  177,  177,  177,  177, -100, -100,
+     -100, -100, -100, -100, -100, -100,  184, -100,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182, -100, -100,
      -100, -100, -100, -100, -100, -100, -100, -100, -100, -100,
      -100, -100, -100, -100, -100, -100, -100, -100, -100, -100,
      -100, -100, -100, -100, -100, -100, -100, -100, -100, -100,
-     -100, -100, -100,  180, -100, -100, -100, -100, -100, -100,
+     -100, -100, -100,  185, -100, -100, -100, -100, -100, -100,
 
      -100, -100, -100, -100, -100, -100, -100, -100, -100, -100,
      -100, -100, -100, -100, -100, -100, -100, -100, -100, -100,
@@ -3574,193 +3574,193 @@
     },
 
     {
-       39,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
+       39,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
 
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181, -101,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181, -101,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186, -101,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186, -101,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
 
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
 
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186
     },
 
     {
-       39,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+       39,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
 
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182, -102,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187, -102,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
 
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187
     },
 
     {
-       39,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+       39,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
 
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183, -103,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188, -103,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
 
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
 
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188
     },
 
     {
-       39,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184, -104,
+       39,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189, -104,
 
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184, -104,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189, -104,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
 
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189
 
     },
 
     {
-       39,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185, -105,  185,  185,  185,  185,  185,  185,
+       39,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190, -105,  190,  190,  190,  190,  190,  190,
 
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
 
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190
     },
 
     {
-       39,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+       39,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
 
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186, -106,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191, -106,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
 
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
 
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191
     },
 
     {
@@ -3863,12 +3863,12 @@
      -110, -110, -110, -110, -110, -110, -110, -110, -110, -110,
      -110, -110, -110, -110, -110, -110, -110, -110, -110, -110,
      -110, -110, -110,  116, -110, -110, -110, -110, -110, -110,
-     -110, -110, -110, -110, -110, -110, -110,  187,  118, -110,
+     -110, -110, -110, -110, -110, -110, -110,  192,  118, -110,
      -110, -110, -110, -110, -110, -110, -110, -110, -110, -110,
      -110, -110, -110, -110, -110, -110, -110, -110, -110, -110,
      -110, -110, -110, -110, -110, -110, -110, -110, -110, -110,
      -110, -110, -110, -110, -110, -110, -110, -110, -110, -110,
-     -110,  188, -110, -110, -110, -110, -110, -110, -110, -110,
+     -110,  193, -110, -110, -110, -110, -110, -110, -110, -110,
 
      -110, -110, -110, -110, -110, -110, -110, -110, -110, -110,
      -110, -110, -110, -110, -110, -110, -110, -110, -110, -110,
@@ -3958,7 +3958,7 @@
 
      -113, -113, -113, -113, -113, -113, -113, -113, -113, -113,
      -113, -113, -113, -113, -113, -113, -113, -113, -113, -113,
-     -113, -113, -113, -113, -113, -113, -113, -113,  189,  189,
+     -113, -113, -113, -113, -113, -113, -113, -113,  194,  194,
      -113, -113, -113, -113, -113, -113, -113, -113, -113, -113,
      -113, -113, -113, -113, -113, -113, -113, -113, -113, -113,
      -113, -113, -113, -113, -113, -113, -113, -113, -113, -113,
@@ -4090,7 +4090,7 @@
      -117, -117, -117, -117, -117, -117, -117, -117, -117, -117,
 
      -117, -117, -117, -117, -117, -117, -117, -117, -117, -117,
-     -117,  190, -117, -117, -117, -117, -117, -117, -117, -117,
+     -117,  195, -117, -117, -117, -117, -117, -117, -117, -117,
      -117, -117, -117, -117, -117, -117, -117, -117, -117, -117,
      -117, -117, -117, -117, -117, -117, -117, -117, -117, -117,
      -117, -117, -117, -117, -117, -117, -117, -117, -117, -117,
@@ -4218,7 +4218,7 @@
      -121, -121, -121, -121, -121, -121, -121, -121, -121, -121,
      -121, -121, -121, -121, -121, -121, -121, -121, -121, -121,
      -121, -121, -121, -121, -121, -121, -121, -121, -121, -121,
-      191, -121, -121, -121, -121, -121, -121, -121, -121, -121,
+      196, -121, -121, -121, -121, -121, -121, -121, -121, -121,
      -121, -121, -121, -121, -121, -121, -121, -121, -121, -121,
      -121, -121, -121, -121, -121, -121, -121, -121, -121, -121,
 
@@ -4249,7 +4249,7 @@
 
      -122, -122, -122, -122, -122, -122, -122, -122, -122, -122,
      -122, -122, -122, -122, -122, -122, -122, -122, -122, -122,
-     -122, -122, -122, -122, -122, -122, -122, -122,  192, -122,
+     -122, -122, -122, -122, -122, -122, -122, -122,  197, -122,
      -122, -122, -122, -122, -122, -122, -122, -122, -122, -122,
      -122, -122, -122, -122, -122, -122, -122, -122, -122, -122,
      -122, -122, -122, -122, -122, -122, -122, -122, -122, -122,
@@ -4274,7 +4274,7 @@
 
      -123, -123, -123, -123, -123, -123, -123, -123, -123, -123,
      -123, -123, -123, -123, -123, -123, -123, -123, -123, -123,
-     -123, -123, -123, -123, -123, -123, -123, -123,  193,  193,
+     -123, -123, -123, -123, -123, -123, -123, -123,  198,  198,
      -123, -123, -123, -123, -123, -123, -123, -123, -123, -123,
      -123, -123, -123, -123, -123, -123, -123, -123, -123, -123,
      -123, -123, -123, -123, -123, -123, -123, -123, -123, -123,
@@ -4369,12 +4369,12 @@
      -126, -126, -126, -126, -126, -126, -126, -126, -126, -126,
      -126, -126, -126, -126, -126, -126, -126, -126, -126, -126,
 
-     -126, -126, -126, -126, -126, -126, -126, -126, -126,  194,
-      194,  194,  194,  194, -126, -126, -126, -126, -126, -126,
+     -126, -126, -126, -126, -126, -126, -126, -126, -126,  199,
+      199,  199,  199,  199, -126, -126, -126, -126, -126, -126,
      -126, -126, -126, -126, -126, -126, -126, -126, -126, -126,
      -126, -126, -126, -126, -126, -126, -126, -126, -126, -126,
      -126, -126, -126, -126, -126, -126, -126, -126, -126, -126,
-     -126, -126, -126, -126, -126, -126, -126, -126,  195, -126,
+     -126, -126, -126, -126, -126, -126, -126, -126,  200, -126,
      -126, -126, -126, -126, -126, -126, -126, -126, -126, -126,
      -126, -126, -126, -126, -126, -126, -126, -126, -126, -126,
      -126, -126, -126, -126, -126, -126, -126, -126, -126, -126,
@@ -4436,7 +4436,7 @@
      -128, -128, -128, -128, -128, -128, -128, -128, -128, -128,
      -128, -128, -128, -128, -128, -128, -128, -128, -128, -128,
      -128, -128, -128, -128, -128, -128, -128, -128, -128, -128,
-     -128, -128, -128, -128, -128, -128,  196, -128, -128, -128,
+     -128, -128, -128, -128, -128, -128,  201, -128, -128, -128,
      -128, -128, -128, -128, -128, -128, -128, -128, -128, -128,
      -128, -128, -128, -128, -128, -128, -128, -128, -128, -128,
      -128, -128, -128, -128, -128, -128, -128, -128, -128, -128,
@@ -4471,7 +4471,7 @@
      -129, -129, -129, -129, -129, -129, -129, -129, -129, -129,
      -129, -129, -129, -129, -129, -129, -129, -129, -129, -129,
      -129, -129, -129, -129, -129, -129, -129, -129, -129, -129,
-     -129, -129, -129, -129, -129,  197, -129, -129, -129, -129,
+     -129, -129, -129, -129, -129,  202, -129, -129, -129, -129,
      -129, -129, -129, -129, -129, -129, -129, -129, -129, -129,
      -129, -129, -129, -129, -129, -129, -129, -129, -129, -129,
      -129, -129, -129, -129, -129, -129, -129, -129, -129, -129,
@@ -4503,7 +4503,7 @@
      -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
 
      -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
-     -130, -130, -130, -130, -130, -130, -130, -130,  198, -130,
+     -130, -130, -130, -130, -130, -130, -130, -130,  203, -130,
      -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
      -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
      -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
@@ -4660,7 +4660,6 @@
      -135, -135, -135, -135, -135, -135, -135, -135, -135, -135,
      -135, -135, -135, -135, -135, -135, -135, -135, -135, -135,
 
-     -135, -135, -135, -135, -135, -135, -135, -135,  199, -135,
      -135, -135, -135, -135, -135, -135, -135, -135, -135, -135,
      -135, -135, -135, -135, -135, -135, -135, -135, -135, -135,
      -135, -135, -135, -135, -135, -135, -135, -135, -135, -135,
@@ -4670,6 +4669,7 @@
      -135, -135, -135, -135, -135, -135, -135, -135, -135, -135,
      -135, -135, -135, -135, -135, -135, -135, -135, -135, -135,
      -135, -135, -135, -135, -135, -135, -135, -135, -135, -135,
+     -135, -135, -135, -135, -135, -135, -135, -135, -135, -135,
 
      -135, -135, -135, -135, -135, -135, -135, -135, -135, -135,
      -135, -135, -135, -135, -135, -135, -135, -135, -135, -135,
@@ -4691,8 +4691,8 @@
      -136, -136, -136, -136, -136, -136, -136, -136, -136, -136,
      -136, -136, -136, -136, -136, -136, -136, -136, -136, -136,
      -136, -136, -136, -136, -136, -136, -136, -136, -136, -136,
+     -136, -136, -136, -136, -136, -136, -136, -136,  204, -136,
      -136, -136, -136, -136, -136, -136, -136, -136, -136, -136,
-      200, -136, -136, -136, -136,  201, -136, -136, -136, -136,
      -136, -136, -136, -136, -136, -136, -136, -136, -136, -136,
      -136, -136, -136, -136, -136, -136, -136, -136, -136, -136,
 
@@ -4723,14 +4723,14 @@
 
      -137, -137, -137, -137, -137, -137, -137, -137, -137, -137,
      -137, -137, -137, -137, -137, -137, -137, -137, -137, -137,
-     -137, -137, -137, -137, -137, -137, -137, -137, -137,  202,
-     -137, -137, -137, -137, -137, -137, -137, -137,  203, -137,
      -137, -137, -137, -137, -137, -137, -137, -137, -137, -137,
+      205, -137, -137, -137, -137,  206, -137, -137, -137, -137,
      -137, -137, -137, -137, -137, -137, -137, -137, -137, -137,
      -137, -137, -137, -137, -137, -137, -137, -137, -137, -137,
      -137, -137, -137, -137, -137, -137, -137, -137, -137, -137,
      -137, -137, -137, -137, -137, -137, -137, -137, -137, -137,
      -137, -137, -137, -137, -137, -137, -137, -137, -137, -137,
+     -137, -137, -137, -137, -137, -137, -137, -137, -137, -137,
 
      -137, -137, -137, -137, -137, -137, -137, -137, -137, -137,
      -137, -137, -137, -137, -137, -137, -137, -137, -137, -137,
@@ -4754,8 +4754,8 @@
      -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
      -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
      -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
-     -138, -138, -138, -138, -138, -138, -138, -138, -138,  204,
-     -138, -138, -138, -138, -138, -138, -138, -138,  205, -138,
+     -138, -138, -138, -138, -138, -138, -138, -138, -138,  207,
+     -138, -138, -138, -138, -138, -138, -138, -138,  208, -138,
 
      -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
      -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
@@ -4786,12 +4786,12 @@
      -139, -139, -139, -139, -139, -139, -139, -139, -139, -139,
      -139, -139, -139, -139, -139, -139, -139, -139, -139, -139,
      -139, -139, -139, -139, -139, -139, -139, -139, -139, -139,
-     -139, -139, -139, -139, -139, -139, -139, -139,  206, -139,
+     -139, -139, -139, -139, -139, -139, -139, -139, -139,  209,
+     -139, -139, -139, -139, -139, -139, -139, -139,  210, -139,
      -139, -139, -139, -139, -139, -139, -139, -139, -139, -139,
      -139, -139, -139, -139, -139, -139, -139, -139, -139, -139,
      -139, -139, -139, -139, -139, -139, -139, -139, -139, -139,
      -139, -139, -139, -139, -139, -139, -139, -139, -139, -139,
-     -139, -139, -139, -139, -139, -139, -139, -139, -139, -139,
 
      -139, -139, -139, -139, -139, -139, -139, -139, -139, -139,
      -139, -139, -139, -139, -139, -139, -139, -139, -139, -139,
@@ -4818,7 +4818,7 @@
      -140, -140, -140, -140, -140, -140, -140, -140, -140, -140,
      -140, -140, -140, -140, -140, -140, -140, -140, -140, -140,
 
-     -140, -140, -140, -140, -140, -140, -140, -140,  207, -140,
+     -140, -140, -140, -140, -140, -140, -140, -140,  211, -140,
      -140, -140, -140, -140, -140, -140, -140, -140, -140, -140,
      -140, -140, -140, -140, -140, -140, -140, -140, -140, -140,
      -140, -140, -140, -140, -140, -140, -140, -140, -140, -140,
@@ -4849,10 +4849,10 @@
      -141, -141, -141, -141, -141, -141, -141, -141, -141, -141,
      -141, -141, -141, -141, -141, -141, -141, -141, -141, -141,
      -141, -141, -141, -141, -141, -141, -141, -141, -141, -141,
-     -141, -141, -141, -141, -141, -141, -141, -141, -141,  208,
-     -141, -141, -141, -141, -141, -141, -141, -141,  209, -141,
+     -141, -141, -141, -141, -141, -141, -141, -141,  212, -141,
      -141, -141, -141, -141, -141, -141, -141, -141, -141, -141,
      -141, -141, -141, -141, -141, -141, -141, -141, -141, -141,
+     -141, -141, -141, -141, -141, -141, -141, -141, -141, -141,
 
      -141, -141, -141, -141, -141, -141, -141, -141, -141, -141,
      -141, -141, -141, -141, -141, -141, -141, -141, -141, -141,
@@ -4880,15 +4880,15 @@
      -142, -142, -142, -142, -142, -142, -142, -142, -142, -142,
 
      -142, -142, -142, -142, -142, -142, -142, -142, -142, -142,
-     -142, -142, -142, -142, -142, -142, -142, -142,  210,  211,
-     -142, -142, -142, -142,  212, -142, -142, -142,  213, -142,
-     -142, -142, -142, -142, -142,  214, -142, -142, -142, -142,
      -142, -142, -142, -142, -142, -142, -142, -142, -142, -142,
+     -142, -142, -142, -142, -142, -142, -142, -142, -142,  213,
+     -142,  214, -142, -142, -142, -142, -142, -142,  215, -142,
      -142, -142, -142, -142, -142, -142, -142, -142, -142, -142,
      -142, -142, -142, -142, -142, -142, -142, -142, -142, -142,
      -142, -142, -142, -142, -142, -142, -142, -142, -142, -142,
      -142, -142, -142, -142, -142, -142, -142, -142, -142, -142,
      -142, -142, -142, -142, -142, -142, -142, -142, -142, -142,
+     -142, -142, -142, -142, -142, -142, -142, -142, -142, -142,
 
      -142, -142, -142, -142, -142, -142, -142, -142, -142, -142,
      -142, -142, -142, -142, -142, -142, -142, -142, -142, -142,
@@ -4911,9 +4911,9 @@
      -143, -143, -143, -143, -143, -143, -143, -143, -143, -143,
      -143, -143, -143, -143, -143, -143, -143, -143, -143, -143,
      -143, -143, -143, -143, -143, -143, -143, -143, -143, -143,
-     -143, -143, -143, -143, -143, -143, -143, -143,  215, -143,
-     -143, -143, -143, -143,  212, -143, -143, -143,  216, -143,
-     -143, -143, -143, -143, -143,  214, -143, -143, -143, -143,
+     -143, -143, -143, -143, -143, -143, -143, -143,  216,  217,
+     -143, -143, -143, -143,  218, -143, -143, -143,  219, -143,
+     -143, -143, -143, -143, -143,  220, -143, -143, -143, -143,
 
      -143, -143, -143, -143, -143, -143, -143, -143, -143, -143,
      -143, -143, -143, -143, -143, -143, -143, -143, -143, -143,
@@ -4937,19 +4937,19 @@
      -144, -144, -144, -144, -144, -144, -144, -144, -144, -144,
      -144, -144, -144, -144, -144, -144, -144, -144, -144, -144,
      -144, -144, -144, -144, -144, -144, -144, -144, -144, -144,
-     -144, -144, -144, -144, -144, -144, -144, -144,  144,  144,
-      144,  144,  144,  144, -144, -144, -144, -144, -144, -144,
-
      -144, -144, -144, -144, -144, -144, -144, -144, -144, -144,
      -144, -144, -144, -144, -144, -144, -144, -144, -144, -144,
+
      -144, -144, -144, -144, -144, -144, -144, -144, -144, -144,
      -144, -144, -144, -144, -144, -144, -144, -144, -144, -144,
      -144, -144, -144, -144, -144, -144, -144, -144, -144, -144,
+     -144, -144, -144, -144, -144, -144, -144, -144,  221, -144,
+     -144, -144, -144, -144,  218, -144, -144, -144,  222, -144,
+     -144, -144, -144, -144, -144,  220, -144, -144, -144, -144,
      -144, -144, -144, -144, -144, -144, -144, -144, -144, -144,
      -144, -144, -144, -144, -144, -144, -144, -144, -144, -144,
      -144, -144, -144, -144, -144, -144, -144, -144, -144, -144,
      -144, -144, -144, -144, -144, -144, -144, -144, -144, -144,
-     -144, -144, -144, -144, -144, -144, -144, -144, -144, -144,
 
      -144, -144, -144, -144, -144, -144, -144, -144, -144, -144,
      -144, -144, -144, -144, -144, -144, -144, -144, -144, -144,
@@ -5001,6 +5001,8 @@
      -146, -146, -146, -146, -146, -146, -146, -146, -146, -146,
      -146, -146, -146, -146, -146, -146, -146, -146, -146, -146,
 
+     -146, -146, -146, -146, -146, -146, -146, -146,  146,  146,
+      146,  146,  146,  146, -146, -146, -146, -146, -146, -146,
      -146, -146, -146, -146, -146, -146, -146, -146, -146, -146,
      -146, -146, -146, -146, -146, -146, -146, -146, -146, -146,
      -146, -146, -146, -146, -146, -146, -146, -146, -146, -146,
@@ -5009,8 +5011,6 @@
      -146, -146, -146, -146, -146, -146, -146, -146, -146, -146,
      -146, -146, -146, -146, -146, -146, -146, -146, -146, -146,
      -146, -146, -146, -146, -146, -146, -146, -146, -146, -146,
-     -146, -146, -146, -146, -146, -146, -146, -146, -146, -146,
-     -146, -146, -146, -146, -146, -146, -146, -146, -146, -146,
 
      -146, -146, -146, -146, -146, -146, -146, -146, -146, -146,
      -146, -146, -146, -146, -146, -146, -146, -146, -146, -146,
@@ -5032,10 +5032,10 @@
      -147, -147, -147, -147, -147, -147, -147, -147, -147, -147,
      -147, -147, -147, -147, -147, -147, -147, -147, -147, -147,
      -147, -147, -147, -147, -147, -147, -147, -147, -147, -147,
-     -147, -147, -147, -147, -147, -147, -147, -147, -147,  217,
-      217,  217,  217,  217, -147, -147, -147, -147, -147, -147,
      -147, -147, -147, -147, -147, -147, -147, -147, -147, -147,
      -147, -147, -147, -147, -147, -147, -147, -147, -147, -147,
+     -147, -147, -147, -147, -147, -147, -147, -147, -147, -147,
+     -147, -147, -147, -147, -147, -147, -147, -147, -147, -147,
 
      -147, -147, -147, -147, -147, -147, -147, -147, -147, -147,
      -147, -147, -147, -147, -147, -147, -147, -147, -147, -147,
@@ -5095,8 +5095,8 @@
      -149, -149, -149, -149, -149, -149, -149, -149, -149, -149,
      -149, -149, -149, -149, -149, -149, -149, -149, -149, -149,
      -149, -149, -149, -149, -149, -149, -149, -149, -149, -149,
-     -149, -149, -149, -149, -149, -149, -149, -149, -149, -149,
-     -149, -149, -149, -149, -149, -149, -149, -149, -149, -149,
+     -149, -149, -149, -149, -149, -149, -149, -149, -149,  223,
+      223,  223,  223,  223, -149, -149, -149, -149, -149, -149,
 
      -149, -149, -149, -149, -149, -149, -149, -149, -149, -149,
      -149, -149, -149, -149, -149, -149, -149, -149, -149, -149,
@@ -5407,161 +5407,161 @@
     },
 
     {
-       39,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
+       39, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
 
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159, -159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
 
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-      159,  159,  159,  159,  159,  159
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159, -159, -159, -159
 
     },
 
     {
-       39,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160, -160,  160,  160,  160,  160,  160,  160,
+       39, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
 
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
 
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  160,  160,  160,  160,  160
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160, -160, -160, -160
     },
 
     {
-       39,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
+       39, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
 
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161, -161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
 
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
 
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161
+     -161, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161, -161, -161, -161
     },
 
     {
-       39,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
+       39, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
 
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162, -162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
 
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162, -162, -162, -162
     },
 
     {
-       39,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+       39, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
 
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163, -163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
 
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
 
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163,  163,  163,  163
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163, -163, -163, -163
     },
 
     {
@@ -5598,7 +5598,6 @@
 
     {
        39,  165,  165,  165,  165,  165,  165,  165,  165,  165,
-     -165,  165,  165, -165,  165,  165,  165,  165,  165,  165,
       165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
       165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
       165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
@@ -5607,6 +5606,7 @@
       165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
       165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
       165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+      165,  165,  165, -165,  165,  165,  165,  165,  165,  165,
 
       165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
       165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
@@ -5628,35 +5628,35 @@
     },
 
     {
-       39, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-      166, -166, -166,  166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
+       39,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
 
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166, -166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
 
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
 
-     -166, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166, -166, -166, -166
+      166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  166
     },
 
     {
@@ -5756,6 +5756,7 @@
 
     {
        39,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+     -170,  170,  170, -170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
@@ -5764,7 +5765,6 @@
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      170,  170,  170, -170,  170,  170,  170,  170,  170,  170,
 
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
@@ -5787,12 +5787,10 @@
 
     {
        39, -171, -171, -171, -171, -171, -171, -171, -171, -171,
+      171, -171, -171,  171, -171, -171, -171, -171, -171, -171,
      -171, -171, -171, -171, -171, -171, -171, -171, -171, -171,
      -171, -171, -171, -171, -171, -171, -171, -171, -171, -171,
-     -171, -171, -171, -171, -171, -171, -171, -171, -171, -171,
 
-     -171, -171, -171, -171, -171, -171, -171, -171,  173,  173,
-      173,  173,  173,  173,  173,  173,  173,  173, -171, -171,
      -171, -171, -171, -171, -171, -171, -171, -171, -171, -171,
      -171, -171, -171, -171, -171, -171, -171, -171, -171, -171,
      -171, -171, -171, -171, -171, -171, -171, -171, -171, -171,
@@ -5801,6 +5799,8 @@
      -171, -171, -171, -171, -171, -171, -171, -171, -171, -171,
      -171, -171, -171, -171, -171, -171, -171, -171, -171, -171,
      -171, -171, -171, -171, -171, -171, -171, -171, -171, -171,
+     -171, -171, -171, -171, -171, -171, -171, -171, -171, -171,
+     -171, -171, -171, -171, -171, -171, -171, -171, -171, -171,
 
      -171, -171, -171, -171, -171, -171, -171, -171, -171, -171,
      -171, -171, -171, -171, -171, -171, -171, -171, -171, -171,
@@ -5818,129 +5818,129 @@
     },
 
     {
-       39, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172,  174, -172,  172,  172,
-      172,  172,  172,  172,  172,  172,  172,  172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
+       39,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
 
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172,  175, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172, -172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
 
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172, -172, -172, -172
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
+      172,  172,  172,  172,  172,  172
     },
 
     {
-       39, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
+       39,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
 
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173,  173,  173,
-      173,  173,  173,  173,  173,  173,  173,  173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173,  175, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173, -173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
 
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
 
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173, -173, -173, -173
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,  173
     },
 
     {
-       39, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218, -174, -174,
+       39,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
 
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174,  175, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174, -174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
 
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174, -174, -174, -174
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174
 
     },
 
     {
-       39, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
+       39,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175, -175,  175,  175,  175,  175,  175,  175,
 
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
 
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175, -175, -175, -175
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175
     },
 
     {
@@ -6043,8 +6043,8 @@
      -179, -179, -179, -179, -179, -179, -179, -179, -179, -179,
      -179, -179, -179, -179, -179, -179, -179, -179, -179, -179,
      -179, -179, -179, -179, -179, -179, -179, -179, -179, -179,
-     -179, -179, -179, -179, -179, -179, -179, -179,  219,  219,
-      219,  219,  219,  219,  219,  219,  219,  219, -179, -179,
+     -179, -179, -179, -179, -179, -179, -179, -179,  224,  224,
+      224,  224,  224,  224,  224,  224,  224,  224, -179, -179,
 
      -179, -179, -179, -179, -179, -179, -179, -179, -179, -179,
      -179, -179, -179, -179, -179, -179, -179, -179, -179, -179,
@@ -6102,161 +6102,161 @@
     },
 
     {
-       39,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
+       39, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
 
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181, -181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181, -181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
+     -181, -181, -181, -181, -181, -181, -181, -181,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
 
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
 
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181
+     -181, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181, -181, -181, -181
     },
 
     {
-       39,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+       39, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182,  184, -182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
 
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182, -182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182,  185, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
 
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182, -182, -182, -182
     },
 
     {
-       39,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+       39, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
 
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183, -183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183,  183,  183,
+      183,  183,  183,  183,  183,  183,  183,  183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183,  185, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
 
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
 
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183, -183, -183, -183
     },
 
     {
-       39,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184, -184,
+       39, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184,  225,  225,
+      225,  225,  225,  225,  225,  225,  225,  225, -184, -184,
 
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184, -184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184,  185, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
 
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184, -184, -184, -184
 
     },
 
     {
-       39,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185, -185,  185,  185,  185,  185,  185,  185,
+       39, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
 
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
 
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185, -185, -185, -185
     },
 
     {
@@ -6266,15 +6266,15 @@
       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
 
       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186, -186,
       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186, -186,  186,  186,  186,  186,  186,  186,
       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  186,  186, -186,  186,  186,  186,  186,  186,  186,
       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
 
       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
@@ -6292,161 +6292,161 @@
     },
 
     {
-       39, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
+       39,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
 
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187,  220, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187, -187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
 
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187, -187, -187, -187
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187
     },
 
     {
-       39, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
+       39,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
 
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188, -188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
 
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
 
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188, -188, -188, -188
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      188,  188,  188,  188,  188,  188
     },
 
     {
-       39, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
+       39,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189, -189,
 
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189, -189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
 
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189, -189, -189, -189
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189
 
     },
 
     {
-       39, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
+       39,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190, -190,  190,  190,  190,  190,  190,  190,
 
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
 
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190, -190, -190, -190
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  190,  190
     },
 
     {
-       39, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
+       39,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
 
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191,  221, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191, -191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
 
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
 
-     -191, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191, -191, -191, -191
+      191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191
     },
 
     {
@@ -6460,7 +6460,7 @@
      -192, -192, -192, -192, -192, -192, -192, -192, -192, -192,
 
      -192, -192, -192, -192, -192, -192, -192, -192, -192, -192,
-     -192, -192, -192, -192, -192, -192, -192, -192,  222, -192,
+     -192,  226, -192, -192, -192, -192, -192, -192, -192, -192,
      -192, -192, -192, -192, -192, -192, -192, -192, -192, -192,
      -192, -192, -192, -192, -192, -192, -192, -192, -192, -192,
      -192, -192, -192, -192, -192, -192, -192, -192, -192, -192,
@@ -6549,12 +6549,12 @@
      -195, -195, -195, -195, -195, -195, -195, -195, -195, -195,
      -195, -195, -195, -195, -195, -195, -195, -195, -195, -195,
      -195, -195, -195, -195, -195, -195, -195, -195, -195, -195,
-     -195, -195, -195, -195, -195, -195, -195, -195, -195,  223,
-      223,  223,  223,  223, -195, -195, -195, -195, -195, -195,
      -195, -195, -195, -195, -195, -195, -195, -195, -195, -195,
      -195, -195, -195, -195, -195, -195, -195, -195, -195, -195,
      -195, -195, -195, -195, -195, -195, -195, -195, -195, -195,
      -195, -195, -195, -195, -195, -195, -195, -195, -195, -195,
+     -195, -195, -195, -195, -195, -195, -195, -195, -195, -195,
+     -195, -195, -195, -195, -195, -195, -195, -195, -195, -195,
 
      -195, -195, -195, -195, -195, -195, -195, -195, -195, -195,
      -195, -195, -195, -195, -195, -195, -195, -195, -195, -195,
@@ -6585,9 +6585,9 @@
      -196, -196, -196, -196, -196, -196, -196, -196, -196, -196,
      -196, -196, -196, -196, -196, -196, -196, -196, -196, -196,
      -196, -196, -196, -196, -196, -196, -196, -196, -196, -196,
-     -196, -196, -196, -196, -196, -196,  224, -196, -196, -196,
      -196, -196, -196, -196, -196, -196, -196, -196, -196, -196,
      -196, -196, -196, -196, -196, -196, -196, -196, -196, -196,
+     -196, -196, -196, -196, -196, -196, -196, -196,  227, -196,
      -196, -196, -196, -196, -196, -196, -196, -196, -196, -196,
      -196, -196, -196, -196, -196, -196, -196, -196, -196, -196,
      -196, -196, -196, -196, -196, -196, -196, -196, -196, -196,
@@ -6614,13 +6614,13 @@
      -197, -197, -197, -197, -197, -197, -197, -197, -197, -197,
      -197, -197, -197, -197, -197, -197, -197, -197, -197, -197,
      -197, -197, -197, -197, -197, -197, -197, -197, -197, -197,
-      225, -197,  225, -197, -197, -197, -197, -197, -197, -197,
      -197, -197, -197, -197, -197, -197, -197, -197, -197, -197,
+     -197, -197, -197, -197, -197, -197, -197, -197, -197, -197,
 
      -197, -197, -197, -197, -197, -197, -197, -197, -197, -197,
+     -197, -197, -197, -197, -197, -197, -197, -197,  228, -197,
      -197, -197, -197, -197, -197, -197, -197, -197, -197, -197,
      -197, -197, -197, -197, -197, -197, -197, -197, -197, -197,
-     -197, -197, -197, -197, -197,  226, -197, -197, -197, -197,
      -197, -197, -197, -197, -197, -197, -197, -197, -197, -197,
      -197, -197, -197, -197, -197, -197, -197, -197, -197, -197,
      -197, -197, -197, -197, -197, -197, -197, -197, -197, -197,
@@ -6651,7 +6651,7 @@
      -198, -198, -198, -198, -198, -198, -198, -198, -198, -198,
      -198, -198, -198, -198, -198, -198, -198, -198, -198, -198,
      -198, -198, -198, -198, -198, -198, -198, -198, -198, -198,
-     -198, -198, -198, -198, -198, -198, -198, -198,  227, -198,
+     -198, -198, -198, -198, -198, -198, -198, -198, -198, -198,
 
      -198, -198, -198, -198, -198, -198, -198, -198, -198, -198,
      -198, -198, -198, -198, -198, -198, -198, -198, -198, -198,
@@ -6683,11 +6683,11 @@
      -199, -199, -199, -199, -199, -199, -199, -199, -199, -199,
      -199, -199, -199, -199, -199, -199, -199, -199, -199, -199,
      -199, -199, -199, -199, -199, -199, -199, -199, -199, -199,
-     -199, -199, -199, -199, -199, -199,  228, -199, -199, -199,
      -199, -199, -199, -199, -199, -199, -199, -199, -199, -199,
      -199, -199, -199, -199, -199, -199, -199, -199, -199, -199,
      -199, -199, -199, -199, -199, -199, -199, -199, -199, -199,
      -199, -199, -199, -199, -199, -199, -199, -199, -199, -199,
+     -199, -199, -199, -199, -199, -199, -199, -199, -199, -199,
 
      -199, -199, -199, -199, -199, -199, -199, -199, -199, -199,
      -199, -199, -199, -199, -199, -199, -199, -199, -199, -199,
@@ -6707,12 +6707,12 @@
      -200, -200, -200, -200, -200, -200, -200, -200, -200, -200,
      -200, -200, -200, -200, -200, -200, -200, -200, -200, -200,
      -200, -200, -200, -200, -200, -200, -200, -200, -200, -200,
+     -200, -200, -200, -200, -200, -200, -200, -200, -200,  229,
+      229,  229,  229,  229, -200, -200, -200, -200, -200, -200,
      -200, -200, -200, -200, -200, -200, -200, -200, -200, -200,
-     -200, -200, -200, -200, -200, -200, -200, -200,  229, -200,
      -200, -200, -200, -200, -200, -200, -200, -200, -200, -200,
      -200, -200, -200, -200, -200, -200, -200, -200, -200, -200,
      -200, -200, -200, -200, -200, -200, -200, -200, -200, -200,
-     -200, -200, -200, -200, -200, -200, -200, -200, -200, -200,
 
      -200, -200, -200, -200, -200, -200, -200, -200, -200, -200,
      -200, -200, -200, -200, -200, -200, -200, -200, -200, -200,
@@ -6740,10 +6740,10 @@
      -201, -201, -201, -201, -201, -201, -201, -201, -201, -201,
 
      -201, -201, -201, -201, -201, -201, -201, -201, -201, -201,
-     -201, -201, -201, -201, -201, -201, -201, -201,  230, -201,
      -201, -201, -201, -201, -201, -201, -201, -201, -201, -201,
      -201, -201, -201, -201, -201, -201, -201, -201, -201, -201,
      -201, -201, -201, -201, -201, -201, -201, -201, -201, -201,
+     -201, -201, -201, -201, -201, -201,  230, -201, -201, -201,
      -201, -201, -201, -201, -201, -201, -201, -201, -201, -201,
      -201, -201, -201, -201, -201, -201, -201, -201, -201, -201,
      -201, -201, -201, -201, -201, -201, -201, -201, -201, -201,
@@ -6770,14 +6770,15 @@
      -202, -202, -202, -202, -202, -202, -202, -202, -202, -202,
      -202, -202, -202, -202, -202, -202, -202, -202, -202, -202,
      -202, -202, -202, -202, -202, -202, -202, -202, -202, -202,
-     -202, -202, -202, -202, -202, -202, -202, -202, -202,  231,
-      231,  231,  231,  231,  231,  231,  231,  231, -202, -202,
      -202, -202, -202, -202, -202, -202, -202, -202, -202, -202,
      -202, -202, -202, -202, -202, -202, -202, -202, -202, -202,
+      231, -202,  231, -202, -202, -202, -202, -202, -202, -202,
+     -202, -202, -202, -202, -202, -202, -202, -202, -202, -202,
 
      -202, -202, -202, -202, -202, -202, -202, -202, -202, -202,
      -202, -202, -202, -202, -202, -202, -202, -202, -202, -202,
      -202, -202, -202, -202, -202, -202, -202, -202, -202, -202,
+     -202, -202, -202, -202, -202,  232, -202, -202, -202, -202,
      -202, -202, -202, -202, -202, -202, -202, -202, -202, -202,
      -202, -202, -202, -202, -202, -202, -202, -202, -202, -202,
      -202, -202, -202, -202, -202, -202, -202, -202, -202, -202,
@@ -6784,7 +6785,6 @@
      -202, -202, -202, -202, -202, -202, -202, -202, -202, -202,
      -202, -202, -202, -202, -202, -202, -202, -202, -202, -202,
      -202, -202, -202, -202, -202, -202, -202, -202, -202, -202,
-     -202, -202, -202, -202, -202, -202, -202, -202, -202, -202,
 
      -202, -202, -202, -202, -202, -202, -202, -202, -202, -202,
      -202, -202, -202, -202, -202, -202, -202, -202, -202, -202,
@@ -6803,7 +6803,6 @@
      -203, -203, -203, -203, -203, -203, -203, -203, -203, -203,
      -203, -203, -203, -203, -203, -203, -203, -203, -203, -203,
      -203, -203, -203, -203, -203, -203, -203, -203, -203, -203,
-     -203, -203, -203, -203, -203, -203, -203, -203,  232, -203,
      -203, -203, -203, -203, -203, -203, -203, -203, -203, -203,
      -203, -203, -203, -203, -203, -203, -203, -203, -203, -203,
      -203, -203, -203, -203, -203, -203, -203, -203, -203, -203,
@@ -6810,6 +6809,7 @@
      -203, -203, -203, -203, -203, -203, -203, -203, -203, -203,
      -203, -203, -203, -203, -203, -203, -203, -203, -203, -203,
      -203, -203, -203, -203, -203, -203, -203, -203, -203, -203,
+     -203, -203, -203, -203, -203, -203, -203, -203,  233, -203,
 
      -203, -203, -203, -203, -203, -203, -203, -203, -203, -203,
      -203, -203, -203, -203, -203, -203, -203, -203, -203, -203,
@@ -6833,8 +6833,8 @@
      -204, -204, -204, -204, -204, -204, -204, -204, -204, -204,
      -204, -204, -204, -204, -204, -204, -204, -204, -204, -204,
      -204, -204, -204, -204, -204, -204, -204, -204, -204, -204,
-     -204, -204, -204, -204, -204, -204, -204, -204, -204,  233,
-      233,  233,  233,  233,  233,  233,  233,  233, -204, -204,
+     -204, -204, -204, -204, -204, -204, -204, -204, -204, -204,
+     -204, -204, -204, -204, -204, -204, -204, -204, -204, -204,
 
      -204, -204, -204, -204, -204, -204, -204, -204, -204, -204,
      -204, -204, -204, -204, -204, -204, -204, -204, -204, -204,
@@ -6841,11 +6841,11 @@
      -204, -204, -204, -204, -204, -204, -204, -204, -204, -204,
      -204, -204, -204, -204, -204, -204, -204, -204, -204, -204,
      -204, -204, -204, -204, -204, -204, -204, -204, -204, -204,
+     -204, -204, -204, -204, -204, -204,  234, -204, -204, -204,
      -204, -204, -204, -204, -204, -204, -204, -204, -204, -204,
      -204, -204, -204, -204, -204, -204, -204, -204, -204, -204,
      -204, -204, -204, -204, -204, -204, -204, -204, -204, -204,
      -204, -204, -204, -204, -204, -204, -204, -204, -204, -204,
-     -204, -204, -204, -204, -204, -204, -204, -204, -204, -204,
 
      -204, -204, -204, -204, -204, -204, -204, -204, -204, -204,
      -204, -204, -204, -204, -204, -204, -204, -204, -204, -204,
@@ -6866,7 +6866,7 @@
      -205, -205, -205, -205, -205, -205, -205, -205, -205, -205,
      -205, -205, -205, -205, -205, -205, -205, -205, -205, -205,
      -205, -205, -205, -205, -205, -205, -205, -205, -205, -205,
-     -205, -205, -205, -205, -205, -205, -205, -205,  234, -205,
+     -205, -205, -205, -205, -205, -205, -205, -205,  235, -205,
      -205, -205, -205, -205, -205, -205, -205, -205, -205, -205,
      -205, -205, -205, -205, -205, -205, -205, -205, -205, -205,
      -205, -205, -205, -205, -205, -205, -205, -205, -205, -205,
@@ -6898,7 +6898,7 @@
      -206, -206, -206, -206, -206, -206, -206, -206, -206, -206,
 
      -206, -206, -206, -206, -206, -206, -206, -206, -206, -206,
-     -206, -206, -206, -206, -206, -206, -206, -206,  235, -206,
+     -206, -206, -206, -206, -206, -206, -206, -206,  236, -206,
      -206, -206, -206, -206, -206, -206, -206, -206, -206, -206,
      -206, -206, -206, -206, -206, -206, -206, -206, -206, -206,
      -206, -206, -206, -206, -206, -206, -206, -206, -206, -206,
@@ -6928,10 +6928,10 @@
      -207, -207, -207, -207, -207, -207, -207, -207, -207, -207,
      -207, -207, -207, -207, -207, -207, -207, -207, -207, -207,
      -207, -207, -207, -207, -207, -207, -207, -207, -207, -207,
+     -207, -207, -207, -207, -207, -207, -207, -207, -207,  237,
+      237,  237,  237,  237,  237,  237,  237,  237, -207, -207,
      -207, -207, -207, -207, -207, -207, -207, -207, -207, -207,
-     -207, -207, -207, -207, -207, -207, -207, -207,  236, -207,
      -207, -207, -207, -207, -207, -207, -207, -207, -207, -207,
-     -207, -207, -207, -207, -207, -207, -207, -207, -207, -207,
 
      -207, -207, -207, -207, -207, -207, -207, -207, -207, -207,
      -207, -207, -207, -207, -207, -207, -207, -207, -207, -207,
@@ -6960,14 +6960,14 @@
 
      -208, -208, -208, -208, -208, -208, -208, -208, -208, -208,
      -208, -208, -208, -208, -208, -208, -208, -208, -208, -208,
-     -208, -208, -208, -208, -208, -208, -208, -208, -208,  237,
-      237,  237,  237,  237,  237,  237,  237,  237, -208, -208,
      -208, -208, -208, -208, -208, -208, -208, -208, -208, -208,
+     -208, -208, -208, -208, -208, -208, -208, -208,  238, -208,
      -208, -208, -208, -208, -208, -208, -208, -208, -208, -208,
      -208, -208, -208, -208, -208, -208, -208, -208, -208, -208,
      -208, -208, -208, -208, -208, -208, -208, -208, -208, -208,
      -208, -208, -208, -208, -208, -208, -208, -208, -208, -208,
      -208, -208, -208, -208, -208, -208, -208, -208, -208, -208,
+     -208, -208, -208, -208, -208, -208, -208, -208, -208, -208,
 
      -208, -208, -208, -208, -208, -208, -208, -208, -208, -208,
      -208, -208, -208, -208, -208, -208, -208, -208, -208, -208,
@@ -6991,8 +6991,8 @@
      -209, -209, -209, -209, -209, -209, -209, -209, -209, -209,
      -209, -209, -209, -209, -209, -209, -209, -209, -209, -209,
      -209, -209, -209, -209, -209, -209, -209, -209, -209, -209,
-     -209, -209, -209, -209, -209, -209, -209, -209, -209, -209,
-     -209, -209, -209, -209, -209, -209, -209, -209,  238, -209,
+     -209, -209, -209, -209, -209, -209, -209, -209, -209,  239,
+      239,  239,  239,  239,  239,  239,  239,  239, -209, -209,
 
      -209, -209, -209, -209, -209, -209, -209, -209, -209, -209,
      -209, -209, -209, -209, -209, -209, -209, -209, -209, -209,
@@ -7024,7 +7024,7 @@
      -210, -210, -210, -210, -210, -210, -210, -210, -210, -210,
      -210, -210, -210, -210, -210, -210, -210, -210, -210, -210,
      -210, -210, -210, -210, -210, -210, -210, -210, -210, -210,
-     -210, -210, -210, -210, -210, -210, -210, -210,  239, -210,
+     -210, -210, -210, -210, -210, -210, -210, -210,  240, -210,
      -210, -210, -210, -210, -210, -210, -210, -210, -210, -210,
      -210, -210, -210, -210, -210, -210, -210, -210, -210, -210,
      -210, -210, -210, -210, -210, -210, -210, -210, -210, -210,
@@ -7056,11 +7056,11 @@
      -211, -211, -211, -211, -211, -211, -211, -211, -211, -211,
 
      -211, -211, -211, -211, -211, -211, -211, -211, -211, -211,
+     -211, -211, -211, -211, -211, -211, -211, -211,  241, -211,
      -211, -211, -211, -211, -211, -211, -211, -211, -211, -211,
      -211, -211, -211, -211, -211, -211, -211, -211, -211, -211,
      -211, -211, -211, -211, -211, -211, -211, -211, -211, -211,
      -211, -211, -211, -211, -211, -211, -211, -211, -211, -211,
-     -211, -211, -211, -211, -211, -211, -211, -211,  240, -211,
      -211, -211, -211, -211, -211, -211, -211, -211, -211, -211,
      -211, -211, -211, -211, -211, -211, -211, -211, -211, -211,
      -211, -211, -211, -211, -211, -211, -211, -211, -211, -211,
@@ -7087,7 +7087,7 @@
      -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
      -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
      -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
-     -212, -212, -212, -212, -212, -212, -212, -212,  241, -212,
+     -212, -212, -212, -212, -212, -212, -212, -212,  242, -212,
      -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
      -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
 
@@ -7095,12 +7095,12 @@
      -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
      -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
      -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
-     -212, -212, -212,  242, -212,  243, -212, -212, -212, -212,
      -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
      -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
      -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
      -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
      -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
+     -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
 
      -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
      -212, -212, -212, -212, -212, -212, -212, -212, -212, -212,
@@ -7118,6 +7118,8 @@
 
      -213, -213, -213, -213, -213, -213, -213, -213, -213, -213,
      -213, -213, -213, -213, -213, -213, -213, -213, -213, -213,
+     -213, -213, -213, -213, -213, -213, -213, -213, -213,  243,
+      243,  243,  243,  243,  243,  243,  243,  243, -213, -213,
      -213, -213, -213, -213, -213, -213, -213, -213, -213, -213,
      -213, -213, -213, -213, -213, -213, -213, -213, -213, -213,
      -213, -213, -213, -213, -213, -213, -213, -213, -213, -213,
@@ -7124,8 +7126,6 @@
      -213, -213, -213, -213, -213, -213, -213, -213, -213, -213,
      -213, -213, -213, -213, -213, -213, -213, -213, -213, -213,
      -213, -213, -213, -213, -213, -213, -213, -213, -213, -213,
-     -213, -213, -213, -213, -213, -213, -213, -213,  244, -213,
-     -213, -213, -213, -213, -213, -213, -213, -213, -213, -213,
 
      -213, -213, -213, -213, -213, -213, -213, -213, -213, -213,
      -213, -213, -213, -213, -213, -213, -213, -213, -213, -213,
@@ -7155,8 +7155,8 @@
      -214, -214, -214, -214, -214, -214, -214, -214, -214, -214,
      -214, -214, -214, -214, -214, -214, -214, -214, -214, -214,
      -214, -214, -214, -214, -214, -214, -214, -214, -214, -214,
+     -214, -214, -214, -214, -214, -214, -214, -214, -214,  244,
      -214, -214, -214, -214, -214, -214, -214, -214, -214, -214,
-     -214, -214, -214, -214, -214, -214, -214, -214,  245, -214,
      -214, -214, -214, -214, -214, -214, -214, -214, -214, -214,
      -214, -214, -214, -214, -214, -214, -214, -214, -214, -214,
      -214, -214, -214, -214, -214, -214, -214, -214, -214, -214,
@@ -7182,7 +7182,7 @@
      -215, -215, -215, -215, -215, -215, -215, -215, -215, -215,
      -215, -215, -215, -215, -215, -215, -215, -215, -215, -215,
      -215, -215, -215, -215, -215, -215, -215, -215, -215, -215,
-     -215, -215, -215, -215, -215, -215, -215, -215,  246, -215,
+     -215, -215, -215, -215, -215, -215, -215, -215,  245, -215,
      -215, -215, -215, -215, -215, -215, -215, -215, -215, -215,
      -215, -215, -215, -215, -215, -215, -215, -215, -215, -215,
      -215, -215, -215, -215, -215, -215, -215, -215, -215, -215,
@@ -7214,12 +7214,12 @@
      -216, -216, -216, -216, -216, -216, -216, -216, -216, -216,
 
      -216, -216, -216, -216, -216, -216, -216, -216, -216, -216,
+     -216, -216, -216, -216, -216, -216, -216, -216,  246, -216,
      -216, -216, -216, -216, -216, -216, -216, -216, -216, -216,
      -216, -216, -216, -216, -216, -216, -216, -216, -216, -216,
      -216, -216, -216, -216, -216, -216, -216, -216, -216, -216,
      -216, -216, -216, -216, -216, -216, -216, -216, -216, -216,
      -216, -216, -216, -216, -216, -216, -216, -216, -216, -216,
-     -216, -216, -216, -216, -216, -216, -216, -216,  247, -216,
      -216, -216, -216, -216, -216, -216, -216, -216, -216, -216,
      -216, -216, -216, -216, -216, -216, -216, -216, -216, -216,
      -216, -216, -216, -216, -216, -216, -216, -216, -216, -216,
@@ -7250,6 +7250,7 @@
      -217, -217, -217, -217, -217, -217, -217, -217, -217, -217,
 
      -217, -217, -217, -217, -217, -217, -217, -217, -217, -217,
+     -217, -217, -217, -217, -217, -217, -217, -217,  247, -217,
      -217, -217, -217, -217, -217, -217, -217, -217, -217, -217,
      -217, -217, -217, -217, -217, -217, -217, -217, -217, -217,
      -217, -217, -217, -217, -217, -217, -217, -217, -217, -217,
@@ -7258,7 +7259,6 @@
      -217, -217, -217, -217, -217, -217, -217, -217, -217, -217,
      -217, -217, -217, -217, -217, -217, -217, -217, -217, -217,
      -217, -217, -217, -217, -217, -217, -217, -217, -217, -217,
-     -217, -217, -217, -217, -217, -217, -217, -217, -217, -217,
 
      -217, -217, -217, -217, -217, -217, -217, -217, -217, -217,
      -217, -217, -217, -217, -217, -217, -217, -217, -217, -217,
@@ -7276,15 +7276,16 @@
 
      -218, -218, -218, -218, -218, -218, -218, -218, -218, -218,
      -218, -218, -218, -218, -218, -218, -218, -218, -218, -218,
-     -218, -218, -218, -218, -218, -218, -218, -218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218, -218, -218,
      -218, -218, -218, -218, -218, -218, -218, -218, -218, -218,
+     -218, -218, -218, -218, -218, -218, -218, -218,  248, -218,
      -218, -218, -218, -218, -218, -218, -218, -218, -218, -218,
      -218, -218, -218, -218, -218, -218, -218, -218, -218, -218,
-     -218, -218, -218,  175, -218, -218, -218, -218, -218, -218,
      -218, -218, -218, -218, -218, -218, -218, -218, -218, -218,
      -218, -218, -218, -218, -218, -218, -218, -218, -218, -218,
+     -218, -218, -218, -218, -218, -218, -218, -218, -218, -218,
+     -218, -218, -218, -218, -218, -218, -218, -218, -218, -218,
 
+     -218, -218, -218,  249, -218,  250, -218, -218, -218, -218,
      -218, -218, -218, -218, -218, -218, -218, -218, -218, -218,
      -218, -218, -218, -218, -218, -218, -218, -218, -218, -218,
      -218, -218, -218, -218, -218, -218, -218, -218, -218, -218,
@@ -7294,7 +7295,6 @@
      -218, -218, -218, -218, -218, -218, -218, -218, -218, -218,
      -218, -218, -218, -218, -218, -218, -218, -218, -218, -218,
      -218, -218, -218, -218, -218, -218, -218, -218, -218, -218,
-     -218, -218, -218, -218, -218, -218, -218, -218, -218, -218,
 
      -218, -218, -218, -218, -218, -218, -218, -218, -218, -218,
      -218, -218, -218, -218, -218, -218, -218, -218, -218, -218,
@@ -7307,14 +7307,14 @@
      -219, -219, -219, -219, -219, -219, -219, -219, -219, -219,
      -219, -219, -219, -219, -219, -219, -219, -219, -219, -219,
      -219, -219, -219, -219, -219, -219, -219, -219, -219, -219,
-     -219, -219, -219, -219, -219, -219, -219, -219,  219,  219,
-      219,  219,  219,  219,  219,  219,  219,  219, -219, -219,
+     -219, -219, -219, -219, -219, -219, -219, -219, -219, -219,
+     -219, -219, -219, -219, -219, -219, -219, -219, -219, -219,
 
      -219, -219, -219, -219, -219, -219, -219, -219, -219, -219,
      -219, -219, -219, -219, -219, -219, -219, -219, -219, -219,
      -219, -219, -219, -219, -219, -219, -219, -219, -219, -219,
-     -219, -219, -219,  180, -219, -219, -219, -219, -219, -219,
      -219, -219, -219, -219, -219, -219, -219, -219, -219, -219,
+     -219, -219, -219, -219, -219, -219, -219, -219,  251, -219,
      -219, -219, -219, -219, -219, -219, -219, -219, -219, -219,
      -219, -219, -219, -219, -219, -219, -219, -219, -219, -219,
      -219, -219, -219, -219, -219, -219, -219, -219, -219, -219,
@@ -7346,6 +7346,7 @@
      -220, -220, -220, -220, -220, -220, -220, -220, -220, -220,
      -220, -220, -220, -220, -220, -220, -220, -220, -220, -220,
 
+     -220, -220, -220, -220, -220, -220, -220, -220,  252, -220,
      -220, -220, -220, -220, -220, -220, -220, -220, -220, -220,
      -220, -220, -220, -220, -220, -220, -220, -220, -220, -220,
      -220, -220, -220, -220, -220, -220, -220, -220, -220, -220,
@@ -7355,7 +7356,6 @@
      -220, -220, -220, -220, -220, -220, -220, -220, -220, -220,
      -220, -220, -220, -220, -220, -220, -220, -220, -220, -220,
      -220, -220, -220, -220, -220, -220, -220, -220, -220, -220,
-     -220, -220, -220, -220, -220, -220, -220, -220, -220, -220,
 
      -220, -220, -220, -220, -220, -220, -220, -220, -220, -220,
      -220, -220, -220, -220, -220, -220, -220, -220, -220, -220,
@@ -7372,11 +7372,11 @@
      -221, -221, -221, -221, -221, -221, -221, -221, -221, -221,
 
      -221, -221, -221, -221, -221, -221, -221, -221, -221, -221,
+     -221, -221, -221, -221, -221, -221, -221, -221,  253, -221,
      -221, -221, -221, -221, -221, -221, -221, -221, -221, -221,
      -221, -221, -221, -221, -221, -221, -221, -221, -221, -221,
      -221, -221, -221, -221, -221, -221, -221, -221, -221, -221,
      -221, -221, -221, -221, -221, -221, -221, -221, -221, -221,
-     -221, -221, -221, -221, -221, -221, -221, -221,  248, -221,
      -221, -221, -221, -221, -221, -221, -221, -221, -221, -221,
      -221, -221, -221, -221, -221, -221, -221, -221, -221, -221,
      -221, -221, -221, -221, -221, -221, -221, -221, -221, -221,
@@ -7408,8 +7408,8 @@
      -222, -222, -222, -222, -222, -222, -222, -222, -222, -222,
 
      -222, -222, -222, -222, -222, -222, -222, -222, -222, -222,
-     -222, -222, -222, -222, -222, -222, -222,  249, -222, -222,
      -222, -222, -222, -222, -222, -222, -222, -222, -222, -222,
+     -222, -222, -222, -222, -222, -222, -222, -222,  254, -222,
      -222, -222, -222, -222, -222, -222, -222, -222, -222, -222,
      -222, -222, -222, -222, -222, -222, -222, -222, -222, -222,
      -222, -222, -222, -222, -222, -222, -222, -222, -222, -222,
@@ -7465,12 +7465,13 @@
      -224, -224, -224, -224, -224, -224, -224, -224, -224, -224,
      -224, -224, -224, -224, -224, -224, -224, -224, -224, -224,
      -224, -224, -224, -224, -224, -224, -224, -224, -224, -224,
-     -224, -224, -224, -224, -224, -224, -224, -224, -224, -224,
-     -224, -224, -224, -224, -224, -224, -224, -224, -224, -224,
+     -224, -224, -224, -224, -224, -224, -224, -224,  224,  224,
+      224,  224,  224,  224,  224,  224,  224,  224, -224, -224,
 
      -224, -224, -224, -224, -224, -224, -224, -224, -224, -224,
      -224, -224, -224, -224, -224, -224, -224, -224, -224, -224,
      -224, -224, -224, -224, -224, -224, -224, -224, -224, -224,
+     -224, -224, -224,  180, -224, -224, -224, -224, -224, -224,
      -224, -224, -224, -224, -224, -224, -224, -224, -224, -224,
      -224, -224, -224, -224, -224, -224, -224, -224, -224, -224,
      -224, -224, -224, -224, -224, -224, -224, -224, -224, -224,
@@ -7477,7 +7478,6 @@
      -224, -224, -224, -224, -224, -224, -224, -224, -224, -224,
      -224, -224, -224, -224, -224, -224, -224, -224, -224, -224,
      -224, -224, -224, -224, -224, -224, -224, -224, -224, -224,
-     -224, -224, -224, -224, -224, -224, -224, -224, -224, -224,
 
      -224, -224, -224, -224, -224, -224, -224, -224, -224, -224,
      -224, -224, -224, -224, -224, -224, -224, -224, -224, -224,
@@ -7497,12 +7497,12 @@
      -225, -225, -225, -225, -225, -225, -225, -225, -225, -225,
      -225, -225, -225, -225, -225, -225, -225, -225, -225, -225,
      -225, -225, -225, -225, -225, -225, -225, -225, -225, -225,
+     -225, -225, -225, -225, -225, -225, -225, -225,  225,  225,
+      225,  225,  225,  225,  225,  225,  225,  225, -225, -225,
      -225, -225, -225, -225, -225, -225, -225, -225, -225, -225,
      -225, -225, -225, -225, -225, -225, -225, -225, -225, -225,
      -225, -225, -225, -225, -225, -225, -225, -225, -225, -225,
-     -225, -225, -225, -225, -225, -225, -225, -225, -225, -225,
-     -225, -225, -225, -225, -225, -225, -225, -225, -225, -225,
-     -225, -225, -225, -225, -225, -225, -225, -225, -225, -225,
+     -225, -225, -225,  185, -225, -225, -225, -225, -225, -225,
 
      -225, -225, -225, -225, -225, -225, -225, -225, -225, -225,
      -225, -225, -225, -225, -225, -225, -225, -225, -225, -225,
@@ -7531,7 +7531,6 @@
 
      -226, -226, -226, -226, -226, -226, -226, -226, -226, -226,
      -226, -226, -226, -226, -226, -226, -226, -226, -226, -226,
-      250, -226,  250, -226, -226, -226, -226, -226, -226, -226,
      -226, -226, -226, -226, -226, -226, -226, -226, -226, -226,
      -226, -226, -226, -226, -226, -226, -226, -226, -226, -226,
      -226, -226, -226, -226, -226, -226, -226, -226, -226, -226,
@@ -7539,6 +7538,7 @@
      -226, -226, -226, -226, -226, -226, -226, -226, -226, -226,
      -226, -226, -226, -226, -226, -226, -226, -226, -226, -226,
      -226, -226, -226, -226, -226, -226, -226, -226, -226, -226,
+     -226, -226, -226, -226, -226, -226, -226, -226, -226, -226,
 
      -226, -226, -226, -226, -226, -226, -226, -226, -226, -226,
      -226, -226, -226, -226, -226, -226, -226, -226, -226, -226,
@@ -7566,6 +7566,7 @@
      -227, -227, -227, -227, -227, -227, -227, -227, -227, -227,
 
      -227, -227, -227, -227, -227, -227, -227, -227, -227, -227,
+     -227, -227, -227, -227, -227, -227, -227, -227,  255, -227,
      -227, -227, -227, -227, -227, -227, -227, -227, -227, -227,
      -227, -227, -227, -227, -227, -227, -227, -227, -227, -227,
      -227, -227, -227, -227, -227, -227, -227, -227, -227, -227,
@@ -7574,7 +7575,6 @@
      -227, -227, -227, -227, -227, -227, -227, -227, -227, -227,
      -227, -227, -227, -227, -227, -227, -227, -227, -227, -227,
      -227, -227, -227, -227, -227, -227, -227, -227, -227, -227,
-     -227, -227, -227, -227, -227, -227, -227, -227, -227, -227,
 
      -227, -227, -227, -227, -227, -227, -227, -227, -227, -227,
      -227, -227, -227, -227, -227, -227, -227, -227, -227, -227,
@@ -7593,13 +7593,13 @@
      -228, -228, -228, -228, -228, -228, -228, -228, -228, -228,
      -228, -228, -228, -228, -228, -228, -228, -228, -228, -228,
      -228, -228, -228, -228, -228, -228, -228, -228, -228, -228,
-     -228, -228, -228, -228, -228, -228, -228, -228,  251, -228,
      -228, -228, -228, -228, -228, -228, -228, -228, -228, -228,
      -228, -228, -228, -228, -228, -228, -228, -228, -228, -228,
      -228, -228, -228, -228, -228, -228, -228, -228, -228, -228,
      -228, -228, -228, -228, -228, -228, -228, -228, -228, -228,
-     -228, -228, -228, -228, -228, -228, -228, -228, -228,  252,
+     -228, -228, -228, -228, -228, -228, -228,  256, -228, -228,
      -228, -228, -228, -228, -228, -228, -228, -228, -228, -228,
+     -228, -228, -228, -228, -228, -228, -228, -228, -228, -228,
 
      -228, -228, -228, -228, -228, -228, -228, -228, -228, -228,
      -228, -228, -228, -228, -228, -228, -228, -228, -228, -228,
@@ -7692,11 +7692,11 @@
      -231, -231, -231, -231, -231, -231, -231, -231, -231, -231,
      -231, -231, -231, -231, -231, -231, -231, -231, -231, -231,
      -231, -231, -231, -231, -231, -231, -231, -231, -231, -231,
-     -231, -231, -231,  253, -231, -231, -231, -231, -231, -231,
      -231, -231, -231, -231, -231, -231, -231, -231, -231, -231,
      -231, -231, -231, -231, -231, -231, -231, -231, -231, -231,
      -231, -231, -231, -231, -231, -231, -231, -231, -231, -231,
      -231, -231, -231, -231, -231, -231, -231, -231, -231, -231,
+     -231, -231, -231, -231, -231, -231, -231, -231, -231, -231,
 
      -231, -231, -231, -231, -231, -231, -231, -231, -231, -231,
      -231, -231, -231, -231, -231, -231, -231, -231, -231, -231,
@@ -7720,8 +7720,8 @@
      -232, -232, -232, -232, -232, -232, -232, -232, -232, -232,
      -232, -232, -232, -232, -232, -232, -232, -232, -232, -232,
      -232, -232, -232, -232, -232, -232, -232, -232, -232, -232,
+      257, -232,  257, -232, -232, -232, -232, -232, -232, -232,
      -232, -232, -232, -232, -232, -232, -232, -232, -232, -232,
-     -232, -232, -232, -232, -232, -232, -232, -232, -232, -232,
 
      -232, -232, -232, -232, -232, -232, -232, -232, -232, -232,
      -232, -232, -232, -232, -232, -232, -232, -232, -232, -232,
@@ -7755,9 +7755,9 @@
      -233, -233, -233, -233, -233, -233, -233, -233, -233, -233,
      -233, -233, -233, -233, -233, -233, -233, -233, -233, -233,
      -233, -233, -233, -233, -233, -233, -233, -233, -233, -233,
-     -233, -233, -233,  254, -233, -233, -233, -233, -233, -233,
      -233, -233, -233, -233, -233, -233, -233, -233, -233, -233,
      -233, -233, -233, -233, -233, -233, -233, -233, -233, -233,
+     -233, -233, -233, -233, -233, -233, -233, -233, -233, -233,
 
      -233, -233, -233, -233, -233, -233, -233, -233, -233, -233,
      -233, -233, -233, -233, -233, -233, -233, -233, -233, -233,
@@ -7782,18 +7782,18 @@
      -234, -234, -234, -234, -234, -234, -234, -234, -234, -234,
      -234, -234, -234, -234, -234, -234, -234, -234, -234, -234,
      -234, -234, -234, -234, -234, -234, -234, -234, -234, -234,
-     -234, -234, -234, -234, -234, -234, -234, -234, -234, -234,
+     -234, -234, -234, -234, -234, -234, -234, -234,  258, -234,
 
      -234, -234, -234, -234, -234, -234, -234, -234, -234, -234,
      -234, -234, -234, -234, -234, -234, -234, -234, -234, -234,
      -234, -234, -234, -234, -234, -234, -234, -234, -234, -234,
      -234, -234, -234, -234, -234, -234, -234, -234, -234, -234,
+     -234, -234, -234, -234, -234, -234, -234, -234, -234,  259,
      -234, -234, -234, -234, -234, -234, -234, -234, -234, -234,
      -234, -234, -234, -234, -234, -234, -234, -234, -234, -234,
      -234, -234, -234, -234, -234, -234, -234, -234, -234, -234,
      -234, -234, -234, -234, -234, -234, -234, -234, -234, -234,
      -234, -234, -234, -234, -234, -234, -234, -234, -234, -234,
-     -234, -234, -234, -234, -234, -234, -234, -234, -234, -234,
 
      -234, -234, -234, -234, -234, -234, -234, -234, -234, -234,
      -234, -234, -234, -234, -234, -234, -234, -234, -234, -234,
@@ -7813,12 +7813,12 @@
      -235, -235, -235, -235, -235, -235, -235, -235, -235, -235,
      -235, -235, -235, -235, -235, -235, -235, -235, -235, -235,
      -235, -235, -235, -235, -235, -235, -235, -235, -235, -235,
-     -235, -235, -235, -235, -235, -235, -235, -235,  255,  256,
      -235, -235, -235, -235, -235, -235, -235, -235, -235, -235,
      -235, -235, -235, -235, -235, -235, -235, -235, -235, -235,
      -235, -235, -235, -235, -235, -235, -235, -235, -235, -235,
      -235, -235, -235, -235, -235, -235, -235, -235, -235, -235,
      -235, -235, -235, -235, -235, -235, -235, -235, -235, -235,
+     -235, -235, -235, -235, -235, -235, -235, -235, -235, -235,
 
      -235, -235, -235, -235, -235, -235, -235, -235, -235, -235,
      -235, -235, -235, -235, -235, -235, -235, -235, -235, -235,
@@ -7845,7 +7845,6 @@
      -236, -236, -236, -236, -236, -236, -236, -236, -236, -236,
      -236, -236, -236, -236, -236, -236, -236, -236, -236, -236,
 
-     -236, -236, -236, -236, -236, -236, -236, -236,  257,  258,
      -236, -236, -236, -236, -236, -236, -236, -236, -236, -236,
      -236, -236, -236, -236, -236, -236, -236, -236, -236, -236,
      -236, -236, -236, -236, -236, -236, -236, -236, -236, -236,
@@ -7855,6 +7854,7 @@
      -236, -236, -236, -236, -236, -236, -236, -236, -236, -236,
      -236, -236, -236, -236, -236, -236, -236, -236, -236, -236,
      -236, -236, -236, -236, -236, -236, -236, -236, -236, -236,
+     -236, -236, -236, -236, -236, -236, -236, -236, -236, -236,
 
      -236, -236, -236, -236, -236, -236, -236, -236, -236, -236,
      -236, -236, -236, -236, -236, -236, -236, -236, -236, -236,
@@ -7882,7 +7882,7 @@
      -237, -237, -237, -237, -237, -237, -237, -237, -237, -237,
 
      -237, -237, -237, -237, -237, -237, -237, -237, -237, -237,
-     -237, -237, -237,  259, -237, -237, -237, -237, -237, -237,
+     -237, -237, -237,  260, -237, -237, -237, -237, -237, -237,
      -237, -237, -237, -237, -237, -237, -237, -237, -237, -237,
      -237, -237, -237, -237, -237, -237, -237, -237, -237, -237,
      -237, -237, -237, -237, -237, -237, -237, -237, -237, -237,
@@ -7939,12 +7939,13 @@
      -239, -239, -239, -239, -239, -239, -239, -239, -239, -239,
      -239, -239, -239, -239, -239, -239, -239, -239, -239, -239,
      -239, -239, -239, -239, -239, -239, -239, -239, -239, -239,
-     -239, -239, -239, -239, -239, -239, -239, -239,  260,  260,
      -239, -239, -239, -239, -239, -239, -239, -239, -239, -239,
+     -239, -239, -239, -239, -239, -239, -239, -239, -239, -239,
 
      -239, -239, -239, -239, -239, -239, -239, -239, -239, -239,
      -239, -239, -239, -239, -239, -239, -239, -239, -239, -239,
      -239, -239, -239, -239, -239, -239, -239, -239, -239, -239,
+     -239, -239, -239,  261, -239, -239, -239, -239, -239, -239,
      -239, -239, -239, -239, -239, -239, -239, -239, -239, -239,
      -239, -239, -239, -239, -239, -239, -239, -239, -239, -239,
      -239, -239, -239, -239, -239, -239, -239, -239, -239, -239,
@@ -7951,7 +7952,6 @@
      -239, -239, -239, -239, -239, -239, -239, -239, -239, -239,
      -239, -239, -239, -239, -239, -239, -239, -239, -239, -239,
      -239, -239, -239, -239, -239, -239, -239, -239, -239, -239,
-     -239, -239, -239, -239, -239, -239, -239, -239, -239, -239,
 
      -239, -239, -239, -239, -239, -239, -239, -239, -239, -239,
      -239, -239, -239, -239, -239, -239, -239, -239, -239, -239,
@@ -7972,11 +7972,11 @@
      -240, -240, -240, -240, -240, -240, -240, -240, -240, -240,
      -240, -240, -240, -240, -240, -240, -240, -240, -240, -240,
      -240, -240, -240, -240, -240, -240, -240, -240, -240, -240,
-     -240, -240, -240, -240, -240, -240, -240, -240,  261, -240,
      -240, -240, -240, -240, -240, -240, -240, -240, -240, -240,
      -240, -240, -240, -240, -240, -240, -240, -240, -240, -240,
      -240, -240, -240, -240, -240, -240, -240, -240, -240, -240,
-     -240, -240, -240, -240, -240, -240, -240,  262, -240, -240,
+     -240, -240, -240, -240, -240, -240, -240, -240, -240, -240,
+     -240, -240, -240, -240, -240, -240, -240, -240, -240, -240,
 
      -240, -240, -240, -240, -240, -240, -240, -240, -240, -240,
      -240, -240, -240, -240, -240, -240, -240, -240, -240, -240,
@@ -8003,16 +8003,16 @@
      -241, -241, -241, -241, -241, -241, -241, -241, -241, -241,
      -241, -241, -241, -241, -241, -241, -241, -241, -241, -241,
 
-     -241, -241, -241,  263, -241,  263, -241, -241, -241, -241,
+     -241, -241, -241, -241, -241, -241, -241, -241,  262,  263,
      -241, -241, -241, -241, -241, -241, -241, -241, -241, -241,
      -241, -241, -241, -241, -241, -241, -241, -241, -241, -241,
      -241, -241, -241, -241, -241, -241, -241, -241, -241, -241,
      -241, -241, -241, -241, -241, -241, -241, -241, -241, -241,
      -241, -241, -241, -241, -241, -241, -241, -241, -241, -241,
-     -241, -241, -241, -241,  264, -241, -241, -241,  264,  264,
-     -241,  265, -241, -241, -241, -241, -241,  265, -241, -241,
-     -241, -241, -241,  242, -241,  243, -241, -241, -241, -241,
      -241, -241, -241, -241, -241, -241, -241, -241, -241, -241,
+     -241, -241, -241, -241, -241, -241, -241, -241, -241, -241,
+     -241, -241, -241, -241, -241, -241, -241, -241, -241, -241,
+     -241, -241, -241, -241, -241, -241, -241, -241, -241, -241,
 
      -241, -241, -241, -241, -241, -241, -241, -241, -241, -241,
      -241, -241, -241, -241, -241, -241, -241, -241, -241, -241,
@@ -8034,13 +8034,12 @@
      -242, -242, -242, -242, -242, -242, -242, -242, -242, -242,
      -242, -242, -242, -242, -242, -242, -242, -242, -242, -242,
      -242, -242, -242, -242, -242, -242, -242, -242, -242, -242,
+     -242, -242, -242, -242, -242, -242, -242, -242,  264,  265,
      -242, -242, -242, -242, -242, -242, -242, -242, -242, -242,
      -242, -242, -242, -242, -242, -242, -242, -242, -242, -242,
      -242, -242, -242, -242, -242, -242, -242, -242, -242, -242,
-     -242, -242, -242, -242, -242, -242, -242, -242, -242, -242,
 
      -242, -242, -242, -242, -242, -242, -242, -242, -242, -242,
-     -242, -242, -242,  266, -242, -242, -242, -242, -242, -242,
      -242, -242, -242, -242, -242, -242, -242, -242, -242, -242,
      -242, -242, -242, -242, -242, -242, -242, -242, -242, -242,
      -242, -242, -242, -242, -242, -242, -242, -242, -242, -242,
@@ -8049,6 +8048,7 @@
      -242, -242, -242, -242, -242, -242, -242, -242, -242, -242,
      -242, -242, -242, -242, -242, -242, -242, -242, -242, -242,
      -242, -242, -242, -242, -242, -242, -242, -242, -242, -242,
+     -242, -242, -242, -242, -242, -242, -242, -242, -242, -242,
 
      -242, -242, -242, -242, -242, -242, -242, -242, -242, -242,
      -242, -242, -242, -242, -242, -242, -242, -242, -242, -242,
@@ -8071,7 +8071,7 @@
      -243, -243, -243, -243, -243, -243, -243, -243, -243, -243,
      -243, -243, -243, -243, -243, -243, -243, -243, -243, -243,
      -243, -243, -243, -243, -243, -243, -243, -243, -243, -243,
-     -243, -243, -243,  267, -243, -243, -243, -243, -243, -243,
+     -243, -243, -243,  266, -243, -243, -243, -243, -243, -243,
      -243, -243, -243, -243, -243, -243, -243, -243, -243, -243,
      -243, -243, -243, -243, -243, -243, -243, -243, -243, -243,
 
@@ -8098,7 +8098,7 @@
      -244, -244, -244, -244, -244, -244, -244, -244, -244, -244,
      -244, -244, -244, -244, -244, -244, -244, -244, -244, -244,
      -244, -244, -244, -244, -244, -244, -244, -244, -244, -244,
-     -244, -244, -244, -244, -244, -244, -244, -244,  268, -244,
+     -244, -244, -244, -244, -244, -244, -244, -244, -244, -244,
 
      -244, -244, -244, -244, -244, -244, -244, -244, -244, -244,
      -244, -244, -244, -244, -244, -244, -244, -244, -244, -244,
@@ -8105,11 +8105,11 @@
      -244, -244, -244, -244, -244, -244, -244, -244, -244, -244,
      -244, -244, -244, -244, -244, -244, -244, -244, -244, -244,
      -244, -244, -244, -244, -244, -244, -244, -244, -244, -244,
+     -244, -244, -244, -244, -244, -244, -244,  267, -244, -244,
      -244, -244, -244, -244, -244, -244, -244, -244, -244, -244,
      -244, -244, -244, -244, -244, -244, -244, -244, -244, -244,
      -244, -244, -244, -244, -244, -244, -244, -244, -244, -244,
      -244, -244, -244, -244, -244, -244, -244, -244, -244, -244,
-     -244, -244, -244, -244, -244, -244, -244, -244, -244, -244,
 
      -244, -244, -244, -244, -244, -244, -244, -244, -244, -244,
      -244, -244, -244, -244, -244, -244, -244, -244, -244, -244,
@@ -8137,7 +8137,6 @@
      -245, -245, -245, -245, -245, -245, -245, -245, -245, -245,
 
      -245, -245, -245, -245, -245, -245, -245, -245, -245, -245,
-     -245, -245, -245, -245, -245, -245, -245,  269, -245, -245,
      -245, -245, -245, -245, -245, -245, -245, -245, -245, -245,
      -245, -245, -245, -245, -245, -245, -245, -245, -245, -245,
      -245, -245, -245, -245, -245, -245, -245, -245, -245, -245,
@@ -8146,6 +8145,7 @@
      -245, -245, -245, -245, -245, -245, -245, -245, -245, -245,
      -245, -245, -245, -245, -245, -245, -245, -245, -245, -245,
      -245, -245, -245, -245, -245, -245, -245, -245, -245, -245,
+     -245, -245, -245, -245, -245, -245, -245, -245, -245, -245,
 
      -245, -245, -245, -245, -245, -245, -245, -245, -245, -245,
      -245, -245, -245, -245, -245, -245, -245, -245, -245, -245,
@@ -8161,7 +8161,7 @@
      -246, -246, -246, -246, -246, -246, -246, -246, -246, -246,
      -246, -246, -246, -246, -246, -246, -246, -246, -246, -246,
 
-     -246, -246, -246, -246, -246, -246, -246, -246,  270,  270,
+     -246, -246, -246, -246, -246, -246, -246, -246,  268,  268,
      -246, -246, -246, -246, -246, -246, -246, -246, -246, -246,
      -246, -246, -246, -246, -246, -246, -246, -246, -246, -246,
      -246, -246, -246, -246, -246, -246, -246, -246, -246, -246,
@@ -8193,11 +8193,12 @@
      -247, -247, -247, -247, -247, -247, -247, -247, -247, -247,
      -247, -247, -247, -247, -247, -247, -247, -247, -247, -247,
      -247, -247, -247, -247, -247, -247, -247, -247, -247, -247,
-     -247, -247, -247, -247, -247, -247, -247, -247,  271, -247,
+     -247, -247, -247, -247, -247, -247, -247, -247,  269, -247,
      -247, -247, -247, -247, -247, -247, -247, -247, -247, -247,
      -247, -247, -247, -247, -247, -247, -247, -247, -247, -247,
 
      -247, -247, -247, -247, -247, -247, -247, -247, -247, -247,
+     -247, -247, -247, -247, -247, -247, -247,  270, -247, -247,
      -247, -247, -247, -247, -247, -247, -247, -247, -247, -247,
      -247, -247, -247, -247, -247, -247, -247, -247, -247, -247,
      -247, -247, -247, -247, -247, -247, -247, -247, -247, -247,
@@ -8206,7 +8207,6 @@
      -247, -247, -247, -247, -247, -247, -247, -247, -247, -247,
      -247, -247, -247, -247, -247, -247, -247, -247, -247, -247,
      -247, -247, -247, -247, -247, -247, -247, -247, -247, -247,
-     -247, -247, -247, -247, -247, -247, -247, -247, -247, -247,
 
      -247, -247, -247, -247, -247, -247, -247, -247, -247, -247,
      -247, -247, -247, -247, -247, -247, -247, -247, -247, -247,
@@ -8224,15 +8224,16 @@
 
      -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
      -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
+     -248, -248, -248,  271, -248,  271, -248, -248, -248, -248,
      -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
      -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
      -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
      -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
      -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
-     -248, -248, -248, -248, -248, -248, -248,  272, -248, -248,
-     -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
-     -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
+     -248, -248, -248, -248,  272, -248, -248, -248,  272,  272,
+     -248,  273, -248, -248, -248, -248, -248,  273, -248, -248,
 
+     -248, -248, -248,  249, -248,  250, -248, -248, -248, -248,
      -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
      -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
      -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
@@ -8242,7 +8243,6 @@
      -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
      -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
      -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
-     -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
 
      -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
      -248, -248, -248, -248, -248, -248, -248, -248, -248, -248,
@@ -8258,10 +8258,10 @@
      -249, -249, -249, -249, -249, -249, -249, -249, -249, -249,
      -249, -249, -249, -249, -249, -249, -249, -249, -249, -249,
 
-     -249, -249,  273, -249, -249, -249, -249, -249, -249, -249,
      -249, -249, -249, -249, -249, -249, -249, -249, -249, -249,
      -249, -249, -249, -249, -249, -249, -249, -249, -249, -249,
      -249, -249, -249, -249, -249, -249, -249, -249, -249, -249,
+     -249, -249, -249,  274, -249, -249, -249, -249, -249, -249,
      -249, -249, -249, -249, -249, -249, -249, -249, -249, -249,
      -249, -249, -249, -249, -249, -249, -249, -249, -249, -249,
      -249, -249, -249, -249, -249, -249, -249, -249, -249, -249,
@@ -8292,7 +8292,7 @@
      -250, -250, -250, -250, -250, -250, -250, -250, -250, -250,
      -250, -250, -250, -250, -250, -250, -250, -250, -250, -250,
      -250, -250, -250, -250, -250, -250, -250, -250, -250, -250,
-     -250, -250, -250, -250, -250, -250, -250, -250, -250, -250,
+     -250, -250, -250,  275, -250, -250, -250, -250, -250, -250,
 
      -250, -250, -250, -250, -250, -250, -250, -250, -250, -250,
      -250, -250, -250, -250, -250, -250, -250, -250, -250, -250,
@@ -8320,6 +8320,7 @@
      -251, -251, -251, -251, -251, -251, -251, -251, -251, -251,
 
      -251, -251, -251, -251, -251, -251, -251, -251, -251, -251,
+     -251, -251, -251, -251, -251, -251, -251, -251,  276, -251,
      -251, -251, -251, -251, -251, -251, -251, -251, -251, -251,
      -251, -251, -251, -251, -251, -251, -251, -251, -251, -251,
      -251, -251, -251, -251, -251, -251, -251, -251, -251, -251,
@@ -8328,7 +8329,6 @@
      -251, -251, -251, -251, -251, -251, -251, -251, -251, -251,
      -251, -251, -251, -251, -251, -251, -251, -251, -251, -251,
      -251, -251, -251, -251, -251, -251, -251, -251, -251, -251,
-     -251, -251, -251, -251, -251, -251, -251, -251, -251, -251,
 
      -251, -251, -251, -251, -251, -251, -251, -251, -251, -251,
      -251, -251, -251, -251, -251, -251, -251, -251, -251, -251,
@@ -8350,14 +8350,15 @@
      -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
      -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
      -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
-     -252, -252, -252, -252, -252, -252, -252, -252, -252,  274,
-      274,  274,  274,  274,  274,  274,  274,  274, -252, -252,
      -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
      -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
+     -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
+     -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
 
      -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
      -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
      -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
+     -252, -252, -252, -252, -252, -252, -252,  277, -252, -252,
      -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
      -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
      -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
@@ -8364,7 +8365,6 @@
      -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
      -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
      -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
-     -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
 
      -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
      -252, -252, -252, -252, -252, -252, -252, -252, -252, -252,
@@ -8382,6 +8382,7 @@
 
      -253, -253, -253, -253, -253, -253, -253, -253, -253, -253,
      -253, -253, -253, -253, -253, -253, -253, -253, -253, -253,
+     -253, -253, -253, -253, -253, -253, -253, -253,  278,  278,
      -253, -253, -253, -253, -253, -253, -253, -253, -253, -253,
      -253, -253, -253, -253, -253, -253, -253, -253, -253, -253,
      -253, -253, -253, -253, -253, -253, -253, -253, -253, -253,
@@ -8389,7 +8390,6 @@
      -253, -253, -253, -253, -253, -253, -253, -253, -253, -253,
      -253, -253, -253, -253, -253, -253, -253, -253, -253, -253,
      -253, -253, -253, -253, -253, -253, -253, -253, -253, -253,
-     -253, -253, -253, -253, -253, -253, -253, -253, -253, -253,
 
      -253, -253, -253, -253, -253, -253, -253, -253, -253, -253,
      -253, -253, -253, -253, -253, -253, -253, -253, -253, -253,
@@ -8414,7 +8414,7 @@
      -254, -254, -254, -254, -254, -254, -254, -254, -254, -254,
      -254, -254, -254, -254, -254, -254, -254, -254, -254, -254,
      -254, -254, -254, -254, -254, -254, -254, -254, -254, -254,
-     -254, -254, -254, -254, -254, -254, -254, -254, -254, -254,
+     -254, -254, -254, -254, -254, -254, -254, -254,  279, -254,
 
      -254, -254, -254, -254, -254, -254, -254, -254, -254, -254,
      -254, -254, -254, -254, -254, -254, -254, -254, -254, -254,
@@ -8450,7 +8450,7 @@
      -255, -255, -255, -255, -255, -255, -255, -255, -255, -255,
      -255, -255, -255, -255, -255, -255, -255, -255, -255, -255,
      -255, -255, -255, -255, -255, -255, -255, -255, -255, -255,
-     -255, -255, -255,  275, -255, -255, -255, -255, -255, -255,
+     -255, -255, -255, -255, -255, -255, -255,  280, -255, -255,
 
      -255, -255, -255, -255, -255, -255, -255, -255, -255, -255,
      -255, -255, -255, -255, -255, -255, -255, -255, -255, -255,
@@ -8479,10 +8479,10 @@
 
      -256, -256, -256, -256, -256, -256, -256, -256, -256, -256,
      -256, -256, -256, -256, -256, -256, -256, -256, -256, -256,
+     -256, -256,  281, -256, -256, -256, -256, -256, -256, -256,
      -256, -256, -256, -256, -256, -256, -256, -256, -256, -256,
      -256, -256, -256, -256, -256, -256, -256, -256, -256, -256,
      -256, -256, -256, -256, -256, -256, -256, -256, -256, -256,
-     -256, -256, -256,  276, -256, -256, -256, -256, -256, -256,
      -256, -256, -256, -256, -256, -256, -256, -256, -256, -256,
      -256, -256, -256, -256, -256, -256, -256, -256, -256, -256,
      -256, -256, -256, -256, -256, -256, -256, -256, -256, -256,
@@ -8514,7 +8514,6 @@
      -257, -257, -257, -257, -257, -257, -257, -257, -257, -257,
 
      -257, -257, -257, -257, -257, -257, -257, -257, -257, -257,
-     -257, -257, -257,  277, -257, -257, -257, -257, -257, -257,
      -257, -257, -257, -257, -257, -257, -257, -257, -257, -257,
      -257, -257, -257, -257, -257, -257, -257, -257, -257, -257,
      -257, -257, -257, -257, -257, -257, -257, -257, -257, -257,
@@ -8523,6 +8522,7 @@
      -257, -257, -257, -257, -257, -257, -257, -257, -257, -257,
      -257, -257, -257, -257, -257, -257, -257, -257, -257, -257,
      -257, -257, -257, -257, -257, -257, -257, -257, -257, -257,
+     -257, -257, -257, -257, -257, -257, -257, -257, -257, -257,
 
      -257, -257, -257, -257, -257, -257, -257, -257, -257, -257,
      -257, -257, -257, -257, -257, -257, -257, -257, -257, -257,
@@ -8545,9 +8545,9 @@
      -258, -258, -258, -258, -258, -258, -258, -258, -258, -258,
      -258, -258, -258, -258, -258, -258, -258, -258, -258, -258,
      -258, -258, -258, -258, -258, -258, -258, -258, -258, -258,
-     -258, -258, -258,  278, -258, -258, -258, -258, -258, -258,
      -258, -258, -258, -258, -258, -258, -258, -258, -258, -258,
      -258, -258, -258, -258, -258, -258, -258, -258, -258, -258,
+     -258, -258, -258, -258, -258, -258, -258, -258, -258, -258,
 
      -258, -258, -258, -258, -258, -258, -258, -258, -258, -258,
      -258, -258, -258, -258, -258, -258, -258, -258, -258, -258,
@@ -8571,8 +8571,8 @@
      -259, -259, -259, -259, -259, -259, -259, -259, -259, -259,
      -259, -259, -259, -259, -259, -259, -259, -259, -259, -259,
      -259, -259, -259, -259, -259, -259, -259, -259, -259, -259,
-     -259, -259, -259, -259, -259, -259, -259, -259, -259, -259,
-     -259, -259, -259, -259, -259, -259, -259, -259, -259, -259,
+     -259, -259, -259, -259, -259, -259, -259, -259, -259,  282,
+      282,  282,  282,  282,  282,  282,  282,  282, -259, -259,
 
      -259, -259, -259, -259, -259, -259, -259, -259, -259, -259,
      -259, -259, -259, -259, -259, -259, -259, -259, -259, -259,
@@ -8604,15 +8604,14 @@
      -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
      -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
      -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
-     -260, -260, -260, -260, -260, -260, -260, -260, -260,  279,
      -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
      -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
      -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
      -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
+     -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
 
      -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
      -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
-     -260, -260, -260,  280, -260,  281, -260, -260, -260, -260,
      -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
      -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
      -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
@@ -8620,6 +8619,7 @@
      -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
      -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
      -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
+     -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
 
      -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
      -260, -260, -260, -260, -260, -260, -260, -260, -260, -260,
@@ -8635,7 +8635,6 @@
      -261, -261, -261, -261, -261, -261, -261, -261, -261, -261,
      -261, -261, -261, -261, -261, -261, -261, -261, -261, -261,
 
-     -261, -261, -261, -261, -261, -261, -261, -261,  282,  282,
      -261, -261, -261, -261, -261, -261, -261, -261, -261, -261,
      -261, -261, -261, -261, -261, -261, -261, -261, -261, -261,
      -261, -261, -261, -261, -261, -261, -261, -261, -261, -261,
@@ -8645,6 +8644,7 @@
      -261, -261, -261, -261, -261, -261, -261, -261, -261, -261,
      -261, -261, -261, -261, -261, -261, -261, -261, -261, -261,
      -261, -261, -261, -261, -261, -261, -261, -261, -261, -261,
+     -261, -261, -261, -261, -261, -261, -261, -261, -261, -261,
 
      -261, -261, -261, -261, -261, -261, -261, -261, -261, -261,
      -261, -261, -261, -261, -261, -261, -261, -261, -261, -261,
@@ -8667,11 +8667,12 @@
      -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
      -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
      -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
-     -262, -262, -262, -262, -262, -262, -262, -262,  283, -262,
      -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
      -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
+     -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
 
      -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
+     -262, -262, -262,  283, -262, -262, -262, -262, -262, -262,
      -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
      -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
      -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
@@ -8680,7 +8681,6 @@
      -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
      -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
      -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
-     -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
 
      -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
      -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
@@ -8693,35 +8693,35 @@
     },
 
     {
-       39,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
+       39, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
 
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284, -263,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263,  284, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
 
-      284,  284,  284, -263,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
 
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263, -263, -263, -263, -263,
+     -263, -263, -263, -263, -263, -263
     },
 
     {
@@ -8729,19 +8729,19 @@
      -264, -264, -264, -264, -264, -264, -264, -264, -264, -264,
      -264, -264, -264, -264, -264, -264, -264, -264, -264, -264,
      -264, -264, -264, -264, -264, -264, -264, -264, -264, -264,
-     -264, -264, -264,  263, -264,  263, -264, -264, -264, -264,
      -264, -264, -264, -264, -264, -264, -264, -264, -264, -264,
+     -264, -264, -264, -264, -264, -264, -264, -264, -264, -264,
 
      -264, -264, -264, -264, -264, -264, -264, -264, -264, -264,
      -264, -264, -264, -264, -264, -264, -264, -264, -264, -264,
      -264, -264, -264, -264, -264, -264, -264, -264, -264, -264,
-     -264, -264, -264,  266, -264, -264, -264, -264, -264, -264,
+     -264, -264, -264,  285, -264, -264, -264, -264, -264, -264,
      -264, -264, -264, -264, -264, -264, -264, -264, -264, -264,
      -264, -264, -264, -264, -264, -264, -264, -264, -264, -264,
-     -264, -264, -264,  242, -264, -264, -264, -264, -264, -264,
      -264, -264, -264, -264, -264, -264, -264, -264, -264, -264,
      -264, -264, -264, -264, -264, -264, -264, -264, -264, -264,
      -264, -264, -264, -264, -264, -264, -264, -264, -264, -264,
+     -264, -264, -264, -264, -264, -264, -264, -264, -264, -264,
 
      -264, -264, -264, -264, -264, -264, -264, -264, -264, -264,
      -264, -264, -264, -264, -264, -264, -264, -264, -264, -264,
@@ -8766,9 +8766,8 @@
      -265, -265, -265, -265, -265, -265, -265, -265, -265, -265,
      -265, -265, -265, -265, -265, -265, -265, -265, -265, -265,
      -265, -265, -265, -265, -265, -265, -265, -265, -265, -265,
-     -265, -265, -265, -265, -265, -265, -265, -265, -265, -265,
+     -265, -265, -265,  286, -265, -265, -265, -265, -265, -265,
 
-     -265, -265, -265, -265,  264, -265, -265, -265,  264, -265,
      -265, -265, -265, -265, -265, -265, -265, -265, -265, -265,
      -265, -265, -265, -265, -265, -265, -265, -265, -265, -265,
      -265, -265, -265, -265, -265, -265, -265, -265, -265, -265,
@@ -8778,6 +8777,7 @@
      -265, -265, -265, -265, -265, -265, -265, -265, -265, -265,
      -265, -265, -265, -265, -265, -265, -265, -265, -265, -265,
      -265, -265, -265, -265, -265, -265, -265, -265, -265, -265,
+     -265, -265, -265, -265, -265, -265, -265, -265, -265, -265,
 
      -265, -265, -265, -265, -265, -265, -265, -265, -265, -265,
      -265, -265, -265, -265, -265, -265, -265, -265, -265, -265,
@@ -8832,6 +8832,7 @@
      -267, -267, -267, -267, -267, -267, -267, -267, -267, -267,
      -267, -267, -267, -267, -267, -267, -267, -267, -267, -267,
      -267, -267, -267, -267, -267, -267, -267, -267, -267, -267,
+     -267, -267, -267, -267, -267,  287, -267, -267, -267, -267,
      -267, -267, -267, -267, -267, -267, -267, -267, -267, -267,
      -267, -267, -267, -267, -267, -267, -267, -267, -267, -267,
      -267, -267, -267, -267, -267, -267, -267, -267, -267, -267,
@@ -8838,7 +8839,6 @@
      -267, -267, -267, -267, -267, -267, -267, -267, -267, -267,
      -267, -267, -267, -267, -267, -267, -267, -267, -267, -267,
      -267, -267, -267, -267, -267, -267, -267, -267, -267, -267,
-     -267, -267, -267, -267, -267, -267, -267, -267, -267, -267,
 
      -267, -267, -267, -267, -267, -267, -267, -267, -267, -267,
      -267, -267, -267, -267, -267, -267, -267, -267, -267, -267,
@@ -8857,6 +8857,7 @@
      -268, -268, -268, -268, -268, -268, -268, -268, -268, -268,
      -268, -268, -268, -268, -268, -268, -268, -268, -268, -268,
      -268, -268, -268, -268, -268, -268, -268, -268, -268, -268,
+     -268, -268, -268, -268, -268, -268, -268, -268, -268,  288,
      -268, -268, -268, -268, -268, -268, -268, -268, -268, -268,
      -268, -268, -268, -268, -268, -268, -268, -268, -268, -268,
      -268, -268, -268, -268, -268, -268, -268, -268, -268, -268,
@@ -8863,9 +8864,8 @@
      -268, -268, -268, -268, -268, -268, -268, -268, -268, -268,
      -268, -268, -268, -268, -268, -268, -268, -268, -268, -268,
      -268, -268, -268, -268, -268, -268, -268, -268, -268, -268,
-     -268, -268, -268, -268, -268, -268, -268, -268, -268, -268,
 
-     -268, -268, -268, -268, -268,  285, -268, -268, -268, -268,
+     -268, -268, -268,  289, -268,  290, -268, -268, -268, -268,
      -268, -268, -268, -268, -268, -268, -268, -268, -268, -268,
      -268, -268, -268, -268, -268, -268, -268, -268, -268, -268,
      -268, -268, -268, -268, -268, -268, -268, -268, -268, -268,
@@ -8887,8 +8887,8 @@
      -269, -269, -269, -269, -269, -269, -269, -269, -269, -269,
      -269, -269, -269, -269, -269, -269, -269, -269, -269, -269,
      -269, -269, -269, -269, -269, -269, -269, -269, -269, -269,
+     -269, -269, -269, -269, -269, -269, -269, -269,  291,  291,
      -269, -269, -269, -269, -269, -269, -269, -269, -269, -269,
-     -269, -269, -269, -269, -269, -269, -269, -269, -269, -269,
 
      -269, -269, -269, -269, -269, -269, -269, -269, -269, -269,
      -269, -269, -269, -269, -269, -269, -269, -269, -269, -269,
@@ -8895,11 +8895,11 @@
      -269, -269, -269, -269, -269, -269, -269, -269, -269, -269,
      -269, -269, -269, -269, -269, -269, -269, -269, -269, -269,
      -269, -269, -269, -269, -269, -269, -269, -269, -269, -269,
-     -269, -269, -269, -269,  286, -269, -269, -269, -269, -269,
      -269, -269, -269, -269, -269, -269, -269, -269, -269, -269,
      -269, -269, -269, -269, -269, -269, -269, -269, -269, -269,
      -269, -269, -269, -269, -269, -269, -269, -269, -269, -269,
      -269, -269, -269, -269, -269, -269, -269, -269, -269, -269,
+     -269, -269, -269, -269, -269, -269, -269, -269, -269, -269,
 
      -269, -269, -269, -269, -269, -269, -269, -269, -269, -269,
      -269, -269, -269, -269, -269, -269, -269, -269, -269, -269,
@@ -8920,7 +8920,7 @@
      -270, -270, -270, -270, -270, -270, -270, -270, -270, -270,
      -270, -270, -270, -270, -270, -270, -270, -270, -270, -270,
      -270, -270, -270, -270, -270, -270, -270, -270, -270, -270,
-     -270, -270, -270, -270, -270, -270, -270, -270, -270,  287,
+     -270, -270, -270, -270, -270, -270, -270, -270,  292, -270,
      -270, -270, -270, -270, -270, -270, -270, -270, -270, -270,
      -270, -270, -270, -270, -270, -270, -270, -270, -270, -270,
      -270, -270, -270, -270, -270, -270, -270, -270, -270, -270,
@@ -8928,7 +8928,6 @@
 
      -270, -270, -270, -270, -270, -270, -270, -270, -270, -270,
      -270, -270, -270, -270, -270, -270, -270, -270, -270, -270,
-     -270, -270, -270,  288, -270,  289, -270, -270, -270, -270,
      -270, -270, -270, -270, -270, -270, -270, -270, -270, -270,
      -270, -270, -270, -270, -270, -270, -270, -270, -270, -270,
      -270, -270, -270, -270, -270, -270, -270, -270, -270, -270,
@@ -8936,6 +8935,7 @@
      -270, -270, -270, -270, -270, -270, -270, -270, -270, -270,
      -270, -270, -270, -270, -270, -270, -270, -270, -270, -270,
      -270, -270, -270, -270, -270, -270, -270, -270, -270, -270,
+     -270, -270, -270, -270, -270, -270, -270, -270, -270, -270,
 
      -270, -270, -270, -270, -270, -270, -270, -270, -270, -270,
      -270, -270, -270, -270, -270, -270, -270, -270, -270, -270,
@@ -8946,35 +8946,35 @@
     },
 
     {
-       39, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
+       39,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
 
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271,  290, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293, -271,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293, -271,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
 
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
 
-     -271, -271, -271, -271, -271, -271, -271, -271, -271, -271,
-     -271, -271, -271, -271, -271, -271
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293
     },
 
     {
@@ -8982,21 +8982,21 @@
      -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
      -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
      -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
+     -272, -272, -272,  271, -272,  271, -272, -272, -272, -272,
      -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
      -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
-     -272, -272,  291, -272, -272, -272, -272, -272, -272, -272,
      -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
 
      -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
+     -272, -272, -272,  274, -272, -272, -272, -272, -272, -272,
      -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
      -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
+     -272, -272, -272,  249, -272, -272, -272, -272, -272, -272,
      -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
      -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
      -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
      -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
      -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
-     -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
-     -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
 
      -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
      -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
@@ -9020,8 +9020,8 @@
      -273, -273, -273, -273, -273, -273, -273, -273, -273, -273,
      -273, -273, -273, -273, -273, -273, -273, -273, -273, -273,
      -273, -273, -273, -273, -273, -273, -273, -273, -273, -273,
+     -273, -273, -273, -273,  272, -273, -273, -273,  272, -273,
      -273, -273, -273, -273, -273, -273, -273, -273, -273, -273,
-     -273, -273, -273, -273, -273, -273, -273, -273, -273, -273,
 
      -273, -273, -273, -273, -273, -273, -273, -273, -273, -273,
      -273, -273, -273, -273, -273, -273, -273, -273, -273, -273,
@@ -9051,7 +9051,6 @@
      -274, -274, -274, -274, -274, -274, -274, -274, -274, -274,
      -274, -274, -274, -274, -274, -274, -274, -274, -274, -274,
      -274, -274, -274, -274, -274, -274, -274, -274, -274, -274,
-     -274, -274, -274,  292, -274, -274, -274, -274, -274, -274,
      -274, -274, -274, -274, -274, -274, -274, -274, -274, -274,
      -274, -274, -274, -274, -274, -274, -274, -274, -274, -274,
      -274, -274, -274, -274, -274, -274, -274, -274, -274, -274,
@@ -9058,6 +9057,7 @@
      -274, -274, -274, -274, -274, -274, -274, -274, -274, -274,
      -274, -274, -274, -274, -274, -274, -274, -274, -274, -274,
      -274, -274, -274, -274, -274, -274, -274, -274, -274, -274,
+     -274, -274, -274, -274, -274, -274, -274, -274, -274, -274,
 
      -274, -274, -274, -274, -274, -274, -274, -274, -274, -274,
      -274, -274, -274, -274, -274, -274, -274, -274, -274, -274,
@@ -9109,6 +9109,7 @@
      -276, -276, -276, -276, -276, -276, -276, -276, -276, -276,
      -276, -276, -276, -276, -276, -276, -276, -276, -276, -276,
 
+     -276, -276, -276, -276, -276, -276, -276, -276,  294,  295,
      -276, -276, -276, -276, -276, -276, -276, -276, -276, -276,
      -276, -276, -276, -276, -276, -276, -276, -276, -276, -276,
      -276, -276, -276, -276, -276, -276, -276, -276, -276, -276,
@@ -9116,9 +9117,8 @@
      -276, -276, -276, -276, -276, -276, -276, -276, -276, -276,
      -276, -276, -276, -276, -276, -276, -276, -276, -276, -276,
      -276, -276, -276, -276, -276, -276, -276, -276, -276, -276,
+     -276, -276, -276, -276, -276,  296, -276, -276, -276, -276,
      -276, -276, -276, -276, -276, -276, -276, -276, -276, -276,
-     -276, -276, -276, -276, -276, -276, -276, -276, -276, -276,
-     -276, -276, -276, -276, -276, -276, -276, -276, -276, -276,
 
      -276, -276, -276, -276, -276, -276, -276, -276, -276, -276,
      -276, -276, -276, -276, -276, -276, -276, -276, -276, -276,
@@ -9148,6 +9148,7 @@
      -277, -277, -277, -277, -277, -277, -277, -277, -277, -277,
      -277, -277, -277, -277, -277, -277, -277, -277, -277, -277,
      -277, -277, -277, -277, -277, -277, -277, -277, -277, -277,
+     -277, -277, -277, -277,  297, -277, -277, -277, -277, -277,
      -277, -277, -277, -277, -277, -277, -277, -277, -277, -277,
      -277, -277, -277, -277, -277, -277, -277, -277, -277, -277,
      -277, -277, -277, -277, -277, -277, -277, -277, -277, -277,
@@ -9154,7 +9155,6 @@
      -277, -277, -277, -277, -277, -277, -277, -277, -277, -277,
      -277, -277, -277, -277, -277, -277, -277, -277, -277, -277,
      -277, -277, -277, -277, -277, -277, -277, -277, -277, -277,
-     -277, -277, -277, -277, -277, -277, -277, -277, -277, -277,
 
      -277, -277, -277, -277, -277, -277, -277, -277, -277, -277,
      -277, -277, -277, -277, -277, -277, -277, -277, -277, -277,
@@ -9173,6 +9173,7 @@
      -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
      -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
      -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
+     -278, -278, -278, -278, -278, -278, -278, -278, -278,  298,
      -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
      -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
      -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
@@ -9179,8 +9180,8 @@
      -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
      -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
      -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
-     -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
 
+     -278, -278, -278,  299, -278,  300, -278, -278, -278, -278,
      -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
      -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
      -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
@@ -9190,7 +9191,6 @@
      -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
      -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
      -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
-     -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
 
      -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
      -278, -278, -278, -278, -278, -278, -278, -278, -278, -278,
@@ -9203,8 +9203,8 @@
      -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
      -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
      -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
+     -279, -279, -279, -279, -279, -279, -279, -279,  301,  302,
      -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
-     -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
 
      -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
      -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
@@ -9212,10 +9212,10 @@
      -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
      -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
      -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
+     -279, -279, -279, -279, -279,  303, -279, -279, -279, -279,
      -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
      -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
      -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
-     -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
 
      -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
      -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
@@ -9237,10 +9237,10 @@
      -280, -280, -280, -280, -280, -280, -280, -280, -280, -280,
      -280, -280, -280, -280, -280, -280, -280, -280, -280, -280,
      -280, -280, -280, -280, -280, -280, -280, -280, -280, -280,
+     -280, -280,  304, -280, -280, -280, -280, -280, -280, -280,
      -280, -280, -280, -280, -280, -280, -280, -280, -280, -280,
      -280, -280, -280, -280, -280, -280, -280, -280, -280, -280,
      -280, -280, -280, -280, -280, -280, -280, -280, -280, -280,
-     -280, -280, -280,  293, -280, -280, -280, -280, -280, -280,
 
      -280, -280, -280, -280, -280, -280, -280, -280, -280, -280,
      -280, -280, -280, -280, -280, -280, -280, -280, -280, -280,
@@ -9272,11 +9272,11 @@
      -281, -281, -281, -281, -281, -281, -281, -281, -281, -281,
      -281, -281, -281, -281, -281, -281, -281, -281, -281, -281,
      -281, -281, -281, -281, -281, -281, -281, -281, -281, -281,
-     -281, -281, -281,  294, -281, -281, -281, -281, -281, -281,
      -281, -281, -281, -281, -281, -281, -281, -281, -281, -281,
      -281, -281, -281, -281, -281, -281, -281, -281, -281, -281,
      -281, -281, -281, -281, -281, -281, -281, -281, -281, -281,
      -281, -281, -281, -281, -281, -281, -281, -281, -281, -281,
+     -281, -281, -281, -281, -281, -281, -281, -281, -281, -281,
 
      -281, -281, -281, -281, -281, -281, -281, -281, -281, -281,
      -281, -281, -281, -281, -281, -281, -281, -281, -281, -281,
@@ -9299,15 +9299,15 @@
      -282, -282, -282, -282, -282, -282, -282, -282, -282, -282,
      -282, -282, -282, -282, -282, -282, -282, -282, -282, -282,
      -282, -282, -282, -282, -282, -282, -282, -282, -282, -282,
-     -282, -282, -282, -282, -282, -282, -282, -282, -282,  295,
      -282, -282, -282, -282, -282, -282, -282, -282, -282, -282,
      -282, -282, -282, -282, -282, -282, -282, -282, -282, -282,
+     -282, -282, -282, -282, -282, -282, -282, -282, -282, -282,
 
      -282, -282, -282, -282, -282, -282, -282, -282, -282, -282,
+     -282, -282, -282,  305, -282, -282, -282, -282, -282, -282,
      -282, -282, -282, -282, -282, -282, -282, -282, -282, -282,
      -282, -282, -282, -282, -282, -282, -282, -282, -282, -282,
      -282, -282, -282, -282, -282, -282, -282, -282, -282, -282,
-     -282, -282, -282,  296, -282,  297, -282, -282, -282, -282,
      -282, -282, -282, -282, -282, -282, -282, -282, -282, -282,
      -282, -282, -282, -282, -282, -282, -282, -282, -282, -282,
      -282, -282, -282, -282, -282, -282, -282, -282, -282, -282,
@@ -9330,7 +9330,6 @@
 
      -283, -283, -283, -283, -283, -283, -283, -283, -283, -283,
      -283, -283, -283, -283, -283, -283, -283, -283, -283, -283,
-     -283, -283, -283, -283, -283, -283, -283, -283,  298,  298,
      -283, -283, -283, -283, -283, -283, -283, -283, -283, -283,
      -283, -283, -283, -283, -283, -283, -283, -283, -283, -283,
      -283, -283, -283, -283, -283, -283, -283, -283, -283, -283,
@@ -9338,6 +9337,7 @@
      -283, -283, -283, -283, -283, -283, -283, -283, -283, -283,
      -283, -283, -283, -283, -283, -283, -283, -283, -283, -283,
      -283, -283, -283, -283, -283, -283, -283, -283, -283, -283,
+     -283, -283, -283, -283, -283, -283, -283, -283, -283, -283,
 
      -283, -283, -283, -283, -283, -283, -283, -283, -283, -283,
      -283, -283, -283, -283, -283, -283, -283, -283, -283, -283,
@@ -9357,34 +9357,34 @@
     },
 
     {
-       39,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
+       39, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
 
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  266,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  299,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
 
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  284,  284,  284
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284, -284, -284, -284, -284,
+     -284, -284, -284, -284, -284, -284
 
     },
 
@@ -9398,7 +9398,7 @@
      -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
      -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
      -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
-     -285, -285, -285,  300, -285, -285, -285, -285, -285, -285,
+     -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
 
      -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
      -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
@@ -9426,7 +9426,6 @@
      -286, -286, -286, -286, -286, -286, -286, -286, -286, -286,
 
      -286, -286, -286, -286, -286, -286, -286, -286, -286, -286,
-     -286, -286, -286, -286, -286, -286, -286, -286,  301, -286,
      -286, -286, -286, -286, -286, -286, -286, -286, -286, -286,
      -286, -286, -286, -286, -286, -286, -286, -286, -286, -286,
      -286, -286, -286, -286, -286, -286, -286, -286, -286, -286,
@@ -9435,6 +9434,7 @@
      -286, -286, -286, -286, -286, -286, -286, -286, -286, -286,
      -286, -286, -286, -286, -286, -286, -286, -286, -286, -286,
      -286, -286, -286, -286, -286, -286, -286, -286, -286, -286,
+     -286, -286, -286, -286, -286, -286, -286, -286, -286, -286,
 
      -286, -286, -286, -286, -286, -286, -286, -286, -286, -286,
      -286, -286, -286, -286, -286, -286, -286, -286, -286, -286,
@@ -9464,6 +9464,7 @@
      -287, -287, -287, -287, -287, -287, -287, -287, -287, -287,
      -287, -287, -287, -287, -287, -287, -287, -287, -287, -287,
      -287, -287, -287, -287, -287, -287, -287, -287, -287, -287,
+     -287, -287, -287, -287, -287, -287,  306, -287, -287, -287,
      -287, -287, -287, -287, -287, -287, -287, -287, -287, -287,
      -287, -287, -287, -287, -287, -287, -287, -287, -287, -287,
      -287, -287, -287, -287, -287, -287, -287, -287, -287, -287,
@@ -9470,7 +9471,6 @@
      -287, -287, -287, -287, -287, -287, -287, -287, -287, -287,
      -287, -287, -287, -287, -287, -287, -287, -287, -287, -287,
      -287, -287, -287, -287, -287, -287, -287, -287, -287, -287,
-     -287, -287, -287, -287, -287, -287, -287, -287, -287, -287,
 
      -287, -287, -287, -287, -287, -287, -287, -287, -287, -287,
      -287, -287, -287, -287, -287, -287, -287, -287, -287, -287,
@@ -9493,9 +9493,9 @@
      -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
      -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
      -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
-     -288, -288, -288,  302, -288, -288, -288, -288, -288, -288,
      -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
      -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
+     -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
 
      -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
      -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
@@ -9525,7 +9525,7 @@
      -289, -289, -289, -289, -289, -289, -289, -289, -289, -289,
      -289, -289, -289, -289, -289, -289, -289, -289, -289, -289,
      -289, -289, -289, -289, -289, -289, -289, -289, -289, -289,
-     -289, -289, -289,  303, -289, -289, -289, -289, -289, -289,
+     -289, -289, -289,  307, -289, -289, -289, -289, -289, -289,
      -289, -289, -289, -289, -289, -289, -289, -289, -289, -289,
      -289, -289, -289, -289, -289, -289, -289, -289, -289, -289,
      -289, -289, -289, -289, -289, -289, -289, -289, -289, -289,
@@ -9556,7 +9556,7 @@
      -290, -290, -290, -290, -290, -290, -290, -290, -290, -290,
      -290, -290, -290, -290, -290, -290, -290, -290, -290, -290,
      -290, -290, -290, -290, -290, -290, -290, -290, -290, -290,
-     -290, -290, -290,  304, -290, -290, -290, -290, -290, -290,
+     -290, -290, -290,  308, -290, -290, -290, -290, -290, -290,
 
      -290, -290, -290, -290, -290, -290, -290, -290, -290, -290,
      -290, -290, -290, -290, -290, -290, -290, -290, -290, -290,
@@ -9584,6 +9584,7 @@
      -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
 
      -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
+     -291, -291, -291, -291, -291, -291, -291, -291, -291,  309,
      -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
      -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
      -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
@@ -9590,9 +9591,8 @@
      -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
      -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
      -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
+     -291, -291, -291,  310, -291,  311, -291, -291, -291, -291,
      -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
-     -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
-     -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
 
      -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
      -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
@@ -9614,10 +9614,10 @@
      -292, -292, -292, -292, -292, -292, -292, -292, -292, -292,
      -292, -292, -292, -292, -292, -292, -292, -292, -292, -292,
      -292, -292, -292, -292, -292, -292, -292, -292, -292, -292,
+     -292, -292, -292, -292, -292, -292, -292, -292,  312,  312,
      -292, -292, -292, -292, -292, -292, -292, -292, -292, -292,
      -292, -292, -292, -292, -292, -292, -292, -292, -292, -292,
      -292, -292, -292, -292, -292, -292, -292, -292, -292, -292,
-     -292, -292, -292, -292, -292, -292, -292, -292, -292, -292,
 
      -292, -292, -292, -292, -292, -292, -292, -292, -292, -292,
      -292, -292, -292, -292, -292, -292, -292, -292, -292, -292,
@@ -9641,35 +9641,35 @@
     },
 
     {
-       39, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+       39,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
 
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  274,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
 
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+      293,  293,  293,  313,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
 
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
-     -293, -293, -293, -293, -293, -293
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  293,  293
     },
 
     {
@@ -9683,6 +9683,7 @@
      -294, -294, -294, -294, -294, -294, -294, -294, -294, -294,
      -294, -294, -294, -294, -294, -294, -294, -294, -294, -294,
      -294, -294, -294, -294, -294, -294, -294, -294, -294, -294,
+     -294, -294, -294,  314, -294, -294, -294, -294, -294, -294,
      -294, -294, -294, -294, -294, -294, -294, -294, -294, -294,
      -294, -294, -294, -294, -294, -294, -294, -294, -294, -294,
      -294, -294, -294, -294, -294, -294, -294, -294, -294, -294,
@@ -9689,7 +9690,6 @@
      -294, -294, -294, -294, -294, -294, -294, -294, -294, -294,
      -294, -294, -294, -294, -294, -294, -294, -294, -294, -294,
      -294, -294, -294, -294, -294, -294, -294, -294, -294, -294,
-     -294, -294, -294, -294, -294, -294, -294, -294, -294, -294,
 
      -294, -294, -294, -294, -294, -294, -294, -294, -294, -294,
      -294, -294, -294, -294, -294, -294, -294, -294, -294, -294,
@@ -9714,7 +9714,7 @@
      -295, -295, -295, -295, -295, -295, -295, -295, -295, -295,
      -295, -295, -295, -295, -295, -295, -295, -295, -295, -295,
      -295, -295, -295, -295, -295, -295, -295, -295, -295, -295,
-     -295, -295, -295, -295, -295, -295, -295, -295, -295, -295,
+     -295, -295, -295,  315, -295, -295, -295, -295, -295, -295,
 
      -295, -295, -295, -295, -295, -295, -295, -295, -295, -295,
      -295, -295, -295, -295, -295, -295, -295, -295, -295, -295,
@@ -9746,7 +9746,7 @@
      -296, -296, -296, -296, -296, -296, -296, -296, -296, -296,
      -296, -296, -296, -296, -296, -296, -296, -296, -296, -296,
      -296, -296, -296, -296, -296, -296, -296, -296, -296, -296,
-     -296, -296, -296,  305, -296, -296, -296, -296, -296, -296,
+     -296, -296, -296,  316, -296, -296, -296, -296, -296, -296,
      -296, -296, -296, -296, -296, -296, -296, -296, -296, -296,
      -296, -296, -296, -296, -296, -296, -296, -296, -296, -296,
      -296, -296, -296, -296, -296, -296, -296, -296, -296, -296,
@@ -9773,12 +9773,11 @@
      -297, -297, -297, -297, -297, -297, -297, -297, -297, -297,
      -297, -297, -297, -297, -297, -297, -297, -297, -297, -297,
      -297, -297, -297, -297, -297, -297, -297, -297, -297, -297,
+     -297, -297, -297, -297, -297, -297, -297, -297,  317, -297,
      -297, -297, -297, -297, -297, -297, -297, -297, -297, -297,
      -297, -297, -297, -297, -297, -297, -297, -297, -297, -297,
-     -297, -297, -297, -297, -297, -297, -297, -297, -297, -297,
 
      -297, -297, -297, -297, -297, -297, -297, -297, -297, -297,
-     -297, -297, -297,  306, -297, -297, -297, -297, -297, -297,
      -297, -297, -297, -297, -297, -297, -297, -297, -297, -297,
      -297, -297, -297, -297, -297, -297, -297, -297, -297, -297,
      -297, -297, -297, -297, -297, -297, -297, -297, -297, -297,
@@ -9787,6 +9786,7 @@
      -297, -297, -297, -297, -297, -297, -297, -297, -297, -297,
      -297, -297, -297, -297, -297, -297, -297, -297, -297, -297,
      -297, -297, -297, -297, -297, -297, -297, -297, -297, -297,
+     -297, -297, -297, -297, -297, -297, -297, -297, -297, -297,
 
      -297, -297, -297, -297, -297, -297, -297, -297, -297, -297,
      -297, -297, -297, -297, -297, -297, -297, -297, -297, -297,
@@ -9805,7 +9805,6 @@
      -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
      -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
      -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
-     -298, -298, -298, -298, -298, -298, -298, -298, -298,  307,
      -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
      -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
      -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
@@ -9812,8 +9811,8 @@
      -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
      -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
      -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
+     -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
 
-     -298, -298, -298,  308, -298,  309, -298, -298, -298, -298,
      -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
      -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
      -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
@@ -9823,6 +9822,7 @@
      -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
      -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
      -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
+     -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
 
      -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
      -298, -298, -298, -298, -298, -298, -298, -298, -298, -298,
@@ -9841,7 +9841,7 @@
      -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
      -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
      -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
-     -299, -299, -299,  266, -299, -299, -299, -299, -299, -299,
+     -299, -299, -299,  318, -299, -299, -299, -299, -299, -299,
      -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
      -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
      -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
@@ -9872,7 +9872,7 @@
      -300, -300, -300, -300, -300, -300, -300, -300, -300, -300,
      -300, -300, -300, -300, -300, -300, -300, -300, -300, -300,
      -300, -300, -300, -300, -300, -300, -300, -300, -300, -300,
-     -300, -300, -300, -300, -300, -300, -300, -300, -300, -300,
+     -300, -300, -300,  319, -300, -300, -300, -300, -300, -300,
 
      -300, -300, -300, -300, -300, -300, -300, -300, -300, -300,
      -300, -300, -300, -300, -300, -300, -300, -300, -300, -300,
@@ -9899,16 +9899,16 @@
      -301, -301, -301, -301, -301, -301, -301, -301, -301, -301,
      -301, -301, -301, -301, -301, -301, -301, -301, -301, -301,
 
-     -301, -301, -301, -301, -301, -301, -301, -301,  310,  310,
-      310, -301, -301, -301, -301, -301, -301, -301, -301, -301,
      -301, -301, -301, -301, -301, -301, -301, -301, -301, -301,
      -301, -301, -301, -301, -301, -301, -301, -301, -301, -301,
      -301, -301, -301, -301, -301, -301, -301, -301, -301, -301,
      -301, -301, -301, -301, -301, -301, -301, -301, -301, -301,
      -301, -301, -301, -301, -301, -301, -301, -301, -301, -301,
+     -301, -301, -301,  320, -301, -301, -301, -301, -301, -301,
      -301, -301, -301, -301, -301, -301, -301, -301, -301, -301,
      -301, -301, -301, -301, -301, -301, -301, -301, -301, -301,
      -301, -301, -301, -301, -301, -301, -301, -301, -301, -301,
+     -301, -301, -301, -301, -301, -301, -301, -301, -301, -301,
 
      -301, -301, -301, -301, -301, -301, -301, -301, -301, -301,
      -301, -301, -301, -301, -301, -301, -301, -301, -301, -301,
@@ -9936,6 +9936,7 @@
      -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
 
      -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
+     -302, -302, -302,  321, -302, -302, -302, -302, -302, -302,
      -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
      -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
      -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
@@ -9944,7 +9945,6 @@
      -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
      -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
      -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
-     -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
 
      -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
      -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
@@ -9967,9 +9967,9 @@
      -303, -303, -303, -303, -303, -303, -303, -303, -303, -303,
      -303, -303, -303, -303, -303, -303, -303, -303, -303, -303,
      -303, -303, -303, -303, -303, -303, -303, -303, -303, -303,
+     -303, -303, -303,  322, -303, -303, -303, -303, -303, -303,
      -303, -303, -303, -303, -303, -303, -303, -303, -303, -303,
      -303, -303, -303, -303, -303, -303, -303, -303, -303, -303,
-     -303, -303, -303, -303, -303, -303, -303, -303, -303, -303,
 
      -303, -303, -303, -303, -303, -303, -303, -303, -303, -303,
      -303, -303, -303, -303, -303, -303, -303, -303, -303, -303,
@@ -10064,9 +10064,9 @@
      -306, -306, -306, -306, -306, -306, -306, -306, -306, -306,
      -306, -306, -306, -306, -306, -306, -306, -306, -306, -306,
      -306, -306, -306, -306, -306, -306, -306, -306, -306, -306,
+     -306,  323, -306, -306, -306, -306, -306, -306, -306, -306,
      -306, -306, -306, -306, -306, -306, -306, -306, -306, -306,
      -306, -306, -306, -306, -306, -306, -306, -306, -306, -306,
-     -306, -306, -306, -306, -306, -306, -306, -306, -306, -306,
 
      -306, -306, -306, -306, -306, -306, -306, -306, -306, -306,
      -306, -306, -306, -306, -306, -306, -306, -306, -306, -306,
@@ -10125,9 +10125,9 @@
      -308, -308, -308, -308, -308, -308, -308, -308, -308, -308,
      -308, -308, -308, -308, -308, -308, -308, -308, -308, -308,
      -308, -308, -308, -308, -308, -308, -308, -308, -308, -308,
-     -308, -308, -308,  311, -308, -308, -308, -308, -308, -308,
      -308, -308, -308, -308, -308, -308, -308, -308, -308, -308,
      -308, -308, -308, -308, -308, -308, -308, -308, -308, -308,
+     -308, -308, -308, -308, -308, -308, -308, -308, -308, -308,
 
      -308, -308, -308, -308, -308, -308, -308, -308, -308, -308,
      -308, -308, -308, -308, -308, -308, -308, -308, -308, -308,
@@ -10157,7 +10157,6 @@
      -309, -309, -309, -309, -309, -309, -309, -309, -309, -309,
      -309, -309, -309, -309, -309, -309, -309, -309, -309, -309,
      -309, -309, -309, -309, -309, -309, -309, -309, -309, -309,
-     -309, -309, -309,  312, -309, -309, -309, -309, -309, -309,
      -309, -309, -309, -309, -309, -309, -309, -309, -309, -309,
      -309, -309, -309, -309, -309, -309, -309, -309, -309, -309,
      -309, -309, -309, -309, -309, -309, -309, -309, -309, -309,
@@ -10164,6 +10163,7 @@
      -309, -309, -309, -309, -309, -309, -309, -309, -309, -309,
      -309, -309, -309, -309, -309, -309, -309, -309, -309, -309,
      -309, -309, -309, -309, -309, -309, -309, -309, -309, -309,
+     -309, -309, -309, -309, -309, -309, -309, -309, -309, -309,
 
      -309, -309, -309, -309, -309, -309, -309, -309, -309, -309,
      -309, -309, -309, -309, -309, -309, -309, -309, -309, -309,
@@ -10184,15 +10184,14 @@
      -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
      -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
      -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
-     -310, -310, -310, -310, -310, -310, -310, -310, -310,  313,
      -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
      -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
      -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
      -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
+     -310, -310, -310,  324, -310, -310, -310, -310, -310, -310,
 
      -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
      -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
-     -310, -310, -310,  314, -310,  315, -310, -310, -310, -310,
      -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
      -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
      -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
@@ -10200,6 +10199,7 @@
      -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
      -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
      -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
+     -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
 
      -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
      -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
@@ -10220,11 +10220,11 @@
      -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
      -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
      -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+     -311, -311, -311,  325, -311, -311, -311, -311, -311, -311,
      -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
      -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
      -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
      -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-     -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
 
      -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
      -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
@@ -10247,20 +10247,20 @@
      -312, -312, -312, -312, -312, -312, -312, -312, -312, -312,
      -312, -312, -312, -312, -312, -312, -312, -312, -312, -312,
      -312, -312, -312, -312, -312, -312, -312, -312, -312, -312,
+     -312, -312, -312, -312, -312, -312, -312, -312, -312,  326,
      -312, -312, -312, -312, -312, -312, -312, -312, -312, -312,
      -312, -312, -312, -312, -312, -312, -312, -312, -312, -312,
-     -312, -312, -312, -312, -312, -312, -312, -312, -312, -312,
 
      -312, -312, -312, -312, -312, -312, -312, -312, -312, -312,
      -312, -312, -312, -312, -312, -312, -312, -312, -312, -312,
      -312, -312, -312, -312, -312, -312, -312, -312, -312, -312,
      -312, -312, -312, -312, -312, -312, -312, -312, -312, -312,
+     -312, -312, -312,  327, -312,  328, -312, -312, -312, -312,
      -312, -312, -312, -312, -312, -312, -312, -312, -312, -312,
      -312, -312, -312, -312, -312, -312, -312, -312, -312, -312,
      -312, -312, -312, -312, -312, -312, -312, -312, -312, -312,
      -312, -312, -312, -312, -312, -312, -312, -312, -312, -312,
      -312, -312, -312, -312, -312, -312, -312, -312, -312, -312,
-     -312, -312, -312, -312, -312, -312, -312, -312, -312, -312,
 
      -312, -312, -312, -312, -312, -312, -312, -312, -312, -312,
      -312, -312, -312, -312, -312, -312, -312, -312, -312, -312,
@@ -10273,35 +10273,35 @@
     },
 
     {
-       39,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
+       39, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
 
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316, -313,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313,  274, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
 
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
 
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313, -313, -313, -313, -313,
+     -313, -313, -313, -313, -313, -313
     },
 
     {
@@ -10315,7 +10315,6 @@
      -314, -314, -314, -314, -314, -314, -314, -314, -314, -314,
      -314, -314, -314, -314, -314, -314, -314, -314, -314, -314,
      -314, -314, -314, -314, -314, -314, -314, -314, -314, -314,
-     -314, -314, -314,  317, -314, -314, -314, -314, -314, -314,
      -314, -314, -314, -314, -314, -314, -314, -314, -314, -314,
      -314, -314, -314, -314, -314, -314, -314, -314, -314, -314,
      -314, -314, -314, -314, -314, -314, -314, -314, -314, -314,
@@ -10322,6 +10321,7 @@
      -314, -314, -314, -314, -314, -314, -314, -314, -314, -314,
      -314, -314, -314, -314, -314, -314, -314, -314, -314, -314,
      -314, -314, -314, -314, -314, -314, -314, -314, -314, -314,
+     -314, -314, -314, -314, -314, -314, -314, -314, -314, -314,
 
      -314, -314, -314, -314, -314, -314, -314, -314, -314, -314,
      -314, -314, -314, -314, -314, -314, -314, -314, -314, -314,
@@ -10346,7 +10346,7 @@
      -315, -315, -315, -315, -315, -315, -315, -315, -315, -315,
      -315, -315, -315, -315, -315, -315, -315, -315, -315, -315,
      -315, -315, -315, -315, -315, -315, -315, -315, -315, -315,
-     -315, -315, -315,  318, -315, -315, -315, -315, -315, -315,
+     -315, -315, -315, -315, -315, -315, -315, -315, -315, -315,
 
      -315, -315, -315, -315, -315, -315, -315, -315, -315, -315,
      -315, -315, -315, -315, -315, -315, -315, -315, -315, -315,
@@ -10368,35 +10368,35 @@
     },
 
     {
-       39,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
+       39, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
 
-      316,  316,  316,  316,  319,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
 
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
 
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316
+     -316, -316, -316, -316, -316, -316, -316, -316, -316, -316,
+     -316, -316, -316, -316, -316, -316
     },
 
     {
@@ -10404,10 +10404,10 @@
      -317, -317, -317, -317, -317, -317, -317, -317, -317, -317,
      -317, -317, -317, -317, -317, -317, -317, -317, -317, -317,
      -317, -317, -317, -317, -317, -317, -317, -317, -317, -317,
+     -317, -317, -317, -317, -317, -317, -317, -317,  329,  329,
+      329, -317, -317, -317, -317, -317, -317, -317, -317, -317,
      -317, -317, -317, -317, -317, -317, -317, -317, -317, -317,
      -317, -317, -317, -317, -317, -317, -317, -317, -317, -317,
-     -317, -317, -317, -317, -317, -317, -317, -317, -317, -317,
-     -317, -317, -317, -317, -317, -317, -317, -317, -317, -317,
 
      -317, -317, -317, -317, -317, -317, -317, -317, -317, -317,
      -317, -317, -317, -317, -317, -317, -317, -317, -317, -317,
@@ -10463,66 +10463,66 @@
     },
 
     {
-       39,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
+       39, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
 
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320, -319,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
 
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319, -319, -319, -319, -319,
+     -319, -319, -319, -319, -319, -319
 
     },
 
     {
-       39,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  321,  320,  320,  320,  320,  320,  320,
+       39, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
 
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
 
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  320,  320
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320, -320, -320, -320, -320,
+     -320, -320, -320, -320, -320, -320
     },
 
     {
@@ -10557,6 +10557,669 @@
      -321, -321, -321, -321, -321, -321
     },
 
+    {
+       39, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322, -322, -322, -322, -322,
+     -322, -322, -322, -322, -322, -322
+    },
+
+    {
+       39, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323,  330, -323, -323, -323, -323,
+
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323, -323, -323, -323, -323,
+     -323, -323, -323, -323, -323, -323
+    },
+
+    {
+       39, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324, -324, -324, -324, -324,
+     -324, -324, -324, -324, -324, -324
+
+    },
+
+    {
+       39, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
+     -325, -325, -325, -325, -325, -325
+    },
+
+    {
+       39, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+
+     -326, -326, -326, -326, -326, -326, -326, -326, -326, -326,
+     -326, -326, -326, -326, -326, -326
+    },
+
+    {
+       39, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327,  331, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327, -327, -327, -327, -327,
+     -327, -327, -327, -327, -327, -327
+    },
+
+    {
+       39, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328,  332, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328, -328, -328, -328, -328,
+     -328, -328, -328, -328, -328, -328
+    },
+
+    {
+       39, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329,  333,
+
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329,  334, -329,  335, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329, -329, -329, -329, -329,
+     -329, -329, -329, -329, -329, -329
+
+    },
+
+    {
+       39, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330,  336, -330, -330, -330, -330, -330, -330,
+
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330, -330, -330, -330, -330,
+     -330, -330, -330, -330, -330, -330
+    },
+
+    {
+       39, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+
+     -331, -331, -331, -331, -331, -331, -331, -331, -331, -331,
+     -331, -331, -331, -331, -331, -331
+    },
+
+    {
+       39, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332, -332, -332, -332, -332,
+     -332, -332, -332, -332, -332, -332
+    },
+
+    {
+       39,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337, -333,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337
+    },
+
+    {
+       39, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334,  338, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334, -334, -334, -334, -334,
+     -334, -334, -334, -334, -334, -334
+
+    },
+
+    {
+       39, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335,  339, -335, -335, -335, -335, -335, -335,
+
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335, -335, -335, -335, -335,
+     -335, -335, -335, -335, -335, -335
+    },
+
+    {
+       39, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+
+     -336, -336, -336, -336, -336, -336, -336, -336, -336, -336,
+     -336, -336, -336, -336, -336, -336
+    },
+
+    {
+       39,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  340,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337
+    },
+
+    {
+       39, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338, -338, -338, -338, -338,
+     -338, -338, -338, -338, -338, -338
+    },
+
+    {
+       39, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339, -339, -339, -339, -339,
+     -339, -339, -339, -339, -339, -339
+
+    },
+
+    {
+       39,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341, -340,  341,  341,  341,  341,  341,  341,
+
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341
+    },
+
+    {
+       39,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  342,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341
+    },
+
+    {
+       39, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342, -342, -342, -342, -342,
+     -342, -342, -342, -342, -342, -342
+    },
+
     } ;
 
 static yy_state_type yy_get_previous_state (void );
@@ -10577,8 +11240,8 @@
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 141
-#define YY_END_OF_BUFFER 142
+#define YY_NUM_RULES 151
+#define YY_END_OF_BUFFER 152
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -10586,50 +11249,52 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int32_t yy_accept[322] =
+static yyconst flex_int32_t yy_accept[343] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    3,    3,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  142,  140,
-       63,   97,  140,   90,    1,  118,   76,  140,  120,   94,
-       79,   78,  123,  103,  122,  140,  115,  128,   82,  134,
-      132,   68,  140,   29,  119,   75,  112,  112,  125,  124,
-       81,  135,  133,  131,   89,   91,   65,   60,   61,  121,
-       36,   54,   37,   38,   34,   35,   39,    3,    2,   30,
-       31,   32,   33,  141,  141,  141,  141,  141,  141,  141,
+        0,    0,    0,    0,    0,    0,    0,    0,  152,  150,
+       69,  107,  150,  100,    1,  128,   83,  150,  130,  104,
+       86,   85,  133,  113,  132,  150,  125,  138,   89,  144,
+      142,   75,  150,   29,  129,   82,  122,  122,  135,  134,
+       88,  145,  143,  141,   99,  101,   72,   66,   67,  131,
+       36,   58,   37,   38,   34,   35,   39,    3,    2,   30,
+       31,   32,   33,  151,  151,  151,  151,  151,  151,  151,
 
-       46,  141,  141,   51,  141,  141,   63,  102,  101,   98,
-      118,   77,  116,  113,  120,   93,   96,   92,   40,   80,
-        0,    0,  117,   28,  114,  114,  115,    0,    0,    0,
-      129,  130,   69,   70,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  119,   62,   71,    0,  126,  127,   83,
-       84,   85,   86,   87,   88,   66,   67,   64,   36,   37,
-       38,   34,   35,   39,    3,    2,   30,   31,   32,   33,
-        0,    0,    0,    0,   41,    0,    0,    0,    0,   43,
-       46,   47,   48,   51,   52,   53,  100,   42,  116,   95,
-        0,    0,  117,   73,    0,  106,  108,  104,    0,    0,
+       48,  151,  151,   55,  151,  151,   69,  112,  111,  108,
+      128,   84,  126,  123,  130,  103,  106,  102,   40,   87,
+        0,    0,  127,   28,  124,  124,  125,    0,    0,    0,
+      139,  140,   76,   77,   64,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   65,  129,   68,   78,    0,  136,
+      137,   90,   91,   92,   93,   94,   95,   96,   97,   98,
+       73,   74,   71,   36,   37,   38,   34,   35,   39,    3,
+        2,   30,   31,   32,   33,    0,    0,    0,    0,   41,
+        0,    0,    0,    0,   43,   48,   49,   50,   55,   56,
+       57,  110,   42,  126,  105,    0,    0,  127,   80,    0,
 
+      116,  118,  114,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   72,    0,    0,   99,
-        0,    0,   74,  107,  109,  110,  105,    0,    5,    4,
-        0,   24,    0,   23,    0,    0,    0,   22,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  111,
-       25,    0,   20,   19,    0,    0,    0,    0,   18,    0,
-        0,    0,    0,    0,    0,   58,   59,   45,    0,    0,
-       50,    0,   26,    0,  137,  136,  139,  138,    6,    0,
-        0,    0,    0,    0,    0,    0,    7,    0,    0,    0,
-       27,   21,   10,   14,    8,    0,    0,    0,    0,   44,
+        0,    0,   79,    0,    0,  109,    0,    0,   81,  117,
+      119,  120,  115,    0,    5,    4,    0,   24,    0,   23,
+        0,    0,    0,    0,   22,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  121,   25,    0,   20,
+       19,    0,    0,    0,    0,   18,    0,    0,    0,    0,
+        0,    0,    0,   62,   63,   47,    0,    0,   54,    0,
+       26,    0,  147,  146,  149,  148,    0,    6,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    7,    0,    0,
 
-        0,   11,   15,   49,   12,   16,    9,    0,    0,    0,
-       13,   17,    0,    0,    0,    0,   56,   57,    0,    0,
-       55
+        0,    0,    0,   27,   21,    0,   10,   14,    8,    0,
+        0,    0,    0,   45,   44,   46,    0,   11,   15,   52,
+       51,   53,    0,   12,   16,    9,    0,    0,    0,    0,
+       13,   17,    0,    0,    0,   70,    0,   60,   61,    0,
+        0,   59
     } ;
 
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
 
-static yyconst yy_state_type yy_NUL_trans[322] =
+static yyconst yy_state_type yy_NUL_trans[343] =
     {   0,
        40,   40,   81,   81,   83,   83,   84,   84,   85,   85,
        86,   86,   87,   87,   88,   88,   90,   90,   91,   91,
@@ -10639,19 +11304,19 @@
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      159,    0,  160,  161,  162,  163,  164,  165,    0,  167,
-      168,  169,  170,    0,    0,    0,    0,    0,    0,    0,
+      164,    0,  165,  166,  167,  168,  169,  170,    0,  172,
+      173,  174,  175,    0,    0,    0,    0,    0,    0,    0,
 
-      181,  182,  183,  184,  185,  186,    0,    0,    0,    0,
+      186,  187,  188,  189,  190,  191,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  159,  160,
-      161,  162,  163,  164,  165,    0,  167,  168,  169,  170,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      181,  182,  183,  184,  185,  186,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  164,  165,  166,  167,  168,  169,  170,
+        0,  172,  173,  174,  175,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  186,  187,  188,  189,  190,
+      191,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -10659,14 +11324,16 @@
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  284,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  284,    0,    0,    0,    0,    0,    0,
+      293,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  293,    0,    0,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  316,    0,    0,  316,    0,    0,  320,  320,
-        0
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  337,    0,    0,    0,  337,    0,    0,  341,
+      341,    0
     } ;
 
 extern int gabc_notes_determination__flex_debug;
@@ -10686,7 +11353,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This file implements the note parser.
  *
- * Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *
@@ -10732,9 +11399,18 @@
 static unsigned short ledger_var[2] = { 0, 0 };
 static unsigned char staff_lines;
 static signed char highest_pitch;
+static signed char high_ledger_line_pitch;
 static bool legacy_oriscus_orientation;
 static unsigned short he_adjustment_index[2] = { 0, 0 };
+static signed char bracket_low_pitch, bracket_high_pitch;
+static unsigned short left_bracket_texverb = 0;
 
+#define LEDGER(WHICH, SPECIFICITY, VALUE) \
+    if (LEDGER_##SPECIFICITY > current_note->WHICH##_ledger_specificity) { \
+        current_note->WHICH##_ledger_line = VALUE; \
+        current_note->WHICH##_ledger_specificity = LEDGER_##SPECIFICITY; \
+    }
+
 typedef struct slur_info {
     unsigned short var;
     char shift;
@@ -10774,7 +11450,7 @@
     /* LCOV_EXCL_STOP */
 }
 
-static __inline char pitch_letter_to_height(const char pitch) {
+static __inline signed char pitch_letter_to_height(const char pitch) {
     char result = pitch - 'a' + LOWEST_PITCH;
     if (pitch == 'p') {
         --result;
@@ -10784,6 +11460,14 @@
                 _("invalid pitch for %u lines: %c"), (unsigned int)staff_lines,
                 pitch);
     }
+    if (left_bracket_texverb) {
+        if (result < bracket_low_pitch) {
+            bracket_low_pitch = result;
+        }
+        if (result > bracket_high_pitch) {
+            bracket_high_pitch = result;
+        }
+    }
     return result;
 }
 
@@ -10803,21 +11487,25 @@
 static __inline void lex_add_note(int i, gregorio_shape shape, char signs,
         char liquescentia)
 {
+    signed char height = pitch_letter_to_height(tolower(
+            (unsigned char)gabc_notes_determination_text[i]));
+
     nbof_isolated_episema = 0;
-    gregorio_add_note(&current_note, pitch_letter_to_height(
-            tolower((unsigned char)gabc_notes_determination_text[i])),
-            shape, signs, liquescentia, NULL, &notes_lloc);
+    gregorio_add_note(&current_note, height, shape, signs, liquescentia, NULL,
+            &notes_lloc);
     current_note->he_adjustment_index[SO_OVER] = he_adjustment_index[SO_OVER];
     current_note->he_adjustment_index[SO_UNDER] = he_adjustment_index[SO_UNDER];
 
-    if (ledger_var[SO_OVER]) {
-        current_note->supposed_high_ledger_line = true;
-        current_note->explicit_high_ledger_line = true;
+    if (height >= high_ledger_line_pitch) {
+        LEDGER(high, DRAWN, true);
+    } else if (ledger_var[SO_OVER]) {
+        LEDGER(high, EXPLICIT, true);
     }
 
-    if (ledger_var[SO_UNDER]) {
-        current_note->supposed_low_ledger_line = true;
-        current_note->explicit_low_ledger_line = true;
+    if (height <= LOW_LEDGER_LINE_PITCH) {
+        LEDGER(low, DRAWN, true);
+    } else if (ledger_var[SO_UNDER]) {
+        LEDGER(low, EXPLICIT, true);
     }
 }
 
@@ -11174,15 +11862,88 @@
     slur[index].start = NULL;
 }
 
-void parse_hepisema_adjustment(void)
+static void left_bracket(void)
 {
-    /* [xh:yz{]
-     * - x indicates l(ow) or h(igh) episema
-     * - y (optional) for l(ow), m(iddle), or h(igh) vertical position in space
-     * - z (optional) nudge dimension that starts with + or -
-     * - { (optional) starts a group
-     * - at least one of y, z, or w must be provided
-     * - if y and z are omitted, : may be omitted
+    if (left_bracket_texverb) {
+        gregorio_message(
+                _("cannot add a left bracket before closing the previous one"),
+                "left_bracket", VERBOSITY_ERROR, 0);
+        return;
+    }
+
+    /* when setting the left bracket, temporarily store the point-and-click
+     * information in the texverb */
+    if (notes_lloc.generate_point_and_click) {
+        gregorio_snprintf(tempstr, sizeof tempstr, "%u:%u:%u",
+                notes_lloc.first_line, notes_lloc.first_offset,
+                notes_lloc.first_column + 1);
+    } else {
+        tempstr[0] = '\0';
+    }
+    left_bracket_texverb = gregorio_add_texverb_as_note(&current_note,
+            gregorio_strdup(tempstr), GRE_TEXVERB_GLYPH, &notes_lloc);
+    bracket_low_pitch = MAX_PITCH;
+    bracket_high_pitch = LOWEST_PITCH;
+}
+
+static void right_bracket(void)
+{
+    if (!left_bracket_texverb) {
+        gregorio_message(
+                _("cannot add a right bracket without a matching left bracket"),
+                "right_bracket", VERBOSITY_ERROR, 0);
+        return;
+    }
+
+    if (bracket_high_pitch < bracket_low_pitch) {
+        gregorio_message(
+                _("cannot add brackets without notes between them"),
+                "right_bracket", VERBOSITY_ERROR, 0);
+        return;
+    }
+
+    gregorio_snprintf(tempstr, sizeof tempstr, "\\GreBracket{0}{%d}{%d}{%s}",
+            bracket_low_pitch, bracket_high_pitch,
+            gregorio_texverb(left_bracket_texverb));
+    gregorio_change_texverb(left_bracket_texverb, gregorio_strdup(tempstr));
+
+    if (notes_lloc.generate_point_and_click) {
+        gregorio_snprintf(tempstr, sizeof tempstr,
+                "\\GreBracket{1}{%d}{%d}{%u:%u:%u}", bracket_low_pitch,
+                bracket_high_pitch, notes_lloc.first_line,
+                notes_lloc.first_offset, notes_lloc.first_column + 1);
+    } else {
+        gregorio_snprintf(tempstr, sizeof tempstr,
+                "\\GreBracket{1}{%d}{%d}{}", bracket_low_pitch,
+                bracket_high_pitch);
+    }
+    gregorio_add_texverb_as_note(&current_note, gregorio_strdup(tempstr),
+            GRE_TEXVERB_GLYPH, &notes_lloc);
+
+    left_bracket_texverb = 0;
+}
+
+static void parse_hepisema_adjustment(void)
+{
+    /* See https://github.com/gregorio-project/gregorio/issues/872
+     *
+     * [xh:yzw]
+     *
+     * - x is o(ver) or u(under)
+     * - y is optional and is
+     *   - l for low in the space (chooses ol or ul depending on x)
+     *   - m for middle of the space
+     *   - h for high in the space (chooses oh or uh depending on x)
+     *   - ol for low in the space as if the episema were over the note
+     *   - oh for high in the space as if the episema were over the note
+     *   - ul for low in the space as if the episema were under the note
+     *   - uh for high in the space as if the episema were under the note
+     * - z is an optional nudge and must start with + or -
+     * - w is optional and may be { to start a range or } to end a range.
+     *
+     * at least one of y, z, or w must be provided
+     * if y and z are omitted, the : may be omitted
+     * y and z are not permitted when w is }
      */
 
     const gregorio_sign_orientation index = letter_to_sign_orientation(
@@ -11270,7 +12031,7 @@
     }
 }
 
-void end_hepisema_adjustment(void)
+static void end_hepisema_adjustment(void)
 {
     /* [xh:}]
      * - x indicates l(ow) or h(igh) episema
@@ -11324,6 +12085,11 @@
             ledger_var[orientation] = 0;
         }
     }
+    if (left_bracket_texverb) {
+        gregorio_message(_("unclosed left bracket"),
+                "gabc_det_notes_finish", VERBOSITY_ERROR, 0);
+        left_bracket_texverb = 0;
+    }
 }
 
 
@@ -11342,7 +12108,7 @@
 
 
 
-#line 11346 "gabc/gabc-notes-determination-l.c"
+#line 12112 "gabc/gabc-notes-determination-l.c"
 
 #define INITIAL 0
 #define texverbnote 1
@@ -11580,9 +12346,9 @@
 		}
 
 	{
-#line 680 "gabc/gabc-notes-determination.l"
+#line 779 "gabc/gabc-notes-determination.l"
 
-#line 11586 "gabc/gabc-notes-determination-l.c"
+#line 12352 "gabc/gabc-notes-determination-l.c"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -11629,7 +12395,7 @@
 
 case 1:
 YY_RULE_SETUP
-#line 681 "gabc/gabc-notes-determination.l"
+#line 780 "gabc/gabc-notes-determination.l"
 {
         BEGIN(comments);
     }
@@ -11637,7 +12403,7 @@
 case 2:
 /* rule 2 can match eol */
 YY_RULE_SETUP
-#line 684 "gabc/gabc-notes-determination.l"
+#line 783 "gabc/gabc-notes-determination.l"
 {
         BEGIN(INITIAL);
     }
@@ -11644,7 +12410,7 @@
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 687 "gabc/gabc-notes-determination.l"
+#line 786 "gabc/gabc-notes-determination.l"
 {
         /* ignored */
     }
@@ -11651,7 +12417,7 @@
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 690 "gabc/gabc-notes-determination.l"
+#line 789 "gabc/gabc-notes-determination.l"
 {
         BEGIN(choralsign);
     }
@@ -11658,7 +12424,7 @@
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 693 "gabc/gabc-notes-determination.l"
+#line 792 "gabc/gabc-notes-determination.l"
 {
         BEGIN(choralnabc);
     }
@@ -11665,7 +12431,7 @@
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 696 "gabc/gabc-notes-determination.l"
+#line 795 "gabc/gabc-notes-determination.l"
 {
         char_for_brace = gabc_notes_determination_text[4]-'0';
         BEGIN(overbrace);
@@ -11673,7 +12439,7 @@
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 700 "gabc/gabc-notes-determination.l"
+#line 799 "gabc/gabc-notes-determination.l"
 {
         char_for_brace = gabc_notes_determination_text[4]-'0';
         BEGIN(underbrace);
@@ -11681,7 +12447,7 @@
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 704 "gabc/gabc-notes-determination.l"
+#line 803 "gabc/gabc-notes-determination.l"
 {
         char_for_brace = gabc_notes_determination_text[5]-'0';
         BEGIN(overcurlybrace);
@@ -11689,7 +12455,7 @@
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 708 "gabc/gabc-notes-determination.l"
+#line 807 "gabc/gabc-notes-determination.l"
 {
         char_for_brace = gabc_notes_determination_text[6]-'0';
         BEGIN(overcurlyaccentusbrace);
@@ -11697,7 +12463,7 @@
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 712 "gabc/gabc-notes-determination.l"
+#line 811 "gabc/gabc-notes-determination.l"
 {
         if (overbrace_var) {
             gregorio_messagef("gabc_notes_determination", VERBOSITY_ERROR, 0,
@@ -11717,7 +12483,7 @@
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 728 "gabc/gabc-notes-determination.l"
+#line 827 "gabc/gabc-notes-determination.l"
 {
         if (underbrace_var) {
             gregorio_messagef("gabc_notes_determination", VERBOSITY_ERROR, 0,
@@ -11736,7 +12502,7 @@
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 743 "gabc/gabc-notes-determination.l"
+#line 842 "gabc/gabc-notes-determination.l"
 {
         if (overbrace_var) {
             gregorio_messagef("gabc_notes_determination", VERBOSITY_ERROR, 0,
@@ -11756,7 +12522,7 @@
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 759 "gabc/gabc-notes-determination.l"
+#line 858 "gabc/gabc-notes-determination.l"
 {
         if (overbrace_var) {
             gregorio_messagef("gabc_notes_determination", VERBOSITY_ERROR, 0,
@@ -11776,7 +12542,7 @@
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 775 "gabc/gabc-notes-determination.l"
+#line 874 "gabc/gabc-notes-determination.l"
 {
         if (!overbrace_var) {
             gregorio_messagef("gabc_notes_determination", VERBOSITY_ERROR, 0,
@@ -11799,7 +12565,7 @@
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 794 "gabc/gabc-notes-determination.l"
+#line 893 "gabc/gabc-notes-determination.l"
 {
         if (!underbrace_var) {
             gregorio_messagef("gabc_notes_determination", VERBOSITY_ERROR, 0,
@@ -11817,7 +12583,7 @@
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 808 "gabc/gabc-notes-determination.l"
+#line 907 "gabc/gabc-notes-determination.l"
 {
         if (!overbrace_var) {
             gregorio_messagef("gabc_notes_determination", VERBOSITY_ERROR, 0,
@@ -11840,7 +12606,7 @@
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 827 "gabc/gabc-notes-determination.l"
+#line 926 "gabc/gabc-notes-determination.l"
 {
         if (!overbrace_var) {
             gregorio_messagef("gabc_notes_determination", VERBOSITY_ERROR, 0,
@@ -11863,50 +12629,50 @@
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 846 "gabc/gabc-notes-determination.l"
+#line 945 "gabc/gabc-notes-determination.l"
 {
         if (notesmacros[gabc_notes_determination_text[3]-'0']) {
-            gregorio_add_texverb_to_note(current_note,
-            gregorio_strdup(notesmacros[gabc_notes_determination_text[3]-'0']));
+            gregorio_add_texverb_to_note(current_note, gregorio_strdup(
+                    notesmacros[gabc_notes_determination_text[3]-'0']));
         } else error();
     }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 852 "gabc/gabc-notes-determination.l"
+#line 951 "gabc/gabc-notes-determination.l"
 {
         if (notesmacros[gabc_notes_determination_text[3]-'0']) {
-            gregorio_add_texverb_as_note(&current_note,
-            gregorio_strdup(notesmacros[gabc_notes_determination_text[3]-'0']),
-            GRE_TEXVERB_GLYPH, &notes_lloc);
+            gregorio_add_texverb_as_note(&current_note, gregorio_strdup(
+                    notesmacros[gabc_notes_determination_text[3]-'0']),
+                    GRE_TEXVERB_GLYPH, &notes_lloc);
         } else error();
     }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 859 "gabc/gabc-notes-determination.l"
+#line 958 "gabc/gabc-notes-determination.l"
 {
         if (notesmacros[gabc_notes_determination_text[3]-'0']) {
-            gregorio_add_texverb_as_note(&current_note,
-            gregorio_strdup(notesmacros[gabc_notes_determination_text[3]-'0']),
-            GRE_TEXVERB_ELEMENT, &notes_lloc);
+            gregorio_add_texverb_as_note(&current_note, gregorio_strdup(
+                    notesmacros[gabc_notes_determination_text[3]-'0']),
+                    GRE_TEXVERB_ELEMENT, &notes_lloc);
         } else error();
     }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 866 "gabc/gabc-notes-determination.l"
+#line 965 "gabc/gabc-notes-determination.l"
 {
         if (notesmacros[gabc_notes_determination_text[5]-'0']) {
-            gregorio_add_texverb_as_note(&current_note,
-            gregorio_strdup(notesmacros[gabc_notes_determination_text[5]-'0']),
-            GRE_TEXVERB_ELEMENT, &notes_lloc);
+            gregorio_add_texverb_as_note(&current_note, gregorio_strdup(
+                    notesmacros[gabc_notes_determination_text[5]-'0']),
+                    GRE_TEXVERB_ELEMENT, &notes_lloc);
         } else error();
     }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 873 "gabc/gabc-notes-determination.l"
+#line 972 "gabc/gabc-notes-determination.l"
 {
         BEGIN(texverbnote);
     }
@@ -11913,7 +12679,7 @@
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 876 "gabc/gabc-notes-determination.l"
+#line 975 "gabc/gabc-notes-determination.l"
 {
         BEGIN(texverbglyph);
     }
@@ -11920,7 +12686,7 @@
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 879 "gabc/gabc-notes-determination.l"
+#line 978 "gabc/gabc-notes-determination.l"
 {
         BEGIN(texverbelement);
     }
@@ -11927,7 +12693,7 @@
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 882 "gabc/gabc-notes-determination.l"
+#line 981 "gabc/gabc-notes-determination.l"
 {
         BEGIN(alt);
     }
@@ -11934,7 +12700,7 @@
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 885 "gabc/gabc-notes-determination.l"
+#line 984 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_nlba_as_note(&current_note, NLBA_BEGINNING, &notes_lloc);
     }
@@ -11941,7 +12707,7 @@
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 888 "gabc/gabc-notes-determination.l"
+#line 987 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_nlba_as_note(&current_note, NLBA_END, &notes_lloc);
     }
@@ -11948,7 +12714,7 @@
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 891 "gabc/gabc-notes-determination.l"
+#line 990 "gabc/gabc-notes-determination.l"
 {
         gregorio_start_autofuse(&current_note, &notes_lloc);
     }
@@ -11955,7 +12721,7 @@
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 894 "gabc/gabc-notes-determination.l"
+#line 993 "gabc/gabc-notes-determination.l"
 {
         gregorio_end_autofuse(&current_note, &notes_lloc);
     }
@@ -11963,7 +12729,7 @@
 case 30:
 /* rule 30 can match eol */
 YY_RULE_SETUP
-#line 897 "gabc/gabc-notes-determination.l"
+#line 996 "gabc/gabc-notes-determination.l"
 {
         gregorio_snprintf(tempstr, sizeof tempstr,
                 "\\GreOverBrace{%s}{0pt}{0pt}{%d}",
@@ -11974,7 +12740,7 @@
 case 31:
 /* rule 31 can match eol */
 YY_RULE_SETUP
-#line 903 "gabc/gabc-notes-determination.l"
+#line 1002 "gabc/gabc-notes-determination.l"
 {
         gregorio_snprintf(tempstr, sizeof tempstr,
                 "\\GreUnderBrace{%s}{0pt}{0pt}{%d}",
@@ -11985,7 +12751,7 @@
 case 32:
 /* rule 32 can match eol */
 YY_RULE_SETUP
-#line 909 "gabc/gabc-notes-determination.l"
+#line 1008 "gabc/gabc-notes-determination.l"
 {
         gregorio_snprintf(tempstr, sizeof tempstr,
                 "\\GreOverCurlyBrace{%s}{0pt}{0pt}{%d}{0}",
@@ -11996,7 +12762,7 @@
 case 33:
 /* rule 33 can match eol */
 YY_RULE_SETUP
-#line 915 "gabc/gabc-notes-determination.l"
+#line 1014 "gabc/gabc-notes-determination.l"
 {
         gregorio_snprintf(tempstr, sizeof tempstr,
                 "\\GreOverCurlyBrace{%s}{0pt}{0pt}{%d}{1}",
@@ -12007,7 +12773,7 @@
 case 34:
 /* rule 34 can match eol */
 YY_RULE_SETUP
-#line 921 "gabc/gabc-notes-determination.l"
+#line 1020 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_cs_to_note(&current_note,
                 gregorio_strdup(gabc_notes_determination_text), false);
@@ -12016,7 +12782,7 @@
 case 35:
 /* rule 35 can match eol */
 YY_RULE_SETUP
-#line 925 "gabc/gabc-notes-determination.l"
+#line 1024 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_cs_to_note(&current_note,
                 gregorio_strdup(gabc_notes_determination_text), true);
@@ -12025,7 +12791,7 @@
 case 36:
 /* rule 36 can match eol */
 YY_RULE_SETUP
-#line 929 "gabc/gabc-notes-determination.l"
+#line 1028 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_texverb_to_note(current_note,
                 gregorio_strdup(gabc_notes_determination_text));
@@ -12034,7 +12800,7 @@
 case 37:
 /* rule 37 can match eol */
 YY_RULE_SETUP
-#line 933 "gabc/gabc-notes-determination.l"
+#line 1032 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_texverb_as_note(&current_note,
                 gregorio_strdup(gabc_notes_determination_text),
@@ -12044,7 +12810,7 @@
 case 38:
 /* rule 38 can match eol */
 YY_RULE_SETUP
-#line 938 "gabc/gabc-notes-determination.l"
+#line 1037 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_texverb_as_note(&current_note,
                 gregorio_strdup(gabc_notes_determination_text),
@@ -12054,7 +12820,7 @@
 case 39:
 /* rule 39 can match eol */
 YY_RULE_SETUP
-#line 943 "gabc/gabc-notes-determination.l"
+#line 1042 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_texverb_as_note(&current_note,
                 gregorio_strdup(gabc_notes_determination_text), GRE_ALT,
@@ -12063,7 +12829,7 @@
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 948 "gabc/gabc-notes-determination.l"
+#line 1047 "gabc/gabc-notes-determination.l"
 {
         BEGIN(space);
     }
@@ -12073,7 +12839,7 @@
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up gabc_notes_determination_text again */
 YY_RULE_SETUP
-#line 951 "gabc/gabc-notes-determination.l"
+#line 1050 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_space_as_note(&current_note, SP_AD_HOC_SPACE,
                 gregorio_strdup(gabc_notes_determination_text), &notes_lloc);
@@ -12081,7 +12847,7 @@
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 955 "gabc/gabc-notes-determination.l"
+#line 1054 "gabc/gabc-notes-determination.l"
 {
         BEGIN(nbspace);
     }
@@ -12091,7 +12857,7 @@
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up gabc_notes_determination_text again */
 YY_RULE_SETUP
-#line 958 "gabc/gabc-notes-determination.l"
+#line 1057 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_space_as_note(&current_note, SP_AD_HOC_SPACE_NB,
                 gregorio_strdup(gabc_notes_determination_text), &notes_lloc);
@@ -12099,142 +12865,184 @@
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 962 "gabc/gabc-notes-determination.l"
+#line 1061 "gabc/gabc-notes-determination.l"
 {
-        end_variable_ledger(SO_OVER);
+        LEDGER(high, EXPLICITLY_DRAWN, true);
     }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 965 "gabc/gabc-notes-determination.l"
+#line 1064 "gabc/gabc-notes-determination.l"
 {
-        BEGIN(overledger);
+        LEDGER(high, EXPLICITLY_DRAWN, false);
     }
 	YY_BREAK
 case 46:
-/* rule 46 can match eol */
 YY_RULE_SETUP
-#line 968 "gabc/gabc-notes-determination.l"
+#line 1067 "gabc/gabc-notes-determination.l"
 {
+        end_variable_ledger(SO_OVER);
+    }
+	YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 1070 "gabc/gabc-notes-determination.l"
+{
+        BEGIN(overledger);
+    }
+	YY_BREAK
+case 48:
+/* rule 48 can match eol */
+YY_RULE_SETUP
+#line 1073 "gabc/gabc-notes-determination.l"
+{
         save_before_ledger(gabc_notes_determination_text);
         BEGIN(overledger2);
     }
 	YY_BREAK
-case 47:
-/* rule 47 can match eol */
+case 49:
+/* rule 49 can match eol */
 YY_RULE_SETUP
-#line 972 "gabc/gabc-notes-determination.l"
+#line 1077 "gabc/gabc-notes-determination.l"
 {
         add_static_ledger(SO_OVER, gabc_notes_determination_text);
         BEGIN(endledger);
     }
 	YY_BREAK
-case 48:
-/* rule 48 can match eol */
+case 50:
+/* rule 50 can match eol */
 YY_RULE_SETUP
-#line 976 "gabc/gabc-notes-determination.l"
+#line 1081 "gabc/gabc-notes-determination.l"
 {
         add_variable_ledger(SO_OVER, gabc_notes_determination_text);
         BEGIN(endledger);
     }
 	YY_BREAK
-case 49:
+case 51:
 YY_RULE_SETUP
-#line 980 "gabc/gabc-notes-determination.l"
+#line 1085 "gabc/gabc-notes-determination.l"
 {
+        LEDGER(low, EXPLICITLY_DRAWN, true);
+    }
+	YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 1088 "gabc/gabc-notes-determination.l"
+{
+        LEDGER(low, EXPLICITLY_DRAWN, false);
+    }
+	YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 1091 "gabc/gabc-notes-determination.l"
+{
         end_variable_ledger(SO_UNDER);
     }
 	YY_BREAK
-case 50:
+case 54:
 YY_RULE_SETUP
-#line 983 "gabc/gabc-notes-determination.l"
+#line 1094 "gabc/gabc-notes-determination.l"
 {
         BEGIN(underledger);
     }
 	YY_BREAK
-case 51:
-/* rule 51 can match eol */
+case 55:
+/* rule 55 can match eol */
 YY_RULE_SETUP
-#line 986 "gabc/gabc-notes-determination.l"
+#line 1097 "gabc/gabc-notes-determination.l"
 {
         save_before_ledger(gabc_notes_determination_text);
         BEGIN(underledger2);
     }
 	YY_BREAK
-case 52:
-/* rule 52 can match eol */
+case 56:
+/* rule 56 can match eol */
 YY_RULE_SETUP
-#line 990 "gabc/gabc-notes-determination.l"
+#line 1101 "gabc/gabc-notes-determination.l"
 {
         add_static_ledger(SO_UNDER, gabc_notes_determination_text);
         BEGIN(endledger);
     }
 	YY_BREAK
-case 53:
-/* rule 53 can match eol */
+case 57:
+/* rule 57 can match eol */
 YY_RULE_SETUP
-#line 994 "gabc/gabc-notes-determination.l"
+#line 1105 "gabc/gabc-notes-determination.l"
 {
         add_variable_ledger(SO_UNDER, gabc_notes_determination_text);
         BEGIN(endledger);
     }
 	YY_BREAK
-case 54:
+case 58:
 YY_RULE_SETUP
-#line 998 "gabc/gabc-notes-determination.l"
+#line 1109 "gabc/gabc-notes-determination.l"
 {
         BEGIN(INITIAL);
     }
 	YY_BREAK
-case 55:
-/* rule 55 can match eol */
+case 59:
+/* rule 59 can match eol */
 YY_RULE_SETUP
-#line 1001 "gabc/gabc-notes-determination.l"
+#line 1112 "gabc/gabc-notes-determination.l"
 {
         parse_slur();
     }
 	YY_BREAK
-case 56:
+case 60:
 YY_RULE_SETUP
-#line 1004 "gabc/gabc-notes-determination.l"
+#line 1115 "gabc/gabc-notes-determination.l"
 {
         start_var_slur();
     }
 	YY_BREAK
-case 57:
+case 61:
 YY_RULE_SETUP
-#line 1007 "gabc/gabc-notes-determination.l"
+#line 1118 "gabc/gabc-notes-determination.l"
 {
         end_var_slur();
     }
 	YY_BREAK
-case 58:
-/* rule 58 can match eol */
+case 62:
+/* rule 62 can match eol */
 YY_RULE_SETUP
-#line 1014 "gabc/gabc-notes-determination.l"
+#line 1125 "gabc/gabc-notes-determination.l"
 {
         parse_hepisema_adjustment();
     }
 	YY_BREAK
-case 59:
+case 63:
 YY_RULE_SETUP
-#line 1017 "gabc/gabc-notes-determination.l"
+#line 1128 "gabc/gabc-notes-determination.l"
 {
         end_hepisema_adjustment();
     }
 	YY_BREAK
-case 60:
+case 64:
 YY_RULE_SETUP
-#line 1020 "gabc/gabc-notes-determination.l"
+#line 1131 "gabc/gabc-notes-determination.l"
 {
+        left_bracket();
+    }
+	YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 1134 "gabc/gabc-notes-determination.l"
+{
+        right_bracket();
+    }
+	YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 1137 "gabc/gabc-notes-determination.l"
+{
         gregorio_add_texverb_as_note(&current_note,
                 gregorio_strdup("\\hbox to 0pt{"), GRE_TEXVERB_ELEMENT,
                 &notes_lloc);
     }
 	YY_BREAK
-case 61:
+case 67:
 YY_RULE_SETUP
-#line 1025 "gabc/gabc-notes-determination.l"
+#line 1142 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_texverb_as_note(&current_note,
                 gregorio_strdup("\\hss%\n}%\n\\GreNoBreak\\relax "),
@@ -12241,9 +13049,9 @@
                 GRE_TEXVERB_ELEMENT, &notes_lloc);
     }
 	YY_BREAK
-case 62:
+case 68:
 YY_RULE_SETUP
-#line 1030 "gabc/gabc-notes-determination.l"
+#line 1147 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_manual_custos_as_note(&current_note,
                 pitch_letter_to_height(gabc_notes_determination_text[0]),
@@ -12250,70 +13058,77 @@
                 &notes_lloc);
     }
 	YY_BREAK
-case 63:
-/* rule 63 can match eol */
+case 69:
+/* rule 69 can match eol */
 YY_RULE_SETUP
-#line 1035 "gabc/gabc-notes-determination.l"
+#line 1152 "gabc/gabc-notes-determination.l"
 /* ignore ends of line and tabs */;
 	YY_BREAK
-case 64:
+case 70:
 YY_RULE_SETUP
-#line 1036 "gabc/gabc-notes-determination.l"
+#line 1153 "gabc/gabc-notes-determination.l"
 {
-        gregorio_add_custo_as_note(&current_note, &notes_lloc);
+        gregorio_add_suppress_custos_as_note(&current_note, &notes_lloc);
     }
 	YY_BREAK
-case 65:
+case 71:
 YY_RULE_SETUP
-#line 1039 "gabc/gabc-notes-determination.l"
+#line 1156 "gabc/gabc-notes-determination.l"
 {
+        gregorio_add_custos_as_note(&current_note, &notes_lloc);
+    }
+	YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 1159 "gabc/gabc-notes-determination.l"
+{
         gregorio_add_end_of_line_as_note(&current_note, false, false, false,
                 &notes_lloc);
     }
 	YY_BREAK
-case 66:
+case 73:
 YY_RULE_SETUP
-#line 1043 "gabc/gabc-notes-determination.l"
+#line 1163 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_end_of_line_as_note(&current_note, false, true, true,
                 &notes_lloc);
     }
 	YY_BREAK
-case 67:
+case 74:
 YY_RULE_SETUP
-#line 1047 "gabc/gabc-notes-determination.l"
+#line 1167 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_end_of_line_as_note(&current_note, false, true, false,
                 &notes_lloc);
     }
 	YY_BREAK
-case 68:
+case 75:
 YY_RULE_SETUP
-#line 1051 "gabc/gabc-notes-determination.l"
+#line 1171 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_end_of_line_as_note(&current_note, true, false, false,
                 &notes_lloc);
     }
 	YY_BREAK
-case 69:
+case 76:
 YY_RULE_SETUP
-#line 1055 "gabc/gabc-notes-determination.l"
+#line 1175 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_end_of_line_as_note(&current_note, true, true, true,
                 &notes_lloc);
     }
 	YY_BREAK
-case 70:
+case 77:
 YY_RULE_SETUP
-#line 1059 "gabc/gabc-notes-determination.l"
+#line 1179 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_end_of_line_as_note(&current_note, true, true, false,
                 &notes_lloc);
     }
 	YY_BREAK
-case 71:
+case 78:
 YY_RULE_SETUP
-#line 1063 "gabc/gabc-notes-determination.l"
+#line 1183 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_clef_as_note(&current_note,
                 letter_to_clef(gabc_notes_determination_text[0]),
@@ -12321,9 +13136,9 @@
                 &notes_lloc);
     }
 	YY_BREAK
-case 72:
+case 79:
 YY_RULE_SETUP
-#line 1069 "gabc/gabc-notes-determination.l"
+#line 1189 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_clef_as_note(&current_note,
                 letter_to_clef(gabc_notes_determination_text[0]),
@@ -12331,9 +13146,9 @@
                 &notes_lloc);
     }
 	YY_BREAK
-case 73:
+case 80:
 YY_RULE_SETUP
-#line 1075 "gabc/gabc-notes-determination.l"
+#line 1195 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_secondary_clef_to_note(current_note,
                 letter_to_clef(gabc_notes_determination_text[1]),
@@ -12340,9 +13155,9 @@
                 parse_clef_line(gabc_notes_determination_text[2]), false);
     }
 	YY_BREAK
-case 74:
+case 81:
 YY_RULE_SETUP
-#line 1080 "gabc/gabc-notes-determination.l"
+#line 1200 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_secondary_clef_to_note(current_note,
                 letter_to_clef(gabc_notes_determination_text[1]),
@@ -12349,515 +13164,532 @@
                 parse_clef_line(gabc_notes_determination_text[3]), true);
     }
 	YY_BREAK
-case 75:
+case 82:
 YY_RULE_SETUP
-#line 1085 "gabc/gabc-notes-determination.l"
+#line 1205 "gabc/gabc-notes-determination.l"
 {
         add_bar_as_note(B_VIRGULA);
     }
 	YY_BREAK
-case 76:
+case 83:
 YY_RULE_SETUP
-#line 1088 "gabc/gabc-notes-determination.l"
+#line 1208 "gabc/gabc-notes-determination.l"
 {
         add_bar_as_note(B_DIVISIO_MINIMA);
     }
 	YY_BREAK
-case 77:
+case 84:
 YY_RULE_SETUP
-#line 1091 "gabc/gabc-notes-determination.l"
+#line 1211 "gabc/gabc-notes-determination.l"
 {
         add_bar_as_note(parse_dominican_bar(gabc_notes_determination_text[1]));
     }
 	YY_BREAK
-case 78:
+case 85:
 YY_RULE_SETUP
-#line 1094 "gabc/gabc-notes-determination.l"
+#line 1214 "gabc/gabc-notes-determination.l"
 {
         add_bar_as_note(B_DIVISIO_MINOR);
     }
 	YY_BREAK
-case 79:
+case 86:
 YY_RULE_SETUP
-#line 1097 "gabc/gabc-notes-determination.l"
+#line 1217 "gabc/gabc-notes-determination.l"
 {
         add_bar_as_note(B_DIVISIO_MAIOR);
     }
 	YY_BREAK
-case 80:
+case 87:
 YY_RULE_SETUP
-#line 1100 "gabc/gabc-notes-determination.l"
+#line 1220 "gabc/gabc-notes-determination.l"
 {
         add_bar_as_note(B_DIVISIO_FINALIS);
     }
 	YY_BREAK
-case 81:
+case 88:
 YY_RULE_SETUP
-#line 1103 "gabc/gabc-notes-determination.l"
+#line 1223 "gabc/gabc-notes-determination.l"
 {
-        gregorio_change_shape(current_note, S_PUNCTUM_CAVUM,
-                legacy_oriscus_orientation);
+        gregorio_add_cavum(current_note);
     }
 	YY_BREAK
-case 82:
+case 89:
 YY_RULE_SETUP
-#line 1107 "gabc/gabc-notes-determination.l"
+#line 1226 "gabc/gabc-notes-determination.l"
 {
         gregorio_change_shape(current_note, S_LINEA_PUNCTUM,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 83:
+case 90:
 YY_RULE_SETUP
-#line 1111 "gabc/gabc-notes-determination.l"
+#line 1230 "gabc/gabc-notes-determination.l"
 {
-        gregorio_change_shape(current_note, S_LINEA_PUNCTUM_CAVUM,
+        gregorio_change_shape(current_note, S_LINEA_PUNCTUM,
                 legacy_oriscus_orientation);
+        gregorio_add_cavum(current_note);
     }
 	YY_BREAK
-case 84:
+case 91:
 YY_RULE_SETUP
-#line 1115 "gabc/gabc-notes-determination.l"
+#line 1235 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_special_sign(current_note, _ACCENTUS);
     }
 	YY_BREAK
-case 85:
+case 92:
 YY_RULE_SETUP
-#line 1118 "gabc/gabc-notes-determination.l"
+#line 1238 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_special_sign(current_note, _ACCENTUS_REVERSUS);
     }
 	YY_BREAK
-case 86:
+case 93:
 YY_RULE_SETUP
-#line 1121 "gabc/gabc-notes-determination.l"
+#line 1241 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_special_sign(current_note, _CIRCULUS);
     }
 	YY_BREAK
-case 87:
+case 94:
 YY_RULE_SETUP
-#line 1124 "gabc/gabc-notes-determination.l"
+#line 1244 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_special_sign(current_note, _SEMI_CIRCULUS);
     }
 	YY_BREAK
-case 88:
+case 95:
 YY_RULE_SETUP
-#line 1127 "gabc/gabc-notes-determination.l"
+#line 1247 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_special_sign(current_note, _SEMI_CIRCULUS_REVERSUS);
     }
 	YY_BREAK
-case 89:
+case 96:
 YY_RULE_SETUP
-#line 1130 "gabc/gabc-notes-determination.l"
+#line 1250 "gabc/gabc-notes-determination.l"
 {
+        gregorio_add_special_sign(current_note, _MUSICA_FICTA_FLAT);
+    }
+	YY_BREAK
+case 97:
+YY_RULE_SETUP
+#line 1253 "gabc/gabc-notes-determination.l"
+{
+        gregorio_add_special_sign(current_note, _MUSICA_FICTA_NATURAL);
+    }
+	YY_BREAK
+case 98:
+YY_RULE_SETUP
+#line 1256 "gabc/gabc-notes-determination.l"
+{
+        gregorio_add_special_sign(current_note, _MUSICA_FICTA_SHARP);
+    }
+	YY_BREAK
+case 99:
+YY_RULE_SETUP
+#line 1259 "gabc/gabc-notes-determination.l"
+{
         gregorio_change_shape(current_note, S_FLAT, legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 90:
+case 100:
 YY_RULE_SETUP
-#line 1133 "gabc/gabc-notes-determination.l"
+#line 1262 "gabc/gabc-notes-determination.l"
 {
         gregorio_change_shape(current_note, S_SHARP,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 91:
+case 101:
 YY_RULE_SETUP
-#line 1137 "gabc/gabc-notes-determination.l"
+#line 1266 "gabc/gabc-notes-determination.l"
 {
         gregorio_change_shape(current_note, S_NATURAL,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 92:
+case 102:
 YY_RULE_SETUP
-#line 1141 "gabc/gabc-notes-determination.l"
+#line 1270 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_space_as_note(&current_note, SP_HALF_SPACE, NULL,
                 &notes_lloc);
     }
 	YY_BREAK
-case 93:
+case 103:
 YY_RULE_SETUP
-#line 1145 "gabc/gabc-notes-determination.l"
+#line 1274 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_space_as_note(&current_note, SP_INTERGLYPH_SPACE, NULL,
                 &notes_lloc);
     }
 	YY_BREAK
-case 94:
+case 104:
 YY_RULE_SETUP
-#line 1149 "gabc/gabc-notes-determination.l"
+#line 1278 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_space_as_note(&current_note, SP_NEUMATIC_CUT, NULL,
                 &notes_lloc);
     }
 	YY_BREAK
-case 95:
+case 105:
 *yy_cp = (yy_hold_char); /* undo effects of setting up gabc_notes_determination_text */
 (yy_c_buf_p) = yy_cp = yy_bp + 1;
 YY_DO_BEFORE_ACTION; /* set up gabc_notes_determination_text again */
 YY_RULE_SETUP
-#line 1153 "gabc/gabc-notes-determination.l"
+#line 1282 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_space_as_note(&current_note, SP_NEUMATIC_CUT, NULL,
                 &notes_lloc);
     }
 	YY_BREAK
-case 96:
+case 106:
 YY_RULE_SETUP
-#line 1157 "gabc/gabc-notes-determination.l"
+#line 1286 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_space_as_note(&current_note, SP_LARGER_SPACE, NULL,
                 &notes_lloc);
     }
 	YY_BREAK
-case 97:
+case 107:
 YY_RULE_SETUP
-#line 1161 "gabc/gabc-notes-determination.l"
+#line 1290 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_space_as_note(&current_note, SP_GLYPH_SPACE, NULL,
                 &notes_lloc);
     }
 	YY_BREAK
-case 98:
+case 108:
 YY_RULE_SETUP
-#line 1165 "gabc/gabc-notes-determination.l"
+#line 1294 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_space_as_note(&current_note, SP_NEUMATIC_CUT_NB, NULL,
                 &notes_lloc);
     }
 	YY_BREAK
-case 99:
+case 109:
 *yy_cp = (yy_hold_char); /* undo effects of setting up gabc_notes_determination_text */
 (yy_c_buf_p) = yy_cp = yy_bp + 2;
 YY_DO_BEFORE_ACTION; /* set up gabc_notes_determination_text again */
 YY_RULE_SETUP
-#line 1169 "gabc/gabc-notes-determination.l"
+#line 1298 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_space_as_note(&current_note, SP_NEUMATIC_CUT_NB, NULL,
                 &notes_lloc);
     }
 	YY_BREAK
-case 100:
+case 110:
 YY_RULE_SETUP
-#line 1173 "gabc/gabc-notes-determination.l"
+#line 1302 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_space_as_note(&current_note, SP_LARGER_SPACE_NB, NULL,
                 &notes_lloc);
     }
 	YY_BREAK
-case 101:
+case 111:
 YY_RULE_SETUP
-#line 1177 "gabc/gabc-notes-determination.l"
+#line 1306 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_space_as_note(&current_note, SP_GLYPH_SPACE_NB, NULL,
                 &notes_lloc);
     }
 	YY_BREAK
-case 102:
-/* rule 102 can match eol */
+case 112:
+/* rule 112 can match eol */
 *yy_cp = (yy_hold_char); /* undo effects of setting up gabc_notes_determination_text */
 YY_LINENO_REWIND_TO(yy_bp + 1);
 (yy_c_buf_p) = yy_cp = yy_bp + 1;
 YY_DO_BEFORE_ACTION; /* set up gabc_notes_determination_text again */
 YY_RULE_SETUP
-#line 1181 "gabc/gabc-notes-determination.l"
+#line 1310 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_space_as_note(&current_note, SP_ZERO_WIDTH, NULL,
                 &notes_lloc);
     }
 	YY_BREAK
-case 103:
+case 113:
 YY_RULE_SETUP
-#line 1185 "gabc/gabc-notes-determination.l"
+#line 1314 "gabc/gabc-notes-determination.l"
 {
         gregorio_change_shape(current_note, S_LINEA,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 104:
+case 114:
 YY_RULE_SETUP
-#line 1189 "gabc/gabc-notes-determination.l"
+#line 1318 "gabc/gabc-notes-determination.l"
 {
         lex_add_note(0, S_BIVIRGA, _NO_SIGN, L_NO_LIQUESCENTIA);
     }
 	YY_BREAK
-case 105:
+case 115:
 YY_RULE_SETUP
-#line 1192 "gabc/gabc-notes-determination.l"
+#line 1321 "gabc/gabc-notes-determination.l"
 {
         lex_add_note(0, S_TRIVIRGA, _NO_SIGN, L_NO_LIQUESCENTIA);
     }
 	YY_BREAK
-case 106:
+case 116:
 YY_RULE_SETUP
-#line 1195 "gabc/gabc-notes-determination.l"
+#line 1324 "gabc/gabc-notes-determination.l"
 {
         lex_add_note(0, S_BIVIRGA, _NO_SIGN, L_NO_LIQUESCENTIA);
     }
 	YY_BREAK
-case 107:
+case 117:
 YY_RULE_SETUP
-#line 1198 "gabc/gabc-notes-determination.l"
+#line 1327 "gabc/gabc-notes-determination.l"
 {
         lex_add_note(0, S_TRIVIRGA, _NO_SIGN, L_NO_LIQUESCENTIA);
     }
 	YY_BREAK
-case 108:
+case 118:
 YY_RULE_SETUP
-#line 1201 "gabc/gabc-notes-determination.l"
+#line 1330 "gabc/gabc-notes-determination.l"
 {
         lex_add_note(0, S_DISTROPHA, _NO_SIGN, L_NO_LIQUESCENTIA);
     }
 	YY_BREAK
-case 109:
+case 119:
 YY_RULE_SETUP
-#line 1204 "gabc/gabc-notes-determination.l"
+#line 1333 "gabc/gabc-notes-determination.l"
 {
         lex_add_note(0, S_DISTROPHA, _NO_SIGN, L_AUCTUS_ASCENDENS);
     }
 	YY_BREAK
-case 110:
+case 120:
 YY_RULE_SETUP
-#line 1207 "gabc/gabc-notes-determination.l"
+#line 1336 "gabc/gabc-notes-determination.l"
 {
         lex_add_note(0, S_TRISTROPHA, _NO_SIGN, L_NO_LIQUESCENTIA);
     }
 	YY_BREAK
-case 111:
+case 121:
 YY_RULE_SETUP
-#line 1210 "gabc/gabc-notes-determination.l"
+#line 1339 "gabc/gabc-notes-determination.l"
 {
         lex_add_note(0, S_TRISTROPHA, _NO_SIGN, L_AUCTUS_ASCENDENS);
     }
 	YY_BREAK
-case 112:
+case 122:
 YY_RULE_SETUP
-#line 1213 "gabc/gabc-notes-determination.l"
+#line 1342 "gabc/gabc-notes-determination.l"
 {
         lex_add_note(0, S_PUNCTUM, _NO_SIGN, L_NO_LIQUESCENTIA);
     }
 	YY_BREAK
-case 113:
+case 123:
 YY_RULE_SETUP
-#line 1216 "gabc/gabc-notes-determination.l"
+#line 1345 "gabc/gabc-notes-determination.l"
 {
         lex_add_note(1, S_PUNCTUM, _NO_SIGN, L_INITIO_DEBILIS);
     }
 	YY_BREAK
-case 114:
+case 124:
 YY_RULE_SETUP
-#line 1219 "gabc/gabc-notes-determination.l"
+#line 1348 "gabc/gabc-notes-determination.l"
 {
         lex_add_note(1, S_PUNCTUM, _NO_SIGN, L_FUSED);
     }
 	YY_BREAK
-case 115:
+case 125:
 YY_RULE_SETUP
-#line 1222 "gabc/gabc-notes-determination.l"
+#line 1351 "gabc/gabc-notes-determination.l"
 {
         lex_add_note(0, punctum_inclinatum(gabc_notes_determination_text[1]),
                 _NO_SIGN, L_NO_LIQUESCENTIA);
     }
 	YY_BREAK
-case 116:
+case 126:
 YY_RULE_SETUP
-#line 1226 "gabc/gabc-notes-determination.l"
+#line 1355 "gabc/gabc-notes-determination.l"
 {
         lex_add_note(1, punctum_inclinatum(gabc_notes_determination_text[2]),
                 _NO_SIGN, L_INITIO_DEBILIS);
     }
 	YY_BREAK
-case 117:
+case 127:
 YY_RULE_SETUP
-#line 1230 "gabc/gabc-notes-determination.l"
+#line 1359 "gabc/gabc-notes-determination.l"
 {
         lex_add_note(1, punctum_inclinatum(gabc_notes_determination_text[2]),
                 _NO_SIGN, L_FUSED);
     }
 	YY_BREAK
-case 118:
+case 128:
 YY_RULE_SETUP
-#line 1234 "gabc/gabc-notes-determination.l"
+#line 1363 "gabc/gabc-notes-determination.l"
 {
         add_sign(_V_EPISEMA);
     }
 	YY_BREAK
-case 119:
+case 129:
 YY_RULE_SETUP
-#line 1237 "gabc/gabc-notes-determination.l"
+#line 1366 "gabc/gabc-notes-determination.l"
 {
         add_h_episema();
     }
 	YY_BREAK
-case 120:
+case 130:
 YY_RULE_SETUP
-#line 1240 "gabc/gabc-notes-determination.l"
+#line 1369 "gabc/gabc-notes-determination.l"
 {
         add_sign(_PUNCTUM_MORA);
     }
 	YY_BREAK
-case 121:
+case 131:
 YY_RULE_SETUP
-#line 1243 "gabc/gabc-notes-determination.l"
+#line 1372 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_tail_liquescentia(current_note, L_DEMINUTUS,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 122:
+case 132:
 YY_RULE_SETUP
-#line 1247 "gabc/gabc-notes-determination.l"
+#line 1376 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_tail_liquescentia(current_note, L_AUCTUS_DESCENDENS,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 123:
+case 133:
 YY_RULE_SETUP
-#line 1251 "gabc/gabc-notes-determination.l"
+#line 1380 "gabc/gabc-notes-determination.l"
 {
         gregorio_add_tail_liquescentia(current_note, L_AUCTUS_ASCENDENS,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 124:
+case 134:
 YY_RULE_SETUP
-#line 1255 "gabc/gabc-notes-determination.l"
+#line 1384 "gabc/gabc-notes-determination.l"
 {
         gregorio_change_shape(current_note, S_QUADRATUM,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 125:
+case 135:
 YY_RULE_SETUP
-#line 1259 "gabc/gabc-notes-determination.l"
+#line 1388 "gabc/gabc-notes-determination.l"
 {
         gregorio_change_shape(current_note, S_ORISCUS_UNDETERMINED,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 126:
+case 136:
 YY_RULE_SETUP
-#line 1263 "gabc/gabc-notes-determination.l"
+#line 1392 "gabc/gabc-notes-determination.l"
 {
         gregorio_change_shape(current_note, S_ORISCUS_DESCENDENS,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 127:
+case 137:
 YY_RULE_SETUP
-#line 1267 "gabc/gabc-notes-determination.l"
+#line 1396 "gabc/gabc-notes-determination.l"
 {
         gregorio_change_shape(current_note, S_ORISCUS_ASCENDENS,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 128:
+case 138:
 YY_RULE_SETUP
-#line 1271 "gabc/gabc-notes-determination.l"
+#line 1400 "gabc/gabc-notes-determination.l"
 {
         gregorio_change_shape(current_note, S_ORISCUS_SCAPUS_UNDETERMINED,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 129:
+case 139:
 YY_RULE_SETUP
-#line 1275 "gabc/gabc-notes-determination.l"
+#line 1404 "gabc/gabc-notes-determination.l"
 {
         gregorio_change_shape(current_note, S_ORISCUS_SCAPUS_DESCENDENS,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 130:
+case 140:
 YY_RULE_SETUP
-#line 1279 "gabc/gabc-notes-determination.l"
+#line 1408 "gabc/gabc-notes-determination.l"
 {
         gregorio_change_shape(current_note, S_ORISCUS_SCAPUS_ASCENDENS,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 131:
+case 141:
 YY_RULE_SETUP
-#line 1283 "gabc/gabc-notes-determination.l"
+#line 1412 "gabc/gabc-notes-determination.l"
 {
         gregorio_change_shape(current_note, S_QUILISMA,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 132:
+case 142:
 YY_RULE_SETUP
-#line 1287 "gabc/gabc-notes-determination.l"
+#line 1416 "gabc/gabc-notes-determination.l"
 {
         gregorio_change_shape(current_note, S_QUILISMA_QUADRATUM,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 133:
+case 143:
 YY_RULE_SETUP
-#line 1291 "gabc/gabc-notes-determination.l"
+#line 1420 "gabc/gabc-notes-determination.l"
 {
         gregorio_change_shape(current_note, S_VIRGA,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 134:
+case 144:
 YY_RULE_SETUP
-#line 1295 "gabc/gabc-notes-determination.l"
+#line 1424 "gabc/gabc-notes-determination.l"
 {
         gregorio_change_shape(current_note, S_VIRGA_REVERSA,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 135:
+case 145:
 YY_RULE_SETUP
-#line 1299 "gabc/gabc-notes-determination.l"
+#line 1428 "gabc/gabc-notes-determination.l"
 {
         gregorio_change_shape(current_note, S_STROPHA,
                 legacy_oriscus_orientation);
     }
 	YY_BREAK
-case 136:
+case 146:
 YY_RULE_SETUP
-#line 1303 "gabc/gabc-notes-determination.l"
+#line 1432 "gabc/gabc-notes-determination.l"
 {
-        current_note->supposed_high_ledger_line = true;
-        current_note->explicit_high_ledger_line = true;
+        LEDGER(high, EXPLICIT, true);
     }
 	YY_BREAK
-case 137:
+case 147:
 YY_RULE_SETUP
-#line 1307 "gabc/gabc-notes-determination.l"
+#line 1435 "gabc/gabc-notes-determination.l"
 {
-        current_note->supposed_high_ledger_line = false;
-        current_note->explicit_high_ledger_line = true;
+        LEDGER(high, EXPLICIT, false);
     }
 	YY_BREAK
-case 138:
+case 148:
 YY_RULE_SETUP
-#line 1311 "gabc/gabc-notes-determination.l"
+#line 1438 "gabc/gabc-notes-determination.l"
 {
-        current_note->supposed_low_ledger_line = true;
-        current_note->explicit_low_ledger_line = true;
+        LEDGER(low, EXPLICIT, true);
     }
 	YY_BREAK
-case 139:
+case 149:
 YY_RULE_SETUP
-#line 1315 "gabc/gabc-notes-determination.l"
+#line 1441 "gabc/gabc-notes-determination.l"
 {
-        current_note->supposed_low_ledger_line = false;
-        current_note->explicit_low_ledger_line = true;
+        LEDGER(low, EXPLICIT, false);
     }
 	YY_BREAK
-case 140:
-/* rule 140 can match eol */
+case 150:
+/* rule 150 can match eol */
 YY_RULE_SETUP
-#line 1319 "gabc/gabc-notes-determination.l"
+#line 1444 "gabc/gabc-notes-determination.l"
 {
         gregorio_messagef("det_notes_from_string", VERBOSITY_ERROR, 0,
                 _("unrecognized character: \"%c\""),
@@ -12864,12 +13696,12 @@
                 gabc_notes_determination_text[0]);
     }
 	YY_BREAK
-case 141:
+case 151:
 YY_RULE_SETUP
-#line 1325 "gabc/gabc-notes-determination.l"
+#line 1450 "gabc/gabc-notes-determination.l"
 ECHO;
 	YY_BREAK
-#line 12873 "gabc/gabc-notes-determination-l.c"
+#line 13705 "gabc/gabc-notes-determination-l.c"
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(texverbnote):
 case YY_STATE_EOF(texverbglyph):
@@ -13854,7 +14686,7 @@
 
 #define YYTABLES_NAME "yytables"
 
-#line 1325 "gabc/gabc-notes-determination.l"
+#line 1450 "gabc/gabc-notes-determination.l"
 
 
 
@@ -13871,9 +14703,11 @@
     notes_lloc.last_line = loc->first_line;
     notes_lloc.last_column = loc->first_column;
     notes_lloc.last_offset = loc->first_offset;
+    notes_lloc.generate_point_and_click = loc->generate_point_and_click;
 
     staff_lines = score->staff_lines;
     highest_pitch = score->highest_pitch;
+    high_ledger_line_pitch = score->high_ledger_line_pitch;
     legacy_oriscus_orientation = score->legacy_oriscus_orientation;
 
     /* a small optimization could uccur here: we could do it only once at the

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-notes-determination.l
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-notes-determination.l	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-notes-determination.l	2017-04-06 05:08:53 UTC (rev 43706)
@@ -3,7 +3,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This file implements the note parser.
  *
- * Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *
@@ -49,9 +49,18 @@
 static unsigned short ledger_var[2] = { 0, 0 };
 static unsigned char staff_lines;
 static signed char highest_pitch;
+static signed char high_ledger_line_pitch;
 static bool legacy_oriscus_orientation;
 static unsigned short he_adjustment_index[2] = { 0, 0 };
+static signed char bracket_low_pitch, bracket_high_pitch;
+static unsigned short left_bracket_texverb = 0;
 
+#define LEDGER(WHICH, SPECIFICITY, VALUE) \
+    if (LEDGER_##SPECIFICITY > current_note->WHICH##_ledger_specificity) { \
+        current_note->WHICH##_ledger_line = VALUE; \
+        current_note->WHICH##_ledger_specificity = LEDGER_##SPECIFICITY; \
+    }
+
 typedef struct slur_info {
     unsigned short var;
     char shift;
@@ -91,7 +100,7 @@
     /* LCOV_EXCL_STOP */
 }
 
-static __inline char pitch_letter_to_height(const char pitch) {
+static __inline signed char pitch_letter_to_height(const char pitch) {
     char result = pitch - 'a' + LOWEST_PITCH;
     if (pitch == 'p') {
         --result;
@@ -101,6 +110,14 @@
                 _("invalid pitch for %u lines: %c"), (unsigned int)staff_lines,
                 pitch);
     }
+    if (left_bracket_texverb) {
+        if (result < bracket_low_pitch) {
+            bracket_low_pitch = result;
+        }
+        if (result > bracket_high_pitch) {
+            bracket_high_pitch = result;
+        }
+    }
     return result;
 }
 
@@ -120,21 +137,25 @@
 static __inline void lex_add_note(int i, gregorio_shape shape, char signs,
         char liquescentia)
 {
+    signed char height = pitch_letter_to_height(tolower(
+            (unsigned char)gabc_notes_determination_text[i]));
+
     nbof_isolated_episema = 0;
-    gregorio_add_note(&current_note, pitch_letter_to_height(
-            tolower((unsigned char)gabc_notes_determination_text[i])),
-            shape, signs, liquescentia, NULL, &notes_lloc);
+    gregorio_add_note(&current_note, height, shape, signs, liquescentia, NULL,
+            &notes_lloc);
     current_note->he_adjustment_index[SO_OVER] = he_adjustment_index[SO_OVER];
     current_note->he_adjustment_index[SO_UNDER] = he_adjustment_index[SO_UNDER];
 
-    if (ledger_var[SO_OVER]) {
-        current_note->supposed_high_ledger_line = true;
-        current_note->explicit_high_ledger_line = true;
+    if (height >= high_ledger_line_pitch) {
+        LEDGER(high, DRAWN, true);
+    } else if (ledger_var[SO_OVER]) {
+        LEDGER(high, EXPLICIT, true);
     }
 
-    if (ledger_var[SO_UNDER]) {
-        current_note->supposed_low_ledger_line = true;
-        current_note->explicit_low_ledger_line = true;
+    if (height <= LOW_LEDGER_LINE_PITCH) {
+        LEDGER(low, DRAWN, true);
+    } else if (ledger_var[SO_UNDER]) {
+        LEDGER(low, EXPLICIT, true);
     }
 }
 
@@ -491,15 +512,88 @@
     slur[index].start = NULL;
 }
 
-void parse_hepisema_adjustment(void)
+static void left_bracket(void)
 {
-    /* [xh:yz{]
-     * - x indicates l(ow) or h(igh) episema
-     * - y (optional) for l(ow), m(iddle), or h(igh) vertical position in space
-     * - z (optional) nudge dimension that starts with + or -
-     * - { (optional) starts a group
-     * - at least one of y, z, or w must be provided
-     * - if y and z are omitted, : may be omitted
+    if (left_bracket_texverb) {
+        gregorio_message(
+                _("cannot add a left bracket before closing the previous one"),
+                "left_bracket", VERBOSITY_ERROR, 0);
+        return;
+    }
+
+    /* when setting the left bracket, temporarily store the point-and-click
+     * information in the texverb */
+    if (notes_lloc.generate_point_and_click) {
+        gregorio_snprintf(tempstr, sizeof tempstr, "%u:%u:%u",
+                notes_lloc.first_line, notes_lloc.first_offset,
+                notes_lloc.first_column + 1);
+    } else {
+        tempstr[0] = '\0';
+    }
+    left_bracket_texverb = gregorio_add_texverb_as_note(&current_note,
+            gregorio_strdup(tempstr), GRE_TEXVERB_GLYPH, &notes_lloc);
+    bracket_low_pitch = MAX_PITCH;
+    bracket_high_pitch = LOWEST_PITCH;
+}
+
+static void right_bracket(void)
+{
+    if (!left_bracket_texverb) {
+        gregorio_message(
+                _("cannot add a right bracket without a matching left bracket"),
+                "right_bracket", VERBOSITY_ERROR, 0);
+        return;
+    }
+
+    if (bracket_high_pitch < bracket_low_pitch) {
+        gregorio_message(
+                _("cannot add brackets without notes between them"),
+                "right_bracket", VERBOSITY_ERROR, 0);
+        return;
+    }
+
+    gregorio_snprintf(tempstr, sizeof tempstr, "\\GreBracket{0}{%d}{%d}{%s}",
+            bracket_low_pitch, bracket_high_pitch,
+            gregorio_texverb(left_bracket_texverb));
+    gregorio_change_texverb(left_bracket_texverb, gregorio_strdup(tempstr));
+
+    if (notes_lloc.generate_point_and_click) {
+        gregorio_snprintf(tempstr, sizeof tempstr,
+                "\\GreBracket{1}{%d}{%d}{%u:%u:%u}", bracket_low_pitch,
+                bracket_high_pitch, notes_lloc.first_line,
+                notes_lloc.first_offset, notes_lloc.first_column + 1);
+    } else {
+        gregorio_snprintf(tempstr, sizeof tempstr,
+                "\\GreBracket{1}{%d}{%d}{}", bracket_low_pitch,
+                bracket_high_pitch);
+    }
+    gregorio_add_texverb_as_note(&current_note, gregorio_strdup(tempstr),
+            GRE_TEXVERB_GLYPH, &notes_lloc);
+
+    left_bracket_texverb = 0;
+}
+
+static void parse_hepisema_adjustment(void)
+{
+    /* See https://github.com/gregorio-project/gregorio/issues/872
+     *
+     * [xh:yzw]
+     *
+     * - x is o(ver) or u(under)
+     * - y is optional and is
+     *   - l for low in the space (chooses ol or ul depending on x)
+     *   - m for middle of the space
+     *   - h for high in the space (chooses oh or uh depending on x)
+     *   - ol for low in the space as if the episema were over the note
+     *   - oh for high in the space as if the episema were over the note
+     *   - ul for low in the space as if the episema were under the note
+     *   - uh for high in the space as if the episema were under the note
+     * - z is an optional nudge and must start with + or -
+     * - w is optional and may be { to start a range or } to end a range.
+     *
+     * at least one of y, z, or w must be provided
+     * if y and z are omitted, the : may be omitted
+     * y and z are not permitted when w is }
      */
 
     const gregorio_sign_orientation index = letter_to_sign_orientation(
@@ -587,7 +681,7 @@
     }
 }
 
-void end_hepisema_adjustment(void)
+static void end_hepisema_adjustment(void)
 {
     /* [xh:}]
      * - x indicates l(ow) or h(igh) episema
@@ -641,6 +735,11 @@
             ledger_var[orientation] = 0;
         }
     }
+    if (left_bracket_texverb) {
+        gregorio_message(_("unclosed left bracket"),
+                "gabc_det_notes_finish", VERBOSITY_ERROR, 0);
+        left_bracket_texverb = 0;
+    }
 }
 
 %}
@@ -845,29 +944,29 @@
     }
 <INITIAL>\[nm[1-9]\] {
         if (notesmacros[gabc_notes_determination_text[3]-'0']) {
-            gregorio_add_texverb_to_note(current_note,
-            gregorio_strdup(notesmacros[gabc_notes_determination_text[3]-'0']));
+            gregorio_add_texverb_to_note(current_note, gregorio_strdup(
+                    notesmacros[gabc_notes_determination_text[3]-'0']));
         } else error();
     }
 <INITIAL>\[gm[1-9]\] {
         if (notesmacros[gabc_notes_determination_text[3]-'0']) {
-            gregorio_add_texverb_as_note(&current_note,
-            gregorio_strdup(notesmacros[gabc_notes_determination_text[3]-'0']),
-            GRE_TEXVERB_GLYPH, &notes_lloc);
+            gregorio_add_texverb_as_note(&current_note, gregorio_strdup(
+                    notesmacros[gabc_notes_determination_text[3]-'0']),
+                    GRE_TEXVERB_GLYPH, &notes_lloc);
         } else error();
     }
 <INITIAL>\[em[1-9]\] {
         if (notesmacros[gabc_notes_determination_text[3]-'0']) {
-            gregorio_add_texverb_as_note(&current_note,
-            gregorio_strdup(notesmacros[gabc_notes_determination_text[3]-'0']),
-            GRE_TEXVERB_ELEMENT, &notes_lloc);
+            gregorio_add_texverb_as_note(&current_note, gregorio_strdup(
+                    notesmacros[gabc_notes_determination_text[3]-'0']),
+                    GRE_TEXVERB_ELEMENT, &notes_lloc);
         } else error();
     }
 <INITIAL>\[altm[1-9]\] {
         if (notesmacros[gabc_notes_determination_text[5]-'0']) {
-            gregorio_add_texverb_as_note(&current_note,
-            gregorio_strdup(notesmacros[gabc_notes_determination_text[5]-'0']),
-            GRE_TEXVERB_ELEMENT, &notes_lloc);
+            gregorio_add_texverb_as_note(&current_note, gregorio_strdup(
+                    notesmacros[gabc_notes_determination_text[5]-'0']),
+                    GRE_TEXVERB_ELEMENT, &notes_lloc);
         } else error();
     }
 <INITIAL>\[nv: {
@@ -959,6 +1058,12 @@
         gregorio_add_space_as_note(&current_note, SP_AD_HOC_SPACE_NB,
                 gregorio_strdup(gabc_notes_determination_text), &notes_lloc);
     }
+<INITIAL>\[oll:1\] {
+        LEDGER(high, EXPLICITLY_DRAWN, true);
+    }
+<INITIAL>\[oll:0\] {
+        LEDGER(high, EXPLICITLY_DRAWN, false);
+    }
 <INITIAL>\[oll:\}\] {
         end_variable_ledger(SO_OVER);
     }
@@ -977,6 +1082,12 @@
         add_variable_ledger(SO_OVER, gabc_notes_determination_text);
         BEGIN(endledger);
     }
+<INITIAL>\[ull:1\] {
+        LEDGER(low, EXPLICITLY_DRAWN, true);
+    }
+<INITIAL>\[ull:0\] {
+        LEDGER(low, EXPLICITLY_DRAWN, false);
+    }
 <INITIAL>\[ull:\}\] {
         end_variable_ledger(SO_UNDER);
     }
@@ -1017,6 +1128,12 @@
 <INITIAL>\[[ou]h:?\}\] {
         end_hepisema_adjustment();
     }
+<INITIAL>\[\[ {
+        left_bracket();
+    }
+<INITIAL>\]\] {
+        right_bracket();
+    }
 \{  {
         gregorio_add_texverb_as_note(&current_note,
                 gregorio_strdup("\\hbox to 0pt{"), GRE_TEXVERB_ELEMENT,
@@ -1033,8 +1150,11 @@
                 &notes_lloc);
     }
 [\t\r\n]+ /* ignore ends of line and tabs */;
+<INITIAL>\[nocustos\] {
+        gregorio_add_suppress_custos_as_note(&current_note, &notes_lloc);
+    }
 z0  {
-        gregorio_add_custo_as_note(&current_note, &notes_lloc);
+        gregorio_add_custos_as_note(&current_note, &notes_lloc);
     }
 z   {
         gregorio_add_end_of_line_as_note(&current_note, false, false, false,
@@ -1101,8 +1221,7 @@
         add_bar_as_note(B_DIVISIO_FINALIS);
     }
 r   {
-        gregorio_change_shape(current_note, S_PUNCTUM_CAVUM,
-                legacy_oriscus_orientation);
+        gregorio_add_cavum(current_note);
     }
 R   {
         gregorio_change_shape(current_note, S_LINEA_PUNCTUM,
@@ -1109,8 +1228,9 @@
                 legacy_oriscus_orientation);
     }
 r0  {
-        gregorio_change_shape(current_note, S_LINEA_PUNCTUM_CAVUM,
+        gregorio_change_shape(current_note, S_LINEA_PUNCTUM,
                 legacy_oriscus_orientation);
+        gregorio_add_cavum(current_note);
     }
 r1  {
         gregorio_add_special_sign(current_note, _ACCENTUS);
@@ -1127,6 +1247,15 @@
 r5  {
         gregorio_add_special_sign(current_note, _SEMI_CIRCULUS_REVERSUS);
     }
+r6  {
+        gregorio_add_special_sign(current_note, _MUSICA_FICTA_FLAT);
+    }
+r7  {
+        gregorio_add_special_sign(current_note, _MUSICA_FICTA_NATURAL);
+    }
+r8  {
+        gregorio_add_special_sign(current_note, _MUSICA_FICTA_SHARP);
+    }
 x   {
         gregorio_change_shape(current_note, S_FLAT, legacy_oriscus_orientation);
     }
@@ -1301,20 +1430,16 @@
                 legacy_oriscus_orientation);
     }
 \[hl:1\] {
-        current_note->supposed_high_ledger_line = true;
-        current_note->explicit_high_ledger_line = true;
+        LEDGER(high, EXPLICIT, true);
     }
 \[hl:0\] {
-        current_note->supposed_high_ledger_line = false;
-        current_note->explicit_high_ledger_line = true;
+        LEDGER(high, EXPLICIT, false);
     }
 \[ll:1\] {
-        current_note->supposed_low_ledger_line = true;
-        current_note->explicit_low_ledger_line = true;
+        LEDGER(low, EXPLICIT, true);
     }
 \[ll:0\] {
-        current_note->supposed_low_ledger_line = false;
-        current_note->explicit_low_ledger_line = true;
+        LEDGER(low, EXPLICIT, false);
     }
 .|\n {
         gregorio_messagef("det_notes_from_string", VERBOSITY_ERROR, 0,
@@ -1337,9 +1462,11 @@
     notes_lloc.last_line = loc->first_line;
     notes_lloc.last_column = loc->first_column;
     notes_lloc.last_offset = loc->first_offset;
+    notes_lloc.generate_point_and_click = loc->generate_point_and_click;
 
     staff_lines = score->staff_lines;
     highest_pitch = score->highest_pitch;
+    high_ledger_line_pitch = score->high_ledger_line_pitch;
     legacy_oriscus_orientation = score->legacy_oriscus_orientation;
 
     /* a small optimization could uccur here: we could do it only once at the

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-l.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-l.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-l.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -398,8 +398,8 @@
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 71
-#define YY_END_OF_BUFFER 72
+#define YY_NUM_RULES 77
+#define YY_END_OF_BUFFER 78
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -407,41 +407,42 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int32_t yy_accept[296] =
+static yyconst flex_int32_t yy_accept[309] =
     {   0,
-        0,    0,    7,    7,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   72,   25,
-       70,   25,   23,    6,   23,   23,   23,   23,   23,   23,
-       23,   23,   23,    2,    2,    3,    3,    1,    7,    7,
-       71,   27,   26,   49,   65,   28,   55,   63,   64,   56,
-       57,   66,   68,   67,   27,   47,   48,   55,   71,   54,
-       55,   51,   50,    5,    4,   55,    0,    0,   23,    6,
-       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
-       23,    2,    1,    7,    7,    0,    7,    7,    0,    7,
-        8,    0,   27,   26,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   78,   25,   76,   25,   23,    6,   23,   23,
+       23,   23,   23,   23,   23,   23,    2,    2,    3,    3,
+        1,    8,    9,   27,   26,   50,   71,   29,   28,   56,
+       64,   65,   57,   58,   72,   74,   73,   49,   48,   77,
+       77,   55,   56,   52,   51,    5,    4,   56,   77,   69,
+       77,   77,   70,    0,    0,   23,    6,   23,   23,   23,
+       23,   23,   23,   23,   23,   23,   23,    2,    1,    8,
+        0,    7,    0,   27,   26,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,   66,   69,   27,   48,
-       47,    0,   54,    0,   51,   50,    5,    4,    0,   24,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   72,
+       75,   49,   48,    0,   55,    0,   52,   51,    5,    4,
+        0,   69,   69,   69,    0,    0,   70,    0,   24,   23,
        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
-       23,   23,   23,    7,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   39,   37,   43,    0,   31,    0,    0,
-        0,    0,    0,   52,   62,    0,    0,    0,   23,   23,
-        0,   23,   23,   23,   14,   23,   10,   23,   23,   23,
-       40,   38,   44,    0,   32,    0,    0,    0,    0,    0,
-       60,    0,   41,   45,   33,   35,    0,   53,    0,   23,
-       23,   23,    0,   23,   23,    0,    0,   23,   23,   23,
+       23,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   40,   38,    0,   44,    0,   32,    0,    0,    0,
+        0,    0,    0,   53,   63,    0,    0,    0,   23,   23,
+        0,   23,   23,   14,   23,   11,   23,   23,   23,   41,
+       39,   45,    0,   33,    0,    0,    0,    0,    0,    0,
+       61,    0,    0,    0,   68,   67,   42,   46,   34,   36,
 
-       61,    0,   42,   34,   36,   58,    0,   46,    0,   23,
-       18,    9,   23,   23,   23,   23,   23,   23,   23,    0,
-        0,    0,   29,   59,   23,   23,   23,   23,   23,   23,
-       23,   23,   23,   23,   30,   23,   23,    0,   19,   23,
+        0,   54,    0,   23,   23,   23,    0,   23,    0,    0,
+       23,   23,   23,   62,    0,   43,   35,   37,   59,    0,
+        0,    0,   68,   47,    0,   23,   18,   10,   23,   23,
+       23,   23,   23,   23,    0,    0,    0,    0,   30,   60,
+       23,   23,   23,   23,   23,   23,   23,   23,   23,   31,
+        0,    0,   66,   23,   23,   19,   23,   23,   23,    0,
        23,   23,    0,   23,   23,   23,   23,   23,   23,   23,
-       23,   23,   23,   23,   17,   23,   23,   23,   23,   21,
-       23,   23,   23,   23,   23,   23,   23,   23,   23,   20,
-       23,   23,   23,   23,   23,   23,   23,   13,   23,   15,
-       23,   23,   12,   23,   23,   23,   23,   23,   11,   16,
-       23,   23,   23,   22,    0
+       23,   17,   23,   23,   23,   21,   23,   23,   23,   23,
+       23,   23,   23,   23,   20,   23,   23,   23,   23,   23,
+       23,   23,   15,   23,   23,   13,   23,   23,   23,   23,
 
+       23,   12,   16,   23,   23,   23,   22,    0
     } ;
 
 static yyconst YY_CHAR yy_ec[256] =
@@ -450,285 +451,297 @@
         1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    5,    1,    1,    6,    1,    7,    1,    1,    8,
-        9,    1,    1,    1,   10,    1,   11,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,   12,   13,   14,   15,
-        1,   16,    1,    1,   17,   17,   17,   17,   17,   17,
-       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
-       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
-       18,    1,   19,    1,   17,    1,   20,   21,   22,   23,
+        9,    1,    1,   10,   11,   12,   13,   14,   14,   14,
+       14,   14,   14,   14,   14,   14,   14,   15,   16,   17,
+        1,   18,    1,    1,   19,   19,   19,   19,   19,   19,
+       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
+       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
+       20,    1,   21,    1,   19,    1,   22,   23,   24,   25,
 
-       24,   25,   26,   27,   28,   17,   17,   29,   30,   31,
-       32,   33,   17,   34,   35,   36,   37,   38,   17,   17,
-       39,   17,   40,   41,   42,    1,    1,    1,    1,    1,
+       26,   27,   28,   29,   30,   19,   19,   31,   32,   33,
+       34,   35,   19,   36,   37,   38,   39,   40,   19,   19,
+       41,   19,   42,   43,   44,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,   43,    1,    1,    1,
-       44,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,   45,    1,    1,    1,
+       46,    1,    1,    1,    1,    1,    1,    1,    1,    1,
 
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,   45,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,   47,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1
     } ;
 
-static yyconst YY_CHAR yy_meta[46] =
+static yyconst YY_CHAR yy_meta[48] =
     {   0,
-        1,    1,    2,    2,    1,    1,    3,    3,    4,    5,
-        1,    6,    1,    7,    8,    1,    6,    3,    3,    6,
+        1,    1,    2,    2,    1,    1,    3,    3,    4,    3,
+        5,    3,    1,    6,    3,    7,    8,    1,    6,    3,
+        3,    6,    6,    6,    6,    6,    6,    6,    6,    6,
         6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
-        6,    6,    6,    6,    6,    6,    6,    6,    6,    9,
-        4,    9,    1,    1,    1
+        6,    9,    4,    9,    1,    1,    1
     } ;
 
-static yyconst flex_uint32_t yy_base[316] =
+static yyconst flex_uint32_t yy_base[326] =
     {   0,
-        0,   43,   48,   50,   86,  126,   39,   50,  166,  206,
-      662,  661,   52,   54,   57,   62,  660,  659,  673,  678,
-      678,  665,  661,  665,   61,   53,   58,   64,   59,   65,
-       62,   66,   63,   80,   99,  678,  662,   63,  106,  108,
-      110,    0,  113,  678,  678,  678,  238,  657,  678,  678,
-      678,    0,  135,  678,  139,  148,    0,  656,  678,    0,
-      655,    0,  128,    0,  139,  654,  152,    0,  654,  678,
-      117,  125,  150,   60,  144,  152,  154,  157,  161,  169,
-      170,  188,  150,  193,  201,  208,  649,  214,    0,  216,
-      195,  199,    0,  229,  256,  633,  645,  644,  149,  643,
+        0,   45,  707,  706,   90,  132,   41,   44,   71,   78,
+      704,  703,   51,   53,   55,   57,  702,  701,   50,   51,
+       65,  152,  717,  724,  724,  709,  704,  709,   75,   78,
+       55,   74,   65,  101,   92,  107,   68,   76,  724,  706,
+       79,    0,  156,    0,  164,  724,  724,  724,  724,  175,
+      699,  724,  724,  724,    0,  179,  724,    0,  187,  698,
+      724,    0,  697,    0,  113,    0,  126,  696,  694,  107,
+      191,  214,  724,  134,    0,  696,  724,  140,  164,  135,
+      200,  152,  139,  210,  176,  192,  209,  221,  182,    0,
+      232,  236,  241,    0,  245,  249,  262,  675,  687,  237,
 
-      629,  204,  621,  627,  639,  635,    0,  236,  235,    0,
-      292,  618,    0,  614,    0,  232,    0,  247,  631,  252,
-      640,  247,  217,  639,  178,  253,  242,  237,  260,  257,
-      255,  254,  261,  634,  631,  630,  267,  629,  615,  621,
-      606,  612,  604,  678,  678,  678,  623,  678,  617,  621,
-      620,  619,  618,  678,  678,  600,  616,  602,  262,  275,
-      600,  619,  289,  290,  618,  617,  616,  291,  292,  293,
-      678,  678,  678,  609,  678,  603,  607,  606,  605,  604,
-      678,  599,  678,  678,  678,  678,  602,  678,  581,  295,
-      296,  109,  594,  299,  300,  291,  586,  298,  604,  601,
+      168,  686,  672,  666,  232,  663,  669,  681,  677,    0,
+      255,    0,  259,  660,    0,  656,    0,  262,    0,  266,
+      673,  680,  679,  260,  276,  300,  724,  304,  272,  681,
+      276,   98,  680,  266,  285,  271,  287,  301,  280,  303,
+      304,  659,  671,  670,  298,  669,  655,  661,  646,  652,
+      644,  724,  724,  655,  724,  662,  724,  656,  330,  660,
+      659,  658,  657,  724,  724,  639,  655,  641,  282,  308,
+      639,  659,  310,  658,  657,  656,  312,  314,  317,  724,
+      724,  724,  648,  724,  642,  646,  645,  644,  643,  638,
+      724,  637,  348,  352,  369,  724,  724,  724,  724,  724,
 
-      678,  577,  678,  678,  678,  678,  572,  678,  569,  301,
-      562,  555,  302,  153,  312,  313,  314,  315,  316,  536,
-      523,  534,  678,  678,  319,  321,  539,  318,  323,  322,
-      326,  444,  329,  330,  678,  334,  339,  415,  436,  340,
-      342,  343,  413,  346,  345,  349,  350,  352,  353,  358,
-      354,  359,  361,  362,  434,  363,  364,  365,  377,  433,
-      380,  372,  375,  371,  382,  385,  388,  391,  386,  431,
-      392,  394,  397,  403,  407,  406,  384,  426,  411,  424,
-      412,  413,  219,  414,  415,  416,  419,  417,  213,  115,
-      421,  423,  420,  113,  678,  455,  464,  473,  482,  491,
+      633,  724,  604,  319,  347,  315,  615,  353,  335,  595,
+      348,  608,  603,  724,  590,  724,  724,  724,  724,  575,
+      589,  374,  386,  724,  507,  327,  510,  509,  313,  357,
+      351,  335,  369,  371,  495,  487,  497,  391,  724,  724,
+      373,  375,  386,  387,  390,  189,  503,  389,  391,  724,
+      414,  426,  724,  400,  394,  500,  395,  396,  413,  476,
+      402,  409,  443,  422,  414,  425,  427,  429,  432,  430,
+      438,  498,  442,  441,  445,  495,  446,  447,  448,  451,
+      452,  454,  456,  458,  491,  462,  459,  463,  470,  473,
+      449,  475,  272,  478,  479,  260,  482,  483,  484,  485,
 
-      500,  509,  514,  520,  529,  538,  547,  554,  563,  570,
-      577,  586,  595,   61,  604
+      486,  219,  160,  487,  489,  493,  122,  724,  526,  535,
+      544,  553,  562,  571,  580,  589,  594,  600,  609,  615,
+      624,  631,  640,  649,   67
     } ;
 
-static yyconst flex_int32_t yy_def[316] =
+static yyconst flex_int32_t yy_def[326] =
     {   0,
-      295,    1,  296,  296,  297,  297,  298,  298,  299,  299,
-      300,  300,  301,  301,  302,  302,  300,  300,  295,  295,
-      295,  295,  303,  295,  303,  303,  303,  303,  303,  303,
-      303,  303,  303,  295,  295,  295,  295,  295,  304,  305,
-      306,  307,  295,  295,  295,  295,  295,  295,  295,  295,
-      295,  308,  295,  295,  309,  295,  310,  295,  295,  311,
-      295,  312,  295,  313,  295,  295,  295,  314,  303,  295,
-      303,  303,  303,  303,  303,  303,  303,  303,  303,  303,
-      303,  295,  295,  304,  305,  306,  305,  305,  315,  306,
-      295,  295,  307,  295,  295,  295,  295,  295,  295,  295,
+      308,    1,  309,  309,  310,  310,  311,  311,  312,  312,
+      313,  313,  314,  314,  315,  315,  313,  313,  316,  316,
+      316,  316,  308,  308,  308,  308,  317,  308,  317,  317,
+      317,  317,  317,  317,  317,  317,  308,  308,  308,  308,
+      308,  318,  308,  319,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  320,  308,  308,  321,  308,  308,
+      308,  322,  308,  323,  308,  324,  308,  308,  308,  308,
+      308,  308,  308,  308,  325,  317,  308,  317,  317,  317,
+      317,  317,  317,  317,  317,  317,  317,  308,  308,  318,
+      308,  308,  308,  319,  308,  308,  308,  308,  308,  308,
 
-      295,  295,  295,  295,  295,  295,  308,  295,  309,  310,
-      295,  295,  311,  295,  312,  295,  313,  295,  295,  295,
-      314,  303,  303,  303,  303,  303,  303,  303,  303,  303,
-      303,  303,  303,  315,  295,  295,  295,  295,  295,  295,
-      295,  295,  295,  295,  295,  295,  295,  295,  295,  295,
-      295,  295,  295,  295,  295,  295,  295,  295,  303,  303,
-      314,  303,  303,  303,  303,  303,  303,  303,  303,  303,
-      295,  295,  295,  295,  295,  295,  295,  295,  295,  295,
-      295,  295,  295,  295,  295,  295,  295,  295,  295,  303,
-      303,  314,  314,  303,  303,  314,  314,  303,  303,  303,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  320,
+      308,  321,  308,  308,  322,  308,  323,  308,  324,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  325,
+      317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+      317,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  317,  317,
+      325,  317,  317,  317,  317,  317,  317,  317,  317,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 
-      295,  295,  295,  295,  295,  295,  295,  295,  295,  303,
-      303,  314,  314,  303,  303,  314,  314,  314,  303,  314,
-      314,  295,  295,  295,  303,  314,  303,  303,  314,  314,
-      314,  303,  314,  314,  295,  303,  314,  314,  303,  314,
-      314,  314,  314,  314,  314,  303,  314,  314,  314,  314,
-      314,  314,  314,  314,  303,  314,  314,  314,  314,  314,
-      314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
-      314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
-      314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
-      314,  314,  314,  314,    0,  295,  295,  295,  295,  295,
+      308,  308,  308,  317,  317,  325,  325,  317,  325,  325,
+      317,  317,  317,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  317,  317,  325,  325,  317,
+      325,  325,  325,  317,  325,  325,  308,  308,  308,  308,
+      317,  325,  317,  325,  325,  325,  317,  325,  325,  308,
+      308,  308,  308,  317,  325,  317,  325,  325,  325,  325,
+      325,  325,  308,  317,  325,  325,  325,  325,  325,  325,
+      325,  317,  325,  325,  325,  325,  325,  325,  325,  325,
+      325,  325,  325,  325,  325,  325,  325,  325,  325,  325,
+      325,  325,  325,  325,  325,  325,  325,  325,  325,  325,
 
-      295,  295,  295,  295,  295,  295,  295,  295,  295,  295,
-      295,  295,  295,  295,  295
+      325,  325,  325,  325,  325,  325,  325,    0,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308
     } ;
 
-static yyconst flex_uint32_t yy_nxt[724] =
+static yyconst flex_uint32_t yy_nxt[772] =
     {   0,
-       20,   20,   21,   20,   20,   20,   22,   20,   20,   20,
-       20,   23,   24,   20,   20,   20,   23,   20,   20,   25,
-       23,   23,   26,   23,   23,   27,   23,   28,   29,   30,
-       31,   32,   23,   23,   33,   23,   23,   23,   23,   20,
-       20,   20,   20,   20,   20,   34,   35,   53,   36,   37,
-       40,   40,   40,   40,   63,   63,   63,   63,   53,   65,
-       65,   41,   68,   41,   65,   65,  121,   68,   68,   68,
-       68,   68,   68,   68,   68,   68,   73,   74,   76,   54,
-      125,   78,   82,   82,   80,   38,   38,   38,   43,   43,
-       54,   71,   44,   45,   75,   46,   77,   72,   81,   79,
+       24,   24,   25,   24,   24,   24,   26,   24,   24,   24,
+       24,   24,   24,   27,   28,   24,   24,   24,   27,   24,
+       24,   29,   27,   27,   30,   27,   27,   31,   27,   27,
+       32,   33,   34,   35,   27,   27,   36,   27,   27,   27,
+       27,   24,   24,   24,   24,   24,   24,   37,   38,   56,
+       39,   40,   56,   65,   65,   65,   65,   67,   67,   67,
+       67,   69,   69,   70,   70,   75,   71,   71,   71,   71,
+       88,   88,  130,   59,   59,   75,   81,   72,   88,   88,
+       59,   59,   73,   57,   75,   75,   57,   60,   75,   41,
+       41,   41,   45,   45,   60,   82,   46,   47,   83,   48,
 
-       47,   82,   82,   48,   49,   83,   83,   83,   85,   85,
-       88,   88,   91,   91,   94,   94,   94,   94,   68,   86,
-      212,   89,   68,   92,   68,   50,   68,   51,   43,   43,
-      116,  116,   44,   45,   68,   46,  108,  108,  108,  108,
-       47,  118,  118,   48,   49,  110,  110,  122,  110,  111,
-      111,  111,  111,   68,  120,  120,  110,  110,   67,   68,
-      123,   68,   68,   68,  146,   50,   68,   51,   56,   56,
-       68,  126,   57,   57,  124,   57,  128,  129,   68,   68,
-       58,  227,  127,   57,   57,  147,  130,   68,  131,  133,
-       82,   82,   83,   83,   83,   85,   85,   91,   91,  162,
+       49,   48,   75,   80,   48,   48,   50,   78,   75,   51,
+       52,   75,   61,   79,   61,  118,  118,   75,  123,   61,
+      124,   61,   84,   89,   89,   89,  170,   85,  120,  120,
+       86,   53,   75,   54,   45,   45,  129,  129,   46,   47,
+       74,   48,   49,   48,   87,   75,   48,   48,   50,   75,
+       75,   51,   52,   71,   71,   71,   71,   91,   92,   92,
+       91,  133,   75,  136,   72,   95,   95,   95,   95,   73,
+       75,   93,  131,   53,   75,   54,   96,   96,   96,   96,
+      111,  111,  111,  111,  135,  155,   75,   97,  113,  113,
+      113,  113,  125,  125,  125,  125,   98,   99,  100,   75,
 
-      132,   91,   91,   88,   88,   59,   86,   59,   56,   56,
-      295,  295,   57,   57,   89,   57,   88,   88,   85,   85,
-       58,  295,   68,   57,   57,  150,   68,   89,   68,   86,
-       94,   94,   94,   94,  116,  116,  151,  108,  108,  108,
-      108,  110,  110,  160,  110,   59,   68,   59,   95,  118,
-      118,   68,  110,  110,  120,  120,   68,   96,   97,   98,
-      165,   99,   68,   68,   68,  100,   68,  164,  101,   68,
-       68,   68,  102,  103,  104,  105,  135,  136,  159,  137,
-      167,  166,  173,  138,   68,  170,  139,  169,  163,  168,
-      140,  141,  142,  111,  111,  111,  111,  190,   68,   68,
+      101,  132,   75,  126,  102,  139,  156,  103,  127,  104,
+       75,  105,  106,  107,  108,  128,  128,  128,  128,   75,
+       75,  259,  134,   88,   88,  140,   89,   89,   89,   75,
+      141,  127,  137,   91,   92,   92,   91,   91,   92,   92,
+       91,  138,   91,   92,   92,   91,   95,   95,   95,   95,
+       96,   96,   96,   96,  153,  160,  111,  111,  111,  111,
+      113,  113,  113,  113,  118,  118,  161,  154,  120,  120,
+       75,  123,  142,  124,  129,  129,   75,  125,  125,  125,
+      125,   75,   75,  104,  143,  144,   75,  145,  126,  172,
+       75,  146,   75,  127,  147,   75,  174,   75,  148,  149,
 
-       68,   68,   68,  174,   68,   68,  191,   68,   68,   68,
-       68,   68,  198,  216,  210,  199,  194,  200,  214,  215,
-      217,   68,   68,   68,   68,   68,  195,   68,   68,  211,
-       68,   68,   68,  226,  219,   68,  225,  228,   68,   68,
-      229,  239,  231,   68,  241,  230,  236,  240,   68,   68,
-      232,   68,   68,  237,   68,   68,  242,  245,   68,   68,
-      244,   68,   68,   68,  249,  246,  251,   68,   68,  250,
-       68,   68,   68,   68,   68,  254,  258,  247,  253,  255,
-       68,   68,  259,  256,   68,  263,   68,  257,  260,   68,
-      264,   68,  261,   68,   68,   68,  271,   68,  266,  262,
+      150,  128,  128,  128,  128,  128,  128,  128,  128,  169,
+      175,   75,  173,   75,   75,  182,  177,  127,   75,  204,
+       75,  127,   75,   75,   75,   75,  176,   75,  228,   75,
+      179,  193,  193,  193,  193,  211,  183,   75,  178,  212,
+      226,  205,  194,  213,  195,   75,  242,  196,  208,  193,
+      193,  193,  193,  222,  222,  222,  222,   75,   75,  231,
+      194,   75,  195,   75,  241,  196,  232,   75,  245,  196,
+      223,  223,  223,  223,  230,  222,  222,  222,  222,   75,
+      244,   75,  227,   75,  243,   75,  234,  223,  223,  223,
+      223,  196,  251,  251,  251,  251,   75,   75,  246,   75,
 
-       68,   68,  265,   68,  267,  269,   68,  268,  273,  270,
-      272,  274,   68,  276,  275,   68,   68,  278,  277,  283,
-       68,   68,   68,   68,   68,   68,   68,  279,   68,   68,
-       68,  282,   68,   68,  288,   68,  280,  281,  290,  286,
-       68,  287,   68,   68,  252,   68,  284,  285,  292,  248,
-      294,  289,  291,  243,  293,   39,   39,   39,   39,   39,
-       39,   39,   39,   39,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   55,   55,   55,   55,   55,   55,   55,   55,
-       55,   60,   60,   60,   60,   60,   60,   60,   60,   60,
+       75,   75,  254,  252,   75,   75,   75,  247,  253,  255,
+       75,  256,   75,  257,  258,  251,  251,  251,  251,   75,
+      262,  266,  261,   75,   75,  267,  252,  263,  263,  263,
+      263,  253,   75,  264,  265,   75,  270,   75,  268,   75,
+       75,  271,   75,  253,  263,  263,  263,  263,   75,  273,
+      274,   75,   75,  275,  272,   75,   75,   75,   75,   75,
+      253,   75,   75,  279,   75,  276,   75,  277,   75,   75,
+      278,  280,   75,   75,  282,  283,  281,  287,  286,  288,
+       75,  289,  284,   75,  285,   75,  296,  290,   75,   75,
+      291,  292,   75,   75,   75,   75,   75,   75,  293,   75,
 
-       62,   62,   62,   62,   62,   62,   62,   62,   62,   64,
-       64,   64,   64,   64,   64,   64,   64,   64,   69,   69,
-       84,   84,   84,   84,   84,   84,   84,   84,   84,   87,
-       87,   87,   87,   87,   87,   87,   87,   87,   90,   90,
-       90,   90,   90,   90,   90,   90,   90,   93,  238,  235,
-       93,  234,   93,   93,  107,  107,  107,  233,  107,  107,
-      107,  107,  107,  109,   68,  109,  109,  109,  109,  109,
-      110,   68,  110,  110,  110,  110,  110,  113,  113,  113,
-      113,  113,  113,  113,  224,  113,  115,  223,  115,  115,
-      115,  115,  115,  115,  115,  117,  222,  117,  117,  117,
+      295,   75,  294,   75,  301,   75,  303,  299,   75,  269,
+       75,  300,  297,  260,  250,  298,  305,  249,  248,   75,
+       75,  302,  306,  304,  240,  307,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   44,   44,   44,   44,   44,
+       44,   44,   44,   44,   55,   55,   55,   55,   55,   55,
+       55,   55,   55,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   62,   62,   62,   62,   62,   62,   62,   62,
+       62,   64,   64,   64,   64,   64,   64,   64,   64,   64,
+       66,   66,   66,   66,   66,   66,   66,   66,   66,   61,
+       61,   61,   61,   61,   61,   61,   61,   61,   76,   76,
 
-      117,  117,  117,  117,  134,  134,  134,  134,  134,  134,
-      221,  134,  134,  220,  218,  213,  209,  208,  207,  206,
-      205,  204,  203,  202,  201,   68,  197,  196,  193,  192,
-      189,  188,  187,  186,  185,  184,  183,  182,  181,  180,
-      179,  178,  177,  176,  175,  172,  171,   89,  161,   68,
-      158,  157,  156,  155,  154,  153,  152,  149,  148,  145,
-      144,  143,   89,   68,  119,  114,  112,  106,   67,   70,
-       68,   67,  295,   66,   66,   61,   61,   19,  295,  295,
-      295,  295,  295,  295,  295,  295,  295,  295,  295,  295,
-      295,  295,  295,  295,  295,  295,  295,  295,  295,  295,
+       90,   90,   90,   90,   90,   90,  239,   90,   90,   94,
+      238,  237,   94,  236,   94,  110,  110,  110,  235,  110,
+      110,  110,  110,  110,  112,  233,  112,  112,  112,  112,
+      112,  115,  115,  115,  115,  115,  115,  115,  229,  115,
+      117,  225,  117,  117,  117,  117,  117,  117,  117,  119,
+      224,  119,  119,  119,  119,  119,  119,  119,  221,  220,
+      219,  218,  217,  216,  215,  214,   75,  210,  209,  207,
+      206,  203,  202,  201,  200,  199,  198,  197,  192,  191,
+      190,  189,  188,  187,  186,  185,  184,  181,  180,  154,
+      171,   75,  122,  122,  168,  167,  166,  165,  164,  163,
 
-      295,  295,  295,  295,  295,  295,  295,  295,  295,  295,
-      295,  295,  295,  295,  295,  295,  295,  295,  295,  295,
-      295,  295,  295
+      162,  159,  158,  157,  152,  151,   75,  122,  121,  116,
+      114,  109,   74,   77,   75,   74,  308,   68,   68,   63,
+       63,   43,   43,   23,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308
     } ;
 
-static yyconst flex_int32_t yy_chk[724] =
+static yyconst flex_int32_t yy_chk[772] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    2,    2,    7,    2,    2,
-        3,    3,    4,    4,   13,   13,   14,   14,    8,   15,
-       15,    3,   26,    4,   16,   16,  314,   27,   29,   74,
-       25,   31,   33,   28,   30,   32,   26,   27,   29,    7,
-       74,   31,   34,   34,   33,    2,    2,    2,    5,    5,
-        8,   25,    5,    5,   28,    5,   30,   25,   33,   32,
+        1,    1,    1,    1,    1,    1,    1,    2,    2,    7,
+        2,    2,    8,   13,   13,   14,   14,   15,   15,   16,
+       16,   19,   20,   19,   20,   31,   21,   21,   21,   21,
+       37,   37,  325,    9,    9,   33,   31,   21,   38,   38,
+       10,   10,   21,    7,   32,   29,    8,    9,   30,    2,
+        2,    2,    5,    5,   10,   32,    5,    5,   33,    5,
 
-        5,   35,   35,    5,    5,   38,   38,   38,   39,   39,
-       40,   40,   41,   41,   43,   43,   43,   43,  192,   39,
-      192,   40,  294,   41,  290,    5,   71,    5,    6,    6,
-       63,   63,    6,    6,   72,    6,   53,   53,   53,   53,
-        6,   65,   65,    6,    6,   55,   55,   71,   55,   56,
-       56,   56,   56,   75,   67,   67,   55,   55,   67,   73,
-       72,   76,  214,   77,   99,    6,   78,    6,    9,    9,
-       79,   75,    9,    9,   73,    9,   77,   78,   80,   81,
-        9,  214,   76,    9,    9,   99,   78,  125,   79,   81,
-       82,   82,   83,   83,   83,   84,   84,   91,   91,  125,
+        5,    5,   35,   30,    5,    5,    5,   29,  132,    5,
+        5,   34,    9,   29,    9,   65,   65,   36,   70,   10,
+       70,   10,   34,   41,   41,   41,  132,   35,   67,   67,
+       36,    5,  307,    5,    6,    6,   74,   74,    6,    6,
+       74,    6,    6,    6,   36,   80,    6,    6,    6,   83,
+       78,    6,    6,   22,   22,   22,   22,   43,   43,   43,
+       43,   80,   82,   83,   22,   45,   45,   45,   45,   22,
+      303,   43,   78,    6,   79,    6,   50,   50,   50,   50,
+       56,   56,   56,   56,   82,  101,   85,   50,   59,   59,
+       59,   59,   71,   71,   71,   71,   50,   50,   50,  246,
 
-       80,   92,   92,   85,   85,    9,   84,    9,   10,   10,
-       86,   86,   10,   10,   85,   10,   88,   88,   90,   90,
-       10,   86,  289,   10,   10,  102,  123,   88,  283,   90,
-       94,   94,   94,   94,  116,  116,  102,  108,  108,  108,
-      108,  109,  109,  123,  109,   10,  128,   10,   47,  118,
-      118,  127,  109,  109,  120,  120,  122,   47,   47,   47,
-      128,   47,  126,  132,  131,   47,  130,  127,   47,  129,
-      133,  159,   47,   47,   47,   47,   95,   95,  122,   95,
-      130,  129,  137,   95,  160,  133,   95,  132,  126,  131,
-       95,   95,   95,  111,  111,  111,  111,  159,  163,  164,
+       50,   79,   86,   71,   50,   85,  101,   50,   71,   50,
+       81,   50,   50,   50,   50,   72,   72,   72,   72,   87,
+       84,  246,   81,   88,   88,   86,   89,   89,   89,  302,
+       87,   72,   84,   91,   91,   91,   91,   92,   92,   92,
+       92,   84,   93,   93,   93,   93,   95,   95,   95,   95,
+       96,   96,   96,   96,  100,  105,  111,  111,  111,  111,
+      113,  113,  113,  113,  118,  118,  105,  100,  120,  120,
+      296,  124,   96,  124,  129,  129,  134,  125,  125,  125,
+      125,  136,  293,   96,   97,   97,  131,   97,  125,  134,
+      139,   97,  169,  125,   97,  135,  136,  137,   97,   97,
 
-      168,  169,  170,  137,  190,  191,  160,  198,  194,  195,
-      210,  213,  168,  196,  190,  169,  163,  170,  194,  195,
-      196,  215,  216,  217,  218,  219,  164,  228,  225,  191,
-      226,  230,  229,  213,  198,  231,  210,  215,  233,  234,
-      216,  228,  218,  236,  230,  217,  225,  229,  237,  240,
-      219,  241,  242,  226,  245,  244,  231,  234,  246,  247,
-      233,  248,  249,  251,  240,  236,  242,  250,  252,  241,
-      253,  254,  256,  257,  258,  245,  249,  237,  244,  246,
-      264,  262,  250,  247,  263,  254,  259,  248,  251,  261,
-      256,  265,  252,  277,  266,  269,  264,  267,  258,  253,
+       97,  126,  126,  126,  126,  128,  128,  128,  128,  131,
+      137,  138,  135,  140,  141,  145,  139,  126,  170,  169,
+      173,  128,  177,  229,  178,  206,  138,  179,  206,  204,
+      141,  159,  159,  159,  159,  177,  145,  226,  140,  178,
+      204,  170,  159,  179,  159,  232,  229,  159,  173,  193,
+      193,  193,  193,  194,  194,  194,  194,  205,  211,  209,
+      193,  231,  193,  208,  226,  193,  209,  230,  232,  194,
+      195,  195,  195,  195,  208,  222,  222,  222,  222,  233,
+      231,  234,  205,  241,  230,  242,  211,  223,  223,  223,
+      223,  222,  238,  238,  238,  238,  243,  244,  233,  248,
 
-      268,  271,  257,  272,  259,  262,  273,  261,  266,  263,
-      265,  267,  274,  269,  268,  276,  275,  272,  271,  277,
-      279,  281,  282,  284,  285,  286,  288,  273,  287,  293,
-      291,  276,  292,  280,  285,  278,  274,  275,  287,  282,
-      270,  284,  260,  255,  243,  239,  279,  281,  291,  238,
-      293,  286,  288,  232,  292,  296,  296,  296,  296,  296,
-      296,  296,  296,  296,  297,  297,  297,  297,  297,  297,
-      297,  297,  297,  298,  298,  298,  298,  298,  298,  298,
-      298,  298,  299,  299,  299,  299,  299,  299,  299,  299,
-      299,  300,  300,  300,  300,  300,  300,  300,  300,  300,
+      245,  249,  241,  238,  255,  257,  258,  234,  238,  242,
+      254,  243,  261,  244,  245,  251,  251,  251,  251,  262,
+      249,  257,  248,  259,  265,  258,  251,  252,  252,  252,
+      252,  251,  264,  254,  255,  266,  261,  267,  259,  268,
+      270,  262,  269,  252,  263,  263,  263,  263,  271,  265,
+      266,  274,  273,  267,  264,  275,  277,  278,  279,  291,
+      263,  280,  281,  271,  282,  268,  283,  269,  284,  287,
+      270,  273,  286,  288,  275,  277,  274,  281,  280,  282,
+      289,  283,  278,  290,  279,  292,  291,  284,  294,  295,
+      286,  287,  297,  298,  299,  300,  301,  304,  288,  305,
 
-      301,  301,  301,  301,  301,  301,  301,  301,  301,  302,
-      302,  302,  302,  302,  302,  302,  302,  302,  303,  303,
-      304,  304,  304,  304,  304,  304,  304,  304,  304,  305,
-      305,  305,  305,  305,  305,  305,  305,  305,  306,  306,
-      306,  306,  306,  306,  306,  306,  306,  307,  227,  222,
-      307,  221,  307,  307,  308,  308,  308,  220,  308,  308,
-      308,  308,  308,  309,  212,  309,  309,  309,  309,  309,
-      310,  211,  310,  310,  310,  310,  310,  311,  311,  311,
-      311,  311,  311,  311,  209,  311,  312,  207,  312,  312,
-      312,  312,  312,  312,  312,  313,  202,  313,  313,  313,
+      290,  285,  289,  306,  298,  276,  300,  295,  272,  260,
+      256,  297,  292,  247,  237,  294,  304,  236,  235,  228,
+      227,  299,  305,  301,  225,  306,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  310,  310,  310,  310,  310,
+      310,  310,  310,  310,  311,  311,  311,  311,  311,  311,
+      311,  311,  311,  312,  312,  312,  312,  312,  312,  312,
+      312,  312,  313,  313,  313,  313,  313,  313,  313,  313,
+      313,  314,  314,  314,  314,  314,  314,  314,  314,  314,
+      315,  315,  315,  315,  315,  315,  315,  315,  315,  316,
+      316,  316,  316,  316,  316,  316,  316,  316,  317,  317,
 
-      313,  313,  313,  313,  315,  315,  315,  315,  315,  315,
-      200,  315,  315,  199,  197,  193,  189,  187,  182,  180,
-      179,  178,  177,  176,  174,  167,  166,  165,  162,  161,
-      158,  157,  156,  153,  152,  151,  150,  149,  147,  143,
-      142,  141,  140,  139,  138,  136,  135,  134,  124,  121,
-      119,  114,  112,  106,  105,  104,  103,  101,  100,   98,
-       97,   96,   87,   69,   66,   61,   58,   48,   37,   24,
-       23,   22,   19,   18,   17,   12,   11,  295,  295,  295,
-      295,  295,  295,  295,  295,  295,  295,  295,  295,  295,
-      295,  295,  295,  295,  295,  295,  295,  295,  295,  295,
+      318,  318,  318,  318,  318,  318,  221,  318,  318,  319,
+      220,  215,  319,  213,  319,  320,  320,  320,  212,  320,
+      320,  320,  320,  320,  321,  210,  321,  321,  321,  321,
+      321,  322,  322,  322,  322,  322,  322,  322,  207,  322,
+      323,  203,  323,  323,  323,  323,  323,  323,  323,  324,
+      201,  324,  324,  324,  324,  324,  324,  324,  192,  190,
+      189,  188,  187,  186,  185,  183,  176,  175,  174,  172,
+      171,  168,  167,  166,  163,  162,  161,  160,  158,  156,
+      154,  151,  150,  149,  148,  147,  146,  144,  143,  142,
+      133,  130,  123,  122,  121,  116,  114,  109,  108,  107,
 
-      295,  295,  295,  295,  295,  295,  295,  295,  295,  295,
-      295,  295,  295,  295,  295,  295,  295,  295,  295,  295,
-      295,  295,  295
+      106,  104,  103,  102,   99,   98,   76,   69,   68,   63,
+       60,   51,   40,   28,   27,   26,   23,   18,   17,   12,
+       11,    4,    3,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -752,7 +765,7 @@
  * This file implements the score lexer.
  *
  * Gregorio score determination in gabc input.
- * Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *
@@ -817,7 +830,7 @@
 #define YY_INPUT(buf,result,max_size) \
     if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) { \
         int c = '*'; \
-        size_t n; \
+        int n; \
         for (n = 0; n < max_size \
                 && (c = getc(gabc_score_determination_in)) != EOF \
                 && c != '\n'; ++n ) { \
@@ -855,11 +868,13 @@
 
 
 
+
+
 /* The expression for attribute below is rather messy because we allow
 for (a) single-line values, ending with a semicolon at end of line or a
 double semicolon, (b) multi-line values, which end at a double
 semicolon. */
-#line 863 "gabc/gabc-score-determination-l.c"
+#line 878 "gabc/gabc-score-determination-l.c"
 
 #define INITIAL 0
 #define attribute 1
@@ -870,6 +885,8 @@
 #define comments 6
 #define inicomments 7
 #define alt 8
+#define protrusion_value 9
+#define protrusion_end 10
 
 #ifndef YY_NO_UNISTD_H
 /* Special case for "unistd.h", since it is non-ANSI. We include it way
@@ -1090,9 +1107,9 @@
 		}
 
 	{
-#line 134 "gabc/gabc-score-determination.l"
+#line 136 "gabc/gabc-score-determination.l"
 
-#line 1096 "gabc/gabc-score-determination-l.c"
+#line 1113 "gabc/gabc-score-determination-l.c"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -1120,13 +1137,13 @@
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 296 )
+				if ( yy_current_state >= 309 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_base[yy_current_state] != 678 );
+		while ( yy_base[yy_current_state] != 724 );
 
 yy_find_action:
 		yy_act = yy_accept[yy_current_state];
@@ -1152,7 +1169,7 @@
 
 case 1:
 YY_RULE_SETUP
-#line 135 "gabc/gabc-score-determination.l"
+#line 137 "gabc/gabc-score-determination.l"
 {
         /* BOM written by a lot of windows softwares when they write UTF-8 */
     }
@@ -1160,7 +1177,7 @@
 case 2:
 /* rule 2 can match eol */
 YY_RULE_SETUP
-#line 138 "gabc/gabc-score-determination.l"
+#line 140 "gabc/gabc-score-determination.l"
 {
         /* ignoring empty lines */
     }
@@ -1167,7 +1184,7 @@
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 141 "gabc/gabc-score-determination.l"
+#line 143 "gabc/gabc-score-determination.l"
 {
         BEGIN(inicomments);
     }
@@ -1175,7 +1192,7 @@
 case 4:
 /* rule 4 can match eol */
 YY_RULE_SETUP
-#line 144 "gabc/gabc-score-determination.l"
+#line 146 "gabc/gabc-score-determination.l"
 {
         BEGIN(INITIAL);
     }
@@ -1182,7 +1199,7 @@
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 147 "gabc/gabc-score-determination.l"
+#line 149 "gabc/gabc-score-determination.l"
 {
         /* ignored */
     }
@@ -1189,7 +1206,7 @@
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 150 "gabc/gabc-score-determination.l"
+#line 152 "gabc/gabc-score-determination.l"
 {
         BEGIN(attribute);
         return COLON;
@@ -1198,33 +1215,42 @@
 case 7:
 /* rule 7 can match eol */
 YY_RULE_SETUP
-#line 154 "gabc/gabc-score-determination.l"
+#line 156 "gabc/gabc-score-determination.l"
 {
-        gabc_score_determination_lval.text =
-                gregorio_strdup(gabc_score_determination_text);
-        return ATTRIBUTE;
+         BEGIN(INITIAL);
+         return SEMICOLON;
     }
 	YY_BREAK
 case 8:
 /* rule 8 can match eol */
 YY_RULE_SETUP
-#line 159 "gabc/gabc-score-determination.l"
+#line 160 "gabc/gabc-score-determination.l"
 {
-         BEGIN(INITIAL);
-         return SEMICOLON;
+        gabc_score_determination_lval.text =
+                gregorio_strdup(gabc_score_determination_text);
+        return ATTRIBUTE;
     }
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 163 "gabc/gabc-score-determination.l"
+#line 165 "gabc/gabc-score-determination.l"
 {
+        gabc_score_determination_lval.text =
+                gregorio_strdup(gabc_score_determination_text);
+        return ATTRIBUTE;
+}
+	YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 170 "gabc/gabc-score-determination.l"
+{
          gabc_score_determination_lval.character = gabc_score_determination_text[5];
          return DEF_MACRO;
     }
 	YY_BREAK
-case 10:
+case 11:
 YY_RULE_SETUP
-#line 167 "gabc/gabc-score-determination.l"
+#line 174 "gabc/gabc-score-determination.l"
 {
         gabc_score_determination_lval.text =
                 gregorio_strdup(gabc_score_determination_text);
@@ -1231,9 +1257,9 @@
          return NAME;
     }
 	YY_BREAK
-case 11:
+case 12:
 YY_RULE_SETUP
-#line 172 "gabc/gabc-score-determination.l"
+#line 179 "gabc/gabc-score-determination.l"
 {
         gabc_score_determination_lval.text =
                 gregorio_strdup(gabc_score_determination_text);
@@ -1240,9 +1266,9 @@
         return SCORE_COPYRIGHT;
     }
 	YY_BREAK
-case 12:
+case 13:
 YY_RULE_SETUP
-#line 177 "gabc/gabc-score-determination.l"
+#line 184 "gabc/gabc-score-determination.l"
 {
         gabc_score_determination_lval.text =
                 gregorio_strdup(gabc_score_determination_text);
@@ -1249,17 +1275,9 @@
         return GABC_COPYRIGHT;
     }
 	YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 182 "gabc/gabc-score-determination.l"
-{
-        /* DEPRECATED for removal in 5.0 */
-        return INITIAL_STYLE;
-    }
-	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 186 "gabc/gabc-score-determination.l"
+#line 189 "gabc/gabc-score-determination.l"
 {
         gabc_score_determination_lval.text =
                 gregorio_strdup(gabc_score_determination_text);
@@ -1268,7 +1286,7 @@
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 191 "gabc/gabc-score-determination.l"
+#line 194 "gabc/gabc-score-determination.l"
 {
         gabc_score_determination_lval.text =
                 gregorio_strdup(gabc_score_determination_text);
@@ -1277,7 +1295,7 @@
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 196 "gabc/gabc-score-determination.l"
+#line 199 "gabc/gabc-score-determination.l"
 {
         gabc_score_determination_lval.text =
                 gregorio_strdup(gabc_score_determination_text);
@@ -1286,7 +1304,7 @@
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 201 "gabc/gabc-score-determination.l"
+#line 204 "gabc/gabc-score-determination.l"
 {
         gabc_score_determination_lval.text =
                 gregorio_strdup(gabc_score_determination_text);
@@ -1295,7 +1313,7 @@
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 206 "gabc/gabc-score-determination.l"
+#line 209 "gabc/gabc-score-determination.l"
 {
         gabc_score_determination_lval.text =
                 gregorio_strdup(gabc_score_determination_text);
@@ -1304,7 +1322,7 @@
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 211 "gabc/gabc-score-determination.l"
+#line 214 "gabc/gabc-score-determination.l"
 {
         gabc_score_determination_lval.text =
                 gregorio_strdup(gabc_score_determination_text);
@@ -1313,7 +1331,7 @@
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 216 "gabc/gabc-score-determination.l"
+#line 219 "gabc/gabc-score-determination.l"
 {
         gabc_score_determination_lval.text =
                 gregorio_strdup(gabc_score_determination_text);
@@ -1322,7 +1340,7 @@
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 221 "gabc/gabc-score-determination.l"
+#line 224 "gabc/gabc-score-determination.l"
 {
         gabc_score_determination_lval.text =
                 gregorio_strdup(gabc_score_determination_text);
@@ -1331,7 +1349,7 @@
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 226 "gabc/gabc-score-determination.l"
+#line 229 "gabc/gabc-score-determination.l"
 {
         gabc_score_determination_lval.text =
                 gregorio_strdup(gabc_score_determination_text);
@@ -1340,7 +1358,7 @@
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 231 "gabc/gabc-score-determination.l"
+#line 234 "gabc/gabc-score-determination.l"
 {
         gabc_score_determination_lval.text =
                 gregorio_strdup(gabc_score_determination_text);
@@ -1350,7 +1368,7 @@
 case 24:
 /* rule 24 can match eol */
 YY_RULE_SETUP
-#line 236 "gabc/gabc-score-determination.l"
+#line 239 "gabc/gabc-score-determination.l"
 {
        BEGIN(score);
        return END_OF_DEFINITIONS;
@@ -1358,7 +1376,7 @@
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 240 "gabc/gabc-score-determination.l"
+#line 243 "gabc/gabc-score-determination.l"
 {
         gregorio_messagef("det_score", VERBOSITY_ERROR, 0,
                 _("unrecognized character: \"%c\" in definition part"),
@@ -1368,7 +1386,7 @@
 case 26:
 /* rule 26 can match eol */
 YY_RULE_SETUP
-#line 245 "gabc/gabc-score-determination.l"
+#line 248 "gabc/gabc-score-determination.l"
 {
         RETURN_SPACE;
     }
@@ -1375,7 +1393,7 @@
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 248 "gabc/gabc-score-determination.l"
+#line 251 "gabc/gabc-score-determination.l"
 {
         RETURN_CHARACTERS;
     }
@@ -1382,7 +1400,7 @@
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 251 "gabc/gabc-score-determination.l"
+#line 254 "gabc/gabc-score-determination.l"
 {
         return HYPHEN;
     }
@@ -1389,277 +1407,330 @@
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 254 "gabc/gabc-score-determination.l"
+#line 257 "gabc/gabc-score-determination.l"
 {
-        return NLBA_B;
+        gabc_score_determination_lval.text =
+                gregorio_strdup(gabc_score_determination_text);
+        return PROTRUDING_PUNCTUATION;
     }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 257 "gabc/gabc-score-determination.l"
+#line 262 "gabc/gabc-score-determination.l"
 {
-        return NLBA_E;
+        return NLBA_B;
     }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 260 "gabc/gabc-score-determination.l"
+#line 265 "gabc/gabc-score-determination.l"
 {
-        START_STYLE(I);
+        return NLBA_E;
     }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 263 "gabc/gabc-score-determination.l"
+#line 268 "gabc/gabc-score-determination.l"
 {
-        END_STYLE(I);
+        START_STYLE(I);
     }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 266 "gabc/gabc-score-determination.l"
+#line 271 "gabc/gabc-score-determination.l"
 {
-        START_STYLE(TT);
+        END_STYLE(I);
     }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 269 "gabc/gabc-score-determination.l"
+#line 274 "gabc/gabc-score-determination.l"
 {
-        END_STYLE(TT);
+        START_STYLE(TT);
     }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 272 "gabc/gabc-score-determination.l"
+#line 277 "gabc/gabc-score-determination.l"
 {
-        START_STYLE(UL);
+        END_STYLE(TT);
     }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 275 "gabc/gabc-score-determination.l"
+#line 280 "gabc/gabc-score-determination.l"
 {
-        END_STYLE(UL);
+        START_STYLE(UL);
     }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 278 "gabc/gabc-score-determination.l"
+#line 283 "gabc/gabc-score-determination.l"
 {
-        START_STYLE(C);
+        END_STYLE(UL);
     }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 281 "gabc/gabc-score-determination.l"
+#line 286 "gabc/gabc-score-determination.l"
 {
-        END_STYLE(C);
+        START_STYLE(C);
     }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 284 "gabc/gabc-score-determination.l"
+#line 289 "gabc/gabc-score-determination.l"
 {
-        START_STYLE(B);
+        END_STYLE(C);
     }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 287 "gabc/gabc-score-determination.l"
+#line 292 "gabc/gabc-score-determination.l"
 {
-        END_STYLE(B);
+        START_STYLE(B);
     }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 290 "gabc/gabc-score-determination.l"
+#line 295 "gabc/gabc-score-determination.l"
 {
-        START_STYLE(SC);
+        END_STYLE(B);
     }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 293 "gabc/gabc-score-determination.l"
+#line 298 "gabc/gabc-score-determination.l"
 {
-        END_STYLE(SC);
+        START_STYLE(SC);
     }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 296 "gabc/gabc-score-determination.l"
+#line 301 "gabc/gabc-score-determination.l"
 {
-        START_STYLE(ELISION);
+        END_STYLE(SC);
     }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 299 "gabc/gabc-score-determination.l"
+#line 304 "gabc/gabc-score-determination.l"
 {
-        END_STYLE(ELISION);
+        START_STYLE(ELISION);
     }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 302 "gabc/gabc-score-determination.l"
+#line 307 "gabc/gabc-score-determination.l"
 {
+        END_STYLE(ELISION);
+    }
+	YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 310 "gabc/gabc-score-determination.l"
+{
         BEGIN(sp);
         return SP_BEGIN;
     }
 	YY_BREAK
-case 46:
+case 47:
 YY_RULE_SETUP
-#line 306 "gabc/gabc-score-determination.l"
+#line 314 "gabc/gabc-score-determination.l"
 {
         BEGIN(score);
         return SP_END;
     }
 	YY_BREAK
-case 47:
-/* rule 47 can match eol */
+case 48:
+/* rule 48 can match eol */
 YY_RULE_SETUP
-#line 310 "gabc/gabc-score-determination.l"
+#line 318 "gabc/gabc-score-determination.l"
 {
         RETURN_SPACE;
     }
 	YY_BREAK
-case 48:
+case 49:
 YY_RULE_SETUP
-#line 313 "gabc/gabc-score-determination.l"
+#line 321 "gabc/gabc-score-determination.l"
 {
         RETURN_CHARACTERS;
     }
 	YY_BREAK
-case 49:
+case 50:
 YY_RULE_SETUP
-#line 316 "gabc/gabc-score-determination.l"
+#line 324 "gabc/gabc-score-determination.l"
 {
         BEGIN(comments);
     }
 	YY_BREAK
-case 50:
-/* rule 50 can match eol */
+case 51:
+/* rule 51 can match eol */
 YY_RULE_SETUP
-#line 319 "gabc/gabc-score-determination.l"
+#line 327 "gabc/gabc-score-determination.l"
 {
         BEGIN(score);
     }
 	YY_BREAK
-case 51:
+case 52:
 YY_RULE_SETUP
-#line 322 "gabc/gabc-score-determination.l"
+#line 330 "gabc/gabc-score-determination.l"
 {
         /* ignored */
     }
 	YY_BREAK
-case 52:
+case 53:
 YY_RULE_SETUP
-#line 325 "gabc/gabc-score-determination.l"
+#line 333 "gabc/gabc-score-determination.l"
 {
         BEGIN(verb);
         return VERB_BEGIN;
     }
 	YY_BREAK
-case 53:
+case 54:
 YY_RULE_SETUP
-#line 329 "gabc/gabc-score-determination.l"
+#line 337 "gabc/gabc-score-determination.l"
 {
         BEGIN(score);
         return VERB_END;
     }
 	YY_BREAK
-case 54:
-/* rule 54 can match eol */
+case 55:
+/* rule 55 can match eol */
 YY_RULE_SETUP
-#line 333 "gabc/gabc-score-determination.l"
+#line 341 "gabc/gabc-score-determination.l"
 {
         RETURN_CHARACTERS;
     }
 	YY_BREAK
-case 55:
+case 56:
 YY_RULE_SETUP
-#line 336 "gabc/gabc-score-determination.l"
+#line 344 "gabc/gabc-score-determination.l"
 {
         RETURN_CHARACTERS;
     }
 	YY_BREAK
-case 56:
+case 57:
 YY_RULE_SETUP
-#line 339 "gabc/gabc-score-determination.l"
+#line 347 "gabc/gabc-score-determination.l"
 {
         return CENTER_BEGIN;
     }
 	YY_BREAK
-case 57:
+case 58:
 YY_RULE_SETUP
-#line 342 "gabc/gabc-score-determination.l"
+#line 350 "gabc/gabc-score-determination.l"
 {
         return CENTER_END;
     }
 	YY_BREAK
-case 58:
+case 59:
 YY_RULE_SETUP
-#line 345 "gabc/gabc-score-determination.l"
+#line 353 "gabc/gabc-score-determination.l"
 {
         BEGIN(alt);
         return ALT_BEGIN;
     }
 	YY_BREAK
-case 59:
+case 60:
 YY_RULE_SETUP
-#line 349 "gabc/gabc-score-determination.l"
+#line 357 "gabc/gabc-score-determination.l"
 {
         BEGIN(score);
         return ALT_END;
     }
 	YY_BREAK
-case 60:
+case 61:
 YY_RULE_SETUP
-#line 353 "gabc/gabc-score-determination.l"
+#line 361 "gabc/gabc-score-determination.l"
 {
         return EUOUAE_B;
     }
 	YY_BREAK
-case 61:
+case 62:
 YY_RULE_SETUP
-#line 356 "gabc/gabc-score-determination.l"
+#line 364 "gabc/gabc-score-determination.l"
 {
         return EUOUAE_E;
     }
 	YY_BREAK
-case 62:
+case 63:
 YY_RULE_SETUP
-#line 359 "gabc/gabc-score-determination.l"
+#line 367 "gabc/gabc-score-determination.l"
 {
         return TRANSLATION_CENTER_END;
     }
 	YY_BREAK
-case 63:
+case 64:
 YY_RULE_SETUP
-#line 362 "gabc/gabc-score-determination.l"
+#line 370 "gabc/gabc-score-determination.l"
 {
         return TRANSLATION_BEGIN;
     }
 	YY_BREAK
-case 64:
+case 65:
 YY_RULE_SETUP
-#line 365 "gabc/gabc-score-determination.l"
+#line 373 "gabc/gabc-score-determination.l"
 {
         return TRANSLATION_END;
     }
 	YY_BREAK
-case 65:
+case 66:
+/* rule 66 can match eol */
 YY_RULE_SETUP
-#line 368 "gabc/gabc-score-determination.l"
+#line 376 "gabc/gabc-score-determination.l"
 {
+        return CLEAR;
+    }
+	YY_BREAK
+case 67:
+/* rule 67 can match eol */
+YY_RULE_SETUP
+#line 379 "gabc/gabc-score-determination.l"
+{
+        return PROTRUSION;
+    }
+	YY_BREAK
+case 68:
+/* rule 68 can match eol */
+YY_RULE_SETUP
+#line 382 "gabc/gabc-score-determination.l"
+{
+        BEGIN(protrusion_value);
+        return PROTRUSION;
+    }
+	YY_BREAK
+case 69:
+YY_RULE_SETUP
+#line 386 "gabc/gabc-score-determination.l"
+{
+        BEGIN(protrusion_end);
+        gabc_score_determination_lval.text =
+                gregorio_strdup(gabc_score_determination_text);
+        return PROTRUSION_VALUE;
+    }
+	YY_BREAK
+case 70:
+/* rule 70 can match eol */
+YY_RULE_SETUP
+#line 392 "gabc/gabc-score-determination.l"
+{
+        BEGIN(score);
+        return PROTRUSION_END;
+    }
+	YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 396 "gabc/gabc-score-determination.l"
+{
         BEGIN(notes);
         return OPENING_BRACKET;
     }
 	YY_BREAK
-case 66:
-/* rule 66 can match eol */
+case 72:
+/* rule 72 can match eol */
 YY_RULE_SETUP
-#line 372 "gabc/gabc-score-determination.l"
+#line 400 "gabc/gabc-score-determination.l"
 {
         gabc_score_determination_lval.text =
                 gregorio_strdup(gabc_score_determination_text);
@@ -1666,25 +1737,25 @@
         return NOTES;
     }
 	YY_BREAK
-case 67:
+case 73:
 YY_RULE_SETUP
-#line 377 "gabc/gabc-score-determination.l"
+#line 405 "gabc/gabc-score-determination.l"
 {
         return NABC_CUT;
     }
 	YY_BREAK
-case 68:
+case 74:
 YY_RULE_SETUP
-#line 380 "gabc/gabc-score-determination.l"
+#line 408 "gabc/gabc-score-determination.l"
 {
         BEGIN(score);
         return CLOSING_BRACKET;
     }
 	YY_BREAK
-case 69:
-/* rule 69 can match eol */
+case 75:
+/* rule 75 can match eol */
 YY_RULE_SETUP
-#line 384 "gabc/gabc-score-determination.l"
+#line 412 "gabc/gabc-score-determination.l"
 {
         BEGIN(score);
         return CLOSING_BRACKET_WITH_SPACE;
@@ -1699,7 +1770,9 @@
 case YY_STATE_EOF(comments):
 case YY_STATE_EOF(inicomments):
 case YY_STATE_EOF(alt):
-#line 388 "gabc/gabc-score-determination.l"
+case YY_STATE_EOF(protrusion_value):
+case YY_STATE_EOF(protrusion_end):
+#line 416 "gabc/gabc-score-determination.l"
 {
         if (!eof_found) {
             eof_found = true;
@@ -1709,10 +1782,10 @@
         }
     }
 	YY_BREAK
-case 70:
-/* rule 70 can match eol */
+case 76:
+/* rule 76 can match eol */
 YY_RULE_SETUP
-#line 396 "gabc/gabc-score-determination.l"
+#line 424 "gabc/gabc-score-determination.l"
 {
         gregorio_messagef("gabc_score_determination_lex", VERBOSITY_ERROR, 0,
                 _("unrecognized character: \"%c\""),
@@ -1719,12 +1792,12 @@
                 gabc_score_determination_text[0]);
     }
 	YY_BREAK
-case 71:
+case 77:
 YY_RULE_SETUP
-#line 401 "gabc/gabc-score-determination.l"
+#line 429 "gabc/gabc-score-determination.l"
 ECHO;
 	YY_BREAK
-#line 1728 "gabc/gabc-score-determination-l.c"
+#line 1801 "gabc/gabc-score-determination-l.c"
 
 	case YY_END_OF_BUFFER:
 		{
@@ -2016,7 +2089,7 @@
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 296 )
+			if ( yy_current_state >= 309 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2044,11 +2117,11 @@
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 296 )
+		if ( yy_current_state >= 309 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 295);
+	yy_is_jam = (yy_current_state == 308);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2697,7 +2770,7 @@
 
 #define YYTABLES_NAME "yytables"
 
-#line 401 "gabc/gabc-score-determination.l"
+#line 429 "gabc/gabc-score-determination.l"
 
 
 

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-l.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-l.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-l.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -230,6 +230,8 @@
 #define comments 6
 #define inicomments 7
 #define alt 8
+#define protrusion_value 9
+#define protrusion_end 10
 
 #endif
 
@@ -338,9 +340,9 @@
 #undef YY_DECL
 #endif
 
-#line 401 "gabc/gabc-score-determination.l"
+#line 429 "gabc/gabc-score-determination.l"
 
 
-#line 345 "gabc/gabc-score-determination-l.h"
+#line 347 "gabc/gabc-score-determination-l.h"
 #undef gabc_score_determination_IN_HEADER
 #endif /* gabc_score_determination_HEADER_H */

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-y.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-y.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-y.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -78,7 +78,7 @@
  * This file implements the score parser.
  *
  * Gregorio score determination from gabc.
- * Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  * 
@@ -125,10 +125,13 @@
         (Current).last_line    = YYRHSLOC (Rhs, N).last_line; \
         (Current).last_column  = YYRHSLOC (Rhs, N).last_column; \
         (Current).last_offset  = YYRHSLOC (Rhs, N).last_offset; \
+        (Current).generate_point_and_click = YYRHSLOC (Rhs, 1).generate_point_and_click; \
     } else { \
         (Current).first_line   = (Current).last_line   = YYRHSLOC (Rhs, 0).last_line; \
         (Current).first_column = (Current).last_column = YYRHSLOC (Rhs, 0).last_column; \
         (Current).first_offset = (Current).last_offset = YYRHSLOC (Rhs, 0).last_offset; \
+        (Current).first_offset = (Current).last_offset = YYRHSLOC (Rhs, 0).last_offset; \
+        (Current).generate_point_and_click = YYRHSLOC (Rhs, 0).generate_point_and_click; \
     }
 
 #include "gabc-score-determination.h"
@@ -160,6 +163,7 @@
 static char *macros[10];
 /* other variables that we will have to use */
 static gregorio_character *current_character;
+static gregorio_character *suspended_character;
 static gregorio_character *first_text_character;
 static gregorio_character *first_translation_character;
 static gregorio_tr_centering translation_type;
@@ -178,6 +182,9 @@
 static bool started_first_word;
 static struct sha1_ctx digester;
 static gabc_style_bits styles;
+static bool generate_point_and_click;
+static bool clear_syllable_text;
+static bool has_protrusion;
 
 /* punctum_inclinatum_orientation maintains the running punctum inclinatum
  * orientation in order to decide if the glyph needs to be cut when a punctum
@@ -214,7 +221,7 @@
  * The function that will initialize the variables. 
  */
 
-static void initialize_variables(void)
+static void initialize_variables(bool point_and_click)
 {
     int i;
     /* build a brand new empty score */
@@ -227,6 +234,7 @@
     number_of_voices = 1;
     voice = 0; /* first (and only) voice */
     current_character = NULL;
+    suspended_character = NULL;
     first_translation_character = NULL;
     first_text_character = NULL;
     translation_type = TR_NORMAL;
@@ -242,6 +250,9 @@
     started_first_word = false;
     styles = 0;
     punctum_inclinatum_orientation = S_PUNCTUM_INCLINATUM_UNDETERMINED;
+    generate_point_and_click = point_and_click;
+    clear_syllable_text = false;
+    has_protrusion = false;
 }
 
 /*
@@ -266,7 +277,7 @@
 {
     int i;
 
-    gregorio_assert_only(check_infos_integrity(score), end_definitions,
+    gregorio_assert_only(gabc_check_infos_integrity(score), end_definitions,
             "can't determine valid infos on the score");
 
     elements = (gregorio_element **) gregorio_malloc(number_of_voices *
@@ -378,9 +389,161 @@
 }
 
 /*
- * Function to close a syllable and update the position. 
+ * 
+ * The two functions called when lex returns a style, we simply add it. All the 
+ * complex things will be done by the function after...
+ * 
  */
 
+static void add_style(unsigned char style)
+{
+    gregorio_begin_style(&current_character, style);
+}
+
+static void end_style(unsigned char style)
+{
+    gregorio_end_style(&current_character, style);
+}
+
+static __inline void save_text(void)
+{
+    if (has_protrusion) {
+        end_style(ST_PROTRUSION);
+    }
+    ready_characters();
+    first_text_character = current_character;
+}
+
+/* a function called when we see a [, basically, all characters are added to
+ * the translation pointer instead of the text pointer */
+static void start_translation(unsigned char asked_translation_type)
+{
+    suspended_character = current_character;
+    /* the middle letters of the translation have no sense */
+    /*center_is_determined = CENTER_FULLY_DETERMINED;*/
+    current_character = NULL;
+    translation_type = asked_translation_type;
+}
+
+static void end_translation(void)
+{
+    ready_characters();
+    first_translation_character = current_character;
+    current_character = suspended_character;
+}
+
+/*
+ * add_text is the function called when lex returns a char *. In
+ * this function we convert it into grewchar, and then we add the corresponding 
+ * gregorio_characters in the list of gregorio_characters. 
+ */
+
+static void add_text(char *mbcharacters)
+{
+    if (!current_character) {
+        /* insert open styles, leaving out ELISION on purpose */
+        if (styles & SB_I) {
+            add_style(ST_ITALIC);
+        }
+        if (styles & SB_B) {
+            add_style(ST_BOLD);
+        }
+        if (styles & SB_TT) {
+            add_style(ST_TT);
+        }
+        if (styles & SB_SC) {
+            add_style(ST_SMALL_CAPS);
+        }
+        if (styles & SB_UL) {
+            add_style(ST_UNDERLINED);
+        }
+        if (styles & SB_C) {
+            add_style(ST_COLORED);
+        }
+    }
+    if (current_character) {
+        current_character->next_character = gregorio_build_char_list_from_buf(
+                mbcharacters);
+        current_character->next_character->previous_character =
+                current_character;
+    } else {
+        current_character = gregorio_build_char_list_from_buf(mbcharacters);
+    }
+    while (current_character && current_character->next_character) {
+        current_character = current_character->next_character;
+    }
+    free(mbcharacters);
+}
+
+static void add_protrusion(char *factor)
+{
+    if (has_protrusion) {
+        gregorio_message("syllable already has protrusion; pr tag ignored",
+                "det_score", VERBOSITY_WARNING, 0);
+        free(factor);
+    } else {
+        if (center_is_determined == CENTER_HALF_DETERMINED) {
+            gregorio_message("closing open syllable center before protrusion",
+                    "det_score", VERBOSITY_WARNING, 0);
+            end_style(ST_FORCED_CENTER);
+            center_is_determined = CENTER_FULLY_DETERMINED;
+        }
+
+        add_style(ST_PROTRUSION_FACTOR);
+        add_text(factor);
+        end_style(ST_PROTRUSION_FACTOR);
+        add_style(ST_PROTRUSION);
+        has_protrusion = true;
+    }
+}
+
+static void add_auto_protrusion(char *protrusion)
+{
+    if (has_protrusion) {
+        add_text(protrusion);
+    } else {
+        add_style(ST_PROTRUSION_FACTOR);
+        add_style(ST_VERBATIM);
+        add_text(gregorio_strdup("\\GreProtrusionFactor{"));
+
+        switch (*protrusion) {
+        case ',':
+            add_text(gregorio_strdup("comma"));
+            break;
+        case ';':
+            add_text(gregorio_strdup("semicolon"));
+            break;
+        case ':':
+            add_text(gregorio_strdup("colon"));
+            break;
+        case '.':
+            add_text(gregorio_strdup("period"));
+            break;
+        default:
+            /* not reachable unless there's a programming error */
+            /* LCOV_EXCL_START */
+            gregorio_fail2(add_auto_protrusion,
+                    "unsupported protruding punctuation: %c", *protrusion);
+            break;
+            /* LCOV_EXCL_STOP */
+        }
+
+        add_text(gregorio_strdup("}"));
+        end_style(ST_VERBATIM);
+        end_style(ST_PROTRUSION_FACTOR);
+
+        add_style(ST_PROTRUSION);
+        add_text(protrusion);
+        end_style(ST_PROTRUSION);
+
+        has_protrusion = true;
+    }
+}
+
+/*
+ * Function to close a syllable and update the position.
+ */
+
 static void close_syllable(YYLTYPE *loc)
 {
     int i = 0;
@@ -394,10 +557,9 @@
                 switch (ch->cos.s.type) {
                 case ST_T_BEGIN:
                     ++i;
-                    if (i > 1) {
-                        gregorio_message(_("elisions may not be nested"),
-                                "close_syllable", VERBOSITY_ERROR, 0);
-                    }
+                    /* the parser precludes this from falling here */
+                    gregorio_assert_only(i <= 1, close_syllable,
+                            "elisions may not be nested");
                     break;
 
                 case ST_T_END:
@@ -436,7 +598,7 @@
     gregorio_add_syllable(&current_syllable, number_of_voices, elements,
             first_text_character, first_translation_character, position,
             abovelinestext, translation_type, no_linebreak_area, euouae, loc,
-            started_first_word);
+            started_first_word, clear_syllable_text);
     if (!score->first_syllable) {
         /* we rebuild the first syllable if we have to */
         score->first_syllable = current_syllable;
@@ -457,6 +619,7 @@
     }
     center_is_determined = CENTER_NOT_DETERMINED;
     current_character = NULL;
+    suspended_character = NULL;
     first_text_character = NULL;
     first_translation_character = NULL;
     translation_type = TR_NORMAL;
@@ -467,86 +630,10 @@
         elements[i] = NULL;
     }
     current_element = NULL;
+    clear_syllable_text = false;
+    has_protrusion = false;
 }
 
-/* a function called when we see a [, basically, all characters are added to
- * the translation pointer instead of the text pointer */
-static void start_translation(unsigned char asked_translation_type)
-{
-    ready_characters();
-    first_text_character = current_character;
-    /* the middle letters of the translation have no sense */
-    center_is_determined = CENTER_FULLY_DETERMINED;
-    current_character = NULL;
-    translation_type = asked_translation_type;
-}
-
-static void end_translation(void)
-{
-    ready_characters();
-    first_translation_character = current_character;
-}
-
-/*
- * 
- * The two functions called when lex returns a style, we simply add it. All the 
- * complex things will be done by the function after...
- * 
- */
-
-static void add_style(unsigned char style)
-{
-    gregorio_begin_style(&current_character, style);
-}
-
-static void end_style(unsigned char style)
-{
-    gregorio_end_style(&current_character, style);
-}
-
-/*
- * add_text is the function called when lex returns a char *. In
- * this function we convert it into grewchar, and then we add the corresponding 
- * gregorio_characters in the list of gregorio_characters. 
- */
-
-static void add_text(char *mbcharacters)
-{
-    if (!current_character) {
-        /* insert open styles, leaving out ELISION on purpose */
-        if (styles & SB_I) {
-            add_style(ST_ITALIC);
-        }
-        if (styles & SB_B) {
-            add_style(ST_BOLD);
-        }
-        if (styles & SB_TT) {
-            add_style(ST_TT);
-        }
-        if (styles & SB_SC) {
-            add_style(ST_SMALL_CAPS);
-        }
-        if (styles & SB_UL) {
-            add_style(ST_UNDERLINED);
-        }
-        if (styles & SB_C) {
-            add_style(ST_COLORED);
-        }
-    }
-    if (current_character) {
-        current_character->next_character = gregorio_build_char_list_from_buf(
-                mbcharacters);
-        current_character->next_character->previous_character =
-                current_character;
-    } else {
-        current_character = gregorio_build_char_list_from_buf(mbcharacters);
-    }
-    while (current_character && current_character->next_character) {
-        current_character = current_character->next_character;
-    }
-    free(mbcharacters);
-}
-
 void gabc_digest(const void *const buf, const size_t size)
 {
     sha1_process_bytes(buf, size, &digester);
@@ -558,7 +645,7 @@
  * aleady open. It returns a valid gregorio_score 
  */
 
-gregorio_score *gabc_read_score(FILE *f_in)
+gregorio_score *gabc_read_score(FILE *f_in, bool point_and_click)
 {
     /* compute the SHA-1 digest while parsing, for I/O efficiency */
     sha1_init_ctx(&digester);
@@ -569,21 +656,23 @@
     gabc_score_determination_in = f_in;
     gregorio_assert(f_in, gabc_read_score, "can't read stream from NULL",
             return NULL);
-    initialize_variables();
+    initialize_variables(point_and_click);
     /* the flex/bison main call, it will build the score (that we have
      * initialized) */
     gabc_score_determination_parse();
     if (!score->legacy_oriscus_orientation) {
-        determine_oriscus_orientation(score);
+        gabc_determine_oriscus_orientation(score);
     }
-    determine_punctum_inclinatum_orientation(score);
+    gabc_determine_punctum_inclinatum_orientation(score);
+    gabc_determine_ledger_lines(score);
     gregorio_fix_initial_keys(score, gregorio_default_clef);
     rebuild_score_characters();
-    fix_custos(score);
+    gabc_suppress_extra_custos_at_linebreak(score);
+    gabc_fix_custos_pitches(score);
     gabc_det_notes_finish();
     free_variables();
     /* then we check the validity and integrity of the score we have built. */
-    if (!check_score_integrity(score)) {
+    if (!gabc_check_score_integrity(score)) {
         gregorio_message(_("unable to determine a valid score from file"),
                 "gabc_read_score", VERBOSITY_ERROR, 0);
     }
@@ -629,8 +718,15 @@
     }
 }
 
-#line 633 "gabc/gabc-score-determination-y.c" /* yacc.c:339  */
+static char *concatenate(char *first, char *const second) {
+    first = (char *)gregorio_realloc(first, strlen(first) + strlen(second) + 1);
+    strcat(first, second);
+    free(second);
+    return first;
+}
 
+#line 729 "gabc/gabc-score-determination-y.c" /* yacc.c:339  */
+
 # ifndef YY_NULLPTR
 #  if defined __cplusplus && 201103L <= __cplusplus
 #   define YY_NULLPTR nullptr
@@ -677,51 +773,53 @@
     MODE = 268,
     MODE_MODIFIER = 269,
     MODE_DIFFERENTIA = 270,
-    INITIAL_STYLE = 271,
-    END_OF_DEFINITIONS = 272,
-    END_OF_FILE = 273,
-    COLON = 274,
-    SEMICOLON = 275,
-    SPACE = 276,
-    CHARACTERS = 277,
-    NOTES = 278,
-    HYPHEN = 279,
-    ATTRIBUTE = 280,
-    OPENING_BRACKET = 281,
-    CLOSING_BRACKET = 282,
-    CLOSING_BRACKET_WITH_SPACE = 283,
-    I_BEGIN = 284,
-    I_END = 285,
-    TT_BEGIN = 286,
-    TT_END = 287,
-    UL_BEGIN = 288,
-    UL_END = 289,
-    C_BEGIN = 290,
-    C_END = 291,
-    B_BEGIN = 292,
-    B_END = 293,
-    SC_BEGIN = 294,
-    SC_END = 295,
-    SP_BEGIN = 296,
-    SP_END = 297,
-    VERB_BEGIN = 298,
-    VERB = 299,
-    VERB_END = 300,
-    CENTER_BEGIN = 301,
-    CENTER_END = 302,
-    ELISION_BEGIN = 303,
-    ELISION_END = 304,
-    TRANSLATION_BEGIN = 305,
-    TRANSLATION_END = 306,
-    TRANSLATION_CENTER_END = 307,
-    ALT_BEGIN = 308,
-    ALT_END = 309,
-    NLBA_B = 310,
-    NLBA_E = 311,
-    EUOUAE_B = 312,
-    EUOUAE_E = 313,
-    NABC_CUT = 314,
-    NABC_LINES = 315
+    END_OF_DEFINITIONS = 271,
+    END_OF_FILE = 272,
+    COLON = 273,
+    SEMICOLON = 274,
+    CHARACTERS = 275,
+    NOTES = 276,
+    HYPHEN = 277,
+    ATTRIBUTE = 278,
+    OPENING_BRACKET = 279,
+    CLOSING_BRACKET = 280,
+    CLOSING_BRACKET_WITH_SPACE = 281,
+    I_BEGIN = 282,
+    I_END = 283,
+    TT_BEGIN = 284,
+    TT_END = 285,
+    UL_BEGIN = 286,
+    UL_END = 287,
+    C_BEGIN = 288,
+    C_END = 289,
+    B_BEGIN = 290,
+    B_END = 291,
+    SC_BEGIN = 292,
+    SC_END = 293,
+    SP_BEGIN = 294,
+    SP_END = 295,
+    VERB_BEGIN = 296,
+    VERB_END = 297,
+    CENTER_BEGIN = 298,
+    CENTER_END = 299,
+    ELISION_BEGIN = 300,
+    ELISION_END = 301,
+    TRANSLATION_BEGIN = 302,
+    TRANSLATION_END = 303,
+    TRANSLATION_CENTER_END = 304,
+    ALT_BEGIN = 305,
+    ALT_END = 306,
+    NLBA_B = 307,
+    NLBA_E = 308,
+    EUOUAE_B = 309,
+    EUOUAE_E = 310,
+    NABC_CUT = 311,
+    NABC_LINES = 312,
+    CLEAR = 313,
+    PROTRUSION = 314,
+    PROTRUSION_VALUE = 315,
+    PROTRUSION_END = 316,
+    PROTRUDING_PUNCTUATION = 317
   };
 #endif
 /* Tokens.  */
@@ -738,51 +836,53 @@
 #define MODE 268
 #define MODE_MODIFIER 269
 #define MODE_DIFFERENTIA 270
-#define INITIAL_STYLE 271
-#define END_OF_DEFINITIONS 272
-#define END_OF_FILE 273
-#define COLON 274
-#define SEMICOLON 275
-#define SPACE 276
-#define CHARACTERS 277
-#define NOTES 278
-#define HYPHEN 279
-#define ATTRIBUTE 280
-#define OPENING_BRACKET 281
-#define CLOSING_BRACKET 282
-#define CLOSING_BRACKET_WITH_SPACE 283
-#define I_BEGIN 284
-#define I_END 285
-#define TT_BEGIN 286
-#define TT_END 287
-#define UL_BEGIN 288
-#define UL_END 289
-#define C_BEGIN 290
-#define C_END 291
-#define B_BEGIN 292
-#define B_END 293
-#define SC_BEGIN 294
-#define SC_END 295
-#define SP_BEGIN 296
-#define SP_END 297
-#define VERB_BEGIN 298
-#define VERB 299
-#define VERB_END 300
-#define CENTER_BEGIN 301
-#define CENTER_END 302
-#define ELISION_BEGIN 303
-#define ELISION_END 304
-#define TRANSLATION_BEGIN 305
-#define TRANSLATION_END 306
-#define TRANSLATION_CENTER_END 307
-#define ALT_BEGIN 308
-#define ALT_END 309
-#define NLBA_B 310
-#define NLBA_E 311
-#define EUOUAE_B 312
-#define EUOUAE_E 313
-#define NABC_CUT 314
-#define NABC_LINES 315
+#define END_OF_DEFINITIONS 271
+#define END_OF_FILE 272
+#define COLON 273
+#define SEMICOLON 274
+#define CHARACTERS 275
+#define NOTES 276
+#define HYPHEN 277
+#define ATTRIBUTE 278
+#define OPENING_BRACKET 279
+#define CLOSING_BRACKET 280
+#define CLOSING_BRACKET_WITH_SPACE 281
+#define I_BEGIN 282
+#define I_END 283
+#define TT_BEGIN 284
+#define TT_END 285
+#define UL_BEGIN 286
+#define UL_END 287
+#define C_BEGIN 288
+#define C_END 289
+#define B_BEGIN 290
+#define B_END 291
+#define SC_BEGIN 292
+#define SC_END 293
+#define SP_BEGIN 294
+#define SP_END 295
+#define VERB_BEGIN 296
+#define VERB_END 297
+#define CENTER_BEGIN 298
+#define CENTER_END 299
+#define ELISION_BEGIN 300
+#define ELISION_END 301
+#define TRANSLATION_BEGIN 302
+#define TRANSLATION_END 303
+#define TRANSLATION_CENTER_END 304
+#define ALT_BEGIN 305
+#define ALT_END 306
+#define NLBA_B 307
+#define NLBA_E 308
+#define EUOUAE_B 309
+#define EUOUAE_E 310
+#define NABC_CUT 311
+#define NABC_LINES 312
+#define CLEAR 313
+#define PROTRUSION 314
+#define PROTRUSION_VALUE 315
+#define PROTRUSION_END 316
+#define PROTRUDING_PUNCTUATION 317
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -814,7 +914,7 @@
 
 /* Copy the second part of user declarations.  */
 
-#line 818 "gabc/gabc-score-determination-y.c" /* yacc.c:358  */
+#line 918 "gabc/gabc-score-determination-y.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -1058,21 +1158,21 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  4
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   166
+#define YYLAST   247
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  61
+#define YYNTOKENS  63
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  23
+#define YYNNTS  28
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  81
+#define YYNRULES  101
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  115
+#define YYNSTATES  145
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   315
+#define YYMAXUTOK   317
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -1112,7 +1212,7 @@
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60
+      55,    56,    57,    58,    59,    60,    61,    62
 };
 
 #if YYDEBUG
@@ -1119,15 +1219,17 @@
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   597,   597,   601,   606,   607,   611,   615,   621,   626,
-     635,   641,   646,   651,   656,   661,   666,   674,   682,   692,
-     701,   706,   710,   715,   716,   720,   725,   731,   742,   746,
-     754,   755,   756,   760,   763,   766,   769,   772,   775,   778,
-     781,   784,   787,   796,   799,   802,   805,   808,   811,   814,
-     817,   820,   823,   832,   835,   841,   844,   850,   851,   854,
-     855,   856,   857,   861,   864,   869,   870,   871,   875,   881,
-     884,   890,   896,   901,   909,   912,   921,   924,   930,   931,
-     934,   935
+       0,   700,   700,   704,   709,   710,   714,   717,   723,   726,
+     732,   737,   746,   752,   757,   762,   767,   772,   777,   785,
+     793,   802,   807,   811,   816,   817,   821,   826,   832,   843,
+     847,   855,   856,   857,   861,   864,   867,   870,   873,   876,
+     879,   882,   888,   891,   894,   897,   900,   903,   906,   909,
+     915,   918,   935,   938,   951,   954,   960,   963,   969,   972,
+     978,   979,   982,   983,   984,   985,   986,   987,   988,   991,
+     992,   995,  1001,  1002,  1006,  1009,  1010,  1011,  1014,  1020,
+    1021,  1025,  1031,  1034,  1037,  1044,  1050,  1054,  1061,  1068,
+    1073,  1078,  1082,  1089,  1096,  1101,  1109,  1112,  1118,  1119,
+    1122,  1123
 };
 #endif
 
@@ -1139,19 +1241,21 @@
   "$end", "error", "$undefined", "NAME", "AUTHOR", "GABC_COPYRIGHT",
   "SCORE_COPYRIGHT", "LANGUAGE", "STAFF_LINES", "ORISCUS_ORIENTATION",
   "DEF_MACRO", "OTHER_HEADER", "ANNOTATION", "MODE", "MODE_MODIFIER",
-  "MODE_DIFFERENTIA", "INITIAL_STYLE", "END_OF_DEFINITIONS", "END_OF_FILE",
-  "COLON", "SEMICOLON", "SPACE", "CHARACTERS", "NOTES", "HYPHEN",
-  "ATTRIBUTE", "OPENING_BRACKET", "CLOSING_BRACKET",
-  "CLOSING_BRACKET_WITH_SPACE", "I_BEGIN", "I_END", "TT_BEGIN", "TT_END",
-  "UL_BEGIN", "UL_END", "C_BEGIN", "C_END", "B_BEGIN", "B_END", "SC_BEGIN",
-  "SC_END", "SP_BEGIN", "SP_END", "VERB_BEGIN", "VERB", "VERB_END",
-  "CENTER_BEGIN", "CENTER_END", "ELISION_BEGIN", "ELISION_END",
-  "TRANSLATION_BEGIN", "TRANSLATION_END", "TRANSLATION_CENTER_END",
-  "ALT_BEGIN", "ALT_END", "NLBA_B", "NLBA_E", "EUOUAE_B", "EUOUAE_E",
-  "NABC_CUT", "NABC_LINES", "$accept", "score", "all_definitions",
-  "definitions", "attribute", "definition", "notes", "note",
-  "closing_bracket_with_space", "style_beginning", "style_end", "euouae",
-  "linebreak_area", "character", "text_hyphen", "text",
+  "MODE_DIFFERENTIA", "END_OF_DEFINITIONS", "END_OF_FILE", "COLON",
+  "SEMICOLON", "CHARACTERS", "NOTES", "HYPHEN", "ATTRIBUTE",
+  "OPENING_BRACKET", "CLOSING_BRACKET", "CLOSING_BRACKET_WITH_SPACE",
+  "I_BEGIN", "I_END", "TT_BEGIN", "TT_END", "UL_BEGIN", "UL_END",
+  "C_BEGIN", "C_END", "B_BEGIN", "B_END", "SC_BEGIN", "SC_END", "SP_BEGIN",
+  "SP_END", "VERB_BEGIN", "VERB_END", "CENTER_BEGIN", "CENTER_END",
+  "ELISION_BEGIN", "ELISION_END", "TRANSLATION_BEGIN", "TRANSLATION_END",
+  "TRANSLATION_CENTER_END", "ALT_BEGIN", "ALT_END", "NLBA_B", "NLBA_E",
+  "EUOUAE_B", "EUOUAE_E", "NABC_CUT", "NABC_LINES", "CLEAR", "PROTRUSION",
+  "PROTRUSION_VALUE", "PROTRUSION_END", "PROTRUDING_PUNCTUATION",
+  "$accept", "score", "all_definitions", "definitions", "attribute_value",
+  "attribute", "definition", "notes", "note", "closing_bracket_with_space",
+  "style_beginning", "style_end", "special_style_beginning",
+  "special_style_end", "euouae", "linebreak_area", "protrusion",
+  "character", "text", "translation_character", "translation_text",
   "translation_beginning", "translation", "above_line_text",
   "syllable_with_notes", "notes_without_word", "syllable", "syllables", YY_NULLPTR
 };
@@ -1168,16 +1272,16 @@
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315
+     315,   316,   317
 };
 # endif
 
-#define YYPACT_NINF -52
+#define YYPACT_NINF -85
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-52)))
+  (!!((Yystate) == (-85)))
 
-#define YYTABLE_NINF -3
+#define YYTABLE_NINF -1
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -1184,20 +1288,23 @@
 
   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
      STATE-NUM.  */
-static const yytype_int8 yypact[] =
+static const yytype_int16 yypact[] =
 {
-     -52,    17,   -52,    -2,   -52,    16,    18,    18,    18,    18,
-      18,    18,    18,    18,    18,    18,    18,    18,    18,    18,
-     -52,    18,   -52,   -52,   -52,   -52,    41,   -52,    12,   -52,
-     -52,   -52,    28,   -52,   -52,   -52,   -52,   -52,   -52,   -52,
-     -52,   -52,   -52,   -52,   -52,   -52,   -52,   -52,    24,   -52,
-      -6,   -52,   -52,   -52,   -52,   -52,   -52,   -52,   -52,   -52,
-     -52,   -52,   -52,   -52,   -52,   -52,   -52,   -52,   -52,   -52,
-     -52,   -52,    19,   -52,   -52,   -52,   -52,   -52,   -52,   -52,
-     -52,   -52,   108,    13,   -52,    78,   -52,   -52,    20,    -9,
-      36,    37,   -52,   -52,   -52,    30,    24,     3,   -52,   -52,
-     -52,   -52,   -52,    24,   -52,    36,   -52,   -52,   -52,   -52,
-      24,   -52,   -52,    24,    24
+     -85,    11,   -85,    69,   -85,    66,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   -85,
+       0,   -85,   -85,   -20,   -85,   -85,   -85,   -85,   -85,   -85,
+     -85,   -85,   -85,   -85,   -85,   -85,   -85,   -85,   -85,   -85,
+     -85,   -85,   -85,   -85,   -85,   -85,   -85,     4,   -85,   -85,
+     -85,   -85,   -85,   -41,   -19,   -85,   -85,   -85,   -85,   -85,
+     -85,   -85,   -85,   107,   148,    -4,   -85,   -85,   -85,   -85,
+      -7,   -85,   -85,   -85,   -85,   -85,   -85,   -85,   -85,   -85,
+     -85,   -85,   -85,   -85,   -85,   -85,     1,   -11,   -17,   -29,
+     -85,     9,    -2,   -85,    -1,   -85,    13,   -85,   -85,   -85,
+     -85,   -85,   -85,   -85,   184,   -85,   -85,   -85,    -6,   -11,
+     -85,   -18,    27,    32,   -85,   -85,   -85,   -85,   -11,   -85,
+     -85,    26,   -11,   -85,    28,   -85,   -85,   -85,   -11,   -85,
+     -85,   -11,    27,   -85,   -85,   -85,   -85,   -11,   -11,   -85,
+     -11,   -85,   -11,   -11,   -11
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1205,79 +1312,98 @@
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       4,     0,    80,     0,     1,    65,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       3,     0,     5,    23,    68,    70,     0,    65,     0,    78,
-      79,    81,     0,     9,    20,    11,    12,    10,    16,    21,
-       8,    22,    19,    13,    14,    15,    18,    17,    76,    58,
-      63,    23,    33,    43,    34,    44,    35,    45,    36,    46,
-      37,    47,    38,    48,    40,    50,    39,    49,    42,    52,
-      41,    51,     0,    55,    56,    53,    54,    59,    60,    62,
-      61,    66,     0,     0,    57,     0,    23,     7,     0,     0,
-      28,    30,    24,    29,    23,     0,    72,     0,    64,    67,
-      23,    63,    69,    77,     6,    25,    27,    26,    32,    31,
-      73,    23,    71,    74,    75
+       4,     0,   100,     0,     1,     2,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     3,
+       0,     5,    61,    70,    24,    34,    42,    35,    43,    36,
+      44,    37,    45,    38,    46,    39,    47,    41,    49,    40,
+      48,    51,    53,    50,    52,    81,    84,     0,    56,    57,
+      54,    55,    68,    59,    71,    62,    63,    64,    65,    67,
+      66,    69,    72,     0,     0,     0,    60,    98,    99,   101,
+       0,    11,    21,    13,    14,    12,    18,    22,    10,    23,
+      20,    15,    16,    17,    19,    24,     0,    96,     0,     0,
+      24,     0,    70,    24,    71,    73,     0,    74,    77,    82,
+      78,    75,    76,    79,     0,    24,     9,     6,     0,    87,
+      24,     0,    29,    31,    25,    30,    85,    58,    89,    24,
+      24,     0,    86,    24,     0,    24,    83,    80,    97,     8,
+       7,    92,    26,    28,    27,    33,    32,    94,    88,    24,
+      90,    24,    91,    93,    95
 };
 
   /* YYPGOTO[NTERM-NUM].  */
-static const yytype_int8 yypgoto[] =
+static const yytype_int16 yypgoto[] =
 {
-     -52,   -52,   -52,   -52,    15,   -52,   -51,   -52,   -30,   -52,
-     -52,   -52,   -52,   -21,   -52,    35,   -52,    -5,   -52,   -52,
-     -52,   -52,   -52
+     -85,   -85,   -85,   -85,   -85,   227,   -85,   -84,   -85,   -60,
+     -62,   -61,   -85,   -85,   -85,   -85,   -85,   -10,   -85,   -50,
+     -85,   -85,   -23,   -85,   -85,   -85,   -85,   -85
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int8 yydefgoto[] =
 {
-      -1,     1,     2,     3,    33,    22,    48,    92,    93,    77,
-      78,    79,    80,    81,    82,    26,    27,    28,    84,    29,
-      30,    31,     5
+      -1,     1,     2,     3,   108,    71,    21,    87,   114,   115,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,   103,
+     104,    64,    65,    66,    67,    68,    69,     5
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
      positive, shift that token.  If negative, reduce the rule whose
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
-static const yytype_int8 yytable[] =
+static const yytype_uint8 yytable[] =
 {
-      96,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    -2,     4,   105,    91,
-      94,    83,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,   103,    47,    32,    86,   100,
-     104,    97,    23,   110,    24,    95,    25,    89,    87,   113,
-     106,    90,    91,    88,   108,   109,   111,   112,    21,   107,
-     114,    99,    85,    49,     0,    50,    24,    51,    25,     0,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,     0,    67,    68,    69,    70,
-      71,    24,     0,    25,    72,     0,    73,    74,    75,    76,
-      49,     0,   101,     0,     0,     0,     0,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,     0,    67,    68,    69,    70,    71,     0,   102,
-      49,    72,    98,    73,    74,    75,    76,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,     0,    67,    68,    69,    70,    71,     0,     0,
-       0,    72,     0,    73,    74,    75,    76
+      86,   109,   101,   102,    85,    90,   118,   132,   113,   122,
+     111,     4,   106,   129,   112,   113,   107,   130,    70,    89,
+     105,   128,   120,   123,    88,   110,   131,    45,    45,    46,
+      46,    91,   117,   119,   116,   137,   138,   125,   133,   140,
+      96,   142,   101,   102,   135,    45,    45,    46,    46,   136,
+     139,   134,   141,    95,   127,   143,     0,   144,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   121,
+       0,   124,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    22,     0,    23,     0,
+      24,     0,     0,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,     0,    46,    47,     0,    48,    49,
+      50,    51,     0,     0,    52,    53,    20,    22,    54,    92,
+       0,    93,     0,     0,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,     0,    46,    47,     0,    48,
+      49,    50,    51,     0,     0,    52,    53,     0,    97,    94,
+      98,     0,     0,     0,     0,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,     0,     0,     0,     0,     0,    99,     0,     0,     0,
+       0,     0,     0,     0,    97,     0,    98,     0,     0,     0,
+     100,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,     0,     0,     0,
+       0,     0,   126,     0,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,   100,    84
 };
 
-static const yytype_int8 yycheck[] =
+static const yytype_int16 yycheck[] =
 {
-      51,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,     0,     0,    27,    28,
-      26,    26,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    86,    21,    19,    26,    26,
-      20,    22,    26,    94,    50,    50,    52,    23,    20,   100,
-      59,    27,    28,    25,    18,    18,    26,    54,    60,    89,
-     111,    82,    27,    22,    -1,    24,    50,    26,    52,    -1,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    -1,    45,    46,    47,    48,
-      49,    50,    -1,    52,    53,    -1,    55,    56,    57,    58,
-      22,    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,
+      23,    85,    64,    64,    24,    24,    90,    25,    26,    93,
+      21,     0,    19,    19,    25,    26,    23,    23,    18,    60,
+      24,   105,    24,    24,    20,    24,   110,    47,    47,    49,
+      49,    54,    61,    24,    51,   119,   120,    24,    56,   123,
+      63,   125,   104,   104,    17,    47,    47,    49,    49,    17,
+      24,   111,    24,    63,   104,   139,    -1,   141,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,
+      -1,    94,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    20,    -1,    22,    -1,
+      24,    -1,    -1,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    -1,    49,    50,    -1,    52,    53,
+      54,    55,    -1,    -1,    58,    59,    57,    20,    62,    22,
+      -1,    24,    -1,    -1,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    -1,    49,    50,    -1,    52,
+      53,    54,    55,    -1,    -1,    58,    59,    -1,    20,    62,
+      22,    -1,    -1,    -1,    -1,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    -1,    45,    46,    47,    48,    49,    -1,    51,
-      22,    53,    24,    55,    56,    57,    58,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    -1,    45,    46,    47,    48,    49,    -1,    -1,
-      -1,    53,    -1,    55,    56,    57,    58
+      42,    -1,    -1,    -1,    -1,    -1,    48,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    20,    -1,    22,    -1,    -1,    -1,
+      62,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    -1,    -1,    -1,
+      -1,    -1,    48,    -1,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    62,    20
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1284,45 +1410,52 @@
      symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,    62,    63,    64,     0,    83,     3,     4,     5,     6,
+       0,    64,    65,    66,     0,    90,     3,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    60,    66,    26,    50,    52,    76,    77,    78,    80,
-      81,    82,    19,    65,    65,    65,    65,    65,    65,    65,
-      65,    65,    65,    65,    65,    65,    65,    65,    67,    22,
-      24,    26,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    45,    46,    47,
-      48,    49,    53,    55,    56,    57,    58,    70,    71,    72,
-      73,    74,    75,    78,    79,    76,    26,    20,    25,    23,
-      27,    28,    68,    69,    26,    78,    67,    22,    24,    74,
-      26,    24,    51,    67,    20,    27,    59,    69,    18,    18,
-      67,    26,    54,    67,    67
+      57,    69,    20,    22,    24,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    49,    50,    52,    53,
+      54,    55,    58,    59,    62,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    84,    85,    86,    87,    88,    89,
+      18,    68,    68,    68,    68,    68,    68,    68,    68,    68,
+      68,    68,    68,    68,    68,    24,    85,    70,    20,    60,
+      24,    85,    22,    24,    62,    80,    85,    20,    22,    48,
+      62,    73,    74,    82,    83,    24,    19,    23,    67,    70,
+      24,    21,    25,    26,    71,    72,    51,    61,    70,    24,
+      24,    85,    70,    24,    85,    24,    48,    82,    70,    19,
+      23,    70,    25,    56,    72,    17,    17,    70,    70,    24,
+      70,    24,    70,    70,    70
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    61,    62,    63,    64,    64,    65,    65,    66,    66,
-      66,    66,    66,    66,    66,    66,    66,    66,    66,    66,
-      66,    66,    66,    67,    67,    68,    68,    68,    68,    68,
-      69,    69,    69,    70,    70,    70,    70,    70,    70,    70,
-      70,    70,    70,    71,    71,    71,    71,    71,    71,    71,
-      71,    71,    71,    72,    72,    73,    73,    74,    74,    74,
-      74,    74,    74,    75,    75,    76,    76,    76,    77,    78,
-      78,    79,    80,    80,    80,    80,    81,    81,    82,    82,
-      83,    83
+       0,    63,    64,    65,    66,    66,    67,    67,    68,    68,
+      69,    69,    69,    69,    69,    69,    69,    69,    69,    69,
+      69,    69,    69,    69,    70,    70,    71,    71,    71,    71,
+      71,    72,    72,    72,    73,    73,    73,    73,    73,    73,
+      73,    73,    74,    74,    74,    74,    74,    74,    74,    74,
+      75,    75,    76,    76,    77,    77,    78,    78,    79,    79,
+      80,    80,    80,    80,    80,    80,    80,    80,    80,    80,
+      80,    80,    81,    81,    82,    82,    82,    82,    82,    83,
+      83,    84,    85,    85,    85,    86,    87,    87,    87,    87,
+      87,    87,    87,    87,    87,    87,    88,    88,    89,    89,
+      90,    90
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
-       0,     2,     2,     2,     0,     2,     3,     2,     2,     2,
+       0,     2,     2,     2,     0,     2,     1,     2,     3,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     0,     2,     2,     2,     2,     1,     1,
-       1,     2,     2,     1,     1,     1,     1,     1,     1,     1,
+       2,     2,     2,     2,     0,     2,     2,     2,     2,     1,
+       1,     1,     2,     2,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     3,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     2,     0,     2,     3,     1,     3,
-       1,     3,     3,     4,     4,     5,     2,     3,     1,     1,
+       1,     1,     1,     2,     1,     1,     1,     1,     1,     1,
+       2,     1,     2,     3,     1,     3,     3,     3,     4,     3,
+       4,     4,     4,     5,     4,     5,     2,     3,     1,     1,
        0,     2
 };
 
@@ -1909,7 +2042,7 @@
   yychar = YYEMPTY; /* Cause a token to be read.  */
 
 /* User initialization code.  */
-#line 559 "gabc/gabc-score-determination.y" /* yacc.c:1429  */
+#line 655 "gabc/gabc-score-determination.y" /* yacc.c:1429  */
 {
     yylloc.first_line = 1;
     yylloc.first_column = 0;
@@ -1917,9 +2050,10 @@
     yylloc.last_line = 1;
     yylloc.last_column = 0;
     yylloc.last_offset = 0;
+    yylloc.generate_point_and_click = generate_point_and_click;
 }
 
-#line 1923 "gabc/gabc-score-determination-y.c" /* yacc.c:1429  */
+#line 2057 "gabc/gabc-score-determination-y.c" /* yacc.c:1429  */
   yylsp[0] = yylloc;
   goto yysetstate;
 
@@ -2106,41 +2240,57 @@
   switch (yyn)
     {
         case 3:
-#line 601 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+#line 704 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         end_definitions();
     }
-#line 2114 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2248 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
   case 6:
-#line 611 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+#line 714 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
-        (yyval).text = (yyvsp[-1]).text;
+        (yyval).text = (yyvsp[0]).text;
     }
-#line 2122 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2256 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
   case 7:
-#line 615 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+#line 717 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
-        (yyval).text = NULL;
+        (yyval).text = concatenate((yyvsp[-1]).text, (yyvsp[0]).text);
     }
-#line 2130 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2264 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
   case 8:
-#line 621 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+#line 723 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
+        (yyval).text = (yyvsp[-1]).text;
+    }
+#line 2272 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+    break;
+
+  case 9:
+#line 726 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+    {
+        (yyval).text = NULL;
+    }
+#line 2280 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+    break;
+
+  case 10:
+#line 732 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+    {
         /* these definitions are not passed through */
         free(macros[(yyvsp[-1]).character - '0']);
         macros[(yyvsp[-1]).character - '0'] = (yyvsp[0]).text;
     }
-#line 2140 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2290 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 9:
-#line 626 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 11:
+#line 737 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         if ((yyvsp[0]).text == NULL) {
             gregorio_message("name can't be empty","det_score",
@@ -2150,11 +2300,11 @@
         gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text);
         score->name = (yyvsp[0]).text;
     }
-#line 2154 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2304 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 10:
-#line 635 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 12:
+#line 746 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         check_multiple("language", got_language);
         gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text);
@@ -2161,61 +2311,61 @@
         gregorio_set_centering_language((yyvsp[0]).text);
         got_language = true;
     }
-#line 2165 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2315 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 11:
-#line 641 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 13:
+#line 752 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         check_multiple("gabc-copyright", score->gabc_copyright != NULL);
         gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text);
         score->gabc_copyright = (yyvsp[0]).text;
     }
-#line 2175 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2325 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 12:
-#line 646 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 14:
+#line 757 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         check_multiple("score_copyright", score->score_copyright != NULL);
         gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text);
         score->score_copyright = (yyvsp[0]).text;
     }
-#line 2185 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2335 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 13:
-#line 651 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 15:
+#line 762 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         check_multiple("mode", score->mode != 0);
         gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text);
         score->mode = (yyvsp[0]).text;
     }
-#line 2195 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2345 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 14:
-#line 656 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 16:
+#line 767 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         check_multiple("mode-modifier", score->mode_modifier != NULL);
         gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text);
         score->mode_modifier = (yyvsp[0]).text;
     }
-#line 2205 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2355 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 15:
-#line 661 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 17:
+#line 772 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         check_multiple("mode-differentia", score->mode_differentia != NULL);
         gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text);
         score->mode_differentia = (yyvsp[0]).text;
     }
-#line 2215 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2365 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 16:
-#line 666 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 18:
+#line 777 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         check_multiple("staff-lines", got_staff_lines);
         if ((yyvsp[0]).text) {
@@ -2224,11 +2374,11 @@
             got_staff_lines = true;
         }
     }
-#line 2228 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2378 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 17:
-#line 674 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 19:
+#line 785 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         check_multiple("nabc lines", score->nabc_lines != 0);
         if ((yyvsp[0]).text) {
@@ -2237,27 +2387,12 @@
             score->nabc_lines=nabc_lines;
         }
     }
-#line 2241 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2391 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 18:
-#line 682 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 20:
+#line 793 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
-        if ((yyvsp[0]).text) {
-            /* DEPRECATED for removal in 5.0 */
-            gregorio_message("\"initial-style\" header is deprecated. Please "
-            "use \\gresetinitiallines in TeX instead.",
-            "gabc_score_determination_parse", VERBOSITY_DEPRECATION, 0);
-            score->initial_style = atoi((yyvsp[0]).text);
-            free((yyvsp[0]).text);
-        }
-    }
-#line 2256 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
-    break;
-
-  case 19:
-#line 692 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
-    {
         if (score->annotation [MAX_ANNOTATIONS - 1]) {
             gregorio_messagef("det_score", VERBOSITY_WARNING, 0,
                     _("too many definitions of annotation found, only the "
@@ -2266,48 +2401,48 @@
         gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text);
         gregorio_set_score_annotation(score, (yyvsp[0]).text);
     }
-#line 2270 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2405 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 20:
-#line 701 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 21:
+#line 802 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         check_multiple("author", score->author != NULL);
         gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text);
         score->author = (yyvsp[0]).text;
     }
-#line 2280 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2415 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 21:
-#line 706 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 22:
+#line 807 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text);
         score->legacy_oriscus_orientation = (strcmp((yyvsp[0]).text, "legacy") == 0);
     }
-#line 2289 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2424 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 22:
-#line 710 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 23:
+#line 811 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text);
     }
-#line 2297 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2432 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 25:
-#line 720 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 26:
+#line 821 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         gabc_y_add_notes((yyvsp[-1]).text, (yylsp[-1]));
         free((yyvsp[-1]).text);
         nabc_state=0;
     }
-#line 2307 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2442 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 26:
-#line 725 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 27:
+#line 826 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         gabc_y_add_notes((yyvsp[-1]).text, (yylsp[-1]));
         free((yyvsp[-1]).text);
@@ -2314,11 +2449,11 @@
         nabc_state=0;
         update_position_with_space();
     }
-#line 2318 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2453 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 27:
-#line 731 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 28:
+#line 832 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         if (!nabc_lines) {
             gregorio_message(_("You used character \"|\" in gabc without "
@@ -2330,342 +2465,475 @@
         free((yyvsp[-1]).text);
         nabc_state = (nabc_state + 1) % (nabc_lines+1);
     }
-#line 2334 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2469 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 28:
-#line 742 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 29:
+#line 843 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         elements[voice]=NULL;
         nabc_state=0;
     }
-#line 2343 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2478 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 29:
-#line 746 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 30:
+#line 847 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         elements[voice]=NULL;
         nabc_state=0;
         update_position_with_space();
     }
-#line 2353 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2488 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 33:
-#line 760 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 34:
+#line 861 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         add_style(ST_ITALIC);
     }
-#line 2361 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2496 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 34:
-#line 763 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 35:
+#line 864 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         add_style(ST_TT);
     }
-#line 2369 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2504 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 35:
-#line 766 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 36:
+#line 867 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         add_style(ST_UNDERLINED);
     }
-#line 2377 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2512 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 36:
-#line 769 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 37:
+#line 870 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         add_style(ST_COLORED);
     }
-#line 2385 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2520 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 37:
-#line 772 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 38:
+#line 873 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         add_style(ST_BOLD);
     }
-#line 2393 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2528 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 38:
-#line 775 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 39:
+#line 876 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         add_style(ST_SMALL_CAPS);
     }
-#line 2401 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2536 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 39:
-#line 778 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 40:
+#line 879 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         add_style(ST_VERBATIM);
     }
-#line 2409 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2544 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 40:
-#line 781 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 41:
+#line 882 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         add_style(ST_SPECIAL_CHAR);
     }
-#line 2417 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2552 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 41:
-#line 784 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
-    {
-        add_style(ST_ELISION);
-    }
-#line 2425 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
-    break;
-
   case 42:
-#line 787 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+#line 888 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
-        if (!center_is_determined) {
-            add_style(ST_FORCED_CENTER);
-            center_is_determined=CENTER_HALF_DETERMINED;
-        }
+        end_style(ST_ITALIC);
     }
-#line 2436 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2560 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
   case 43:
-#line 796 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+#line 891 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
-        end_style(ST_ITALIC);
+        end_style(ST_TT);
     }
-#line 2444 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2568 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
   case 44:
-#line 799 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+#line 894 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
-        end_style(ST_TT);
+        end_style(ST_UNDERLINED);
     }
-#line 2452 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2576 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
   case 45:
-#line 802 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+#line 897 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
-        end_style(ST_UNDERLINED);
+        end_style(ST_COLORED);
     }
-#line 2460 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2584 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
   case 46:
-#line 805 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+#line 900 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
-        end_style(ST_COLORED);
+        end_style(ST_BOLD);
     }
-#line 2468 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2592 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
   case 47:
-#line 808 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+#line 903 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
-        end_style(ST_BOLD);
+        end_style(ST_SMALL_CAPS);
     }
-#line 2476 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2600 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
   case 48:
-#line 811 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+#line 906 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
-        end_style(ST_SMALL_CAPS);
+        end_style(ST_VERBATIM);
     }
-#line 2484 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2608 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
   case 49:
-#line 814 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+#line 909 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
-        end_style(ST_VERBATIM);
+        end_style(ST_SPECIAL_CHAR);
     }
-#line 2492 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2616 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
   case 50:
-#line 817 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+#line 915 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
-        end_style(ST_SPECIAL_CHAR);
+        add_style(ST_ELISION);
     }
-#line 2500 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2624 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
   case 51:
-#line 820 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+#line 918 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
-        end_style(ST_ELISION);
+        if (center_is_determined) {
+            gregorio_message(
+                    "syllable already has center; ignoring additional center",
+                    "det_score", VERBOSITY_WARNING, 0);
+        } else if (has_protrusion) {
+            gregorio_message(
+                    "center not allowed after protrusion; ignored",
+                    "det_score", VERBOSITY_WARNING, 0);
+        } else {
+            add_style(ST_FORCED_CENTER);
+            center_is_determined = CENTER_HALF_DETERMINED;
+        }
     }
-#line 2508 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2643 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
   case 52:
-#line 823 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+#line 935 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
-        if (center_is_determined==CENTER_HALF_DETERMINED) {
+        end_style(ST_ELISION);
+    }
+#line 2651 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+    break;
+
+  case 53:
+#line 938 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+    {
+        if (center_is_determined == CENTER_HALF_DETERMINED) {
             end_style(ST_FORCED_CENTER);
-            center_is_determined=CENTER_FULLY_DETERMINED;
+            center_is_determined = CENTER_FULLY_DETERMINED;
+        } else {
+            gregorio_message(
+                    "not within a syllable center",
+                    "det_score", VERBOSITY_WARNING, 0);
         }
     }
-#line 2519 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2666 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 53:
-#line 832 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 54:
+#line 951 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         euouae = EUOUAE_BEGINNING;
     }
-#line 2527 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2674 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 54:
-#line 835 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 55:
+#line 954 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         euouae = EUOUAE_END;
     }
-#line 2535 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2682 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 55:
-#line 841 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 56:
+#line 960 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         no_linebreak_area = NLBA_BEGINNING;
     }
-#line 2543 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2690 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 56:
-#line 844 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 57:
+#line 963 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         no_linebreak_area = NLBA_END;
     }
-#line 2551 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2698 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
   case 58:
-#line 851 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+#line 969 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
+        add_protrusion((yyvsp[-1]).text);
+    }
+#line 2706 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+    break;
+
+  case 59:
+#line 972 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+    {
+        add_protrusion(gregorio_strdup("d")); /* d = default */
+    }
+#line 2714 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+    break;
+
+  case 61:
+#line 979 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+    {
         add_text((yyvsp[0]).text);
     }
-#line 2559 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2722 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 63:
-#line 861 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 68:
+#line 988 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
+        clear_syllable_text = true;
+    }
+#line 2730 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+    break;
+
+  case 70:
+#line 992 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+    {
         add_text(gregorio_strdup("-"));
     }
-#line 2567 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2738 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 64:
-#line 864 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 71:
+#line 995 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
+        add_text((yyvsp[0]).text);
+    }
+#line 2746 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+    break;
+
+  case 74:
+#line 1006 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+    {
+        add_text((yyvsp[0]).text);
+    }
+#line 2754 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+    break;
+
+  case 77:
+#line 1011 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+    {
         add_text(gregorio_strdup("-"));
     }
-#line 2575 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2762 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 68:
-#line 875 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 78:
+#line 1014 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
+        add_text((yyvsp[0]).text);
+    }
+#line 2770 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+    break;
+
+  case 81:
+#line 1025 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+    {
         start_translation(TR_NORMAL);
     }
-#line 2583 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2778 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 69:
-#line 881 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 82:
+#line 1031 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         end_translation();
     }
-#line 2591 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2786 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 70:
-#line 884 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 83:
+#line 1034 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
+        end_translation();
+    }
+#line 2794 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+    break;
+
+  case 84:
+#line 1037 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+    {
         start_translation(TR_WITH_CENTER_END);
+        end_translation();
     }
-#line 2599 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2803 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 71:
-#line 890 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 85:
+#line 1044 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         abovelinestext = (yyvsp[-1]).text;
     }
-#line 2607 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2811 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 72:
-#line 896 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 86:
+#line 1050 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
-        ready_characters();
-        first_text_character = current_character;
+        save_text();
         close_syllable(&(yylsp[-2]));
     }
-#line 2617 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2820 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 73:
-#line 901 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 87:
+#line 1054 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         add_style(ST_VERBATIM);
         add_text(gregorio_strdup("\\GreForceHyphen"));
         end_style(ST_VERBATIM);
-        ready_characters();
-        first_text_character = current_character;
+        save_text();
+        close_syllable(&(yylsp[-2]));
+    }
+#line 2832 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+    break;
+
+  case 88:
+#line 1061 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+    {
+        add_style(ST_VERBATIM);
+        add_text(gregorio_strdup("\\GreForceHyphen"));
+        end_style(ST_VERBATIM);
+        save_text();
         close_syllable(&(yylsp[-3]));
     }
-#line 2630 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2844 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 74:
-#line 909 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 89:
+#line 1068 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
+        add_auto_protrusion((yyvsp[-2]).text);
+        save_text();
+        close_syllable(&(yylsp[-2]));
+    }
+#line 2854 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+    break;
+
+  case 90:
+#line 1073 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+    {
+        add_auto_protrusion((yyvsp[-2]).text);
+        save_text();
         close_syllable(&(yylsp[-3]));
     }
-#line 2638 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2864 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 75:
-#line 912 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 91:
+#line 1078 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
+        save_text();
+        close_syllable(&(yylsp[-3]));
+    }
+#line 2873 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+    break;
+
+  case 92:
+#line 1082 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+    {
         add_style(ST_VERBATIM);
         add_text(gregorio_strdup("\\GreForceHyphen"));
         end_style(ST_VERBATIM);
+        save_text();
+        close_syllable(&(yylsp[-3]));
+    }
+#line 2885 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+    break;
+
+  case 93:
+#line 1089 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+    {
+        add_style(ST_VERBATIM);
+        add_text(gregorio_strdup("\\GreForceHyphen"));
+        end_style(ST_VERBATIM);
+        save_text();
         close_syllable(&(yylsp[-4]));
     }
-#line 2649 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2897 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 76:
-#line 921 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 94:
+#line 1096 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
+        add_auto_protrusion((yyvsp[-3]).text);
+        save_text();
+        close_syllable(&(yylsp[-3]));
+    }
+#line 2907 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+    break;
+
+  case 95:
+#line 1101 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+    {
+        add_auto_protrusion((yyvsp[-3]).text);
+        save_text();
+        close_syllable(&(yylsp[-4]));
+    }
+#line 2917 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+    break;
+
+  case 96:
+#line 1109 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+    {
         close_syllable(NULL);
     }
-#line 2657 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2925 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
-  case 77:
-#line 924 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
+  case 97:
+#line 1112 "gabc/gabc-score-determination.y" /* yacc.c:1646  */
     {
         close_syllable(NULL);
     }
-#line 2665 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2933 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
     break;
 
 
-#line 2669 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
+#line 2937 "gabc/gabc-score-determination-y.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-y.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-y.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-y.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -58,51 +58,53 @@
     MODE = 268,
     MODE_MODIFIER = 269,
     MODE_DIFFERENTIA = 270,
-    INITIAL_STYLE = 271,
-    END_OF_DEFINITIONS = 272,
-    END_OF_FILE = 273,
-    COLON = 274,
-    SEMICOLON = 275,
-    SPACE = 276,
-    CHARACTERS = 277,
-    NOTES = 278,
-    HYPHEN = 279,
-    ATTRIBUTE = 280,
-    OPENING_BRACKET = 281,
-    CLOSING_BRACKET = 282,
-    CLOSING_BRACKET_WITH_SPACE = 283,
-    I_BEGIN = 284,
-    I_END = 285,
-    TT_BEGIN = 286,
-    TT_END = 287,
-    UL_BEGIN = 288,
-    UL_END = 289,
-    C_BEGIN = 290,
-    C_END = 291,
-    B_BEGIN = 292,
-    B_END = 293,
-    SC_BEGIN = 294,
-    SC_END = 295,
-    SP_BEGIN = 296,
-    SP_END = 297,
-    VERB_BEGIN = 298,
-    VERB = 299,
-    VERB_END = 300,
-    CENTER_BEGIN = 301,
-    CENTER_END = 302,
-    ELISION_BEGIN = 303,
-    ELISION_END = 304,
-    TRANSLATION_BEGIN = 305,
-    TRANSLATION_END = 306,
-    TRANSLATION_CENTER_END = 307,
-    ALT_BEGIN = 308,
-    ALT_END = 309,
-    NLBA_B = 310,
-    NLBA_E = 311,
-    EUOUAE_B = 312,
-    EUOUAE_E = 313,
-    NABC_CUT = 314,
-    NABC_LINES = 315
+    END_OF_DEFINITIONS = 271,
+    END_OF_FILE = 272,
+    COLON = 273,
+    SEMICOLON = 274,
+    CHARACTERS = 275,
+    NOTES = 276,
+    HYPHEN = 277,
+    ATTRIBUTE = 278,
+    OPENING_BRACKET = 279,
+    CLOSING_BRACKET = 280,
+    CLOSING_BRACKET_WITH_SPACE = 281,
+    I_BEGIN = 282,
+    I_END = 283,
+    TT_BEGIN = 284,
+    TT_END = 285,
+    UL_BEGIN = 286,
+    UL_END = 287,
+    C_BEGIN = 288,
+    C_END = 289,
+    B_BEGIN = 290,
+    B_END = 291,
+    SC_BEGIN = 292,
+    SC_END = 293,
+    SP_BEGIN = 294,
+    SP_END = 295,
+    VERB_BEGIN = 296,
+    VERB_END = 297,
+    CENTER_BEGIN = 298,
+    CENTER_END = 299,
+    ELISION_BEGIN = 300,
+    ELISION_END = 301,
+    TRANSLATION_BEGIN = 302,
+    TRANSLATION_END = 303,
+    TRANSLATION_CENTER_END = 304,
+    ALT_BEGIN = 305,
+    ALT_END = 306,
+    NLBA_B = 307,
+    NLBA_E = 308,
+    EUOUAE_B = 309,
+    EUOUAE_E = 310,
+    NABC_CUT = 311,
+    NABC_LINES = 312,
+    CLEAR = 313,
+    PROTRUSION = 314,
+    PROTRUSION_VALUE = 315,
+    PROTRUSION_END = 316,
+    PROTRUDING_PUNCTUATION = 317
   };
 #endif
 /* Tokens.  */
@@ -119,51 +121,53 @@
 #define MODE 268
 #define MODE_MODIFIER 269
 #define MODE_DIFFERENTIA 270
-#define INITIAL_STYLE 271
-#define END_OF_DEFINITIONS 272
-#define END_OF_FILE 273
-#define COLON 274
-#define SEMICOLON 275
-#define SPACE 276
-#define CHARACTERS 277
-#define NOTES 278
-#define HYPHEN 279
-#define ATTRIBUTE 280
-#define OPENING_BRACKET 281
-#define CLOSING_BRACKET 282
-#define CLOSING_BRACKET_WITH_SPACE 283
-#define I_BEGIN 284
-#define I_END 285
-#define TT_BEGIN 286
-#define TT_END 287
-#define UL_BEGIN 288
-#define UL_END 289
-#define C_BEGIN 290
-#define C_END 291
-#define B_BEGIN 292
-#define B_END 293
-#define SC_BEGIN 294
-#define SC_END 295
-#define SP_BEGIN 296
-#define SP_END 297
-#define VERB_BEGIN 298
-#define VERB 299
-#define VERB_END 300
-#define CENTER_BEGIN 301
-#define CENTER_END 302
-#define ELISION_BEGIN 303
-#define ELISION_END 304
-#define TRANSLATION_BEGIN 305
-#define TRANSLATION_END 306
-#define TRANSLATION_CENTER_END 307
-#define ALT_BEGIN 308
-#define ALT_END 309
-#define NLBA_B 310
-#define NLBA_E 311
-#define EUOUAE_B 312
-#define EUOUAE_E 313
-#define NABC_CUT 314
-#define NABC_LINES 315
+#define END_OF_DEFINITIONS 271
+#define END_OF_FILE 272
+#define COLON 273
+#define SEMICOLON 274
+#define CHARACTERS 275
+#define NOTES 276
+#define HYPHEN 277
+#define ATTRIBUTE 278
+#define OPENING_BRACKET 279
+#define CLOSING_BRACKET 280
+#define CLOSING_BRACKET_WITH_SPACE 281
+#define I_BEGIN 282
+#define I_END 283
+#define TT_BEGIN 284
+#define TT_END 285
+#define UL_BEGIN 286
+#define UL_END 287
+#define C_BEGIN 288
+#define C_END 289
+#define B_BEGIN 290
+#define B_END 291
+#define SC_BEGIN 292
+#define SC_END 293
+#define SP_BEGIN 294
+#define SP_END 295
+#define VERB_BEGIN 296
+#define VERB_END 297
+#define CENTER_BEGIN 298
+#define CENTER_END 299
+#define ELISION_BEGIN 300
+#define ELISION_END 301
+#define TRANSLATION_BEGIN 302
+#define TRANSLATION_END 303
+#define TRANSLATION_CENTER_END 304
+#define ALT_BEGIN 305
+#define ALT_END 306
+#define NLBA_B 307
+#define NLBA_E 308
+#define EUOUAE_B 309
+#define EUOUAE_E 310
+#define NABC_CUT 311
+#define NABC_LINES 312
+#define CLEAR 313
+#define PROTRUSION 314
+#define PROTRUSION_VALUE 315
+#define PROTRUSION_END 316
+#define PROTRUDING_PUNCTUATION 317
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -3,7 +3,7 @@
  * This file implements the score parser.
  *
  * Gregorio score determination from gabc utilities.
- * Copyright (C) 2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2016-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  * 
@@ -24,6 +24,7 @@
 #include "config.h"
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <assert.h>
 #include "bool.h"
 #include "struct.h"
@@ -31,64 +32,116 @@
 #include "gabc.h"
 #include "gabc-score-determination.h"
 #include "messages.h"
+#include "support.h"
 
-void fix_custos(gregorio_score *score_to_check)
+void gabc_suppress_extra_custos_at_linebreak(gregorio_score *score)
 {
+    gregorio_syllable *syllable;
+    gregorio_element **custos = NULL;
+
+    for (syllable = score->first_syllable; syllable;
+            syllable = syllable->next_syllable) {
+        gregorio_element **element;
+        for (element = syllable->elements; element && *element;
+                element = &((*element)->next)) {
+            switch ((*element)->type) {
+            case GRE_CUSTOS:
+                if (!((*element)->u.misc.pitched.force_pitch)) {
+                    /* save the encountered non-forced custos */
+                    custos = element;
+                } else {
+                    /* forget the (previous) custos */
+                    custos = NULL;
+                }
+                break;
+            case GRE_CLEF:
+            case GRE_BAR:
+                /* remember the custos if only these appear before linebreak */
+                break;
+            case GRE_END_OF_LINE:
+                if (custos) {
+                    /* suppress the custos when linebreak follows */
+                    gregorio_free_one_element(custos);
+                }
+                /* fall through */
+            default:
+                /* forget the custos */
+                custos = NULL;
+                break;
+            }
+        }
+    }
+}
+
+void gabc_fix_custos_pitches(gregorio_score *score_to_check)
+{
     gregorio_syllable *current_syllable;
     gregorio_element *current_element;
-    gregorio_element *custo_element;
-    char pitch = 0;
-    char pitch_difference = 0;
+    gregorio_element *custos_element;
     int newkey;
     int current_key;
+
     if (!score_to_check || !score_to_check->first_syllable
             || !score_to_check->first_voice_info) {
         return;
     }
+
     current_key = gregorio_calculate_new_key(
             score_to_check->first_voice_info->initial_clef);
-    current_syllable = score_to_check->first_syllable;
-    while (current_syllable) {
-        current_element = (current_syllable->elements)[0];
-        while (current_element) {
-            if (current_element->type == GRE_CUSTOS) {
-                custo_element = current_element;
-                pitch = custo_element->u.misc.pitched.pitch;
-                /* we look for the key */
-                while (current_element) {
-                    if (current_element->type == GRE_CLEF) {
-                        pitch = gregorio_determine_next_pitch(current_syllable,
-                                current_element, NULL, NULL);
-                        newkey = gregorio_calculate_new_key(
-                                current_element->u.misc.clef);
-                        pitch_difference = (char) newkey - (char) current_key;
-                        pitch -= pitch_difference;
-                        current_key = newkey;
-                    }
-                    if (!custo_element->u.misc.pitched.force_pitch) {
-                        while (pitch < LOWEST_PITCH) {
-                            pitch += 7;
-                        }
-                        while (pitch > score_to_check->highest_pitch) {
-                            pitch -= 7;
-                        }
-                        custo_element->u.misc.pitched.pitch = pitch;
-                    }
-                    assert(custo_element->u.misc.pitched.pitch >= LOWEST_PITCH 
-                            && custo_element->u.misc.pitched.pitch
-                            <= score_to_check->highest_pitch);
-                    current_element = current_element->next;
-                }
+    for (current_syllable = score_to_check->first_syllable; current_syllable;
+            current_syllable = current_syllable->next_syllable) {
+        for (current_element = (current_syllable->elements)[0]; current_element;
+                current_element = current_element->next) {
+            if (current_element->type == GRE_CLEF) {
+                newkey = gregorio_calculate_new_key(
+                        current_element->u.misc.clef);
+                current_element->u.misc.clef.pitch_difference =
+                        (signed char) newkey - (signed char) current_key;
+                current_key = newkey;
             }
-            if (current_element) {
-                if (current_element->type == GRE_CLEF) {
-                    current_key = gregorio_calculate_new_key(
-                            current_element->u.misc.clef);
+        }
+    }
+
+    custos_element = NULL;
+    for (current_syllable = score_to_check->first_syllable; current_syllable;
+            current_syllable = current_syllable->next_syllable) {
+        for (current_element = (current_syllable->elements)[0]; current_element;
+                current_element = current_element->next) {
+            switch (current_element->type) {
+            case GRE_CUSTOS:
+                if (current_element->u.misc.pitched.force_pitch) {
+                    /* forget about the preceding custos if a forced one is
+                     * encountered */
+                    custos_element = NULL;
+                } else {
+                    /* the pitch is not forced, so it may need to be adjusted */
+                    custos_element = current_element;
+                    custos_element->u.misc.pitched.pitch =
+                            gregorio_determine_next_pitch(current_syllable,
+                                    current_element, NULL, NULL);
                 }
-                current_element = current_element->next;
+                break;
+
+            case GRE_ELEMENT:
+                /* if it's an element, forget any preceding custos */
+                custos_element = NULL;
+                break;
+
+            case GRE_CLEF:
+                if (custos_element) {
+                    /* adjust the preceding custos for the clef */
+                    custos_element->u.misc.pitched.pitch =
+                            gregorio_adjust_pitch_into_staff(score_to_check,
+                            custos_element->u.misc.pitched.pitch
+                            - current_element->u.misc.clef.pitch_difference);
+                }
+                break;
+
+            default:
+                /* to prevent the warning */
+                break;
             }
         }
-        current_syllable = current_syllable->next_syllable;
     }
 }
 
@@ -96,7 +149,7 @@
  * A function that checks the score integrity.
  */
 
-bool check_score_integrity(gregorio_score *score_to_check)
+bool gabc_check_score_integrity(gregorio_score *score_to_check)
 {
     bool good = true;
 
@@ -144,7 +197,7 @@
  * Another function to be improved: this one checks the validity of the voice_infos.
  */
 
-bool check_infos_integrity(gregorio_score *score_to_check)
+bool gabc_check_infos_integrity(gregorio_score *score_to_check)
 {
     if (!score_to_check->name) {
         gregorio_message(_("no name specified, put `name:...;' at the "
@@ -154,100 +207,100 @@
     return true;
 }
 
-/* data must be (gregorio_note **) */
-static void oriscus_orientation_visit(
-        const gregorio_note_iter_position *const p, void *const data)
+static void set_oriscus_descending(const gregorio_note_iter_position *const p,
+        void *const ignored __attribute__((unused)))
 {
-    gregorio_note *const note = p->note;
-    gregorio_note **const oriscus_ptr = (gregorio_note **const)data;
-    gregorio_note *const oriscus = *oriscus_ptr;
-    /* making oriscus const ensures we don't attempt to change *oriscus_ptr
-     * via oriscus */
-
-    if (oriscus) {
-        if (note->u.note.pitch <= oriscus->u.note.pitch) {
-            /* descending or unison */
-            switch(oriscus->u.note.shape) {
-            case S_ORISCUS_UNDETERMINED:
-                oriscus->u.note.shape = S_ORISCUS_DESCENDENS;
-                break;
-            case S_ORISCUS_SCAPUS_UNDETERMINED:
-                oriscus->u.note.shape = S_ORISCUS_SCAPUS_DESCENDENS;
-                break;
-            case S_ORISCUS_CAVUM_UNDETERMINED:
-                oriscus->u.note.shape = S_ORISCUS_CAVUM_DESCENDENS;
-                break;
-            default:
-                /* not reachable unless there's a
-                 * programming error */
-                /* LCOV_EXCL_START */
-                gregorio_fail(oriscus_orientation_visit, "bad_shape");
-                break;
-                /* LCOV_EXCL_STOP */
-            }
-        } else { /* ascending */
-            switch(oriscus->u.note.shape) {
-            case S_ORISCUS_UNDETERMINED:
-                oriscus->u.note.shape = S_ORISCUS_ASCENDENS;
-                break;
-            case S_ORISCUS_SCAPUS_UNDETERMINED:
-                oriscus->u.note.shape = S_ORISCUS_SCAPUS_ASCENDENS;
-                break;
-            case S_ORISCUS_CAVUM_UNDETERMINED:
-                oriscus->u.note.shape = S_ORISCUS_CAVUM_ASCENDENS;
-                break;
-            default:
-                /* not reachable unless there's a
-                 * programming error */
-                /* LCOV_EXCL_START */
-                gregorio_fail(oriscus_orientation_visit, "bad_shape");
-                break;
-                /* LCOV_EXCL_STOP */
-            }
+    switch(p->note->u.note.shape) {
+    case S_ORISCUS_UNDETERMINED:
+        p->note->u.note.shape = S_ORISCUS_DESCENDENS;
+        break;
+    case S_ORISCUS_SCAPUS_UNDETERMINED:
+        p->note->u.note.shape = S_ORISCUS_SCAPUS_DESCENDENS;
+        gregorio_assert_only(p->glyph->u.notes.glyph_type
+                != G_PES_DESCENDENS_ORISCUS, set_oriscus_descending,
+                "glyph type should not be G_PES_DESCENDENS_ORISCUS");
+        if (p->glyph->u.notes.glyph_type == G_PES_ASCENDENS_ORISCUS) {
+            p->glyph->u.notes.glyph_type = G_PES_DESCENDENS_ORISCUS;
         }
-        *oriscus_ptr = NULL;
+        break;
+    default:
+        break;
     }
+}
 
-    switch (note->u.note.shape) {
+static void set_oriscus_ascending(const gregorio_note_iter_position *const p,
+        void *const ignored __attribute__((unused)))
+{
+    switch(p->note->u.note.shape) {
     case S_ORISCUS_UNDETERMINED:
+        p->note->u.note.shape = S_ORISCUS_ASCENDENS;
+        break;
     case S_ORISCUS_SCAPUS_UNDETERMINED:
-    case S_ORISCUS_CAVUM_UNDETERMINED:
-        *oriscus_ptr = note;
+        p->note->u.note.shape = S_ORISCUS_SCAPUS_ASCENDENS;
+        gregorio_assert_only(p->glyph->u.notes.glyph_type
+                != G_PES_DESCENDENS_ORISCUS, set_oriscus_ascending,
+                "glyph type should not be G_PES_DESCENDENS_ORISCUS");
         break;
-
     default:
         break;
     }
 }
 
-void determine_oriscus_orientation(const gregorio_score *const score)
+/* data must be (gregorio_note_iter_position *) */
+static void oriscus_orientation_visit(
+        const gregorio_note_iter_position *const p, void *const data)
 {
-    gregorio_note *oriscus = NULL;
+    gregorio_note *const note = p->note;
+    gregorio_note_iter_position *const oriscus =
+        (gregorio_note_iter_position *const)data;
 
-    gregorio_for_each_note(score, oriscus_orientation_visit, &oriscus);
+    if (oriscus->note && note->u.note.pitch != oriscus->note->u.note.pitch) {
+        if (note->u.note.pitch <= oriscus->note->u.note.pitch) {
+            /* descending (or undetermined oriscus in unison) */
+            gregorio_from_note_to_note(oriscus, p, false,
+                    set_oriscus_descending, NULL, GRESTRUCT_NONE, NULL);
+        } else {
+            /* ascending */
+            gregorio_from_note_to_note(oriscus, p, false,
+                    set_oriscus_ascending, NULL, GRESTRUCT_NONE, NULL);
+        }
+        oriscus->syllable = NULL,
+        oriscus->element = NULL,
+        oriscus->note = NULL;
+        oriscus->glyph = NULL;
+    }
 
-    if (oriscus) {
-        /* oriscus at the end of the score */
-        switch(oriscus->u.note.shape) {
+    if (!oriscus->note) {
+        switch (note->u.note.shape) {
         case S_ORISCUS_UNDETERMINED:
-            oriscus->u.note.shape = S_ORISCUS_DESCENDENS;
-            break;
         case S_ORISCUS_SCAPUS_UNDETERMINED:
-            oriscus->u.note.shape = S_ORISCUS_SCAPUS_DESCENDENS;
+            *oriscus = *p;
             break;
-        case S_ORISCUS_CAVUM_UNDETERMINED:
-            oriscus->u.note.shape = S_ORISCUS_CAVUM_DESCENDENS;
-            break;
+
         default:
-            /* not reachable unless there's a programming error */
-            /* LCOV_EXCL_START */
-            gregorio_fail(determine_oriscus_orientation, "bad_shape");
             break;
-            /* LCOV_EXCL_STOP */
         }
     }
 }
 
+void gabc_determine_oriscus_orientation(const gregorio_score *const score)
+{
+    gregorio_note_iter_position oriscus = {
+        /* .syllable = */ NULL,
+        /* .element = */ NULL,
+        /* .glyph = */ NULL,
+        /* .note = */ NULL
+    };
+
+    gregorio_for_each_note(score, oriscus_orientation_visit, NULL,
+            GRESTRUCT_NONE, &oriscus);
+
+    if (oriscus.note) {
+        gregorio_from_note_to_note(&oriscus, NULL, true,
+                set_oriscus_descending, NULL, GRESTRUCT_NONE, NULL);
+    }
+}
+
 typedef struct {
     gregorio_note_iter_position first, previous;
     gregorio_shape orientation;
@@ -298,8 +351,6 @@
         case S_PUNCTUM_INCLINATUM_DESCENDENS:
         case S_PUNCTUM_INCLINATUM_DEMINUTUS:
         case S_PUNCTUM_INCLINATUM_AUCTUS:
-        case S_PUNCTUM_CAVUM_INCLINATUM:
-        case S_PUNCTUM_CAVUM_INCLINATUM_AUCTUS:
             v->orientation = S_PUNCTUM_INCLINATUM_DESCENDENS;
             is_punctum_inclinatum = true;
             break;
@@ -324,8 +375,8 @@
                     ? S_PUNCTUM_INCLINATUM_ASCENDENS
                     : S_PUNCTUM_INCLINATUM_DESCENDENS;
             }
-            gregorio_from_note_to_note(&v->first, &v->previous, set_shape,
-                    &v->orientation);
+            gregorio_from_note_to_note(&v->first, &v->previous, true, set_shape,
+                    NULL, GRESTRUCT_NONE, &v->orientation);
             v->first.syllable = NULL;
             v->first.element = NULL;
             v->first.glyph = NULL;
@@ -341,7 +392,7 @@
     v->previous = *p;
 }
 
-void determine_punctum_inclinatum_orientation(
+void gabc_determine_punctum_inclinatum_orientation(
         const gregorio_score *const score)
 {
     punctum_inclinatum_vars v = {
@@ -361,13 +412,188 @@
         /* .running = */ 0,
     };
 
-    gregorio_for_each_note(score, punctum_inclinatum_orientation_visit, &v);
-    
+    gregorio_for_each_note(score, punctum_inclinatum_orientation_visit, NULL,
+            GRESTRUCT_NONE, &v);
+
     if (v.first.note) {
         v.orientation = (v.running > 0)
             ? S_PUNCTUM_INCLINATUM_ASCENDENS
             : S_PUNCTUM_INCLINATUM_DESCENDENS;
-        gregorio_from_note_to_note(&v.first, &v.previous, set_shape,
-                &v.orientation);
+        gregorio_from_note_to_note(&v.first, &v.previous, true, set_shape, NULL,
+                GRESTRUCT_NONE, &v.orientation);
     }
 }
+
+typedef struct note_stack {
+    gregorio_note *note;
+    struct note_stack *prev;
+} note_stack;
+
+static void note_stack_push(note_stack **const stack, gregorio_note *note) {
+    note_stack *item = gregorio_malloc(sizeof(note_stack));
+    item->note = note;
+    item->prev = *stack;
+    *stack = item;
+}
+
+static gregorio_note *note_stack_pop(note_stack **const stack) {
+    note_stack *item = *stack;
+    if (item) {
+        gregorio_note *note = item->note;
+        note_stack *prev = item->prev;
+        free(item);
+        *stack = prev;
+        return note;
+    }
+    return NULL;
+}
+
+static void note_stack_clear(note_stack **const stack) {
+    note_stack *item = *stack;
+    while (item) {
+        note_stack *prev = item->prev;
+        free(item);
+        item = prev;
+    }
+    *stack = NULL;
+}
+
+typedef struct {
+    note_stack *high, *low;
+    gregorio_note *prev_note;
+    signed char high_ledger_line_pitch;
+    bool running_high, running_low;
+} ledger_line_vars;
+
+static __inline void clear_ledger_line_vars(ledger_line_vars *const v) {
+    note_stack_clear(&v->high);
+    note_stack_clear(&v->low);
+    v->prev_note = NULL;
+    v->running_high = false;
+    v->running_low = false;
+}
+
+static __inline void adjust_ledger(const gregorio_note_iter_position *const p,
+        const gregorio_ledger_specificity specificity, bool ledger_line,
+        note_stack **const stack, bool *const running, gregorio_note *prev_note,
+        const signed char high_ledger_line_pitch,
+        bool (*extend_ledger)(gregorio_note *, const gregorio_note *,
+            const gregorio_note *, signed char))
+{
+    if (specificity & LEDGER_DRAWN) {
+        if (ledger_line) {
+            gregorio_note *after = p->note;
+            gregorio_note *note;
+            /* process from this ledger backwards */
+            while ((note = note_stack_pop(stack))) {
+                if (!extend_ledger(note, NULL, after, high_ledger_line_pitch)) {
+                    /* ledger has ended */
+                    break;
+                }
+                after = note;
+            }
+            *running = true;
+        } else {
+            *running = false;
+        }
+        note_stack_clear(stack);
+    } else {
+        if (*running) {
+            if (!extend_ledger(p->note, prev_note, NULL,
+                    high_ledger_line_pitch)) {
+                /* ledger has ended */
+                note_stack_push(stack, p->note);
+                *running = false;
+            }
+            /* else stack should be empty, keep it that way */
+        } else {
+            note_stack_push(stack, p->note);
+        }
+    }
+}
+
+static bool extend_high_ledger(gregorio_note *const note,
+        const gregorio_note *const note_before,
+        const gregorio_note *const note_after,
+        const signed char high_ledger_line_pitch)
+{
+    bool extend = false;
+
+    if (note_before) {
+        extend = note_before->u.note.pitch < note->u.note.pitch
+            || (note_before->u.note.pitch > high_ledger_line_pitch
+                && note->u.note.pitch < high_ledger_line_pitch);
+    } else if (note_after) {
+        extend = note_after->u.note.pitch < note->u.note.pitch
+            || (note_after->u.note.pitch > high_ledger_line_pitch
+                && note->u.note.pitch < high_ledger_line_pitch);
+    }
+
+    if (extend) {
+        note->high_ledger_line = true;
+        note->high_ledger_specificity = LEDGER_DRAWN;
+    }
+    return extend;
+}
+
+static bool extend_low_ledger(gregorio_note *const note,
+        const gregorio_note *const note_before,
+        const gregorio_note *const note_after,
+        const signed char high_ledger_line_pitch __attribute__((__unused__)))
+{
+    bool extend = false;
+
+    if (note_before) {
+        extend = note_before->u.note.pitch < note->u.note.pitch
+            || (note_before->u.note.pitch > LOW_LEDGER_LINE_PITCH
+                && note->u.note.pitch < LOW_LEDGER_LINE_PITCH);
+    } else if (note_after) {
+        extend = note_after->u.note.pitch < note->u.note.pitch
+            || (note_after->u.note.pitch > LOW_LEDGER_LINE_PITCH
+                && note->u.note.pitch < LOW_LEDGER_LINE_PITCH);
+    }
+
+    if (extend) {
+        note->low_ledger_line = true;
+        note->low_ledger_specificity = LEDGER_DRAWN;
+    }
+    return extend;
+}
+
+/* data must be (ledger_line_vars *) */
+static void ledger_line_visit(const gregorio_note_iter_position *const p,
+        void *const data)
+{
+    ledger_line_vars *const v = (ledger_line_vars *)data;
+
+    adjust_ledger(p, p->note->high_ledger_specificity, p->note->high_ledger_line,
+            &v->high, &v->running_high, v->prev_note, v->high_ledger_line_pitch,
+            &extend_high_ledger);
+    adjust_ledger(p, p->note->low_ledger_specificity, p->note->low_ledger_line,
+            &v->low, &v->running_low, v->prev_note, v->high_ledger_line_pitch,
+            &extend_low_ledger);
+
+    v->prev_note = p->note;
+}
+
+/* data must be (ledger_line_vars *) */
+static void ledger_line_end_item(
+        const gregorio_note_iter_position *const p __attribute__((__unused__)),
+        const gregorio_note_iter_item_type item_type, void *const data)
+{
+    if (item_type == GRESTRUCT_ELEMENT) {
+        clear_ledger_line_vars((ledger_line_vars *)data);
+    }
+}
+
+void gabc_determine_ledger_lines(const gregorio_score *const score)
+{
+    ledger_line_vars v;
+    memset(&v, 0, sizeof v);
+    v.high_ledger_line_pitch = score->high_ledger_line_pitch;
+
+    gregorio_for_each_note(score, ledger_line_visit, ledger_line_end_item,
+            GRESTRUCT_ELEMENT, &v);
+
+    /* stacks should be cleared by ledger_line_end_item */
+}

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -3,7 +3,7 @@
  * This header shares definitions between the score parser and lexer.
  *
  * Gregorio score determination from gabc.
- * Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  * 
@@ -53,10 +53,12 @@
 
 #define YYLTYPE gregorio_scanner_location
 
-void fix_custos(gregorio_score *score_to_check);
-bool check_score_integrity(gregorio_score *score_to_check);
-bool check_infos_integrity(gregorio_score *score_to_check);
-void determine_oriscus_orientation(const gregorio_score *score);
-void determine_punctum_inclinatum_orientation(const gregorio_score *score);
+void gabc_suppress_extra_custos_at_linebreak(gregorio_score *score);
+void gabc_fix_custos_pitches(gregorio_score *score_to_check);
+bool gabc_check_score_integrity(gregorio_score *score_to_check);
+bool gabc_check_infos_integrity(gregorio_score *score_to_check);
+void gabc_determine_oriscus_orientation(const gregorio_score *score);
+void gabc_determine_punctum_inclinatum_orientation(const gregorio_score *score);
+void gabc_determine_ledger_lines(const gregorio_score *const score);
 
 #endif

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.l
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.l	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.l	2017-04-06 05:08:53 UTC (rev 43706)
@@ -4,7 +4,7 @@
  * This file implements the score lexer.
  *
  * Gregorio score determination in gabc input.
- * Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *
@@ -69,7 +69,7 @@
 #define YY_INPUT(buf,result,max_size) \
     if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) { \
         int c = '*'; \
-        size_t n; \
+        int n; \
         for (n = 0; n < max_size \
                 && (c = getc(gabc_score_determination_in)) != EOF \
                 && c != '\n'; ++n ) { \
@@ -109,6 +109,8 @@
 %x comments
 %x inicomments
 %x alt
+%x protrusion_value
+%x protrusion_end
 
 %option stack
 %option pointer
@@ -151,15 +153,20 @@
         BEGIN(attribute);
         return COLON;
     }
-<attribute>[^;\n\r]*(;[^;\n\r]+)*([\n\r]+[^;]*(;[^;]+)*)? {
+<attribute>;;?[\n\r \t]*[\n\r] {
+         BEGIN(INITIAL);
+         return SEMICOLON;
+    }
+<attribute>[^;]+ {
         gabc_score_determination_lval.text =
                 gregorio_strdup(gabc_score_determination_text);
         return ATTRIBUTE;
     }
-<attribute>;;?[\n\r]+ {
-         BEGIN(INITIAL);
-         return SEMICOLON;
-    }
+<attribute>; {
+        gabc_score_determination_lval.text =
+                gregorio_strdup(gabc_score_determination_text);
+        return ATTRIBUTE;
+}
 <INITIAL>def-m[0-9] {
          gabc_score_determination_lval.character = gabc_score_determination_text[5];
          return DEF_MACRO;
@@ -179,10 +186,6 @@
                 gregorio_strdup(gabc_score_determination_text);
         return GABC_COPYRIGHT;
     }
-<INITIAL>initial-style {
-        /* DEPRECATED for removal in 5.0 */
-        return INITIAL_STYLE;
-    }
 <INITIAL>mode {
         gabc_score_determination_lval.text =
                 gregorio_strdup(gabc_score_determination_text);
@@ -245,12 +248,17 @@
 <score>[\n\r][\n\r \t]* {
         RETURN_SPACE;
     }
-<score,sp>[^-\{\}\(\[\]<%\n\r]+ {
+<score>[^-,;:.\{\}\(\[\]<%\n\r]+ {
         RETURN_CHARACTERS;
     }
 <score>- {
         return HYPHEN;
     }
+<score>[,;:.] {
+        gabc_score_determination_lval.text =
+                gregorio_strdup(gabc_score_determination_text);
+        return PROTRUDING_PUNCTUATION;
+    }
 <score><nlba> {
         return NLBA_B;
     }
@@ -333,7 +341,7 @@
 <verb,alt>[^<]+ {
         RETURN_CHARACTERS;
     }
-<verb,sp,score,alt>< {
+<verb,score,alt>< {
         RETURN_CHARACTERS;
     }
 <score>\{ {
@@ -365,6 +373,26 @@
 <score>\] {
         return TRANSLATION_END;
     }
+<score><[\n\r \t]*clear[\n\r \t]*\/?[\n\r \t]*> {
+        return CLEAR;
+    }
+<score><[\n\r \t]*pr[\n\r \t]*\/?[\n\r \t]*> {
+        return PROTRUSION;
+    }
+<score><[\n\r \t]*pr[\n\r \t]*:[\n\r \t]* {
+        BEGIN(protrusion_value);
+        return PROTRUSION;
+    }
+<protrusion_value>([0-9]*\.?[0-9]+|[0-9]+\.) {
+        BEGIN(protrusion_end);
+        gabc_score_determination_lval.text =
+                gregorio_strdup(gabc_score_determination_text);
+        return PROTRUSION_VALUE;
+    }
+<protrusion_end>[\n\r \t]*\/?[\n\r \t]*> {
+        BEGIN(score);
+        return PROTRUSION_END;
+    }
 <score>\( {
         BEGIN(notes);
         return OPENING_BRACKET;

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.y
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.y	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.y	2017-04-06 05:08:53 UTC (rev 43706)
@@ -4,7 +4,7 @@
  * This file implements the score parser.
  *
  * Gregorio score determination from gabc.
- * Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  * 
@@ -51,10 +51,13 @@
         (Current).last_line    = YYRHSLOC (Rhs, N).last_line; \
         (Current).last_column  = YYRHSLOC (Rhs, N).last_column; \
         (Current).last_offset  = YYRHSLOC (Rhs, N).last_offset; \
+        (Current).generate_point_and_click = YYRHSLOC (Rhs, 1).generate_point_and_click; \
     } else { \
         (Current).first_line   = (Current).last_line   = YYRHSLOC (Rhs, 0).last_line; \
         (Current).first_column = (Current).last_column = YYRHSLOC (Rhs, 0).last_column; \
         (Current).first_offset = (Current).last_offset = YYRHSLOC (Rhs, 0).last_offset; \
+        (Current).first_offset = (Current).last_offset = YYRHSLOC (Rhs, 0).last_offset; \
+        (Current).generate_point_and_click = YYRHSLOC (Rhs, 0).generate_point_and_click; \
     }
 
 #include "gabc-score-determination.h"
@@ -86,6 +89,7 @@
 static char *macros[10];
 /* other variables that we will have to use */
 static gregorio_character *current_character;
+static gregorio_character *suspended_character;
 static gregorio_character *first_text_character;
 static gregorio_character *first_translation_character;
 static gregorio_tr_centering translation_type;
@@ -104,6 +108,9 @@
 static bool started_first_word;
 static struct sha1_ctx digester;
 static gabc_style_bits styles;
+static bool generate_point_and_click;
+static bool clear_syllable_text;
+static bool has_protrusion;
 
 /* punctum_inclinatum_orientation maintains the running punctum inclinatum
  * orientation in order to decide if the glyph needs to be cut when a punctum
@@ -140,7 +147,7 @@
  * The function that will initialize the variables. 
  */
 
-static void initialize_variables(void)
+static void initialize_variables(bool point_and_click)
 {
     int i;
     /* build a brand new empty score */
@@ -153,6 +160,7 @@
     number_of_voices = 1;
     voice = 0; /* first (and only) voice */
     current_character = NULL;
+    suspended_character = NULL;
     first_translation_character = NULL;
     first_text_character = NULL;
     translation_type = TR_NORMAL;
@@ -168,6 +176,9 @@
     started_first_word = false;
     styles = 0;
     punctum_inclinatum_orientation = S_PUNCTUM_INCLINATUM_UNDETERMINED;
+    generate_point_and_click = point_and_click;
+    clear_syllable_text = false;
+    has_protrusion = false;
 }
 
 /*
@@ -192,7 +203,7 @@
 {
     int i;
 
-    gregorio_assert_only(check_infos_integrity(score), end_definitions,
+    gregorio_assert_only(gabc_check_infos_integrity(score), end_definitions,
             "can't determine valid infos on the score");
 
     elements = (gregorio_element **) gregorio_malloc(number_of_voices *
@@ -304,9 +315,161 @@
 }
 
 /*
- * Function to close a syllable and update the position. 
+ * 
+ * The two functions called when lex returns a style, we simply add it. All the 
+ * complex things will be done by the function after...
+ * 
  */
 
+static void add_style(unsigned char style)
+{
+    gregorio_begin_style(&current_character, style);
+}
+
+static void end_style(unsigned char style)
+{
+    gregorio_end_style(&current_character, style);
+}
+
+static __inline void save_text(void)
+{
+    if (has_protrusion) {
+        end_style(ST_PROTRUSION);
+    }
+    ready_characters();
+    first_text_character = current_character;
+}
+
+/* a function called when we see a [, basically, all characters are added to
+ * the translation pointer instead of the text pointer */
+static void start_translation(unsigned char asked_translation_type)
+{
+    suspended_character = current_character;
+    /* the middle letters of the translation have no sense */
+    /*center_is_determined = CENTER_FULLY_DETERMINED;*/
+    current_character = NULL;
+    translation_type = asked_translation_type;
+}
+
+static void end_translation(void)
+{
+    ready_characters();
+    first_translation_character = current_character;
+    current_character = suspended_character;
+}
+
+/*
+ * add_text is the function called when lex returns a char *. In
+ * this function we convert it into grewchar, and then we add the corresponding 
+ * gregorio_characters in the list of gregorio_characters. 
+ */
+
+static void add_text(char *mbcharacters)
+{
+    if (!current_character) {
+        /* insert open styles, leaving out ELISION on purpose */
+        if (styles & SB_I) {
+            add_style(ST_ITALIC);
+        }
+        if (styles & SB_B) {
+            add_style(ST_BOLD);
+        }
+        if (styles & SB_TT) {
+            add_style(ST_TT);
+        }
+        if (styles & SB_SC) {
+            add_style(ST_SMALL_CAPS);
+        }
+        if (styles & SB_UL) {
+            add_style(ST_UNDERLINED);
+        }
+        if (styles & SB_C) {
+            add_style(ST_COLORED);
+        }
+    }
+    if (current_character) {
+        current_character->next_character = gregorio_build_char_list_from_buf(
+                mbcharacters);
+        current_character->next_character->previous_character =
+                current_character;
+    } else {
+        current_character = gregorio_build_char_list_from_buf(mbcharacters);
+    }
+    while (current_character && current_character->next_character) {
+        current_character = current_character->next_character;
+    }
+    free(mbcharacters);
+}
+
+static void add_protrusion(char *factor)
+{
+    if (has_protrusion) {
+        gregorio_message("syllable already has protrusion; pr tag ignored",
+                "det_score", VERBOSITY_WARNING, 0);
+        free(factor);
+    } else {
+        if (center_is_determined == CENTER_HALF_DETERMINED) {
+            gregorio_message("closing open syllable center before protrusion",
+                    "det_score", VERBOSITY_WARNING, 0);
+            end_style(ST_FORCED_CENTER);
+            center_is_determined = CENTER_FULLY_DETERMINED;
+        }
+
+        add_style(ST_PROTRUSION_FACTOR);
+        add_text(factor);
+        end_style(ST_PROTRUSION_FACTOR);
+        add_style(ST_PROTRUSION);
+        has_protrusion = true;
+    }
+}
+
+static void add_auto_protrusion(char *protrusion)
+{
+    if (has_protrusion) {
+        add_text(protrusion);
+    } else {
+        add_style(ST_PROTRUSION_FACTOR);
+        add_style(ST_VERBATIM);
+        add_text(gregorio_strdup("\\GreProtrusionFactor{"));
+
+        switch (*protrusion) {
+        case ',':
+            add_text(gregorio_strdup("comma"));
+            break;
+        case ';':
+            add_text(gregorio_strdup("semicolon"));
+            break;
+        case ':':
+            add_text(gregorio_strdup("colon"));
+            break;
+        case '.':
+            add_text(gregorio_strdup("period"));
+            break;
+        default:
+            /* not reachable unless there's a programming error */
+            /* LCOV_EXCL_START */
+            gregorio_fail2(add_auto_protrusion,
+                    "unsupported protruding punctuation: %c", *protrusion);
+            break;
+            /* LCOV_EXCL_STOP */
+        }
+
+        add_text(gregorio_strdup("}"));
+        end_style(ST_VERBATIM);
+        end_style(ST_PROTRUSION_FACTOR);
+
+        add_style(ST_PROTRUSION);
+        add_text(protrusion);
+        end_style(ST_PROTRUSION);
+
+        has_protrusion = true;
+    }
+}
+
+/*
+ * Function to close a syllable and update the position.
+ */
+
 static void close_syllable(YYLTYPE *loc)
 {
     int i = 0;
@@ -320,10 +483,9 @@
                 switch (ch->cos.s.type) {
                 case ST_T_BEGIN:
                     ++i;
-                    if (i > 1) {
-                        gregorio_message(_("elisions may not be nested"),
-                                "close_syllable", VERBOSITY_ERROR, 0);
-                    }
+                    /* the parser precludes this from falling here */
+                    gregorio_assert_only(i <= 1, close_syllable,
+                            "elisions may not be nested");
                     break;
 
                 case ST_T_END:
@@ -362,7 +524,7 @@
     gregorio_add_syllable(&current_syllable, number_of_voices, elements,
             first_text_character, first_translation_character, position,
             abovelinestext, translation_type, no_linebreak_area, euouae, loc,
-            started_first_word);
+            started_first_word, clear_syllable_text);
     if (!score->first_syllable) {
         /* we rebuild the first syllable if we have to */
         score->first_syllable = current_syllable;
@@ -383,6 +545,7 @@
     }
     center_is_determined = CENTER_NOT_DETERMINED;
     current_character = NULL;
+    suspended_character = NULL;
     first_text_character = NULL;
     first_translation_character = NULL;
     translation_type = TR_NORMAL;
@@ -393,86 +556,10 @@
         elements[i] = NULL;
     }
     current_element = NULL;
+    clear_syllable_text = false;
+    has_protrusion = false;
 }
 
-/* a function called when we see a [, basically, all characters are added to
- * the translation pointer instead of the text pointer */
-static void start_translation(unsigned char asked_translation_type)
-{
-    ready_characters();
-    first_text_character = current_character;
-    /* the middle letters of the translation have no sense */
-    center_is_determined = CENTER_FULLY_DETERMINED;
-    current_character = NULL;
-    translation_type = asked_translation_type;
-}
-
-static void end_translation(void)
-{
-    ready_characters();
-    first_translation_character = current_character;
-}
-
-/*
- * 
- * The two functions called when lex returns a style, we simply add it. All the 
- * complex things will be done by the function after...
- * 
- */
-
-static void add_style(unsigned char style)
-{
-    gregorio_begin_style(&current_character, style);
-}
-
-static void end_style(unsigned char style)
-{
-    gregorio_end_style(&current_character, style);
-}
-
-/*
- * add_text is the function called when lex returns a char *. In
- * this function we convert it into grewchar, and then we add the corresponding 
- * gregorio_characters in the list of gregorio_characters. 
- */
-
-static void add_text(char *mbcharacters)
-{
-    if (!current_character) {
-        /* insert open styles, leaving out ELISION on purpose */
-        if (styles & SB_I) {
-            add_style(ST_ITALIC);
-        }
-        if (styles & SB_B) {
-            add_style(ST_BOLD);
-        }
-        if (styles & SB_TT) {
-            add_style(ST_TT);
-        }
-        if (styles & SB_SC) {
-            add_style(ST_SMALL_CAPS);
-        }
-        if (styles & SB_UL) {
-            add_style(ST_UNDERLINED);
-        }
-        if (styles & SB_C) {
-            add_style(ST_COLORED);
-        }
-    }
-    if (current_character) {
-        current_character->next_character = gregorio_build_char_list_from_buf(
-                mbcharacters);
-        current_character->next_character->previous_character =
-                current_character;
-    } else {
-        current_character = gregorio_build_char_list_from_buf(mbcharacters);
-    }
-    while (current_character && current_character->next_character) {
-        current_character = current_character->next_character;
-    }
-    free(mbcharacters);
-}
-
 void gabc_digest(const void *const buf, const size_t size)
 {
     sha1_process_bytes(buf, size, &digester);
@@ -484,7 +571,7 @@
  * aleady open. It returns a valid gregorio_score 
  */
 
-gregorio_score *gabc_read_score(FILE *f_in)
+gregorio_score *gabc_read_score(FILE *f_in, bool point_and_click)
 {
     /* compute the SHA-1 digest while parsing, for I/O efficiency */
     sha1_init_ctx(&digester);
@@ -495,21 +582,23 @@
     gabc_score_determination_in = f_in;
     gregorio_assert(f_in, gabc_read_score, "can't read stream from NULL",
             return NULL);
-    initialize_variables();
+    initialize_variables(point_and_click);
     /* the flex/bison main call, it will build the score (that we have
      * initialized) */
     gabc_score_determination_parse();
     if (!score->legacy_oriscus_orientation) {
-        determine_oriscus_orientation(score);
+        gabc_determine_oriscus_orientation(score);
     }
-    determine_punctum_inclinatum_orientation(score);
+    gabc_determine_punctum_inclinatum_orientation(score);
+    gabc_determine_ledger_lines(score);
     gregorio_fix_initial_keys(score, gregorio_default_clef);
     rebuild_score_characters();
-    fix_custos(score);
+    gabc_suppress_extra_custos_at_linebreak(score);
+    gabc_fix_custos_pitches(score);
     gabc_det_notes_finish();
     free_variables();
     /* then we check the validity and integrity of the score we have built. */
-    if (!check_score_integrity(score)) {
+    if (!gabc_check_score_integrity(score)) {
         gregorio_message(_("unable to determine a valid score from file"),
                 "gabc_read_score", VERBOSITY_ERROR, 0);
     }
@@ -554,6 +643,13 @@
         current_element->nabc_lines = nabc_state;
     }
 }
+
+static char *concatenate(char *first, char *const second) {
+    first = (char *)gregorio_realloc(first, strlen(first) + strlen(second) + 1);
+    strcat(first, second);
+    free(second);
+    return first;
+}
 %}
 
 %initial-action {
@@ -563,6 +659,7 @@
     @$.last_line = 1;
     @$.last_column = 0;
     @$.last_offset = 0;
+    @$.generate_point_and_click = generate_point_and_click;
 }
 
 %lex-param { gabc_style_bits *STYLE_BITS }
@@ -571,9 +668,8 @@
 %token LANGUAGE STAFF_LINES ORISCUS_ORIENTATION
 %token DEF_MACRO OTHER_HEADER
 %token ANNOTATION MODE MODE_MODIFIER MODE_DIFFERENTIA
-%token INITIAL_STYLE /* DEPRECATED for removal in 5.0 */
 %token END_OF_DEFINITIONS END_OF_FILE
-%token COLON SEMICOLON SPACE CHARACTERS NOTES HYPHEN ATTRIBUTE
+%token COLON SEMICOLON CHARACTERS NOTES HYPHEN ATTRIBUTE
 %token OPENING_BRACKET CLOSING_BRACKET CLOSING_BRACKET_WITH_SPACE
 %token I_BEGIN I_END
 %token TT_BEGIN TT_END
@@ -582,7 +678,7 @@
 %token B_BEGIN B_END
 %token SC_BEGIN SC_END
 %token SP_BEGIN SP_END
-%token VERB_BEGIN VERB VERB_END
+%token VERB_BEGIN VERB_END
 %token CENTER_BEGIN CENTER_END
 %token ELISION_BEGIN ELISION_END
 %token TRANSLATION_BEGIN TRANSLATION_END TRANSLATION_CENTER_END
@@ -590,7 +686,14 @@
 %token NLBA_B NLBA_E
 %token EUOUAE_B EUOUAE_E
 %token NABC_CUT NABC_LINES
+%token CLEAR
+%token PROTRUSION PROTRUSION_VALUE PROTRUSION_END PROTRUDING_PUNCTUATION
 
+%precedence HYPHEN PROTRUDING_PUNCTUATION
+%precedence TRANSLATION_BEGIN TRANSLATION_CENTER_END
+%precedence TRANSLATION_END
+%precedence OPENING_BRACKET
+
 %%
 
 score:
@@ -607,12 +710,20 @@
     | definitions definition
     ;
 
+attribute_value:
+    ATTRIBUTE {
+        $$.text = $1.text;
+    }
+    | attribute_value ATTRIBUTE {
+        $$.text = concatenate($1.text, $2.text);
+    }
+    ;
+
 attribute:
-    COLON ATTRIBUTE SEMICOLON {
+    COLON attribute_value SEMICOLON {
         $$.text = $2.text;
     }
-    |
-    COLON SEMICOLON {
+    | COLON SEMICOLON {
         $$.text = NULL;
     }
     ;
@@ -679,16 +790,6 @@
             score->nabc_lines=nabc_lines;
         }
     }
-    | INITIAL_STYLE attribute {
-        if ($2.text) {
-            /* DEPRECATED for removal in 5.0 */
-            gregorio_message("\"initial-style\" header is deprecated. Please "
-            "use \\gresetinitiallines in TeX instead.",
-            "gabc_score_determination_parse", VERBOSITY_DEPRECATION, 0);
-            score->initial_style = atoi($2.text);
-            free($2.text);
-        }
-    }
     | ANNOTATION attribute {
         if (score->annotation [MAX_ANNOTATIONS - 1]) {
             gregorio_messagef("det_score", VERBOSITY_WARNING, 0,
@@ -781,15 +882,6 @@
     | SP_BEGIN {
         add_style(ST_SPECIAL_CHAR);
     }
-    | ELISION_BEGIN {
-        add_style(ST_ELISION);
-    }
-    | CENTER_BEGIN {
-        if (!center_is_determined) {
-            add_style(ST_FORCED_CENTER);
-            center_is_determined=CENTER_HALF_DETERMINED;
-        }
-    }
     ;
 
 style_end:
@@ -817,13 +909,40 @@
     | SP_END {
         end_style(ST_SPECIAL_CHAR);
     }
-    | ELISION_END {
+    ;
+
+special_style_beginning:
+    ELISION_BEGIN {
+        add_style(ST_ELISION);
+    }
+    | CENTER_BEGIN {
+        if (center_is_determined) {
+            gregorio_message(
+                    "syllable already has center; ignoring additional center",
+                    "det_score", VERBOSITY_WARNING, 0);
+        } else if (has_protrusion) {
+            gregorio_message(
+                    "center not allowed after protrusion; ignored",
+                    "det_score", VERBOSITY_WARNING, 0);
+        } else {
+            add_style(ST_FORCED_CENTER);
+            center_is_determined = CENTER_HALF_DETERMINED;
+        }
+    }
+    ;
+
+special_style_end:
+    ELISION_END {
         end_style(ST_ELISION);
     }
     | CENTER_END {
-        if (center_is_determined==CENTER_HALF_DETERMINED) {
+        if (center_is_determined == CENTER_HALF_DETERMINED) {
             end_style(ST_FORCED_CENTER);
-            center_is_determined=CENTER_FULLY_DETERMINED;
+            center_is_determined = CENTER_FULLY_DETERMINED;
+        } else {
+            gregorio_message(
+                    "not within a syllable center",
+                    "det_score", VERBOSITY_WARNING, 0);
         }
     }
     ;
@@ -846,6 +965,15 @@
     }
     ;
 
+protrusion:
+    PROTRUSION PROTRUSION_VALUE PROTRUSION_END {
+        add_protrusion($2.text);
+    }
+    | PROTRUSION {
+        add_protrusion(gregorio_strdup("d")); /* d = default */
+    }
+    ;
+
 character:
     above_line_text
     | CHARACTERS {
@@ -853,24 +981,46 @@
     }
     | style_beginning
     | style_end
+    | special_style_beginning
+    | special_style_end
     | linebreak_area
     | euouae
-    ;
-
-text_hyphen:
-    HYPHEN {
-        add_text(gregorio_strdup("-"));
+    | CLEAR {
+        clear_syllable_text = true;
     }
-    | text_hyphen HYPHEN {
+    | protrusion
+    | HYPHEN {
         add_text(gregorio_strdup("-"));
     }
+    | PROTRUDING_PUNCTUATION {
+        add_text($1.text);
+    }
     ;
 
 text:
+    character
     | text character
-    | text text_hyphen character
     ;
 
+translation_character:
+    CHARACTERS {
+        add_text($1.text);
+    }
+    | style_beginning
+    | style_end
+    | HYPHEN {
+        add_text(gregorio_strdup("-"));
+    }
+    | PROTRUDING_PUNCTUATION {
+        add_text($1.text);
+    }
+    ;
+
+translation_text:
+    translation_character
+    | translation_text translation_character
+    ;
+
 translation_beginning:
     TRANSLATION_BEGIN {
         start_translation(TR_NORMAL);
@@ -878,11 +1028,15 @@
     ;
 
 translation:
-    translation_beginning text TRANSLATION_END {
+    translation_beginning TRANSLATION_END {
         end_translation();
     }
+    | translation_beginning translation_text TRANSLATION_END {
+        end_translation();
+    }
     | TRANSLATION_CENTER_END {
         start_translation(TR_WITH_CENTER_END);
+        end_translation();
     }
     ;
 
@@ -894,27 +1048,61 @@
 
 syllable_with_notes:
     text OPENING_BRACKET notes {
-        ready_characters();
-        first_text_character = current_character;
+        save_text();
         close_syllable(&@1);
     }
+    | HYPHEN OPENING_BRACKET notes {
+        add_style(ST_VERBATIM);
+        add_text(gregorio_strdup("\\GreForceHyphen"));
+        end_style(ST_VERBATIM);
+        save_text();
+        close_syllable(&@1);
+    }
     | text HYPHEN OPENING_BRACKET notes {
         add_style(ST_VERBATIM);
         add_text(gregorio_strdup("\\GreForceHyphen"));
         end_style(ST_VERBATIM);
-        ready_characters();
-        first_text_character = current_character;
+        save_text();
         close_syllable(&@1);
     }
+    | PROTRUDING_PUNCTUATION OPENING_BRACKET notes {
+        add_auto_protrusion($1.text);
+        save_text();
+        close_syllable(&@1);
+    }
+    | text PROTRUDING_PUNCTUATION OPENING_BRACKET notes {
+        add_auto_protrusion($2.text);
+        save_text();
+        close_syllable(&@1);
+    }
     | text translation OPENING_BRACKET notes {
+        save_text();
         close_syllable(&@1);
     }
+    | HYPHEN translation OPENING_BRACKET notes {
+        add_style(ST_VERBATIM);
+        add_text(gregorio_strdup("\\GreForceHyphen"));
+        end_style(ST_VERBATIM);
+        save_text();
+        close_syllable(&@1);
+    }
     | text HYPHEN translation OPENING_BRACKET notes {
         add_style(ST_VERBATIM);
         add_text(gregorio_strdup("\\GreForceHyphen"));
         end_style(ST_VERBATIM);
+        save_text();
         close_syllable(&@1);
     }
+    | PROTRUDING_PUNCTUATION translation OPENING_BRACKET notes {
+        add_auto_protrusion($1.text);
+        save_text();
+        close_syllable(&@1);
+    }
+    | text PROTRUDING_PUNCTUATION translation OPENING_BRACKET notes {
+        add_auto_protrusion($2.text);
+        save_text();
+        close_syllable(&@1);
+    }
     ;
 
 notes_without_word:

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-write.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-write.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-write.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This file provides functions for writing gabc from Gregorio structures.
  *
- * Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  * 
@@ -36,6 +36,14 @@
 
 #include "gabc.h"
 
+typedef enum {
+    GABC_NORMAL,
+    GABC_AT_PROTRUSION_FACTOR,
+    GABC_IN_PROTRUSION_FACTOR
+} gabc_write_state;
+
+static gabc_write_state write_state;
+
 static __inline char pitch_letter(const char height) {
     char result = height + 'a' - LOWEST_PITCH;
     if (result == 'o') {
@@ -102,11 +110,15 @@
     case ST_ELISION:
         fprintf(f, "<e>");
         break;
+    case ST_PROTRUSION_FACTOR:
+        write_state = GABC_AT_PROTRUSION_FACTOR;
+        break;
     case ST_INITIAL:
     case ST_CENTER:
     case ST_FIRST_WORD:
     case ST_FIRST_SYLLABLE:
     case ST_FIRST_SYLLABLE_INITIAL:
+    case ST_PROTRUSION:
         /* nothing should be emitted for these */
         break;
     default:
@@ -152,11 +164,17 @@
     case ST_ELISION:
         fprintf(f, "</e>");
         break;
+    case ST_PROTRUSION_FACTOR:
+        if (write_state == GABC_IN_PROTRUSION_FACTOR) {
+            fprintf(f, ">");
+        }
+        break;
     case ST_INITIAL:
     case ST_CENTER:
     case ST_FIRST_WORD:
     case ST_FIRST_SYLLABLE:
     case ST_FIRST_SYLLABLE_INITIAL:
+    case ST_PROTRUSION:
         /* nothing should be emitted for these */
         break;
     default:
@@ -191,9 +209,14 @@
  */
 static void gabc_write_verb(FILE *f, const grewchar *first_char)
 {
-    fprintf(f, "<v>");
-    gregorio_print_unistring(f, first_char);
-    fprintf(f, "</v>");
+    if (write_state == GABC_AT_PROTRUSION_FACTOR) {
+        /* this is an auto protrusion, so ignore it */
+        write_state = GABC_NORMAL;
+    } else {
+        fprintf(f, "<v>");
+        gregorio_print_unistring(f, first_char);
+        fprintf(f, "</v>");
+    }
 }
 
 /*
@@ -206,7 +229,17 @@
 
 static void gabc_print_char(FILE *f, const grewchar to_print)
 {
-    gregorio_print_unichar(f, to_print);
+    if (write_state == GABC_AT_PROTRUSION_FACTOR) {
+        write_state = GABC_IN_PROTRUSION_FACTOR;
+        if (to_print == 'd') {
+            fprintf(f, "<pr");
+        } else {
+            fprintf(f, "<pr:");
+            gregorio_print_unichar(f, to_print);
+        }
+    } else {
+        gregorio_print_unichar(f, to_print);
+    }
 }
 
 /*
@@ -442,11 +475,25 @@
 }
 
 static void write_note_heuristics(FILE *f, gregorio_note *note) {
-    if (note->explicit_high_ledger_line) {
-        fprintf(f, "[hl:%c]", note->supposed_high_ledger_line? '1' : '0');
+    switch (note->high_ledger_specificity) {
+    case LEDGER_EXPLICIT:
+        fprintf(f, "[hl:%c]", note->high_ledger_line? '1' : '0');
+        break;
+    case LEDGER_EXPLICITLY_DRAWN:
+        fprintf(f, "[oll:%c]", note->high_ledger_line? '1' : '0');
+        break;
+    default:
+        break;
     }
-    if (note->explicit_low_ledger_line) {
-        fprintf(f, "[ll:%c]", note->supposed_low_ledger_line? '1' : '0');
+    switch (note->low_ledger_specificity) {
+    case LEDGER_EXPLICIT:
+        fprintf(f, "[ll:%c]", note->low_ledger_line? '1' : '0');
+        break;
+    case LEDGER_EXPLICITLY_DRAWN:
+        fprintf(f, "[ull:%c]", note->low_ledger_line? '1' : '0');
+        break;
+    default:
+        break;
     }
 }
 
@@ -496,12 +543,6 @@
     case S_PUNCTUM_INCLINATUM_AUCTUS:
         fprintf(f, "%c", toupper((unsigned char)pitch_letter(note->u.note.pitch)));
         break;
-    case S_PUNCTUM_CAVUM_INCLINATUM:
-        fprintf(f, "%cr", toupper((unsigned char)pitch_letter(note->u.note.pitch)));
-        break;
-    case S_PUNCTUM_CAVUM_INCLINATUM_AUCTUS:
-        fprintf(f, "%cr<", toupper((unsigned char)pitch_letter(note->u.note.pitch)));
-        break;
     case S_FLAT:
         fprintf(f, "%cx", pitch_letter(note->u.note.pitch));
         break;
@@ -527,16 +568,6 @@
         fprintf(f, "%co", pitch_letter(note->u.note.pitch));
         /* Note: the DEMINUTUS is also in the liquescentia */
         break;
-    case S_ORISCUS_CAVUM_ASCENDENS:
-        fprintf(f, "%co1r", pitch_letter(note->u.note.pitch));
-        break;
-    case S_ORISCUS_CAVUM_DESCENDENS:
-        fprintf(f, "%co0r", pitch_letter(note->u.note.pitch));
-        break;
-    case S_ORISCUS_CAVUM_DEMINUTUS:
-        fprintf(f, "%cor", pitch_letter(note->u.note.pitch));
-        /* Note: the DEMINUTUS is also in the liquescentia */
-        break;
     case S_QUILISMA:
         if (is_quadratum) {
             fprintf(f, "%cW", pitch_letter(note->u.note.pitch));
@@ -547,15 +578,9 @@
     case S_LINEA:
         fprintf(f, "%c=", pitch_letter(note->u.note.pitch));
         break;
-    case S_PUNCTUM_CAVUM:
-        fprintf(f, "%cr", pitch_letter(note->u.note.pitch));
-        break;
     case S_LINEA_PUNCTUM:
         fprintf(f, "%cR", pitch_letter(note->u.note.pitch));
         break;
-    case S_LINEA_PUNCTUM_CAVUM:
-        fprintf(f, "%cr0", pitch_letter(note->u.note.pitch));
-        break;
     case S_ORISCUS_SCAPUS_ASCENDENS:
         fprintf(f, "%cO1", pitch_letter(note->u.note.pitch));
         break;
@@ -576,6 +601,9 @@
         break;
         /* LCOV_EXCL_STOP */
     }
+    if (note->u.note.is_cavum) {
+        fprintf(f, "r");
+    }
     switch (note->signs) {
     case _PUNCTUM_MORA:
         fprintf(f, ".%s", mora_vposition(note));
@@ -619,6 +647,15 @@
     case _SEMI_CIRCULUS_REVERSUS:
         fprintf(f, "r5");
         break;
+    case _MUSICA_FICTA_FLAT:
+        fprintf(f, "r6");
+        break;
+    case _MUSICA_FICTA_NATURAL:
+        fprintf(f, "r7");
+        break;
+    case _MUSICA_FICTA_SHARP:
+        fprintf(f, "r8");
+        break;
     case _NO_SIGN:
         /* if there's no sign, don't emit anything */
         break;
@@ -646,7 +683,7 @@
     }
     write_note_heuristics(f, note);
     if (note->texverb) {
-        fprintf(f, "[nv:%s]", note->texverb);
+        fprintf(f, "[nv:%s]", gregorio_texverb(note->texverb));
     }
 }
 
@@ -804,7 +841,7 @@
     switch (glyph->type) {
     case GRE_TEXVERB_GLYPH:
         if (glyph->texverb) {
-            fprintf(f, "[gv:%s]", glyph->texverb);
+            fprintf(f, "[gv:%s]", gregorio_texverb(glyph->texverb));
         }
         break;
     case GRE_SPACE:
@@ -910,12 +947,12 @@
         break;
     case GRE_TEXVERB_ELEMENT:
         if (element->texverb) {
-            fprintf(f, "[ev:%s]", element->texverb);
+            fprintf(f, "[ev:%s]", gregorio_texverb(element->texverb));
         }
         break;
     case GRE_ALT:
         if (element->texverb) {
-            fprintf(f, "[alt:%s]", element->texverb);
+            fprintf(f, "[alt:%s]", gregorio_texverb(element->texverb));
         }
         break;
     case GRE_SPACE:
@@ -948,6 +985,9 @@
             fprintf(f, "z0");
         }
         break;
+    case GRE_SUPPRESS_CUSTOS:
+        fprintf(f, "[nocustos]");
+        break;
     case GRE_NLBA:
         switch (element->u.misc.unpitched.info.nlba) {
         case NLBA_BEGINNING:
@@ -1018,6 +1058,7 @@
     bool linebreak_or_bar_in_element;
     gregorio_assert(syllable, gabc_write_gregorio_syllable,
             "call with NULL argument", return);
+    write_state = GABC_NORMAL;
     if (syllable->no_linebreak_area == NLBA_BEGINNING) {
         fprintf(f, "<nlba>");
     }
@@ -1024,6 +1065,9 @@
     if (syllable->euouae == EUOUAE_BEGINNING) {
         fprintf(f, "<eu>");
     }
+    if (syllable->clear) {
+        fprintf(f, "<clear>");
+    }
     if (syllable->text) {
         /* we call the magic function (defined in struct_utils.c), that will
          * write our text. */

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This header prototypes gabc-format handling data structures and entry points.
  *
- * Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  * 

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/gregorio-utils.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/gregorio-utils.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/gregorio-utils.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This file implements the command line interface of Gregorio.
  *
- * Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *
@@ -21,7 +21,7 @@
  */
 
 static const char *copyright =
-"Copyright (C) 2006-2016 Gregorio project authors (see CONTRIBUTORS.md)";
+"Copyright (C) 2006-2017 Gregorio project authors (see CONTRIBUTORS.md)";
 
 #include "config.h"
 #include <stdio.h>
@@ -661,7 +661,7 @@
 
     switch (input_format) {
     case GABC:
-        score = gabc_read_score(input_file);
+        score = gabc_read_score(input_file, point_and_click);
         break;
     default:
         /* not reachable unless there's a programming error */

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex-position.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex-position.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex-position.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This file contains the logic for positioning signs on neumes.
  *
- * Copyright (C) 2008-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2008-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  * 
@@ -377,7 +377,7 @@
 
     switch (type) {
     case T_PES:
-    case T_PESQUILISMA:
+    case T_QUILISMA_PES:
         /*
          * in the case of a pes, we put the episema just under the bottom note 
          */
@@ -408,9 +408,9 @@
             v_episema = below_if_auctus(glyph);
         }
         break;
-    case T_PESQUADRATUM:
-    case T_PESQUASSUS:
-    case T_PESQUILISMAQUADRATUM:
+    case T_PES_QUADRATUM:
+    case T_PES_QUASSUS:
+    case T_QUILISMA_PES_QUADRATUM:
         if (i == 1) {
             note->gtex_offset_case = first_note_case(note, glyph);
             h_episema = above_if_h_episema(note->next);
@@ -911,8 +911,6 @@
         case S_PUNCTUM_INCLINATUM_AUCTUS:
         case S_PUNCTUM_INCLINATUM_ASCENDENS:
         case S_PUNCTUM_INCLINATUM_DESCENDENS:
-        case S_PUNCTUM_CAVUM_INCLINATUM_AUCTUS:
-        case S_PUNCTUM_CAVUM_INCLINATUM:
             note->gtex_offset_case = FinalInclinatum;
             break;
         case S_STROPHA:
@@ -928,11 +926,6 @@
             note->gtex_offset_case = fused_single_note_case(glyph, FinalOriscus,
                     LeadingOriscus);
             break;
-        case S_ORISCUS_CAVUM_ASCENDENS:
-        case S_ORISCUS_CAVUM_DESCENDENS:
-        case S_ORISCUS_CAVUM_DEMINUTUS:
-            note->gtex_offset_case = FinalOriscus;
-            break;
         case S_VIRGA:
             note->gtex_offset_case = InitialVirga;
             break;
@@ -944,7 +937,6 @@
             }
             break;
         case S_LINEA_PUNCTUM:
-        case S_LINEA_PUNCTUM_CAVUM:
             note->gtex_offset_case = FinalLineaPunctum;
             break;
         case S_LINEA:
@@ -1168,17 +1160,17 @@
             adj->pitch_extremum = h->height;
         }
     }
-    if (!note->explicit_high_ledger_line && !note->supposed_high_ledger_line) {
-        note->supposed_high_ledger_line = high_ledger_line;
+    if (!note->high_ledger_specificity && !note->high_ledger_line) {
+        note->high_ledger_line = high_ledger_line;
     }
-    if (!note->explicit_low_ledger_line && !note->supposed_low_ledger_line) {
-        note->supposed_low_ledger_line = low_ledger_line;
+    if (!note->low_ledger_specificity && !note->low_ledger_line) {
+        note->low_ledger_line = low_ledger_line;
     }
 }
 
 static __inline void next_has_ledger_line(
         const height_computation *const h, bool *high_ledger_line,
-        bool *low_ledger_line, const gregorio_score *const score)
+        bool *low_ledger_line)
 {
     const gregorio_element *element = h->last_connected_element;
     const gregorio_glyph *glyph = h->last_connected_glyph;
@@ -1205,10 +1197,8 @@
                 note = glyph->u.notes.first_note;
             }
 
-            *high_ledger_line = *high_ledger_line
-                    || has_high_ledger_line(note->u.note.pitch, false, score);
-            *low_ledger_line = *low_ledger_line
-                    || has_low_ledger_line(note->u.note.pitch, false);
+            *high_ledger_line = *high_ledger_line || note->high_ledger_line;
+            *low_ledger_line = *low_ledger_line || note->low_ledger_line;
 
             if (keep_going) {
                 keep_going = false;
@@ -1224,7 +1214,7 @@
 
 static __inline void previous_has_ledger_line(
         const height_computation *const h, bool *high_ledger_line,
-        bool *low_ledger_line, const gregorio_score *const score)
+        bool *low_ledger_line)
 {
     const gregorio_element *element = h->start_element;
     const gregorio_glyph *glyph = h->start_glyph;
@@ -1253,10 +1243,8 @@
                 } while (glyph->type != GRE_GLYPH);
                 note = gregorio_glyph_last_note(glyph);
             }
-            *high_ledger_line = *high_ledger_line
-                    || has_high_ledger_line(note->u.note.pitch, false, score);
-            *low_ledger_line = *low_ledger_line
-                    || has_low_ledger_line(note->u.note.pitch, false);
+            *high_ledger_line = *high_ledger_line || note->high_ledger_line;
+            *low_ledger_line = *low_ledger_line || note->low_ledger_line;
 
             if (keep_going) {
                 keep_going = false;
@@ -1284,8 +1272,8 @@
     bool low_ledger_line = has_low_ledger_line(h->height, true)
             || has_low_ledger_line(h->height - h->vpos, false);
 
-    next_has_ledger_line(h, &high_ledger_line, &low_ledger_line, score);
-    previous_has_ledger_line(h, &high_ledger_line, &low_ledger_line, score);
+    next_has_ledger_line(h, &high_ledger_line, &low_ledger_line);
+    previous_has_ledger_line(h, &high_ledger_line, &low_ledger_line);
 
     for ( ; element; element = element->next) {
         if (element->type == GRE_ELEMENT) {
@@ -1328,11 +1316,17 @@
     return size == H_NORMAL || size == H_SMALL_RIGHT;
 }
 
-static __inline bool is_connectable_interglyph_ambitus(
+static __inline bool is_connectable_interglyph_ambitus(const signed char first,
+        const signed char second)
+{
+    return abs(first - second) < 3;
+}
+
+static __inline bool is_connectable_interglyph_notes(
         const gregorio_note *const first, const gregorio_note *const second)
 {
-    return first && second
-            && abs(first->u.note.pitch - second->u.note.pitch) < 3;
+    return first && second && is_connectable_interglyph_ambitus(
+            first->u.note.pitch, second->u.note.pitch);
 }
 
 static __inline bool has_space_to_left(const gregorio_note *const note) {
@@ -1341,7 +1335,7 @@
     case S_PUNCTUM_INCLINATUM_DESCENDENS:
     case S_PUNCTUM_INCLINATUM_DEMINUTUS:
     case S_PUNCTUM_INCLINATUM_AUCTUS:
-        return !is_connectable_interglyph_ambitus(note->previous, note);
+        return !is_connectable_interglyph_notes(note->previous, note);
 
     default:
         return !note->previous;
@@ -1430,7 +1424,6 @@
         const gregorio_glyph *const glyph, gregorio_note *const note,
         const int i, const gtex_type type, const gregorio_score *const score)
 {
-    signed char next_height;
     grehepisema_size size;
 
     if (h->is_applicable(note)) {
@@ -1438,11 +1431,11 @@
             size = h->get_size(note);
 
             if (h->active) {
+                const signed char next_height = compute_h_episema_height(
+                        glyph, note, h->vpos);
                 if (h->connected && is_connected_left(size)
                         && (i != 1 || is_connectable_interglyph_ambitus(
-                                note, h->last_connected_note))) {
-                    next_height = compute_h_episema_height(glyph, note,
-                            h->vpos);
+                                next_height, h->height))) {
                     if (h->is_better_height(next_height, h->height)) {
                         h->height = next_height;
                     }
@@ -1555,10 +1548,6 @@
     switch (first_note->u.note.shape) {
     case S_QUILISMA:
     case S_QUILISMA_QUADRATUM:
-    case S_PUNCTUM_CAVUM:
-    case S_ORISCUS_CAVUM_ASCENDENS:
-    case S_ORISCUS_CAVUM_DESCENDENS:
-    case S_ORISCUS_CAVUM_DEMINUTUS:
     case S_FLAT:
     case S_SHARP:
     case S_NATURAL:
@@ -1587,22 +1576,6 @@
     gregorio_assert(prev_note->type == GRE_NOTE, compute_fused_shift,
             "previous note wasn't a note", return 0);
 
-    switch (prev_note->u.note.shape) {
-    case S_PUNCTUM_CAVUM:
-    case S_ORISCUS_CAVUM_ASCENDENS:
-    case S_ORISCUS_CAVUM_DESCENDENS:
-    case S_ORISCUS_CAVUM_DEMINUTUS:
-    case S_FLAT:
-    case S_SHARP:
-    case S_NATURAL:
-        /* these don't fuse to anything */
-        return 0;
-
-    default:
-        /* anything else is potentially fusible */
-        break;
-    }
-
     shift = first_note->u.note.pitch - prev_note->u.note.pitch;
     gregorio_assert(shift >= -MAX_AMBITUS && shift <= MAX_AMBITUS,
             compute_fused_shift, "ambitus too large to fuse", return 0);
@@ -1644,70 +1617,6 @@
     return shift;
 }
 
-static __inline void guess_ledger_lines(const gregorio_element *element,
-        const gregorio_score *const score)
-{
-    bool high_ledger_line = false;
-    bool low_ledger_line = false;
-    gregorio_note *prev = NULL;
-
-    for (; element; element = element->next) {
-        if (element->type == GRE_ELEMENT) {
-            gregorio_glyph *glyph;
-            for (glyph = element->u.first_glyph; glyph;
-                    glyph = glyph->next) {
-                if (glyph->type == GRE_GLYPH) {
-                    gregorio_note *note;
-                    for (note = glyph->u.notes.first_note; note;
-                            note = note->next) {
-                        if (note->type == GRE_NOTE) {
-                            if (high_ledger_line
-                                    && !note->explicit_high_ledger_line
-                                    && !note->supposed_high_ledger_line) {
-                                note->supposed_high_ledger_line = true;
-                            }
-                            if (low_ledger_line
-                                    && !note->explicit_low_ledger_line
-                                    && !note->supposed_low_ledger_line) {
-                                note->supposed_low_ledger_line = true;
-                            }
-                            high_ledger_line = has_high_ledger_line(
-                                    note->u.note.pitch, false, score);
-                            low_ledger_line = has_low_ledger_line(
-                                    note->u.note.pitch, false);
-                            if (high_ledger_line) {
-                                if (!note->explicit_high_ledger_line
-                                        && !note->supposed_high_ledger_line) {
-                                    note->supposed_high_ledger_line = true;
-                                }
-                                if (prev && !prev->explicit_high_ledger_line
-                                        && !prev->supposed_high_ledger_line) {
-                                    prev->supposed_high_ledger_line = true;
-                                }
-                            }
-                            if (low_ledger_line) {
-                                if (!note->explicit_low_ledger_line
-                                        && !note->supposed_low_ledger_line) {
-                                    note->supposed_low_ledger_line = true;
-                                }
-                                if (prev && !prev->explicit_low_ledger_line
-                                        && !prev->supposed_low_ledger_line) {
-                                    prev->supposed_low_ledger_line = true;
-                                }
-                            }
-                            prev = note;
-                        }
-                    }
-                }
-            }
-            /* this heuristic ends eith the element */
-            high_ledger_line = false;
-            low_ledger_line = false;
-            prev = NULL;
-        }
-    }
-}
-
 void gregoriotex_compute_positioning(
         const gregorio_element *const param_element,
         const gregorio_score *const score)
@@ -1759,8 +1668,6 @@
     gtex_type type;
     const gregorio_element *element;
 
-    guess_ledger_lines(param_element, score);
-
     for (element = param_element; element; element = element->next) {
         if (element->type == GRE_ELEMENT) {
             gregorio_glyph *glyph;

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex-write.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex-write.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex-write.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This file contains functions for writing GregorioTeX from Gregorio structures.
  *
- * Copyright (C) 2008-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2008-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *
@@ -60,6 +60,8 @@
 
     /* indicates if there is "above lines text" on the line */
     bool abovelinestext;
+
+    bool suppressed_custos;
 } gregoriotex_status;
 
 #define UNDETERMINED_HEIGHT -127
@@ -73,7 +75,6 @@
 SHAPE(Ancus);
 SHAPE(AncusLongqueue);
 SHAPE(AscendensOriscus);
-SHAPE(AscendensOriscusCavum);
 SHAPE(AscendensOriscusLineBL);
 SHAPE(AscendensOriscusLineTL);
 SHAPE(AscendensOriscusScapus);
@@ -81,7 +82,6 @@
 SHAPE(AscendensOriscusScapusOpenqueue);
 SHAPE(AscendensPunctumInclinatum);
 SHAPE(DescendensOriscus);
-SHAPE(DescendensOriscusCavum);
 SHAPE(DescendensOriscusLineBL);
 SHAPE(DescendensOriscusLineTL);
 SHAPE(DescendensOriscusScapus);
@@ -103,11 +103,11 @@
 SHAPE(FlexusOriscusScapusOpenqueue);
 SHAPE(Linea);
 SHAPE(LineaPunctum);
-SHAPE(LineaPunctumCavum);
 SHAPE(Natural);
-SHAPE(OriscusCavumDeminutus);
 SHAPE(OriscusDeminutus);
 SHAPE(Pes);
+SHAPE(PesAscendensOriscus);
+SHAPE(PesDescendensOriscus);
 SHAPE(PesQuadratum);
 SHAPE(PesQuadratumLongqueue);
 SHAPE(PesQuadratumOpenqueue);
@@ -117,10 +117,6 @@
 SHAPE(PesQuassusInusitatusOpenqueue);
 SHAPE(PesQuassusLongqueue);
 SHAPE(PesQuassusOpenqueue);
-SHAPE(PesQuilisma);
-SHAPE(PesQuilismaQuadratum);
-SHAPE(PesQuilismaQuadratumLongqueue);
-SHAPE(PesQuilismaQuadratumOpenqueue);
 SHAPE(Porrectus);
 SHAPE(PorrectusFlexus);
 SHAPE(PorrectusFlexusLongqueue);
@@ -129,9 +125,6 @@
 SHAPE(PorrectusNobar);
 SHAPE(Punctum);
 SHAPE(PunctumAscendens);
-SHAPE(PunctumCavum);
-SHAPE(PunctumCavumInclinatum);
-SHAPE(PunctumCavumInclinatumAuctus);
 SHAPE(PunctumDeminutus);
 SHAPE(PunctumDescendens);
 SHAPE(PunctumInclinatumAuctus);
@@ -139,6 +132,10 @@
 SHAPE(PunctumLineBL);
 SHAPE(PunctumLineTL);
 SHAPE(Quilisma);
+SHAPE(QuilismaPes);
+SHAPE(QuilismaPesQuadratum);
+SHAPE(QuilismaPesQuadratumLongqueue);
+SHAPE(QuilismaPesQuadratumOpenqueue);
 SHAPE(Salicus);
 SHAPE(SalicusFlexus);
 SHAPE(SalicusLongqueue);
@@ -165,7 +162,6 @@
 SHAPE(VirgaReversaOpenqueue);
 SHAPE(VirgaReversaOpenqueueAscendens);
 SHAPE(VirgaReversaOpenqueueDescendens);
-SHAPE(VirgaStrata);
 
 #define LIQ(NAME) static const char *const LIQ_##NAME = #NAME
 LIQ(Deminutus);
@@ -214,10 +210,10 @@
     case 1:
         return Q_ON_BOTTOM_LINE;
     case 2:
-        return queue_note->supposed_low_ledger_line?
+        return queue_note->low_ledger_line?
                 Q_ON_SPACE_ABOVE_BOTTOM_LINE : Q_ON_SPACE_BELOW_BOTTOM_LINE;
     case 3:
-        return queue_note->supposed_low_ledger_line?
+        return queue_note->low_ledger_line?
                 Q_ON_LINE_ABOVE_BOTTOM_LINE : Q_ON_BOTTOM_LINE;
     case 5:
     case 7:
@@ -578,10 +574,21 @@
     return compute_glyph_name(glyph, name, LG_NONE, true);
 }
 
+static __inline char *code_point(const char *const shape, const bool is_cavum,
+        char *const buf, const size_t bufsize)
+{
+    if (is_cavum) {
+        gregorio_snprintf(buf, bufsize, "\\GreCavum{%s}", shape);
+    } else {
+        gregorio_snprintf(buf, bufsize, "\\GreCP%s", shape);
+    }
+    return buf;
+}
+
 static const char *determine_note_glyph_name(const gregorio_note *const note,
         const gregorio_glyph *glyph, gtex_alignment *type)
 {
-    static char buf[128];
+    static char buf[128], cpbuf[96];
     const char *name = "";
 
     gregorio_assert(note, determine_note_glyph_name, "called with NULL pointer",
@@ -607,14 +614,10 @@
         return SHAPE_PunctumDescendens;
     case S_PUNCTUM_DEMINUTUS:
         return SHAPE_PunctumDeminutus;
-    case S_PUNCTUM_CAVUM:
-        return SHAPE_PunctumCavum;
     case S_LINEA:
         return SHAPE_Linea;
     case S_LINEA_PUNCTUM:
         return SHAPE_LineaPunctum;
-    case S_LINEA_PUNCTUM_CAVUM:
-        return SHAPE_LineaPunctumCavum;
     case S_VIRGA:
         switch (queuetype_of(note)) {
         case Q_ON_SPACE_ABOVE_BOTTOM_LINE:
@@ -643,7 +646,8 @@
             if (note->u.note.pitch - LOWEST_PITCH == 3) {
                 /* if we're on the 'd' line, the queue could be long or short */
                 gregorio_snprintf(buf, sizeof buf,
-                        "VirgaReversaAscendensOnDLine{\\GreCP%s}", name);
+                        "VirgaReversaAscendensOnDLine{%s}", code_point(name,
+                            glyph->u.notes.is_cavum, cpbuf, sizeof cpbuf));
                 return buf;
             }
             return name;
@@ -698,21 +702,6 @@
         case Q_ON_LINE_ABOVE_BOTTOM_LINE:
             return SHAPE_StrophaAuctaLongtail;
         } /* all cases return, so this line is not hit; LCOV_EXCL_LINE */
-    case S_PUNCTUM_CAVUM_INCLINATUM:
-        *type = AT_PUNCTUM_INCLINATUM;
-        return SHAPE_PunctumCavumInclinatum;
-    case S_PUNCTUM_CAVUM_INCLINATUM_AUCTUS:
-        *type = AT_PUNCTUM_INCLINATUM;
-        return SHAPE_PunctumCavumInclinatumAuctus;
-    case S_ORISCUS_CAVUM_ASCENDENS:
-        *type = AT_ORISCUS;
-        return SHAPE_AscendensOriscusCavum;
-    case S_ORISCUS_CAVUM_DESCENDENS:
-        *type = AT_ORISCUS;
-        return SHAPE_DescendensOriscusCavum;
-    case S_ORISCUS_CAVUM_DEMINUTUS:
-        *type = AT_ORISCUS;
-        return SHAPE_OriscusCavumDeminutus;
     case S_FLAT:
         return SHAPE_Flat;
     case S_SHARP:
@@ -883,11 +872,11 @@
              * look like pes quadratum. */
             if (glyph->u.notes.liquescentia
                     & (L_AUCTUS_ASCENDENS | L_AUCTUS_DESCENDENS)) {
-                *gtype = T_PESQUILISMAQUADRATUM;
-                shape = SHAPE_PesQuilismaQuadratum;
+                *gtype = T_QUILISMA_PES_QUADRATUM;
+                shape = SHAPE_QuilismaPesQuadratum;
             } else {
-                *gtype = T_PESQUILISMA;
-                shape = SHAPE_PesQuilisma;
+                *gtype = T_QUILISMA_PES;
+                shape = SHAPE_QuilismaPes;
             }
             ltype = LG_NO_INITIO;
             break;
@@ -894,7 +883,7 @@
         case S_ORISCUS_ASCENDENS:
         case S_ORISCUS_SCAPUS_ASCENDENS:
             *type = AT_ORISCUS;
-            *gtype = T_PESQUASSUS;
+            *gtype = T_PES_QUASSUS;
             shape = quadratum_shape(glyph, SHAPE_PesQuassus,
                     SHAPE_PesQuassusLongqueue, SHAPE_PesQuassusOpenqueue);
             ltype = LG_NO_INITIO;
@@ -902,7 +891,7 @@
         case S_ORISCUS_DESCENDENS:
         case S_ORISCUS_SCAPUS_DESCENDENS:
             *type = AT_ORISCUS;
-            *gtype = T_PESQUASSUS;
+            *gtype = T_PES_QUASSUS;
             shape = quadratum_shape(glyph, SHAPE_PesQuassusInusitatus,
                     SHAPE_PesQuassusInusitatusLongqueue,
                     SHAPE_PesQuassusInusitatusOpenqueue);
@@ -912,7 +901,7 @@
             *type = AT_ONE_NOTE;
             if (glyph->u.notes.liquescentia
                     & (L_AUCTUS_ASCENDENS | L_AUCTUS_DESCENDENS)) {
-                *gtype = T_PESQUADRATUM;
+                *gtype = T_PES_QUADRATUM;
                 shape = SHAPE_PesQuadratum;
             } else {
                 *gtype = T_PES;
@@ -926,15 +915,15 @@
         switch (glyph->u.notes.first_note->u.note.shape) {
         case S_QUILISMA:
             *type = AT_QUILISMA;
-            *gtype = T_PESQUILISMAQUADRATUM;
-            shape = quadratum_shape(glyph, SHAPE_PesQuilismaQuadratum,
-                   SHAPE_PesQuilismaQuadratumLongqueue,
-                   SHAPE_PesQuilismaQuadratumOpenqueue);
+            *gtype = T_QUILISMA_PES_QUADRATUM;
+            shape = quadratum_shape(glyph, SHAPE_QuilismaPesQuadratum,
+                   SHAPE_QuilismaPesQuadratumLongqueue,
+                   SHAPE_QuilismaPesQuadratumOpenqueue);
             ltype = LG_NO_INITIO;
             break;
         default:
             *type = AT_ONE_NOTE;
-            *gtype = T_PESQUADRATUM;
+            *gtype = T_PES_QUADRATUM;
             shape = quadratum_shape(glyph, SHAPE_PesQuadratum,
                    SHAPE_PesQuadratumLongqueue, SHAPE_PesQuadratumOpenqueue);
             ltype = LG_ALL;
@@ -941,12 +930,18 @@
             break;
         }
         break;
-    case G_VIRGA_STRATA:
+    case G_PES_ASCENDENS_ORISCUS:
         *type = AT_ONE_NOTE;
-        *gtype = T_VIRGA_STRATA;
-        shape = SHAPE_VirgaStrata;
+        *gtype = T_PES_ORISCUS;
+        shape = SHAPE_PesAscendensOriscus;
         ltype = LG_ALL;
         break;
+    case G_PES_DESCENDENS_ORISCUS:
+        *type = AT_ONE_NOTE;
+        *gtype = T_PES_ORISCUS;
+        shape = SHAPE_PesDescendensOriscus;
+        ltype = LG_ALL;
+        break;
     case G_FLEXA:
         ambitus = first_pitch_of(glyph) - second_pitch_of(glyph);
         if (glyph->u.notes.liquescentia & L_DEMINUTUS) {
@@ -1224,6 +1219,12 @@
     case ST_FIRST_SYLLABLE_INITIAL:
         fprintf(f, "\\GreFirstSyllableInitial{");
         break;
+    case ST_PROTRUSION_FACTOR:
+        fprintf(f, "\\GreProtrusion{");
+        break;
+    case ST_PROTRUSION:
+        fprintf(f, "{");
+        break;
     default:
         break;
     }
@@ -1305,12 +1306,17 @@
             /* these characters have special meaning to TeX */
             fprintf(f, "\\string\\%03d", *text);
             break;
+        /* There is currently no way to get a carriage return or a newline into
+         * an <sp>, but we'll leave this code here, but #if'd out, in case we
+         * need this function in a different context */
+#if 0
         case L'\n':
             fprintf(f, "\\string\\n");
             break;
         case L'\r':
-            /* ignore */
+            / * ignore * /
             break;
+#endif
         default:
             gregorio_print_unichar(f, *text);
             break;
@@ -1772,12 +1778,12 @@
 
 static __inline char *suppose_high_ledger_line(const gregorio_note *const note)
 {
-    return note->supposed_high_ledger_line? "\\GreSupposeHighLedgerLine" : "";
+    return note->high_ledger_line? "\\GreSupposeHighLedgerLine" : "";
 }
 
 static __inline char *suppose_low_ledger_line(const gregorio_note *const note)
 {
-    return note->supposed_low_ledger_line? "\\GreSupposeLowLedgerLine" : "";
+    return note->low_ledger_line? "\\GreSupposeLowLedgerLine" : "";
 }
 
 /*
@@ -2049,7 +2055,6 @@
         }
         break;
     case S_PUNCTUM_INCLINATUM_DESCENDENS:
-    case S_PUNCTUM_CAVUM_INCLINATUM:
         if (note->previous) {
             /* means that it is the first note of the puncta inclinata
              * sequence */
@@ -2111,7 +2116,6 @@
         } /* LCOV_EXCL_LINE */
         break;
     case S_PUNCTUM_INCLINATUM_AUCTUS:
-    case S_PUNCTUM_CAVUM_INCLINATUM_AUCTUS:
         if (note->previous) {
             /* means that it is not the first note of the puncta inclinata
              * sequence */
@@ -2413,6 +2417,21 @@
                 pitch_value(current_note->u.note.pitch),
                 current_note->gtex_offset_case);
         break;
+    case _MUSICA_FICTA_FLAT:
+        fprintf(f, "\\GreMusicaFictaFlat{%d}{\\GreOCase%s}%%\n",
+                pitch_value(current_note->u.note.pitch),
+                current_note->gtex_offset_case);
+        break;
+    case _MUSICA_FICTA_NATURAL:
+        fprintf(f, "\\GreMusicaFictaNatural{%d}{\\GreOCase%s}%%\n",
+                pitch_value(current_note->u.note.pitch),
+                current_note->gtex_offset_case);
+        break;
+    case _MUSICA_FICTA_SHARP:
+        fprintf(f, "\\GreMusicaFictaSharp{%d}{\\GreOCase%s}%%\n",
+                pitch_value(current_note->u.note.pitch),
+                current_note->gtex_offset_case);
+        break;
         /* the cases of the bar signs are dealt in another function
          * (write_bar) */
     default:
@@ -2440,14 +2459,18 @@
 }
 
 static const char *next_custos(const signed char next_note_pitch,
-        const gregorio_shape next_note_alteration)
+        const gregorio_shape next_note_alteration,
+        gregoriotex_status *const status)
 {
-    static char buf[30];
+    static char buf[50];
 
-    gregorio_snprintf(buf, sizeof buf, "\\GreNextCustos{%d}{%s}",
+    gregorio_snprintf(buf, sizeof buf, "%s\\GreNextCustos{%d}{%s}",
+            status->suppressed_custos? "\\GreResetEolCustos" : "",
             pitch_value(next_note_pitch),
             alteration_name(next_note_alteration));
 
+    status->suppressed_custos = false;
+
     return buf;
 }
 
@@ -2457,11 +2480,13 @@
 
 static void write_note(FILE *f, gregorio_note *note,
         const gregorio_glyph *glyph, const char next_note_pitch,
-        const gregorio_shape next_note_alteration)
+        const gregorio_shape next_note_alteration,
+        gregoriotex_status *const status)
 {
     unsigned int initial_shape = note->u.note.shape;
     const char *shape;
     int space_case;
+    static char cpbuf[96];
     /* type in the sense of GregorioTeX alignment type */
     gtex_alignment type = AT_ONE_NOTE;
     gregorio_assert(note, write_note, "called with NULL pointer",
@@ -2498,45 +2523,6 @@
     }
 
     switch (note->u.note.shape) {
-    case S_PUNCTUM_CAVUM:
-        fprintf(f, "\\GrePunctumCavum{%d}{%s}{%d}",
-                pitch_value(note->u.note.pitch),
-                next_custos(next_note_pitch, next_note_alteration), type);
-        break;
-    case S_PUNCTUM_CAVUM_INCLINATUM:
-        fprintf(f, "\\GrePunctumCavumInclinatum{%d}{%s}{%d}",
-                pitch_value(note->u.note.pitch),
-                next_custos(next_note_pitch, next_note_alteration), type);
-        break;
-    case S_PUNCTUM_CAVUM_INCLINATUM_AUCTUS:
-        fprintf(f, "\\GrePunctumCavumInclinatumAuctus{%d}{%s}{%d}",
-                pitch_value(note->u.note.pitch),
-                next_custos(next_note_pitch, next_note_alteration), type);
-        break;
-    case S_ORISCUS_CAVUM_ASCENDENS:
-        fprintf(f, "\\GreAscendensOriscusCavum{%d}{%s}{%d}",
-                pitch_value(note->u.note.pitch),
-                next_custos(next_note_pitch, next_note_alteration), type);
-        break;
-    case S_ORISCUS_CAVUM_DESCENDENS:
-        fprintf(f, "\\GreDescendensOriscusCavum{%d}{%s}{%d}",
-                pitch_value(note->u.note.pitch),
-                next_custos(next_note_pitch, next_note_alteration), type);
-        break;
-    case S_ORISCUS_CAVUM_DEMINUTUS:
-        fprintf(f, "\\GreOriscusCavumDeminutus{%d}{%s}{%d}",
-                pitch_value(note->u.note.pitch),
-                next_custos(next_note_pitch, next_note_alteration), type);
-        break;
-    case S_LINEA_PUNCTUM_CAVUM:
-        fprintf(f, "\\GreLineaPunctumCavum{%d}{%s}{%d}",
-                pitch_value(note->u.note.pitch),
-                next_custos(next_note_pitch, next_note_alteration), type);
-        break;
-    case S_LINEA:
-        fprintf(f, "\\GreLinea{%d}{%s}{%d}", pitch_value(note->u.note.pitch),
-                next_custos(next_note_pitch, next_note_alteration), type);
-        break;
     case S_FLAT:
         fprintf(f, "\\GreFlat{%d}{0}", pitch_value(note->u.note.pitch));
         break;
@@ -2547,9 +2533,11 @@
         fprintf(f, "\\GreSharp{%d}{0}", pitch_value(note->u.note.pitch));
         break;
     default:
-        fprintf(f, "\\GreGlyph{\\GreCP%s}{%d}{%s}{%d}", shape,
+        fprintf(f, "\\GreGlyph{%s}{%d}{%s}{%d}",
+                code_point(shape, glyph->u.notes.is_cavum, cpbuf, sizeof cpbuf),
                 pitch_value(note->u.note.pitch),
-                next_custos(next_note_pitch, next_note_alteration), type);
+                next_custos(next_note_pitch, next_note_alteration, status),
+                type);
         break;
     }
 }
@@ -2800,7 +2788,41 @@
             height = note->v_episema_height;
         } else {
             height = note->u.note.pitch;
+
+            /* no vertical episema, so we need to check for a stem */
+            gregorio_assert(glyph->type == GRE_GLYPH, compute_height_extrema,
+                    "glyph->type must be GRE_GLYPH here", return);
+            switch (glyph->u.notes.glyph_type) {
+            case G_BIVIRGA:
+            case G_TRIVIRGA:
+            case G_VIRGA:
+            case G_VIRGA_REVERSA:
+                --height;
+                break;
+
+            case G_PUNCTUM:
+                switch (note->u.note.shape) {
+                case S_ORISCUS_SCAPUS_ASCENDENS:
+                case S_ORISCUS_SCAPUS_DESCENDENS:
+                    --height;
+                    break;
+
+                default:
+                    /* default to avoid the warning */
+                    break;
+                }
+                break;
+
+            default:
+                /* default to avoid the warning */
+
+                /* other shapes like the porrectus have stems, but the height
+                 * computation will cover other notes in the shape, negating
+                 * the need to account for the stem on the shape */
+                break;
+            }
         }
+
         if (*bottom_height == UNDETERMINED_HEIGHT || height < *bottom_height) {
             *bottom_height = height;
         }
@@ -2807,6 +2829,24 @@
     }
 }
 
+static void compute_element_height_extrema(
+        const gregorio_element *const element, signed char *const top_height,
+        signed char *const bottom_height)
+{
+    const gregorio_glyph *glyph;
+    gregorio_not_null(element, compute_element_height_extrema, return);
+    if (element->type != GRE_ELEMENT) {
+        return;
+    }
+    /* get the minima/maxima pitches */
+    for (glyph = element->u.first_glyph; glyph; glyph = glyph->next) {
+        if (glyph->type == GRE_GLYPH) {
+            compute_height_extrema(glyph, glyph->u.notes.first_note,
+                    top_height, bottom_height);
+        }
+    }
+}
+
 static __inline void fixup_height_extrema(signed char *const top_height,
         signed char *const bottom_height)
 {
@@ -2818,6 +2858,12 @@
     }
 }
 
+static __inline bool is_ledger_drawn(const bool setting,
+        const gregorio_ledger_specificity specificity)
+{
+    return ((specificity & LEDGER_DRAWN) && setting);
+}
+
 static void write_signs(FILE *f, gtex_type type,
         const gregorio_glyph *glyph, const gregorio_note *note,
         int fuse_to_next_note, gregoriotex_status *const status,
@@ -2836,16 +2882,19 @@
     for (current_note = note, i = 1; current_note;
             current_note = current_note->next, ++i) {
         /* we start by the additional lines */
-        if (current_note->u.note.pitch <= LOW_LEDGER_LINE_PITCH) {
+        if (is_ledger_drawn(current_note->low_ledger_line,
+                current_note->low_ledger_specificity)) {
             write_additional_line(f, i, type, true, current_note, score);
             status->bottom_line = 1;
         }
-        if (current_note->u.note.pitch >= score->high_ledger_line_pitch) {
+        if (is_ledger_drawn(current_note->high_ledger_line,
+                current_note->high_ledger_specificity)) {
             write_additional_line(f, i, type, false, current_note, score);
         }
         if (current_note->texverb) {
             fprintf(f, "%% verbatim text at note level:\n%s%%\n"
-                    "%% end of verbatim text\n", current_note->texverb);
+                    "%% end of verbatim text\n",
+                    gregorio_texverb(current_note->texverb));
         }
         if (type == T_ONE_NOTE) {
             break;
@@ -2925,7 +2974,7 @@
     fprintf(f, "}%%\n");
 }
 
-static char *determine_leading_shape(gregorio_glyph *glyph)
+static char *determine_leading_shape(const gregorio_glyph *const glyph)
 {
     static char buf[BUFSIZE];
     int ambitus = compute_ambitus(glyph->u.notes.first_note);
@@ -2966,10 +3015,10 @@
         const bool has_next = current_note->next != NULL;
         if (has_next) {
             write_note(f, current_note, glyph, current_note->next->u.note.pitch,
-                    S_UNDETERMINED);
+                    S_UNDETERMINED, status);
         } else {
             write_note(f, current_note, glyph, next_note_pitch,
-                    next_note_alteration);
+                    next_note_alteration, status);
         }
         write_signs(f, T_ONE_NOTE, glyph, current_note,
                 has_next ? 0 : fuse_to_next_note, status, score);
@@ -2980,13 +3029,13 @@
     }
 }
 
-static void write_glyph(FILE *f, gregorio_syllable *syllable,
-        gregorio_element *element, gregorio_glyph *glyph,
+static void write_glyph(FILE *const f, const gregorio_syllable *const syllable,
+        const gregorio_element *const element,
+        gregorio_glyph *const glyph,
         gregoriotex_status *const status, const gregorio_score *const score)
 {
-    /* glyph number is the number of the glyph in the fonte, it is discussed in
-     * later comments
-     * type is the type of the glyph. Understand the type of the glyph for
+    static char cpbuf[96], cpbuf2[96];
+    /* type is the type of the glyph. Understand the type of the glyph for
      * gregoriotex, for the alignement between text and notes. (AT_ONE_NOTE,
      * etc.) */
     gtex_alignment type = 0;
@@ -3034,9 +3083,11 @@
                 || glyph->u.notes.liquescentia == L_NO_LIQUESCENTIA
                 || glyph->u.notes.liquescentia == L_FUSED) {
             shape = gregoriotex_determine_glyph_name(glyph, &type, &gtype);
-            fprintf(f, "\\GreGlyph{\\GreCP%s}{%d}{%s}{%d}", shape,
+            fprintf(f, "\\GreGlyph{%s}{%d}{%s}{%d}", code_point(shape,
+                        glyph->u.notes.is_cavum, cpbuf, sizeof cpbuf),
                     pitch_value(glyph->u.notes.first_note->u.note.pitch),
-                    next_custos(next_note_pitch, next_note_alteration), type);
+                    next_custos(next_note_pitch, next_note_alteration, status),
+                    type);
             write_signs(f, gtype, glyph, glyph->u.notes.first_note,
                     fuse_to_next_note, status, score);
         } else {
@@ -3049,9 +3100,11 @@
         gregorio_assert(glyph->u.notes.liquescentia & L_DEMINUTUS,
                 write_glyph, "encountered a non-deminutus ancus", break);
         shape = gregoriotex_determine_glyph_name(glyph, &type, &gtype);
-        fprintf(f, "\\GreGlyph{\\GreCP%s}{%d}{%s}{%d}", shape,
+        fprintf(f, "\\GreGlyph{%s}{%d}{%s}{%d}", code_point(shape,
+                        glyph->u.notes.is_cavum, cpbuf, sizeof cpbuf),
                 pitch_value(glyph->u.notes.first_note->u.note.pitch),
-                next_custos(next_note_pitch, next_note_alteration), type);
+                next_custos(next_note_pitch, next_note_alteration, status),
+                type);
         write_signs(f, gtype, glyph, glyph->u.notes.first_note,
                 fuse_to_next_note, status, score);
         break;
@@ -3063,10 +3116,14 @@
         glyph->u.notes.glyph_type = G_PORRECTUS_FLEXUS_NO_BAR;
         glyph->u.notes.first_note = current_note->next;
         shape = gregoriotex_determine_glyph_name(glyph, &type, &gtype);
-        fprintf(f, "\\GreGlyph{\\GreFuseTwo{\\GreCP%s}{\\GreCP%s}}{%d}"
-                "{%s}{%d}", leading_shape, shape,
+        fprintf(f, "\\GreGlyph{\\GreFuseTwo{%s}{%s}}{%d}{%s}{%d}",
+                code_point(leading_shape, glyph->u.notes.is_cavum, cpbuf,
+                    sizeof cpbuf),
+                code_point(shape, glyph->u.notes.is_cavum, cpbuf2,
+                    sizeof cpbuf2),
                 pitch_value(glyph->u.notes.first_note->u.note.pitch),
-                next_custos(next_note_pitch, next_note_alteration), type);
+                next_custos(next_note_pitch, next_note_alteration, status),
+                type);
         glyph->u.notes.first_note = current_note;
         glyph->u.notes.glyph_type = G_TORCULUS_RESUPINUS_FLEXUS;
         write_signs(f, gtype, glyph, glyph->u.notes.first_note,
@@ -3092,9 +3149,6 @@
         case S_ORISCUS_ASCENDENS:
         case S_ORISCUS_DESCENDENS:
         case S_ORISCUS_DEMINUTUS:
-        case S_ORISCUS_CAVUM_ASCENDENS:
-        case S_ORISCUS_CAVUM_DESCENDENS:
-        case S_ORISCUS_CAVUM_DEMINUTUS:
         case S_ORISCUS_SCAPUS_ASCENDENS:
         case S_ORISCUS_SCAPUS_DESCENDENS:
             /* don't change the oriscus */
@@ -3131,7 +3185,7 @@
     case G_STROPHA_AUCTA:
     case G_ALTERATION:
         write_note(f, glyph->u.notes.first_note, glyph, next_note_pitch,
-                next_note_alteration);
+                next_note_alteration, status);
         write_signs(f, T_ONE_NOTE, glyph, current_note, fuse_to_next_note,
                 status, score);
         break;
@@ -3148,10 +3202,14 @@
             glyph->u.notes.glyph_type = G_PORRECTUS_NO_BAR;
             glyph->u.notes.first_note = current_note->next;
             shape = gregoriotex_determine_glyph_name(glyph, &type, &gtype);
-            fprintf(f, "\\GreGlyph{\\GreFuseTwo{\\GreCP%s}{\\GreCP%s}}"
-                    "{%d}{%s}{%d}", leading_shape, shape,
+            fprintf(f, "\\GreGlyph{\\GreFuseTwo{%s}{%s}}{%d}{%s}{%d}",
+                    code_point(leading_shape, glyph->u.notes.is_cavum, cpbuf,
+                        sizeof cpbuf),
+                    code_point(shape, glyph->u.notes.is_cavum, cpbuf2,
+                        sizeof cpbuf2),
                     pitch_value(glyph->u.notes.first_note->u.note.pitch),
-                    next_custos(next_note_pitch, next_note_alteration), type);
+                    next_custos(next_note_pitch, next_note_alteration, status),
+                    type);
             glyph->u.notes.first_note = current_note;
             glyph->u.notes.glyph_type = G_TORCULUS_RESUPINUS;
             write_signs(f, gtype, glyph, glyph->u.notes.first_note,
@@ -3159,9 +3217,11 @@
             break;
         } else {
             shape = gregoriotex_determine_glyph_name(glyph, &type, &gtype);
-            fprintf(f, "\\GreGlyph{\\GreCP%s}{%d}{%s}{%d}",
-                    shape, pitch_value(glyph->u.notes.first_note->u.note.pitch),
-                    next_custos(next_note_pitch, next_note_alteration), type);
+            fprintf(f, "\\GreGlyph{%s}{%d}{%s}{%d}", code_point(shape,
+                        glyph->u.notes.is_cavum, cpbuf, sizeof cpbuf),
+                    pitch_value(glyph->u.notes.first_note->u.note.pitch),
+                    next_custos(next_note_pitch, next_note_alteration, status),
+                    type);
             write_signs(f, gtype, glyph, glyph->u.notes.first_note,
                     fuse_to_next_note, status, score);
             break;
@@ -3184,8 +3244,10 @@
 /* here we absolutely need to pass the syllable as an argument, because we
  * will need the next note, that may be contained in the next syllable */
 
-static unsigned int write_element(FILE *f, gregorio_syllable *syllable,
-        gregorio_element *element, gregoriotex_status *status,
+static unsigned int write_element(FILE *const f,
+        const gregorio_syllable *const syllable,
+        const gregorio_element *const element,
+        gregoriotex_status *const status,
         const gregorio_score *const score)
 {
     unsigned int note_unit_count = 0;
@@ -3217,7 +3279,8 @@
             case GRE_TEXVERB_GLYPH:
                 if (glyph->texverb) {
                     fprintf(f, "%% verbatim text at glyph level:\n%s%%\n"
-                            "%% end of verbatim text\n", glyph->texverb);
+                            "%% end of verbatim text\n",
+                            gregorio_texverb(glyph->texverb));
                 }
                 break;
 
@@ -3311,7 +3374,7 @@
  * \GreChangeClef.
  */
 static void gregoriotex_print_change_line_clef(FILE *f,
-        gregorio_element *current_element)
+        const gregorio_element *const current_element)
 {
     if (current_element->type == GRE_CLEF) {
         /* the third argument is 0 or 1 according to the need for a space
@@ -3394,7 +3457,8 @@
         case GRE_TEXVERB_ELEMENT:
             if (element->texverb) {
                 fprintf(f, "%% verbatim text at element level:\n%s%%\n"
-                        "%% end of verbatim text\n", element->texverb);
+                        "%% end of verbatim text\n",
+                        gregorio_texverb(element->texverb));
             }
             break;
 
@@ -3428,21 +3492,23 @@
 }
 
 static void write_syllable_text(FILE *f, const char *const syllable_type,
-        const bool forced_center, const gregorio_character *text,
+        const gregorio_syllable *const syllable,
         const bool ignored __attribute__((unused)))
 {
     if (syllable_type != NULL) {
-        fprintf(f, "%s{%s\\GreSetThisSyllable", syllable_type,
-                forced_center? "\\GreGABCForceCenters" : "");
-        write_text(f, text);
+        fprintf(f, "%s{%s%s\\GreSetThisSyllable", syllable_type,
+                syllable->clear? "\\GreClearSyllableText" : "",
+                syllable->forced_center? "\\GreGABCForceCenters" : "");
+        write_text(f, syllable->text);
         fprintf(f, "}");
     }
 }
 
 static void write_first_syllable_text(FILE *f, const char *const syllable_type,
-        const bool forced_center, const gregorio_character *const text,
+        const gregorio_syllable *const syllable,
         const bool end_of_word)
 {
+    const gregorio_character *const text = syllable->text;
     gregorio_not_null(syllable_type, write_first_syllable_text, return);
     if (text == NULL) {
         fprintf(f, "}{%s}{\\GreSetNoFirstSyllableText}", syllable_type);
@@ -3452,7 +3518,7 @@
         const gregorio_character *t;
 
         /* find out if there is a forced center -> has_forced_center */
-        gregorio_center_determination center = forced_center?
+        gregorio_center_determination center = syllable->forced_center?
                 CENTER_FULLY_DETERMINED : CENTER_NOT_DETERMINED;
 
         gregorio_rebuild_first_syllable(&text_with_initial, false);
@@ -3463,8 +3529,9 @@
         gregorio_rebuild_characters(&text_without_initial, center, true);
         gregorio_set_first_word(&text_without_initial);
 
-        fprintf(f, "}{%s}{%s\\GreSetFirstSyllableText", syllable_type,
-                forced_center? "\\GreGABCForceCenters" : "");
+        fprintf(f, "}{%s}{%s%s\\GreSetFirstSyllableText", syllable_type,
+                syllable->clear? "\\GreClearSyllableText" : "",
+                syllable->forced_center? "\\GreGABCForceCenters" : "");
 
         fprintf(f, "{");
         gregorio_write_first_letter_alignment_text(WTP_FIRST_SYLLABLE,
@@ -3628,6 +3695,30 @@
     }
 }
 
+static bool is_before_linebreak(const gregorio_syllable *syllable,
+        const gregorio_element *element)
+{
+    if (element) {
+        element = element->next;
+    }
+
+    while (syllable) {
+        if (element) {
+            if (element->type == GRE_END_OF_LINE) {
+                return true;
+            }
+            break;
+        }
+
+        syllable = syllable->next_syllable;
+        if (syllable) {
+            element = syllable->elements[0];
+        }
+    }
+
+    return false;
+}
+
 /*
  * Arguments are relatively obvious. The most obscure is certainly first_of_disc
  * which is 0 all the time, except in the case of a "clef change syllable". In
@@ -3646,9 +3737,9 @@
         const gregorio_score *const score,
         const gregorio_element *const *const last_of_voice,
         void (*const write_this_syllable_text)
-        (FILE *, const char *, bool, const gregorio_character *, bool))
+        (FILE *, const char *, const gregorio_syllable *, bool))
 {
-    gregorio_element *clef_change_element = NULL, *element;
+    const gregorio_element *clef_change_element = NULL, *element;
     const char *syllable_type = NULL;
     bool anticipated_event_written = false;
     bool end_of_word;
@@ -3670,13 +3761,13 @@
     if (syllable->euouae == EUOUAE_BEGINNING) {
         fprintf(f, "\\GreBeginEUOUAE{%hu}%%\n", syllable->euouae_id);
     }
-    /*
-     * first we check if the syllable is only a end of line. If it is the case,
-     * we don't print anything but a comment (to be able to read it if we read
-     * GregorioTeX). The end of lines are treated separately in GregorioTeX, it
-     * is buit inside the TeX structure.
-     */
     if (syllable->elements && *(syllable->elements)) {
+        /*
+         * first we check if the syllable is only a end of line. If it is the
+         * case, we don't print anything but a comment (to be able to read it
+         * if we read GregorioTeX). The end of lines are treated separately in
+         * GregorioTeX, it is buit inside the TeX structure.
+         */
         if ((syllable->elements)[0]->type == GRE_END_OF_LINE) {
             gregorio_assert(syllable != score->first_syllable, write_syllable,
                     "line break is not supported on the first syllable",
@@ -3686,8 +3777,7 @@
             } else {
                 fprintf(f, "%%\n%%\n\\GreNewLine %%\n%%\n%%\n");
             }
-            write_this_syllable_text(f, NULL, syllable->forced_center,
-                    syllable->text, end_of_word);
+            write_this_syllable_text(f, NULL, syllable, end_of_word);
             return;
         }
         /*
@@ -3714,8 +3804,7 @@
                 write_syllable(f, syllable, 2, status, score, last_of_voice,
                         write_syllable_text);
                 fprintf(f, "}%%\n");
-                write_this_syllable_text(f, NULL, syllable->forced_center,
-                        syllable->text, end_of_word);
+                write_this_syllable_text(f, NULL, syllable, end_of_word);
                 return;
             }
         }
@@ -3727,8 +3816,7 @@
                         && (syllable->elements)[0]->u.misc.unpitched.info.bar
                         == B_DIVISIO_FINALIS) {
                     handle_final_bar(f, "DivisioFinalis", syllable);
-                    write_this_syllable_text(f, NULL, syllable->forced_center,
-                            syllable->text, end_of_word);
+                    write_this_syllable_text(f, NULL, syllable, end_of_word);
                     return;
                 }
                 if (!syllable->next_syllable && !syllable->text
@@ -3735,8 +3823,7 @@
                         && (syllable->elements)[0]->u.misc.unpitched.info.bar
                         == B_DIVISIO_MAIOR) {
                     handle_final_bar(f, "DivisioMaior", syllable);
-                    write_this_syllable_text(f, NULL, syllable->forced_center,
-                            syllable->text, end_of_word);
+                    write_this_syllable_text(f, NULL, syllable, end_of_word);
                     return;
                 }
             }
@@ -3755,8 +3842,7 @@
                 syllable->next_syllable? syllable->next_syllable->text : NULL);
         syllable_type = "\\GreNoNoteSyllable";
     }
-    write_this_syllable_text(f, syllable_type, syllable->forced_center,
-            syllable->text, end_of_word);
+    write_this_syllable_text(f, syllable_type, syllable, end_of_word);
     fprintf(f, "{}{\\Gre%s}", syllable->first_word ? "FirstWord" : "Unstyled");
     if (end_of_word) {
         fprintf(f, "{1}");
@@ -3816,12 +3902,18 @@
     if (syllable->elements) {
         for (element = *syllable->elements; element; element = element->next) {
             if (element->nabc_lines && element->nabc) {
+                signed char high_pitch = UNDETERMINED_HEIGHT;
+                signed char low_pitch = UNDETERMINED_HEIGHT;
                 size_t i;
+                compute_element_height_extrema(element, &high_pitch,
+                        &low_pitch);
+                fixup_height_extrema(&high_pitch, &low_pitch);
                 for (i = 0; i < element->nabc_lines; i++) {
                     if (element->nabc[i]) {
                         fprintf(f, "\\GreNABCNeumes{%d}{", (int)(i+1));
                         tex_escape_text(f, element->nabc[i]);
-                        fprintf(f, "}%%\n");
+                        fprintf(f, "}{%d}{%d}%%\n", pitch_value(high_pitch),
+                                pitch_value(low_pitch));
                     }
                 }
             }
@@ -3875,7 +3967,8 @@
             case GRE_TEXVERB_ELEMENT:
                 if (element->texverb) {
                     fprintf(f, "%% verbatim text at element level:\n%s%%\n"
-                            "%% end of verbatim text\n", element->texverb);
+                            "%% end of verbatim text\n",
+                            gregorio_texverb(element->texverb));
                 }
                 break;
 
@@ -3890,7 +3983,8 @@
 
             case GRE_ALT:
                 if (element->texverb) {
-                    fprintf(f, "\\GreSetTextAboveLines{%s}%%\n", element->texverb);
+                    fprintf(f, "\\GreSetTextAboveLines{%s}%%\n",
+                            gregorio_texverb(element->texverb));
                 }
                 break;
 
@@ -3897,22 +3991,37 @@
             case GRE_CLEF:
                 /* We don't print clef changes at the end of a line */
                 if (first_of_disc != 1) {
-                    /* the third argument is 0 or 1 according to the need
-                     * for a space before the clef */
-                    fprintf(f, "\\GreChangeClef{%c}{%d}{%c}{%d}{%c}{%d}{%d}%%\n",
-                            gregorio_clef_to_char(element->u.misc.clef.clef),
-                            element->u.misc.clef.line,
-                            (!element->previous || element->previous->type
-                             == GRE_BAR)? '0' : '1',
-                            clef_flat_height(element->u.misc.clef.clef,
-                                    element->u.misc.clef.line,
-                                    element->u.misc.clef.flatted),
-                            gregorio_clef_to_char(
-                                    element->u.misc.clef.secondary_clef),
-                            element->u.misc.clef.secondary_line,
-                            clef_flat_height(element->u.misc.clef.secondary_clef,
-                                    element->u.misc.clef.secondary_line,
-                                    element->u.misc.clef.secondary_flatted));
+                    if (is_before_linebreak(syllable, element)) {
+                        signed char next_note_pitch;
+                        gregorio_shape next_note_alteration;
+
+                        next_note_pitch = gregorio_adjust_pitch_into_staff(
+                                score, gregorio_determine_next_pitch(
+                                syllable, element, NULL, &next_note_alteration)
+                                - element->u.misc.clef.pitch_difference);
+
+                        fputs(next_custos(next_note_pitch, next_note_alteration,
+                                status), f);
+                        gregoriotex_print_change_line_clef(f, element);
+                    } else {
+                        /* the third argument is 0 or 1 according to the need
+                         * for a space before the clef */
+                        fprintf(f, "\\GreChangeClef{%c}{%d}{%c}{%d}{%c}{%d}{%d}%%\n",
+                                gregorio_clef_to_char(element->u.misc.clef.clef),
+                                element->u.misc.clef.line,
+                                (!element->previous || element->previous->type
+                                 == GRE_BAR)? '0' : '1',
+                                clef_flat_height(element->u.misc.clef.clef,
+                                        element->u.misc.clef.line,
+                                        element->u.misc.clef.flatted),
+                                gregorio_clef_to_char(
+                                        element->u.misc.clef.secondary_clef),
+                                element->u.misc.clef.secondary_line,
+                                clef_flat_height(
+                                        element->u.misc.clef.secondary_clef,
+                                        element->u.misc.clef.secondary_line,
+                                        element->u.misc.clef.secondary_flatted));
+                    }
                 }
                 break;
 
@@ -3921,10 +4030,9 @@
                     signed char next_note_pitch;
                     gregorio_shape next_note_alteration;
                     const char *alteration = "";
-                    /*
-                     * We don't print custos before a bar at the end of a line
-                     */
-                    /* we also print an unbreakable larger space before the custo */
+                    /* We don't print custos before a bar at the end of a line.
+                     * We also print an unbreakable larger space before the
+                     * custos */
                     handle_last_of_voice(f, syllable, element, *last_of_voice);
                     next_note_pitch = gregorio_determine_next_pitch(syllable,
                             element, NULL, &next_note_alteration);
@@ -3933,11 +4041,18 @@
                     }
                     fprintf(f, "\\GreCustos{%d}{%s}%s%%\n",
                             pitch_value(element->u.misc.pitched.pitch), alteration,
-                            next_custos(next_note_pitch, next_note_alteration));
+                            next_custos(next_note_pitch, next_note_alteration,
+                            status));
                     ++note_unit_count;
                 }
                 break;
 
+            case GRE_SUPPRESS_CUSTOS:
+                handle_last_of_voice(f, syllable, element, *last_of_voice);
+                fprintf(f, "\\GreSuppressEolCustos %%\n");
+                status->suppressed_custos = true;
+                break;
+
             case GRE_BAR:
                 handle_last_of_voice(f, syllable, element, *last_of_voice);
                 write_bar(f, score, syllable, element, first_of_disc);
@@ -4018,6 +4133,7 @@
     status->bottom_line = false;
     status->top_height = status->bottom_height = UNDETERMINED_HEIGHT;
     status->abovelinestext = status->translation = false;
+    status->suppressed_custos = false;
 
     /* first pass to compute positioning */
     for (syllable = score->first_syllable; syllable;
@@ -4172,6 +4288,90 @@
     return 1;
 }
 
+static int clef_size(const gregorio_clef_info *const clef)
+{
+    /* this is a heuristic clef size approximation:
+     * C-clef = 1
+     * F-clef = 2
+     * flatted = +2
+     * unstacked double-clef = +1 (plus the clef size)
+     */
+    /* purposely making line signed */
+    int line_diff = clef->line - clef->secondary_line;
+    int size;
+    if (clef->clef == CLEF_F) {
+        size = 2;
+    } else {
+        size = 1;
+    }
+    if (clef->flatted) {
+        size += 2;
+    }
+    if (clef->secondary_line) {
+        if (line_diff < -1 || line_diff > 1) { /* stacked */
+            int secondary_size;
+            if (clef->secondary_clef == CLEF_F) {
+                secondary_size = 2;
+            } else {
+                secondary_size = 1;
+            }
+            if (clef->secondary_flatted) {
+                secondary_size += 2;
+            }
+            if (secondary_size > size) {
+                size = secondary_size;
+            }
+        } else { /* unstacked */
+            size += 1;
+            if (clef->secondary_clef == CLEF_F) {
+                size += 2;
+            } else {
+                size += 1;
+            }
+            if (clef->secondary_flatted) {
+                size += 2;
+            }
+        }
+    }
+    return size;
+}
+
+static void write_largest_clef(FILE *const f, gregorio_score *const score)
+{
+    const gregorio_syllable *syllable;
+    const gregorio_element *element;
+    gregorio_clef_info clef = gregorio_default_clef;
+    int size;
+
+    if (score->first_voice_info) {
+        clef = score->first_voice_info->initial_clef;
+    }
+    size = clef_size(&clef);
+
+    for (syllable = score->first_syllable; syllable;
+            syllable = syllable->next_syllable) {
+        if (syllable->elements) {
+            for (element = *syllable->elements; element;
+                    element = element->next) {
+                if (element->type == GRE_CLEF) {
+                    const int this_size = clef_size(&element->u.misc.clef);
+                    if (this_size > size) {
+                        clef = element->u.misc.clef;
+                        size = this_size;
+                    }
+                }
+            }
+        }
+    }
+
+    fprintf(f, "\\GreSetLargestClef{%c}{%d}{%d}{%c}{%d}{%d}%%\n",
+            gregorio_clef_to_char(clef.clef), clef.line,
+            clef_flat_height(clef.clef, clef.line, clef.flatted),
+            gregorio_clef_to_char(clef.secondary_clef), clef.secondary_line,
+            clef_flat_height(clef.secondary_clef, clef.secondary_line,
+                    clef.secondary_flatted));
+}
+
 void gregoriotex_write_score(FILE *const f, gregorio_score *const score,
         const char *const point_and_click_filename)
 {
@@ -4210,12 +4410,16 @@
 
     write_headers(f, score);
 
-    fprintf(f, "\\GreBeginScore{%s}{%d}{%d}{%d}{%d}{%s}{%u}%%\n",
+    if (score->first_voice_info) {
+        clef = score->first_voice_info->initial_clef;
+    }
+    fprintf(f, "\\GreBeginScore{%s}{%d}{%d}{%d}{%d}{%s}{%u}"
+            "{\\GreInitialClefPosition{%d}{%d}}%%\n",
             digest_to_hex(score->digest), status.top_height,
             status.bottom_height, bool_to_int(status.translation),
             bool_to_int(status.abovelinestext),
             point_and_click_filename? point_and_click_filename : "",
-            score->staff_lines);
+            score->staff_lines, clef.line, clef.secondary_line);
     if (score->nabc_lines) {
         fprintf(f, "\\GreScoreNABCLines{%d}", (int)score->nabc_lines);
     }
@@ -4247,21 +4451,12 @@
         fprintf(f, "}%%\n");
     }
 
-    /* DEPRECATED for removal in 5.0 */
-    /* LCOV_EXCL_START */
-    if (score->initial_style != INITIAL_NOT_SPECIFIED) { /* DEPRECATED for removal in 5.0 */
-        fprintf(f, "\\GreSetInitialStyle{%d}%%\n", score->initial_style); /* DEPRECATED for removal in 5.0 */
-    }
-    /* LCOV_EXCL_STOP */
-
+    write_largest_clef(f, score);
     fprintf(f, "\\GreScoreOpening{%%\n"); /* GreScoreOpening#1 */
     if (score->first_voice_info) {
         gregoriotex_write_voice_info(f, score->first_voice_info);
     }
     fprintf(f, "}{%%\n"); /* GreScoreOpening#2 */
-    if (score->first_voice_info) {
-        clef = score->first_voice_info->initial_clef;
-    }
     fprintf(f, "\\GreSetInitialClef{%c}{%d}{%d}{%c}{%d}{%d}{%d}%%\n",
             gregorio_clef_to_char(clef.clef), clef.line,
             clef_flat_height(clef.clef, clef.line, clef.flatted),

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This header prototypes GregorioTeX writing data structures and entry points.
  *
- * Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  * 
@@ -35,14 +35,14 @@
     T_ONE_NOTE = 1,
     /* two note neumes */
     T_PES,
-    T_PESQUADRATUM,
-    T_PESQUILISMA,
-    T_PESQUASSUS,
-    T_PESQUILISMAQUADRATUM,
+    T_PES_QUADRATUM,
+    T_QUILISMA_PES,
+    T_PES_QUASSUS,
+    T_QUILISMA_PES_QUADRATUM,
     T_FLEXUS,
     T_FLEXUS_ORISCUS,
     T_FLEXUS_ORISCUS_SCAPUS,
-    T_VIRGA_STRATA,
+    T_PES_ORISCUS,
     /* three note neumes */
     T_PORRECTUS,
     T_TORCULUS,

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/messages.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/messages.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/messages.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This file contains functions for logging messages, warnings, and errors.
  *
- * Copyright (C) 2009-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2009-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  * 
@@ -67,8 +67,11 @@
         str = _("warning:");
         break;
     case VERBOSITY_DEPRECATION:
+        /* if there is no deprecation, these lines will not be hit */
+        /* LCOV_EXCL_START */
         str = _("deprecation:");
         break;
+        /* LCOV_EXCL_STOP */
     case VERBOSITY_ERROR:
         str = _("error:");
         break;
@@ -139,9 +142,12 @@
 
     switch (verbosity) {
     case VERBOSITY_DEPRECATION:
+        /* if there is no deprecation, these lines will not be hit */
+        /* LCOV_EXCL_START */
         if (deprecation_is_warning) {
             break;
         }
+        /* LCOV_EXCL_STOP */
         /* else fall through */
     case VERBOSITY_ERROR:
     case VERBOSITY_ASSERTION:

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/messages.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/messages.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/messages.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This header prototypes the message logging functions.
  *
- * Copyright (C) 2009-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2009-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/plugins.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/plugins.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/plugins.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This header prototypes the "main" entry points for reading and writing data.
  *
- * Copyright (C) 2008-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2008-2017 The Gregorio Project (see CONTRIBUTORS.md)
  * 
  * This file is part of Gregorio.
  *
@@ -23,12 +23,14 @@
 #ifndef PLUGINS_H
 #define PLUGINS_H
 
+#include "bool.h"
+
 void dump_write_score(FILE *f, gregorio_score *score);
 
 void dump_write_characters(FILE *const f,
         const gregorio_character *current_character);
 
-gregorio_score *gabc_read_score(FILE *f_in);
+gregorio_score *gabc_read_score(FILE *f_in, bool point_and_click);
 
 void gabc_write_score(FILE *f, gregorio_score *score);
 

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/sha1.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/sha1.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/sha1.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * sha1.c - Functions to compute SHA1 message digest of files or
  * memory blocks according to the NIST specification FIPS-180-1.
  *
- * Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
  * Copyright (C) 2000-2001, 2003-2006, 2008-2014 Free Software Foundation, Inc.
  *
  * This file is part of Gregorio.

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/sha1.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/sha1.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/sha1.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Declarations of functions and data types used for SHA1 sum
  * library functions.
  *
- * Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
  * Copyright (C) 2000-2001, 2003, 2005-2006, 2008-2014 Free Software
  * Foundation, Inc.
  *

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/struct.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/struct.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/struct.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This file implements the Gregorio data structures.
  *
- * Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *
@@ -58,6 +58,7 @@
 gregorio_clef_info gregorio_default_clef = {
     /*.line =*/ 3,
     /*.secondary_line =*/ 0,
+    /*.pitch_difference =*/ 0,
     /*.clef =*/ CLEF_C,
     /*.flatted =*/ false,
     /*.secondary_clef =*/ CLEF_C, /* not used since secondary_line is 0 */
@@ -64,10 +65,14 @@
     /*.secondary_flatted =*/ false,
 };
 
-static size_t hepisema_adjustments_capacity;
-static unsigned short hepisema_adjustments_last;
-static gregorio_hepisema_adjustment *hepisema_adjustments;
+static size_t hepisema_adjustments_capacity = 0;
+static unsigned short hepisema_adjustments_last = 0;
+static gregorio_hepisema_adjustment *hepisema_adjustments = NULL;
 
+static size_t texverbs_capacity = 0;
+static unsigned short texverbs_last = 0;
+static char **texverbs = NULL;
+
 void gregorio_struct_init(void)
 {
     hepisema_adjustments_capacity = 8;
@@ -75,6 +80,10 @@
             &hepisema_adjustments_capacity, gregorio_hepisema_adjustment);
     hepisema_adjustments[0].vbasepos = HVB_AUTO;
     hepisema_adjustments[0].nudge = NULL;
+
+    texverbs_capacity = 32;
+    texverbs = gregorio_grow_buffer(NULL, &texverbs_capacity, char *);
+    texverbs[0] = NULL;
 }
 
 void gregorio_struct_destroy(void)
@@ -81,6 +90,8 @@
 {
     size_t i;
     gregorio_hepisema_adjustment *adj;
+    char **texverb;
+
     for (i = 0, adj = hepisema_adjustments; i <= hepisema_adjustments_last;
             ++i, ++adj) {
         if (adj->nudge) {
@@ -88,8 +99,47 @@
         }
     }
     free(hepisema_adjustments);
+
+    for (i = 0, texverb = texverbs; i <= texverbs_last; ++i, ++texverb) {
+        if (*texverb) {
+            /* If the code falls here, this is a programming error. */
+            /* LCOV_EXCL_START */
+            gregorio_fail(gregorio_struct_destroy, "unfreed texverb");
+            free(*texverb);
+        }
+        /* LCOV_EXCL_STOP */
+    }
+    free(texverbs);
 }
 
+static unsigned short register_texverb(char *const texverb)
+{
+    if (texverbs_last == USHRT_MAX) {
+        /* It's not reasonable to trigger this condition while testing */
+        /* LCOV_EXCL_START */
+        gregorio_message(_("too many texverbs"), "register_texverb",
+                VERBOSITY_ERROR, 0);
+        return 0;
+        /* LCOV_EXCL_STOP */
+    }
+    ++texverbs_last;
+    if (texverbs_last >= texverbs_capacity) {
+        texverbs = gregorio_grow_buffer(texverbs, &texverbs_capacity, char *);
+    }
+    texverbs[texverbs_last] = texverb;
+    return texverbs_last;
+}
+
+static void free_one_texverb(unsigned short index)
+{
+    if (index) {
+        gregorio_assert(index <= texverbs_last, gregorio_texverb,
+                "array index out of bounds", return);
+        free(texverbs[index]);
+        texverbs[index] = NULL;
+    }
+}
+
 static gregorio_note *create_and_link_note(gregorio_note **current_note,
         const gregorio_scanner_location *const loc)
 {
@@ -160,8 +210,12 @@
                 prototype->he_adjustment_index[SO_OVER];
         element->he_adjustment_index[SO_UNDER] =
                 prototype->he_adjustment_index[SO_UNDER];
+        element->high_ledger_line = prototype->high_ledger_line;
+        element->high_ledger_specificity = prototype->high_ledger_specificity;
+        element->low_ledger_line = prototype->low_ledger_line;
+        element->low_ledger_specificity = prototype->low_ledger_specificity;
     }
-    element->texverb = NULL;
+    element->texverb = 0;
     element->choral_sign = NULL;
 }
 
@@ -185,7 +239,7 @@
     element->u.other.eol_forces_custos_on = eol_forces_custos_on;
 }
 
-void gregorio_add_custo_as_note(gregorio_note **current_note,
+void gregorio_add_custos_as_note(gregorio_note **current_note,
         const gregorio_scanner_location *const loc)
 {
     gregorio_note *element = create_and_link_note(current_note, loc);
@@ -198,6 +252,13 @@
     add_pitched_item_as_note(current_note, GRE_MANUAL_CUSTOS, pitch, loc);
 }
 
+void gregorio_add_suppress_custos_as_note(gregorio_note **current_note,
+        const gregorio_scanner_location *const loc)
+{
+    gregorio_note *element = create_and_link_note(current_note, loc);
+    element->type = GRE_SUPPRESS_CUSTOS;
+}
+
 void gregorio_add_clef_as_note(gregorio_note **current_note,
         gregorio_clef clef, signed char clef_line, bool flatted,
         const gregorio_scanner_location *const loc)
@@ -250,16 +311,18 @@
     element->u.other.ad_hoc_space_factor = factor;
 }
 
-void gregorio_add_texverb_as_note(gregorio_note **current_note, char *str,
-        gregorio_type type, const gregorio_scanner_location *const loc)
+unsigned short gregorio_add_texverb_as_note(gregorio_note **current_note,
+        char *str, gregorio_type type,
+        const gregorio_scanner_location *const loc)
 {
     gregorio_note *element;
-    gregorio_not_null(str, gregorio_add_texverb_as_note, return);
+    /* gregorio_not_null(str, gregorio_add_texverb_as_note, return NULL); */
     element = create_and_link_note(current_note, loc);
     assert(type == GRE_TEXVERB_GLYPH || type == GRE_TEXVERB_ELEMENT
            || type == GRE_ALT);
     element->type = type;
-    element->texverb = str;
+    element->texverb = register_texverb(str);
+    return element->texverb;
 }
 
 void gregorio_add_nlba_as_note(gregorio_note **current_note, gregorio_nlba type,
@@ -284,6 +347,15 @@
     element->type = GRE_AUTOFUSE_END;
 }
 
+static __inline void change_note_texverb(gregorio_note *note, char *str)
+{
+    if (note->texverb) {
+        gregorio_change_texverb(note->texverb, str);
+    } else {
+        note->texverb = register_texverb(str);
+    }
+}
+
 void gregorio_add_texverb_to_note(gregorio_note *current_note, char *str)
 {
     size_t len;
@@ -290,16 +362,16 @@
     char *res;
     gregorio_not_null(str, gregorio_add_texverb_as_note, return);
     if (current_note) {
-        if (current_note->texverb) {
-            len = strlen(current_note->texverb) + strlen(str) + 1;
+        const char *texverb = gregorio_texverb(current_note->texverb);
+        if (texverb) {
+            len = strlen(texverb) + strlen(str) + 1;
             res = gregorio_malloc(len);
-            strcpy(res, current_note->texverb);
+            strcpy(res, texverb);
             strcat(res, str);
-            free(current_note->texverb);
             free(str);
-            current_note->texverb = res;
+            change_note_texverb(current_note, res);
         } else {
-            current_note->texverb = str;
+            change_note_texverb(current_note, str);
         }
     }
 }
@@ -324,20 +396,6 @@
     note->special_sign = sign;
 }
 
-static void fix_punctum_cavum_inclinatum_liquescentia(gregorio_note *const note)
-{
-    note->u.note.liquescentia &= TAIL_LIQUESCENTIA_MASK;
-    switch (note->u.note.liquescentia) {
-    case L_AUCTUS_ASCENDENS:
-    case L_AUCTUS_DESCENDENS:
-        note->u.note.liquescentia = L_AUCTUS_ASCENDENS;
-        break;
-    default:
-        note->u.note.liquescentia = L_NO_LIQUESCENTIA;
-        break;
-    }
-}
-
 static void fix_oriscus_liquescentia(gregorio_note *const note,
         const bool legacy_oriscus_orientation)
 {
@@ -388,38 +446,9 @@
     }
 }
 
-static void fix_oriscus_cavum_liquescentia(gregorio_note *const note,
-        const bool legacy_oriscus_orientation)
-{
-    if (legacy_oriscus_orientation) {
-        switch (note->u.note.liquescentia) {
-        case L_AUCTUS_ASCENDENS:
-            note->u.note.liquescentia =
-                    (note->u.note.liquescentia & ~TAIL_LIQUESCENTIA_MASK)
-                    | L_AUCTUS_DESCENDENS;
-            /* fall through */
-        case L_AUCTUS_DESCENDENS:
-            note->u.note.shape = S_ORISCUS_CAVUM_DESCENDENS;
-            break;
-        case L_DEMINUTUS:
-            note->u.note.shape = S_ORISCUS_CAVUM_DEMINUTUS;
-            break;
-        default:
-            note->u.note.shape = S_ORISCUS_CAVUM_ASCENDENS;
-            break;
-        }
-    } else {
-        note->u.note.liquescentia &= ((~TAIL_LIQUESCENTIA_MASK) | L_DEMINUTUS);
-        if (note->u.note.liquescentia & L_DEMINUTUS) {
-            note->u.note.shape = S_ORISCUS_CAVUM_DEMINUTUS;
-        }
-    }
-}
-
 void gregorio_change_shape(gregorio_note *const note,
         const gregorio_shape shape, const bool legacy_oriscus_orientation)
 {
-    gregorio_shape old_shape;
     if (!note || note->type != GRE_NOTE) {
         gregorio_message(_("trying to change the shape of something that is "
                     "not a note"), "change_shape", VERBOSITY_ERROR, 0);
@@ -426,43 +455,8 @@
         return;
     }
 
-    old_shape = note->u.note.shape;
     note->u.note.shape = shape;
     switch (shape) {
-    case S_PUNCTUM_CAVUM:
-        /* S_PUNCTUM_CAVUM morphs other shapes */
-        switch (old_shape) {
-        case S_PUNCTUM_INCLINATUM_UNDETERMINED:
-        case S_PUNCTUM_INCLINATUM_ASCENDENS:
-        case S_PUNCTUM_INCLINATUM_DESCENDENS:
-            note->u.note.shape = S_PUNCTUM_CAVUM_INCLINATUM;
-            fix_punctum_cavum_inclinatum_liquescentia(note);
-            break;
-
-        case S_ORISCUS_UNDETERMINED:
-        case S_ORISCUS_DEMINUTUS:
-        case S_ORISCUS_SCAPUS_UNDETERMINED:
-            note->u.note.shape = S_ORISCUS_CAVUM_UNDETERMINED;
-            fix_oriscus_cavum_liquescentia(note, legacy_oriscus_orientation);
-            break;
-
-        case S_ORISCUS_ASCENDENS:
-        case S_ORISCUS_SCAPUS_ASCENDENS:
-            note->u.note.shape = S_ORISCUS_CAVUM_ASCENDENS;
-            fix_oriscus_cavum_liquescentia(note, legacy_oriscus_orientation);
-            break;
-
-        case S_ORISCUS_DESCENDENS:
-        case S_ORISCUS_SCAPUS_DESCENDENS:
-            note->u.note.shape = S_ORISCUS_CAVUM_DESCENDENS;
-            fix_oriscus_cavum_liquescentia(note, legacy_oriscus_orientation);
-            break;
-
-        default:
-            break;
-        }
-        break;
-
     case S_STROPHA:
     case S_DISTROPHA:
     case S_TRISTROPHA:
@@ -470,61 +464,9 @@
         break;
 
     case S_ORISCUS_UNDETERMINED:
-        switch (old_shape) {
-        case S_PUNCTUM_CAVUM:
-        case S_PUNCTUM_CAVUM_INCLINATUM:
-            note->u.note.shape = S_ORISCUS_CAVUM_UNDETERMINED;
-            fix_oriscus_cavum_liquescentia(note, legacy_oriscus_orientation);
-            break;
-
-        case S_ORISCUS_CAVUM_UNDETERMINED:
-        case S_ORISCUS_CAVUM_ASCENDENS:
-        case S_ORISCUS_CAVUM_DESCENDENS:
-        case S_ORISCUS_CAVUM_DEMINUTUS:
-            note->u.note.shape = old_shape;
-            fix_oriscus_cavum_liquescentia(note, legacy_oriscus_orientation);
-            break;
-
-        default:
-            fix_oriscus_liquescentia(note, legacy_oriscus_orientation);
-            break;
-        }
-        break;
-
     case S_ORISCUS_ASCENDENS:
-        switch (old_shape) {
-        case S_PUNCTUM_CAVUM:
-        case S_PUNCTUM_CAVUM_INCLINATUM:
-        case S_ORISCUS_CAVUM_UNDETERMINED:
-        case S_ORISCUS_CAVUM_ASCENDENS:
-        case S_ORISCUS_CAVUM_DESCENDENS:
-        case S_ORISCUS_CAVUM_DEMINUTUS:
-            note->u.note.shape = S_ORISCUS_CAVUM_ASCENDENS;
-            fix_oriscus_cavum_liquescentia(note, legacy_oriscus_orientation);
-            break;
-
-        default:
-            fix_oriscus_liquescentia(note, legacy_oriscus_orientation);
-            break;
-        }
-        break;
-
     case S_ORISCUS_DESCENDENS:
-        switch (old_shape) {
-        case S_PUNCTUM_CAVUM:
-        case S_PUNCTUM_CAVUM_INCLINATUM:
-        case S_ORISCUS_CAVUM_UNDETERMINED:
-        case S_ORISCUS_CAVUM_ASCENDENS:
-        case S_ORISCUS_CAVUM_DESCENDENS:
-        case S_ORISCUS_CAVUM_DEMINUTUS:
-            note->u.note.shape = S_ORISCUS_CAVUM_DESCENDENS;
-            fix_oriscus_cavum_liquescentia(note, legacy_oriscus_orientation);
-            break;
-
-        default:
-            fix_oriscus_liquescentia(note, legacy_oriscus_orientation);
-            break;
-        }
+        fix_oriscus_liquescentia(note, legacy_oriscus_orientation);
         break;
 
     case S_ORISCUS_SCAPUS_UNDETERMINED:
@@ -538,6 +480,16 @@
     }
 }
 
+void gregorio_add_cavum(gregorio_note *const note)
+{
+    if (!note || note->type != GRE_NOTE) {
+        gregorio_message(_("trying to add cavum to something that is "
+                    "not a note"), "change_shape", VERBOSITY_ERROR, 0);
+        return;
+    }
+    note->u.note.is_cavum = true;
+}
+
 void gregorio_add_tail_liquescentia(gregorio_note *note,
         gregorio_liquescentia liq, const bool legacy_oriscus_orientation)
 {
@@ -552,10 +504,6 @@
         | (liq & TAIL_LIQUESCENTIA_MASK);
 
     switch (note->u.note.shape) {
-    case S_PUNCTUM_CAVUM_INCLINATUM:
-        fix_punctum_cavum_inclinatum_liquescentia(note);
-        break;
-
     case S_STROPHA:
     case S_DISTROPHA:
     case S_TRISTROPHA:
@@ -579,13 +527,6 @@
         fix_oriscus_scapus_liquescentia(note, legacy_oriscus_orientation);
         break;
 
-    case S_ORISCUS_CAVUM_UNDETERMINED:
-    case S_ORISCUS_CAVUM_ASCENDENS:
-    case S_ORISCUS_CAVUM_DESCENDENS:
-    case S_ORISCUS_CAVUM_DEMINUTUS:
-        fix_oriscus_cavum_liquescentia(note, legacy_oriscus_orientation);
-        break;
-
     default:
         break;
     }
@@ -765,7 +706,7 @@
     if (note->type == GRE_SPACE) {
         free(note->u.other.ad_hoc_space_factor);
     }
-    free(note->texverb);
+    free_one_texverb(note->texverb);
     free(note->choral_sign);
     free(note);
 }
@@ -810,17 +751,18 @@
 
 void gregorio_add_glyph(gregorio_glyph **current_glyph,
         gregorio_glyph_type type, gregorio_note *first_note,
-        gregorio_liquescentia liquescentia)
+        gregorio_liquescentia liquescentia, bool is_cavum)
 {
     gregorio_glyph *next_glyph = create_and_link_glyph(current_glyph);
     next_glyph->type = GRE_GLYPH;
     next_glyph->u.notes.glyph_type = type;
     next_glyph->u.notes.liquescentia = liquescentia;
+    next_glyph->u.notes.is_cavum = is_cavum;
     next_glyph->u.notes.first_note = first_note;
 }
 
 void gregorio_add_clef_as_glyph(gregorio_glyph **current_glyph,
-        gregorio_clef_info clef, char *texverb)
+        gregorio_clef_info clef, unsigned short texverb)
 {
     gregorio_glyph *next_glyph = create_and_link_glyph(current_glyph);
     next_glyph->type = GRE_CLEF;
@@ -829,7 +771,8 @@
 }
 
 void gregorio_add_pitched_element_as_glyph(gregorio_glyph **current_glyph,
-        gregorio_type type, signed char pitch, bool force_pitch, char *texverb)
+        gregorio_type type, signed char pitch, bool force_pitch,
+        unsigned short texverb)
 {
     gregorio_glyph *next_glyph = create_and_link_glyph(current_glyph);
     assert(type == GRE_CUSTOS);
@@ -841,7 +784,7 @@
 
 void gregorio_add_unpitched_element_as_glyph(gregorio_glyph **current_glyph,
         gregorio_type type, gregorio_extra_info *info, gregorio_sign sign,
-        char *texverb)
+        unsigned short texverb)
 {
     gregorio_glyph *next_glyph = create_and_link_glyph(current_glyph);
     assert(type != GRE_NOTE && type != GRE_GLYPH && type != GRE_ELEMENT
@@ -869,7 +812,7 @@
 
 static __inline void free_one_glyph(gregorio_glyph *glyph)
 {
-    free(glyph->texverb);
+    free_one_texverb(glyph->texverb);
     switch (glyph->type) {
     case GRE_GLYPH:
         gregorio_free_notes(&glyph->u.notes.first_note);
@@ -933,7 +876,8 @@
 }
 
 void gregorio_add_misc_element(gregorio_element **current_element,
-        gregorio_type type, gregorio_misc_element_info *info, char *texverb)
+        gregorio_type type, gregorio_misc_element_info *info,
+        unsigned short texverb)
 {
     gregorio_element *special = create_and_link_element(current_element);
     special->type = type;
@@ -950,7 +894,7 @@
 static __inline void free_one_element(gregorio_element *element)
 {
     size_t i;
-    free(element->texverb);
+    free_one_texverb(element->texverb);
     for (i = 0; i < element->nabc_lines; i++) {
         free(element->nabc[i]);
     }
@@ -969,22 +913,22 @@
     free(element);
 }
 
-static void gregorio_free_one_element(gregorio_element **element)
+void gregorio_free_one_element(gregorio_element **element)
 {
     gregorio_element *next = NULL;
+    gregorio_element *to_free;
     gregorio_not_null_ptr(element, gregorio_free_one_element, return);
-    if ((*element)->next) {
-        (*element)->next->previous = NULL;
-        next = (*element)->next;
+    to_free = *element;
+    if (to_free->next) {
+        to_free->next->previous = NULL;
+        next = to_free->next;
     }
-    if ((*element)->previous) {
-        /* this doesn't currently happen, but it's safer to leave this in */
-        /* LCOV_EXCL_START */
-        (*element)->previous->next = NULL;
+    if (to_free->previous) {
+        to_free->previous->next = NULL;
     }
     /* The previous line is probably optimized out */
     /* LCOV_EXCL_STOP */
-    free_one_element(*element);
+    free_one_element(to_free);
     *element = next;
 }
 
@@ -1105,7 +1049,7 @@
         gregorio_word_position position, char *abovelinestext,
         gregorio_tr_centering translation_type, gregorio_nlba no_linebreak_area,
         gregorio_euouae euouae, const gregorio_scanner_location *const loc,
-        const bool first_word)
+        const bool first_word, const bool clear)
 {
     gregorio_syllable *next;
     gregorio_element **tab;
@@ -1122,6 +1066,7 @@
     next->translation_type = translation_type;
     next->abovelinestext = abovelinestext;
     next->first_word = first_word;
+    next->clear = clear;
     if (loc) {
         next->src_line = loc->first_line;
         next->src_column = loc->first_column;
@@ -1177,7 +1122,6 @@
 {
     gregorio_score *new_score = gregorio_calloc(1, sizeof(gregorio_score));
     new_score->number_of_voices = 1;
-    new_score->initial_style = INITIAL_NOT_SPECIFIED;
     gregorio_set_score_staff_lines(new_score, 4);
     return new_score;
 }
@@ -1347,7 +1291,13 @@
                         }
                         break;
                     default:
+                        /* not reachable unless there's a programming error */
+                        /* LCOV_EXCL_START */
+                        gregorio_fail2(next_pitch_from_glyph,
+                                "unrecognized alteration shape: %s",
+                                gregorio_shape_to_string(note->u.note.shape));
                         break;
+                        /* LCOV_EXCL_STOP */
                     }
                 }
             } else if (glyph->u.notes.first_note) {
@@ -1536,11 +1486,15 @@
     return 1;
 }
 
+/* This should only be called when an unknown enum value is encountered; as
+ * such, this is a programming error */
+/* LCOV_EXCL_START */
 const char *gregorio_unknown(int value) {
     static char buf[20];
     gregorio_snprintf(buf, sizeof buf, "?%d", value);
     return buf;
 }
+/* LCOV_EXCL_STOP */
 
 /*
  * A small helper for the following function
@@ -1615,6 +1569,26 @@
     return &hepisema_adjustments[index];
 }
 
+const char *gregorio_texverb(unsigned short index)
+{
+    gregorio_assert(index <= texverbs_last, gregorio_texverb,
+            "array index out of bounds", return NULL);
+    return texverbs[index];
+}
+
+void gregorio_change_texverb(unsigned short index, char *texverb)
+{
+    /* not allowed to change index 0 (== NULL) */
+    gregorio_assert(index != 0, gregorio_texverb,
+            "array index 0 may not be changed", return);
+    gregorio_assert(index <= texverbs_last, gregorio_texverb,
+            "array index out of bounds", return);
+    if (texverbs[index]) {
+        free(texverbs[index]);
+    }
+    texverbs[index] = texverb;
+}
+
 ENUM_TO_STRING(gregorio_type, GREGORIO_TYPE)
 ENUM_TO_STRING(gregorio_shape, GREGORIO_SHAPE)
 ENUM_TO_STRING(gregorio_bar, GREGORIO_BAR)

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/struct.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/struct.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/struct.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This header defines the Gregorio data structures and functions.
  *
- * Copyright (C) 2006-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2006-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *
@@ -32,6 +32,7 @@
 #ifndef STRUCT_H
 #define STRUCT_H
 
+#include <assert.h>
 #include "enum_generator.h"
 #include "bool.h"
 #include "sha1.h"
@@ -60,6 +61,7 @@
     unsigned short last_line;
     unsigned short last_column;
     unsigned short last_offset;
+    bool generate_point_and_click:1;
 } gregorio_scanner_location;
 
 /* all the different types of things a gregorio_* can be */
@@ -74,6 +76,7 @@
     E(GRE_BAR) \
     E(GRE_CUSTOS) \
     E(GRE_MANUAL_CUSTOS) \
+    E(GRE_SUPPRESS_CUSTOS) \
     /* I don't really know how I could use the a TEXVERB_NOTE in gregoriotex,
      * as we don't write note by note... */ \
     /* GRE_TEXVERB_NOTE, */ \
@@ -116,14 +119,7 @@
     E(S_STROPHA_AUCTA) \
     E(S_DISTROPHA) \
     E(S_TRISTROPHA) \
-    E(S_PUNCTUM_CAVUM) \
     E(S_LINEA_PUNCTUM) \
-    E(S_LINEA_PUNCTUM_CAVUM) \
-    E(S_PUNCTUM_CAVUM_INCLINATUM) \
-    E(S_PUNCTUM_CAVUM_INCLINATUM_AUCTUS) \
-    E(S_ORISCUS_CAVUM_ASCENDENS) \
-    E(S_ORISCUS_CAVUM_DESCENDENS) \
-    E(S_ORISCUS_CAVUM_DEMINUTUS) \
     E(S_FLAT) \
     E(S_SHARP) \
     E(S_NATURAL) \
@@ -133,7 +129,6 @@
      * quislisma quadratum */ \
     E(S_ORISCUS_UNDETERMINED) \
     E(S_ORISCUS_SCAPUS_UNDETERMINED) \
-    E(S_ORISCUS_CAVUM_UNDETERMINED) \
     E(S_QUADRATUM) \
     E(S_PUNCTUM_INCLINATUM_UNDETERMINED) \
     /* those shapes are for now used only in gregoriotex */ \
@@ -183,7 +178,11 @@
     A(_SEMI_CIRCULUS_REVERSUS, 0x07) \
     /* signs of a bar */ \
     A(_BAR_H_EPISEMA, 0x08) \
-    X(_V_EPISEMA_BAR_H_EPISEMA, 0x18)
+    A(_V_EPISEMA_BAR_H_EPISEMA, 0x18) \
+    /* musica ficta */ \
+    A(_MUSICA_FICTA_FLAT, 0x09) \
+    A(_MUSICA_FICTA_NATURAL, 0x0a) \
+    X(_MUSICA_FICTA_SHARP, 0x0b)
 ENUM(gregorio_sign, GREGORIO_SIGN);
 
 /* the different spaces */
@@ -283,7 +282,8 @@
     E(G_VIRGA_REVERSA) \
     E(G_SALICUS) \
     E(G_SALICUS_FLEXUS) \
-    E(G_VIRGA_STRATA) \
+    E(G_PES_ASCENDENS_ORISCUS) \
+    E(G_PES_DESCENDENS_ORISCUS) \
     E(G_TORCULUS_LIQUESCENS) \
     /* additional glyph types, necessary for determination */ \
     E(G_PORRECTUS_NO_BAR) \
@@ -318,6 +318,10 @@
     E(ST_FIRST_SYLLABLE) \
     E(ST_FIRST_SYLLABLE_INITIAL) \
     E(ST_SYLLABLE_INITIAL) \
+    /* protrusion is implemented a PROTRUSION_FACTOR followed by a PROTRUSION;
+     * an automatic protrusion will have a verbatim TeX macro as factor */ \
+    E(ST_PROTRUSION_FACTOR) \
+    E(ST_PROTRUSION) \
     L(ST_SENTINEL) /* a temporary style to signify the end of a syllable */
 ENUM(grestyle_style, GRESTYLE_STYLE);
 
@@ -380,6 +384,15 @@
     X(HVB_U_HIGH, 5)
 ENUM(gregorio_hepisema_vbasepos, GREGORIO_HEPISEMA_VBASEPOS);
 
+/* these may be used as bit fields, with LEDGER_EXPLICIT and LEDGER_DRAWN being
+ * the bits */
+#define GREGORIO_LEDGER_SPECIFICITY(A,E,X,L) \
+    A(LEDGER_SUPPOSED, 0) \
+    A(LEDGER_EXPLICIT, 1) \
+    A(LEDGER_DRAWN, 2) \
+    X(LEDGER_EXPLICITLY_DRAWN, 3)
+ENUM(gregorio_ledger_specificity, GREGORIO_LEDGER_SPECIFICITY);
+
 typedef struct gregorio_extra_info {
     char *ad_hoc_space_factor;
     ENUM_BITFIELD(gregorio_bar) bar:4;
@@ -391,8 +404,9 @@
 } gregorio_extra_info;
 
 typedef struct gregorio_clef_info {
-    unsigned char line;
-    unsigned char secondary_line;
+    signed char line;
+    signed char secondary_line;
+    signed char pitch_difference;
     ENUM_BITFIELD(gregorio_clef) clef:1;
     bool flatted:1;
     ENUM_BITFIELD(gregorio_clef) secondary_clef:1;
@@ -429,9 +443,6 @@
     /* choral sign is a letter that appears next to a note in some choral
      * scores we put it as char* because sometimes two letters appear */
     char *choral_sign;
-    /* a string containing a possible TeX verbatim; necessary during
-     * structure generation. */
-    char *texverb;
     union {
         /* note is used for GRE_NOTE */
         struct {
@@ -446,7 +457,8 @@
             /* liquescentia is the liquescence on the note, it is not really
              * used in the final score, but it is, like type, used in the
              * determination of glyphs. */
-            ENUM_BITFIELD(gregorio_liquescentia) liquescentia:8;
+            ENUM_BITFIELD(gregorio_liquescentia) liquescentia:7;
+            bool is_cavum:1;
         } note;
         /* clef is used for GRE_CLEF */
         struct gregorio_clef_info clef;
@@ -455,6 +467,9 @@
     } u;
 
     /* these go to the end for structure alignment */
+    /* index to a string containing a possible TeX verbatim; necessary during
+     * structure generation. */
+    unsigned short texverb;
     unsigned short src_line, src_column, src_offset;
     unsigned short he_adjustment_index[2];
 
@@ -485,12 +500,11 @@
     ENUM_BITFIELD(grehepisema_size) h_episema_below_size:2;
     bool h_episema_above_connect:1;
     bool h_episema_below_connect:1;
-    bool supposed_high_ledger_line:1;
-    bool supposed_low_ledger_line:1;
-    /* the "explicit" flags indicate that the "supposed" flags contain values
-     * that were explicitly specified in the gabc file */
-    bool explicit_high_ledger_line:1;
-    bool explicit_low_ledger_line:1;
+    /* the "specificity" field indicates how to interpret the line flag */
+    bool high_ledger_line:1;
+    ENUM_BITFIELD(gregorio_ledger_specificity) high_ledger_specificity:2;
+    bool low_ledger_line:1;
+    ENUM_BITFIELD(gregorio_ledger_specificity) low_ledger_specificity:2;
     bool is_lower_note:1;
     bool is_upper_note:1;
     ENUM_BITFIELD(gregorio_vposition) mora_vposition:2;
@@ -505,9 +519,6 @@
     /* two pointer to make a chained list */
     struct gregorio_glyph *previous;
     struct gregorio_glyph *next;
-    /* a string containing a possible TeX verbatim; necessary during structure
-     * generation. */
-    char *texverb;
     union {
         /* glyph is used for GRE_GLYPH */
         struct {
@@ -520,12 +531,15 @@
             ENUM_BITFIELD(gregorio_glyph_type) glyph_type:8;
             /* liquescentia is really used, because that will determine the
              * shape we will have to use. */
-            ENUM_BITFIELD(gregorio_liquescentia) liquescentia:8;
+            ENUM_BITFIELD(gregorio_liquescentia) liquescentia:7;
+            bool is_cavum:1;
         } notes;
         union gregorio_misc_element_info misc;
     } u;
 
-    /* characters go to the end for structure alignment */
+    /* index to a string containing a possible TeX verbatim; necessary during
+     * structure generation. */
+    unsigned short texverb;
 
     /* type can have the values explained in the comment just above. */
     ENUM_BITFIELD(gregorio_type) type:8;
@@ -540,9 +554,6 @@
     /* pointers to the next and previous elements. */
     struct gregorio_element *previous;
     struct gregorio_element *next;
-    /* a string containing a possible TeX verbatim; necessary during structure
-     * generation. */
-    char *texverb;
     /* The nabc string */
     char **nabc;
     /* we put it here to get the length of the array here too */
@@ -554,9 +565,11 @@
         union gregorio_misc_element_info misc;
     } u;
 
-    /* type can have the values GRE_ELEMENT, GRE_BAR, GRE_C_KEY_CHANGE,
-     * GRE_F_KEY_CHANGE, GRE_END_OF_LINE, GRE_SPACE, GRE_TEXVERB_ELEMENT
-     * or GRE_NLBA */
+    /* index to a string containing a possible TeX verbatim; necessary during
+     * structure generation. */
+    unsigned short texverb;
+    /* type can have the values GRE_ELEMENT, GRE_BAR, GRE_CLEF, GRE_CUSTOS,
+     * GRE_END_OF_LINE, GRE_SPACE, GRE_TEXVERB_ELEMENT or GRE_NLBA */
     ENUM_BITFIELD(gregorio_type) type:8;
 } gregorio_element;
 
@@ -654,6 +667,7 @@
     ENUM_BITFIELD(gregorio_word_position) position:3;
     bool first_word:1;
     bool forced_center:1;
+    bool clear:1;
 } gregorio_syllable;
 
 /* Stores a header in a singly-linked list */
@@ -693,7 +707,6 @@
     char *annotation[MAX_ANNOTATIONS];
     /* field giving informations on the initial (no initial, normal initial
      * or two lines initial) */
-    signed char initial_style; /* DEPRECATED for removal in 5.0 */
     size_t nabc_lines;
     char *user_notes;
     /* the determination method (maximal ambitus, etc.) */
@@ -746,9 +759,6 @@
 
 #define MONOPHONY 0
 
-/* the different initial styles - DEPRECATED for removal in 5.0 */
-#define INITIAL_NOT_SPECIFIED -1
-
 #define USELESS_VALUE 0
 
 static __inline bool is_puncta_inclinata(char glyph)
@@ -799,7 +809,7 @@
         const gregorio_scanner_location *loc);
 void gregorio_add_glyph(gregorio_glyph **current_glyph,
         gregorio_glyph_type type, gregorio_note *first_note,
-        gregorio_liquescentia liquescentia);
+        gregorio_liquescentia liquescentia, bool is_cavum);
 void gregorio_add_element(gregorio_element **current_element,
         gregorio_glyph *first_glyph);
 void gregorio_add_syllable(gregorio_syllable **current_syllable,
@@ -809,10 +819,11 @@
         gregorio_word_position position, char *abovelinestext,
         gregorio_tr_centering translation_type, gregorio_nlba no_linebreak_area,
         gregorio_euouae euouae, const gregorio_scanner_location *loc,
-        bool first_word);
+        bool first_word, bool clear);
 void gregorio_add_special_sign(gregorio_note *current_note, gregorio_sign sign);
 void gregorio_change_shape(gregorio_note *note, gregorio_shape shape,
         bool legacy_oriscus_orientation);
+void gregorio_add_cavum(gregorio_note *note);
 void gregorio_position_h_episema_above(gregorio_note *note, signed char height,
         bool connect);
 void gregorio_position_h_episema_below(gregorio_note *note, signed char height,
@@ -828,23 +839,27 @@
 void gregorio_free_voice_infos(gregorio_voice_info *voice_info);
 void gregorio_free_one_note(gregorio_note **note);
 void gregorio_free_one_glyph(gregorio_glyph **glyph);
+void gregorio_free_one_element(gregorio_element **element);
 void gregorio_free_score(gregorio_score *score);
 void gregorio_free_characters(gregorio_character *current_character);
 void gregorio_go_to_first_character(const gregorio_character **character);
 void gregorio_add_clef_as_glyph(gregorio_glyph **current_glyph,
-        gregorio_clef_info clef, char *texverb);
+        gregorio_clef_info clef, unsigned short texverb);
 void gregorio_add_pitched_element_as_glyph(gregorio_glyph **current_glyph,
-        gregorio_type type, signed char pitch, bool force_pitch, char *texverb);
+        gregorio_type type, signed char pitch, bool force_pitch,
+        unsigned short texverb);
 void gregorio_add_unpitched_element_as_glyph(gregorio_glyph **current_glyph,
         gregorio_type type, gregorio_extra_info *info, gregorio_sign sign,
-        char *texverb);
+        unsigned short texverb);
 void gregorio_add_end_of_line_as_note(gregorio_note **current_note,
         bool eol_ragged, bool eol_forces_custos, bool eol_forces_custos_on,
         const gregorio_scanner_location *loc);
-void gregorio_add_custo_as_note(gregorio_note **current_note,
+void gregorio_add_custos_as_note(gregorio_note **current_note,
         const gregorio_scanner_location *loc);
 void gregorio_add_manual_custos_as_note(gregorio_note **current_note,
         signed char pitch, const gregorio_scanner_location *loc);
+void gregorio_add_suppress_custos_as_note(gregorio_note **current_note,
+        const gregorio_scanner_location *loc);
 void gregorio_add_clef_as_note(gregorio_note **current_note,
         gregorio_clef clef, signed char clef_line, bool flatted,
         const gregorio_scanner_location *loc);
@@ -855,8 +870,8 @@
 void gregorio_add_space_as_note(gregorio_note **current_note,
         gregorio_space space, char *factor,
         const gregorio_scanner_location *loc);
-void gregorio_add_texverb_as_note(gregorio_note **current_note, char *str,
-        gregorio_type type, const gregorio_scanner_location *loc);
+unsigned short gregorio_add_texverb_as_note(gregorio_note **current_note,
+        char *str, gregorio_type type, const gregorio_scanner_location *loc);
 void gregorio_add_nlba_as_note(gregorio_note **current_note,
         gregorio_nlba type, const gregorio_scanner_location *loc);
 void gregorio_start_autofuse(gregorio_note **current_note,
@@ -867,7 +882,8 @@
 void gregorio_add_cs_to_note(gregorio_note *const*current_note, char *str,
         bool nabc);
 void gregorio_add_misc_element(gregorio_element **current_element,
-        gregorio_type type, gregorio_misc_element_info *info, char *texverb);
+        gregorio_type type, gregorio_misc_element_info *info,
+        unsigned short texverb);
 void gregorio_set_score_annotation(gregorio_score *score, char *annotation);
 void gregorio_set_score_staff_lines(gregorio_score *score, char staff_lines);
 void gregorio_add_score_header(gregorio_score *score, char *name,
@@ -894,6 +910,8 @@
         gregorio_hepisema_vbasepos vbasepos, char *nudge);
 gregorio_hepisema_adjustment *gregorio_get_hepisema_adjustment(
         unsigned short index);
+const char *gregorio_texverb(unsigned short index);
+void gregorio_change_texverb(unsigned short index, char *texverb);
 
 static __inline void gregorio_go_to_first_character_c(gregorio_character **character)
 {
@@ -944,4 +962,17 @@
     return (clef == CLEF_C)? 'c' : 'f';
 }
 
+static __inline signed char gregorio_adjust_pitch_into_staff(
+        const gregorio_score *score, signed char pitch)
+{
+    while (pitch < LOWEST_PITCH) {
+        pitch += 7;
+    }
+    while (pitch > score->highest_pitch) {
+        pitch -= 7;
+    }
+    assert(pitch >= LOWEST_PITCH && pitch <= score->highest_pitch);
+    return pitch;
+}
+
 #endif

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/struct_iter.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/struct_iter.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/struct_iter.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This header defines the Gregorio data structures and functions.
  *
- * Copyright (C) 2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2016-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *
@@ -32,6 +32,16 @@
 
 #include "struct.h"
 
+/* This enum defines bitfields selecting the node types that should be passed
+ * to end_item in gregorio_from_note_to_note */
+typedef enum {
+    GRESTRUCT_NONE = 0,
+    GRESTRUCT_NOTE = 1 << 0,
+    GRESTRUCT_GLYPH = 1 << 1,
+    GRESTRUCT_ELEMENT = 1 << 2,
+    GRESTRUCT_SYLLABLE = 1 << 3
+} gregorio_note_iter_item_type;
+
 typedef struct {
     gregorio_syllable *syllable;
     gregorio_element *element;
@@ -41,10 +51,14 @@
 
 static __inline void gregorio_from_note_to_note(
         const gregorio_note_iter_position *const start,
-        const gregorio_note_iter_position *const end,
+        const gregorio_note_iter_position *const end, bool include_end,
         void (*const visit)(const gregorio_note_iter_position *, void *),
-        void *data)
+        void (*const end_item)(const gregorio_note_iter_position *,
+            gregorio_note_iter_item_type, void *),
+        const gregorio_note_iter_item_type desired_iter_items, void *data)
 {
+    /* Note: include_end is effectively ignored if end is NULL */
+
     gregorio_note_iter_position p = *start;
 
     while (p.syllable) {
@@ -62,22 +76,89 @@
                             p.note = p.glyph->u.notes.first_note;
                         }
                         while (p.note) {
-                            if (p.note->type == GRE_NOTE) {
+                            bool at_end = (end && p.note == end->note);
+
+                            if (p.note->type == GRE_NOTE
+                                    && (!at_end || include_end)) {
                                 visit(&p, data);
                             }
 
-                            if (end && p.note == end->note) {
+                            if (at_end) {
+                                if (end_item) {
+                                    /* in 4.2.0, this code is never hit, as
+                                     * end_item will only be supplied from
+                                     * gregorio_for_each_note, which supplies
+                                     * NULL for end */
+                                    /* LCOV_EXCL_START */
+                                    /* to enable the real code, delete this
+                                     * assertion: */
+                                    gregorio_fail(gregorio_from_note_to_note,
+                                            "unused code path");
+                                    if (desired_iter_items & GRESTRUCT_NOTE) {
+                                        end_item(&p, GRESTRUCT_NOTE, data);
+                                    }
+                                    if (desired_iter_items & GRESTRUCT_GLYPH) {
+                                        end_item(&p, GRESTRUCT_GLYPH, data);
+                                    }
+                                    if (desired_iter_items
+                                            & GRESTRUCT_ELEMENT) {
+                                        end_item(&p, GRESTRUCT_ELEMENT, data);
+                                    }
+                                    if (desired_iter_items
+                                            & GRESTRUCT_SYLLABLE) {
+                                        end_item(&p, GRESTRUCT_SYLLABLE, data);
+                                    }
+                                }
+                                /* LCOV_EXCL_END */
                                 return;
                             }
 
+                            if (end_item
+                                    && (desired_iter_items & GRESTRUCT_NOTE)) {
+                                /* in 4.2.0, this code is never hit, as the only
+                                 * usage that gets through to here does not
+                                 * include GRESTRUCT_NOTE in desired_iter_items */
+                                /* LCOV_EXCL_START */
+                                /* to enable the real code, delete this
+                                 * assertion: */
+                                gregorio_fail(gregorio_from_note_to_note,
+                                        "unused code path");
+                                end_item(&p, GRESTRUCT_NOTE, data);
+
+                            }
+                            /* LCOV_EXCL_STOP */
                             p.note = p.note->next;
                         } /* note */
                     }
+                    if (end_item && (desired_iter_items & GRESTRUCT_GLYPH)) {
+                        /* in 4.2.0, this code is never hit, as the only usage
+                         * that gets through to here does not include
+                         * GRESTRUCT_GLYPH in desired_iter_items */
+                        /* LCOV_EXCL_START */
+                        /* to enable the real code, delete this assertion: */
+                        gregorio_fail(gregorio_from_note_to_note,
+                                "unused code path");
+                        end_item(&p, GRESTRUCT_GLYPH, data);
+                    }
+                    /* LCOV_EXCL_STOP */
                     p.glyph = p.glyph->next;
                 } /* glyph */
             }
+            if (end_item && (desired_iter_items & GRESTRUCT_ELEMENT)) {
+                end_item(&p, GRESTRUCT_ELEMENT, data);
+            }
             p.element = p.element->next;
         } /* element */
+        if (end_item && (desired_iter_items & GRESTRUCT_SYLLABLE)) {
+            /* in 4.2.0, this code is never hit, as the only usage that gets
+             * through to here does not include GRESTRUCT_SYLLABLE in
+             * desired_iter_items */
+            /* LCOV_EXCL_START */
+            /* to enable the real code, delete this assertion: */
+            gregorio_fail(gregorio_from_note_to_note, "unused code path");
+            end_item(&p, GRESTRUCT_SYLLABLE, data);
+        }
+        /* LCOV_EXCL_STOP */
         p.syllable = p.syllable->next_syllable;
     } /* syllable */
 }
@@ -84,7 +165,9 @@
 
 static __inline void gregorio_for_each_note(const gregorio_score *score,
         void (*const visit)(const gregorio_note_iter_position *, void *),
-        void *data)
+        void (*const end_item)(const gregorio_note_iter_position *,
+            gregorio_note_iter_item_type, void *),
+        const gregorio_note_iter_item_type desired_iter_items, void *data)
 {
     gregorio_note_iter_position p = {
         /* .syllable = */ NULL,
@@ -95,7 +178,8 @@
 
     p.syllable = score->first_syllable;
 
-    gregorio_from_note_to_note(&p, NULL, visit, data);
+    gregorio_from_note_to_note(&p, NULL, true, visit, end_item,
+            desired_iter_items, data);
 }
 
 #endif

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/support.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/support.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/support.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This file contains miscellaneous support functions.
  *
- * Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/support.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/support.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/support.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This header prototypes the miscellaneous support functions.
  *
- * Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
  * 
  * This file is part of Gregorio.
  *

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/unicode.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/unicode.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/unicode.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This file contains functions providing UTF-8 support.
  *
- * Copyright (C) 2008-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2008-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/unicode.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/unicode.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/unicode.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This header prototypes the UTF-8 support functions.
  *
- * Copyright (C) 2008-2016 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2008-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/utf8strings.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/utf8strings.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/utf8strings.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This header file contains UTF-8 encoded strings used by Gregorio
  *
- * Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/utf8strings.h.in
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/utf8strings.h.in	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/utf8strings.h.in	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This header file contains UTF-8 encoded strings used by Gregorio
  *
- * Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules-l.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules-l.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules-l.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -546,7 +546,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This file implements the vowel rule lexer.
  *
- * Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules-y.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules-y.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules-y.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -76,7 +76,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This file implements the vowel rule parser.
  *
- * Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This program 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

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This header shares definitions between the vowel parser and lexer.
  *
- * Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules.l
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules.l	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules.l	2017-04-06 05:08:53 UTC (rev 43706)
@@ -3,7 +3,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This file implements the vowel rule lexer.
  *
- * Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules.y
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules.y	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules.y	2017-04-06 05:08:53 UTC (rev 43706)
@@ -3,7 +3,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This file implements the vowel rule parser.
  *
- * Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This program 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

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel.c
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel.c	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel.c	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This file implements vowel rule handling (aside from parsing).
  *
- * Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *
@@ -82,7 +82,7 @@
 }
 
 static bool character_set_contains(character_set *const set,
-        const grewchar vowel, character_set **const next)
+        const grewchar character, character_set **const next)
 {
     unsigned int index;
     assert(set);
@@ -90,9 +90,9 @@
     if (next) {
         *next = NULL;
     }
-    for (index = ((unsigned long)vowel) & set->mask; set->table[index];
+    for (index = ((unsigned long)character) & set->mask; set->table[index];
             index = (index + 1) & set->mask) {
-        if (set->table[index] == vowel) {
+        if (set->table[index] == character) {
             if (next && set->next) {
                 *next = set->next[index];
             }
@@ -103,18 +103,18 @@
 }
 
 static __inline void character_set_put(character_set *const set,
-        const grewchar vowel, character_set *next)
+        const grewchar character, character_set *next)
 {
     unsigned int index;
 
     assert(set);
 
-    index = ((unsigned long)vowel) & set->mask;
+    index = ((unsigned long)character) & set->mask;
     while (set->table[index]) {
         index = (index + 1) & set->mask;
     }
 
-    set->table[index] = vowel;
+    set->table[index] = character;
     if (set->next) {
         set->next[index] = next;
     }
@@ -161,11 +161,11 @@
 }
 
 static character_set *character_set_add(character_set *const set,
-        const grewchar vowel)
+        const grewchar character)
 {
     character_set *next = NULL;
 
-    if (!character_set_contains(set, vowel, &next)) {
+    if (!character_set_contains(set, character, &next)) {
         if (((++(set->size) * 10) / set->bins) >= 7) {
             character_set_grow(set);
         }
@@ -174,7 +174,7 @@
             next = character_set_new(true);
         }
 
-        character_set_put(set, vowel, next);
+        character_set_put(set, character, next);
     }
 
     return next;
@@ -377,9 +377,11 @@
             prefix_buffer[bufpos] = *subject;
             if (character_set_contains(vowel_table, *subject, NULL)) {
                 /* we found a vowel */
-                if (!character_set_contains(vowel_table, *(subject + 1), NULL)
+                if ((!character_set_contains(vowel_table, *(subject + 1), NULL)
+                            && *(subject + 1) != GREVOWEL_ELISION_MARK)
                         || !is_in_prefix(bufpos)) {
-                    /* no vowel after or not in prefix, so this is the start */
+                    /* no vowel/elision after, or not in prefix, so this is the
+                     * start */
                     *start = i;
                     state = VWL_WITHIN;
                 }

Modified: trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel.h
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel.h	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel.h	2017-04-06 05:08:53 UTC (rev 43706)
@@ -2,7 +2,7 @@
  * Gregorio is a program that translates gabc files to GregorioTeX
  * This header prototypes the vowel handling data structures and entry points.
  *
- * Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md)
+ * Copyright (C) 2015-2017 The Gregorio Project (see CONTRIBUTORS.md)
  *
  * This file is part of Gregorio.
  *
@@ -27,6 +27,9 @@
 #include "bool.h"
 #include "unicode.h"
 
+/* Use unicode 0xfffe, which is guaranteed not to be a character */
+#define GREVOWEL_ELISION_MARK ((grewchar)0xfffe)
+
 typedef enum rulefile_parse_status {
     RFPS_NOT_FOUND = 0,
     RFPS_FOUND,

Modified: trunk/Build/source/texk/gregorio/gregorio-src/windows/gregorio-resources.rc
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio-src/windows/gregorio-resources.rc	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio-src/windows/gregorio-resources.rc	2017-04-06 05:08:53 UTC (rev 43706)
@@ -1,7 +1,7 @@
 IDI_ICON1 ICON DISCARDABLE "gregorio.ico"
 1 VERSIONINFO
-FILEVERSION     4,2,0,30
-PRODUCTVERSION  4,2,0,30
+FILEVERSION     5,0,0,21
+PRODUCTVERSION  5,0,0,21
 BEGIN
   BLOCK "StringFileInfo"
   BEGIN
@@ -9,12 +9,12 @@
     BEGIN
       VALUE "CompanyName", "Gregorio project"
       VALUE "FileDescription", "Gregorio"
-      VALUE "FileVersion", "4.2.0"
+      VALUE "FileVersion", "5.0.0-rc1"
       VALUE "InternalName", "gregorio"
       VALUE "LegalCopyright", "See COPYING in the installation directory."
       VALUE "OriginalFilename", "gregorio.exe"
       VALUE "ProductName", "Gregorio"
-      VALUE "ProductVersion", "4.2.0"
+      VALUE "ProductVersion", "5.0.0-rc1"
     END
   END
 

Modified: trunk/Build/source/texk/gregorio/gregorio.test
===================================================================
--- trunk/Build/source/texk/gregorio/gregorio.test	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/gregorio.test	2017-04-06 05:08:53 UTC (rev 43706)
@@ -10,8 +10,13 @@
 
 DOCSRC=$srcdir/$GREGORIO_TREE/doc
 
-gregorio=gregorio
+#
+# Does FILENAME_VERSION have a value here? If it does, the
+# next line is not needed
+FILENAME_VERSION=5_0_0-rc1
 
+gregorio=gregorio-$FILENAME_VERSION
+
 failed=
 
 echo "*** gregorio --version" \

Modified: trunk/Build/source/texk/gregorio/version.ac
===================================================================
--- trunk/Build/source/texk/gregorio/version.ac	2017-04-06 00:32:26 UTC (rev 43705)
+++ trunk/Build/source/texk/gregorio/version.ac	2017-04-06 05:08:53 UTC (rev 43706)
@@ -8,4 +8,4 @@
 dnl --------------------------------------------------------
 dnl
 dnl  m4-include this file to define the current gregorio version
-m4_define([gregorio_version], [4.2.0])
+m4_define([gregorio_version], [5.0.0-rc1])



More information about the tex-live-commits mailing list