Tue Mar 13 15:29:16 UTC 2012 mantoniotti@common-lisp.net * Added TIMESTAMP. Tue Mar 13 15:28:28 UTC 2012 mantoniotti@common-lisp.net * Copyright updated. Tue Mar 13 15:28:15 UTC 2012 mantoniotti@common-lisp.net * Copyright updated. Thu Jun 16 00:10:47 UTC 2011 mantoniotti@common-lisp.net * Added "CL-UNIFICATION" as package nickname to match the .asd and .system specs. Sat Apr 2 04:39:32 UTC 2011 rbrown@common-lisp.net * Use *unify-string-case-sensitive-p* consistently. Change the documentation. Sat Apr 2 04:19:09 UTC 2011 rbrown@common-lisp.net * match-block.lisp: Use &body in match-case and matchf-case so code that uses them is correctly indented by editors. Sat Apr 2 04:16:51 UTC 2011 mantoniotti@common-lisp.net * Copyright updated. Sat Apr 2 04:11:54 UTC 2011 mantoniotti@common-lisp.net * Updated copyright info and a News. Sat Apr 2 04:09:17 UTC 2011 mantoniotti@common-lisp.net * ChangeLog updated. Sat Apr 2 04:08:13 UTC 2011 mantoniotti@common-lisp.net * Remove Thumbs.db and friends Sat Apr 2 04:05:30 UTC 2011 mantoniotti@common-lisp.net * Exported a few more symbols. Sat Apr 2 04:05:18 UTC 2011 mantoniotti@common-lisp.net * Minor changes (added COPYING information and other minutiae). Sat Apr 2 04:01:24 UTC 2011 mantoniotti@common-lisp.net * Changed some environment functions and improved the DUMP-* ones. Sat Apr 2 03:51:38 UTC 2011 mantoniotti@common-lisp.net * Acknowledgements updated. Sat Apr 2 03:50:19 UTC 2011 rbrown@common-lisp.net * Delete trailing whitespace. In lambda-list-parsing.lisp this fixes a bug with ~@ format directives. Sat Apr 2 02:51:32 UTC 2011 rbrown@common-lisp.net * unifier.lisp: Allow vectors to unify with sequence templates. test/unification-tests.lisp: new test to verify the change Sat Apr 2 02:49:30 UTC 2011 rbrown@common-lisp.net * Add entry for cl-unification-test.asd. Sat Apr 2 02:47:50 UTC 2011 rbrown@common-lisp.net * Add cl-unification-test.asd Make (asdf:test-system 'cl-unification) work. Sat Apr 2 02:37:58 UTC 2011 rbrown@common-lisp.net * Make sure that classes referenced in #T forms are defined before the forms are read. This fixes compilation of file unification-tests.lisp. Tue Mar 29 23:22:33 UTC 2011 mantoniotti@common-lisp.net * Copyright dates updated. Tue Mar 29 23:20:53 UTC 2011 mantoniotti@common-lisp.net * ChangeLog updated. Tue Mar 29 22:59:37 UTC 2011 mantoniotti@common-lisp.net * Added debugging functions DUMP-FRAME and DUMP-ENVIRONMENT. Tue Jun 15 03:21:37 UTC 2010 pix@kepibu.org * Pull variable binding out of %match-expander I'd like to tell you this is part of a plan to simplify %match-expander, but in all honesty, the only reason I'm doing it is because I found myself thinking with-unification-variables would be a handy macro while working on a private extension to cl-unification, and I didn't want to duplicate the code. Sun Feb 7 08:42:39 UTC 2010 pix@kepibu.org * Marginally more straightforward? Sun Feb 7 07:40:23 UTC 2010 pix@kepibu.org * Declare ftype of find-variable-value and v? properly Sun Feb 7 07:33:38 UTC 2010 pix@kepibu.org * Fix export of lib-dependent symbols Sun Feb 7 07:30:06 UTC 2010 pix@kepibu.org * Specialization on the second arg of print-object is not allowed Fri Feb 5 09:30:48 UTC 2010 pix@kepibu.org * Whoops. Typo in test. Fri Feb 5 09:04:00 UTC 2010 pix@kepibu.org * Create a named-readtable if the named-readtables library is also loaded Because (in-readtable ...) is a beautiful thing. Fri Feb 5 09:02:42 UTC 2010 pix@kepibu.org * Add (enable-template-reader), so it is easy to turn on the template reader Useful when there are conflicts on #T, such as with closure-html. Fri Feb 5 08:58:50 UTC 2010 pix@kepibu.org * Export new MATCH* macros. Fri Feb 5 03:21:40 UTC 2010 pix@kepibu.org * Unified docstrings. Thu Feb 4 07:32:18 UTC 2010 pix@kepibu.org * Merge all MATCH* macros into a single, unified expansion function And, because it's now trivial, add MATCH-COND, MATCHF-COND, MATCH-ECASE, and MATCHF-ECASE. Still to do: Merge documentation of functions so there's less copy-pasta in the documentation strings. Thu Feb 4 07:31:47 UTC 2010 pix@kepibu.org * Duplicate nested match-case tests for matchf-case. Thu Feb 4 07:20:04 UTC 2010 pix@kepibu.org * Make "inner-error" and "outer-error" proper conditions. Wed Feb 3 09:56:58 UTC 2010 pix@kepibu.org * Make condition printable, for easier manually stepping through tests. Wed Feb 3 09:53:59 UTC 2010 pix@kepibu.org * These are no longer failures. Woo! Mon Jan 25 07:38:54 UTC 2010 pix@kepibu.org * Moar tests! Mon Jan 25 07:38:27 UTC 2010 pix@kepibu.org * Consider unexpected errors as test failures ...why is this not default behavior? Mon Jan 25 07:03:27 UTC 2010 pix@kepibu.org * (cond (a b) (c d) nil) isn't really valid Sat Jan 23 00:53:33 UTC 2010 pix@kepibu.org * How did .clbuild-skip-update even get /in/ the repo? Sat Jan 23 00:31:24 UTC 2010 pix@kepibu.org * Make tests file loadable Sat Jan 23 00:19:32 UTC 2010 pix@kepibu.org * DTRT when asdf-system-connections is available Thu Jan 21 01:56:47 UTC 2010 pix@kepibu.org * Rather than a new UNIFY** function, make UNIFY* work that way Let errors which are not UNIFICATION-FAILUREs find their way out of UNIFY*. Wed Jan 20 08:28:50 UTC 2010 pix@kepibu.org * Can't IN-PACKAGE without a previous DEFPACKAGE. Wed Jan 20 08:27:09 UTC 2010 pix@kepibu.org * Handle :case-sensitive properly If the first clause doesn't match due to mismatched case, it would roll down to the second clause, causing case-differing strings to erroneously match. By checking for case again, we can avoid this. Note, however, that this does not fix the similar but unrelated inconsistent usage of *unify-string-case-sensitive-p* and *unify-string-case-insensitive-p* (the former being used in the code and the latter appearing in documentation). That bug will remain until the canonical form is decided upon. Wed Jan 20 08:09:59 UTC 2010 pix@kepibu.org * Fix typo (connot -> cannot) Fri Jan 15 08:55:05 UTC 2010 pix@kepibu.org * Redefine MATCH-CASE in terms of MATCHING This both greatly simplifies the MATCH-CASE macro as well as its expansion. HOWEVER, this version is *NOT* 100% compatible with the previous version. Specifically, UNIFICATION-FAILUREs signalled from within clause-forms will /not/ cause the next unification clause to be attempted, but will instead propogate outward as the -case name suggests they should. That is, (ignore-errors (match-case ("foo") ("foo" (error 'unification-failure ...)) (t :default))) => :default ;; before patch => nil, # ;; after patch Fri Jan 15 08:49:26 UTC 2010 pix@kepibu.org * Only use one variable to store the unification environment in MATCHING Because of the way MATCHING expands, and what UNIFY* returns, each (setf #:env (unify* ...)) call will do one of two things: it will set #:env to NIL or it will set #:env to an ENVIRONMENT structure. If #:env is set to NIL--the same value it entered the (setf) with!--the COND will continue on to the next clause. If #:env is set to an ENVIRONMENT structure, none of the remaining (setf) clauses will be evaluated. Thus, because the variable will only ever be set to a non-nil value once, this should be perfectly safe. Fri Jan 15 07:59:02 UTC 2010 pix@kepibu.org * Make MATCHING agree with MATCH[F][-CASE] about the conditions of failure Rather than skipping to the next clause on any error, UNIFICATION-FAILUREs--and /only/ UNIFICATION-FAILUREs--skip to the next clause. Fri Jan 15 07:48:53 UTC 2010 pix@kepibu.org * Use &body instead of &rest for (arguably) prettier auto-indentation Tue Jan 12 09:20:28 UTC 2010 pix@kepibu.org * Fix (matching (otherwise ...)) (matching (otherwise ...)) expands into (cond (otherwise ...)), which generates an unbound-variable error when executed, because COND does not special-case OTHERWISE as CASE does. Tue Jan 12 09:08:23 UTC 2010 pix@kepibu.org * Extract the bits that wrap forms with bindings for template variables In some cases, this patch swaps the order of execution of %TEMPLATE-FOR-MATCH and COLLECT-TEMPLATE-VARS. I'm pretty sure this doesn't have any noticable effect, but thorough testing is probably wise. Tue Jan 12 08:37:44 UTC 2010 pix@kepibu.org * Use (unify* ...) rather than (ignore-errors (unify ...)) Same thing, so might as well use the convenience function. Tue Jan 12 08:03:54 UTC 2010 pix@kepibu.org * Extract template handling of MATCH[ING] into %TEMPLATE-FOR-MATCH Thu Dec 17 17:02:42 UTC 2009 mantoniotti * ChangeLog updated. Thu Dec 17 16:57:45 UTC 2009 mantoniotti * Patched to use Cl-PPCRE:SCAN-TO-STRINGS (thanks to Pixel // pinterface [a] gmail dot com). Thu Dec 17 16:44:46 UTC 2009 mantoniotti * Minor cosmetic changes. Thu Dec 17 16:43:51 UTC 2009 mantoniotti * Exported MATCHF-CASE. Thu Dec 17 16:43:12 UTC 2009 mantoniotti * Fixed a couple of problems with some accessors in the NUMBER, Fixed a couple of problems with some accessors in the NUMBER, STRUCTURE-OBJECT and STANDARD-OBJECT templates. Thu Dec 17 16:41:38 UTC 2009 mantoniotti * Added MATCHF* macros. Fri Apr 17 22:44:17 UTC 2009 mantoniotti * ChangeLog updated. Fri Apr 17 22:42:46 UTC 2009 mantoniotti * System definitions files (.asd and .system) modified in order to make System definitions files (.asd and .system) modified in order to make dependency form CL-PPCRE optional. Fri Apr 17 22:40:29 UTC 2009 mantoniotti * Removed REQUIRE of CL-PPCRE. Too brittle. Fri Apr 17 07:53:58 UTC 2009 mantoniotti * Added a few exports and changed the actual package name (i.e., I put Added a few exports and changed the actual package name (i.e., I put my money where my mouth is; the "published" package name is now a nickname). Fri Apr 17 07:52:25 UTC 2009 mantoniotti * Fixed a couple of snags. APPLY-SUBSTITUTION was not applied Fixed a couple of snags. APPLY-SUBSTITUTION was not applied recursively and it was barfing on numbers. Current version is still incomplete, but it serves as a template for further development. Wed Apr 15 14:33:35 UTC 2009 mantoniotti * ChangeLog updated. Wed Apr 15 10:24:28 UTC 2009 mantoniotti * Modified Files: Modified Files: test/unification-tests.lisp Added Files: lib-dependent/cl-ppcre-template.lisp The cl-ppcre-template reuses E. Weitz's wonderful CL-PPCRE library to provide a seamless (YMMV) reuse of regular expressions within CL-UNIFICATION. Wed Apr 15 10:18:59 UTC 2009 mantoniotti * Added LAMBDA-TEMPLATE. Wed Apr 15 10:17:48 UTC 2009 mantoniotti * Added some functionality to extract all variables and/or all values Added some functionality to extract all variables and/or all values from an environment or a frame. Wed Apr 15 10:16:24 UTC 2009 mantoniotti * Added MATCHF (whose name may change) to simplify the Added MATCHF (whose name may change) to simplify the 'destructuring-bind'-like syntax and behavior of the matching facilities. Wed Apr 15 10:14:59 UTC 2009 mantoniotti * Dates updated. Wed Apr 15 10:14:24 UTC 2009 mantoniotti * Major API change to 'unify'. It now accepts keywords. Old code Major API change to 'unify'. It now accepts keywords. Old code shouls not be affected, but new code is now more flexible. Look the the STRING and (new) CHARACTER methods to see how this change is affecting the code. Wed Apr 15 10:12:22 UTC 2009 mantoniotti * Some 'diff' unfathomable change happened. Wed Apr 15 10:10:25 UTC 2009 mantoniotti * Added exports of a few symbols. Wed Apr 15 10:06:40 UTC 2009 mantoniotti * Fixed a few snags and added "lib-dependent" module. Wed Apr 15 10:05:58 UTC 2009 mantoniotti * Added some functionality and comments. Sun Jul 13 13:36:42 UTC 2008 mantoniotti tagged rev-1_0-cleaned-up Sun Jul 13 13:36:42 UTC 2008 mantoniotti * Changelog updated. Sun Jul 13 13:33:48 UTC 2008 mantoniotti * Added credits to a few people. Missing ones should bug the maintainer :) Sun Jul 13 13:30:28 UTC 2008 mantoniotti * Copyright dates updated. Sun Jul 13 13:28:48 UTC 2008 mantoniotti * Cleaning up. Cleaning up. Committing in . Removed Files: unification.asd unification.system Sun Jul 13 13:26:38 UTC 2008 mantoniotti * Clenaing up. Clenaing up. Committing in . Removed Files: templates-hierarchy-saved.lisp Sun Jul 13 13:20:01 UTC 2008 mantoniotti * Instructions updated. Sun Jul 13 13:17:29 UTC 2008 mantoniotti * Copyright dates updated. Sun Jul 13 13:14:56 UTC 2008 mantoniotti * Added file. Sun Jul 13 13:10:48 UTC 2008 mantoniotti * Some modification added. Exported symbols and reverted Some modification added. Exported symbols and reverted reader macro #T to construct template instances at read time. Added MAKE-LOAD-FORM method for templates which should fix problem with SBCL. Committing in . Modified Files: substitutions.lisp templates-hierarchy.lisp unification-package.lisp variables.lisp Sun Jul 13 12:51:14 UTC 2008 mantoniotti * Added explicit :source-extension to accomodate Allegro CL. Thu Jul 10 17:39:16 UTC 2008 mantoniotti * Removed EXPORT of APPLY-SUBSTITUTION as it is already in the DEFPACKAGE. Fri Nov 9 13:56:40 UTC 2007 mantoniotti * Changed the position of the disclaimer. Fri Nov 9 13:47:00 UTC 2007 mantoniotti * ChangeLog updated. Fri Nov 9 13:43:20 UTC 2007 mantoniotti * Made several changes to improve MATCH-CASE (following a note from Ivan Made several changes to improve MATCH-CASE (following a note from Ivan Boldyrev from a long time ago), MATCHING and MATCH. Else-clauses are now handled correctly (AFAICT). Single variable templates in MATCH, MATCH-CASE and MATCHING clauses do not need to be quoted. MATCHING was generating one gensym'ed variable per clause without creating an appropriate enclosing LET. This is now fixed. Fri Nov 9 13:35:55 UTC 2007 mantoniotti * Changed the top comment and added a (:copier nil) option to the Changed the top comment and added a (:copier nil) option to the ENVIRONMENT defstruct, as COPY-ENVIRONMENT is defined later in the file. Fri Nov 9 13:34:18 UTC 2007 mantoniotti * Added the new system building files with more meaningful names Added the new system building files with more meaningful names w.r.t. the name of the library. Fri Nov 9 13:30:53 UTC 2007 mantoniotti * Marked the two system building files as 'obsolete', before removing Marked the two system building files as 'obsolete', before removing them from the repository. The new files are prefixed by 'cl-'. Mon May 21 17:12:58 UTC 2007 mantoniotti * ChangeLog updated. Mon May 21 17:11:42 UTC 2007 mantoniotti * Updated copyrights dates and changed a few instructions in the Updated copyrights dates and changed a few instructions in the INSTALLATION file. Mon May 21 17:10:26 UTC 2007 mantoniotti * Updated copyrights dates. Mon May 21 16:55:57 UTC 2007 mantoniotti * ChangeLog updated. Mon May 21 12:33:05 UTC 2007 mantoniotti * See previous message. Mon May 21 12:29:24 UTC 2007 mantoniotti * Added file 'apply-substitition.lisp' with a few new functions that are Added file 'apply-substitition.lisp' with a few new functions that are a start for the variable substitition operation. New fixes to the MATCH and MATCH-CASE macros. They should now work as advertised. Minor changes to other files: added exports to package file, fixed .system and .asd files. Wed Jul 19 21:52:34 UTC 2006 mantoniotti * Fixed two problems with the unifier machinery. Fixed two problems with the unifier machinery. The first one had to do with the matching of NIL against SYMBOL and LIST in several places: essentially, the problem is incongruencies in the results of COMPUTE-APPLICABLE-METHODS in these cases. I think I caught most of them: unification of lists and the occur-check were the obvious places where things went awry. The second problem had to do with the reader macro #T. The original code generated an object at read time, which is not such a good idea. Now the code generates a call to MAKE-TEMPLATE with is evaluated later. Incidentally, the reader macro function is now called |sharp-T-reader|, in order to placate Emacs fontification. Modified Files: templates-hierarchy.lisp unifier.lisp Wed Jul 19 20:28:49 UTC 2006 mantoniotti * Added missing export. Tue Oct 25 19:17:33 UTC 2005 mantoniotti * Fixed problem with the unification of a list with a Fixed problem with the unification of a list with a SEQUENCE-TEMPLATE. The implementation was not checking that the length of the list was compatible with the length of the required elements in the template. Apart from that, keyword matching is still unimplemented. Tue Oct 25 19:08:15 UTC 2005 mantoniotti * Fixed problem with checking the presence of T and OTHERWISE clauses in Fixed problem with checking the presence of T and OTHERWISE clauses in MATCHING. Mon Jul 25 15:15:08 UTC 2005 mantoniotti * Minor cleanup. Fri May 20 16:41:16 UTC 2005 mantoniotti * Fixed typos. Fri May 20 16:38:06 UTC 2005 mantoniotti * Fixed bug in documentation. Fri May 20 16:33:24 UTC 2005 mantoniotti * Page updated. Fri May 20 16:27:05 UTC 2005 mantoniotti * Incremental change to page. Fri May 20 16:18:33 UTC 2005 mantoniotti * Fixed a documentation bug. Fixed a documentation bug. Thanks to Norman Werner for spotting it. Fri May 20 15:47:44 UTC 2005 mantoniotti * Added link to "Mailing Lists" page. Fri May 20 15:19:53 UTC 2005 mantoniotti * Fixed two major bugs reported by Norman Werver. Unification of Fixed two major bugs reported by Norman Werver. Unification of strings and symbols and of numers and symbols was not recurring on VAR-UNIFY, as required; thus (unify '(?x ?x) '("asd" "qweert")) and (unify '(foo ?x baz) '(foo 42 ?x)) would succed. The two cases are now fixed. Thu May 19 23:00:18 UTC 2005 mantoniotti * Year updated. Thu May 19 22:58:34 UTC 2005 mantoniotti * File added. Thu May 19 22:54:27 UTC 2005 mantoniotti * ChangeLog updated. Thu May 19 22:52:52 UTC 2005 mantoniotti * Updated copyright notice. Thu May 19 22:49:59 UTC 2005 mantoniotti * Changed the DISCLAIMER parts in the files, in order to clarify the licensing Changed the DISCLAIMER parts in the files, in order to clarify the licensing of the code. Wed Apr 27 21:04:59 UTC 2005 mantoniotti * Fixed factorial example. Wed Apr 27 21:04:36 UTC 2005 mantoniotti * Added IGNORABLE declaration to MATCH macro expansion. Added IGNORABLE declaration to MATCH macro expansion. This is useful in quieting various compilers. Wed Apr 27 20:54:05 UTC 2005 mantoniotti * Added acknowledgement to Peter Scott. Wed Apr 27 20:52:09 UTC 2005 mantoniotti * Fixed bug in condition signaling within MATCH-CASE. Wed Apr 27 20:44:25 UTC 2005 mantoniotti * Fixed bugs in COLLECT-TEMPLATE-VARS for NUMBER-TEMPLATEs. Fixed bugs in COLLECT-TEMPLATE-VARS for NUMBER-TEMPLATEs. If a variable was present, then the method was not returning a list. The treatment of constants like PI was also incorrect, as the numeric value was returned. Retunrning () seems the right thing to do instead. Wed Apr 27 20:41:56 UTC 2005 mantoniotti * Added MATCH-CASE macro. Slightly modified from the version provided Added MATCH-CASE macro. Slightly modified from the version provided by Peter Scott. Wed Apr 27 19:31:18 UTC 2005 mantoniotti * Added unification.asd file. Thu Apr 21 15:33:20 UTC 2005 mantoniotti * Fixed, but not completed, the page. Fri Jan 28 19:46:37 UTC 2005 mantoniotti * Added file `downloads.html'. Fri Jan 28 19:45:40 UTC 2005 mantoniotti * Minor changes to text. Fixed `download.html' link. Fri Jan 28 19:30:35 UTC 2005 mantoniotti * Fixed minor problem in Lambda List parsing. Fixed minor problem in Lambda List parsing. Also VALID-TEMPLATE-P was expanded, and it looks like it should become a generic function. Wed Nov 17 22:19:54 UTC 2004 mantoniotti * Initial revision diff -rN -u old-cl-unification-1/ACKNOWLEDGEMENTS new-cl-unification-1/ACKNOWLEDGEMENTS --- old-cl-unification-1/ACKNOWLEDGEMENTS 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/ACKNOWLEDGEMENTS 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,15 @@ +A lot of pleple deserved thanks for improving CL-UNIFICATION. + +The Lisp NYC group has endured presentations of this code and provided +feedback. + +The following individuals have provided feedback and (precious) bug +fixes. + +Boldyrev, Ivan +Brown, Robert +Korablin, Vladimir V. +Leuner, John +McManus, Russell +Scott, Peter +Werner, Norman diff -rN -u old-cl-unification-1/COPYING new-cl-unification-1/COPYING --- old-cl-unification-1/COPYING 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/COPYING 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,21 @@ +Copyright (c) 2004-2012 Marco Antoniotti +All rights reserved. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in all +copies of this software. + +IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE TO ANY PARTY FOR DIRECT, +INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF +THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHOR(S), +HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +THE AUTHOR(S) UNIVERSITY, COMPANY AND/OR AFFILIATION SPECIFICALLY +DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND +THE AUTHOR(S) HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, +UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + diff -rN -u old-cl-unification-1/ChangeLog new-cl-unification-1/ChangeLog --- old-cl-unification-1/ChangeLog 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/ChangeLog 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,602 @@ +2011-03-28 Robert Brown + + * match-block.lisp: Use &body in match-case and matchf-case so + code that uses them is correctly indented by editors. + +2011-02-27 author + + * .cvsignore: Updated. + + * docs/html/images/Thumbs.db, docs/html/images/Thumbs.db:encryptable: + Removed Files: + Thumbs.db Thumbs.db:encryptable + +2011-02-26 author + + * .cvsignore: Updated. + + * variables.lisp, unifier.lisp: + Minor changes (added COPYING information and other minutiae). + + * unification-package.lisp: Exported a few more symbols. + + * templates-hierarchy.lisp: + Minor changes (added COPYING information and other minutiae). + + * substitutions.lisp: + Changed some environment functions and improved the DUMP-* ones. + + * match-block.lisp, lambda-list-parsing.lisp, cl-unification.system, cl-unification.asd, cl-unification-lib.asd, apply-substitution.lisp: + Minor changes (added COPYING information and other minutiae). + + * ACKNOWLEDGEMENTS: Acknowledgements updated. + +2011-02-24 author + + * ChangeLog, apply-substitution.lisp, cl-unification.system, lambda-list-parsing.lisp, lib-dependent/cl-ppcre-template.lisp, match-block.lisp, templates-hierarchy.lisp, unifier.lisp: + Delete trailing whitespace. In lambda-list-parsing.lisp this fixes a bug + with ~@ format directives. + + * ChangeLog, test/unification-tests.lisp, unifier.lisp: + unifier.lisp: Allow vectors to unify with sequence templates. + test/unification-tests.lisp: new test to verify the change + +2011-02-24 Robert Brown + + * lambda-list-parsing.lisp: Delete trailing whitespace that turned + ~@ into a bogus format directive by converting it into + ~@ + + * unifier.lisp, apply-substitution.lisp, cl-unification.system + * match-block.lisp, templates-hierarchy.lisp, unifier.lisp + * lib-dependent/cl-ppcre-template.lisp: delete trailing whitespace + +2011-02-24 Robert Brown + + * unifier.lisp: Allow vectors to unify with sequence templates. + * test/unification-tests.lisp: new test to verify the change + +2011-02-16 Robert Brown + + * cl-unification.asd: Add support for asdf:test-system. + + * cl-unification-test.asd: File added. + +2011-01-18 author + + * unifier.lisp: + After a careful reading of PAIP fixed a very subtle bug in VAR-UNIFY + that prevented the correct unification of: + + (?x ?y a) + + with + + (?y ?x ?x) + + * substitutions.lisp: + Added debugging functions DUMP-FRAME and DUMP-ENVIRONMENT. + + * .cvsignore: Added .cvsignore file. + +2009-12-17 author + + * ChangeLog: ChangeLog updated. + + * lib-dependent/cl-ppcre-template.asd: Initial checkin. + + * lib-dependent/cl-ppcre-template.lisp: + Patched to use Cl-PPCRE:SCAN-TO-STRINGS (thanks to Pixel // pinterface [a] gmail dot com). + + * unifier.lisp: Minor cosmetic changes. + + * unification-package.lisp: Exported MATCHF-CASE. + + * templates-hierarchy.lisp: + Fixed a couple of problems with some accessors in the NUMBER, + STRUCTURE-OBJECT and STANDARD-OBJECT templates. + + * match-block.lisp: Added MATCHF* macros. + +2009-12-17 author + + * lib-dependent/cl-ppcre-template.asd: Initial checkin. + + * lib-dependent/cl-ppcre-template.lisp: + Patched to use Cl-PPCRE:SCAN-TO-STRINGS (thanks to Pixel // pinterface [a] gmail dot com). + + * unifier.lisp: Minor cosmetic changes. + + * unification-package.lisp: Exported MATCHF-CASE. + + * templates-hierarchy.lisp: + Fixed a couple of problems with some accessors in the NUMBER, + STRUCTURE-OBJECT and STANDARD-OBJECT templates. + + * match-block.lisp: Added MATCHF* macros. + +2009-04-18 author + + * ChangeLog: ChangeLog updated. + + * cl-unification.system, cl-unification.asd: + System definitions files (.asd and .system) modified in order to make + dependency form CL-PPCRE optional. + + * lib-dependent/cl-ppcre-template.system: File added. + + * lib-dependent/cl-ppcre-template.lisp: + Removed REQUIRE of CL-PPCRE. Too brittle. + + * cl-unification-lib.asd: File added. + +2009-04-18 author + + * cl-unification.system, cl-unification.asd: + System definitions files (.asd and .system) modified in order to make + dependency form CL-PPCRE optional. + + * lib-dependent/cl-ppcre-template.system: File added. + + * lib-dependent/cl-ppcre-template.lisp: + Removed REQUIRE of CL-PPCRE. Too brittle. + + * cl-unification-lib.asd: File added. + +2009-04-17 author + + * unification-package.lisp: + Added a few exports and changed the actual package name (i.e., I put + my money where my mouth is; the "published" package name is now a + nickname). + + * apply-substitution.lisp: + Fixed a couple of snags. APPLY-SUBSTITUTION was not applied + recursively and it was barfing on numbers. + Current version is still incomplete, but it serves as a template for + further development. + +2009-04-15 author + + * ChangeLog: ChangeLog updated. + + * lib-dependent/cl-ppcre-template.lisp, test/unification-tests.lisp: + Modified Files: + test/unification-tests.lisp + Added Files: + lib-dependent/cl-ppcre-template.lisp + + The cl-ppcre-template reuses E. Weitz's wonderful CL-PPCRE library + to provide a seamless (YMMV) reuse of regular expressions within + CL-UNIFICATION. + + * templates-hierarchy.lisp: Added LAMBDA-TEMPLATE. + + * substitutions.lisp: + Added some functionality to extract all variables and/or all values + from an environment or a frame. + + * match-block.lisp: + Added MATCHF (whose name may change) to simplify the + 'destructuring-bind'-like syntax and behavior of the matching + facilities. + + * COPYING: Dates updated. + + * unifier.lisp: + Major API change to 'unify'. It now accepts keywords. Old code + shouls not be affected, but new code is now more flexible. Look the + the STRING and (new) CHARACTER methods to see how this change is + affecting the code. + + * variables.lisp: Some 'diff' unfathomable change happened. + + * unification-package.lisp: Added exports of a few symbols. + + * cl-unification.system, cl-unification.asd: + Fixed a few snags and added "lib-dependent" module. + + * apply-substitution.lisp: Added some functionality and comments. + +2009-04-15 author + + * lib-dependent/cl-ppcre-template.lisp, test/unification-tests.lisp: + Modified Files: + test/unification-tests.lisp + Added Files: + lib-dependent/cl-ppcre-template.lisp + + The cl-ppcre-template reuses E. Weitz's wonderful CL-PPCRE library + to provide a seamless (YMMV) reuse of regular expressions within + CL-UNIFICATION. + + * templates-hierarchy.lisp: Added LAMBDA-TEMPLATE. + + * substitutions.lisp: + Added some functionality to extract all variables and/or all values + from an environment or a frame. + + * match-block.lisp: + Added MATCHF (whose name may change) to simplify the + 'destructuring-bind'-like syntax and behavior of the matching + facilities. + + * COPYING: Dates updated. + + * unifier.lisp: + Major API change to 'unify'. It now accepts keywords. Old code + shouls not be affected, but new code is now more flexible. Look the + the STRING and (new) CHARACTER methods to see how this change is + affecting the code. + + * variables.lisp: Some 'diff' unfathomable change happened. + + * unification-package.lisp: Added exports of a few symbols. + + * cl-unification.system, cl-unification.asd: + Fixed a few snags and added "lib-dependent" module. + + * apply-substitution.lisp: Added some functionality and comments. + +2008-07-13 author + + * ChangeLog: Changelog updated. + + * ACKNOWLEDGEMENTS: + Added credits to a few people. Missing ones should bug the maintainer :) + + * README: Copyright dates updated. + + * unification.asd, unification.system: Cleaning up. + Committing in . + + Removed Files: + unification.asd unification.system + + * templates-hierarchy-saved.lisp: Clenaing up. + Committing in . + + Removed Files: + templates-hierarchy-saved.lisp + + * INSTALLATION: Instructions updated. + + * COPYING: Copyright dates updated. + + * test/unification-tests.lisp: Added file. + + * substitutions.lisp, templates-hierarchy.lisp, unification-package.lisp, variables.lisp: + Some modification added. Exported symbols and reverted + reader macro #T to construct template instances at read time. + Added MAKE-LOAD-FORM method for templates which should fix problem with + SBCL. + + Committing in . + + Modified Files: + substitutions.lisp templates-hierarchy.lisp + unification-package.lisp variables.lisp + + * cl-unification.system: + Added explicit :source-extension to accomodate Allegro CL. + +2008-07-13 author + + * ACKNOWLEDGEMENTS: + Added credits to a few people. Missing ones should bug the maintainer :) + + * README: Copyright dates updated. + + * unification.asd, unification.system: Cleaning up. + Committing in . + + Removed Files: + unification.asd unification.system + + * templates-hierarchy-saved.lisp: Cleaning up. + Committing in . + + Removed Files: + templates-hierarchy-saved.lisp + + * INSTALLATION: Instructions updated. + + * COPYING: Copyright dates updated. + + * test/unification-tests.lisp: Added file. + + * substitutions.lisp, templates-hierarchy.lisp, unification-package.lisp, variables.lisp: + Some modification added. Exported symbols and reverted + reader macro #T to construct template instances at read time. + Added MAKE-LOAD-FORM method for templates which should fix problem with + SBCL. + + Committing in . + + Modified Files: + substitutions.lisp templates-hierarchy.lisp + unification-package.lisp variables.lisp + + * cl-unification.system: + Added explicit :source-extension to accomodate Allegro CL. + +2008-07-10 author + + * apply-substitution.lisp: + Removed EXPORT of APPLY-SUBSTITUTION as it is already in the DEFPACKAGE. + +2007-11-09 author + + * docs/html/index.html: Changed the position of the disclaimer. + + * ChangeLog: ChangeLog updated. + + * match-block.lisp: + Made several changes to improve MATCH-CASE (following a note from Ivan + Boldyrev from a long time ago), MATCHING and MATCH. + + Else-clauses are now handled correctly (AFAICT). + + Single variable templates in MATCH, MATCH-CASE and MATCHING clauses do + not need to be quoted. + + MATCHING was generating one gensym'ed variable per clause without + creating an appropriate enclosing LET. This is now fixed. + + * substitutions.lisp: + Changed the top comment and added a (:copier nil) option to the + ENVIRONMENT defstruct, as COPY-ENVIRONMENT is defined later in the + file. + + * cl-unification.system, cl-unification.asd: + Added the new system building files with more meaningful names + w.r.t. the name of the library. + + * unification.asd, unification.system: + Marked the two system building files as 'obsolete', before removing + them from the repository. The new files are prefixed by 'cl-'. + +2007-11-09 author + + * match-block.lisp: + Made several changes to improve MATCH-CASE (following a note from Ivan + Boldyrev from a long time ago), MATCHING and MATCH. + + Else-clauses are now handled correctly (AFAICT). + + Single variable templates in MATCH, MATCH-CASE and MATCHING clauses do + not need to be quoted. + + MATCHING was generating one gensym'ed variable per clause without + creating an appropriate enclosing LET. This is now fixed. + + * substitutions.lisp: + Changed the top comment and added a (:copier nil) option to the + ENVIRONMENT defstruct, as COPY-ENVIRONMENT is defined later in the + file. + + * cl-unification.system, cl-unification.asd: + Added the new system building files with more meaningful names + w.r.t. the name of the library. + + * unification.asd, unification.system: + Marked the two system building files as 'obsolete', before removing + them from the repository. The new files are prefixed by 'cl-'. + +2007-05-21 author + + * ChangeLog: ChangeLog updated. + + * README, ACKNOWLEDGEMENTS, COPYING, INSTALLATION: + Updated copyrights dates and changed a few instructions in the + INSTALLATION file. + + * docs/html/index.html: Updated copyrights dates. + + * ChangeLog: ChangeLog updated. + + * unification-package.lisp, unification.asd, apply-substitution.lisp, match-block.lisp, substitutions.lisp: + See previous message. + + * unification.system: + Added file 'apply-substitition.lisp' with a few new functions that are + a start for the variable substitition operation. + + New fixes to the MATCH and MATCH-CASE macros. They should now work as + advertised. + + Minor changes to other files: added exports to package file, fixed + .system and .asd files. + +2007-05-21 author + + * README, ACKNOWLEDGEMENTS, COPYING, INSTALLATION: + Updated copyrights dates and changed a few instructions in the + INSTALLATION file. + + * docs/html/index.html: Updated copyrights dates. + + * ChangeLog: ChangeLog updated. + + * unification-package.lisp, unification.asd, apply-substitution.lisp, match-block.lisp, substitutions.lisp: + See previous message. + + * unification.system: + Added file 'apply-substitition.lisp' with a few new functions that are + a start for the variable substitition operation. + + New fixes to the MATCH and MATCH-CASE macros. They should now work as + advertised. + + Minor changes to other files: added exports to package file, fixed + .system and .asd files. + +2007-05-21 author + + * unification.system: + Added file 'apply-substitition.lisp' with a few new functions that are + a start for the variable substitition operation. + + New fixes to the MATCH and MATCH-CASE macros. They should now work as + advertised. + + Minor changes to other files: added exports to package file, fixed + .system and .asd files. + +2006-07-19 author + + * templates-hierarchy.lisp, unifier.lisp: + Fixed two problems with the unifier machinery. + + The first one had to do with the matching of NIL against SYMBOL and LIST + in several places: essentially, the problem is incongruencies in the + results of COMPUTE-APPLICABLE-METHODS in these cases. I think I caught + most of them: unification of lists and the occur-check were the obvious + places where things went awry. + + The second problem had to do with the reader macro #T. The original + code generated an object at read time, which is not such a good idea. + Now the code generates a call to MAKE-TEMPLATE with is evaluated later. + Incidentally, the reader macro function is now called |sharp-T-reader|, in + order to placate Emacs fontification. + + Modified Files: + templates-hierarchy.lisp unifier.lisp + + * unification-package.lisp: Added missing export. + +2005-10-25 author + + * unifier.lisp: Fixed problem with the unification of a list with a + SEQUENCE-TEMPLATE. The implementation was not checking that the + length of the list was compatible with the length of the required + elements in the template. + + Apart from that, keyword matching is still unimplemented. + + * match-block.lisp: + Fixed problem with checking the presence of T and OTHERWISE clauses in + MATCHING. + +2005-07-25 author + + * docs/html/downloads.html: Minor cleanup. + +2005-05-20 author + + * docs/html/links.html: Fixed typos. + + * docs/html/nil-template-class.html: Fixed bug in documentation. + + * docs/html/links.html: Page updated. + + * docs/html/unification-dictionary.html: Incremental change to page. + + * docs/html/number-template-class.html: Fixed a documentation bug. + Thanks to Norman Werner for spotting it. + + * docs/html/index.html: Added link to "Mailing Lists" page. + + * docs/html/mailing-lists.html: File added. + + * unifier.lisp: + Fixed two major bugs reported by Norman Werver. Unification of + strings and symbols and of numers and symbols was not recurring on + VAR-UNIFY, as required; thus + + (unify '(?x ?x) '("asd" "qweert")) + and + (unify '(foo ?x baz) '(foo 42 ?x)) + + would succed. + The two cases are now fixed. + +2005-05-19 author + + * README: Year updated. + + * ACKNOWLEDGEMENTS: File added. + + * ChangeLog: ChangeLog updated. + + * COPYING: Updated copyright notice. + + * docs/html/downloads.html, docs/html/index.html: + Changed the DISCLAIMER parts in the files, in order to clarify the licensing + of the code. + +2005-05-19 mantoniotti + + * COPYING: Updated copyright notice. + + * docs/html/downloads.html, docs/html/index.html: + Changed the DISCLAIMER parts in the files, in order to clarify the licensing + of the code. + +2005-04-27 mantoniotti + + * docs/html/control-flow.html: Fixed factorial example. + + * match-block.lisp: + Added IGNORABLE declaration to MATCH macro expansion. + This is useful in quieting various compilers. + + * match-block.lisp: Added acknowledgement to Peter Scott. + + * match-block.lisp: Fixed bug in condition signaling within MATCH-CASE. + + * templates-hierarchy.lisp: + Fixed bugs in COLLECT-TEMPLATE-VARS for NUMBER-TEMPLATEs. + If a variable was present, then the method was not returning a list. + The treatment of constants like PI was also incorrect, as the numeric + value was returned. Retunrning () seems the right thing to do + instead. + + * match-block.lisp: + Added MATCH-CASE macro. Slightly modified from the version provided + by Peter Scott. + + * unification.asd: Added unification.asd file. + +2005-04-21 mantoniotti + + * docs/html/links.html: Fixed, but not completed, the page. + +2005-01-28 mantoniotti + + * docs/html/downloads.html: Added file `downloads.html'. + + * docs/html/index.html: + Minor changes to text. Fixed `download.html' link. + + * lambda-list-parsing.lisp, unifier.lisp: + Fixed minor problem in Lambda List parsing. + Also VALID-TEMPLATE-P was expanded, and it looks like it should become + a generic function. + +2004-11-17 mantoniotti + + * docs/html/images/unif-templ-hier.pcl, docs/html/images/unif-templ-hier.ps: + Initial import. + + * docs/html/images/unif-templ-hier.pcl, docs/html/images/unif-templ-hier.ps: + New file. + + * docs/html/images/Thumbs.db, docs/html/images/Thumbs.db:encryptable, docs/html/images/header_bg.gif, docs/html/images/header_bg_1.gif, docs/html/images/shim.gif, docs/html/images/unif-templ-hier.gif, docs/html/images/unif-templ-hier.pdf, docs/html/images/unif-templ-hier.sxd, docs/html/make-shared-environment-function.html, docs/html/match-case-macro.html, docs/html/standard-object-template-class.html, docs/html/string-template-class.html, docs/html/structure-object-template-class.html, docs/html/subseq-template-class.html: + Initial import. + + * docs/html/images/Thumbs.db, docs/html/images/Thumbs.db:encryptable, docs/html/images/header_bg.gif, docs/html/images/header_bg_1.gif, docs/html/images/shim.gif, docs/html/images/unif-templ-hier.gif, docs/html/images/unif-templ-hier.pdf, docs/html/images/unif-templ-hier.sxd, docs/html/make-shared-environment-function.html, docs/html/match-case-macro.html, docs/html/standard-object-template-class.html, docs/html/string-template-class.html, docs/html/structure-object-template-class.html, docs/html/subseq-template-class.html: + New file. + + * docs/html/.DS_Store, docs/html/aref-template-class.html, docs/html/array-template-class.html, docs/html/control-flow.html, docs/html/dictionary.html, docs/html/element-template-class.html, docs/html/elt-template-class.html, docs/html/expression-template-class.html, docs/html/find-variable-value-function.html, docs/html/hash-t-read-macro.html, docs/html/index.html, docs/html/links.html, docs/html/list-template-class.html, docs/html/main.css, docs/html/make-empty-environment-function.html, docs/html/match-macro.html, docs/html/matching-macro.html, docs/html/nil-template-class.html, docs/html/nth-template-class.html, docs/html/nthcdr-template-class.html, docs/html/number-template-class.html, docs/html/sequence-template-class.html, docs/html/symbol-template-class.html, docs/html/template-class.html, docs/html/template-p-function.html, docs/html/template-spec-accessor.html, docs/html/templates.html, docs/html/type-template-class.html, docs/html/unification-dictionary.html, docs/html/unify-function.html, docs/html/unify-package.html, docs/html/unifying-substitutions.html, docs/html/usci-variable.html, docs/html/vector-template-class.html, unification-package.lisp, unification.system, unifier.lisp, variables.lisp: + Initial import. + + * docs/html/.DS_Store, docs/html/aref-template-class.html, docs/html/array-template-class.html, docs/html/control-flow.html, docs/html/dictionary.html, docs/html/element-template-class.html, docs/html/elt-template-class.html, docs/html/expression-template-class.html, docs/html/find-variable-value-function.html, docs/html/hash-t-read-macro.html, docs/html/index.html, docs/html/links.html, docs/html/list-template-class.html, docs/html/main.css, docs/html/make-empty-environment-function.html, docs/html/match-macro.html, docs/html/matching-macro.html, docs/html/nil-template-class.html, docs/html/nth-template-class.html, docs/html/nthcdr-template-class.html, docs/html/number-template-class.html, docs/html/sequence-template-class.html, docs/html/symbol-template-class.html, docs/html/template-class.html, docs/html/template-p-function.html, docs/html/template-spec-accessor.html, docs/html/templates.html, docs/html/type-template-class.html, docs/html/unification-dictionary.html, docs/html/unify-function.html, docs/html/unify-package.html, docs/html/unifying-substitutions.html, docs/html/usci-variable.html, docs/html/vector-template-class.html, unification-package.lisp, unification.system, unifier.lisp, variables.lisp: + New file. + + * COPYING, INSTALLATION, README, lambda-list-parsing.lisp, match-block.lisp, substitutions.lisp, templates-hierarchy-saved.lisp, templates-hierarchy.lisp: + Initial import. + + * COPYING, INSTALLATION, README, lambda-list-parsing.lisp, match-block.lisp, substitutions.lisp, templates-hierarchy-saved.lisp, templates-hierarchy.lisp: + New file. + diff -rN -u old-cl-unification-1/INSTALLATION new-cl-unification-1/INSTALLATION --- old-cl-unification-1/INSTALLATION 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/INSTALLATION 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,32 @@ +CL-UNIFICATION INSTALLATION + +The package comes with a MK:DEFSYSTEM definition: +"unification.system". + +Issuing + + (mk:load-system "CL-UNIFICATION") + +or + + (mk:compile-system "CL-UNIFICATION") + +will make the UNIFY package available. + +There is also an ASDF system definition for those who use this system. + +Issuing + + (asdf:oos 'asdf:load-op "CL-UNIFICATION") + +should make the library available in your environment. + +If your CL implementation is ASDF-INSTALL aware, you should also be +able to just say + + (asdf-install:install "CL-UNIFICATION") + +provided that the package is unpacked in an ASDF-INSTALL known +directory. + +Enjoy diff -rN -u old-cl-unification-1/README new-cl-unification-1/README --- old-cl-unification-1/README 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/README 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,12 @@ +CL-UNIFICATION + +Marco Antoniotti (c) 2004-2011 + +The directory containing this file you are reading should contain the +code and the documentation of the CL-UNIFICATION package. + +The package is a full-blown library to "unify" arbitrary CL objects +while constructing bindings for placeholders (unification variables) +in a "template" sublanguage. + +Enjoy. diff -rN -u old-cl-unification-1/TIMESTAMP new-cl-unification-1/TIMESTAMP --- old-cl-unification-1/TIMESTAMP 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/TIMESTAMP 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1 @@ +20120116 diff -rN -u old-cl-unification-1/apply-substitution.lisp new-cl-unification-1/apply-substitution.lisp --- old-cl-unification-1/apply-substitution.lisp 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/apply-substitution.lisp 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,85 @@ +;;;; -*- Mode: Lisp -*- + +;;;; apply-substitutions.lisp -- +;;;; General CL structures unifier. +;;;; Substitution definitions. +;;;; +;;;; See the file COPYING for copyright and licensing information. + +(in-package "CL.EXT.DACF.UNIFICATION") ; DACF = Data And Control Flow. + +;;;--------------------------------------------------------------------------- +;;; Substitution application. + +;;; apply-substitution -- +;;; +;;; EXCLUDE-VARS are variables that will just pass through (a list for +;;; the time being). + +(defgeneric apply-substitution (substitution item &optional exclude-vars)) + + +(defmethod apply-substitution ((s environment) (n number) &optional exclude-vars) + (declare (ignore exclude-vars)) + n) + + +(defmethod apply-substitution ((substitution environment) (s symbol) + &optional (exclude-vars ())) + (declare (type list exclude-vars)) + (cond ((variable-any-p s) s) + ((variablep s) + (if (member s exclude-vars :test #'eq) + s + (multiple-value-bind (val foundp) + (find-variable-value s substitution) + (cond (foundp (apply-substitution substitution val exclude-vars)) + (t (warn "~S is a free variable in the current environment." + s) + s)))) + ) + (t s))) + + +(defmethod apply-substitution ((substitution environment) (l cons) + &optional (exclude-vars ())) + (declare (type list exclude-vars)) + (cons (apply-substitution substitution (first l) exclude-vars) + (apply-substitution substitution (rest l) exclude-vars))) + + +(defmethod apply-substitution ((substitution environment) (l null) + &optional exclude-vars) + (declare (ignore exclude-vars)) + '()) + + +;;; compose-substitions -- +;;; The definition is a direct translation of TPL's definition at page 318. +;;; Usually these are done by directly composing and currying +;;; functions in ML/Haskell derivatives, but that is just being "lazy". +;;; The current definition may be too "eager", but the "correct" +;;; semantics should be preserved. + +(defun compose-substitutions (env2 env1) ; note the order. + (declare (type environment env2 env1)) + + (loop for env1-frame in (environment-frames env1) + collect + (loop for (var . term) in (frame-bindings env1-frame) + collect (make-binding var (apply-substitution env2 term)) + into result-bindings + finally (return (make-frame result-bindings))) + into frames + finally (return (make-environment :frames frames)))) + + + + +;;; ground-term -- + +(defun ground-term (term &optional (substitution (make-empty-environment))) + (apply-substitution substitution term)) + + +;;;; end of file -- apply-substitutions.lisp -- diff -rN -u old-cl-unification-1/cl-unification-lib.asd new-cl-unification-1/cl-unification-lib.asd --- old-cl-unification-1/cl-unification-lib.asd 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/cl-unification-lib.asd 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,14 @@ +;;;; -*- Mode: Lisp -*- + +;;;; cl-unification-lib.asd -- +;;;; ASDF system file. +;;;; +;;;; See file COPYING for copyright and licensing information. + +(asdf:defsystem :cl-unification-lib + :author "Marco Antoniotti" + :components ((:module "lib-dependent" + :components ((:file "cl-ppcre-template")))) + :depends-on (cl-ppcre cl-unification)) + +;;;; end of file -- cl-unification-lib.asd -- diff -rN -u old-cl-unification-1/cl-unification-test.asd new-cl-unification-1/cl-unification-test.asd --- old-cl-unification-1/cl-unification-test.asd 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/cl-unification-test.asd 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,31 @@ +;;;; cl-unification-test.asd + + +(in-package #:asdf) + +;; Tests implemented using the ptester framework are run at *load* time, so +;; we tell ASDF that loading a file containing ptester code is never done. +;; This causes ASDF to run all the tests whenever ASDF:LOAD-SYSTEM or +;; ASDF:TEST-SYSTEM is called with argument CL-UNIFICATION-TEST. + +(defclass ptester-source-file (cl-source-file) + () + (:documentation "A Common Lisp source file containing ptester code.")) + +(defmethod operation-done-p ((operation load-op) (component ptester-source-file)) + nil) + + +(in-package #:common-lisp-user) + +(defpackage #:cl-unification-test-system + (:use #:common-lisp #:asdf)) + +(in-package #:cl-unification-test-system) + +(defsystem #:cl-unification-test + :depends-on (:cl-unification :ptester) + :components + ((:module "test" + :components + ((:ptester-source-file "unification-tests"))))) diff -rN -u old-cl-unification-1/cl-unification.asd new-cl-unification-1/cl-unification.asd --- old-cl-unification-1/cl-unification.asd 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/cl-unification.asd 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,56 @@ +;;;; -*- Mode: Lisp -*- +;;;; cl-unification.asd -- +;;;; ASDF system file. + +;;;; See file COPYING for copyright licensing information. + +(defpackage "CL-UNIFICATION-SYSTEM" (:use "CL" "ASDF")) + +(in-package "CL-UNIFICATION-SYSTEM") + +(when (asdf:find-system 'asdf-system-connections nil) + (asdf:oos 'asdf:load-op 'asdf-system-connections)) + +(defclass load-only-file (cl-source-file) + ((last-loaded :accessor load-date :initform nil))) +(defmethod operation-done-p ((op compile-op) (component load-only-file)) + t) +(defmethod perform :around ((op compile-op) (component load-only-file)) + nil) +(defmethod operation-done-p ((op load-op) (component load-only-file)) + (and (load-date component) + (>= (load-date component) (file-write-date (component-pathname component))))) +(defmethod perform ((op load-op) (component load-only-file)) + (prog1 (load (component-pathname component)) + (setf (load-date component) + (file-write-date (component-pathname component))))) + +(asdf:defsystem :cl-unification + :author "Marco Antoniotti" + :in-order-to ((test-op (test-op :cl-unification-test))) + :serial t + :components ((:file "unification-package") + (:file "variables") + (:file "substitutions") + (:file "lambda-list-parsing") + (:file "templates-hierarchy") + (:file "template-reader") + (:file "unifier") + (:file "match-block") + (:file "apply-substitution"))) + +#+asdf-system-connections +(asdf:defsystem-connection cl-unification+cl-ppcre + :requires (:cl-ppcre :cl-unification) + :components ((:load-only-file "unification-package") + (:module "lib-dependent" + :components ((:file "cl-ppcre-template"))))) + +#+asdf-system-connections +(asdf:defsystem-connection cl-unification+named-readtables + :requires (:cl-unification :named-readtables) + :components ((:load-only-file "unification-package") + (:module "lib-dependent" + :components ((:file "named-readtable"))))) + +;;;; end of file -- cl-unification.asd -- diff -rN -u old-cl-unification-1/cl-unification.system new-cl-unification-1/cl-unification.system --- old-cl-unification-1/cl-unification.system 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/cl-unification.system 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,26 @@ +;;;; -*- Mode: Lisp -*- + +;;;; cl-unification.system -- +;;;; MK:DEFSYSTEM system file. + +;;;; See file COPYING for copyright licensing information. + +(mk:defsystem "CL-UNIFICATION" + :source-extension "lisp" + :components ("unification-package" + "variables" + "substitutions" + "lambda-list-parsing" + "templates-hierarchy" + "unifier" + "match-block" + "apply-substitution" + (:module "lib-dependent" + :depends-on ("templates-hierarchy" "unifier") + :components ((:subsystem "cl-ppcre-template" + :non-required-p t + ) + )) + )) + +;;; end of file -- cl-unification.system -- diff -rN -u old-cl-unification-1/docs/html/aref-template-class.html new-cl-unification-1/docs/html/aref-template-class.html --- old-cl-unification-1/docs/html/aref-template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/aref-template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,206 @@ + + + CL Unification: Class AREF-TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class AREF-TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class AREF-TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ AREF-TEMPLATE, ELEMENT-TEMPLATE, EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ None. +

+ + +

Slots:

+ +

None.

+ + +

Description:

+ +

The AREF-TEMPLATE class denotes those object that are used + to unify against a particular element of an ARRAY.

+ +

Template Syntax:

+ +

+

+  #T(aref (index1 ... indexN) item)
+  
+

+ +

+

+  #T(aref index item)
+  
+

+ +

The AREF-TEMPLATE syntax denotes the item at + index1 ... indexN of an ARRAY. An AREF-TEMPLATE must + be unified against a ARRAY object. item is unified + against the element extracted from the sequence object at + index1 ... indexN by the standard function AREF.

+ +

The second form is a shorthand.

+

+

+  #T(aref index item) <==> #T(aref (index) item)
+  
+

+ + + +

Examples:

+ +

+

+  cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(aref 2 ?x)))
+  #<ENVIRONMENT xxx>
+  
+  cl-prompt> (find-variable-value '?x e)
+  42
+
+  cl-prompt> (setq e (unify #(0 1 42 3 4 5) #T(aref 42 ?x)))
+  --> Error: index 42 out of bounds.
+
+
+  cl-prompt> (setq e (unify 42 #T(aref 42 ?x)))
+  --> Error: UNIFICATION-FAILURE
+
+
+  cl-prompt> (setq e (unify "This is a string!" #T(aref 4 ?x)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  #\Space  
+
+
+  cl-prompt> (setq e (unify #2A((1 0) (foo bar)) #T(aref (1 1) ?x)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  BAR
+
+
+  cl-prompt> (setq e (unify #2A((1 0) (foo bar)) #T(aref (1 1) baz)))
+  --> Error: UNIFICATION-FAILURE
+
+
+  cl-prompt> (setq e (unify #2A((1 0) (foo ?x)) #T(aref (1 1) baz)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  BAZ
+  
+

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

Unifying an AREF-TEMPLATE against a non-ARRAY object results in + an UNIFICATION-FAILURE error being signaled.

+ + +

See Also:

+ +

UNIFY

+ +

Notes:

+ +

None.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-06-11
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/array-template-class.html new-cl-unification-1/docs/html/array-template-class.html --- old-cl-unification-1/docs/html/array-template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/array-template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,227 @@ + + + CL Unification: Class ARRAY-TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class ARRAY-TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class ARRAY-TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ ARRAY-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ VECTOR-TEMPLATE. +

+ + +

Slots:

+ +

None.

+ + +

Description:

+ +

The ARRAY-TEMPLATE class denotes those object that are used + to unify against an ARRAY.

+ +

Template Syntax:

+ +

+

+  #T(array <shape-template>)
+  
+

+ +

+

+  #T(<CL array type specifier> <shape-template>)
+  
+

+ +

+

+  #T(array ([* | <CL type specifier>] [<dimension sped>]) <shape-template>)
+  
+

+ +

Where <shape-template> can be:

+ +

+

+  <shape-template> ::= <sequence-template>
+                   |   <destructuring template lambda list>
+                   |   (<shape-template>)
+  
+

+ + +

The ARRAY-TEMPLATE syntax denotes an ARRAY object. An + ARRAY-TEMPLATE must be unified against an ARRAY object. The elements + of the array must be unified against the + <shape-template>. Each row of the array is unified + recursively against each element of the <shape-template>. + + + +

Examples:

+ +

+

+  cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(array (0 1 ?x 3 4 5))))
+  #<ENVIRONMENT xxx>
+  
+  cl-prompt> (find-variable-value '?x e)
+  42
+
+  cl-prompt> (setq e (unify #(0 1 42 3 4 5)  #T(array (0 1 "FOO" 3 4 5))))
+  --> Error: UNIFICATION-FAILURE
+
+  cl-prompt> (setq e (unify #2A((0 1 42) (3 4 5)) #T(array ((0 1 ?x) (3 4 5)))))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  42
+
+  cl-prompt> (setq e (unify #2A(("foo" "bar" 42) (3 4 5)) #T(array ((_ _ ?x) (3 4 5)))))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  42
+
+  cl-prompt> (setq e (unify #2A(("foo" "bar" 42) (3 4 5)) #T(array (#T(vector _ &rest ?x) (3 4 5)))))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  #("bar" 42)
+  
+

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

Unifying an ARRAY-TEMPLATE against a non-ARRAY object results in + an UNIFICATION-FAILURE error being signaled.

+ + +

See Also:

+ +

UNIFY

+ +

Notes:

+ +

Syntax Note

+ +

The ARRAY-TEMPLATE syntax tries to be easy to use, at the cost of + being overloaded. There is no actual need to have the separate + forms (array (fixnum) ...) and + ((array fixnum) ...).

+ +

In a future release they may be conflated. For the time being + they are kept separate as it is unclear which would be better to + provide.

+ +

Elements Unification

+ +

It would be nice to have the possibility to unify against + slices of the array. Alas, this seems non trivial to get + right, and it is left as a future extension of the semantics of + <shape-template>.

+ +

ARRAY Structural Properties

+ +

There is no way to "unify" against structural properties of + vectors like fill pointers and displacements.

+ + +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-10-30
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/control-flow.html new-cl-unification-1/docs/html/control-flow.html --- old-cl-unification-1/docs/html/control-flow.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/control-flow.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,244 @@ + + + CL Control Flow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Extensions: CONTROL FLOW + +
+
+
+
+
  + +
+
+ +

Control Flow

+ +

In order to make the use of the UNIFICATION library easier, a few + utility macros are provided. The macros MATCH, MATCHING, and + MATCH-CASE can be used to unify two (or more) objects and then to + build a lexical environment where the variables present in the to + objects (or templates) are bound to the values resulting from the + application of UNIFY.

+ +

+

    +
  • MATCH is a "single shot" macro. It does one unification and + executes forms in an appropriate lexical environment.
  • + +
  • MATCH-CASE is equivalent to CASE. It tries to match a single + object (or template) against a set of clauses. The forms associated + to the first clause for which there is a successful unification, are + then executed within an appropriate lexical environment. + +
  • MATCHING is equivalent to COND. Each clause contains a + head +

    + + +

    Examples

    + +

    These macros allow the construction of interesting pattern + matching like code.

    + +

    +

    +  (defun factorial (x)
    +    (match-case (x)
    +      (0 1)
    +      (#T(number ?n) (* ?n (factorial (1- ?n))))
    +      (otherwise (error "Incorrect match for ~S." x))))
    +  
    +

    + +

    Or consider the more interesting piece of code from a not-so + hypothetical Red-Black tree implementation (cfr. [O98].) The function BALANCE is the key part of the + rebalancing act played by Red-Black trees.

    + +

    +

    +  (defstruct (tree-node (:conc-name tn-)
    +                        (:constructor mk-tn (color left elem right)))
    +     color
    +     left
    +     elem
    +     right)
    +
    +  (defun balance (&rest balancing-arguments)
    +    (match-case (balancing-arguments)
    +      ((:black #T(tree-node tn-color :red
    +                            tn-left #T(tree-node tn-color :red
    +                                                 tn-left ?a
    +                                                 tn-elem ?x
    +                                                 tn-right ?b)
    +                            tn-elem ?y
    +                            tn-right ?c)
    +               ?z
    +               ?d)
    +        (mk-tn :red (mk-tn :black ?a ?x ?b) ?y (mk-tn :black ?c ?z ?d)))
    +      ((:black #T(tree-node tn-color :red
    +                            tn-left ?a
    +                            tn-elem ?x
    +                            tn-right #T(tree-node tn-color :red
    +                                                  tn-left ?b
    +                                                  tn-elem ?y
    +                                                  tn-right ?c))
    +               ?z
    +               ?d)
    +        (mk-tn :red (mk-tn :black ?a ?x ?b) ?y (mk-tn :black ?c ?z ?d)))
    +      ((:black ?a
    +               ?x
    +               #T(tree-node tn-color :red
    +                            tn-left #T(tree-node tn-color :red
    +                                                 tn-left ?b
    +                                                 tn-elem ?y
    +                                                 tn-right ?c)
    +                            tn-elem ?z
    +                            tn-right ?d))
    +        (mk-tn :red (mk-tn :black ?a ?x ?b) ?y (mk-tn :black ?c ?z ?d)))
    +      ((:black ?a
    +               ?x
    +               #T(tree-node tn-color :red
    +                            tn-left ?b
    +                            tn-elem ?y
    +                            tn-left #T(tree-node tn-color :red
    +                                                 tn-left ?c
    +                                                 tn-elem ?z
    +                                                 tn-right ?d)))
    +        (mk-tn :red (mk-tn :black ?a ?x ?b) ?y (mk-tn :black ?c ?z ?d)))
    +      ((?color ?left ?elem ?right)
    +        (mk-tn ?color ?left ?elem ?right))))
    +  
    +

    + +

    This version of BALANCE is more verbose than the one given in [O98], but it preserves the general elegance of the + ML implementation.

    + + + +

    Control Flow Dictionary

    + + + + + +

    Notes

    + +

    Other Forms

    + +

    It would be obvious to add the macros EMATCH-CASE and + CMATCH-CASE, for symmetry with ECASE and CCASE. Also, MATCHING + could be renamed to MATCH-COND.

    + + +

    Current Implementation Details

    + +

    The current implementations of MATCHING and MATCH-CASE do not + handle user supplied environments yet.

    + + +

    References

    + +

    + [O98] C. Okasaki, Purely Functional Data + Structures, Cambridge University Press, 1998. + + + + +

    Site Map

    + + +

    Enjoy!

    + + + +
    +

    Questions? Queries? Suggestions? Comments? Please direct them + at me. +

    + +
+
+ +
  + +
+
+ + + +
+
+ +
 
+ +
+ + diff -rN -u old-cl-unification-1/docs/html/dictionary.html new-cl-unification-1/docs/html/dictionary.html --- old-cl-unification-1/docs/html/dictionary.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/dictionary.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,349 @@ + + + CL Unification Dictionary + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Extensions: UNIFICATION Dictionary + +
+
+
+
+
  + +
+
+ +

Common Lisp Extensions: UNIFICATION Dictionary

+ +

The notion of unification originated in the field of + formal logic (e.g. Robinson, 1956) and has been used extensively in + Computer Science and Programming Languages. Prolog + obviously uses the full power of unification, however, unification + is also at the core of type checking algorithms in the + tradition of Milner's, and a limited form - pattern + matching - is available to the user in languages of the ML and + Haskell family.

+ +

The library presented in these pages provides a full blown + unification framework for Common Lisp.

+ +

Writing a pattern matcher or a an unifier in Common + Lisp is easy, as long as we limit ourselves to manipulate + only ATOMs and CONSes.

+ +

Alas, it would be much nicer if we could manipulated arbitrary + Common Lisp objects as the ML programmer can with + arbitrary ML objects.

+ +

The library presented here is the first one (to the best of the + author's knowledge) that is capable of manipulating arbitrary + Common Lisp objects.

+ +

The hope is that this library could be incorporated directly in + an implementation in order to provide better type checking.

+ +

This should not come as a surprise, as a compiler like CMUCL does + include a type inference engine, which does very similar things.

+ +

Unification Basics

+ +

The unification process makes sure that two object + descriptions containing some holes + - i.e. variables - can be made equal (almost in the EQUALP + sense) by assigning consistent values to the variables + involved.

+ +

Suppose we had a function U performing unification and returning + a set of variable assignments, often called a + substitution. A very simple + example involving the unification of two numbers could be +

+  U(42, 42) ==> {}
+  
+ The two numbers are EQL, so no variable is involved and the empty + substitution is returned. +
+  U(42, 123) ==> <unification failure>
+  
+ The two numbers are not EQL, so the unification fails. +
+  U(42, x) ==> {x -> 42}
+  
+ The only way to make the unification process to succeed is to bind + the value 42 to the variable x.

+ +

The UNIFICATION library defines all the necessary functions and a + unification sub-language to handle most of Common + Lisp.

+ +

UNIFICATION Library

+ +

The UNIFICATION library has one main entry point, the generic function + UNIFY, and a sub-language definition that allows us to talk about + Common Lisp objects.

+ +

The UNIFY generic function has the following signature: +

+  unify x y &optional substitution
+  
+ Where x and y are either + arbitrary Common Lisp objects, variables, + or object templates. These items constitute the so-called + extended terms manipulated by the unification + machinery.

+ +

Variables are symbols with a #\? as the + first character of the name. This is a rather traditional choice, + although a different one based on quoted symbols is possible. + Therefore, the following are examples of variables. +

+  ?A ?s ?qwe ?42z ?a-variable-with-a-very-long-name ?_
+  
+ There are two special variables, ?_ and _, + which are used as anonymous place holders, they match anything, but + never appear in a substitution.

+ +

Hence, the above examples result in the following +

+  cl-prompt> (unify 42 42)
+  #<EMPTY ENVIRONMENT xxxxxx>
+  
+ +
+  cl-prompt> (unify 42 123)
+  ==> error: unification failure
+  
+ +
+  cl-prompt> (unify 42 ?x)
+  #<ENVIRONMENT xxxxxx>
+
+  cl-prompt> (find-variable-value '?x *)
+  42
+  
+

+ Where FIND-VARIABLE-VALUE is the accessor used to find the value of + a variable in a substitution.

+ +

As a more complicated example, consider the usual CONS based + unification +

+  cl-prompt> (unify '(foo (bar frobboz) ?baz) '(foo ?gnao 42))
+  #<ENVIRONMENT xxxxxx>
+
+  cl-prompt> (find-variable-value '?gnao *)
+  (BAR FROBBOZ)
+
+  cl-prompt> (find-variable-value '?baz **)
+  42
+  
+ +

Of course note the following behavior +

+  cl-prompt> (unify '(foo ?x 42) '(foo 42 ?x))
+  #<ENVIRONMENT xxxxxx>
+
+  cl-prompt> (unify '(foo ?x 42) '(foo baz ?x))
+  ==> error: unification failure
+  
+

+ + +

UNIFY works also on arrays and vectors. Strings are treated as + atomic objects +

+  cl-prompt> (unify #(1 2 3) #(1 ?x ?y))
+  #<ENVIRONMENT xxxxxx>
+
+  cl-prompt> (find-variable-value '?x *)
+  2
+  
+ +
+  cl-prompt> (unify #2A((1 2 3) (a s ?z)) #2A((1 ?x ?y) (a s d)))
+  #<ENVIRONMENT xxxxxx>
+
+  cl-prompt> (find-variable-value '?z *)
+  D
+  
+

+ +

So far so good, but how can you unify two structures? First of + all there is no portable way (yet) to list all the slots of a given + structure. Secondly, by allowing the unification of arbitrary + CONSes, we have created a short-circuit in the unification + machinery.

+ +

Dealing with object instances raises similar problems.

+ +

Suppose we have the following definition +

+  (defstruct foo a s d)
+  
+ The straighforward +
+  (unify #S(FOO A 42 S NIL D NIL) (make-foo :a 42))
+  
+ cannot be built portably, besides, we do not even have the equivalent of the + #S(...) notation for regular CLOS objects. Moreover we want + to do other things with other data types.

+ +

A simple solution is to define a template sub-language + to express unifications between structure objects or standard + objects (and other data types as well.) Nevertheless, the + definition of such sub-language cannot be CONS based, because in + such case, we would conflate arbitrary CONSes and the expressions of + the sub-language.

+ +

To circumvent this problem we resort to the usual trick a ML + programmer uses to placate the type-checker: we introduce an + "intermediate" data type. Essentially the following +

+  (defclass template ()
+     ((spec :accessor template-spec :type (or cons symbol number) ...)))
+  
+

+ +

The TEMPLATE class is accompanied by a reader macro + (#T for template, or type, with an + abuse of language) and an + appropriate PRINT-OBJECT method. The #T reader macro + expands as +

+  #Tsomething ==> (make-instance 'template :spec something)
+  
+ With this infrastructure we can + express the unification of the FOO instance as +
+  (unify #(FOO A 42 S NIL D NIL) #T(foo foo-a 42))
+  
+ I.e. we use the actual structure accessor FOO-A to get to the the + value of the slot A in a FOO. This is an example of the template + language.

+ +

A more interesting example, which involves vectors is the + following +

+  cl-prompt> (unify #(1 2 3 4 5) #T(vector 1 ?x &rest ?rest)) ; You get the idea...
+  #<ENVIRONMENT xxxxxxx>
+
+  cl-prompt> (find-variable-value '?rest *)
+  #(3 4 5)
+  
+ I.e. we have a DESTRUCTURING-BIND on steroids.

+ +

Note that separataing the templates is necessary if we want to do + something like +

+  cl-prompt> (unify '(1 2 3 4 5) #T(list 1 ?x &rest ?rest))
+  #<ENVIRONMENT xxxxxxx>
+
+  cl-prompt> (find-variable-value '?rest *)
+  (3 4 5)
+  
+ Without the template denoted by #T(list ...) the + unifier would have been utterly confused.

+ +

In the following the full extent of the UNIFICATION facility is + described in its main components. +

+ + +

Unifying Substitutions

+ +

The Template Sub-language

+ +

Control Flow

+ +

The UNIFICATION Dictionary

+ + + + +

Site Map

+ + +

Enjoy!

+ + + +
+

Questions? Queries? Suggestions? Comments? Please direct them + at me. +

+ +
+
+ +
  + +
+
+ + +
+
+ +
 
+ +
+ + diff -rN -u old-cl-unification-1/docs/html/downloads.html new-cl-unification-1/docs/html/downloads.html --- old-cl-unification-1/docs/html/downloads.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/downloads.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,134 @@ + + + CL Unification Download Page + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Extensions: UNIFICATION + +
+
+
+
+
  + +
+
+ +

CL-UNIFICATION Download Page

+ + +
+ +

+ DISCLAIMER: The code associated to these documents is not + completely tested and it is bound to contain errors and omissions. + This documentation may contain errors and omissions as well.

+ +

The file COPYING contains a Berkeley-style license. You + are advised to use the code at your own risk. No warranty + whatsoever is provided, the author will not be held responsible for + any effect generated by your use of the library, and you can put + here the scarier extra disclaimer you can think of. +

+
+
+ + +

Download and CVS Repository

+ +

The CVS repository is here. You can download a tarball directly from there.

+ + + + + + + + + +

Site Map

+ + +

Enjoy!

+ + + +
+

Questions? Queries? Suggestions? Comments? Please direct them + at me. +

+ +
+
+ +
  + +
+
+ + +
+
+ +
 
+ +
+ + diff -rN -u old-cl-unification-1/docs/html/element-template-class.html new-cl-unification-1/docs/html/element-template-class.html --- old-cl-unification-1/docs/html/element-template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/element-template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,132 @@ + + + CL Unification: Class ELEMENT-TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class ELEMENT-TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class ELEMENT-TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ ELEMENT-TEMPLATE, EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ AREF-TEMPLATE, ELT-TEMPLATE, NTH-TEMPLATE, NTHCDR-TEMPLATE +

+ + +

Slots:

+ +

None.

+ + +

Description:

+ +

The ELEMENT-TEMPLATE class denotes those object that are used + to unify against a particular element of an ARRAY or a SEQUENCE.

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

None.

+ + +

See Also:

+ +

UNIFY

+ +

Notes:

+ +

None.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-06-11
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/elt-template-class.html new-cl-unification-1/docs/html/elt-template-class.html --- old-cl-unification-1/docs/html/elt-template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/elt-template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,176 @@ + + + CL Unification: Class ELT-TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class ELT-TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class ELT-TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ ELT-TEMPLATE, ELEMENT-TEMPLATE, EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ None. +

+ + +

Slots:

+ +

None.

+ + +

Description:

+ +

The ELT-TEMPLATE class denotes those object that are used + to unify against a particular element of a SEQUENCE.

+ +

Template Syntax:

+ +

+

+  #T(elt index item)
+  
+

+ +

The ELT-TEMPLATE syntax denotes the element of item at + index. An ELT-TEMPLATE must be unified against a SEQUENCE + object. item is unified against the element + extracted from the sequence object at index by the standard + function ELT.

+ + +

Examples:

+ +

+

+  cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(elt 2 ?x)))
+  #<ENVIRONMENT xxx>
+  
+  cl-prompt> (find-variable-value '?x e)
+  42
+
+  cl-prompt> (setq e (unify #(0 1 42 3 4 5) #T(elt 42 ?x)))
+  --> Error: index 42 out of bounds.
+
+
+  cl-prompt> (setq e (unify 42 #T(elt 42 ?x)))
+  --> Error: UNIFICATION-FAILURE
+
+
+  cl-prompt> (setq e (unify "This is a string!" #T(elt 4 ?x)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  #\Space  
+  
+

+ + + + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

Unifying an ELT-TEMPLATE against a non-SEQUENCE object results in + an UNIFICATION-FAILURE error being signaled.

+ + +

See Also:

+ +

UNIFY

+ +

Notes:

+ +

None.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-06-11
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/expression-template-class.html new-cl-unification-1/docs/html/expression-template-class.html --- old-cl-unification-1/docs/html/expression-template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/expression-template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,131 @@ + + + CL Unification: Class EXPRESSION-TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class EXPRESSION-TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class EXPRESSION-TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ ELT-TEMPLATE, SUBSEQ-TEMPLATE. +

+ + +

Slots:

+ +

None.

+ + +

Description:

+ +

The EXPRESSION-TEMPLATE class is the root of the expression template sub-hierarchy.

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

None.

+ + +

See Also:

+ +

UNIFY

+ +

Notes:

+ +

None.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-06-11
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/find-variable-value-function.html new-cl-unification-1/docs/html/find-variable-value-function.html --- old-cl-unification-1/docs/html/find-variable-value-function.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/find-variable-value-function.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,144 @@ + + + CL Unification: Function FIND-VARIABLE-VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Function FIND-VARIABLE-VALUE + +
+
+
+
+
  + +
+
+ +

Function FIND-VARIABLE-VALUE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Syntax:

+ +

+

+  find-variable-value variable-name &optional env errorp
+  => value, found
+  
+

+ +

Arguments and Values:

+ +

variable-name---a symbol denoting a unification variable

+

env---an unification-environment

+

value---an object

+

found---a boolean

+ + + +

Description:

+ +

The function FIND-VARIABLE-VALUE searches the environment + env for the value associated to the unification variable + variable-name.

+ +

If there is a value associated to variable-name in + env, then it is returned; found, the second return + value, is T. + +

If no value is associated to variable-name then + FIND-VARIABLE-NAME signals an error of type + UNIFICATION-VARIABLE-UNBOUND if errorp is non-NIL (the + default.) If errorp is NIL then FIND-VARIABLE-NAME returns + the values NIL and NIL.

+ +

env defaults to *NULL-ENVIRONMENT*. + + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

None.

+ + +

See Also:

+ +

UNIFY:ENVIRONMENT, BINDING, UNIFICATION-VARIABLE-UNBOUND, *NULL-ENVIRONMENT*

+ + +

Notes:

+ +

None.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-10-09
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + diff -rN -u old-cl-unification-1/docs/html/hash-t-read-macro.html new-cl-unification-1/docs/html/hash-t-read-macro.html --- old-cl-unification-1/docs/html/hash-t-read-macro.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/hash-t-read-macro.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,139 @@ + + + CL Unification: #T Reader Macro + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Standard Generic Function TEMPLATE-SPEC + +
+
+
+
+
  + +
+
+ +

Reader Macro #T

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Syntax:

+ +

+

+  #Tspec
+  -> template
+  
+

+ + +

Description:

+ +

#Tspec expands to (make-template + template-kind spec). + + +

Examples:

+ +

+

+  #Tfoo ==> #<SYMBOL-TEMPLATE FOO xxxxxx>
+  
+

+ + +

+

+  #T(vector 1 2 &rest ?x) ==> #<VECTOR-TEMPLATE xxxxx>
+  
+

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

None.

+ + +

See Also:

+ +

TEMPLATE, the "Template Sub-language" section.

+ + +

Notes:

+ +

None.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-10-09
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + Binary files old-cl-unification-1/docs/html/images/header_bg.gif and new-cl-unification-1/docs/html/images/header_bg.gif differ Binary files old-cl-unification-1/docs/html/images/header_bg_1.gif and new-cl-unification-1/docs/html/images/header_bg_1.gif differ Binary files old-cl-unification-1/docs/html/images/shim.gif and new-cl-unification-1/docs/html/images/shim.gif differ Binary files old-cl-unification-1/docs/html/images/unif-templ-hier.gif and new-cl-unification-1/docs/html/images/unif-templ-hier.gif differ diff -rN -u old-cl-unification-1/docs/html/images/unif-templ-hier.pcl new-cl-unification-1/docs/html/images/unif-templ-hier.pcl --- old-cl-unification-1/docs/html/images/unif-templ-hier.pcl 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/images/unif-templ-hier.pcl 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,1582 @@ +%-12345X@PJL JOB +@PJL SET HOLD=OFF +@PJL SET RESOLUTION = 600 +@PJL SET BITSPERPIXEL = 2 +@PJL SET ECONOMODE = OFF +@PJL ENTER LANGUAGE = POSTSCRIPT +%!PS-Adobe-3.0 +%%Title: Document +%%Creator: PScript5.dll Version 5.2.2 +%%CreationDate: 10/10/2004 14:55:30 +%%BoundingBox: (atend) +%%DocumentNeededResources: (atend) +%%DocumentSuppliedResources: (atend) +%%DocumentData: Clean7Bit +%%TargetDevice: (HP LaserJet 8150 Series) (3010.107) 0 +%%LanguageLevel: 3 +%%EndComments + +%%BeginDefaults +%%ViewingOrientation: 1 0 0 1 +%%EndDefaults + + +%%BeginProlog +%%BeginResource: file Pscript_WinNT_ErrorHandler 5.0 0 +/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false +setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype +ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch +def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0 +rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def +/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def +typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72 +def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp +exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def +/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype +{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint} +readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop +(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def +/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- ) +tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup +xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint +tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck +{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(]) +tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup +rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint} +forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier +/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin +$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0 +ne{grestoreall}if errorname(VMerror)ne{showpage}if initgraphics courier setfont +lmargin 720 moveto errorname(VMerror)eq{userdict/ehsave known{clear userdict +/ehsave get restore 2 vmreclaim}if vmstatus exch pop exch pop PrtVMMsg}{ +(ERROR: )prnt errorname prnt nl(OFFENDING COMMAND: )prnt/command load prnt +$error/ostack known{nl nl(STACK:)prnt nl nl $error/ostack get aload length{==} +repeat}if}ifelse systemdict/showpage get exec(%%[ Error: )print errorname +=print(; OffendingCommand: )print/command load =print( ]%%)= flush}if end end +end}dup 0 systemdict put dup 4 $brkpage put bind readonly put/currentpacking +where{pop/setpacking where{pop oldpack setpacking}if}if +%%EndResource +userdict /Pscript_WinNT_Incr 230 dict dup begin put +%%BeginResource: file Pscript_FatalError 5.0 0 +userdict begin/FatalErrorIf{{initgraphics findfont 1 index 0 eq{exch pop}{dup +length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall/Encoding +{ISOLatin1Encoding}stopped{StandardEncoding}if def currentdict end +/ErrFont-Latin1 exch definefont}ifelse exch scalefont setfont counttomark 3 div +cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def end +%%EndResource +userdict begin/PrtVMMsg{vmstatus exch sub exch pop gt{[ +(This job requires more memory than is available in this printer.)100 500 +(Try one or more of the following, and then print again:)100 485 +(For the output format, choose Optimize For Portability.)115 470 +(In the Device Settings page, make sure the Available PostScript Memory is accurate.) +115 455(Reduce the number of fonts in the document.)115 440 +(Print the document in parts.)115 425 12/Times-Roman showpage +(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf}if}bind def end +version cvi 2016 ge{/VM?{pop}bind def}{/VM? userdict/PrtVMMsg get def}ifelse +105000 VM? +%%BeginResource: file Pscript_Win_Basic 5.0 0 +/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^ +/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/- +/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true , +d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C +/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M +/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d +/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage +, d/K/stroke , d/W/widthshow , d/R/rotate , d/L2? false/languagelevel where{pop +languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d/yS/yshow , d/zS/xyshow , +d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{, d}bd/bn/bind ld/lw/Lw ld +/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx matrix +currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit/UtilsInit +counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}b +/initialize{`{/Pscript_Win_Data where{!}{U/Pscript_Win_Data & put}?/ADO_mxRot ~ +d/TextInitialised? F d reinitialize E}{U/Pscript_Win_Data 230 dict @ ` put +/ADO_mxRot ~ d/TextInitialised? F d reinitialize}?}b/terminate{!{& self eq +{exit}{E}?}loop E}b/suspend/terminate , d/resume{` Pscript_Win_Data `}b U ` +/lucas 21690 d/featurebegin{countdictstack lucas[}b/featurecleanup{stopped +{cleartomark @ lucas eq{! exit}if}loop countdictstack ~ sub @ 0 gt{{E}repeat} +{!}?}b E/snap{transform 0.25 sub round 0.25 add ~ 0.25 sub round 0.25 add ~ +itransform}b/dsnap{dtransform round ~ round ~ idtransform}b/nonzero_round{@ 0.5 +ge{round}{@ -0.5 lt{round}{0 ge{1}{-1}?}?}?}b/nonzero_dsnap{dtransform +nonzero_round ~ nonzero_round ~ idtransform}b U<04>cvn{}put/rr{1 ^ 0 - 0 ~ - +neg 0 - C}b/irp{4 -2 $ + +S fx 4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b/rp{4 2 $ M 1 ^ 0 +- 0 ~ - neg 0 -}b/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool +2 ^ put}b/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e +{DefIf_El !}b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b +/freeVM{/Courier findfont[40 0 0 -40 0 0]makefont Ji 2 vmreclaim}b/hfRedefFont +{findfont @ length dict `{1 ^/FID ne{d}{! !}?}forall & E @ ` ~{/CharStrings 1 +dict `/.notdef 0 d & E d}if/Encoding 256 array 0 1 255{1 ^ ~/.notdef put}for d +E definefont !}bind d/hfMkCIDFont{/CIDFont findresource @ length 2 add dict `{1 +^ @/FID eq ~ @/XUID eq ~/UIDBase eq or or{! !}{d}?}forall/CDevProc ~ d/Metrics2 +16 dict d/CIDFontName 1 ^ d & E 1 ^ ~/CIDFont defineresource ![~]composefont !} +bind d +%%EndResource +%%BeginResource: file Pscript_Win_Utils_L2 5.0 0 +/rf/rectfill , d/fx{1 1 dtransform @ 0 ge{1 sub 0.5}{1 add -0.5}? 3 -1 $ @ 0 ge +{1 sub 0.5}{1 add -0.5}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $ +snap + +S fx rf}b/rs/rectstroke , d/rc/rectclip , d/UtilsInit{currentglobal{F +setglobal}if}b/scol{! setcolor}b/colspA/DeviceGray d/colspABC/DeviceRGB d +/colspRefresh{colspABC setcolorspace}b/SetColSpace{colspABC setcolorspace}b +/resourcestatus where{!/ColorRendering/ProcSet resourcestatus{! ! T}{F}?}{F}? +not{/ColorRendering<>/defineresource where{!/ProcSet +defineresource !}{! !}?}if/buildcrdname{/ColorRendering/ProcSet findresource ` +mark GetHalftoneName @ type @/nametype ne ~/stringtype ne and{!/none}if(.) +GetPageDeviceName @ type @/nametype ne ~/stringtype ne and{!/none}if(.)5 ^ 0 5 +-1 1{^ length add}for string 6 1 $ 5 ^ 5{~ 1 ^ cvs length 1 ^ length 1 ^ sub +getinterval}repeat ! cvn 3 1 $ ! ! E}b/definecolorrendering{~ buildcrdname ~ +/ColorRendering defineresource !}b/findcolorrendering where{!}{ +/findcolorrendering{buildcrdname @/ColorRendering resourcestatus{! ! T}{ +/ColorRendering/ProcSet findresource ` GetSubstituteCRD E F}?}b}? +/selectcolorrendering{findcolorrendering !/ColorRendering findresource +setcolorrendering}b/G2UBegin{findresource/FontInfo get/GlyphNames2Unicode get +`}bind d/G2CCBegin{findresource/FontInfo get/GlyphNames2HostCode get `}bind d +/G2UEnd{E}bind d/AddFontInfoBegin{/FontInfo 8 dict @ `}bind d/AddFontInfo{ +/GlyphNames2Unicode 16 dict d/GlyphNames2HostCode 16 dict d}bind d +/AddFontInfoEnd{E d}bind d/T0AddCFFMtx2{/CIDFont findresource/Metrics2 get ` d +E}bind d +%%EndResource +end +%%EndProlog + +%%BeginSetup +statusdict begin (%%[ ProductName: ) print product print ( ]%%)= flush end +[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec +featurebegin{ +%%BeginNonPPDFeature: JobTimeout 0 +0 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/JobTimeout 4 -1 roll put setuserparams}{statusdict/setjobtimeout get exec}ifelse +%%EndNonPPDFeature +}featurecleanup + +featurebegin{ +%%BeginNonPPDFeature: WaitTimeout 120 +120 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse +%%EndNonPPDFeature +}featurecleanup + +featurebegin{ +%%BeginFeature: *HPEdgeToEdge True +<> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *HPPaperPolicy PromptUser + + <> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *HPHalftone PrinterDefault + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Collate True +<> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Smoothing True + + << /PostRenderingEnhance true /PostRenderingEnhanceDetails << /REValue 2 /Type 8 >> + >> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *PageSize Letter + + <> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *StapleLocation 1parallel + + userdict /HPStapleOption {(ONE)} put +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *MediaType None + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *OutputBin Upper +<> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Duplex DuplexNoTumble + + <> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *JRConstraints 0 + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *JRHDInstalled JRHDStore + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *JRHDNotInstalled JRHDPrivate + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *HPPrinterModelName HP_LaserJet_8150_Series_PS + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Option2 False + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Option6 False + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Option3 True + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Option5 False + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Option20 Standard + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Option21 MailboxModeMailbox + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *InstalledMemory 32-39MB + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *PrinterHardDisk False + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *JobRetention True + +%%EndFeature +}featurecleanup +1 setlinecap 1 setlinejoin +/mysetup [ 72 600 V 0 0 -72 600 V 2.99905 785.99908 ] def +%%EndSetup + +userdict begin /ehsave save def end +%%EndPageComments +%%BeginPageSetup +/DeviceRGB dup setcolorspace /colspABC exch def +mysetup concat colspRefresh +%%EndPageSetup + +Pscript_WinNT_Incr begin +%%BeginResource: file Pscript_Win_GdiObject 5.0 0 +/SavedCTM null d/CTMsave{/SavedCTM SavedCTM currentmatrix d}b/CTMrestore +{SavedCTM setmatrix}b/mp null d/ADO_mxRot null d/GDIHMatrix null d +/GDIHPatternDict 22 dict d GDIHPatternDict `/PatternType 1 d/PaintType 2 d/Reps +L2?{1}{5}? d/XStep 8 Reps mul d/YStep XStep d/BBox[0 0 XStep YStep]d/TilingType +1 d/PaintProc{` 1 Lw[]0 sd PaintData , exec E}b/FGnd null d/BGnd null d +/HS_Horizontal{horiz}b/HS_Vertical{vert}b/HS_FDiagonal{fdiag}b/HS_BDiagonal +{biag}b/HS_Cross{horiz vert}b/HS_DiagCross{fdiag biag}b/MaxXYStep XStep YStep +gt{XStep}{YStep}? d/horiz{Reps{0 4 M XStep 0 - 0 8 +}repeat 0 -8 Reps mul + K}b +/vert{Reps{4 0 M 0 YStep - 8 0 +}repeat 0 -8 Reps mul + K}b/biag{Reps{0 0 M +MaxXYStep @ - 0 YStep neg M MaxXYStep @ - 0 8 +}repeat 0 -8 Reps mul + 0 YStep +M 8 8 - K}b/fdiag{Reps{0 0 M MaxXYStep @ neg - 0 YStep M MaxXYStep @ neg - 0 8 ++}repeat 0 -8 Reps mul + MaxXYStep @ M 8 -8 - K}b E/makehatch{4 -2 $/yOrg ~ d +/xOrg ~ d GDIHPatternDict/PaintData 3 -1 $ put CTMsave GDIHMatrix setmatrix +GDIHPatternDict matrix xOrg yOrg + mp CTMrestore ~ U ~ 2 ^ put}b/h0{/h0 +/HS_Horizontal makehatch}b/h1{/h1/HS_Vertical makehatch}b/h2{/h2/HS_FDiagonal +makehatch}b/h3{/h3/HS_BDiagonal makehatch}b/h4{/h4/HS_Cross makehatch}b/h5{/h5 +/HS_DiagCross makehatch}b/GDIBWPatternMx null d/pfprep{save 8 1 $ +/PatternOfTheDay 8 1 $ GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/yExt +~ d/Width ~ d/BGnd ~ d/FGnd ~ d/Height yExt RepsV mul d/mx[Width 0 0 Height 0 +0]d E build_pattern ~ !}b/pfbf{/fEOFill ~ d pfprep hbf fEOFill{O}{L}? restore}b +/GraphInit{GDIHMatrix null eq{/SavedCTM matrix d : ADO_mxRot concat 0 0 snap + +: 0.48 @ GDIHPatternDict ` YStep mul ~ XStep mul ~ nonzero_dsnap YStep V ~ +XStep V ~ E +S/GDIHMatrix matrix currentmatrix readonly d ; : 0.24 -0.24 +S +GDIBWPatternDict ` Width Height E nonzero_dsnap +S/GDIBWPatternMx matrix +currentmatrix readonly d ; ;}if}b +%%EndResource +%%BeginResource: file Pscript_Win_GdiObject_L3 5.0 0 +/GDIBWPatternDict 25 dict @ `/PatternType 1 d/PaintType 1 d/RepsV 1 d/RepsH 1 d +/BBox[0 0 RepsH 1]d/TilingType 1 d/XStep 1 d/YStep 1 d/Height 8 RepsV mul d +/Width 8 d/mx[Width 0 0 Height neg 0 Height]d/FGnd null d/BGnd null d +/SetBGndFGnd{BGnd null ne{BGnd aload ! scol BBox aload ! 2 ^ sub ~ 3 ^ sub ~ +rf}if FGnd null ne{FGnd aload ! scol}if}b/PaintProc{` SetBGndFGnd RepsH{Width +Height F mx PaintData imagemask Width 0 +}repeat E}b E d/mp/makepattern , d +/build_pattern{CTMsave GDIBWPatternMx setmatrix/nupangle where{! nupangle -90 +eq{nupangle R}if}if GDIBWPatternDict @ ` Width Height ne{Width Height gt{Width +Height V 1}{1 Height Width V}? +S}if xOrg yOrg E matrix + mp CTMrestore}b/hbf +{setpattern}b/hf{:/fEOFill ~ d ~ ! setpattern fEOFill{O}{L}? ;}b/pbf{: ! +/fEOFill ~ d GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/OutputBPP ~ d +/Height ~ d/Width ~ d/PaintType 1 d/PatternType 1 d/TilingType 1 d/BBox[0 0 +Width Height]d/XStep Width d/YStep Height d/mx xOrg yOrg matrix + d 20 dict @ ` +/ImageType 1 d/Width Width d/Height Height d/ImageMatrix[1 0 0 1 0 0]d +/BitsPerComponent 8 d OutputBPP 24 eq{/Decode[0 1 0 1 0 1]d}{OutputBPP 8 eq{ +/Decode[0 1]d}{/Decode[0 1 0 1 0 1 0 1]d}?}?/DataSource{PaintData}d E/ImageDict +~ d/PaintProc{` ImageDict image E}b & mx makepattern setpattern E fEOFill{O}{L} +? ;}b/mask_pbf{:/fEOFill ~ d 20 dict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/Height ~ +d/Width ~ d/PatternType 1 d/PaintType 2 d/TilingType 1 d/BBox[0 0 Width Height] +d/XStep Width d/YStep Height d/mx xOrg yOrg matrix + d/PaintProc{` Width Height +T 1 1 dtransform abs ~ abs ~ 0 0 3 -1 $ 0 0 6 array astore{PaintData}imagemask +E}b & mx makepattern setpattern E fEOFill{O}{L}? ;}b/grf4{4 dict `/ShadingType +4 d/DataSource ~ d/ColorSpace ~ d & E shfill}b +%%EndResource +end reinitialize +/DeviceGray dup setcolorspace /colspABC exch def +0 0 scol N 2950 725 M 3113 869 I K +N 3113 869 M 3044 831 I 3069 806 I C + O N 2950 725 M 3113 775 I K +N 3113 775 M 3038 769 I 3044 738 I C + O N 2950 725 M 3113 681 I K +N 3113 681 M 3044 719 I 3038 681 I C + O N 2950 725 M 3113 588 I K +N 3113 588 M 3069 650 I 3044 619 I C + O 55017 VM? +Pscript_WinNT_Incr begin +%%BeginResource: file Pscript_T42Hdr 5.0 0 +/asc42 0.0 d/sF42{/asc42 ~ d Ji}bind d/bS42{0 asc42 -M}bind d/eS42{0 asc42 neg +-M}b/Is2015?{version cvi 2015 ge}bind d/AllocGlyphStorage{Is2015?{!}{{string} +forall}?}bind d/Type42DictBegin{25 dict `/FontName ~ d/Encoding ~ d 4 array +astore cvx/FontBBox ~ d/PaintType 0 d/FontType 42 d/FontMatrix[1 0 0 1 0 0]d +/CharStrings 256 dict `/.notdef 0 d & E d/sfnts}bind d/Type42DictEnd{& @ +/FontName get ~ definefont ! E}bind d/RDS{string currentfile ~ readstring !} +executeonly d/PrepFor2015{Is2015?{/GlyphDirectory 16 dict d sfnts 0 get @ 2 ^ +(glyx)putinterval 2 ^(locx)putinterval ! !}{! !}?}bind d/AddT42Char{Is2015? +{findfont/GlyphDirectory get ` d E ! !}{findfont/sfnts get 4 ^ get 3 ^ 2 ^ +putinterval ! ! ! !}?}bind d/IDStrNull{1 add 2 mul @ string 0 1 3 ^ 1 sub{1 ^ ~ +0 put}for ~ !}bind d/IDStr{@ 1 add 2 mul string 0 1 3 ^{1 ^ ~ @ 2 mul ~ 3 copy +256 idiv put ~ 1 add ~ 256 mod put}for ~ !}bind d/IDStr2{~ @ 1 add 2 mul string +0 1 3 ^{1 ^ ~ @ 2 mul ~ 5 ^ add 3 copy 256 idiv put ~ 1 add ~ 256 mod put}for ~ +! ~ !}bind d/CIDT42Begin{25 dict `/CDevProc ~ d/CIDMap ~ d/CIDCount ~ d +/CIDSystemInfo 3 dict @ ` 3 -1 $/Supplement ~ d 3 -1 $/Ordering ~ d 3 -1 $ +/Registry ~ d E d/CIDFontName ~ d/Encoding ~ d 4 array astore cvx/FontBBox ~ d +/CharStrings 2 dict @ `/.notdef 0 d E d/GDBytes 2 d/CIDFontType 2 d/FontType 42 +d/PaintType 0 d/FontMatrix[1 0 0 1 0 0]d/Metrics2 16 dict d/sfnts}bind d +/CIDT42End{CIDFontName & E/CIDFont defineresource !}bind d/T42CIDCP32K{/CIDFont +findresource @ length dict copy @/FID undef `/CIDFontName ~ d/CIDMap ~ d +/CIDCount ~ d/Metrics2 8 dict d CIDFontName & E/CIDFont defineresource !}bind d +/T42CIDCPR{/CIDFont findresource @ length dict copy @/FID undef `/CIDFontName ~ +d &/CDevProc known{[/CDevProc , @ type/operatortype ne{/exec cvx}if/! cvx/! cvx +/! cvx/! cvx 5/^ cvx 5/^ cvx 0.0 0.0]cvx}{{! ! ! ! ! 5 ^ 5 ^ 0.0 0.0}}? bind +readonly/CDevProc ~ d CIDFontName & E/CIDFont defineresource !}bind d +/T0AddT42Char{/CIDFont findresource/GlyphDirectory get ` d E ! !}bind d +/T0AddT42Mtx2{/CIDFont findresource/Metrics2 get ` d E}bind d/UpdateCIDMap{ +/CIDFont findresource/CIDMap get 3 1 $ putinterval}d/AddXUID{version cvi 3011 +ge{/XUID ~ d}{!}?}bind d/hfDef42CID{/CIDFont findresource @ length dict copy @ +/FID undef `/CIDFontName 2 ^ d @ type @/booleantype ne{/arraytype eq{/CDevProc +~ d}{matrix @ 4 4 -1 $ put/FontMatrix ~ d}?}{! !}? & E/CIDFont defineresource +!}bind d/hfDefRT42CID{/CIDFont findresource @ length dict copy @/FID undef ` +/CIDFontName 1 ^ d &/CDevProc known{[/CDevProc , @ type/operatortype ne{/exec +cvx}if/! cvx/! cvx/! cvx/! cvx 5/^ cvx 5/^ cvx 0.0 0.0]cvx}{{! ! ! ! ! 5 ^ 5 ^ +0.0 0.0}}? bind readonly/CDevProc ~ d & E/CIDFont defineresource !}bind d +%%EndResource +end reinitialize +-0.578 -0.207 1.387 0.922 + 256 array 0 1 255 {1 index exch /.notdef put} for /TTE1CD9F20t00 +Type42DictBegin +[<00010000000a000a000a000a6376742065146ccc000000ac000002746670 +676d2bc15a050000032000000768676c79661b44802b000058e80004e222 +68656164ce8b489100000a8800000036686865610dd60c5100000ac00000 +0024686d74785d72583900000ae4000023446c6f636116f62ad600002e28 +000023486d6178700dba0872000051700000002070726570877d61440000 +5190000007556764697200000000000000000000000005ba0019000005ba +001900000000000000000000000000000000000000000425001900000000 +ffe700000000ffe70000000000000000fe68ffea00000000000000000000 +0000000002f5ffee05cd000002ddffee02f0000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000 +000008000000080000000000000000000000000000000000000000000000 +00000000000000000000000000d2010e012c01130000000000c8010900c8 +000000000000000000000000000000890048001bff77ffb8ffe500a4005f +000aff5cffa1fff6000000000000000afff6000000000000000000000059 +ffa700c9000000c3000000c2008300c3000000bd000000bd007900c3006c +00bd009100af00000000026f00ae00a6009a0000009b0094008b00cc00ae +00a600940000000000ff000001e300000000000000000000000000000000 +00000000000000000000000000cd00cd006801ee0060008c000000000000 +0000000000000000000000a800a800a800b900cd00a80052016a0049007d +007d0083008a00000071009b00910078000001fc0071ff8f022a006d0094 +00a0029a030a00b800ae008b018b019101d10391008c00730268027d01b0 +01dd021c033302a3026b02730152024c0021004c05e704f20098ff6800ac +00c500850085005c0054006000b401baff1ffe680000008300bc00940094 +ff85ffae00520029061400ae00460046fe580560008f076002f20025003e +004700500058007300a80160006000950025003e004700500058007300a8 +01600000002d005000600081009300ba0108ffd3ffaeff9106520060005c +00b0012b012b04ba013e018507600016000a004b403f545249483b393837 +363534333231302f2e2d2c2b2a292827262524232221201f1e1d1c1b1a19 +1817161514131211100f0e0d0c0b0a090807060504030201002c01b01843 +58456ab0194360b0462344231020b0464ef04d2fb000121b21231133592d +2c01b0184358b0052bb000134bb0145058b100403859b0062b1b21231133 +592d2c01b01843584eb0032510f221b000124d1b2045b00425b00425234a +6164b0285258212310d21bb0032510f221b0001259592d2cb01a43582121 +1bb00225b0022549b00325b003254a612064b01050582121211bb00325b0 +032549b0005058b0005058b8ffe238211bb0103821591bb0005258b01e38 +211bb8fff03821595959592d2c01b0184358b0052bb000134bb0145058b9 +0000ffc03859b0062b1b21231133592d2c4e018a10b146194344b00014b1 +0046e2b00015b90000fff03800b0003cb0282bb0022510b0003c2d2c0118 +b0002fb00114f2b00113b001154db000122d2c01b0184358b0052bb00013 +b90000ffe038b0062b1b21231133592d2c01b018435845646a23456469b0 +1943646060b0462344231020b046f02fb000121b2121208a208a52581133 +1b212159592d2c01b10b0a432343650a2d2c00b10a0b4323430b2d2c00b0 +462370b101463e01b0462370b10246453ab10200080d2d2cb0122bb00225 +45b00225456ab0408b60b0022523442121212d2cb0132bb0022545b00225 +456ab8ffc08c60b0022523442121212d2cb000b0122b2121212d2cb000b0 +132b2121212d2c01b00643b00743650a2d2c2069b04061b0008b20b12cc0 +8a8cb8100062602b0c642364615c58b00361592d2cb1000325456854b01c +4b505a58b0032545b0032545606820b004252344b0042523441bb0032520 +4568208a2344b00325456860b003252344592d2cb00325204568208a2344 +b003254564686560b00425b0016023442d2cb00943588721c01bb0124358 +8745b0112bb0472344b0477ae41b038a45186920b04723448a8a8720b0a0 +5158b0112bb0472344b0477ae41b21b0477ae4595959182d2c208a452345 +6860442d2c456a422d2c01182f2d2c01b0184358b00425b0042549642345 +64696120b080626ab00225b00225618cb0194360b0462344218a10b046f6 +211b21212121592d2c01b0184358b0022545b002254564606ab00325456a +6120b00425456a208a8b65b0042523448cb00325234421211b20456a4420 +456a44592d2c012045b00055b018435a584568234569b0408b6120b08062 +6a208a236120b003258b65b0042523448cb00325234421211b2121b0192b +592d2c018a8a45642345646164422d2cb00425b00425b0192bb0184358b0 +0425b00425b00325b01b2b01b0022543b04054b0022543b000545a58b003 +252045b040614459b0022543b00054b0022543b040545a58b004252045b0 +4060445959212121212d2c014b525843b00225452361441b2121592d2c01 +4b525843b00225452360441b2121592d2c4b525845441b2121592d2c0120 +b003252349b04060b0206320b000525823b002253823b002256538008a63 +381b212121212159012d2c4b505845441b2121592d2c01b005251023208a +f500b0016023edec2d2c01b005251023208af500b0016123edec2d2c01b0 +062510f500edec2d2c462346608a8a462320468a608a61b8ff8062232010 +238ab14b4b8a70456020b0005058b00161b8ffba8b1bb0468c59b0106068 +013a2d2c2045b00325465258b0022546206861b00325b003253f2321381b +2111592d2c2045b00325465058b0022546206861b00325b003253f232138 +1b2111592d2c00b00743b006430b2d2c8a10ec2d2cb00c4358211b2046b0 +005258b8fff0381bb0103859592d2c20b0005558b8100063b003254564b0 +0325456461b0005358b0021bb04061b00359254569535845441b2121591b +21b0022545b00225456164b028515845441b212159592d2c21210c642364 +8bb84000622d2c21b08051580c6423648bb82000621bb200402f2b59b002 +602d2c21b0c051580c6423648bb81555621bb200802f2b59b002602d2c0c +6423648bb84000626023212d2c4b5358b00425b004254964234564696120 +b080626ab00225b00225618cb0462344218a10b046f6211b218a11231220 +392f592d2c2121212121212d2cb0134358031b02592d2cb0134358021b03 +592d2cb00a2b2310203cb0172b2d2cb00225b8fff038b0282b8a102320d0 +23b0102bb0054358c01b3c59201011b00012012d2c4b53234b515a58381b +2121592d2c01b0022510d023c901b00113b0001410b0013cb001162d2c01 +b00013b001b0032549b0031738b001132d2c4b53234b515a5820458a6044 +1b2121592d2cb0024354584b53234b515a58381b2121591b21212121592d +2c4b53234b515a58381b2121592d2c4b5458381b2121592d2c4b52587d1b +7a592d2cb1020042b123018851b1400188535a58b910000020885458b202 +010243604259b12401885158b920000040885458b202020243604259b124 +01885458b2022002436042004b014b5258b2020802436042591bb9400000 +80885458b202040243604259b94000008063b80100885458b20208024360 +4259b94000010063b80200885458b2021002436042595959592d00010000 +00016148e1f6c9625f0f3cf5001b080000000000aff53caf00000000b8f4 +5fe9fb5cfe520b170760000000090001000100000000000100000760fe52 +00000ab3fb5cfa7a0b170001000000000000000000000000000008d10258 +0032000000000239000002200000023900b602d70054047300170473004e +071d0081055600580187005c02aa007b02aa004a031d004204ac00710239 +00b602aa0042023900b6023900000473005c047300e30473003f0473005a +0473001f047300560473005c047300620473005604730056023900b60239 +00b604ac007104ac007104ac00710473005e081f00730556fffe055600a4 +05c7006005c700a4055600a404e300a40639006005c700a4023900bc0400 +0037055600a4047300a406aa00a405c700a406390060055600a406390060 +05c700a40556005c04e3002d05c700a40556000c078d00190556000a0556 +000a04e300250239008b023900000239002103c1004a046afff402aa0056 +0473004e0473008b04000048047300480473004802390010047300480473 +008b01d3008b01d3ffb80400008b01d3008b06aa008b0473008b04730048 +0473008b0473004802aa008b0400003f02390023047300870400001b05c7 +000a0400000e0400001b0400002902ac0039021400bc02ac003104ac0058 +0556fffe0556fffe05c70060055600a405c700a40639006005c700a40473 +004e0473004e0473004e0473004e0473004e0473004e0400004804730048 +04730048047300480473004801d3007901d3ffec01d3ffac01d3ffd50473 +008b04730048047300480473004804730048047300480473008704730087 +0473008704730087047300500333008504730071047300310473005602cd +0068044cfffe04e3008b05e5000005e500000578003202aa00e302aa003f +04ac0071080000000639005004ac005c04ac007104ac007104ac00710473 +00020473008b03f4003305b4007b069600a4046400000231ffb202f6002b +02ec002d06250071071d004e0473004804730062023900b604ac00710464 +001404730042046400330556fffe0473008d0473008d0486005b0556fffe +0556fffe0639006008000060078d00480258fff404b0fff402aa005402aa +005401c7007d01c7007d04ac007103f4002e0400001b0556000a0156fe54 +0473004c02aa005a02aa007f040000100400001004730050023900b60239 +00b603220090080000190556fffe055600a40556fffe055600a4055600a4 +023900ac0239ffdf023900080239001f06390060063900600639006005c7 +00a405c700a405c700a401d3008b02aa001702aa000602aa001d02aa002d +02aa00f802aa00a202aa0085037a009d02aa00b602aa00170473000801d3 +000c0556005c0400003f04e3002504000029021400bc05c7000204730048 +0556000a0400001b055600a40473008b04ac007104ac00a602aa006a02aa +001902aa002106ac007f06ac007f06ac003504e300000639006004730048 +023900bc0556005c0400003f05c700600400004805c70060040000480473 +00480400fff4023900b60556fffe0473004e0556fffe0473004e05c700a4 +0513004805c70002055600a404730048055600a404730048047300a401d3 +0047047300a40255008b047300a402f3004205c700a40473008b05c700a4 +0473008b063900600473004805c700a402aa008b05c700a402aa002b0556 +005c0400003f04e3002d0239002304e3002d02d0002305c700a404730087 +05c700a40473008704e300250400002904e300250400002904ae00a40639 +006006790060049c0048047300480400004804ae00480400002105310048 +0400fff4047200b602f6004c09e9008f063900bc03a6008b0568002102aa +00e502aa0056071d00810296000f04d5009202d6008302d6008304d500b1 +02d600700556fffe0473004e05c700600400004805c70060040000480556 +00a404730048055600a404730048055600a4047300480639006004730048 +0639006004730048063900600473004805c700a40473008b05c700140473 +00000239ffce01d3ff9b0239ffe501d3ffb20239fff501d3ffc2023900bc +01d3008b0400003701d3ffac056800a40400008b0400008b047300a401d3 +004205c700a40473008b05c700a40473008b063900600473004806390060 +0473004805c700a402aa005a0556005c0400003f04e3002d0239002305c7 +00a40473008705c700a40473008705c700a40473008705c700a404730087 +078d001905c7000a0556000a0400001b0200008b0556fffe0473004e0800 +0000071d004e0639005004730048023900b6078d001905c7000a078d0019 +05c7000a078d001905c7000a0556000a0400001b01c7007d0400fff40473 +00310473004806ac007f06ac003606ac003606ac006d02aa00fc02aa0085 +02aa00ee034800370556fffe0646003306b7003303290033069a00000631 +0000069a0000033300290556fffe055600a40575000c055600a404e30025 +05c700a4023900bc055600a40556fffe06aa00a405c700a4053f006d0639 +006005c700a4055600a404e5006004e3002d0556000a0556000a0679005e +06390066023900080556000a049c0048040000480473008b01ec00790473 +00870481008b0452001b03e100480473008b0473005c01ec008b0400008b +0400001b0473008b0400001b03e10048047300480491008b044800480473 +0087042d000e058500870585004802520008047300870473004804730087 +05850048055600a40666002d048900a405bc00600556005c023900bc0239 +00080400003707ae000a07ae00a40666002d055600a4051f000805c700a4 +0556fffe053d00a4055600a4048900a406330023055600a4073500060514 +005a05c700a405c700a4055600a405a4000a06aa00a405c700a406390060 +05c700a4055600a405c7006004e3002d051f000806cb00600556000a05fc +00a40579007706e100a4071700a4063d0000071000a4053d00a405bc005e +080c00a405c7005c0473004e0496005e043f008b0310008b04aa00000473 +004805aa0004040000230479008b0479008b0400008b0491000a05b6008b +0473008b047300480473008b0473008b0400004803aa00250400001b0698 +00480400000e0498008b0444005e066a008b068f008b04f6000005bc008b +042f008b0400001b05f4008b0456003504730048047300000310008b0400 +00480400003f01d3008b01d3ffd501d3ffb806e9000a0698008b04730000 +0400008b0400001b0473008b047300a403b8008b046afff407fc008f0473 +008b02aa002302aa002102aa006d02aa002101d3008b0556005c0400003f +0473000001480060028f004e028f005e028f005e0148006001ec004e01ec +005801ec007101ec005601480060028f004e014800600148007502140039 +01ec007101cf0091014800600148ff79023900b604cd0083048f003b035c +00170429001404cd0098028f004c02cd001404cd009804cd003b028f004c +0429003f0429005a0429004804cd005004cd003b02cd004a02cd003b04cd +005004cd002d04cd00870466006f043d003b0466003b047b00980400002d +0550009804cd005404cd003704cd003704cd003702000060037100600566 +0077028fffa20429003f0429003f0429ff790429ff7904cd002d05500098 +05500098055000980550009804cd008304cd008304cd0083048f003b035c +00170429001404cd0098028f003d02cd001404cd003b028f003d0429003f +0429005a0429004804cd003b02cd003b04cd005004cd00870466006f0466 +003b047b00980400002d0550009804cd0054028f004c048f003b0429005a +0466006f04cd00290000ffdc0000ff250000ffdc0000fe51014800600639 +00600473004805c700a40473008702aa00cf02aa00f802aa005602aa00e3 +02aa001702aaff0c02aa001702aa000402aa002d02aa002d02aa002d02aa +000402aa00cf02aa000402aa002d02aa002b02aa002b02aa001902aa0017 +0556fffe0473004e0556fffe0473004e0556fffe0473004e0556fffe0473 +fff20556fffe0473004e0556fffe0473004e0556fffe0473004e0556fffe +0473004e0556fffe0473004e0556fffe0473004e0556fffe0473004e0556 +fffe0473004e055600a404730048055600a404730048055600a404730048 +055600a404730048055600770473fff1055600a404730048055600a40473 +0048055600a4047300480239009801d30098023900bc01d3008b06390060 +0473004806390060047300480639006004730048063900600473fff20639 +006004730048063900600473004806390060047300480639006004730048 +063900600473004806390060047300480639006004730048063900600473 +004805c700a40473008705c700a40473008705c700a40473008705c700a4 +0473008705c700a40473008705c700a40473008705c700a4047300870556 +000a0400001b0556000a0400001b0556000a0400001b0473004801df00b2 +01df007501df002b01df007501f4ff8501f4ff8501f4ff850458ff850458 +00560458ff85045800560458ff850458005604d7ff8504d7ff8506c3ff85 +045801310458013f0458005a0458003d0458007504580048045800480458 +002d0458002b0458005c06c3ff850458ff850323ff8503a000560458ff85 +0323ff8503a000560252ff85025eff85022500ac0252ff85025eff850327 +ff8501baff850323ff8501f4ff85039aff850323ff85030e004801f4ff85 +04bc001f030e004804bc001f026600cd01f4ff85045c000c04c3003501df +000001df000001df0000045c000c04c30035045cfff604bc001f022500ac +04c3001f026600cd04730062034c008901df002701df00710364000001df +0071051f001f01df00ae05b80050027b003d05b8005005b8005004580056 +045800560458005602b8000a02b8000a03e1005203e100520698000a0698 +000a08b8000a08b8000a04a4ff8504a4ff85045c0052045c005201baff85 +0652005004a8002704cd00330414002902b8001f043d0033027b003d0364 +0000051f001f051f001f01ae000001df000001ae000001ae000001ae001b +01ae000001df00000133000a045c000c04c3003501cb006801c7001f0266 +00e9026600620266005601f4ff850252ff85025eff8505b8005003df0093 +0000fb5c0000fb5c0000fb5c0000fb5c0000fe000000fd3b0000fc4c0000 +fd0a0000fd2d0000ff170000fdaa0000fda80000fe850000fe9605c3005e +0000fbdf0000fd1b0000fbfa0000fe020000fdf00000fc4c0000fd7f0000 +fd2d045e005e047f002d04ac002d047f0056047f0056055c002d03640006 +03df0050051f0050047f002d04ac002d05c3005e05c3005e04ac005004ac +005003df00930571002d062100560635005e047f0056047f0056045e005e +049a00500404009304f6005004ac005004ac0050047f0081047f00810537 +00500537005004ac005004ac002f0400008103df0093045e005e03df0050 +04ac005003df0050047f0056051200500431005004db0050053700500431 +0050045e005e04000050039a004a0000fcfe035c001f035cfe620000fc73 +0000fc730000fc730000fc730000fee10000fe000000fee9031f00b604fe +009a0248008b048f008b035c0010035cffc903df0000035c001f04830050 +0000fd100000ff190000fe5e0000fda80000fec10000fe960000fe620000 +fe680431006204bc006004bc005c04fe000e04fe007f04fe006004fe0060 +04bc001704fe003504fe006004fe004a0527005006d100350000fee10000 +fe000000fee901baff8505b8005001f4ff8504580056045800560458ff85 +03e1005204c100330327ff8504c100330327ff85051f001f04bc001f01f4 +ff85030e0048027b003d045801310458013f0458005a0458003d0458003d +0458004a045800c90458002d0458002b0458005c04e3002d023900230556 +00a40473004805c700a40479008b04140029023900bc0400003701d3008b +01d3ffb80489003a031000300786000605cf000405aa00a40447008b0556 +00a40400008b05fc00a4049a008b0556000a0400001b0556000a0400001b +05a5000a043a000e057900770444005e057900a40473008b063900600473 +00480639006004730048080000000000ffdc0000ff160000ffdc0000ff20 +0000ffdc0000ff200197000005b8005001f4ff8502b8000a03e10052043d +00330440006401f4ff8503fdff85044000640440006406d9001306d90013 +06d9001306d9001301ba00280493004a031d0042065200500252ff85025e +ff8501df000001df000006750048027b003d0000ffdd0000fe870000fefd +047300690568005c05c7006005c7006006aa008b05c70000098700a4078d +00000556000004e3002d0800002901ae000501ae002a026600ea02660056 +0266006201ae002e04a8002701ae001001cb006801cb006801df000501df +000501df002a01df002a01df002a01df002a028000ae028000b203640000 +03640000057e001f04bc001f05b8005001f4ff8505b8005001f4ff8505b8 +005001f4ff8505b8005001f4ff8505b8005001f4ff8505b8005001f4ff85 +04580056045800560458ff8504580056045800560458ff85045800560458 +00560458ff8504580056045800560458ff8504580056045800560458ff85 +04580056045800560458ff8502b8000a02b8000a02b8000a02b8000002b8 +000a02b8fffc02b8fffc02b8000803e1005203e1005203e1005203e10052 +03e1005203e1005203e100520698000a04d7ff850698000a04d7ff850698 +000a04d7ff8508b8000a06c3ff8508b8000a06c3ff8504a4ff85045c0052 +03a000560458ff850323ff8506520050065200500252ff85025eff850652 +00500252ff85025eff85065200500252ff85025eff85065200500252ff85 +025eff8504a8002704a8002706d9003306d9ff7904c100330327ff8504cd +00330327ff8504cd00330327ff8504cd00330327ff8504c100330327ff85 +04c100330327ff8504c100330327ff8504c100330327ff8504c100330327 +ff660414002901baff850414002901baff850414002901baff8504140029 +01baff85043d003301f4ff85043d0033043d003301f4ff85043d003301f4 +ff8504580056045800560458ff8503640000036400000364000003640000 +0364000003640000036400000364000005f3000505900005051f001f04bc +001f01f4ff8503640000051f001f04bc001f051f001f04bc001f0000fe46 +0000ff6e0000ff590000ffb70000fec308fc003208ad00320000ffb50000 +ffb60000ff410000ff920000fec30000ffbf0168003202cc00320000fea2 +0000ff5a04cd00320000ff580000ff580000ff920698000a04d7ff8508b8 +000a06c3ff85045c005203a000560458ff850323ff85034c008902b8001f +02aa001d02aa001d02aa001d02aa001d02aa003f02aa003f02aa000402aa +000402aa000402aa000402aa00ca02aa00e302aa001702aa001702aa001d +02aa001d055600a4047300480556fffe0473004e055600a40473008b0556 +00a40473008b055600a40473008b05c700600400004805c700a404730048 +05c700a40473004805c700a40473004805c700a40473004805c700a40473 +0048055600a404730048055600a404730048055600a404730048055600a4 +04730048055600a40473004804e300a402390010063900600473004805c7 +00a40473008b05c700a40473008b05c700a40473008b05c7007104730053 +05c700a40473008b0239ffce01d3ff9b0239000701d3ffd3055600a40400 +008b055600a40400008b055600a40400008b047300a401d3008b047300a4 +01d3ffb1047300a401d3ffb1047300a401d3ffac06aa00a406aa008b06aa +00a406aa008b06aa00a406aa008b05c700a40473008b05c700a40473008b +05c700a40473008b05c700a40473008b0639006004730048063900600473 +004806390060047300480639006004730048055600a40473008b055600a4 +0473008b05c700a402aa008b05c700a402aa008b05c700a402aa006605c7 +00a402aa001d0556005c0400003f0556005c0400003f0556005c0400003f +0556005c0400003f0556005c0400003f04e3002d0239002304e3002d0239 +002304e3002d0239ffed04e3002d0239001705c700a40473008705c700a4 +0473008705c700a40473008705c700a40473008705c700a4047300870556 +000c0400001b0556000c0400001b078d001905c7000a078d001905c7000a +0556000a0400000e0556000a0400000e0556000a0400001b04e300250400 +002904e300250400002904e30025040000290473008b0239000d05c7000a +0400001b0473004e0200008b049c0048049c0048049c0048049c0048049c +0048049c0048049c0048049c00480556fffe0556fffe060a0000060a0000 +05e2000005e20000059c0000059c00000400004804000048040000480400 +0048040000480400004805eb000005eb0000073000000730000007300000 +073000000473008b0473008b0473008b0473008b0473008b0473008b0473 +008b0473008b065c0000065c000007a1000007a1000007a1000007a10000 +075900000759000001ec008b01ec008b01ecffdb01ecffdb01ec000301ec +000301ecff9b01ecff9b02b6000002b6000003fb000003fb000003fb0000 +03fb000003b3000003b30000047300480473004804730048047300480473 +004804730048063900000639000007da000007da00000776000007760000 +047300870473008704730087047300870473008704730087047300870473 +0087064c00000778000007ca000007490000058500480585004805850048 +0585004805850048058500480585004805850048063900000639000007da +000007da000007760000077600000736000007360000049c0048049c0048 +04000048040000480473008b0473008b01ecffeb01ec0078047300480473 +004804730087047300870585004805850048049c0048049c0048049c0048 +049c0048049c0048049c0048049c0048049c00480556fffe0556fffe060a +0000060a000005e2000005e20000059c0000059c00000473008b0473008b +0473008b0473008b0473008b0473008b0473008b0473008b065c0000065c +000007a1000007a1000007a1000007a10000075900000759000005850048 +058500480585004805850048058500480585004805850048058500480639 +00000639000007da000007da000007760000077600000736000007360000 +049c0048049c0048049c0048049c0048049c0048049c0048049c00480556 +fffe0556fffe0556fffe0556fffe0556fffe02aa010302aa00f902aa0103 +02aa000602aa00060473008b0473008b0473008b0473008b0473008b065e +0000064d000006cf000006be000005c700a402aa004602aa006e02aa0006 +01ecffc201ecffb201ecff7e01ecff7e01ecff9b01ecff9b0239fff60239 +ffe6032900000318000002aa004602aa006e02aa00060473008704730087 +04730087047300870491008b0491008b04730087047300870556000a0556 +000a06a6000006e7000005eb0000034800370348003702aa005605850048 +058500480585004805850048058500480708000006930000070800000693 +00000639006602aa00e302aa01030000fec30000fec80000fdf40000fed8 +0000ffa40000feea0000ff4c0000fe9e0000fec30000ffbf0000ff3d0000 +fe9e0000fed80000fed80000ffae0000ffae0000ffae000000640000ff47 +0000ff480000ff440000ff440000fe87000000000000ffa60000ff440000 +ff440000ff440000fec80000ff2d000000000000feeb0000ff4c0000ffae +0000ff350000ff240000ffbf0000fe870000febb0000fec30000fec30000 +fed80000fed80000feb10000fec80000fdbf0000fdf40000feb10000fec8 +0000fdbf0000fe870000fee30000ffa60000fe870000ff440000feba0000 +ff230000ff9a0000fdf40000feb10000ffae0000fe940000ffa40000fe87 +0000fdf40000ff3d0000ff440000feb10000feb10000feb10000ff030000 +ff440000ff530000ff530000ff53045cffee04c30016045c000c04c30035 +045c000c04c30035045c000c04c30035045c000c04c30035045c000c04c3 +0035045c000c04c30035045800790458003c0473000a05fd0000053d00a4 +0473008b053d000d0473000305c7006905c700600400004805c70002066e +0000053d005104730048047300480556006d0514006a04e3ffd106390060 +0556000c0724008b01d3008b02390014055600a40400008b01d300140400 +001b06aa008505c7ffd10473008b06390060070e006005a0004805fd0000 +0473008b055600a40556006a0400005004e50060035600000239002304f7 +00140239002304e3002d0625007105c700a4062c000a0400001b04e30025 +04000029046c001f046c006003c6004803c600330473003f0473002f03a9 +0020044e0023046c008b021400bc0214002605d200c1023900b60a5b00a4 +097800a4084c0048086000a4064a00a40363008b097800a4073e00a40607 +008b0556fffe0473004e0239ffdf01d3ffa9063900600473004805c700a4 +0473008705c700a40473008705c700a40473008705c700a40473008705c7 +00a404730087047300480556fffe0473004e0556fffe0473004e08000000 +071d004e06390060047300480639006004730048055600a40400008b0639 +0060047300480639006004730048046c001f03c6002b01d3ffac0a5b00a4 +097800a4084c00480639006004730048085b00a4046c008b05c700a40473 +008b0556fffe0473004e0556fffe0473004e055600a404730048055600a4 +047300480239ff6601d3ff3e0239fffa01d3ffc806390060047300480639 +00600473004805c700a402aa000605c700a402aa007c05c700a40473006a +05c700a404730087040200420374002305c700a40473008b057900a404a8 +00420446003904e30025040000290556fffe0473004e0639006004730048 +0639006004730048063900600473004806390060047300480556000a0400 +001b02aa001d02aa001d02aa001702aa003f02aa00040473008c049c0048 +049c00480473008b0400001b0400000004730048047300480473004805db +004804000048040000230552002304460048026200100473004804730048 +04ae004b0400001b04e0001d047300870473008b0473008b01d3000001ec +008b01d3008b029e0000024e000001d3008b0486008b06aa008506aa0085 +06aa008b0473ffb80473008b0455008b0473004805c50048058500480473 +004802aafff802aafff802aafff802aa008b02aa008b0239008b0239fff8 +0447008b0447008b0400003f0231ffb2026200100231ffcf039900000239 +0012023900230473000004c50048043b00870400001b05c7000a0400001b +03ce000004000029046e002903c6002b03c6002c0400001b040000480400 +001b0400004806390060043f008b0446004804ae004b0473008b02ff000a +040000080364008b047300480400001b04000048078e00480718004807fc +004805b6002303930023060c0023061900100568008b04f0008b03e2001e +048200880481008b0473008705cd000a0767fffd05cd000a047300480585 +004804970014063900600473004805c700600400004804e300a403fc008b +04ff0000043c0032060d000a049d000006aa008506aa0085057900770473 +0087057900a4044e000a0556006a0556006a04e0000504e0000505e50060 +0476004803c70014034f0028049700140496005e0400004801d3ffb80639 +006003b6004803b6001b095f006005e8001b0600000a04c0000a079800a4 +05c2008b054a000d03fe001b06f800a4057a008b0735000805aa000508f7 +00a4076c008b0514006d0400004a0679005e058500870639006004730048 +0604000c04a4001b0604000c04a4001b0ab3006008d300480711005f0568 +0048095f006008800048095f006005e8001b05c700600400004803f80014 +02aafffa02aa000002aa000002aa000007bd000a07bd002a05c700a40479 +008b053d000f042f0008055600a40473008b048900a40426008b0514005a +040000230556001804000008069d000a04d1000a071200a40543008b0847 +00a406c6008b05c700600400004805c700600400004804e3002d03aa0025 +0744000a0563000a057900770444005e070b000a053b000a070b000a053b +000a023900bc0735000605aa0004055600a40400008b05a4000a0491000a +05c700a40473008b05c700a40473008b057900770444005e06aa00a405b6 +008b0556fffe0473004e0556fffe0473004e08000000071d004e055600a4 +0473004806390060047300480735000605aa00040514005a040000230443 +001f03c6002b05c700a40479008b05c700a40479008b0639006004730048 +063900600473004805bc005e0400001b051f00080400001b051f00080400 +001b051f00080400001b057900770444005e071000a405bc008b053d0051 +0473004807d100510724004807e2006d06f0004a0582006d0468004a0838 +000a073e000a085b00a4071f008b0639006004ae004b0609002d056b0025 +02aa001d02aa001702aa003f02aa001d02aa000402aaff8c04c1003304c1 +0033028f004c0000fed802fe000004cd0037045cffc904c3fff100000000 +000000280000002800000028000000380000009800000102000002a20000 +0412000005600000070e0000076a000007da0000084c000008f000000976 +000009ea00000a3600000a7200000ae400000b9400000bfe00000cc40000 +0dda00000e8000000f7400001064000010fe0000123a0000132e0000137c +00001402000014b000001520000015d0000016b8000018e400001a1a0000 +1b4600001c6a00001d2600001db800001e3400001f8600002024000020a0 +0000215400002280000022da0000243a000024d8000025fe000026c80000 +28cc00002a1e00002bd200002c4200002ce200002dce00003086000031b8 +000032c60000335e000033bc0000342e00003484000035400000356a0000 +35c40000374c0000385e0000394c00003a4e00003b8a00003c5e00003de8 +00003e9200003ee800003fb2000040d00000411000004228000042da0000 +43ce000044ea0000460400004682000047e8000048ae0000496800004a68 +00004c5400004e0200004f7200005016000050fa0000515a000052380000 +52ec0000534c00005388000054f2000055320000558c000055da0000562c +0000565a0000568a000056bc000056f60000572e000057660000589a0000 +58c8000058f4000059220000596c000059e400005a5000005a9400005b0a +00005b2e00005b5a00005b8600005bb400005c0600005c3800005c660000 +5c9200005cb600005d0800005da200005e380000600e000061620000631a +000063a40000642e000065680000670a0000689c000069f400006a500000 +6a9800006b7400006c6200006df200006eec00006f7c0000704600007112 +000072820000732c00007416000074c2000075120000757c000076060000 +7712000077ba000078a400007a6a00007b8a00007c9400007d0600007d84 +00007e1000007f0000007fda000080ce00008148000081c6000082500000 +8296000082f40000834e0000846c000085f20000864a000086aa00008770 +0000883a000088a200008918000089a400008a3e00008a7a00008ac60000 +8b3a00008c8200008cfe00008d7e00008e7e00008f6a000090300000907a +000090f0000091ac00009390000093e00000942600009466000094b80000 +94fa0000953600009576000096180000965c000096a2000097080000974e +00009796000097f00000983200009868000098d00000994c000099740000 +99fa00009a4a00009ad000009b4600009be800009c5800009ce600009dce +00009e9e00009ee400009f1200009f5600009f7a00009ff80000a0e20000 +a21e0000a25e0000a28c0000a3700000a4840000a4d80000a5ca0000a62e +0000a6fc0000a7dc0000a8700000a9080000a9a80000aa420000aa8a0000 +aab40000aaf00000aca60000ae180000ae5e0000ae8c0000aed40000aefe +0000b0380000b0760000b0860000b0c60000b0f20000b2840000b4400000 +b4860000b4ca0000b4da0000b5c40000b7660000b7aa0000b7d40000b818 +0000b86c0000b91e0000b9ba0000b9d20000b9ea0000ba2c0000ba540000 +ba9e0000bace0000bb180000bb460000bb8a0000bbb80000bbfe0000bc3a +0000bc7a0000bca20000bd7e0000bebc0000bf000000c01c0000c05a0000 +c0980000c0f00000c1240000c1680000c1940000c1ca0000c1ee0000c244 +0000c35c0000c4820000c5ce0000c6ec0000c7ee0000c8be0000c9640000 +ca740000caba0000cb060000cb860000cd5a0000cd8c0000cdb40000cdee +0000ce200000ce820000cff40000d0ee0000d1440000d1780000d1c60000 +d2180000d2d00000d43e0000d47a0000d4be0000d4e20000d5180000d53c +0000d6080000d7760000d7b80000d7dc0000d8a00000d8d20000d91e0000 +d94a0000d98c0000d9b00000db580000dd080000dd4c0000dd900000de72 +0000df6a0000dfe80000e0240000e0c20000e1080000e1860000e1c20000 +e2800000e32e0000e37c0000e44e0000e5e00000e7740000e8860000e95a +0000ea2e0000ea5c0000ea8c0000eb660000ec4c0000ec920000eccc0000 +ed0c0000ed300000ed580000ee460000ee8c0000eeb40000ef500000f03e +0000f07e0000f0a20000f0f20000f1280000f1680000f18c0000f28c0000 +f3bc0000f4000000f4240000f4680000f48c0000f4e80000f6b60000f8b8 +0000f8fa0000f9220000f9680000f9940000f9de0000fa200000fa440000 +fa7a0000faa20000fae60000fb160000fb560000fb7a0000fbe00000fc1e +0000fd800000fe460000fefe0000ffb800010072000101240001018c0001 +02000001023a000102e000010336000103ba0001042c000104b600010512 +00010562000105ae00010624000107560001087c00010942000109d80001 +0a7200010b1000010b8e00010cc000010d8200010ed400010f6e00010ffc +000110fe00011184000112520001131400011396000114a8000115dc0001 +16ae000117b2000118900001190a0001193600011976000119a6000119fe +00011a4a00011b5400011c7800011d9200011e5a00011f3e00011fc40001 +20ec0001224c0001231c0001241c00012568000125780001264c0001272e +000127be0001294600012a3600012b2200012b8c00012bd800012c060001 +2c4000012c9600012cf200012e1600012e5a00012f86000130f00001317c +0001324000013250000133440001343a0001353000013590000135ea0001 +3688000137c200013882000139b400013a1600013ae200013b8600013ce6 +00013e1a00013ede00013f1c000140420001410c000142680001430c0001 +44040001448e0001456000014660000146d20001485c0001496c00014aa6 +00014b5400014c0a00014cc400014da800014e9600014f2600014fec0001 +513c0001528a000153ac0001552c0001562800015700000157740001584e +0001598c00015b1400015c1c00015cda00015d2200015e2a00015eee0001 +600e000160b00001619c0001621e0001633e000164060001648600016658 +000167d20001693e000169e200016a9c00016b5600016c4400016d020001 +6d6400016dfa00016f2e0001702600017120000171740001728a000172b0 +000173c6000173d6000173e60001748000017490000175b8000176900001 +776a0001778e000177cc00017846000178d40001794a0001798000017abc +00017b1200017baa00017c7400017cf800017de400017e2400017e480001 +7e6c00017fce00018070000181f6000182ec000183e600018450000184f6 +000185f20001864a000186b00001871c0001882600018890000188e20001 +892a0001897c000189d600018a4800018aae00018b1200018c7600018d0a +00018dd000018e3a00018ee600018f6600018fda00019078000191760001 +91fc0001929000019320000193fe000194a8000195940001962a000196ae +00019780000198440001990e000199ee00019af200019c3600019d4c0001 +9dc600019ec600019f7a00019fcc0001a0280001a0920001a0ce0001a132 +0001a2100001a2340001a2660001a2a40001a2ca0001a3060001a3dc0001 +a4000001a4220001a4680001a4ac0001a4d00001a4f40001a5400001a568 +0001a58e0001a5ba0001a5de0001a6020001a6340001a6580001a6840001 +a6ac0001a6d40001a6fc0001a7200001a7460001a76a0001a7c20001a810 +0001a8460001a87e0001a8a60001a8dc0001a9000001a9240001a94c0001 +a9740001a99c0001aaa00001aad00001ab800001abe00001ac420001acac +0001ae020001af3c0001b0240001b10e0001b17a0001b1a20001b1fc0001 +b2580001b2e40001b3720001b44a0001b5160001b5a40001b6320001b700 +0001b7c20001b84e0001b91a0001b9c40001ba700001bb660001bc420001 +bd100001bd340001bd5c0001bd840001bdb20001be020001be3e0001be8e +0001bec20001bf160001bf4c0001bf820001bfb60001c0140001c05a0001 +c0800001c0ae0001c0d40001c1020001c1280001c1560001c17c0001c1aa +0001c1e00001c2200001c2440001c2680001c28c0001c2b00001c2f00001 +c3140001c3620001c39a0001c3e80001c41c0001c46e0001c4a20001c4e4 +0001c5140001c5700001c5ae0001c5e40001c61e0001c6400001c6620001 +c6860001c6aa0001c6d20001c6fa0001c7680001c7a00001c81e0001c84e +0001c8c40001c8f00001c9180001c93e0001c9ba0001c9f80001ca3e0001 +ca6a0001caa60001cada0001cb020001cb320001cb6e0001cb940001cbb8 +0001cbdc0001cc000001cc240001cc4c0001cc700001ccae0001ccdc0001 +cd140001cd400001cd680001cd940001cdce0001cdfc0001ce200001ce44 +0001ce680001ce8c0001cec00001ceee0001cf240001cf4e0001d0800001 +d0ec0001d17e0001d2060001d2680001d2940001d2cc0001d3080001d33a +0001d3700001d4440001d5640001d5a00001d5d60001d6ca0001d7180001 +d81c0001d8ee0001d99e0001da5c0001db380001dcb80001dd660001de14 +0001df000001dfd20001e0a60001e0f80001e1c60001e2b20001e40c0001 +e44e0001e4a20001e4ee0001e5240001e56e0001e6080001e6460001e696 +0001e7c60001e8320001e9120001e9440001ea800001eba80001ec560001 +ec820001ee520001eea20001efe00001f0780001f0dc0001f20e0001f2fe +0001f3f00001f5a20001f6ae0001f7020001f75c0001f7b60001f7e80001 +f8820001f8cc0001f9a00001fad00001fb960001fbf40001fc900001fcca +0001fd380001fd720001fdce0001fdfa0001fe4a0001fe820001febc0001 +feea0001ffe40002001c000200c60002010a00020190000201da000202fc +0002034c00020496000204e2000205bc000205fc000207300002076c0002 +07ac000208b2000209cc00020af600020ba800020c8000020d5200020e32 +00020ee00002103a0002109a0002112600021250000212e0000213400002 +14160002147800021540000215e80002164c000216aa0002175c000217ee +0002181a00021868000218d40002193400021a1800021b1e00021b940002 +1d5a00021dce00021e6400021f6a00022052000220940002219e00022328 +0002239400022476000224ba000225c400022734000227a0000228880002 +2a4200022b1600022bba00022d1a00022d5e00022e5200022f8c0002302c +0002310c000231ec00023352000234ec00023640000237b8000239980002 +3a8000023bae00023d4400023f200002413200024338000245a6000247b2 +00024a0400024d2e00024f160002515a0002534a000254da0002566a0002 +57c00002590200025a2000025b9e00025ca400025dae00025ec600025fe2 +0002612000026262000263ac00026504000266340002676a000268ae0002 +6a3800026b8600026c8200026e600002704a0002722e000273bc000275aa +00027716000278f000027a2600027bae00027c6e00027cec00027dfc0002 +7e6a00027efa00028006000280f2000281a400028288000282e60002834e +000284680002853a0002868a000287ee0002896200028a6e00028aee0002 +8c4200028d9800028dd800028ed400029016000290ae0002919000029230 +000293460002947600029514000296760002982c000299c000029b3c0002 +9d2800029e980002a07a0002a23a0002a3c60002a52c0002a69a0002a75c +0002a86a0002a8ca0002a8da0002a9d40002aab80002ac2c0002adec0002 +af440002af9c0002b0ec0002b0fc0002b2900002b4020002b4120002b422 +0002b44e0002b4900002b4e80002b4f80002b5080002b5180002b5280002 +b63c0002b6f00002b7ec0002b7fc0002b80c0002b81c0002b8400002b862 +0002b8a40002b8d00002b9100002b9340002b9440002b9540002b9640002 +b9740002b9840002ba1a0002bac60002bbe60002bd220002be1c0002bede +0002c00e0002c1060002c1a40002c2480002c2580002c3060002c3dc0002 +c4b80002c5a00002c6820002c77a0002c87a0002c93a0002c94a0002ca48 +0002cb340002cc1c0002ccf20002d0fe0002d1440002d18e0002d1be0002 +d1f60002d2260002d26c0002d31c0002d34e0002d3a60002d3e60002d42c +0002d4d40002d5760002d62a0002d78a0002d7d20002d8160002d8da0002 +d9640002d9980002d9ce0002d9fa0002daae0002db560002dca60002dcf4 +0002dd4a0002df5c0002e0b20002e2a40002e3840002e3ae0002e4b00002 +e5760002e6a20002e7b40002e9940002eaca0002ec2c0002edd20002edfa +0002f0340002f1340002f27a0002f4ac0002f5900002f6780002f6f40002 +f7600002f80a0002f8700002f9400002f99c0002f9ae0002f9c00002fa38 +0002fab00002fb380002fbc00002fbf40002fc280002fc700002fd7a0002 +fdac0002fe040002fe3c0002fe820002feaa0002fee00002ff120002ff44 +0002ffa200030008000300420003007e000300c6000301120003014e0003 +018c000301d000030214000302560003028e000302c6000303080003033c +00030390000303c200030402000304480003047a000304be000305020003 +05480003059000030794000307d400030810000308400003089e000308e2 +0003091800030966000309b400030a0600030a5800030aae00030ae20003 +0bca00030c2a00030c7e00030cda00030d3600030d9800030ddc00030e16 +00030e9200030f1000030f4c00030f8800030fe0000310380003107a0003 +10ca0003111e00031160000311b8000312a6000312d80003130800031338 +00031392000313e60003144c00031484000314ba000314f0000315440003 +1592000315e800031632000316820003178e00031884000318ec00031954 +00031984000319be000319fa00031a4400031a7a00031ab000031b1a0003 +1b8400031bbc00031bfc00031c2200031c4800031c7a00031cb000031d0c +00031d9e00031dfe00031e5e00031eb000031f020003200c000320e20003 +21d800032210000322400003228a000322b0000322f40003235200032394 +000323d00003240a000324400003247c000324be000325ae000325e20003 +26240003265a0003268e000326d800032728000328c200032a1800032a58 +00032a9000032adc00032b1800032b5200032d6200032db000032fd60003 +3126000331bc000332b80003330a0003343000033676000339520003398a +000339b600033a3400033ac200033aee00033b5800033c2800033cf60003 +3d0800033dac00033fbe00033fec0003405000034094000341000003417a +000341da00034240000342a00003431600034384000343e80003450a0003 +45f8000346a000034712000347b000034820000348d60003496800034a50 +00034af200034bbe00034c6800034d1800034d9a00034e5200034ef00003 +4f860003500c00035110000352c800035310000353680003539e000353ce +000353f2000354160003545400035492000354d8000355060003553c0003 +557200035598000355c0000355fc00035638000356600003568c000356c8 +00035708000357300003575800035780000357a8000357e4000358200003 +58560003588c000358c4000358e80003591e0003595200035990000359b6 +000359ec00035a1c00035a4200035a6800035aa200035adc00035bc80003 +5ccc00035d0400035d3c00035d7200035da800035dd000035df800035e52 +00035e9400035ebc00035ee400035f2200035f6e00035f9400035fb80003 +60000003604600036082000360c0000360fc000361380003617c000361a2 +000361d8000362060003622c0003625200036288000362b6000362dc0003 +63020003633e0003637a000363b6000363f20003641a000364420003646c +00036496000364be000364e60003650e0003653600036578000365a40003 +65dc0003660a000366420003667000036698000366c60003671200036750 +00036796000367dc0003681200036840000368660003688c000368bc0003 +68e40003690c000369340003697c000369ba000369f000036a3800036a5e +00036a8200036abe00036b0000036b3c00036b7a00036baa00036bda0003 +6c1000036c4600036c8200036cbe00036ce600036d0e00036d3800036d62 +00036da200036dc800036dee00036e1400036e4200036e6800036e8e0003 +6eb400036ee200036f0800036f3a00036f6200036f9000036fb400036fea +0003700e000370340003705800037094000370d00003710c000371540003 +717c000371a40003734200037376000373ae000373e80003741a0003744c +00037484000374bc000375040003754e00037596000375de000376360003 +768e000376e200037738000377a8000378180003784600037874000378a6 +000378d80003790e0003794000037996000379ee00037a5000037ab20003 +7b0a00037b6000037b8e00037bbc00037bee00037c2000037c5800037c90 +00037cce00037d0c00037d6000037db600037e1600037e7600037ed20003 +7f2c00037f9000037ff80003802c0003806000038094000380c8000380fe +0003813400038174000381b40003820400038256000382b6000383160003 +8374000383d40003842c00038488000384b6000384e40003851600038548 +00038580000385b8000386020003864e000386a6000386fe000387500003 +87a4000387d2000388040003883600038868000388a6000388e400038922 +00038960000389ba00038a1a00038a8200038ae600038b1400038b420003 +8b7400038ba600038bde00038c1600038c5000038c8a00038cd400038d1e +00038d8000038de200038e3a00038e9400038f0200038f7000038fa40003 +8fda0003900a0003903e00039072000390a4000390e40003911800039148 +00039176000391a6000391dc0003920a0003923a0003928c000392e00003 +932c00039378000393cc0003942000039484000394ea000395440003959e +000396060003966e000396d20003973c000397b40003982c000398680003 +98a4000398e4000399240003996a000399b0000399fe00039a4c00039ab2 +00039b1a00039b8600039bf200039c5c00039cc400039d3c00039db40003 +9df200039e3000039e7200039eb400039efe00039f4800039f9400039fe0 +0003a0440003a0a80003a11e0003a1940003a1fa0003a2620003a2e00003 +a35e0003a3900003a3ba0003a40a0003a43a0003a48a0003a4b80003a500 +0003a5440003a57a0003a5d80003a62c0003a6500003a6ac0003a7120003 +a76e0003a7ea0003a8940003a8d80003a8fc0003a93c0003a96a0003a9a6 +0003a9fa0003aa500003aaa60003ab040003ab2a0003abdc0003ac9c0003 +ad7c0003adac0003add80003ae160003ae540003ae840003aec00003af08 +0003af3e0003af960003aff80003b0aa0003b1760003b2560003b2840003 +b2aa0003b2e00003b3160003b3440003b3720003b3a00003b3de0003b422 +0003b4580003b4c40003b5240003b57e0003b5fe0003b6860003b6da0003 +b7180003b73e0003b7800003b7ae0003b7ec0003b83e0003b8920003b8ea +0003b93e0003b9700003b9c60003ba220003bab40003bade0003bb080003 +bb700003bb980003bbd60003bc3e0003bccc0003bd600003bd860003bdc2 +0003be4a0003becc0003bf3a0003bfc00003c04c0003c0d80003c1640003 +c1b00003c1fe0003c2340003c2680003c29a0003c3060003c3b20003c3e8 +0003c41e0003c4640003c48e0003c4ea0003c5460003c5840003c5f00003 +c67a0003c6f00003c7540003c77a0003c7b40003c82c0003c8be0003c950 +0003c9b80003ca260003caa80003cad20003cb000003cb480003cbcc0003 +cbf60003cc200003cc7c0003ccbe0003cd680003cda20003cdf20003ce72 +0003cee40003cf580003cf980003d01c0003d0a80003d12e0003d1940003 +d1ce0003d2160003d2520003d2800003d3140003d3960003d43c0003d48a +0003d4da0003d5500003d5bc0003d5fc0003d62e0003d6600003d6980003 +d6d00003d6fc0003d7280003d7540003d7800003d7ac0003d7d80003d80c +0003d8400003d8780003d8b00003d9740003d9c80003daac0003dba60003 +dbb60003dc7a0003dd180003dde60003debc0003dfd00003e0b20003e0c2 +0003e1640003e1fc0003e2ba0003e3a00003e3fe0003e4fa0003e5720003 +e6a00003e79c0003e8580003e8680003e8bc0003e9a00003ea6e0003eac8 +0003ebd20003ec7a0003ed280003ed380003ed480003ee140003eeca0003 +ef960003f06a0003f13c0003f2940003f3980003f3a80003f4440003f4fa +0003f5620003f6120003f6780003f7740003f8240003f8d60003f9980003 +fa4e0003fb200003fc220003fd260003fe060003ff380004002c00040112 +000401d4000402ce0004037200040382000403aa00040428000404380004 +0476000404b4000404f2000405200004054c000405780004059e000405ca +000405f6000406240004065200040680000406ac000406da000407080004 +0736000407640004079a000407d0000408060004083c00040872000408a8 +000408de00040914000409240004095a00040990000409c2000409f40004 +0a2200040a5000040b7400040c9600040cc400040cf200040d2000040d4e +00040e8600040f7600040fa400040fd2000410000004102e000410c20004 +10e80004110e0004113400041162000411900004123e000412d800041306 +000413340004136600041398000413c6000413f400041426000414580004 +1486000414b4000414e6000415180004154600041574000415a6000415d8 +00041606000416340004166600041698000416c6000416f4000417260004 +175800041786000417b4000418aa00041990000419be000419ec00041a66 +00041b9400041cce00041d5800041df000041e1e00041e4c00041e820004 +1eb800041eea00041f1c00041f4a00041f7800041faa00041fdc0004200a +0004203800042090000420ce00042168000421c80004223a000423080004 +231800042420000424e8000425bc000426ec000427c20004289000042962 +00042ad200042ae200042af200042c4e00042d2600042d9200042ea60004 +2eb600042f7c00043086000431f000043260000432e80004339a0004340a +0004341a0004342a000434cc00043562000435b6000436ba000437600004 +3808000438da0004397e00043a2000043aae00043abe00043bcc00043cca +00043d9400043df000043e4c00043ecc00043f2e00043fb20004400a0004 +40640004411c000441d80004435400044364000444060004449a000445b6 +0004462e000446a4000447520004483c000448d00004493c00044a1c0004 +4acc00044b5400044bec00044cd600044dd400044f660004500c000450b8 +0004516200045210000453180004532800045406000454fe0004550e0004 +55a000045642000456800004575000045810000458ca000459bc00045b28 +00045c8e00045dbc00045e92000460060004610c00046220000462920004 +641c000464860004656c0004666000046706000467380004676a0004677a +000468500004698400046a8400046b5c00046c6400046d4e00046dae0004 +6e0a00046f1800046f94000470ba000471ce0004729200047356000473f4 +00047482000475180004767a0004768a000477d6000478e600047a2a0004 +7b2000047bee00047c9e00047d1e00047e1000047efc00047f0c00047f1c +00047f2c00047fb2000480420004819e000482f2000483a20004843c0004 +85560004865400048712000487e40004890600048a3e00048b1400048c12 +00048d2c00048e7800049016000491a2000492540004930a0004944c0004 +957800049610000496b6000496e80004971a000498e200049a8c00049bb8 +00049cdc00049e660004a0120004a0400004a06e0004a12e0004a1ca0004 +a2cc0004a32c0004a39e0004a3da0004a4160004a5e00004a7f00004a8c8 +0004a9aa0004aa5c0004aae80004abec0004acfe0004adca0004ae920004 +afd20004b1000004b1c20004b2820004b32a0004b3dc0004b4440004b4ac +0004b5880004b65c0004b79c0004b8cc0004b9ee0004bae40004bb3c0004 +bb960004bc020004bc720004bcf60004bd7c0004be8c0004bf800004c0d2 +0004c20a0004c21a0004c2480004c2760004c35e0004c4420004c4c80004 +c55e0004c5e00004c65e0004c6de0004c75e0004c7e00004c8620004c936 +0004ca2e0004ca5c0004ca8a0004cabc0004caee0004cafe0004cb0e0004 +cb3c0004cb6a0004cb9c0004cbce0004cc000004cc320004cc640004cc96 +0004cd620004cd720004cda00004cdce0004ce000004ce320004ce640004 +ce960004cec80004cefa0004cf2c0004cf5e0004cf8c0004cfba0004cfec +0004d01e0004d0500004d0800004d0b20004d0e40004d16a0004d1d80004 +d26c0004d27c0004d3760004d4800004d5800004d66c0004d7360004d804 +0004d8b20004d9700004da220004dac40004dba80004dc600004dcea0004 +dd700004ddc60004de560004deb80004def40004df7e0004dfde0004e012 +0004e0460004e0860004e0ee0004e11a0004e19e0004e1e00004e2220001 +000008d1008c0010004c000700020010002f005500000469ffff00030001 +b15440b80135b31c22392f410c0135003f0135004f0135008f0135009f01 +3500050040012eb31c1f3930411201280001004001280080012800900128 +00a0012800b00128000500ef0126000100400125b31b1f3940410a012400 +01002f01050001004f010400010040010340aa090d392f652f662f672f68 +2f692f6a2f742f752f7b2f7c2fd12fd20c20fc30fc40fcd0fc04f1f2197f +f2018ff2aff2e0f203d1d216171c7b7c161b7b7c19307c407c507c607c70 +7c05767716171c6d7016171c6c6f16171c6b6e161b0f6b7f6b8f6e9f6eaf +6e056b6e7f721a747514151c676a14151ca96ab96ae96af96a0466691415 +1cc669016568141b0f651f6502af68bf68ef65ff6504656885711a197316 +7a431921794319217f413201340001007f01330080013300900133000300 +6f0132007f0132008f01320003007001210001002f0121003f0121004f01 +21005f0121000400a0011e00b0011e00c0011e00030020012d0030012d00 +60012d0070012d0080012d0090012d00060040010fb40b1f39092f411f01 +0e005f010e009f010e00af010e00bf010e00050090010e00bf010e00cf01 +0e00df010e00ef010e00050020010e006f010e00b0010e00d0010e00e001 +0eb205d10f4123010e003f010e00bf010e00cf010e0004000f010e005f01 +0e006f010e00a0010e00bf010e00cf010e00df010e0007003f010e004f01 +0e007f010e00af010e00ef010e00ff010eb2069f7f4123010e00af010e00 +e0010e00ff010e0004001f010e003f010e00af010e00df010e00ef010e00 +05000f010e001f010e002f010e007f010e008f010e00c0010e00df010e00 +ef010eb2086d9f411b010e00cf010e00ef010e00ff010e0004000f010e00 +ef010e0002000f010e002f010e003f010e004f010e00c0010e00df010e00 +ef010eb2073a70bd010e00df010e00020040010eb32b33395f411b010e00 +70010e008f010e009f010e00cf010e00df010e0006000f010e001f010e00 +3f010e0080010e00bf010e00ef010e00060040010eb3091b3970bb013600 +0100200108b30d113940b80102b20b1439b9ffc00107b31b22392f411801 +0c004f010c0002002f010c0001008f010b0001002f0107004f010700c001 +0700d001070004004f010700010040010040640b103940fe0b1139e0f601 +e0f60114f424f40274f40140df60df0220d830d840d80366c176c10299be +0120b230b240b20360b070b0029b93002b9a92002b9991002b9493002b92 +93002b9193062b9395032b9885042b9796042b9695032b9995a995026f41 +0f0131007f0131008f01310003013001160032001f011901160015001f01 +16b285032bb9ffe0012fb30b143970410d01170001002f0117003f011700 +4f0117005f0117000401130114b22a1fa0bc011400b0011400c001144016 +0370fbf0fb022ffb6ffb7ffb0340fa50fa60faf0fa04b8ffc040fffa1115 +3950ec70ec0250ec70ec0240ec01bfeb0170ea0130ea0170e9015fe970e9 +f0e903a0e9015fe870e802efe8017fe8bfe8efe803f0e701f0e7012fe780 +e7a0e7f0e70450e6f0e60250e660e670e6c0e60450e50170e50180e4e0e4 +f0e40340dca0dc02309050900220a04fa05fa09fa0afa0efa006e0f501e0 +f501f3851e1f2fe20140dd019fd5afd5bfd5030fd340d302e0d0010fc470 +c4022fc43fc44fc45fc49fc4afc4efc4ffc40899bd99bf02dad9042bd685 +022bcccd062bcd85022bc9c8062bc885022b8d8b042b8c8b191f8b83c81f +897d641f817f082b7d7f082b7f85072baf85042b8885012b8785002b8485 +042b8385002b2ffd4ffd027f40abef012df03bf04ff069f07ff0051b3715 +1836151535151234150f33150c3215093115063015032f15002e1526270f +28270f26002a1f0f2a2f2a3f2a032f24bf24022a2b0f2c2b0f22230e2423 +0f1e1f0e201f0f2005010f10110c0c0d0e0c090a0b0c0607080c0304050c +0001020c0003181f500f700f027f0f800fbf0f030f031f032f034f037f03 +bf03ef030704012c1f1b011d0d18071a0d1510170d1204140d701b01501b +701bf01b03b8ffc0400b1b131839701b801b02503301b0124b004b5442b0 +13014b004b5342b0332b4bb8032052b0322b4bb009505b58b101018e59b0 +332bb00288b8010054b00488b8020054b012435a5b58b80119b101018e85 +1bb900040100b04b60858d592b1db0644b5358b0801d59b0324b5358b090 +1d5900732b74742b2b2b2b2b7373742b2b2b2b2b2b2b732b2b2b2b2b2b73 +732bb1282645b02a4561b02c4560442b2b2b2b2b2b2b2b2b2b2b2b73b0ef +45b0f0456168b0f04560b0ef23447373012b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b73737473737373732b74737374737373747374737474737374 +7374747374737374742b747374742b73742b2b2b2b7300732b2b2b2b2b2b +2b2b2b2b737373737373737473742b2b73737373732b2b2b742b73742b75 +5e7374755e7374755e7374755e7374755e2b73747374737373012b2bb018 +b0314b53422b2b73742b732b732b2b2b732b2b2b2b732b2b2b73742b7373 +2b7373732b7373742b732bb109322b4bb05052424bb03c524bb00f505bb0 +1a23424bb0c8524bb036505bb00c23422b00000000> +[16105 16169 15785 16013 16241 16333 15745 15601 15869 15477 16269 15937 16109 +16361 16209 16209 16113 16321 16289 14899 ] AllocGlyphStorage +]def +108 44 +PrepFor2015 +AddFontInfoBegin +AddFontInfo +/OrigFontType /TrueType def +/OrigFontName <4D6963726F736F66742053616E73205365726966> def +/OrigFontStyle () def +/FSType 8 def +AddFontInfoEnd +[16#2c 16#6e18af9b ] AddXUID +Type42DictEnd +1 9274 49 <000100a40000052305ba0009007140180702010281060714060607050304 +01077f000e0d0d063b00b8fffa40090b0b063b0006027f04b8fff8b40d0d +063b04b8fff8401c0b0b063b04400b006e020a046b02770b01780b01480b +e80bf80b03005f5d715d2b2b011a18102b2b4ded32102b2bed32002f3f31 +30872e2b877dc4212301112311330111330523c7fd00b8c60300b90485fb +7b05bafb7b048500>/TTE1CD9F20t00 AddT42Char +1 11218 55 <0001002d000004b605ba00070049403101059106030300a00205a0027f03 +040d0d063b03400809037f3030e9090148099809b809f809040709170977 +09d70904005f5d5d5d2b011a18102b4dede610e6002f3fed323130012111 +231121352104b6fe1bc3fe1f0489050cfaf4050cae00>/TTE1CD9F20t00 AddT42Char +1 8070 43 <000100a40000052305ba000b006f4019039108400605089118300a060301 +0509017f000e0d0d063b00b8fffa40090b0b063b0008047f05b8fff8b40d +0d063b05b8fff840170b0b063b05400d006e020c056b02570d01480d880d +02005f5d712b2b011a18102b2b4ded32102b2bed32002f333f332b001a18 +104ded31302123112111231133112111330523c3fd06c2c202fac302b2fd +4e05bafda6025a00>/TTE1CD9F20t00 AddT42Char +1 6982 38 <00010060ffe7055e05d3001900c140341a182a183a18030511010a0f0115 +080103470901080901090d92060407178717020b00171392001307101710 +020d020a09167d17b8fff4b40d0d063b17b8fff040190b0b063b17051715 +17020f17400b1036107d030c0d0d063b03b8ffd6400c0b0b063b03400703 +01100303b8ffe2401d090b361b176f021a036c02b81b01571b01271b371b +571b771ba71b05005f5d715d2b2b2b015f5e5d1a18102b2b4ded2b5e5d10 +2b2bed39395f5e5d003fedcd5f5e5d3fedcd5d5d31305f5d5d5d5d052000 +1110002132001723262623220011100033323637330600030afec9fe8d01 +730137ef015015c80cd9a5dffefc0102ddacd40ec815feba190199015d01 +5d0199fefed38ba4fecdfee3fee4fecca89ceaff0000>/TTE1CD9F20t00 AddT42Char +1 7274 39 <000200a40000056005ba0006000f007840180a0401050201090f91000307 +9106080b180b020d020b7d03b8fffcb40d0d063b03b8ffeab70b0b063b03 +077f06b8fff6b40d0d063b06b8fff8401c0b0b063b064011036f0210066b +02571101a7110118114811881103005f5d5d712b2b011a18102b2b4ded10 +2b2bed5f5e5d002fed3fed31305e5d5d1321201110212137212012111002 +2121a401d102ebfd15fe2fc2010b013fe8e7fec0fef505bafd2bfd1bae01 +29010e0107012000>/TTE1CD9F20t00 AddT42Char +1 10444 53 <000200a40000056a05ba0014001c00f14017470c570c670c03024c035c03 +020302011c018100141400b8fff840320b0b063b0000148a14012c143c14 +0208141814020902050e150e250e350e0403197d070e170e270e370e040e +040d0d063b0eb8fff4401a0b0b063b0e01020e1112140600080018007800 +030d0015077f08b8fff8b40d0d063b08b8fff8402f0b0b063b08401e006f +021d086b028711010212110915919706010606081c9209030008481e0177 +1e01a71eb71e02005f5d715d002f333fed12392f5ded1239395f5d302b2b +011a18102b2b4ded325f5e5d1117332f2b2b5ded5f5d5f5e5d5d5d872e2b +2b0e4b52587d1b7a5910c431005f5d5f5d21230326262321112311213216 +16151406071516170121323635342121056ad28a25ac70fe99c20289aad8 +88b0999950fc8f01b1b5a3fec6fe3101876884fd8d05ba42d48598cc1f04 +31d80192728cfa00>/TTE1CD9F20t00 AddT42Char +1 2538 16 <0001004201b80268026d0003003140208f0101012f024f025f0203025000 +6000027001012f01010005017005012005015d712f10c65d5d5d002f5dcd +5d3130012135210268fdda022601b8b5>/TTE1CD9F20t00 AddT42Char +1 7462 40 <000100a4000004e905ba000b0062401f0991064002010691183005910203 +0a910107081708020a00080400060a7f01b8fffab40d0d063b01b8fffe40 +120b0b063b01400d006f020c016b02e80d01005f5d2b2b011a18102b2b4d +ed3210c4c45f5e5d002fed3fed2b001a18104ded31302121112115211121 +1521112104e9fbbb0423fc9f0329fcd7038305baaefe40aefe10>/TTE1CD9F20t00 AddT42Char +1 8922 48 <000100a40000060605ba000c0125b90003fff4400a0d0d063b0b48091036 +09b8ffb840960910368c0b9c0b0283099309020268040101480458047804 +0302670301014703570377030302180a0101050a150a250a0302880a980a +a80a0300bc0adc0a0203c80a01011e052e0502037705a705b705c705d705 +05018505950502001e022e0202037702a702b702c702d702050185029502 +0205020a030479040108041804280438040409000b08030104070b027f00 +0a0d0d063b00b8fff640090b0b063b0009057f07b8fffc40200b0b063b07 +400e006e020d076b02770e01570e970e02080e180e380ee80e04005f5d5d +712b2b011a18102b4ded32102b2bed32002f33333f335f5e5d5d12173931 +305d5f5d5f715f5d5f5d5f715f5d5f5d5f5d5f715f5d015f5d5f5d5f5d5f +5d5f5d5d2b2b2b212311012301112311210101210606b8fe5eaefe5eb801 +23018d018f012304dffb2104dffb2105bafb3a04c600>/TTE1CD9F20t00 AddT42Char +1 9726 51 <000200a4000004fc05ba000b0015007d400d0c9109090b159100030b107d +05b8ffeeb40d0d063b05b8ffda40190b0b063b053705010205051505020d +0305400910360c0a7f0bb8fff8b40d0d063b0bb8fffc40170b0b063b0b40 +17056f02160b6b02e817017717a71702005f5d5d2b2b011a18102b2b4ded +322b5f5e5d5f5d102b2bed002f3fed12392fed3130132132161615140421 +21112313213236353426262321a40223b4f38efee6fef5fe8fc2c20173bb +9f58877ffe9105ba43df8adee6fdb602f88c84588824>/TTE1CD9F20t00 AddT42Char +1 8832 47 <000100a40000042f05ba0005003b400f020304910100400f18360007047f +01b8fffc40110b0b063b014006016b02a70701880701005f5d5d2b011a18 +102b4ded10c62b002fed3f3130212111331121042ffc75c202c905bafaf4 +>/TTE1CD9F20t00 AddT42Char +1 6372 36 <0002fffe0000055805ba0002000a00fd402ea809b8090257020103000504 +0401020607070101041c01020481030a1403030a01071c01000781080914 +08080908b8ffea40740919360316091936980aa80a02027a0a0103370a47 +0a570a670a0401070a170a270a03029809b80902037709013a094a095a09 +6a090418092809880903020a09010a0306934007021702020b0002400b0b +063b020203080903080c0377020b087602370c670cf70c03580c780c0208 +0cb80c02005f5d715d2b2b00182f3f1239392f2b5f5e5d1a4ded3130015f +5e5d5f5d5d5d5f5d5f5d5f5d5f5d5f5d2b2b872e2b084b52587d1b7a5910 +c487052e182b084b52587d1b7a5910c40705103c3c07103c3c015f5d5d01 +01030123032103230133039afefef603b6dbaafd9aa2cd0233d1025802a8 +fd58fda801befe4205ba>/TTE1CD9F20t00 AddT42Char +1 0 0 <0002003200000226060000030007000033112111252111213201f4fe7801 +1cfee40600fa006c0528>/TTE1CD9F20t00 AddT42Char +/TTE1CD9F20t00 findfont /CharStrings get begin +/N 49 def +/T 55 def +/H 43 def +/C 38 def +/D 39 def +/R 53 def +/hyphen 16 def +/E 40 def +/M 48 def +/P 51 def +/L 47 def +/A 36 def +/.notdef 0 def +end +/TTE1CD9F20t00 findfont /Encoding get +dup 1 /N put +dup 2 /T put +dup 3 /H put +dup 4 /C put +dup 5 /D put +dup 6 /R put +dup 7 /hyphen put +dup 8 /E put +dup 9 /M put +dup 10 /P put +dup 11 /L put +dup 12 /A put +pop +Pscript_WinNT_Incr begin +%%BeginResource: file Pscript_Text 5.0 0 +/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d +/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^ +length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets +{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{& +/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get} +if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{ +{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get +StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $ +! ! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @ length array copy +put pd_CoverFCRange}if}{!}? 2 ^ ~ definefont fM 5 4 -1 $ put fM 4 0 put fM +makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M currentpoint snap M 0 - 0 +Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d/ySP null d/sW null d/sSU{N +/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N/sW ~ d/ySP ~ d/xSP ~ d}b/sT +{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix astore concat 0 0 M}b/eR/; , d +/AddOrigFP{{&/FontInfo known{&/FontInfo get length 6 add}{6}? dict ` +/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d/OrigFontStyle ~ d +/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS{makefont +Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2 copy ~ sub 1 +add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for & E +/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}b/mF42{15 dict ` @ 4 1 $ +FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254 add 255 +idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for/FDepVector +Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1 Encoding +length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName length 2 +add string}{FontName length 3 add string}?}? @ 0 FontName @ length string cvs +putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~ putinterval cvn 1 ^ +256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1 $ put}for & @ E +/FontName get ~ definefont ! ! ! mF}b/mF_OTF_V{~ ! ~ ! 4 -1 $ ! findfont 2 ^ ~ +definefont fM @ @ 4 6 -1 $ neg put 5 0 put 90 matrix R matrix concatmatrix +makefont Pscript_Windows_Font 3 1 $ put}b/mF_TTF_V{3{~ !}repeat 3 -1 $ ! +findfont 1 ^ ~ definefont Pscript_Windows_Font 3 1 $ put}b/UmF{L2? +{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName +get undefinefont}forall undefinefont}b +%%EndResource +end reinitialize +F /F0 0 /0 F /TTE1CD9F20t00 mF +/F0S47YFFFFFFBB F0 [71.031 0 0 -68.75 0 0 ] mFS +F0S47YFFFFFFBB Ji +3125 894 M <010203040506070208090A0B0C0208>S +3125 800 M <010203070208090A0B0C0208>S +3125 706 M <080B02070208090A0B0C0208>S +: 3125 550 594 78 rc 317 VM? +1 7608 41 <000100a40000048105ba0009004f40110591020207019108030704040002 +067f07b8fffe401c0d0d063b074000400b16360b006f020a076b02e80b01 +270b570b02005f5d5d2b2b2b011a18102b4ded3212392f002f3fed12392f +ed3130012111211521112311210481fce502b1fd4fc203dd050cfe3aaefd +6805ba00>/TTE1CD9F20t00 AddT42Char +/TTE1CD9F20t00 findfont /CharStrings get begin +/F 41 def +end +/TTE1CD9F20t00 findfont /Encoding get +dup 13 /F put +pop +3125 613 M <0C06080D070208090A0B0C0208>S +; N 3625 1056 M 3788 1056 I K +N 3788 1056 M 3713 1075 I 3713 1038 I C + O 951 VM? +1 10782 54 <0001005cffe704ec05d300230140b9001dfff4b40b0b063b1cb8fff44076 +0b0b063b5a220103681f0102571f0100071f0101351e451e0203781d0102 +131d231d531d0303381a481a020228173817481703007814010255140155 +100103680e780e02780d0101080d010a5a0c01580b010225093509020317 +05270537050300670201024a0201030a0f1b21040068150115189112b8ff +fc40150d0d063b120407034703570367038703050b000307b8fff040200d +0d063b07910013167f150c0b0b063b151b7f0f0c0b0b063b0f150f030a7f +21b8ffe0b40b0b063b21b8fff4401a0d0d063b21047f034025216f022403 +6c02b825e82502a72501005f5d5d2b2b011a18104ded102b2bed1239392f +2bed2f2bed003fed2bc45f5e5d3f2bedc45d12173931305f5d5f5d5f5d5f +5d5f5d5d5e5d5f5d5d5f5d5d5f5d5f5d5f5d5f5d5f5d5f5d5f5d5f5d5f5d +5f5d2b2b0520002733161633323635342624263534243332041723022122 +0615141604161615140402cdfecafecd08bb0ff3aca3c7cefe09db011dec +f8013009bd1dfeb1a2b28f0187e6a4fed3190116daa49d8673796e6bbe9e +b2e4e6d2010a7a655c5c5654b195bdfa>/TTE1CD9F20t00 AddT42Char +1 8228 44 <000100bc0000017f05ba00030063400c020301007f01040d0d063b01b8ff +fc400d0b0b063b01400405017f213005b8ffc0402a232836070517053705 +6705770587050647055705670587059705a705b705c705f7050998050178 +0501005f5d715d712b2b011a18102b2b4ded002f3f313021231133017fc3 +c305ba00>/TTE1CD9F20t00 AddT42Char +1 7732 42 <00010060ffe705b605d3001d00e640521c100b0b063b2a1d3a1d7a1d0303 +671401022511012a0f010388080102350801039801010217911818002809 +01090d920604139200131a0a7d090c0d0d063b09100b0b063b0908184818 +020900181c167f1ab8ffd6401b0b0b063b1a351a0103371a01000710010d +02107d030c0d0d063b03b8ffd6400f0b0b063b03402703010503010e0303 +b8ffe24018090b361f1a6f021e036c02781f01271fa71fb71ff71f04005f +5d5d2b2b2b015f5e5d5d1a18102b2b4ded5f5e5d5f5d5f5d102bed32c45f +5e5dd42b2bed002f3fed3fedcd5d12392fed31305f5d5f5d5f5d5f5d5d5f +5d5f5d2b0520001110002120041723262623220011100033203735213521 +112327060325fec4fe770184013b0109015f15c90ce8bee3feeb0118e201 +3d9afe7d023f89339519019e01580159019dffd68ea1fecafee6fee7fec9 +d1dfaffd149ab300>/TTE1CD9F20t00 AddT42Char +/TTE1CD9F20t00 findfont /CharStrings get begin +/S 54 def +/I 44 def +/G 42 def +end +/TTE1CD9F20t00 findfont /Encoding get +dup 14 /S put +dup 15 /I put +dup 16 /G put +pop +3800 1081 M <0E02060F0110070208090A0B0C0208>S +N 2744 1338 M 2906 1056 I K +N 2906 1056 M 2888 1131 I 2850 1113 I C + O N 2744 1338 M 2906 1338 I K +N 2906 1338 M 2831 1356 I 2831 1319 I C + O 2919 1363 M <0B0F0E02070208090A0B0C0208>S +N 2606 1056 M 2906 1056 I K +N 2906 1056 M 2831 1075 I 2831 1038 I C + O 635 VM? +1 11490 57 <0001000c0000054805ba000600c0b90003ffea405d091936001609193678 +019801c80103023501450155016501040307011701270167010477029702 +c70203023a024a025a026a0204030802180228026802040a020303020800 +700207036d0237086708f7080358087808020808b80802005f5d715d2b2b +00182f3f3130015f5e5d5f5d5f5d5d5f5d5f5d2b2bb106024354581b401a +05061c0504068100011400000105041c05060481030214030302872e4d2b +084b52587d1b7a5910c487052e182b084b52587d1b7a5910c45901012301 +3301010548fdc6c8fdc6cf01cf01cf05bafa4605bafb1704e900>/TTE1CD9F20t00 AddT42Char +1 9432 50 <00020060ffe705db05d3000b001700bdb10602435458400a129200040c92 +06130f03b8ffeeb40d0d063b03b8ffe040100b0b063b0303191815090c0d +0d063b09b8ffd6b70b0b063b090919181112392f2b2bcd1112392f2b2bcd +003fed3fed31301b404a12920a001a002a000300040c9205061506250603 +0906130f7d03157d09406803010a031a033a034a03046709010509150935 +094509040a0319036f0218096c02e81901571901271901005f5d715d2b2b +015f5e5d5d5d5d1a18104ded10ed003f5e5ded3f5ded3130590120001110 +00212000111000013200111000232200111000031f01340188fe78feccfe +cbfe76018a0133dc0119fee8d9ddfee5011a05d3fe60feaafeaafe6001a1 +0155015601a0faba0138011801180138fec8fee8fee9fec7>/TTE1CD9F20t00 AddT42Char +/TTE1CD9F20t00 findfont /CharStrings get begin +/V 57 def +/O 50 def +end +/TTE1CD9F20t00 findfont /Encoding get +dup 17 /V put +dup 18 /O put +pop +2919 1081 M <110804021206070208090A0B0C0208>S +N 3617 1058 M 3617 1047 3607 1037 3596 1037 -c 3584 1037 3574 1047 3574 1058 -c 3574 1069 3584 1079 3596 1079 -c 3607 1079 3617 1069 3617 1058 -c C + O N 1769 1338 M 1931 1619 I K +N 1931 1619 M 1875 1563 I 1913 1544 I C + O N 1769 1338 M 1931 1525 I K +N 1931 1525 M 1869 1481 I 1894 1456 I C + O N 1769 1338 M 1931 1431 I K +N 1931 1431 M 1856 1413 I 1875 1375 I C + O N 1769 1338 M 1931 1338 I K +N 1931 1338 M 1856 1356 I 1856 1319 I C + O N 1769 1338 M 1931 1244 I K +N 1931 1244 M 1875 1300 I 1856 1263 I C + O N 1769 1338 M 1931 1150 I K +N 1931 1150 M 1894 1219 I 1869 1194 I C + O N 1769 1338 M 1931 1056 I K +N 1931 1056 M 1913 1131 I 1875 1113 I C + O 635 VM? +1 12728 60 <0001000a0000054c05ba000800dc4018010704670401034804580402000a +041a04020b0200040305b8ffe8b60a0f3605030305b8ffe1400c091b3600 +1f091b3607017f04b8fff8403b0b0b063b04400500047f30300a00700209 +056d02070a170a970ab70ad70af70a06070a370a670a870aa70a05480a68 +0a780a03c80ad80ae80a03005f5d715d712b2b2b011a18102b4ded392b2b +002f3f2b1239395f5e5d5f5d5f5d1133333130b106024354581b401a0708 +19070608810001140000010706190708068105041405050487052e2b084b +52587d1b7a5910c487052e182b084b52587d1b7a5910c459010111231101 +330101054cfdc0c2fdc0ec01b601b405bafcb3fd93026d034dfd5d02a300 +>/TTE1CD9F20t00 AddT42Char +1 6682 37 <000300a4000004ec05ba000d0016001e00c24043380d480d02080b010708 +0111020b1e910e4005040e91183016910503179104270001081a181a020d +020b04127f0c091c09020f0309180d0d063b090c0b0b063b090904b8fffa +b40d0d063b04b8fffcb70b0b063b041a7d00b8fff4b40d0d063b00b8ffea +b60b0b063b000e17b8fffc40190d0d063b177f044020006f021f046b02a7 +20018820e82002005f5d5d2b2b011a18104ded2b32102b2bed122b2b392f +2b2b5f5e5ded12395f5e5d5d002fed3fed2b001a18104ded3931305f5e5d +5d5d01140421211121320415140716160121323635342623211121203534 +26232104ecfee8fef5fddb020aea010cd38e8dfc7a0146a19894b7fecc01 +61015ca1d4feb801aacedc05bac8aed46624c1012f67786c6dfba2fc8379 +>/TTE1CD9F20t00 AddT42Char +/TTE1CD9F20t00 findfont /CharStrings get begin +/Y 60 def +/B 37 def +end +/TTE1CD9F20t00 findfont /Encoding get +dup 19 /Y put +dup 20 /B put +pop +1944 1644 M <0E130914120B070208090A0B0C0208>S +635 VM? +1 11330 56 <000100a4ffe7052305ba00130059402077120103070a010b0800010c020e +05030a9100130e7f0f0e0d0d063b0f067f05b8fff640150d0d063b054015 +0f6e0214056b02a71501481501005f5d5d2b2b011a18102b4ded102bed00 +3fed3f335f5e5d5e5d31305f5d0522260235113311101633323611113311 +10060402e3fffd43c2c2bbbbc2c37fff0019c6010cb10350fcb3fedfb6b6 +0121034dfcb0fef6fc7d>/TTE1CD9F20t00 AddT42Char +1 8352 45 <00010037ffe7035c05ba000f007c401f550a01030e0308075807020b0007 +0a914803010203130e7f0f0e0d0d063b0fb8fff0401d0b0b063b0f087f40 +6707010807180728074807040d0007160d0d063b07b8ffe840120b0b063b +07110f6e02b811012711a71102005f5d5d2b01182f2b2b5f5e5d5d1a4ded +102b2bed003f5f5dedc45f5e5d3f5f5d3130011006232226353533103332 +36351133035cd0cbb6d4c3c76970c201d5fef3e1deb627fef476bf03ef00 +>/TTE1CD9F20t00 AddT42Char +/TTE1CD9F20t00 findfont /CharStrings get begin +/U 56 def +/J 45 def +end +/TTE1CD9F20t00 findfont /Encoding get +dup 21 /U put +dup 22 /J put +pop +1944 1550 M <0E020615040215060807121416080402070208090A0B0C0208>S +1944 1456 M <0E020C01050C060507121416080402070208090A0B0C0208>S +317 VM? +1 9928 52 <00020060ff8b05f405d3000f001f018c400d1d200b0b063b10200b0b063b +1db8ffe0b40b0b063b10b8ffca40180b0b063b611e711e811e0303070017 +002700030088020111b8ffc040490f13368a1e01021a1e6a1e7a1e030137 +1167110202271101001010110f000f0e001f1d1d1c020203011e0101001f +001f811e01141e1f1e1e011592020d0f03040a0a1a0a2a0a03030ab8ffe8 +404c0b0b063b0a041e0001181f281f681f781f041f1b9217016701770103 +003a014a015a01030105041504250403090304180b0b063b0413381e481e +020000101b1d1e04121802040f0307127d0db8ffeeb40d0d063b0db8ffd6 +400e0b0b063b0d187d070c0d0d063b07b8ffd640320b0b063b0740680d01 +0a0d1a0d3a0d4a0d046707010507150735074507040a03210d6f0220076c +02e82101572101272101005f5d715d2b2b015f5e5d5d5d5d1a18102b2b4d +ed102b2bed12173911121739c65f5d003f2b5f5e5dc65d5f5dfdc45d1139 +393f2b5f5d121739ed313087082e2b87087dc407083c083c0708103c083c +005f5d5f5d5f5d5f5d2b015d5f5d5f5d002b2b012b2b2507270623200011 +10002120001110072736111000232200111000333237273705f473f2a3cd +fecbfe76018a013501340188be9287fee8d9ddfee5011ada746992731489 +bf6301a10155015601a0fe60feaafeb4d573a0010e01180138fec8fee8fe +e9fec7317389>/TTE1CD9F20t00 AddT42Char +/TTE1CD9F20t00 findfont /CharStrings get begin +/Q 52 def +end +/TTE1CD9F20t00 findfont /Encoding get +dup 23 /Q put +pop +1944 1363 M <0E08171508010408070208090A0B0C0208>S +N 2736 1340 M 2736 1328 2726 1318 2715 1318 -c 2703 1318 2693 1328 2693 1340 -c 2693 1351 2703 1361 2715 1361 -c 2726 1361 2736 1351 2736 1340 -c C + O 1944 1269 M <011509140806070208090A0B0C0208>S +1944 1175 M <010F0B070208090A0B0C0208>S +1944 1081 M <0C06060C13070208090A0B0C0208>S +N 2598 1058 M 2598 1047 2588 1037 2577 1037 -c 2565 1037 2555 1047 2555 1058 -c 2555 1069 2565 1079 2577 1079 -c 2588 1079 2598 1069 2598 1058 -c C + O N 2025 844 M 2188 963 I K +N 2188 963 M 2119 931 I 2138 900 I C + O N 2025 844 M 2188 725 I K +N 2188 725 M 2138 788 I 2119 756 I C + O 2200 988 M <0E15140E0817070208090A0B0C0208>S +2200 750 M <080B0809080102070208090A0B0C0208>S +N 2942 727 M 2942 715 2932 705 2921 705 -c 2909 705 2899 715 2899 727 -c 2899 738 2909 748 2921 748 -c 2932 748 2942 738 2942 727 -c C + O N 988 1088 M 1150 1338 I K +N 1150 1338 M 1094 1288 I 1125 1263 I C + O N 988 1088 M 1150 844 I K +N 1150 844 M 1125 919 I 1094 894 I C + O 1163 1363 M <02130A08070208090A0B0C0208>S +N 1761 1340 M 1761 1328 1751 1318 1740 1318 -c 1728 1318 1718 1328 1718 1340 -c 1718 1351 1728 1361 1740 1361 -c 1751 1361 1761 1351 1761 1340 -c C + O 317 VM? +1 12422 59 <0001000a0000054c05ba000b00f6406c080b380b680b880b980b05070537 +05670597050409020504050203020106010809080b0a0b0007000201020b +000b03030a050605080708040409070106018100071400000709030a0381 +040914040409070627066706770604080428046804780404010603040a40 +13163606b8ffc040381216360a0a2a0a020a002a00020506250602050425 +04020b030a060a0600040d0070020c046d02e90d01580d01a80db80df80d +03470d01005f5d5d715d2b2b0111123939182f2f5f5e5d5d5d5d2b2b002f +3f5f5d5d313087052e4d2b877dc4872e182b877dc4871008c008c0871008 +c008c0871008c008c0871008c008c0015f5e5d5d21230901230901330901 +3301054ceefe4efe4cee0233fe05ed017b017dedfe03026dfd93030402b6 +fde2021efd4a>/TTE1CD9F20t00 AddT42Char +/TTE1CD9F20t00 findfont /CharStrings get begin +/X 59 def +end +/TTE1CD9F20t00 findfont /Encoding get +dup 24 /X put +pop +1163 869 M <08180A06080E0E0F1201070208090A0B0C0208>S +N 2017 846 M 2017 834 2007 824 1996 824 -c 1984 824 1974 834 1974 846 -c 1974 857 1984 867 1996 867 -c 2007 867 2017 857 2017 846 -c C + O 575 1113 M <0208090A0B0C0208>S +N 979 1090 M 979 1078 970 1068 958 1068 -c 947 1068 937 1078 937 1090 -c 937 1101 947 1111 958 1111 -c 970 1111 979 1101 979 1090 -c C + O LH +(%%[Page: 1]%%) = +%%PageTrailer + +%%Trailer +%%DocumentNeededResources: +%%DocumentSuppliedResources: +%%+ procset Pscript_WinNT_ErrorHandler 5.0 0 +%%+ procset Pscript_FatalError 5.0 0 +%%+ procset Pscript_Win_Basic 5.0 0 +%%+ procset Pscript_Win_Utils_L2 5.0 0 +%%+ procset Pscript_Win_GdiObject 5.0 0 +%%+ procset Pscript_Win_GdiObject_L3 5.0 0 +%%+ procset Pscript_T42Hdr 5.0 0 +%%+ procset Pscript_Text 5.0 0 +Pscript_WinNT_Incr dup /terminate get exec +ehsave restore +(%%[LastPage]%%) = +%%EOF +%-12345X@PJL EOJ +%-12345X \ No newline at end of file Binary files old-cl-unification-1/docs/html/images/unif-templ-hier.pdf and new-cl-unification-1/docs/html/images/unif-templ-hier.pdf differ diff -rN -u old-cl-unification-1/docs/html/images/unif-templ-hier.ps new-cl-unification-1/docs/html/images/unif-templ-hier.ps --- old-cl-unification-1/docs/html/images/unif-templ-hier.ps 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/images/unif-templ-hier.ps 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,1574 @@ +%!PS-Adobe-3.0 +%%Title: Document +%%Creator: PScript5.dll Version 5.2.2 +%%CreationDate: 10/10/2004 14:55:30 +%%BoundingBox: (atend) +%%DocumentNeededResources: (atend) +%%DocumentSuppliedResources: (atend) +%%DocumentData: Clean7Bit +%%TargetDevice: (HP LaserJet 8150 Series) (3010.107) 0 +%%LanguageLevel: 3 +%%EndComments + +%%BeginDefaults +%%ViewingOrientation: 1 0 0 1 +%%EndDefaults + + +%%BeginProlog +%%BeginResource: file Pscript_WinNT_ErrorHandler 5.0 0 +/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false +setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype +ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch +def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0 +rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def +/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def +typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72 +def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp +exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def +/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype +{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint} +readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop +(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def +/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- ) +tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup +xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint +tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck +{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(]) +tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup +rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint} +forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier +/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin +$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0 +ne{grestoreall}if errorname(VMerror)ne{showpage}if initgraphics courier setfont +lmargin 720 moveto errorname(VMerror)eq{userdict/ehsave known{clear userdict +/ehsave get restore 2 vmreclaim}if vmstatus exch pop exch pop PrtVMMsg}{ +(ERROR: )prnt errorname prnt nl(OFFENDING COMMAND: )prnt/command load prnt +$error/ostack known{nl nl(STACK:)prnt nl nl $error/ostack get aload length{==} +repeat}if}ifelse systemdict/showpage get exec(%%[ Error: )print errorname +=print(; OffendingCommand: )print/command load =print( ]%%)= flush}if end end +end}dup 0 systemdict put dup 4 $brkpage put bind readonly put/currentpacking +where{pop/setpacking where{pop oldpack setpacking}if}if +%%EndResource +userdict /Pscript_WinNT_Incr 230 dict dup begin put +%%BeginResource: file Pscript_FatalError 5.0 0 +userdict begin/FatalErrorIf{{initgraphics findfont 1 index 0 eq{exch pop}{dup +length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall/Encoding +{ISOLatin1Encoding}stopped{StandardEncoding}if def currentdict end +/ErrFont-Latin1 exch definefont}ifelse exch scalefont setfont counttomark 3 div +cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def end +%%EndResource +userdict begin/PrtVMMsg{vmstatus exch sub exch pop gt{[ +(This job requires more memory than is available in this printer.)100 500 +(Try one or more of the following, and then print again:)100 485 +(For the output format, choose Optimize For Portability.)115 470 +(In the Device Settings page, make sure the Available PostScript Memory is accurate.) +115 455(Reduce the number of fonts in the document.)115 440 +(Print the document in parts.)115 425 12/Times-Roman showpage +(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf}if}bind def end +version cvi 2016 ge{/VM?{pop}bind def}{/VM? userdict/PrtVMMsg get def}ifelse +105000 VM? +%%BeginResource: file Pscript_Win_Basic 5.0 0 +/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^ +/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/- +/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true , +d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C +/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M +/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d +/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage +, d/K/stroke , d/W/widthshow , d/R/rotate , d/L2? false/languagelevel where{pop +languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d/yS/yshow , d/zS/xyshow , +d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{, d}bd/bn/bind ld/lw/Lw ld +/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx matrix +currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit/UtilsInit +counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}b +/initialize{`{/Pscript_Win_Data where{!}{U/Pscript_Win_Data & put}?/ADO_mxRot ~ +d/TextInitialised? F d reinitialize E}{U/Pscript_Win_Data 230 dict @ ` put +/ADO_mxRot ~ d/TextInitialised? F d reinitialize}?}b/terminate{!{& self eq +{exit}{E}?}loop E}b/suspend/terminate , d/resume{` Pscript_Win_Data `}b U ` +/lucas 21690 d/featurebegin{countdictstack lucas[}b/featurecleanup{stopped +{cleartomark @ lucas eq{! exit}if}loop countdictstack ~ sub @ 0 gt{{E}repeat} +{!}?}b E/snap{transform 0.25 sub round 0.25 add ~ 0.25 sub round 0.25 add ~ +itransform}b/dsnap{dtransform round ~ round ~ idtransform}b/nonzero_round{@ 0.5 +ge{round}{@ -0.5 lt{round}{0 ge{1}{-1}?}?}?}b/nonzero_dsnap{dtransform +nonzero_round ~ nonzero_round ~ idtransform}b U<04>cvn{}put/rr{1 ^ 0 - 0 ~ - +neg 0 - C}b/irp{4 -2 $ + +S fx 4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b/rp{4 2 $ M 1 ^ 0 +- 0 ~ - neg 0 -}b/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool +2 ^ put}b/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e +{DefIf_El !}b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b +/freeVM{/Courier findfont[40 0 0 -40 0 0]makefont Ji 2 vmreclaim}b/hfRedefFont +{findfont @ length dict `{1 ^/FID ne{d}{! !}?}forall & E @ ` ~{/CharStrings 1 +dict `/.notdef 0 d & E d}if/Encoding 256 array 0 1 255{1 ^ ~/.notdef put}for d +E definefont !}bind d/hfMkCIDFont{/CIDFont findresource @ length 2 add dict `{1 +^ @/FID eq ~ @/XUID eq ~/UIDBase eq or or{! !}{d}?}forall/CDevProc ~ d/Metrics2 +16 dict d/CIDFontName 1 ^ d & E 1 ^ ~/CIDFont defineresource ![~]composefont !} +bind d +%%EndResource +%%BeginResource: file Pscript_Win_Utils_L2 5.0 0 +/rf/rectfill , d/fx{1 1 dtransform @ 0 ge{1 sub 0.5}{1 add -0.5}? 3 -1 $ @ 0 ge +{1 sub 0.5}{1 add -0.5}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $ +snap + +S fx rf}b/rs/rectstroke , d/rc/rectclip , d/UtilsInit{currentglobal{F +setglobal}if}b/scol{! setcolor}b/colspA/DeviceGray d/colspABC/DeviceRGB d +/colspRefresh{colspABC setcolorspace}b/SetColSpace{colspABC setcolorspace}b +/resourcestatus where{!/ColorRendering/ProcSet resourcestatus{! ! T}{F}?}{F}? +not{/ColorRendering<>/defineresource where{!/ProcSet +defineresource !}{! !}?}if/buildcrdname{/ColorRendering/ProcSet findresource ` +mark GetHalftoneName @ type @/nametype ne ~/stringtype ne and{!/none}if(.) +GetPageDeviceName @ type @/nametype ne ~/stringtype ne and{!/none}if(.)5 ^ 0 5 +-1 1{^ length add}for string 6 1 $ 5 ^ 5{~ 1 ^ cvs length 1 ^ length 1 ^ sub +getinterval}repeat ! cvn 3 1 $ ! ! E}b/definecolorrendering{~ buildcrdname ~ +/ColorRendering defineresource !}b/findcolorrendering where{!}{ +/findcolorrendering{buildcrdname @/ColorRendering resourcestatus{! ! T}{ +/ColorRendering/ProcSet findresource ` GetSubstituteCRD E F}?}b}? +/selectcolorrendering{findcolorrendering !/ColorRendering findresource +setcolorrendering}b/G2UBegin{findresource/FontInfo get/GlyphNames2Unicode get +`}bind d/G2CCBegin{findresource/FontInfo get/GlyphNames2HostCode get `}bind d +/G2UEnd{E}bind d/AddFontInfoBegin{/FontInfo 8 dict @ `}bind d/AddFontInfo{ +/GlyphNames2Unicode 16 dict d/GlyphNames2HostCode 16 dict d}bind d +/AddFontInfoEnd{E d}bind d/T0AddCFFMtx2{/CIDFont findresource/Metrics2 get ` d +E}bind d +%%EndResource +end +%%EndProlog + +%%BeginSetup +statusdict begin (%%[ ProductName: ) print product print ( ]%%)= flush end +[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec +featurebegin{ +%%BeginNonPPDFeature: JobTimeout 0 +0 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/JobTimeout 4 -1 roll put setuserparams}{statusdict/setjobtimeout get exec}ifelse +%%EndNonPPDFeature +}featurecleanup + +featurebegin{ +%%BeginNonPPDFeature: WaitTimeout 120 +120 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse +%%EndNonPPDFeature +}featurecleanup + +featurebegin{ +%%BeginFeature: *HPEdgeToEdge True +<> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *HPPaperPolicy PromptUser + + <> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *HPHalftone PrinterDefault + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Collate True +<> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Smoothing True + + << /PostRenderingEnhance true /PostRenderingEnhanceDetails << /REValue 2 /Type 8 >> + >> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *PageSize Letter + + <> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *StapleLocation 1parallel + + userdict /HPStapleOption {(ONE)} put +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *MediaType None + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *OutputBin Upper +<> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Duplex DuplexNoTumble + + <> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *JRConstraints 0 + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *JRHDInstalled JRHDStore + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *JRHDNotInstalled JRHDPrivate + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *HPPrinterModelName HP_LaserJet_8150_Series_PS + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Option2 False + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Option6 False + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Option3 True + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Option5 False + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Option20 Standard + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Option21 MailboxModeMailbox + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *InstalledMemory 32-39MB + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *PrinterHardDisk False + +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *JobRetention True + +%%EndFeature +}featurecleanup +1 setlinecap 1 setlinejoin +/mysetup [ 72 600 V 0 0 -72 600 V 2.99905 785.99908 ] def +%%EndSetup + +userdict begin /ehsave save def end +%%EndPageComments +%%BeginPageSetup +/DeviceRGB dup setcolorspace /colspABC exch def +mysetup concat colspRefresh +%%EndPageSetup + +Pscript_WinNT_Incr begin +%%BeginResource: file Pscript_Win_GdiObject 5.0 0 +/SavedCTM null d/CTMsave{/SavedCTM SavedCTM currentmatrix d}b/CTMrestore +{SavedCTM setmatrix}b/mp null d/ADO_mxRot null d/GDIHMatrix null d +/GDIHPatternDict 22 dict d GDIHPatternDict `/PatternType 1 d/PaintType 2 d/Reps +L2?{1}{5}? d/XStep 8 Reps mul d/YStep XStep d/BBox[0 0 XStep YStep]d/TilingType +1 d/PaintProc{` 1 Lw[]0 sd PaintData , exec E}b/FGnd null d/BGnd null d +/HS_Horizontal{horiz}b/HS_Vertical{vert}b/HS_FDiagonal{fdiag}b/HS_BDiagonal +{biag}b/HS_Cross{horiz vert}b/HS_DiagCross{fdiag biag}b/MaxXYStep XStep YStep +gt{XStep}{YStep}? d/horiz{Reps{0 4 M XStep 0 - 0 8 +}repeat 0 -8 Reps mul + K}b +/vert{Reps{4 0 M 0 YStep - 8 0 +}repeat 0 -8 Reps mul + K}b/biag{Reps{0 0 M +MaxXYStep @ - 0 YStep neg M MaxXYStep @ - 0 8 +}repeat 0 -8 Reps mul + 0 YStep +M 8 8 - K}b/fdiag{Reps{0 0 M MaxXYStep @ neg - 0 YStep M MaxXYStep @ neg - 0 8 ++}repeat 0 -8 Reps mul + MaxXYStep @ M 8 -8 - K}b E/makehatch{4 -2 $/yOrg ~ d +/xOrg ~ d GDIHPatternDict/PaintData 3 -1 $ put CTMsave GDIHMatrix setmatrix +GDIHPatternDict matrix xOrg yOrg + mp CTMrestore ~ U ~ 2 ^ put}b/h0{/h0 +/HS_Horizontal makehatch}b/h1{/h1/HS_Vertical makehatch}b/h2{/h2/HS_FDiagonal +makehatch}b/h3{/h3/HS_BDiagonal makehatch}b/h4{/h4/HS_Cross makehatch}b/h5{/h5 +/HS_DiagCross makehatch}b/GDIBWPatternMx null d/pfprep{save 8 1 $ +/PatternOfTheDay 8 1 $ GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/yExt +~ d/Width ~ d/BGnd ~ d/FGnd ~ d/Height yExt RepsV mul d/mx[Width 0 0 Height 0 +0]d E build_pattern ~ !}b/pfbf{/fEOFill ~ d pfprep hbf fEOFill{O}{L}? restore}b +/GraphInit{GDIHMatrix null eq{/SavedCTM matrix d : ADO_mxRot concat 0 0 snap + +: 0.48 @ GDIHPatternDict ` YStep mul ~ XStep mul ~ nonzero_dsnap YStep V ~ +XStep V ~ E +S/GDIHMatrix matrix currentmatrix readonly d ; : 0.24 -0.24 +S +GDIBWPatternDict ` Width Height E nonzero_dsnap +S/GDIBWPatternMx matrix +currentmatrix readonly d ; ;}if}b +%%EndResource +%%BeginResource: file Pscript_Win_GdiObject_L3 5.0 0 +/GDIBWPatternDict 25 dict @ `/PatternType 1 d/PaintType 1 d/RepsV 1 d/RepsH 1 d +/BBox[0 0 RepsH 1]d/TilingType 1 d/XStep 1 d/YStep 1 d/Height 8 RepsV mul d +/Width 8 d/mx[Width 0 0 Height neg 0 Height]d/FGnd null d/BGnd null d +/SetBGndFGnd{BGnd null ne{BGnd aload ! scol BBox aload ! 2 ^ sub ~ 3 ^ sub ~ +rf}if FGnd null ne{FGnd aload ! scol}if}b/PaintProc{` SetBGndFGnd RepsH{Width +Height F mx PaintData imagemask Width 0 +}repeat E}b E d/mp/makepattern , d +/build_pattern{CTMsave GDIBWPatternMx setmatrix/nupangle where{! nupangle -90 +eq{nupangle R}if}if GDIBWPatternDict @ ` Width Height ne{Width Height gt{Width +Height V 1}{1 Height Width V}? +S}if xOrg yOrg E matrix + mp CTMrestore}b/hbf +{setpattern}b/hf{:/fEOFill ~ d ~ ! setpattern fEOFill{O}{L}? ;}b/pbf{: ! +/fEOFill ~ d GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/OutputBPP ~ d +/Height ~ d/Width ~ d/PaintType 1 d/PatternType 1 d/TilingType 1 d/BBox[0 0 +Width Height]d/XStep Width d/YStep Height d/mx xOrg yOrg matrix + d 20 dict @ ` +/ImageType 1 d/Width Width d/Height Height d/ImageMatrix[1 0 0 1 0 0]d +/BitsPerComponent 8 d OutputBPP 24 eq{/Decode[0 1 0 1 0 1]d}{OutputBPP 8 eq{ +/Decode[0 1]d}{/Decode[0 1 0 1 0 1 0 1]d}?}?/DataSource{PaintData}d E/ImageDict +~ d/PaintProc{` ImageDict image E}b & mx makepattern setpattern E fEOFill{O}{L} +? ;}b/mask_pbf{:/fEOFill ~ d 20 dict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/Height ~ +d/Width ~ d/PatternType 1 d/PaintType 2 d/TilingType 1 d/BBox[0 0 Width Height] +d/XStep Width d/YStep Height d/mx xOrg yOrg matrix + d/PaintProc{` Width Height +T 1 1 dtransform abs ~ abs ~ 0 0 3 -1 $ 0 0 6 array astore{PaintData}imagemask +E}b & mx makepattern setpattern E fEOFill{O}{L}? ;}b/grf4{4 dict `/ShadingType +4 d/DataSource ~ d/ColorSpace ~ d & E shfill}b +%%EndResource +end reinitialize +/DeviceGray dup setcolorspace /colspABC exch def +0 0 scol N 2950 725 M 3113 869 I K +N 3113 869 M 3044 831 I 3069 806 I C + O N 2950 725 M 3113 775 I K +N 3113 775 M 3038 769 I 3044 738 I C + O N 2950 725 M 3113 681 I K +N 3113 681 M 3044 719 I 3038 681 I C + O N 2950 725 M 3113 588 I K +N 3113 588 M 3069 650 I 3044 619 I C + O 55017 VM? +Pscript_WinNT_Incr begin +%%BeginResource: file Pscript_T42Hdr 5.0 0 +/asc42 0.0 d/sF42{/asc42 ~ d Ji}bind d/bS42{0 asc42 -M}bind d/eS42{0 asc42 neg +-M}b/Is2015?{version cvi 2015 ge}bind d/AllocGlyphStorage{Is2015?{!}{{string} +forall}?}bind d/Type42DictBegin{25 dict `/FontName ~ d/Encoding ~ d 4 array +astore cvx/FontBBox ~ d/PaintType 0 d/FontType 42 d/FontMatrix[1 0 0 1 0 0]d +/CharStrings 256 dict `/.notdef 0 d & E d/sfnts}bind d/Type42DictEnd{& @ +/FontName get ~ definefont ! E}bind d/RDS{string currentfile ~ readstring !} +executeonly d/PrepFor2015{Is2015?{/GlyphDirectory 16 dict d sfnts 0 get @ 2 ^ +(glyx)putinterval 2 ^(locx)putinterval ! !}{! !}?}bind d/AddT42Char{Is2015? +{findfont/GlyphDirectory get ` d E ! !}{findfont/sfnts get 4 ^ get 3 ^ 2 ^ +putinterval ! ! ! !}?}bind d/IDStrNull{1 add 2 mul @ string 0 1 3 ^ 1 sub{1 ^ ~ +0 put}for ~ !}bind d/IDStr{@ 1 add 2 mul string 0 1 3 ^{1 ^ ~ @ 2 mul ~ 3 copy +256 idiv put ~ 1 add ~ 256 mod put}for ~ !}bind d/IDStr2{~ @ 1 add 2 mul string +0 1 3 ^{1 ^ ~ @ 2 mul ~ 5 ^ add 3 copy 256 idiv put ~ 1 add ~ 256 mod put}for ~ +! ~ !}bind d/CIDT42Begin{25 dict `/CDevProc ~ d/CIDMap ~ d/CIDCount ~ d +/CIDSystemInfo 3 dict @ ` 3 -1 $/Supplement ~ d 3 -1 $/Ordering ~ d 3 -1 $ +/Registry ~ d E d/CIDFontName ~ d/Encoding ~ d 4 array astore cvx/FontBBox ~ d +/CharStrings 2 dict @ `/.notdef 0 d E d/GDBytes 2 d/CIDFontType 2 d/FontType 42 +d/PaintType 0 d/FontMatrix[1 0 0 1 0 0]d/Metrics2 16 dict d/sfnts}bind d +/CIDT42End{CIDFontName & E/CIDFont defineresource !}bind d/T42CIDCP32K{/CIDFont +findresource @ length dict copy @/FID undef `/CIDFontName ~ d/CIDMap ~ d +/CIDCount ~ d/Metrics2 8 dict d CIDFontName & E/CIDFont defineresource !}bind d +/T42CIDCPR{/CIDFont findresource @ length dict copy @/FID undef `/CIDFontName ~ +d &/CDevProc known{[/CDevProc , @ type/operatortype ne{/exec cvx}if/! cvx/! cvx +/! cvx/! cvx 5/^ cvx 5/^ cvx 0.0 0.0]cvx}{{! ! ! ! ! 5 ^ 5 ^ 0.0 0.0}}? bind +readonly/CDevProc ~ d CIDFontName & E/CIDFont defineresource !}bind d +/T0AddT42Char{/CIDFont findresource/GlyphDirectory get ` d E ! !}bind d +/T0AddT42Mtx2{/CIDFont findresource/Metrics2 get ` d E}bind d/UpdateCIDMap{ +/CIDFont findresource/CIDMap get 3 1 $ putinterval}d/AddXUID{version cvi 3011 +ge{/XUID ~ d}{!}?}bind d/hfDef42CID{/CIDFont findresource @ length dict copy @ +/FID undef `/CIDFontName 2 ^ d @ type @/booleantype ne{/arraytype eq{/CDevProc +~ d}{matrix @ 4 4 -1 $ put/FontMatrix ~ d}?}{! !}? & E/CIDFont defineresource +!}bind d/hfDefRT42CID{/CIDFont findresource @ length dict copy @/FID undef ` +/CIDFontName 1 ^ d &/CDevProc known{[/CDevProc , @ type/operatortype ne{/exec +cvx}if/! cvx/! cvx/! cvx/! cvx 5/^ cvx 5/^ cvx 0.0 0.0]cvx}{{! ! ! ! ! 5 ^ 5 ^ +0.0 0.0}}? bind readonly/CDevProc ~ d & E/CIDFont defineresource !}bind d +%%EndResource +end reinitialize +-0.578 -0.207 1.387 0.922 + 256 array 0 1 255 {1 index exch /.notdef put} for /TTE1CD9F20t00 +Type42DictBegin +[<00010000000a000a000a000a6376742065146ccc000000ac000002746670 +676d2bc15a050000032000000768676c79661b44802b000058e80004e222 +68656164ce8b489100000a8800000036686865610dd60c5100000ac00000 +0024686d74785d72583900000ae4000023446c6f636116f62ad600002e28 +000023486d6178700dba0872000051700000002070726570877d61440000 +5190000007556764697200000000000000000000000005ba0019000005ba +001900000000000000000000000000000000000000000425001900000000 +ffe700000000ffe70000000000000000fe68ffea00000000000000000000 +0000000002f5ffee05cd000002ddffee02f0000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000 +000008000000080000000000000000000000000000000000000000000000 +00000000000000000000000000d2010e012c01130000000000c8010900c8 +000000000000000000000000000000890048001bff77ffb8ffe500a4005f +000aff5cffa1fff6000000000000000afff6000000000000000000000059 +ffa700c9000000c3000000c2008300c3000000bd000000bd007900c3006c +00bd009100af00000000026f00ae00a6009a0000009b0094008b00cc00ae +00a600940000000000ff000001e300000000000000000000000000000000 +00000000000000000000000000cd00cd006801ee0060008c000000000000 +0000000000000000000000a800a800a800b900cd00a80052016a0049007d +007d0083008a00000071009b00910078000001fc0071ff8f022a006d0094 +00a0029a030a00b800ae008b018b019101d10391008c00730268027d01b0 +01dd021c033302a3026b02730152024c0021004c05e704f20098ff6800ac +00c500850085005c0054006000b401baff1ffe680000008300bc00940094 +ff85ffae00520029061400ae00460046fe580560008f076002f20025003e +004700500058007300a80160006000950025003e004700500058007300a8 +01600000002d005000600081009300ba0108ffd3ffaeff9106520060005c +00b0012b012b04ba013e018507600016000a004b403f545249483b393837 +363534333231302f2e2d2c2b2a292827262524232221201f1e1d1c1b1a19 +1817161514131211100f0e0d0c0b0a090807060504030201002c01b01843 +58456ab0194360b0462344231020b0464ef04d2fb000121b21231133592d +2c01b0184358b0052bb000134bb0145058b100403859b0062b1b21231133 +592d2c01b01843584eb0032510f221b000124d1b2045b00425b00425234a +6164b0285258212310d21bb0032510f221b0001259592d2cb01a43582121 +1bb00225b0022549b00325b003254a612064b01050582121211bb00325b0 +032549b0005058b0005058b8ffe238211bb0103821591bb0005258b01e38 +211bb8fff03821595959592d2c01b0184358b0052bb000134bb0145058b9 +0000ffc03859b0062b1b21231133592d2c4e018a10b146194344b00014b1 +0046e2b00015b90000fff03800b0003cb0282bb0022510b0003c2d2c0118 +b0002fb00114f2b00113b001154db000122d2c01b0184358b0052bb00013 +b90000ffe038b0062b1b21231133592d2c01b018435845646a23456469b0 +1943646060b0462344231020b046f02fb000121b2121208a208a52581133 +1b212159592d2c01b10b0a432343650a2d2c00b10a0b4323430b2d2c00b0 +462370b101463e01b0462370b10246453ab10200080d2d2cb0122bb00225 +45b00225456ab0408b60b0022523442121212d2cb0132bb0022545b00225 +456ab8ffc08c60b0022523442121212d2cb000b0122b2121212d2cb000b0 +132b2121212d2c01b00643b00743650a2d2c2069b04061b0008b20b12cc0 +8a8cb8100062602b0c642364615c58b00361592d2cb1000325456854b01c +4b505a58b0032545b0032545606820b004252344b0042523441bb0032520 +4568208a2344b00325456860b003252344592d2cb00325204568208a2344 +b003254564686560b00425b0016023442d2cb00943588721c01bb0124358 +8745b0112bb0472344b0477ae41b038a45186920b04723448a8a8720b0a0 +5158b0112bb0472344b0477ae41b21b0477ae4595959182d2c208a452345 +6860442d2c456a422d2c01182f2d2c01b0184358b00425b0042549642345 +64696120b080626ab00225b00225618cb0194360b0462344218a10b046f6 +211b21212121592d2c01b0184358b0022545b002254564606ab00325456a +6120b00425456a208a8b65b0042523448cb00325234421211b20456a4420 +456a44592d2c012045b00055b018435a584568234569b0408b6120b08062 +6a208a236120b003258b65b0042523448cb00325234421211b2121b0192b +592d2c018a8a45642345646164422d2cb00425b00425b0192bb0184358b0 +0425b00425b00325b01b2b01b0022543b04054b0022543b000545a58b003 +252045b040614459b0022543b00054b0022543b040545a58b004252045b0 +4060445959212121212d2c014b525843b00225452361441b2121592d2c01 +4b525843b00225452360441b2121592d2c4b525845441b2121592d2c0120 +b003252349b04060b0206320b000525823b002253823b002256538008a63 +381b212121212159012d2c4b505845441b2121592d2c01b005251023208a +f500b0016023edec2d2c01b005251023208af500b0016123edec2d2c01b0 +062510f500edec2d2c462346608a8a462320468a608a61b8ff8062232010 +238ab14b4b8a70456020b0005058b00161b8ffba8b1bb0468c59b0106068 +013a2d2c2045b00325465258b0022546206861b00325b003253f2321381b +2111592d2c2045b00325465058b0022546206861b00325b003253f232138 +1b2111592d2c00b00743b006430b2d2c8a10ec2d2cb00c4358211b2046b0 +005258b8fff0381bb0103859592d2c20b0005558b8100063b003254564b0 +0325456461b0005358b0021bb04061b00359254569535845441b2121591b +21b0022545b00225456164b028515845441b212159592d2c21210c642364 +8bb84000622d2c21b08051580c6423648bb82000621bb200402f2b59b002 +602d2c21b0c051580c6423648bb81555621bb200802f2b59b002602d2c0c +6423648bb84000626023212d2c4b5358b00425b004254964234564696120 +b080626ab00225b00225618cb0462344218a10b046f6211b218a11231220 +392f592d2c2121212121212d2cb0134358031b02592d2cb0134358021b03 +592d2cb00a2b2310203cb0172b2d2cb00225b8fff038b0282b8a102320d0 +23b0102bb0054358c01b3c59201011b00012012d2c4b53234b515a58381b +2121592d2c01b0022510d023c901b00113b0001410b0013cb001162d2c01 +b00013b001b0032549b0031738b001132d2c4b53234b515a5820458a6044 +1b2121592d2cb0024354584b53234b515a58381b2121591b21212121592d +2c4b53234b515a58381b2121592d2c4b5458381b2121592d2c4b52587d1b +7a592d2cb1020042b123018851b1400188535a58b910000020885458b202 +010243604259b12401885158b920000040885458b202020243604259b124 +01885458b2022002436042004b014b5258b2020802436042591bb9400000 +80885458b202040243604259b94000008063b80100885458b20208024360 +4259b94000010063b80200885458b2021002436042595959592d00010000 +00016148e1f6c9625f0f3cf5001b080000000000aff53caf00000000b8f4 +5fe9fb5cfe520b170760000000090001000100000000000100000760fe52 +00000ab3fb5cfa7a0b170001000000000000000000000000000008d10258 +0032000000000239000002200000023900b602d70054047300170473004e +071d0081055600580187005c02aa007b02aa004a031d004204ac00710239 +00b602aa0042023900b6023900000473005c047300e30473003f0473005a +0473001f047300560473005c047300620473005604730056023900b60239 +00b604ac007104ac007104ac00710473005e081f00730556fffe055600a4 +05c7006005c700a4055600a404e300a40639006005c700a4023900bc0400 +0037055600a4047300a406aa00a405c700a406390060055600a406390060 +05c700a40556005c04e3002d05c700a40556000c078d00190556000a0556 +000a04e300250239008b023900000239002103c1004a046afff402aa0056 +0473004e0473008b04000048047300480473004802390010047300480473 +008b01d3008b01d3ffb80400008b01d3008b06aa008b0473008b04730048 +0473008b0473004802aa008b0400003f02390023047300870400001b05c7 +000a0400000e0400001b0400002902ac0039021400bc02ac003104ac0058 +0556fffe0556fffe05c70060055600a405c700a40639006005c700a40473 +004e0473004e0473004e0473004e0473004e0473004e0400004804730048 +04730048047300480473004801d3007901d3ffec01d3ffac01d3ffd50473 +008b04730048047300480473004804730048047300480473008704730087 +0473008704730087047300500333008504730071047300310473005602cd +0068044cfffe04e3008b05e5000005e500000578003202aa00e302aa003f +04ac0071080000000639005004ac005c04ac007104ac007104ac00710473 +00020473008b03f4003305b4007b069600a4046400000231ffb202f6002b +02ec002d06250071071d004e0473004804730062023900b604ac00710464 +001404730042046400330556fffe0473008d0473008d0486005b0556fffe +0556fffe0639006008000060078d00480258fff404b0fff402aa005402aa +005401c7007d01c7007d04ac007103f4002e0400001b0556000a0156fe54 +0473004c02aa005a02aa007f040000100400001004730050023900b60239 +00b603220090080000190556fffe055600a40556fffe055600a4055600a4 +023900ac0239ffdf023900080239001f06390060063900600639006005c7 +00a405c700a405c700a401d3008b02aa001702aa000602aa001d02aa002d +02aa00f802aa00a202aa0085037a009d02aa00b602aa00170473000801d3 +000c0556005c0400003f04e3002504000029021400bc05c7000204730048 +0556000a0400001b055600a40473008b04ac007104ac00a602aa006a02aa +001902aa002106ac007f06ac007f06ac003504e300000639006004730048 +023900bc0556005c0400003f05c700600400004805c70060040000480473 +00480400fff4023900b60556fffe0473004e0556fffe0473004e05c700a4 +0513004805c70002055600a404730048055600a404730048047300a401d3 +0047047300a40255008b047300a402f3004205c700a40473008b05c700a4 +0473008b063900600473004805c700a402aa008b05c700a402aa002b0556 +005c0400003f04e3002d0239002304e3002d02d0002305c700a404730087 +05c700a40473008704e300250400002904e300250400002904ae00a40639 +006006790060049c0048047300480400004804ae00480400002105310048 +0400fff4047200b602f6004c09e9008f063900bc03a6008b0568002102aa +00e502aa0056071d00810296000f04d5009202d6008302d6008304d500b1 +02d600700556fffe0473004e05c700600400004805c70060040000480556 +00a404730048055600a404730048055600a4047300480639006004730048 +0639006004730048063900600473004805c700a40473008b05c700140473 +00000239ffce01d3ff9b0239ffe501d3ffb20239fff501d3ffc2023900bc +01d3008b0400003701d3ffac056800a40400008b0400008b047300a401d3 +004205c700a40473008b05c700a40473008b063900600473004806390060 +0473004805c700a402aa005a0556005c0400003f04e3002d0239002305c7 +00a40473008705c700a40473008705c700a40473008705c700a404730087 +078d001905c7000a0556000a0400001b0200008b0556fffe0473004e0800 +0000071d004e0639005004730048023900b6078d001905c7000a078d0019 +05c7000a078d001905c7000a0556000a0400001b01c7007d0400fff40473 +00310473004806ac007f06ac003606ac003606ac006d02aa00fc02aa0085 +02aa00ee034800370556fffe0646003306b7003303290033069a00000631 +0000069a0000033300290556fffe055600a40575000c055600a404e30025 +05c700a4023900bc055600a40556fffe06aa00a405c700a4053f006d0639 +006005c700a4055600a404e5006004e3002d0556000a0556000a0679005e +06390066023900080556000a049c0048040000480473008b01ec00790473 +00870481008b0452001b03e100480473008b0473005c01ec008b0400008b +0400001b0473008b0400001b03e10048047300480491008b044800480473 +0087042d000e058500870585004802520008047300870473004804730087 +05850048055600a40666002d048900a405bc00600556005c023900bc0239 +00080400003707ae000a07ae00a40666002d055600a4051f000805c700a4 +0556fffe053d00a4055600a4048900a406330023055600a4073500060514 +005a05c700a405c700a4055600a405a4000a06aa00a405c700a406390060 +05c700a4055600a405c7006004e3002d051f000806cb00600556000a05fc +00a40579007706e100a4071700a4063d0000071000a4053d00a405bc005e +080c00a405c7005c0473004e0496005e043f008b0310008b04aa00000473 +004805aa0004040000230479008b0479008b0400008b0491000a05b6008b +0473008b047300480473008b0473008b0400004803aa00250400001b0698 +00480400000e0498008b0444005e066a008b068f008b04f6000005bc008b +042f008b0400001b05f4008b0456003504730048047300000310008b0400 +00480400003f01d3008b01d3ffd501d3ffb806e9000a0698008b04730000 +0400008b0400001b0473008b047300a403b8008b046afff407fc008f0473 +008b02aa002302aa002102aa006d02aa002101d3008b0556005c0400003f +0473000001480060028f004e028f005e028f005e0148006001ec004e01ec +005801ec007101ec005601480060028f004e014800600148007502140039 +01ec007101cf0091014800600148ff79023900b604cd0083048f003b035c +00170429001404cd0098028f004c02cd001404cd009804cd003b028f004c +0429003f0429005a0429004804cd005004cd003b02cd004a02cd003b04cd +005004cd002d04cd00870466006f043d003b0466003b047b00980400002d +0550009804cd005404cd003704cd003704cd003702000060037100600566 +0077028fffa20429003f0429003f0429ff790429ff7904cd002d05500098 +05500098055000980550009804cd008304cd008304cd0083048f003b035c +00170429001404cd0098028f003d02cd001404cd003b028f003d0429003f +0429005a0429004804cd003b02cd003b04cd005004cd00870466006f0466 +003b047b00980400002d0550009804cd0054028f004c048f003b0429005a +0466006f04cd00290000ffdc0000ff250000ffdc0000fe51014800600639 +00600473004805c700a40473008702aa00cf02aa00f802aa005602aa00e3 +02aa001702aaff0c02aa001702aa000402aa002d02aa002d02aa002d02aa +000402aa00cf02aa000402aa002d02aa002b02aa002b02aa001902aa0017 +0556fffe0473004e0556fffe0473004e0556fffe0473004e0556fffe0473 +fff20556fffe0473004e0556fffe0473004e0556fffe0473004e0556fffe +0473004e0556fffe0473004e0556fffe0473004e0556fffe0473004e0556 +fffe0473004e055600a404730048055600a404730048055600a404730048 +055600a404730048055600770473fff1055600a404730048055600a40473 +0048055600a4047300480239009801d30098023900bc01d3008b06390060 +0473004806390060047300480639006004730048063900600473fff20639 +006004730048063900600473004806390060047300480639006004730048 +063900600473004806390060047300480639006004730048063900600473 +004805c700a40473008705c700a40473008705c700a40473008705c700a4 +0473008705c700a40473008705c700a40473008705c700a4047300870556 +000a0400001b0556000a0400001b0556000a0400001b0473004801df00b2 +01df007501df002b01df007501f4ff8501f4ff8501f4ff850458ff850458 +00560458ff85045800560458ff850458005604d7ff8504d7ff8506c3ff85 +045801310458013f0458005a0458003d0458007504580048045800480458 +002d0458002b0458005c06c3ff850458ff850323ff8503a000560458ff85 +0323ff8503a000560252ff85025eff85022500ac0252ff85025eff850327 +ff8501baff850323ff8501f4ff85039aff850323ff85030e004801f4ff85 +04bc001f030e004804bc001f026600cd01f4ff85045c000c04c3003501df +000001df000001df0000045c000c04c30035045cfff604bc001f022500ac +04c3001f026600cd04730062034c008901df002701df00710364000001df +0071051f001f01df00ae05b80050027b003d05b8005005b8005004580056 +045800560458005602b8000a02b8000a03e1005203e100520698000a0698 +000a08b8000a08b8000a04a4ff8504a4ff85045c0052045c005201baff85 +0652005004a8002704cd00330414002902b8001f043d0033027b003d0364 +0000051f001f051f001f01ae000001df000001ae000001ae000001ae001b +01ae000001df00000133000a045c000c04c3003501cb006801c7001f0266 +00e9026600620266005601f4ff850252ff85025eff8505b8005003df0093 +0000fb5c0000fb5c0000fb5c0000fb5c0000fe000000fd3b0000fc4c0000 +fd0a0000fd2d0000ff170000fdaa0000fda80000fe850000fe9605c3005e +0000fbdf0000fd1b0000fbfa0000fe020000fdf00000fc4c0000fd7f0000 +fd2d045e005e047f002d04ac002d047f0056047f0056055c002d03640006 +03df0050051f0050047f002d04ac002d05c3005e05c3005e04ac005004ac +005003df00930571002d062100560635005e047f0056047f0056045e005e +049a00500404009304f6005004ac005004ac0050047f0081047f00810537 +00500537005004ac005004ac002f0400008103df0093045e005e03df0050 +04ac005003df0050047f0056051200500431005004db0050053700500431 +0050045e005e04000050039a004a0000fcfe035c001f035cfe620000fc73 +0000fc730000fc730000fc730000fee10000fe000000fee9031f00b604fe +009a0248008b048f008b035c0010035cffc903df0000035c001f04830050 +0000fd100000ff190000fe5e0000fda80000fec10000fe960000fe620000 +fe680431006204bc006004bc005c04fe000e04fe007f04fe006004fe0060 +04bc001704fe003504fe006004fe004a0527005006d100350000fee10000 +fe000000fee901baff8505b8005001f4ff8504580056045800560458ff85 +03e1005204c100330327ff8504c100330327ff85051f001f04bc001f01f4 +ff85030e0048027b003d045801310458013f0458005a0458003d0458003d +0458004a045800c90458002d0458002b0458005c04e3002d023900230556 +00a40473004805c700a40479008b04140029023900bc0400003701d3008b +01d3ffb80489003a031000300786000605cf000405aa00a40447008b0556 +00a40400008b05fc00a4049a008b0556000a0400001b0556000a0400001b +05a5000a043a000e057900770444005e057900a40473008b063900600473 +00480639006004730048080000000000ffdc0000ff160000ffdc0000ff20 +0000ffdc0000ff200197000005b8005001f4ff8502b8000a03e10052043d +00330440006401f4ff8503fdff85044000640440006406d9001306d90013 +06d9001306d9001301ba00280493004a031d0042065200500252ff85025e +ff8501df000001df000006750048027b003d0000ffdd0000fe870000fefd +047300690568005c05c7006005c7006006aa008b05c70000098700a4078d +00000556000004e3002d0800002901ae000501ae002a026600ea02660056 +0266006201ae002e04a8002701ae001001cb006801cb006801df000501df +000501df002a01df002a01df002a01df002a028000ae028000b203640000 +03640000057e001f04bc001f05b8005001f4ff8505b8005001f4ff8505b8 +005001f4ff8505b8005001f4ff8505b8005001f4ff8505b8005001f4ff85 +04580056045800560458ff8504580056045800560458ff85045800560458 +00560458ff8504580056045800560458ff8504580056045800560458ff85 +04580056045800560458ff8502b8000a02b8000a02b8000a02b8000002b8 +000a02b8fffc02b8fffc02b8000803e1005203e1005203e1005203e10052 +03e1005203e1005203e100520698000a04d7ff850698000a04d7ff850698 +000a04d7ff8508b8000a06c3ff8508b8000a06c3ff8504a4ff85045c0052 +03a000560458ff850323ff8506520050065200500252ff85025eff850652 +00500252ff85025eff85065200500252ff85025eff85065200500252ff85 +025eff8504a8002704a8002706d9003306d9ff7904c100330327ff8504cd +00330327ff8504cd00330327ff8504cd00330327ff8504c100330327ff85 +04c100330327ff8504c100330327ff8504c100330327ff8504c100330327 +ff660414002901baff850414002901baff850414002901baff8504140029 +01baff85043d003301f4ff85043d0033043d003301f4ff85043d003301f4 +ff8504580056045800560458ff8503640000036400000364000003640000 +0364000003640000036400000364000005f3000505900005051f001f04bc +001f01f4ff8503640000051f001f04bc001f051f001f04bc001f0000fe46 +0000ff6e0000ff590000ffb70000fec308fc003208ad00320000ffb50000 +ffb60000ff410000ff920000fec30000ffbf0168003202cc00320000fea2 +0000ff5a04cd00320000ff580000ff580000ff920698000a04d7ff8508b8 +000a06c3ff85045c005203a000560458ff850323ff85034c008902b8001f +02aa001d02aa001d02aa001d02aa001d02aa003f02aa003f02aa000402aa +000402aa000402aa000402aa00ca02aa00e302aa001702aa001702aa001d +02aa001d055600a4047300480556fffe0473004e055600a40473008b0556 +00a40473008b055600a40473008b05c700600400004805c700a404730048 +05c700a40473004805c700a40473004805c700a40473004805c700a40473 +0048055600a404730048055600a404730048055600a404730048055600a4 +04730048055600a40473004804e300a402390010063900600473004805c7 +00a40473008b05c700a40473008b05c700a40473008b05c7007104730053 +05c700a40473008b0239ffce01d3ff9b0239000701d3ffd3055600a40400 +008b055600a40400008b055600a40400008b047300a401d3008b047300a4 +01d3ffb1047300a401d3ffb1047300a401d3ffac06aa00a406aa008b06aa +00a406aa008b06aa00a406aa008b05c700a40473008b05c700a40473008b +05c700a40473008b05c700a40473008b0639006004730048063900600473 +004806390060047300480639006004730048055600a40473008b055600a4 +0473008b05c700a402aa008b05c700a402aa008b05c700a402aa006605c7 +00a402aa001d0556005c0400003f0556005c0400003f0556005c0400003f +0556005c0400003f0556005c0400003f04e3002d0239002304e3002d0239 +002304e3002d0239ffed04e3002d0239001705c700a40473008705c700a4 +0473008705c700a40473008705c700a40473008705c700a4047300870556 +000c0400001b0556000c0400001b078d001905c7000a078d001905c7000a +0556000a0400000e0556000a0400000e0556000a0400001b04e300250400 +002904e300250400002904e30025040000290473008b0239000d05c7000a +0400001b0473004e0200008b049c0048049c0048049c0048049c0048049c +0048049c0048049c0048049c00480556fffe0556fffe060a0000060a0000 +05e2000005e20000059c0000059c00000400004804000048040000480400 +0048040000480400004805eb000005eb0000073000000730000007300000 +073000000473008b0473008b0473008b0473008b0473008b0473008b0473 +008b0473008b065c0000065c000007a1000007a1000007a1000007a10000 +075900000759000001ec008b01ec008b01ecffdb01ecffdb01ec000301ec +000301ecff9b01ecff9b02b6000002b6000003fb000003fb000003fb0000 +03fb000003b3000003b30000047300480473004804730048047300480473 +004804730048063900000639000007da000007da00000776000007760000 +047300870473008704730087047300870473008704730087047300870473 +0087064c00000778000007ca000007490000058500480585004805850048 +0585004805850048058500480585004805850048063900000639000007da +000007da000007760000077600000736000007360000049c0048049c0048 +04000048040000480473008b0473008b01ecffeb01ec0078047300480473 +004804730087047300870585004805850048049c0048049c0048049c0048 +049c0048049c0048049c0048049c0048049c00480556fffe0556fffe060a +0000060a000005e2000005e20000059c0000059c00000473008b0473008b +0473008b0473008b0473008b0473008b0473008b0473008b065c0000065c +000007a1000007a1000007a1000007a10000075900000759000005850048 +058500480585004805850048058500480585004805850048058500480639 +00000639000007da000007da000007760000077600000736000007360000 +049c0048049c0048049c0048049c0048049c0048049c0048049c00480556 +fffe0556fffe0556fffe0556fffe0556fffe02aa010302aa00f902aa0103 +02aa000602aa00060473008b0473008b0473008b0473008b0473008b065e +0000064d000006cf000006be000005c700a402aa004602aa006e02aa0006 +01ecffc201ecffb201ecff7e01ecff7e01ecff9b01ecff9b0239fff60239 +ffe6032900000318000002aa004602aa006e02aa00060473008704730087 +04730087047300870491008b0491008b04730087047300870556000a0556 +000a06a6000006e7000005eb0000034800370348003702aa005605850048 +058500480585004805850048058500480708000006930000070800000693 +00000639006602aa00e302aa01030000fec30000fec80000fdf40000fed8 +0000ffa40000feea0000ff4c0000fe9e0000fec30000ffbf0000ff3d0000 +fe9e0000fed80000fed80000ffae0000ffae0000ffae000000640000ff47 +0000ff480000ff440000ff440000fe87000000000000ffa60000ff440000 +ff440000ff440000fec80000ff2d000000000000feeb0000ff4c0000ffae +0000ff350000ff240000ffbf0000fe870000febb0000fec30000fec30000 +fed80000fed80000feb10000fec80000fdbf0000fdf40000feb10000fec8 +0000fdbf0000fe870000fee30000ffa60000fe870000ff440000feba0000 +ff230000ff9a0000fdf40000feb10000ffae0000fe940000ffa40000fe87 +0000fdf40000ff3d0000ff440000feb10000feb10000feb10000ff030000 +ff440000ff530000ff530000ff53045cffee04c30016045c000c04c30035 +045c000c04c30035045c000c04c30035045c000c04c30035045c000c04c3 +0035045c000c04c30035045800790458003c0473000a05fd0000053d00a4 +0473008b053d000d0473000305c7006905c700600400004805c70002066e +0000053d005104730048047300480556006d0514006a04e3ffd106390060 +0556000c0724008b01d3008b02390014055600a40400008b01d300140400 +001b06aa008505c7ffd10473008b06390060070e006005a0004805fd0000 +0473008b055600a40556006a0400005004e50060035600000239002304f7 +00140239002304e3002d0625007105c700a4062c000a0400001b04e30025 +04000029046c001f046c006003c6004803c600330473003f0473002f03a9 +0020044e0023046c008b021400bc0214002605d200c1023900b60a5b00a4 +097800a4084c0048086000a4064a00a40363008b097800a4073e00a40607 +008b0556fffe0473004e0239ffdf01d3ffa9063900600473004805c700a4 +0473008705c700a40473008705c700a40473008705c700a40473008705c7 +00a404730087047300480556fffe0473004e0556fffe0473004e08000000 +071d004e06390060047300480639006004730048055600a40400008b0639 +0060047300480639006004730048046c001f03c6002b01d3ffac0a5b00a4 +097800a4084c00480639006004730048085b00a4046c008b05c700a40473 +008b0556fffe0473004e0556fffe0473004e055600a404730048055600a4 +047300480239ff6601d3ff3e0239fffa01d3ffc806390060047300480639 +00600473004805c700a402aa000605c700a402aa007c05c700a40473006a +05c700a404730087040200420374002305c700a40473008b057900a404a8 +00420446003904e30025040000290556fffe0473004e0639006004730048 +0639006004730048063900600473004806390060047300480556000a0400 +001b02aa001d02aa001d02aa001702aa003f02aa00040473008c049c0048 +049c00480473008b0400001b0400000004730048047300480473004805db +004804000048040000230552002304460048026200100473004804730048 +04ae004b0400001b04e0001d047300870473008b0473008b01d3000001ec +008b01d3008b029e0000024e000001d3008b0486008b06aa008506aa0085 +06aa008b0473ffb80473008b0455008b0473004805c50048058500480473 +004802aafff802aafff802aafff802aa008b02aa008b0239008b0239fff8 +0447008b0447008b0400003f0231ffb2026200100231ffcf039900000239 +0012023900230473000004c50048043b00870400001b05c7000a0400001b +03ce000004000029046e002903c6002b03c6002c0400001b040000480400 +001b0400004806390060043f008b0446004804ae004b0473008b02ff000a +040000080364008b047300480400001b04000048078e00480718004807fc +004805b6002303930023060c0023061900100568008b04f0008b03e2001e +048200880481008b0473008705cd000a0767fffd05cd000a047300480585 +004804970014063900600473004805c700600400004804e300a403fc008b +04ff0000043c0032060d000a049d000006aa008506aa0085057900770473 +0087057900a4044e000a0556006a0556006a04e0000504e0000505e50060 +0476004803c70014034f0028049700140496005e0400004801d3ffb80639 +006003b6004803b6001b095f006005e8001b0600000a04c0000a079800a4 +05c2008b054a000d03fe001b06f800a4057a008b0735000805aa000508f7 +00a4076c008b0514006d0400004a0679005e058500870639006004730048 +0604000c04a4001b0604000c04a4001b0ab3006008d300480711005f0568 +0048095f006008800048095f006005e8001b05c700600400004803f80014 +02aafffa02aa000002aa000002aa000007bd000a07bd002a05c700a40479 +008b053d000f042f0008055600a40473008b048900a40426008b0514005a +040000230556001804000008069d000a04d1000a071200a40543008b0847 +00a406c6008b05c700600400004805c700600400004804e3002d03aa0025 +0744000a0563000a057900770444005e070b000a053b000a070b000a053b +000a023900bc0735000605aa0004055600a40400008b05a4000a0491000a +05c700a40473008b05c700a40473008b057900770444005e06aa00a405b6 +008b0556fffe0473004e0556fffe0473004e08000000071d004e055600a4 +0473004806390060047300480735000605aa00040514005a040000230443 +001f03c6002b05c700a40479008b05c700a40479008b0639006004730048 +063900600473004805bc005e0400001b051f00080400001b051f00080400 +001b051f00080400001b057900770444005e071000a405bc008b053d0051 +0473004807d100510724004807e2006d06f0004a0582006d0468004a0838 +000a073e000a085b00a4071f008b0639006004ae004b0609002d056b0025 +02aa001d02aa001702aa003f02aa001d02aa000402aaff8c04c1003304c1 +0033028f004c0000fed802fe000004cd0037045cffc904c3fff100000000 +000000280000002800000028000000380000009800000102000002a20000 +0412000005600000070e0000076a000007da0000084c000008f000000976 +000009ea00000a3600000a7200000ae400000b9400000bfe00000cc40000 +0dda00000e8000000f7400001064000010fe0000123a0000132e0000137c +00001402000014b000001520000015d0000016b8000018e400001a1a0000 +1b4600001c6a00001d2600001db800001e3400001f8600002024000020a0 +0000215400002280000022da0000243a000024d8000025fe000026c80000 +28cc00002a1e00002bd200002c4200002ce200002dce00003086000031b8 +000032c60000335e000033bc0000342e00003484000035400000356a0000 +35c40000374c0000385e0000394c00003a4e00003b8a00003c5e00003de8 +00003e9200003ee800003fb2000040d00000411000004228000042da0000 +43ce000044ea0000460400004682000047e8000048ae0000496800004a68 +00004c5400004e0200004f7200005016000050fa0000515a000052380000 +52ec0000534c00005388000054f2000055320000558c000055da0000562c +0000565a0000568a000056bc000056f60000572e000057660000589a0000 +58c8000058f4000059220000596c000059e400005a5000005a9400005b0a +00005b2e00005b5a00005b8600005bb400005c0600005c3800005c660000 +5c9200005cb600005d0800005da200005e380000600e000061620000631a +000063a40000642e000065680000670a0000689c000069f400006a500000 +6a9800006b7400006c6200006df200006eec00006f7c0000704600007112 +000072820000732c00007416000074c2000075120000757c000076060000 +7712000077ba000078a400007a6a00007b8a00007c9400007d0600007d84 +00007e1000007f0000007fda000080ce00008148000081c6000082500000 +8296000082f40000834e0000846c000085f20000864a000086aa00008770 +0000883a000088a200008918000089a400008a3e00008a7a00008ac60000 +8b3a00008c8200008cfe00008d7e00008e7e00008f6a000090300000907a +000090f0000091ac00009390000093e00000942600009466000094b80000 +94fa0000953600009576000096180000965c000096a2000097080000974e +00009796000097f00000983200009868000098d00000994c000099740000 +99fa00009a4a00009ad000009b4600009be800009c5800009ce600009dce +00009e9e00009ee400009f1200009f5600009f7a00009ff80000a0e20000 +a21e0000a25e0000a28c0000a3700000a4840000a4d80000a5ca0000a62e +0000a6fc0000a7dc0000a8700000a9080000a9a80000aa420000aa8a0000 +aab40000aaf00000aca60000ae180000ae5e0000ae8c0000aed40000aefe +0000b0380000b0760000b0860000b0c60000b0f20000b2840000b4400000 +b4860000b4ca0000b4da0000b5c40000b7660000b7aa0000b7d40000b818 +0000b86c0000b91e0000b9ba0000b9d20000b9ea0000ba2c0000ba540000 +ba9e0000bace0000bb180000bb460000bb8a0000bbb80000bbfe0000bc3a +0000bc7a0000bca20000bd7e0000bebc0000bf000000c01c0000c05a0000 +c0980000c0f00000c1240000c1680000c1940000c1ca0000c1ee0000c244 +0000c35c0000c4820000c5ce0000c6ec0000c7ee0000c8be0000c9640000 +ca740000caba0000cb060000cb860000cd5a0000cd8c0000cdb40000cdee +0000ce200000ce820000cff40000d0ee0000d1440000d1780000d1c60000 +d2180000d2d00000d43e0000d47a0000d4be0000d4e20000d5180000d53c +0000d6080000d7760000d7b80000d7dc0000d8a00000d8d20000d91e0000 +d94a0000d98c0000d9b00000db580000dd080000dd4c0000dd900000de72 +0000df6a0000dfe80000e0240000e0c20000e1080000e1860000e1c20000 +e2800000e32e0000e37c0000e44e0000e5e00000e7740000e8860000e95a +0000ea2e0000ea5c0000ea8c0000eb660000ec4c0000ec920000eccc0000 +ed0c0000ed300000ed580000ee460000ee8c0000eeb40000ef500000f03e +0000f07e0000f0a20000f0f20000f1280000f1680000f18c0000f28c0000 +f3bc0000f4000000f4240000f4680000f48c0000f4e80000f6b60000f8b8 +0000f8fa0000f9220000f9680000f9940000f9de0000fa200000fa440000 +fa7a0000faa20000fae60000fb160000fb560000fb7a0000fbe00000fc1e +0000fd800000fe460000fefe0000ffb800010072000101240001018c0001 +02000001023a000102e000010336000103ba0001042c000104b600010512 +00010562000105ae00010624000107560001087c00010942000109d80001 +0a7200010b1000010b8e00010cc000010d8200010ed400010f6e00010ffc +000110fe00011184000112520001131400011396000114a8000115dc0001 +16ae000117b2000118900001190a0001193600011976000119a6000119fe +00011a4a00011b5400011c7800011d9200011e5a00011f3e00011fc40001 +20ec0001224c0001231c0001241c00012568000125780001264c0001272e +000127be0001294600012a3600012b2200012b8c00012bd800012c060001 +2c4000012c9600012cf200012e1600012e5a00012f86000130f00001317c +0001324000013250000133440001343a0001353000013590000135ea0001 +3688000137c200013882000139b400013a1600013ae200013b8600013ce6 +00013e1a00013ede00013f1c000140420001410c000142680001430c0001 +44040001448e0001456000014660000146d20001485c0001496c00014aa6 +00014b5400014c0a00014cc400014da800014e9600014f2600014fec0001 +513c0001528a000153ac0001552c0001562800015700000157740001584e +0001598c00015b1400015c1c00015cda00015d2200015e2a00015eee0001 +600e000160b00001619c0001621e0001633e000164060001648600016658 +000167d20001693e000169e200016a9c00016b5600016c4400016d020001 +6d6400016dfa00016f2e0001702600017120000171740001728a000172b0 +000173c6000173d6000173e60001748000017490000175b8000176900001 +776a0001778e000177cc00017846000178d40001794a0001798000017abc +00017b1200017baa00017c7400017cf800017de400017e2400017e480001 +7e6c00017fce00018070000181f6000182ec000183e600018450000184f6 +000185f20001864a000186b00001871c0001882600018890000188e20001 +892a0001897c000189d600018a4800018aae00018b1200018c7600018d0a +00018dd000018e3a00018ee600018f6600018fda00019078000191760001 +91fc0001929000019320000193fe000194a8000195940001962a000196ae +00019780000198440001990e000199ee00019af200019c3600019d4c0001 +9dc600019ec600019f7a00019fcc0001a0280001a0920001a0ce0001a132 +0001a2100001a2340001a2660001a2a40001a2ca0001a3060001a3dc0001 +a4000001a4220001a4680001a4ac0001a4d00001a4f40001a5400001a568 +0001a58e0001a5ba0001a5de0001a6020001a6340001a6580001a6840001 +a6ac0001a6d40001a6fc0001a7200001a7460001a76a0001a7c20001a810 +0001a8460001a87e0001a8a60001a8dc0001a9000001a9240001a94c0001 +a9740001a99c0001aaa00001aad00001ab800001abe00001ac420001acac +0001ae020001af3c0001b0240001b10e0001b17a0001b1a20001b1fc0001 +b2580001b2e40001b3720001b44a0001b5160001b5a40001b6320001b700 +0001b7c20001b84e0001b91a0001b9c40001ba700001bb660001bc420001 +bd100001bd340001bd5c0001bd840001bdb20001be020001be3e0001be8e +0001bec20001bf160001bf4c0001bf820001bfb60001c0140001c05a0001 +c0800001c0ae0001c0d40001c1020001c1280001c1560001c17c0001c1aa +0001c1e00001c2200001c2440001c2680001c28c0001c2b00001c2f00001 +c3140001c3620001c39a0001c3e80001c41c0001c46e0001c4a20001c4e4 +0001c5140001c5700001c5ae0001c5e40001c61e0001c6400001c6620001 +c6860001c6aa0001c6d20001c6fa0001c7680001c7a00001c81e0001c84e +0001c8c40001c8f00001c9180001c93e0001c9ba0001c9f80001ca3e0001 +ca6a0001caa60001cada0001cb020001cb320001cb6e0001cb940001cbb8 +0001cbdc0001cc000001cc240001cc4c0001cc700001ccae0001ccdc0001 +cd140001cd400001cd680001cd940001cdce0001cdfc0001ce200001ce44 +0001ce680001ce8c0001cec00001ceee0001cf240001cf4e0001d0800001 +d0ec0001d17e0001d2060001d2680001d2940001d2cc0001d3080001d33a +0001d3700001d4440001d5640001d5a00001d5d60001d6ca0001d7180001 +d81c0001d8ee0001d99e0001da5c0001db380001dcb80001dd660001de14 +0001df000001dfd20001e0a60001e0f80001e1c60001e2b20001e40c0001 +e44e0001e4a20001e4ee0001e5240001e56e0001e6080001e6460001e696 +0001e7c60001e8320001e9120001e9440001ea800001eba80001ec560001 +ec820001ee520001eea20001efe00001f0780001f0dc0001f20e0001f2fe +0001f3f00001f5a20001f6ae0001f7020001f75c0001f7b60001f7e80001 +f8820001f8cc0001f9a00001fad00001fb960001fbf40001fc900001fcca +0001fd380001fd720001fdce0001fdfa0001fe4a0001fe820001febc0001 +feea0001ffe40002001c000200c60002010a00020190000201da000202fc +0002034c00020496000204e2000205bc000205fc000207300002076c0002 +07ac000208b2000209cc00020af600020ba800020c8000020d5200020e32 +00020ee00002103a0002109a0002112600021250000212e0000213400002 +14160002147800021540000215e80002164c000216aa0002175c000217ee +0002181a00021868000218d40002193400021a1800021b1e00021b940002 +1d5a00021dce00021e6400021f6a00022052000220940002219e00022328 +0002239400022476000224ba000225c400022734000227a0000228880002 +2a4200022b1600022bba00022d1a00022d5e00022e5200022f8c0002302c +0002310c000231ec00023352000234ec00023640000237b8000239980002 +3a8000023bae00023d4400023f200002413200024338000245a6000247b2 +00024a0400024d2e00024f160002515a0002534a000254da0002566a0002 +57c00002590200025a2000025b9e00025ca400025dae00025ec600025fe2 +0002612000026262000263ac00026504000266340002676a000268ae0002 +6a3800026b8600026c8200026e600002704a0002722e000273bc000275aa +00027716000278f000027a2600027bae00027c6e00027cec00027dfc0002 +7e6a00027efa00028006000280f2000281a400028288000282e60002834e +000284680002853a0002868a000287ee0002896200028a6e00028aee0002 +8c4200028d9800028dd800028ed400029016000290ae0002919000029230 +000293460002947600029514000296760002982c000299c000029b3c0002 +9d2800029e980002a07a0002a23a0002a3c60002a52c0002a69a0002a75c +0002a86a0002a8ca0002a8da0002a9d40002aab80002ac2c0002adec0002 +af440002af9c0002b0ec0002b0fc0002b2900002b4020002b4120002b422 +0002b44e0002b4900002b4e80002b4f80002b5080002b5180002b5280002 +b63c0002b6f00002b7ec0002b7fc0002b80c0002b81c0002b8400002b862 +0002b8a40002b8d00002b9100002b9340002b9440002b9540002b9640002 +b9740002b9840002ba1a0002bac60002bbe60002bd220002be1c0002bede +0002c00e0002c1060002c1a40002c2480002c2580002c3060002c3dc0002 +c4b80002c5a00002c6820002c77a0002c87a0002c93a0002c94a0002ca48 +0002cb340002cc1c0002ccf20002d0fe0002d1440002d18e0002d1be0002 +d1f60002d2260002d26c0002d31c0002d34e0002d3a60002d3e60002d42c +0002d4d40002d5760002d62a0002d78a0002d7d20002d8160002d8da0002 +d9640002d9980002d9ce0002d9fa0002daae0002db560002dca60002dcf4 +0002dd4a0002df5c0002e0b20002e2a40002e3840002e3ae0002e4b00002 +e5760002e6a20002e7b40002e9940002eaca0002ec2c0002edd20002edfa +0002f0340002f1340002f27a0002f4ac0002f5900002f6780002f6f40002 +f7600002f80a0002f8700002f9400002f99c0002f9ae0002f9c00002fa38 +0002fab00002fb380002fbc00002fbf40002fc280002fc700002fd7a0002 +fdac0002fe040002fe3c0002fe820002feaa0002fee00002ff120002ff44 +0002ffa200030008000300420003007e000300c6000301120003014e0003 +018c000301d000030214000302560003028e000302c6000303080003033c +00030390000303c200030402000304480003047a000304be000305020003 +05480003059000030794000307d400030810000308400003089e000308e2 +0003091800030966000309b400030a0600030a5800030aae00030ae20003 +0bca00030c2a00030c7e00030cda00030d3600030d9800030ddc00030e16 +00030e9200030f1000030f4c00030f8800030fe0000310380003107a0003 +10ca0003111e00031160000311b8000312a6000312d80003130800031338 +00031392000313e60003144c00031484000314ba000314f0000315440003 +1592000315e800031632000316820003178e00031884000318ec00031954 +00031984000319be000319fa00031a4400031a7a00031ab000031b1a0003 +1b8400031bbc00031bfc00031c2200031c4800031c7a00031cb000031d0c +00031d9e00031dfe00031e5e00031eb000031f020003200c000320e20003 +21d800032210000322400003228a000322b0000322f40003235200032394 +000323d00003240a000324400003247c000324be000325ae000325e20003 +26240003265a0003268e000326d800032728000328c200032a1800032a58 +00032a9000032adc00032b1800032b5200032d6200032db000032fd60003 +3126000331bc000332b80003330a0003343000033676000339520003398a +000339b600033a3400033ac200033aee00033b5800033c2800033cf60003 +3d0800033dac00033fbe00033fec0003405000034094000341000003417a +000341da00034240000342a00003431600034384000343e80003450a0003 +45f8000346a000034712000347b000034820000348d60003496800034a50 +00034af200034bbe00034c6800034d1800034d9a00034e5200034ef00003 +4f860003500c00035110000352c800035310000353680003539e000353ce +000353f2000354160003545400035492000354d8000355060003553c0003 +557200035598000355c0000355fc00035638000356600003568c000356c8 +00035708000357300003575800035780000357a8000357e4000358200003 +58560003588c000358c4000358e80003591e0003595200035990000359b6 +000359ec00035a1c00035a4200035a6800035aa200035adc00035bc80003 +5ccc00035d0400035d3c00035d7200035da800035dd000035df800035e52 +00035e9400035ebc00035ee400035f2200035f6e00035f9400035fb80003 +60000003604600036082000360c0000360fc000361380003617c000361a2 +000361d8000362060003622c0003625200036288000362b6000362dc0003 +63020003633e0003637a000363b6000363f20003641a000364420003646c +00036496000364be000364e60003650e0003653600036578000365a40003 +65dc0003660a000366420003667000036698000366c60003671200036750 +00036796000367dc0003681200036840000368660003688c000368bc0003 +68e40003690c000369340003697c000369ba000369f000036a3800036a5e +00036a8200036abe00036b0000036b3c00036b7a00036baa00036bda0003 +6c1000036c4600036c8200036cbe00036ce600036d0e00036d3800036d62 +00036da200036dc800036dee00036e1400036e4200036e6800036e8e0003 +6eb400036ee200036f0800036f3a00036f6200036f9000036fb400036fea +0003700e000370340003705800037094000370d00003710c000371540003 +717c000371a40003734200037376000373ae000373e80003741a0003744c +00037484000374bc000375040003754e00037596000375de000376360003 +768e000376e200037738000377a8000378180003784600037874000378a6 +000378d80003790e0003794000037996000379ee00037a5000037ab20003 +7b0a00037b6000037b8e00037bbc00037bee00037c2000037c5800037c90 +00037cce00037d0c00037d6000037db600037e1600037e7600037ed20003 +7f2c00037f9000037ff80003802c0003806000038094000380c8000380fe +0003813400038174000381b40003820400038256000382b6000383160003 +8374000383d40003842c00038488000384b6000384e40003851600038548 +00038580000385b8000386020003864e000386a6000386fe000387500003 +87a4000387d2000388040003883600038868000388a6000388e400038922 +00038960000389ba00038a1a00038a8200038ae600038b1400038b420003 +8b7400038ba600038bde00038c1600038c5000038c8a00038cd400038d1e +00038d8000038de200038e3a00038e9400038f0200038f7000038fa40003 +8fda0003900a0003903e00039072000390a4000390e40003911800039148 +00039176000391a6000391dc0003920a0003923a0003928c000392e00003 +932c00039378000393cc0003942000039484000394ea000395440003959e +000396060003966e000396d20003973c000397b40003982c000398680003 +98a4000398e4000399240003996a000399b0000399fe00039a4c00039ab2 +00039b1a00039b8600039bf200039c5c00039cc400039d3c00039db40003 +9df200039e3000039e7200039eb400039efe00039f4800039f9400039fe0 +0003a0440003a0a80003a11e0003a1940003a1fa0003a2620003a2e00003 +a35e0003a3900003a3ba0003a40a0003a43a0003a48a0003a4b80003a500 +0003a5440003a57a0003a5d80003a62c0003a6500003a6ac0003a7120003 +a76e0003a7ea0003a8940003a8d80003a8fc0003a93c0003a96a0003a9a6 +0003a9fa0003aa500003aaa60003ab040003ab2a0003abdc0003ac9c0003 +ad7c0003adac0003add80003ae160003ae540003ae840003aec00003af08 +0003af3e0003af960003aff80003b0aa0003b1760003b2560003b2840003 +b2aa0003b2e00003b3160003b3440003b3720003b3a00003b3de0003b422 +0003b4580003b4c40003b5240003b57e0003b5fe0003b6860003b6da0003 +b7180003b73e0003b7800003b7ae0003b7ec0003b83e0003b8920003b8ea +0003b93e0003b9700003b9c60003ba220003bab40003bade0003bb080003 +bb700003bb980003bbd60003bc3e0003bccc0003bd600003bd860003bdc2 +0003be4a0003becc0003bf3a0003bfc00003c04c0003c0d80003c1640003 +c1b00003c1fe0003c2340003c2680003c29a0003c3060003c3b20003c3e8 +0003c41e0003c4640003c48e0003c4ea0003c5460003c5840003c5f00003 +c67a0003c6f00003c7540003c77a0003c7b40003c82c0003c8be0003c950 +0003c9b80003ca260003caa80003cad20003cb000003cb480003cbcc0003 +cbf60003cc200003cc7c0003ccbe0003cd680003cda20003cdf20003ce72 +0003cee40003cf580003cf980003d01c0003d0a80003d12e0003d1940003 +d1ce0003d2160003d2520003d2800003d3140003d3960003d43c0003d48a +0003d4da0003d5500003d5bc0003d5fc0003d62e0003d6600003d6980003 +d6d00003d6fc0003d7280003d7540003d7800003d7ac0003d7d80003d80c +0003d8400003d8780003d8b00003d9740003d9c80003daac0003dba60003 +dbb60003dc7a0003dd180003dde60003debc0003dfd00003e0b20003e0c2 +0003e1640003e1fc0003e2ba0003e3a00003e3fe0003e4fa0003e5720003 +e6a00003e79c0003e8580003e8680003e8bc0003e9a00003ea6e0003eac8 +0003ebd20003ec7a0003ed280003ed380003ed480003ee140003eeca0003 +ef960003f06a0003f13c0003f2940003f3980003f3a80003f4440003f4fa +0003f5620003f6120003f6780003f7740003f8240003f8d60003f9980003 +fa4e0003fb200003fc220003fd260003fe060003ff380004002c00040112 +000401d4000402ce0004037200040382000403aa00040428000404380004 +0476000404b4000404f2000405200004054c000405780004059e000405ca +000405f6000406240004065200040680000406ac000406da000407080004 +0736000407640004079a000407d0000408060004083c00040872000408a8 +000408de00040914000409240004095a00040990000409c2000409f40004 +0a2200040a5000040b7400040c9600040cc400040cf200040d2000040d4e +00040e8600040f7600040fa400040fd2000410000004102e000410c20004 +10e80004110e0004113400041162000411900004123e000412d800041306 +000413340004136600041398000413c6000413f400041426000414580004 +1486000414b4000414e6000415180004154600041574000415a6000415d8 +00041606000416340004166600041698000416c6000416f4000417260004 +175800041786000417b4000418aa00041990000419be000419ec00041a66 +00041b9400041cce00041d5800041df000041e1e00041e4c00041e820004 +1eb800041eea00041f1c00041f4a00041f7800041faa00041fdc0004200a +0004203800042090000420ce00042168000421c80004223a000423080004 +231800042420000424e8000425bc000426ec000427c20004289000042962 +00042ad200042ae200042af200042c4e00042d2600042d9200042ea60004 +2eb600042f7c00043086000431f000043260000432e80004339a0004340a +0004341a0004342a000434cc00043562000435b6000436ba000437600004 +3808000438da0004397e00043a2000043aae00043abe00043bcc00043cca +00043d9400043df000043e4c00043ecc00043f2e00043fb20004400a0004 +40640004411c000441d80004435400044364000444060004449a000445b6 +0004462e000446a4000447520004483c000448d00004493c00044a1c0004 +4acc00044b5400044bec00044cd600044dd400044f660004500c000450b8 +0004516200045210000453180004532800045406000454fe0004550e0004 +55a000045642000456800004575000045810000458ca000459bc00045b28 +00045c8e00045dbc00045e92000460060004610c00046220000462920004 +641c000464860004656c0004666000046706000467380004676a0004677a +000468500004698400046a8400046b5c00046c6400046d4e00046dae0004 +6e0a00046f1800046f94000470ba000471ce0004729200047356000473f4 +00047482000475180004767a0004768a000477d6000478e600047a2a0004 +7b2000047bee00047c9e00047d1e00047e1000047efc00047f0c00047f1c +00047f2c00047fb2000480420004819e000482f2000483a20004843c0004 +85560004865400048712000487e40004890600048a3e00048b1400048c12 +00048d2c00048e7800049016000491a2000492540004930a0004944c0004 +957800049610000496b6000496e80004971a000498e200049a8c00049bb8 +00049cdc00049e660004a0120004a0400004a06e0004a12e0004a1ca0004 +a2cc0004a32c0004a39e0004a3da0004a4160004a5e00004a7f00004a8c8 +0004a9aa0004aa5c0004aae80004abec0004acfe0004adca0004ae920004 +afd20004b1000004b1c20004b2820004b32a0004b3dc0004b4440004b4ac +0004b5880004b65c0004b79c0004b8cc0004b9ee0004bae40004bb3c0004 +bb960004bc020004bc720004bcf60004bd7c0004be8c0004bf800004c0d2 +0004c20a0004c21a0004c2480004c2760004c35e0004c4420004c4c80004 +c55e0004c5e00004c65e0004c6de0004c75e0004c7e00004c8620004c936 +0004ca2e0004ca5c0004ca8a0004cabc0004caee0004cafe0004cb0e0004 +cb3c0004cb6a0004cb9c0004cbce0004cc000004cc320004cc640004cc96 +0004cd620004cd720004cda00004cdce0004ce000004ce320004ce640004 +ce960004cec80004cefa0004cf2c0004cf5e0004cf8c0004cfba0004cfec +0004d01e0004d0500004d0800004d0b20004d0e40004d16a0004d1d80004 +d26c0004d27c0004d3760004d4800004d5800004d66c0004d7360004d804 +0004d8b20004d9700004da220004dac40004dba80004dc600004dcea0004 +dd700004ddc60004de560004deb80004def40004df7e0004dfde0004e012 +0004e0460004e0860004e0ee0004e11a0004e19e0004e1e00004e2220001 +000008d1008c0010004c000700020010002f005500000469ffff00030001 +b15440b80135b31c22392f410c0135003f0135004f0135008f0135009f01 +3500050040012eb31c1f3930411201280001004001280080012800900128 +00a0012800b00128000500ef0126000100400125b31b1f3940410a012400 +01002f01050001004f010400010040010340aa090d392f652f662f672f68 +2f692f6a2f742f752f7b2f7c2fd12fd20c20fc30fc40fcd0fc04f1f2197f +f2018ff2aff2e0f203d1d216171c7b7c161b7b7c19307c407c507c607c70 +7c05767716171c6d7016171c6c6f16171c6b6e161b0f6b7f6b8f6e9f6eaf +6e056b6e7f721a747514151c676a14151ca96ab96ae96af96a0466691415 +1cc669016568141b0f651f6502af68bf68ef65ff6504656885711a197316 +7a431921794319217f413201340001007f01330080013300900133000300 +6f0132007f0132008f01320003007001210001002f0121003f0121004f01 +21005f0121000400a0011e00b0011e00c0011e00030020012d0030012d00 +60012d0070012d0080012d0090012d00060040010fb40b1f39092f411f01 +0e005f010e009f010e00af010e00bf010e00050090010e00bf010e00cf01 +0e00df010e00ef010e00050020010e006f010e00b0010e00d0010e00e001 +0eb205d10f4123010e003f010e00bf010e00cf010e0004000f010e005f01 +0e006f010e00a0010e00bf010e00cf010e00df010e0007003f010e004f01 +0e007f010e00af010e00ef010e00ff010eb2069f7f4123010e00af010e00 +e0010e00ff010e0004001f010e003f010e00af010e00df010e00ef010e00 +05000f010e001f010e002f010e007f010e008f010e00c0010e00df010e00 +ef010eb2086d9f411b010e00cf010e00ef010e00ff010e0004000f010e00 +ef010e0002000f010e002f010e003f010e004f010e00c0010e00df010e00 +ef010eb2073a70bd010e00df010e00020040010eb32b33395f411b010e00 +70010e008f010e009f010e00cf010e00df010e0006000f010e001f010e00 +3f010e0080010e00bf010e00ef010e00060040010eb3091b3970bb013600 +0100200108b30d113940b80102b20b1439b9ffc00107b31b22392f411801 +0c004f010c0002002f010c0001008f010b0001002f0107004f010700c001 +0700d001070004004f010700010040010040640b103940fe0b1139e0f601 +e0f60114f424f40274f40140df60df0220d830d840d80366c176c10299be +0120b230b240b20360b070b0029b93002b9a92002b9991002b9493002b92 +93002b9193062b9395032b9885042b9796042b9695032b9995a995026f41 +0f0131007f0131008f01310003013001160032001f011901160015001f01 +16b285032bb9ffe0012fb30b143970410d01170001002f0117003f011700 +4f0117005f0117000401130114b22a1fa0bc011400b0011400c001144016 +0370fbf0fb022ffb6ffb7ffb0340fa50fa60faf0fa04b8ffc040fffa1115 +3950ec70ec0250ec70ec0240ec01bfeb0170ea0130ea0170e9015fe970e9 +f0e903a0e9015fe870e802efe8017fe8bfe8efe803f0e701f0e7012fe780 +e7a0e7f0e70450e6f0e60250e660e670e6c0e60450e50170e50180e4e0e4 +f0e40340dca0dc02309050900220a04fa05fa09fa0afa0efa006e0f501e0 +f501f3851e1f2fe20140dd019fd5afd5bfd5030fd340d302e0d0010fc470 +c4022fc43fc44fc45fc49fc4afc4efc4ffc40899bd99bf02dad9042bd685 +022bcccd062bcd85022bc9c8062bc885022b8d8b042b8c8b191f8b83c81f +897d641f817f082b7d7f082b7f85072baf85042b8885012b8785002b8485 +042b8385002b2ffd4ffd027f40abef012df03bf04ff069f07ff0051b3715 +1836151535151234150f33150c3215093115063015032f15002e1526270f +28270f26002a1f0f2a2f2a3f2a032f24bf24022a2b0f2c2b0f22230e2423 +0f1e1f0e201f0f2005010f10110c0c0d0e0c090a0b0c0607080c0304050c +0001020c0003181f500f700f027f0f800fbf0f030f031f032f034f037f03 +bf03ef030704012c1f1b011d0d18071a0d1510170d1204140d701b01501b +701bf01b03b8ffc0400b1b131839701b801b02503301b0124b004b5442b0 +13014b004b5342b0332b4bb8032052b0322b4bb009505b58b101018e59b0 +332bb00288b8010054b00488b8020054b012435a5b58b80119b101018e85 +1bb900040100b04b60858d592b1db0644b5358b0801d59b0324b5358b090 +1d5900732b74742b2b2b2b2b7373742b2b2b2b2b2b2b732b2b2b2b2b2b73 +732bb1282645b02a4561b02c4560442b2b2b2b2b2b2b2b2b2b2b2b73b0ef +45b0f0456168b0f04560b0ef23447373012b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b73737473737373732b74737374737373747374737474737374 +7374747374737374742b747374742b73742b2b2b2b7300732b2b2b2b2b2b +2b2b2b2b737373737373737473742b2b73737373732b2b2b742b73742b75 +5e7374755e7374755e7374755e7374755e2b73747374737373012b2bb018 +b0314b53422b2b73742b732b732b2b2b732b2b2b2b732b2b2b73742b7373 +2b7373732b7373742b732bb109322b4bb05052424bb03c524bb00f505bb0 +1a23424bb0c8524bb036505bb00c23422b00000000> +[16105 16169 15785 16013 16241 16333 15745 15601 15869 15477 16269 15937 16109 +16361 16209 16209 16113 16321 16289 14899 ] AllocGlyphStorage +]def +108 44 +PrepFor2015 +AddFontInfoBegin +AddFontInfo +/OrigFontType /TrueType def +/OrigFontName <4D6963726F736F66742053616E73205365726966> def +/OrigFontStyle () def +/FSType 8 def +AddFontInfoEnd +[16#2c 16#6e18af9b ] AddXUID +Type42DictEnd +1 9274 49 <000100a40000052305ba0009007140180702010281060714060607050304 +01077f000e0d0d063b00b8fffa40090b0b063b0006027f04b8fff8b40d0d +063b04b8fff8401c0b0b063b04400b006e020a046b02770b01780b01480b +e80bf80b03005f5d715d2b2b011a18102b2b4ded32102b2bed32002f3f31 +30872e2b877dc4212301112311330111330523c7fd00b8c60300b90485fb +7b05bafb7b048500>/TTE1CD9F20t00 AddT42Char +1 11218 55 <0001002d000004b605ba00070049403101059106030300a00205a0027f03 +040d0d063b03400809037f3030e9090148099809b809f809040709170977 +09d70904005f5d5d5d2b011a18102b4dede610e6002f3fed323130012111 +231121352104b6fe1bc3fe1f0489050cfaf4050cae00>/TTE1CD9F20t00 AddT42Char +1 8070 43 <000100a40000052305ba000b006f4019039108400605089118300a060301 +0509017f000e0d0d063b00b8fffa40090b0b063b0008047f05b8fff8b40d +0d063b05b8fff840170b0b063b05400d006e020c056b02570d01480d880d +02005f5d712b2b011a18102b2b4ded32102b2bed32002f333f332b001a18 +104ded31302123112111231133112111330523c3fd06c2c202fac302b2fd +4e05bafda6025a00>/TTE1CD9F20t00 AddT42Char +1 6982 38 <00010060ffe7055e05d3001900c140341a182a183a18030511010a0f0115 +080103470901080901090d92060407178717020b00171392001307101710 +020d020a09167d17b8fff4b40d0d063b17b8fff040190b0b063b17051715 +17020f17400b1036107d030c0d0d063b03b8ffd6400c0b0b063b03400703 +01100303b8ffe2401d090b361b176f021a036c02b81b01571b01271b371b +571b771ba71b05005f5d715d2b2b2b015f5e5d1a18102b2b4ded2b5e5d10 +2b2bed39395f5e5d003fedcd5f5e5d3fedcd5d5d31305f5d5d5d5d052000 +1110002132001723262623220011100033323637330600030afec9fe8d01 +730137ef015015c80cd9a5dffefc0102ddacd40ec815feba190199015d01 +5d0199fefed38ba4fecdfee3fee4fecca89ceaff0000>/TTE1CD9F20t00 AddT42Char +1 7274 39 <000200a40000056005ba0006000f007840180a0401050201090f91000307 +9106080b180b020d020b7d03b8fffcb40d0d063b03b8ffeab70b0b063b03 +077f06b8fff6b40d0d063b06b8fff8401c0b0b063b064011036f0210066b +02571101a7110118114811881103005f5d5d712b2b011a18102b2b4ded10 +2b2bed5f5e5d002fed3fed31305e5d5d1321201110212137212012111002 +2121a401d102ebfd15fe2fc2010b013fe8e7fec0fef505bafd2bfd1bae01 +29010e0107012000>/TTE1CD9F20t00 AddT42Char +1 10444 53 <000200a40000056a05ba0014001c00f14017470c570c670c03024c035c03 +020302011c018100141400b8fff840320b0b063b0000148a14012c143c14 +0208141814020902050e150e250e350e0403197d070e170e270e370e040e +040d0d063b0eb8fff4401a0b0b063b0e01020e1112140600080018007800 +030d0015077f08b8fff8b40d0d063b08b8fff8402f0b0b063b08401e006f +021d086b028711010212110915919706010606081c9209030008481e0177 +1e01a71eb71e02005f5d715d002f333fed12392f5ded1239395f5d302b2b +011a18102b2b4ded325f5e5d1117332f2b2b5ded5f5d5f5e5d5d5d872e2b +2b0e4b52587d1b7a5910c431005f5d5f5d21230326262321112311213216 +16151406071516170121323635342121056ad28a25ac70fe99c20289aad8 +88b0999950fc8f01b1b5a3fec6fe3101876884fd8d05ba42d48598cc1f04 +31d80192728cfa00>/TTE1CD9F20t00 AddT42Char +1 2538 16 <0001004201b80268026d0003003140208f0101012f024f025f0203025000 +6000027001012f01010005017005012005015d712f10c65d5d5d002f5dcd +5d3130012135210268fdda022601b8b5>/TTE1CD9F20t00 AddT42Char +1 7462 40 <000100a4000004e905ba000b0062401f0991064002010691183005910203 +0a910107081708020a00080400060a7f01b8fffab40d0d063b01b8fffe40 +120b0b063b01400d006f020c016b02e80d01005f5d2b2b011a18102b2b4d +ed3210c4c45f5e5d002fed3fed2b001a18104ded31302121112115211121 +1521112104e9fbbb0423fc9f0329fcd7038305baaefe40aefe10>/TTE1CD9F20t00 AddT42Char +1 8922 48 <000100a40000060605ba000c0125b90003fff4400a0d0d063b0b48091036 +09b8ffb840960910368c0b9c0b0283099309020268040101480458047804 +0302670301014703570377030302180a0101050a150a250a0302880a980a +a80a0300bc0adc0a0203c80a01011e052e0502037705a705b705c705d705 +05018505950502001e022e0202037702a702b702c702d702050185029502 +0205020a030479040108041804280438040409000b08030104070b027f00 +0a0d0d063b00b8fff640090b0b063b0009057f07b8fffc40200b0b063b07 +400e006e020d076b02770e01570e970e02080e180e380ee80e04005f5d5d +712b2b011a18102b4ded32102b2bed32002f33333f335f5e5d5d12173931 +305d5f5d5f715f5d5f5d5f715f5d5f5d5f5d5f715f5d015f5d5f5d5f5d5f +5d5f5d5d2b2b2b212311012301112311210101210606b8fe5eaefe5eb801 +23018d018f012304dffb2104dffb2105bafb3a04c600>/TTE1CD9F20t00 AddT42Char +1 9726 51 <000200a4000004fc05ba000b0015007d400d0c9109090b159100030b107d +05b8ffeeb40d0d063b05b8ffda40190b0b063b053705010205051505020d +0305400910360c0a7f0bb8fff8b40d0d063b0bb8fffc40170b0b063b0b40 +17056f02160b6b02e817017717a71702005f5d5d2b2b011a18102b2b4ded +322b5f5e5d5f5d102b2bed002f3fed12392fed3130132132161615140421 +21112313213236353426262321a40223b4f38efee6fef5fe8fc2c20173bb +9f58877ffe9105ba43df8adee6fdb602f88c84588824>/TTE1CD9F20t00 AddT42Char +1 8832 47 <000100a40000042f05ba0005003b400f020304910100400f18360007047f +01b8fffc40110b0b063b014006016b02a70701880701005f5d5d2b011a18 +102b4ded10c62b002fed3f3130212111331121042ffc75c202c905bafaf4 +>/TTE1CD9F20t00 AddT42Char +1 6372 36 <0002fffe0000055805ba0002000a00fd402ea809b8090257020103000504 +0401020607070101041c01020481030a1403030a01071c01000781080914 +08080908b8ffea40740919360316091936980aa80a02027a0a0103370a47 +0a570a670a0401070a170a270a03029809b80902037709013a094a095a09 +6a090418092809880903020a09010a0306934007021702020b0002400b0b +063b020203080903080c0377020b087602370c670cf70c03580c780c0208 +0cb80c02005f5d715d2b2b00182f3f1239392f2b5f5e5d1a4ded3130015f +5e5d5f5d5d5d5f5d5f5d5f5d5f5d5f5d2b2b872e2b084b52587d1b7a5910 +c487052e182b084b52587d1b7a5910c40705103c3c07103c3c015f5d5d01 +01030123032103230133039afefef603b6dbaafd9aa2cd0233d1025802a8 +fd58fda801befe4205ba>/TTE1CD9F20t00 AddT42Char +1 0 0 <0002003200000226060000030007000033112111252111213201f4fe7801 +1cfee40600fa006c0528>/TTE1CD9F20t00 AddT42Char +/TTE1CD9F20t00 findfont /CharStrings get begin +/N 49 def +/T 55 def +/H 43 def +/C 38 def +/D 39 def +/R 53 def +/hyphen 16 def +/E 40 def +/M 48 def +/P 51 def +/L 47 def +/A 36 def +/.notdef 0 def +end +/TTE1CD9F20t00 findfont /Encoding get +dup 1 /N put +dup 2 /T put +dup 3 /H put +dup 4 /C put +dup 5 /D put +dup 6 /R put +dup 7 /hyphen put +dup 8 /E put +dup 9 /M put +dup 10 /P put +dup 11 /L put +dup 12 /A put +pop +Pscript_WinNT_Incr begin +%%BeginResource: file Pscript_Text 5.0 0 +/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d +/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^ +length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets +{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{& +/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get} +if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{ +{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get +StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $ +! ! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @ length array copy +put pd_CoverFCRange}if}{!}? 2 ^ ~ definefont fM 5 4 -1 $ put fM 4 0 put fM +makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M currentpoint snap M 0 - 0 +Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d/ySP null d/sW null d/sSU{N +/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N/sW ~ d/ySP ~ d/xSP ~ d}b/sT +{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix astore concat 0 0 M}b/eR/; , d +/AddOrigFP{{&/FontInfo known{&/FontInfo get length 6 add}{6}? dict ` +/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d/OrigFontStyle ~ d +/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS{makefont +Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2 copy ~ sub 1 +add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for & E +/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}b/mF42{15 dict ` @ 4 1 $ +FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254 add 255 +idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for/FDepVector +Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1 Encoding +length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName length 2 +add string}{FontName length 3 add string}?}? @ 0 FontName @ length string cvs +putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~ putinterval cvn 1 ^ +256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1 $ put}for & @ E +/FontName get ~ definefont ! ! ! mF}b/mF_OTF_V{~ ! ~ ! 4 -1 $ ! findfont 2 ^ ~ +definefont fM @ @ 4 6 -1 $ neg put 5 0 put 90 matrix R matrix concatmatrix +makefont Pscript_Windows_Font 3 1 $ put}b/mF_TTF_V{3{~ !}repeat 3 -1 $ ! +findfont 1 ^ ~ definefont Pscript_Windows_Font 3 1 $ put}b/UmF{L2? +{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName +get undefinefont}forall undefinefont}b +%%EndResource +end reinitialize +F /F0 0 /0 F /TTE1CD9F20t00 mF +/F0S47YFFFFFFBB F0 [71.031 0 0 -68.75 0 0 ] mFS +F0S47YFFFFFFBB Ji +3125 894 M <010203040506070208090A0B0C0208>S +3125 800 M <010203070208090A0B0C0208>S +3125 706 M <080B02070208090A0B0C0208>S +: 3125 550 594 78 rc 317 VM? +1 7608 41 <000100a40000048105ba0009004f40110591020207019108030704040002 +067f07b8fffe401c0d0d063b074000400b16360b006f020a076b02e80b01 +270b570b02005f5d5d2b2b2b011a18102b4ded3212392f002f3fed12392f +ed3130012111211521112311210481fce502b1fd4fc203dd050cfe3aaefd +6805ba00>/TTE1CD9F20t00 AddT42Char +/TTE1CD9F20t00 findfont /CharStrings get begin +/F 41 def +end +/TTE1CD9F20t00 findfont /Encoding get +dup 13 /F put +pop +3125 613 M <0C06080D070208090A0B0C0208>S +; N 3625 1056 M 3788 1056 I K +N 3788 1056 M 3713 1075 I 3713 1038 I C + O 951 VM? +1 10782 54 <0001005cffe704ec05d300230140b9001dfff4b40b0b063b1cb8fff44076 +0b0b063b5a220103681f0102571f0100071f0101351e451e0203781d0102 +131d231d531d0303381a481a020228173817481703007814010255140155 +100103680e780e02780d0101080d010a5a0c01580b010225093509020317 +05270537050300670201024a0201030a0f1b21040068150115189112b8ff +fc40150d0d063b120407034703570367038703050b000307b8fff040200d +0d063b07910013167f150c0b0b063b151b7f0f0c0b0b063b0f150f030a7f +21b8ffe0b40b0b063b21b8fff4401a0d0d063b21047f034025216f022403 +6c02b825e82502a72501005f5d5d2b2b011a18104ded102b2bed1239392f +2bed2f2bed003fed2bc45f5e5d3f2bedc45d12173931305f5d5f5d5f5d5f +5d5f5d5d5e5d5f5d5d5f5d5d5f5d5f5d5f5d5f5d5f5d5f5d5f5d5f5d5f5d +5f5d2b2b0520002733161633323635342624263534243332041723022122 +0615141604161615140402cdfecafecd08bb0ff3aca3c7cefe09db011dec +f8013009bd1dfeb1a2b28f0187e6a4fed3190116daa49d8673796e6bbe9e +b2e4e6d2010a7a655c5c5654b195bdfa>/TTE1CD9F20t00 AddT42Char +1 8228 44 <000100bc0000017f05ba00030063400c020301007f01040d0d063b01b8ff +fc400d0b0b063b01400405017f213005b8ffc0402a232836070517053705 +6705770587050647055705670587059705a705b705c705f7050998050178 +0501005f5d715d712b2b011a18102b2b4ded002f3f313021231133017fc3 +c305ba00>/TTE1CD9F20t00 AddT42Char +1 7732 42 <00010060ffe705b605d3001d00e640521c100b0b063b2a1d3a1d7a1d0303 +671401022511012a0f010388080102350801039801010217911818002809 +01090d920604139200131a0a7d090c0d0d063b09100b0b063b0908184818 +020900181c167f1ab8ffd6401b0b0b063b1a351a0103371a01000710010d +02107d030c0d0d063b03b8ffd6400f0b0b063b03402703010503010e0303 +b8ffe24018090b361f1a6f021e036c02781f01271fa71fb71ff71f04005f +5d5d2b2b2b015f5e5d5d1a18102b2b4ded5f5e5d5f5d5f5d102bed32c45f +5e5dd42b2bed002f3fed3fedcd5d12392fed31305f5d5f5d5f5d5f5d5d5f +5d5f5d2b0520001110002120041723262623220011100033203735213521 +112327060325fec4fe770184013b0109015f15c90ce8bee3feeb0118e201 +3d9afe7d023f89339519019e01580159019dffd68ea1fecafee6fee7fec9 +d1dfaffd149ab300>/TTE1CD9F20t00 AddT42Char +/TTE1CD9F20t00 findfont /CharStrings get begin +/S 54 def +/I 44 def +/G 42 def +end +/TTE1CD9F20t00 findfont /Encoding get +dup 14 /S put +dup 15 /I put +dup 16 /G put +pop +3800 1081 M <0E02060F0110070208090A0B0C0208>S +N 2744 1338 M 2906 1056 I K +N 2906 1056 M 2888 1131 I 2850 1113 I C + O N 2744 1338 M 2906 1338 I K +N 2906 1338 M 2831 1356 I 2831 1319 I C + O 2919 1363 M <0B0F0E02070208090A0B0C0208>S +N 2606 1056 M 2906 1056 I K +N 2906 1056 M 2831 1075 I 2831 1038 I C + O 635 VM? +1 11490 57 <0001000c0000054805ba000600c0b90003ffea405d091936001609193678 +019801c80103023501450155016501040307011701270167010477029702 +c70203023a024a025a026a0204030802180228026802040a020303020800 +700207036d0237086708f7080358087808020808b80802005f5d715d2b2b +00182f3f3130015f5e5d5f5d5f5d5d5f5d5f5d2b2bb106024354581b401a +05061c0504068100011400000105041c05060481030214030302872e4d2b +084b52587d1b7a5910c487052e182b084b52587d1b7a5910c45901012301 +3301010548fdc6c8fdc6cf01cf01cf05bafa4605bafb1704e900>/TTE1CD9F20t00 AddT42Char +1 9432 50 <00020060ffe705db05d3000b001700bdb10602435458400a129200040c92 +06130f03b8ffeeb40d0d063b03b8ffe040100b0b063b0303191815090c0d +0d063b09b8ffd6b70b0b063b090919181112392f2b2bcd1112392f2b2bcd +003fed3fed31301b404a12920a001a002a000300040c9205061506250603 +0906130f7d03157d09406803010a031a033a034a03046709010509150935 +094509040a0319036f0218096c02e81901571901271901005f5d715d2b2b +015f5e5d5d5d5d1a18104ded10ed003f5e5ded3f5ded3130590120001110 +00212000111000013200111000232200111000031f01340188fe78feccfe +cbfe76018a0133dc0119fee8d9ddfee5011a05d3fe60feaafeaafe6001a1 +0155015601a0faba0138011801180138fec8fee8fee9fec7>/TTE1CD9F20t00 AddT42Char +/TTE1CD9F20t00 findfont /CharStrings get begin +/V 57 def +/O 50 def +end +/TTE1CD9F20t00 findfont /Encoding get +dup 17 /V put +dup 18 /O put +pop +2919 1081 M <110804021206070208090A0B0C0208>S +N 3617 1058 M 3617 1047 3607 1037 3596 1037 -c 3584 1037 3574 1047 3574 1058 -c 3574 1069 3584 1079 3596 1079 -c 3607 1079 3617 1069 3617 1058 -c C + O N 1769 1338 M 1931 1619 I K +N 1931 1619 M 1875 1563 I 1913 1544 I C + O N 1769 1338 M 1931 1525 I K +N 1931 1525 M 1869 1481 I 1894 1456 I C + O N 1769 1338 M 1931 1431 I K +N 1931 1431 M 1856 1413 I 1875 1375 I C + O N 1769 1338 M 1931 1338 I K +N 1931 1338 M 1856 1356 I 1856 1319 I C + O N 1769 1338 M 1931 1244 I K +N 1931 1244 M 1875 1300 I 1856 1263 I C + O N 1769 1338 M 1931 1150 I K +N 1931 1150 M 1894 1219 I 1869 1194 I C + O N 1769 1338 M 1931 1056 I K +N 1931 1056 M 1913 1131 I 1875 1113 I C + O 635 VM? +1 12728 60 <0001000a0000054c05ba000800dc4018010704670401034804580402000a +041a04020b0200040305b8ffe8b60a0f3605030305b8ffe1400c091b3600 +1f091b3607017f04b8fff8403b0b0b063b04400500047f30300a00700209 +056d02070a170a970ab70ad70af70a06070a370a670a870aa70a05480a68 +0a780a03c80ad80ae80a03005f5d715d712b2b2b011a18102b4ded392b2b +002f3f2b1239395f5e5d5f5d5f5d1133333130b106024354581b401a0708 +19070608810001140000010706190708068105041405050487052e2b084b +52587d1b7a5910c487052e182b084b52587d1b7a5910c459010111231101 +330101054cfdc0c2fdc0ec01b601b405bafcb3fd93026d034dfd5d02a300 +>/TTE1CD9F20t00 AddT42Char +1 6682 37 <000300a4000004ec05ba000d0016001e00c24043380d480d02080b010708 +0111020b1e910e4005040e91183016910503179104270001081a181a020d +020b04127f0c091c09020f0309180d0d063b090c0b0b063b090904b8fffa +b40d0d063b04b8fffcb70b0b063b041a7d00b8fff4b40d0d063b00b8ffea +b60b0b063b000e17b8fffc40190d0d063b177f044020006f021f046b02a7 +20018820e82002005f5d5d2b2b011a18104ded2b32102b2bed122b2b392f +2b2b5f5e5ded12395f5e5d5d002fed3fed2b001a18104ded3931305f5e5d +5d5d01140421211121320415140716160121323635342623211121203534 +26232104ecfee8fef5fddb020aea010cd38e8dfc7a0146a19894b7fecc01 +61015ca1d4feb801aacedc05bac8aed46624c1012f67786c6dfba2fc8379 +>/TTE1CD9F20t00 AddT42Char +/TTE1CD9F20t00 findfont /CharStrings get begin +/Y 60 def +/B 37 def +end +/TTE1CD9F20t00 findfont /Encoding get +dup 19 /Y put +dup 20 /B put +pop +1944 1644 M <0E130914120B070208090A0B0C0208>S +635 VM? +1 11330 56 <000100a4ffe7052305ba00130059402077120103070a010b0800010c020e +05030a9100130e7f0f0e0d0d063b0f067f05b8fff640150d0d063b054015 +0f6e0214056b02a71501481501005f5d5d2b2b011a18102b4ded102bed00 +3fed3f335f5e5d5e5d31305f5d0522260235113311101633323611113311 +10060402e3fffd43c2c2bbbbc2c37fff0019c6010cb10350fcb3fedfb6b6 +0121034dfcb0fef6fc7d>/TTE1CD9F20t00 AddT42Char +1 8352 45 <00010037ffe7035c05ba000f007c401f550a01030e0308075807020b0007 +0a914803010203130e7f0f0e0d0d063b0fb8fff0401d0b0b063b0f087f40 +6707010807180728074807040d0007160d0d063b07b8ffe840120b0b063b +07110f6e02b811012711a71102005f5d5d2b01182f2b2b5f5e5d5d1a4ded +102b2bed003f5f5dedc45f5e5d3f5f5d3130011006232226353533103332 +36351133035cd0cbb6d4c3c76970c201d5fef3e1deb627fef476bf03ef00 +>/TTE1CD9F20t00 AddT42Char +/TTE1CD9F20t00 findfont /CharStrings get begin +/U 56 def +/J 45 def +end +/TTE1CD9F20t00 findfont /Encoding get +dup 21 /U put +dup 22 /J put +pop +1944 1550 M <0E020615040215060807121416080402070208090A0B0C0208>S +1944 1456 M <0E020C01050C060507121416080402070208090A0B0C0208>S +317 VM? +1 9928 52 <00020060ff8b05f405d3000f001f018c400d1d200b0b063b10200b0b063b +1db8ffe0b40b0b063b10b8ffca40180b0b063b611e711e811e0303070017 +002700030088020111b8ffc040490f13368a1e01021a1e6a1e7a1e030137 +1167110202271101001010110f000f0e001f1d1d1c020203011e0101001f +001f811e01141e1f1e1e011592020d0f03040a0a1a0a2a0a03030ab8ffe8 +404c0b0b063b0a041e0001181f281f681f781f041f1b9217016701770103 +003a014a015a01030105041504250403090304180b0b063b0413381e481e +020000101b1d1e04121802040f0307127d0db8ffeeb40d0d063b0db8ffd6 +400e0b0b063b0d187d070c0d0d063b07b8ffd640320b0b063b0740680d01 +0a0d1a0d3a0d4a0d046707010507150735074507040a03210d6f0220076c +02e82101572101272101005f5d715d2b2b015f5e5d5d5d5d1a18102b2b4d +ed102b2bed12173911121739c65f5d003f2b5f5e5dc65d5f5dfdc45d1139 +393f2b5f5d121739ed313087082e2b87087dc407083c083c0708103c083c +005f5d5f5d5f5d5f5d2b015d5f5d5f5d002b2b012b2b2507270623200011 +10002120001110072736111000232200111000333237273705f473f2a3cd +fecbfe76018a013501340188be9287fee8d9ddfee5011ada746992731489 +bf6301a10155015601a0fe60feaafeb4d573a0010e01180138fec8fee8fe +e9fec7317389>/TTE1CD9F20t00 AddT42Char +/TTE1CD9F20t00 findfont /CharStrings get begin +/Q 52 def +end +/TTE1CD9F20t00 findfont /Encoding get +dup 23 /Q put +pop +1944 1363 M <0E08171508010408070208090A0B0C0208>S +N 2736 1340 M 2736 1328 2726 1318 2715 1318 -c 2703 1318 2693 1328 2693 1340 -c 2693 1351 2703 1361 2715 1361 -c 2726 1361 2736 1351 2736 1340 -c C + O 1944 1269 M <011509140806070208090A0B0C0208>S +1944 1175 M <010F0B070208090A0B0C0208>S +1944 1081 M <0C06060C13070208090A0B0C0208>S +N 2598 1058 M 2598 1047 2588 1037 2577 1037 -c 2565 1037 2555 1047 2555 1058 -c 2555 1069 2565 1079 2577 1079 -c 2588 1079 2598 1069 2598 1058 -c C + O N 2025 844 M 2188 963 I K +N 2188 963 M 2119 931 I 2138 900 I C + O N 2025 844 M 2188 725 I K +N 2188 725 M 2138 788 I 2119 756 I C + O 2200 988 M <0E15140E0817070208090A0B0C0208>S +2200 750 M <080B0809080102070208090A0B0C0208>S +N 2942 727 M 2942 715 2932 705 2921 705 -c 2909 705 2899 715 2899 727 -c 2899 738 2909 748 2921 748 -c 2932 748 2942 738 2942 727 -c C + O N 988 1088 M 1150 1338 I K +N 1150 1338 M 1094 1288 I 1125 1263 I C + O N 988 1088 M 1150 844 I K +N 1150 844 M 1125 919 I 1094 894 I C + O 1163 1363 M <02130A08070208090A0B0C0208>S +N 1761 1340 M 1761 1328 1751 1318 1740 1318 -c 1728 1318 1718 1328 1718 1340 -c 1718 1351 1728 1361 1740 1361 -c 1751 1361 1761 1351 1761 1340 -c C + O 317 VM? +1 12422 59 <0001000a0000054c05ba000b00f6406c080b380b680b880b980b05070537 +05670597050409020504050203020106010809080b0a0b0007000201020b +000b03030a050605080708040409070106018100071400000709030a0381 +040914040409070627066706770604080428046804780404010603040a40 +13163606b8ffc040381216360a0a2a0a020a002a00020506250602050425 +04020b030a060a0600040d0070020c046d02e90d01580d01a80db80df80d +03470d01005f5d5d715d2b2b0111123939182f2f5f5e5d5d5d5d2b2b002f +3f5f5d5d313087052e4d2b877dc4872e182b877dc4871008c008c0871008 +c008c0871008c008c0871008c008c0015f5e5d5d21230901230901330901 +3301054ceefe4efe4cee0233fe05ed017b017dedfe03026dfd93030402b6 +fde2021efd4a>/TTE1CD9F20t00 AddT42Char +/TTE1CD9F20t00 findfont /CharStrings get begin +/X 59 def +end +/TTE1CD9F20t00 findfont /Encoding get +dup 24 /X put +pop +1163 869 M <08180A06080E0E0F1201070208090A0B0C0208>S +N 2017 846 M 2017 834 2007 824 1996 824 -c 1984 824 1974 834 1974 846 -c 1974 857 1984 867 1996 867 -c 2007 867 2017 857 2017 846 -c C + O 575 1113 M <0208090A0B0C0208>S +N 979 1090 M 979 1078 970 1068 958 1068 -c 947 1068 937 1078 937 1090 -c 937 1101 947 1111 958 1111 -c 970 1111 979 1101 979 1090 -c C + O LH +(%%[Page: 1]%%) = +%%PageTrailer + +%%Trailer +%%DocumentNeededResources: +%%DocumentSuppliedResources: +%%+ procset Pscript_WinNT_ErrorHandler 5.0 0 +%%+ procset Pscript_FatalError 5.0 0 +%%+ procset Pscript_Win_Basic 5.0 0 +%%+ procset Pscript_Win_Utils_L2 5.0 0 +%%+ procset Pscript_Win_GdiObject 5.0 0 +%%+ procset Pscript_Win_GdiObject_L3 5.0 0 +%%+ procset Pscript_T42Hdr 5.0 0 +%%+ procset Pscript_Text 5.0 0 +Pscript_WinNT_Incr dup /terminate get exec +ehsave restore +(%%[LastPage]%%) = +%%EOF Binary files old-cl-unification-1/docs/html/images/unif-templ-hier.sxd and new-cl-unification-1/docs/html/images/unif-templ-hier.sxd differ diff -rN -u old-cl-unification-1/docs/html/index.html new-cl-unification-1/docs/html/index.html --- old-cl-unification-1/docs/html/index.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/index.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,384 @@ + + + CL Unification + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Extensions: UNIFICATION + +
+
+
+
+
  + +
+
+ +

Common Lisp Extensions: UNIFICATION

+ +

The notion of unification originated in the field of + formal logic (e.g. [R65],) and has been used + extensively in Computer Science and Programming Languages. Most + notably, Prolog uses the full power of + unification.

+ +

+ Unification is also at the core of type checking algorithms + in the tradition of Milner's, and a limited form - pattern + matching - is available to the user in languages of the ML and + Haskell family.

+ +

The library presented in these pages provides a full blown + unification framework for Common Lisp.

+ +

Writing a pattern matcher or a an unifier in Common + Lisp is easy, as long as we limit ourselves to manipulate + only ATOMs and CONSes.

+ +

Alas, it would be much nicer if we could manipulate arbitrary + Common Lisp objects as the ML programmer can with + arbitrary ML objects.

+ +

The library presented here is the first one (to the best of the + author's knowledge) that is capable of manipulating arbitrary + Common Lisp objects.

+ +

The hope is that this library could be incorporated directly in + an implementation in order to provide better type checking.

+ +

This should not come as a surprise, as a compiler like CMUCL does + include a type inference engine, which does very similar things.

+ +

Unification Basics

+ +

The unification process makes sure that two object + descriptions containing some holes + - i.e. variables - can be made equal (almost in the EQUALP + sense) by assigning consistent values to the variables + involved.

+ +

Suppose we had a function U performing unification and returning + a set of variable assignments, often called a + substitution. A very simple + example involving the unification of two numbers could be +

+  U(42, 42) ==> {}
+  
+ The two numbers are EQL, so no variable is involved and the empty + substitution is returned. +
+  U(42, 123) ==> <unification failure>
+  
+ The two numbers are not EQL, so the unification fails. +
+  U(42, x) ==> {x -> 42}
+  
+ The only way to make the unification process to succeed is to bind + the value 42 to the variable x.

+ +

The UNIFICATION library defines all the necessary functions and a + unification sub-language to handle most of Common + Lisp.

+ +

UNIFICATION Library

+ +

The UNIFICATION library has one main entry point, the generic function + UNIFY, and a sub-language definition that allows us to talk about + Common Lisp objects.

+ +

The UNIFY generic function has the following signature: +

+  unify x y &optional substitution
+  
+ Where x and y are either + arbitrary Common Lisp objects, variables, + or object templates. These items constitute the so-called + extended terms manipulated by the unification + machinery.

+ +

Variables are symbols with a #\? as the + first character of the name. This is a rather traditional choice, + although a different one based on quoted symbols is possible. + Therefore, the following are examples of variables. +

+  ?A ?s ?qwe ?42z ?a-variable-with-a-very-long-name ?_
+  
+ There are two special variables, ?_ and _, + which are used as anonymous place holders, they match anything, but + never appear in a substitution.

+ +

Hence, the above examples result in the following +

+  cl-prompt> (unify 42 42)
+  #<EMPTY ENVIRONMENT xxxxxx>
+  
+ +
+  cl-prompt> (unify 42 123)
+  ==> error: unification failure
+  
+ +
+  cl-prompt> (unify 42 ?x)
+  #<ENVIRONMENT xxxxxx>
+
+  cl-prompt> (find-variable-value '?x *)
+  42
+  
+

+ Where FIND-VARIABLE-VALUE is the accessor used to find the value of + a variable in a substitution.

+ +

As a more complicated example, consider the usual CONS based + unification +

+  cl-prompt> (unify '(foo (bar frobboz) ?baz) '(foo ?gnao 42))
+  #<ENVIRONMENT xxxxxx>
+
+  cl-prompt> (find-variable-value '?gnao *)
+  (BAR FROBBOZ)
+
+  cl-prompt> (find-variable-value '?baz **)
+  42
+  
+ +

Of course note the following behavior +

+  cl-prompt> (unify '(foo ?x 42) '(foo 42 ?x))
+  #<ENVIRONMENT xxxxxx>
+
+  cl-prompt> (unify '(foo ?x 42) '(foo baz ?x))
+  ==> error: unification failure
+  
+

+ + +

UNIFY works also on arrays and vectors. Strings are treated as + atomic objects +

+  cl-prompt> (unify #(1 2 3) #(1 ?x ?y))
+  #<ENVIRONMENT xxxxxx>
+
+  cl-prompt> (find-variable-value '?x *)
+  2
+  
+ +
+  cl-prompt> (unify #2A((1 2 3) (a s ?z)) #2A((1 ?x ?y) (a s d)))
+  #<ENVIRONMENT xxxxxx>
+
+  cl-prompt> (find-variable-value '?z *)
+  D
+  
+

+ +

So far so good, but how can you unify two structures? First of + all there is no portable way (yet) to list all the slots of a given + structure. Secondly, by allowing the unification of arbitrary + CONSes, we have created a short-circuit in the unification + machinery.

+ +

Dealing with object instances raises similar problems.

+ +

Suppose we have the following definition +

+  (defstruct foo a s d)
+  
+ The straightforward +
+  (unify #S(FOO A 42 S NIL D NIL) (make-foo :a 42))
+  
+ cannot be built portably, besides, we do not even have the equivalent of the + #S(...) notation for regular CLOS objects. Moreover we want + to do other things with other data types.

+ +

A simple solution is to define a template sub-language + to express unifications between structure objects or standard + objects (and other data types as well.) Nevertheless, the + definition of such sub-language cannot be CONS based, because in + such case, we would conflate arbitrary CONSes and the expressions of + the sub-language.

+ +

To circumvent this problem we resort to the usual trick a ML + programmer uses to placate the type-checker: we introduce an + "intermediate" data type. Essentially the following +

+  (defclass template ()
+     ((spec :accessor template-spec :type (or cons symbol number) ...)))
+  
+

+ +

The TEMPLATE class is accompanied by a reader macro + (#T for template, or type, with an + abuse of language) and an + appropriate PRINT-OBJECT method. The #T reader macro + expands as +

+  #Tsomething ==> (make-instance 'template :spec something)
+  
+ With this infrastructure we can + express the unification of the FOO instance as +
+  (unify #S(FOO A 42 S NIL D NIL) #T(foo foo-a 42))
+  
+ I.e. we use the actual structure accessor FOO-A to get to the the + value of the slot A in a FOO. This is an example of the template + language.

+ +

A more interesting example, which involves vectors is the + following +

+  cl-prompt> (unify #(1 2 3 4 5) #T(vector 1 ?x &rest ?rest)) ; You get the idea...
+  #<ENVIRONMENT xxxxxxx>
+
+  cl-prompt> (find-variable-value '?rest *)
+  #(3 4 5)
+  
+ I.e. we have a DESTRUCTURING-BIND on steroids.

+ +

Note that separating the templates is necessary if we want to do + something like +

+  cl-prompt> (unify '(1 2 3 4 5) #T(list 1 ?x &rest ?rest))
+  #<ENVIRONMENT xxxxxxx>
+
+  cl-prompt> (find-variable-value '?rest *)
+  (3 4 5)
+  
+ Without the template denoted by #T(list ...) the + unifier would have been utterly confused.

+ +

In the following the full extent of the UNIFICATION facility is + described in its main components. +

+ + +

Unifying Substitutions

+ +

The Template Sub-language

+ +

Control Flow

+ +

The UNIFICATION + Dictionary

+ +

References

+ +

+ [R56] J. A. Robinson, A machine-oriented logic based on the + resolution principle, Journal of the ACM, Vol. 12, No. 1, + January 1965, Pages 23--49.

+ + +

+
+ +

+ DISCLAIMER: The code associated to these documents is not + completely tested and it is bound to contain errors and omissions. + This documentation may contain errors and omissions as well.

+ +

The file COPYING contains a Berkeley-style license. You + are advised to use the code at your own risk. No warranty + whatsoever is provided, the author will not be held responsible for + any effect generated by your use of the library, and you can put + here the scarier extra disclaimer you can think of. +

+
+
+ + + + + +

Site Map

+ + +

Enjoy!

+ + + +
+

Questions? Queries? Suggestions? Comments? Please direct them + at me. +

+ +
+
+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2011-02-20
    + CL-UNIFICATION is now in Quicklisp. +
  • 2007-11-09
    + Updated. +
  • 2004-11-04
    + Updated. +
  • 2004-05-05
    + Started the site. +
  • +
+ +
+
+ +
 
+ +
+ + diff -rN -u old-cl-unification-1/docs/html/links.html new-cl-unification-1/docs/html/links.html --- old-cl-unification-1/docs/html/links.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/links.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,120 @@ + + + CL Unification Links + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification Links + +
+
+
+
+
  + +
+
+ +

Links

+ +

Here are some links which are pertinent to the + CL-UNIFICATION project.

+ +

+

+

+ + + + + +
+

Questions? Queries? Suggestions? Comments? Please direct them + at me. +

+ +
+
+ +
  + +
+
+ + + +
+
+ +
 
+ +
+ + diff -rN -u old-cl-unification-1/docs/html/list-template-class.html new-cl-unification-1/docs/html/list-template-class.html --- old-cl-unification-1/docs/html/list-template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/list-template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,192 @@ + + + CL Unification: Class LIST-TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class LIST-TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class LIST-TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ LIST-TEMPLATE, SEQUENCE-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ None. +

+ + +

Slots:

+ +

None.

+ + +

Description:

+ +

The LIST-TEMPLATE class denotes those object that are used + to unify against a LIST.

+ + +

Template Syntax:

+ +

+

+  #T(list . <destructuring template lambda list>)
+  
+

+ +

The LIST-TEMPLATE syntax denotes a LIST object. A + LIST-TEMPLATE must be unified against a LIST object. The elements + of the list must be unified against the + <destructuring template lambda list> + + +

Examples:

+ +

+

+  cl-prompt> (setf e (unify '(0 1 42 3 4 5) #T(list 0 1 ?x 3 4 5)))
+  #<ENVIRONMENT xxx>
+  
+  cl-prompt> (find-variable-value '?x e)
+  42
+  T
+
+  cl-prompt> (setq e (unify '(0 1 42 3 4 5)  #T(list 0 1 "FOO" 3 4 5)))
+  --> Error: UNIFICATION-FAILURE
+
+  cl-prompt> (setq e (unify '("foo" "bar" 42)) #T(list _ _ ?x))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  42
+  T
+
+  cl-prompt> (setq e (unify #(1 2 3) #T(list _ &rest ?x)))
+  --> Error: UNIFICATION-FAILURE
+
+  cl-prompt> (setq e (unify (list "foo" '?foo 42)) #T(list _ 33 ?x))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  42
+  T
+
+  cl-prompt> (find-variable-value '?foo e)
+  33
+  T
+  
+

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

Unifying a LIST-TEMPLATE against a non-LIST object results in + an UNIFICATION-FAILURE error being signaled.

+ + +

See Also:

+ +

UNIFY

+ + +

Notes:

+ +

Unifying a LIST-TEMPLATE against a non-proper or circular list has undefined behavior.

+ +

The LIST-TEMPLATE class is the only one that is really needed in + order not to implode the overall unification machinery. But, since + it is needed, then it is worthwhile to build the whole template + hierarchy.

+ + +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-10-30
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/mailing-lists.html new-cl-unification-1/docs/html/mailing-lists.html --- old-cl-unification-1/docs/html/mailing-lists.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/mailing-lists.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,127 @@ + + + CL Unification Mailing Lists Page + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Extensions: UNIFICATION + +
+
+
+
+
  + +
+
+ +

CL-UNIFICATION Mailing Lists

+ + +

There are three mailing lists set up at + common-lisp.net. +

+ + + + + + + + + + + + +

Enjoy!

+ + + +
+

Questions? Queries? Suggestions? Comments? Please direct them + at me. +

+ +
+
+ +
  + +
+
+ + +
+
+ +
 
+ +
+ + diff -rN -u old-cl-unification-1/docs/html/main.css new-cl-unification-1/docs/html/main.css --- old-cl-unification-1/docs/html/main.css 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/main.css 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,330 @@ +/* + * NYU Bioinformatics - Microarray group development + * + * Inspired by www.rhythmbox.org, (c) rhythmbox 2002 + * + * New code, modifications + * (c) Idan Gazit 2002, and + * (c) Marco Antoniotti, 2003-2004 + * NYU Bioinformatics + * + * Permission is hereby granted to use this style, etc etc etc. + */ + +body +{ + margin: 0; + background: #ffffff; + font-family: Verdana, Arial, Helvetica; + /*font-size:12px;*/ + font-weight: normal; + color:black; + +} + +a.navigation-link-selected +{ + text-decoration: none; + color: #ffffff; + font-weight: normal; + font-style: italic; +} + +a.navigation-link-selected:hover +{ + text-decoration: underline; + color: #ffffff; + font-weight: normal; + font-style: italic; +} + +a.navigation-link +{ + text-decoration: none; + color: rgb(100, 100, 100); + font-weight: normal; +} + +a.navigation-link:hover +{ + text-decoration: underline; + color: #ffffff; + font-weight: normal; +} + +a.return +{ + text-decoration: none; + color: #41286f; + font-size: 8pt; + font-weight: normal; +} + +a.return:hover; +{ + text-decoration: underline; + color: #68548D; + font-size: 8pt; + font-weight: normal; +} + +a +{ + text-decoration: underline; + color: #41286f; +} + +a:hover +{ + text-decoration: underline; + color: #68548D; +} + +p +{ + font-family: Verdana, Arial, Helvetica; + font-size: 12px; + color: #000000; + font-weight: regular; + /* padding-bottom: 10px; + margin: 0px; */ +} + +.header +{ + background: #9ebcb4; + /* background-image: url("./images/header_bg_1.gif"); */ + background-repeat: no-repeat; + height: 50px; +} + +.navigation +{ + word-spacing: 5px; + position: absolute; + top: 35px; + right: 5px; + text-align: right; + font-family: Verdana, Arial, Helvetica; + font-size: 12px; + color: #ffffff; + font-weight: normal; + word-spacing: 0px; + } + + + +.sidebar +{ + font-family: Verdana, Arial, Helvetica; + font-size: 12px; + color: #000000; + font-weight: normal; + padding-left: 15px; + padding-right: 5px; + position: fixed; + top: 10ex; right 1em; + +} + +.text +{ + font-family: Verdana, Arial, Helvetica; + font-size: 12px; + color: #000000; + font-weight: normal; +} + + + +li +{ + font-family: Verdana, Arial, Helvetica; + font-size: 12px; + color: #000000; + font-weight: normal; +} + + +pre +{ + background: 5px; + background-color: #e0e0e0; +} + + +.label +{ + font-family: Verdana, Arial, Helvetica; + font-size: 12px; + color: #000000; + text-align: center; + font-style: italic; +} + +.command +{ + font-family: Verdana, Arial, Helvetica; + font-size: 12px; + color: #000000; + background: #eae8e3; + font-weight: regular; + margin-bottom: 10px; +} + +.content +{ + background: #ffffff; + padding: 5px; + padding-right: 15px; +} + +.toc +{ + font-size: 10px; + background: #ffffff; + padding: 5px; + padding-right: 5px; +} + +.middle-bar +{ + height: 5px; + background: #A497BA; +} + +.black-line +{ + height: 1px; + background: #000000; +} + +.bottom +{ + position: absolute; + right: 5px; + bottom: 5px; +} + +.copyright +{ + font-family:Verdana, Arial, Helvetica; + font-size: 10px; + color: #808080; + font-weight: regular; + padding:5px; + text-align:right; + border-color:#808080; + border-width:0px; + border-style:dotted; + border-top-width:1px; + +} + +.centerblock +{ + font-family:Verdana, Arial, Helvetica; + font-size: 12px; + color: black; + font-weight: normal; +} + +.tableheader +{ + font-family:Verdana, Arial, Helvetica; + font-size:12px; + color: white; + font-weight:bold; + background:#505050; + padding: 4px; +} + +.tablerow1 +{ + font-family:Verdana, Arial, Helvetica; + font-size:12px; + color: black; + font-weight: normal; + background:#e0e0e0; + padding:4px; +} + +.tablerow2 +{ + font-family:Verdana, Arial, Helvetica; + font-size:12px; + color: black; + font-weight: normal; + background:#f0f0f0; + padding: 4px; +} + +.tablerow_style +{ + font-family:Verdana, Arial, Helvetica; + font-size:12px; + color: black; + font-weight: normal; + background:#f0f0f0; + padding: 4px; +} + +h1 +{ + font-family:Verdana, Arial, Helvetica; + font-size:18px; + color: #41286f; + font-weight:bold; +} + +h2 +{ + font-family:Verdana, Arial, Helvetica; + font-size:16px; + color: #41286f; + font-weight:bold; +} + +h3 +{ + font-family:Verdana, Arial, Helvetica; + font-size:14px; + color: #41286f; + font-weight:bold; +} + +h4 +{ + font-family:Verdana, Arial, Helvetica; + font-size:12px; + color: #41286f; + font-weight:bold; +} + +h5 +{ + font-family:Verdana, Arial, Helvetica; + font-size:10px; + color: #41286f; + font-weight:bold; +} + +.captionimg +{ + align:right; + text-align:right; + font-style: italic; + font-weight: normal; + font-size:10px; + color: #303030; +} + +.indent +{ + padding-left: 50px; +} + +.command +{ + font-family:Courier; +} diff -rN -u old-cl-unification-1/docs/html/make-empty-environment-function.html new-cl-unification-1/docs/html/make-empty-environment-function.html --- old-cl-unification-1/docs/html/make-empty-environment-function.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/make-empty-environment-function.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,130 @@ + + + CL Unification: Function MAKE-EMPTY-ENVIRONMENT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Function MAKE-EMPTY-ENVIRONMENT + +
+
+
+
+
  + +
+
+ +

Function MAKE-EMPTY-ENVIRONMENT

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Syntax:

+ +

+

+  make-empty-environment
+  => unification-environment
+  
+

+ +

Arguments and Values:

+ +

unification-environment---a fresh unification-environment + + + +

Description:

+ +

The function MAKE-EMPTY-ENVIRONMENT constructs a new + object of type UNIFY:ENVIRONMENT. The new + unification-environment is empty, i.e. it does not contain + any binding. + + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

None.

+ + +

See Also:

+ +

UNIFY:ENVIRONMENT, BINDING, FIND-VARIABLE-VALUE

+ + +

Notes:

+ +

None.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-04-12
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + diff -rN -u old-cl-unification-1/docs/html/make-shared-environment-function.html new-cl-unification-1/docs/html/make-shared-environment-function.html --- old-cl-unification-1/docs/html/make-shared-environment-function.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/make-shared-environment-function.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,144 @@ + + + CL Unification: Function MAKE-SHARED-ENVIRONMENT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Function MAKE-SHARED-ENVIRONMENT + +
+
+
+
+
  + +
+
+ +

Function MAKE-SHARED-ENVIRONMENT

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Syntax:

+ +

+

+  make-shared-environment env
+  => unification-environment
+  
+

+ +

Arguments and Values:

+ +

env---an unification-environment. +

unification-environment---a new unification-environment. + + + +

Description:

+ +

The function MAKE-SHARED-ENVIRONMENT constructs a new + object of type UNIFY:ENVIRONMENT. The new + unification-environment shares the frames already present in env.

+ +

It is guaranteed that extending unification-environment + will not change env.

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

None.

+ + +

See Also:

+ +

UNIFY:ENVIRONMENT, BINDING, FIND-VARIABLE-VALUE

+ + +

Notes:

+ +

This function is provided to allow for the construction of + "trees" of frames for interpreter-like environments. The macros + MATCH, MATCHING, and MATCH-CASE rely on this function, as they + immediately construct a "shared" environment.

+ +

Current Implementation Note

+ +

MAKE-SHARED-ENVIRONMENT relies on the LIST implementation of + environments.

+ +

The use of MAKE-SHARED-ENVIRONMENT in MATCHING and MATDCH-CASE is + still incomplete.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-11-04
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + diff -rN -u old-cl-unification-1/docs/html/match-case-macro.html new-cl-unification-1/docs/html/match-case-macro.html --- old-cl-unification-1/docs/html/match-case-macro.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/match-case-macro.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,159 @@ + + + CL Unification: Macro MATCH-CASE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Macro MATCH-CASE + +
+
+
+
+
  + +
+
+ +

Macro MATCH-CASE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Syntax:

+ + +

+

+  match-case (object &key errorp) <clause>*
+  => results*
+  
+

+ +

+

+  <clause>         ::= <regular clause> | <default clause>
+  <regular clause> ::= (template &body forms)
+  <default clause> ::= (t &body forms)
+                   |   (otherwise &body forms)
+  
+

+ +

Arguments and Values:

+ +

template---a unification template +

object---an object +

substitution---a substitution +

errorp---a generalized boolean +

error-value---an object +

forms---an implicit progn +

results---the values returned by forms + + + + +

Description:

+ +

MATCH-CASE sets up a CASE-like environment for multiple template matching clauses. + Each clause evaluates its forms in an environment where the variables + present in the template are bound lexically. Note that both variable + names '?FOO' and 'FOO' are bound for convenience.

+ +

The values returned by the MATCH-CASE form are those of the last form in + the first clause that satisfies the match test. I.e. the first + clause for which the template UNIFYes against object.

+ +

If errorp is non-NIL then if none of the regular clauses matches, then + an error of type UNIFICATION-NON-EXHAUSTIVE is signalled, regardless of + any default clause. Otherwise, the default clause behaves as a + standard COND default clause. The default value of errorp is NIL.

+ +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

See above.

+ + +

See Also:

+ +

UNIFY, UNIFICATION-FAILURE, UNIFICATION-NON-EXHAUSTIVE

+ +

Notes:

+ +

Note that UNIFICATION-FAILUREs + raising from the evaluation of forms in each clause will + not be caught and handled by the enclosing MATCH-CASE block.

+ + +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-06-11
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/match-macro.html new-cl-unification-1/docs/html/match-macro.html --- old-cl-unification-1/docs/html/match-macro.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/match-macro.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,151 @@ + + + CL Unification: Macro MATCH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Macro MATCH + +
+
+
+
+
  + +
+
+ +

Macro MATCH

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Syntax:

+ + +

+

+  match (template object &key substitution errorp error-value) &body forms
+  => results*
+  
+

+ +

Arguments and Values:

+ +

template---a unification template +

object---an object +

substitution---a substitution +

errorp---a generalized boolean +

error-value---an object +

forms---an implicit progn +

results---the values returned by forms + + + + +

Description:

+ +

+ MATCH sets up a lexical environment to evaluate forms after a unification operation. + MATCH unifies a template and an object and then sets up a lexical + environment where the variables present in the template are bound + lexically. Note that both variable names '?FOO' and 'FOO' are bound + for convenience.

+ +

The MATCH form returns the values returned by the evaluation of the + last of the forms.

+ +

If errorp is non-NIL (the default) then the form raises a + UNIFICATION-FAILURE, otherwise the result of evaluating error-value, + whose default is NIL is returned.

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

See above.

+ + +

See Also:

+ +

UNIFY, UNIFICATION-FAILURE

+ +

Notes:

+ +

Note that UNIFICATION-FAILUREs + raising from the evaluation of forms will also be caught and handled by the enclosing MATCH + according to errorp settings.

+ + +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-06-11
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/matching-macro.html new-cl-unification-1/docs/html/matching-macro.html --- old-cl-unification-1/docs/html/matching-macro.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/matching-macro.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,158 @@ + + + CL Unification: Macro MATCHING + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Macro MATCHING + +
+
+
+
+
  + +
+
+ +

Macro MATCHING

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Syntax:

+ + +

+

+  matching (&key errorp) <clause>*
+  => results*
+  
+

+ +

+

+  <clause>         ::= <regular clause> | <default clause>
+  <regular clause> ::= ((template object) &body forms)
+  <default clause> ::= (t &body forms)
+                   |   (otherwise &body forms)
+  
+

+ +

Arguments and Values:

+ +

template---a unification template +

object---an object +

substitution---a substitution +

errorp---a generalized boolean +

error-value---an object +

forms---an implicit progn +

results---the values returned by forms + + + + +

Description:

+ +

MATCHING sets up a COND-like environment for multiple template matching clauses. + Each clause evaluates its forms in an environment where the variables + present in the template are bound lexically. Note that both variable + names '?FOO' and 'FOO' are bound for convenience.

+ +

The values returned by the MATCHING form are those of the last form in + the first clause that satisfies the match test.

+ +

If errorp is non-NIL then if none of the regular clauses matches, then + an error of type UNIFICATION-NON-EXHAUSTIVE is signalled, regardless of + any default clause. Otherwise, the default clause behaves as a + standard COND default clause. The default value of errorp is NIL.

+ +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

See above.

+ + +

See Also:

+ +

UNIFY, UNIFICATION-FAILURE, UNIFICATION-NON-EXHAUSTIVE

+ +

Notes:

+ +

Note that UNIFICATION-FAILUREs + raising from the evaluation of forms in each clause will + not be caught and handled by the enclosing MATCHING block..

+ + +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-06-11
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/nil-template-class.html new-cl-unification-1/docs/html/nil-template-class.html --- old-cl-unification-1/docs/html/nil-template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/nil-template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,169 @@ + + + CL Unification: Class NIL-TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class NIL-TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class NIL-TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ NIL-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ None. +

+ + +

Slots:

+ +

None.

+ + +

Description:

+ +

The NIL-TEMPLATE class denotes those object that are used + to unify against NIL.

+ +

Template Syntax:

+ +

+

+  #Tnil
+  
+

+ +

+

+  #T()
+  
+

+ + +

The NIL-TEMPLATE syntax denotes NIL. + NIL-TEMPLATE can only unified against NIL.

+ +

The NIL-TEMPLATE is used for symmetry reasons, given that the + template hierarchy (almost) mirrors the regular CL + type hierarchy.

+ + +

Examples:

+ +

+

+  cl-prompt> (setf e (unify nil #Tnil))
+  #<ENVIRONMENT xxx>
+  
+  cl-prompt> (setq e (unify 42 #T()))
+  --> Error: UNIFICATION-FAILURE
+  
+

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

Unifying an NIL-TEMPLATE against a non-NIL object results in + an UNIFICATION-FAILURE error being signaled.

+ + +

See Also:

+ +

UNIFY

+ + +

Notes:

+ +

None.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-10-30
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/nth-template-class.html new-cl-unification-1/docs/html/nth-template-class.html --- old-cl-unification-1/docs/html/nth-template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/nth-template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,167 @@ + + + CL Unification: Class NTH-TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class NTH-TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class NTH-TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ NTH-TEMPLATE, ELEMENT-TEMPLATE, EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ None. +

+ + +

Slots:

+ +

None.

+ + +

Description:

+ +

The NTH-TEMPLATE class denotes those object that are used + to unify against a particular element of a LIST.

+ +

Template Syntax:

+ +

+

+  #T(nth index item)
+  
+

+ +

The NTH-TEMPLATE syntax denotes the item at index + a LIST. A NTH-TEMPLATE must + be unified against a LIST object. item is unified + against the element extracted from the sequence object at + index by the standard function NTH.

+ + +

Examples:

+ +

+

+  cl-prompt> (setf e (unify '(0 1 42 3 4 5) #T(nth 2 ?x)))
+  #<ENVIRONMENT xxx>
+  
+  cl-prompt> (find-variable-value '?x e)
+  42
+
+  cl-prompt> (setq e (unify '(0 1 42 3 4 5) #T(nth 42 ?x)))
+  --> Error: index 42 out of bounds.  FIX THIS
+
+
+  cl-prompt> (setq e (unify #(a s d) #T(nth 1 ?x)))
+  --> Error: UNIFICATION-FAILURE
+  
+

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

Unifying an NTH-TEMPLATE against a non-LIST object results in + an UNIFICATION-FAILURE error being signaled.

+ + +

See Also:

+ +

UNIFY

+ +

Notes:

+ +

None.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-06-11
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/nthcdr-template-class.html new-cl-unification-1/docs/html/nthcdr-template-class.html --- old-cl-unification-1/docs/html/nthcdr-template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/nthcdr-template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,167 @@ + + + CL Unification: Class NTHCDR-TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class NTHCDR-TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class NTHCDR-TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ NTHCDR-TEMPLATE, ELEMENT-TEMPLATE, EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ None. +

+ + +

Slots:

+ +

None.

+ + +

Description:

+ +

The NTHCDR-TEMPLATE class denotes those object that are used + to unify against a particular CONS of a LIST.

+ +

Template Syntax:

+ +

+

+  #T(nthcdr index item)
+  
+

+ +

The NTHCDR-TEMPLATE syntax denotes the CONS item at index + a LIST. A NTHCDR-TEMPLATE must + be unified against a LIST object. item is unified + against the element extracted from the LIST object at + index by the standard function NTHCDR.

+ + +

Examples:

+ +

+

+  cl-prompt> (setf e (unify '(0 1 42 3 4 5) #T(nthcdr 2 ?x)))
+  #<ENVIRONMENT xxx>
+  
+  cl-prompt> (find-variable-value '?x e)
+  (42 3 4 5)
+
+  cl-prompt> (setq e (unify '(0 1 42 3 4 5) #T(nthcdr 42 ?x)))
+  --> Error: index 42 out of bounds.  FIX THIS
+
+
+  cl-prompt> (setq e (unify #(a s d) #T(nthcdr 1 ?x)))
+  --> Error: UNIFICATION-FAILURE
+  
+

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

Unifying an NTHCDR-TEMPLATE against a non-LIST object results in + an UNIFICATION-FAILURE error being signaled.

+ + +

See Also:

+ +

UNIFY

+ +

Notes:

+ +

None.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-06-11
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/number-template-class.html new-cl-unification-1/docs/html/number-template-class.html --- old-cl-unification-1/docs/html/number-template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/number-template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,184 @@ + + + CL Unification: Class NUMBER-TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class NUMBER-TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class NUMBER-TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ NUMBER-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ None. +

+ + +

Slots:

+ +

None.

+ + +

Description:

+ +

The NUMBER-TEMPLATE class denotes those object that are used + to unify against a NUMBER.

+ +

Template Syntax:

+ +

+

+  #T42
+  
+

+ +

+

+  #T(number 42)
+  
+

+ +

+

+  #T(number ?num)
+  
+

+ +

+

+  #T#C(1.2 3.4)
+  
+

+ + +

The NUMBER-TEMPLATE syntax denotes a NUMBER. + NUMBER-TEMPLATEs can only unified against a NUMBER.

+ + +

Examples:

+ +

+

+  cl-prompt> (setf e (unify 42 #T42))
+  #<ENVIRONMENT xxx>
+  
+  cl-prompt> (setq e (unify 42 #T()))
+  --> Error: UNIFICATION-FAILURE
+
+  cl-prompt> (setf e (unify 42 #T(number ?num)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?num e)
+  42
+  T
+  
+

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

Unifying an NUMBER-TEMPLATE against a non-NUMBER object results in + an UNIFICATION-FAILURE error being signaled.

+ + +

See Also:

+ +

UNIFY

+ + +

Notes:

+ +

There is no COMPLEX-NUMBER-TEMPLATE class, although a case for it can be easily made.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-10-30
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/sequence-template-class.html new-cl-unification-1/docs/html/sequence-template-class.html --- old-cl-unification-1/docs/html/sequence-template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/sequence-template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,202 @@ + + + CL Unification: Class SEQUENCE-TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class SEQUENCE-TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class SEQUENCE-TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ SEQUENCE-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ VECTOR-TEMPLATE, LIST-TEMPLATE. +

+ + +

Slots:

+ +

None.

+ + +

Description:

+ +

The SEQUENCE-TEMPLATE class denotes those object that are used + to unify against a SEQUENCE.

+ +

Template Syntax:

+ +

+

+  #T(sequence . <destructuring template lambda list>)
+  
+

+ +

The SEQUENCE-TEMPLATE syntax denotes a SEQUENCE object. A + SEQUENCE-TEMPLATE must be unified against a SEQUENCE object. The elements + of the sequence must be unified against the + <destructuring template lambda list> + + +

Examples:

+ +

+

+  cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(sequence 0 1 ?x 3 4 5)))
+  #<ENVIRONMENT xxx>
+  
+  cl-prompt> (find-variable-value '?x e)
+  42
+  T
+
+  cl-prompt> (setq e (unify #(0 1 42 3 4 5)  #T(sequence 0 1 "FOO" 3 4 5)))
+  --> Error: UNIFICATION-FAILURE
+
+  cl-prompt> (setq e (unify #("foo" "bar" 42)) #T(sequence _ _ ?x))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  42
+  T
+
+  cl-prompt> (setq e (unify (list "foo" "bar" 42) #T(sequence _ &rest ?x)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  ("bar" 42)
+
+  cl-prompt> (setq e (unify "I am a string" #T(sequence ?I _ &rest ?x)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  "am a string"
+  T
+
+  cl-prompt> (find-variable-value '?I e)
+  #\I
+  T
+
+  cl-prompt> (setq e (unify 42 #T(sequence _ &rest ?x)))
+  --> Error: UNIFICATION-FAILURE
+
+  cl-prompt> (setq e (unify #("foo" ?foo 42)) #T(sequence _ 33 ?x))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  42
+  T
+
+  cl-prompt> (find-variable-value '?foo e)
+  33
+  T
+  
+

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

Unifying an SEQUENCE-TEMPLATE against a non-SEQUENCE object results in + an UNIFICATION-FAILURE error being signaled.

+ + +

See Also:

+ +

UNIFY

+ + +

Notes:

+ +

None.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-10-30
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/standard-object-template-class.html new-cl-unification-1/docs/html/standard-object-template-class.html --- old-cl-unification-1/docs/html/standard-object-template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/standard-object-template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,227 @@ + + + CL Unification: Class STANDARD-OBJECT-TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class STANDARD-OBJECT-TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class STANDARD-OBJECT-TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ STANDARD-OBJECT-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ None. +

+ + +

Slots:

+ +

None.

+ + +

Description:

+ +

The STANDARD-OBJECT-TEMPLATE class denotes those object that are used + to unify against any STANDARD-OBJECT.

+ + +

Template Syntax:

+ +

+

+  #T(<CL class designator> <slot spec>*)
+
+  <slot spec> ::= <reader method> <object>
+              |   (slot-value <slot name>) <object>
+  
+

+ +

The STANDARD-OBJECT-TEMPLATE syntax denotes any + CL object that is an instance of a + STANDARD-OBJECT. The semantic of the template in a unification depends on which + <slot spec>'s appear. In the first case the meaning of + <slot spec> is such that the + <reader method> gets called against the instance + against which the STANDARD-OBJECT-TEMPLATE is being UNIFYed. In the + second case, SLOT-VALUE is called with the instance being UNIFYed + and <slot name>. The result value of the call to either + <reader method>, or SLOT-VALUE is UNIFYed against + <object>.

+ +

<object> can be any CL object, + including a TEMPLATE (in which case the unification machinery + proceeds recursively.)

+ + +

Examples:

+ +

+

+  cl-prompt> (defclass foo () ((a :initform 42 :accessor foo-a)))
+  #<STANDARD-CLASS FOO XXXXX>
+
+  cl-prompt> (defclass bar (foo) ())
+  #<STANDARD-CLASS BAR XXXXX>
+
+  cl-prompt> (defclass baz ()
+               ((a :reader the-a-in-a-baz)
+                (b :accessor bazb :initarg :b)))
+  #<STANDARD-CLASS BAZ XXXXX>
+
+  cl-prompt> (setf e (unify (make-instance 'foo) #T(foo foo-a 42)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (setf e (unify (make-instance 'bar) #T(foo foo-a 42)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  42
+  T
+
+  cl-prompt> (setf e (unify (make-instance 'bar) #T(foo foo-a 42)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  42
+  T
+
+  cl-prompt> (setf e (unify (make-instance 'baz) #T(baz the-a-in-baz 42)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  42
+  T
+
+  cl-prompt> (setf e (unify (make-instance 'baz) #T(baz (slot-value b) 42)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  42
+  T
+
+  cl-prompt> (setf e (unify (make-instance 'baz :b '?e) #T(baz bazb 42)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  42
+  T
+
+  cl-prompt> (setf e (unify (make-instance 'bar) #T(baz foo-a 42)))
+  --> Error: UNIFICATION-FAILURE
+  
+

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

Unifying a STANDARD-OBJECT-TEMPLATE against a non-STANDARD-OBJECT object results in + an UNIFICATION-FAILURE error being signaled.

+ +

Unifying a STANDARD-OBJECT-TEMPLATE denoting an instance of class + C1 against an instance of class C2, results in + an UNIFICATION-FAILURE error being signaled, when C1 is not in the + class precedence list of C2.

+ + +

See Also:

+ +

UNIFY

+ + +

Notes:

+ +

None.

+ + +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-10-30
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/string-template-class.html new-cl-unification-1/docs/html/string-template-class.html --- old-cl-unification-1/docs/html/string-template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/string-template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,202 @@ + + + CL Unification: Class STRING-TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class STRING-TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class STRING-TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ STRING-TEMPLATE, VECTOR-TEMPLATE, SEQUENCE-TEMPLATE, ARRAY-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ None. +

+ + +

Slots:

+ +

None.

+ + +

Description:

+ +

The STRING-TEMPLATE class denotes those object that are used + to unify against a STRING.

+ +

Template Syntax:

+ +

+

+  #T(string . <destructuring template lambda list>)
+  
+

+ + +

The STRING-TEMPLATE syntax denotes a STRING object. A + STRING-TEMPLATE must be unified against a CHARACTER VECTOR + object. The elements of the string must be unified against the + <destructuring template lambda list>

+ +

The <destructuring template lambda list> has a + slight different interpretation in this case, in order to provide + more flexibility to the user. Ordinarily, each component appearing + in a <destructuring template lambda list> is unified + "element-wise" with the underlying SEQUENCE or ARRAY object. In the + case of a STRING-TEMPLATE, each component of the + <destructuring template lambda list> is allowed to be a + STRING or a STRING-TEMPLATE itself. The STRING or STRING-TEMPLATE + is unified against a subsequence of the CHARACTER VECTOR.

+ + + + + + +

Examples:

+ +

+

+  cl-prompt> (setf e (unify "foobar" #T(string "foob" ?x #\r)))
+  #<ENVIRONMENT xxx>
+  
+  cl-prompt> (find-variable-value '?x e)
+  #\a
+
+  cl-prompt> (setq e (unify "foobar"  #T(string "FOO" #\b #\a #\r)))
+  --> Error: UNIFICATION-FAILURE
+
+  cl-prompt> (setq e (unify "foobar") #T(string _ _ ?x _ _ _))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  #\o
+
+  cl-prompt> (setq e (unify "foobar" #T(string _ &rest ?x)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  "oobar"
+  
+

+ + +

Affected By:

+ +

The value of the variable *UNIFY-STRING-CASE-SENSITIVE-P*.

+ + +

Exceptional Situations:

+ +

Unifying an STRING-TEMPLATE against a non CHARACTER VECTOR object + results in an UNIFICATION-FAILURE error being signaled.

+ + +

See Also:

+ +

UNIFY

+ + +

Notes:

+ +

ARRAY Structural Properties

+ +

There is no way to "unify" against structural properties of + vectors like fill pointers and displacements.

+ +

Current Implementation Note

+ +

The STRING-TEMPLATE class and the relevant UNIFY methods have not + been implemented yet.

+ +

The actual semantics of the STRING-TEMPLATE class is not + completely clear yet.

+ + +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-10-30
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/structure-object-template-class.html new-cl-unification-1/docs/html/structure-object-template-class.html --- old-cl-unification-1/docs/html/structure-object-template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/structure-object-template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,205 @@ + + + CL Unification: Class STRUCTURE-OBJECT-TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class STRUCTURE-OBJECT-TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class STRUCTURE-OBJECT-TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ STRUCTURE-OBJECT-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STRUCTURE-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ None. +

+ + +

Slots:

+ +

None.

+ + +

Description:

+ +

The STRUCTURE-OBJECT-TEMPLATE class denotes those object that are used + to unify against any STRUCTURE-OBJECT.

+ + +

Template Syntax:

+ +

+

+  #T(<CL structure class designator> [<reader function> <object>]*)
+  
+

+ +

The STRUCTURE-OBJECT-TEMPLATE syntax denotes any + CL object that is an instance of a + STRUCTURE-OBJECT. The syntax is such that the <reader + function> gets called against the instance against + which the STRUCTURE-OBJECT-TEMPLATE is being UNIFYed. + <object> can be any CL object, + including a TEMPLATE (in which case the unification machinery + proceeds recursively.)

+ + +

Examples:

+ +

+

+  cl-prompt> (defstruct foo () (a 42))
+  FOO
+
+  cl-prompt> (defstruct (baz (:include foo)) (b 33))
+  BAZ
+
+  cl-prompt> (setf e (unify (make-foo) #T(foo foo-a 42)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (setf e (unify (make-baz) #T(foo foo-a 42)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  42
+  T
+
+  cl-prompt> (setf e (unify (make-instance 'bar) #T(foo foo-a 42)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  42
+  T
+
+  cl-prompt> (setf e (unify (make-instance 'baz) #T(baz the-a-in-baz 42)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  42
+  T
+
+  cl-prompt> (setf e (unify (make-instance 'baz :b '?e) #T(baz bazb 42)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  42
+  T
+
+  cl-prompt> (setf e (unify (make-instance 'bar) #T(baz foo-a 42)))
+  --> Error: UNIFICATION-FAILURE
+  
+

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

Unifying a STRUCTURE-OBJECT-TEMPLATE against a non-STRUCTURE-OBJECT object results in + an UNIFICATION-FAILURE error being signaled.

+ +

Unifying a STRUCTURE-OBJECT-TEMPLATE denoting an instance of structure + S1 against an instance of structure S2, results in + an UNIFICATION-FAILURE error being signaled, when S1 is not in the + class precedence list of S2.

+ + +

See Also:

+ +

UNIFY

+ + +

Notes:

+ +

None.

+ + +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-10-30
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/subseq-template-class.html new-cl-unification-1/docs/html/subseq-template-class.html --- old-cl-unification-1/docs/html/subseq-template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/subseq-template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,179 @@ + + + CL Unification: Class SUBSEQ-TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class SUBSEQ-TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class SUBSEQ-TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ SUBSEQ-TEMPLATE, ELEMENT-TEMPLATE, EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ None. +

+ + +

Slots:

+ +

None.

+ + +

Description:

+ +

The SUBSEQ-TEMPLATE class denotes those object that are used + to unify against a particular element of an ARRAY.

+ +

Template Syntax:

+ +

+

+  #T(subseq start end . <destructuring template lambda list>)
+  
+

+ + +

The SUBSEQ-TEMPLATE syntax is used to unify the elements of a + SEQUENCE starting from start and below end, against + the <destructuring template lambda list>.

+ +

start and end must be supplied and must be valid + sequence indexes, i.e. most likely, FIXNUMs; however, end can + also be NIL, in which case the usual SUBSEQ semantics applies.

+ + + +

Examples:

+ +

+

+  cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(subseq 2 4 ?x ?y)))
+  #<ENVIRONMENT xxx>
+  
+  cl-prompt> (find-variable-value '?x e)
+  42
+  T
+
+  cl-prompt> (find-variable-value '?y e)
+  3
+  T
+
+  cl-prompt> (setq e (unify #(0 1 42 3 4 5) #T(subseq 0 4 42 ?x)))
+  --> Error: UNIFICATION-FAILURE
+
+
+  cl-prompt> (setq e (unify "This is a string!" #T(subseq 4 nil &rest ?str)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?str e)
+  " is a string!"
+  
+

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

Unifying an SUBSEQ-TEMPLATE against a non-SEQUENCE object results in + an UNIFICATION-FAILURE error being signaled.

+ + +

See Also:

+ +

UNIFY

+ +

Notes:

+ +

None.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-06-11
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/symbol-template-class.html new-cl-unification-1/docs/html/symbol-template-class.html --- old-cl-unification-1/docs/html/symbol-template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/symbol-template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,153 @@ + + + CL Unification: Class SYMBOL-TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class SYMBOL-TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class SYMBOL-TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ SYMBOL-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ None. +

+ + +

Slots:

+ +

None.

+ + +

Description:

+ +

The SYMBOL-TEMPLATE class is the class of the objects that UNIFY + recognizes as symbol templates.

+ +

Template Syntax

+ +

The specification of a SYMBOL-TEMPLATE has one of the two + forms below:

+ +

+  #T<symbol>
+  
+ + or + +
+  #T(symbol <value>)
+  
+ + where value must be either a unification variable or + a SYMBOL. +

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ + +

Unifying a SYMBOL-TEMPLATE against a non-SYMBOL object results in + an UNIFICATION-FAILURE error being signaled.

+ + +

See Also:

+ +

UNIFY, NIL-TEMPLATE

+ +

Notes:

+ +

NIL-TEMPLATE should be used to specifically UNIFY against NIL.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-06-11
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/template-class.html new-cl-unification-1/docs/html/template-class.html --- old-cl-unification-1/docs/html/template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,138 @@ + + + CL Unification: Class TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ TEMPLATE, STANDARD-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ EXPRESSION-TEMPLATE, TYPE-TEMPLATE. +

+ + +

Slots:

+ +

+

    +
  • SPEC
    + Type: (OR SYMBOL CONS)
    + Accessor: TEMPLATE-SPEC
    + Initarg: :spec (default NIL)
  • +
+

+ + +

Description:

+ +

The TEMPLATE class is the root of the template hierarchy.

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

None.

+ + +

See Also:

+ +

UNIFY

+ +

Notes:

+ +

None.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-06-11
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/template-p-function.html new-cl-unification-1/docs/html/template-p-function.html --- old-cl-unification-1/docs/html/template-p-function.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/template-p-function.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,131 @@ + + + CL Unification: Standard Generic Function TEMPLATE-P + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Standard Generic Function TEMPLATE-P + +
+
+
+
+
  + +
+
+ +

Generic function TEMPLATE-P

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Syntax:

+ +

+

+  template-p object
+  => result
+  
+

+ +

Arguments and Values:

+ +

object---an object +

result---a generalized boolean + + + +

Description:

+ +

The generic function TEMPLATE-P is the predicate that tests + whether an object is of class TEMPLATE. If object is + an instance of TEMPLATE or one of its sub-classes, then TEMPLATE-P + returns a non-NIL value.

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

None.

+ + +

See Also:

+ +

TEMPLATE

+ + +

Notes:

+ +

None.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-04-12
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + diff -rN -u old-cl-unification-1/docs/html/template-spec-accessor.html new-cl-unification-1/docs/html/template-spec-accessor.html --- old-cl-unification-1/docs/html/template-spec-accessor.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/template-spec-accessor.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,137 @@ + + + CL Unification: Accessor TEMPLATE-SPEC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Standard Generic Function TEMPLATE-SPEC + +
+
+
+
+
  + +
+
+ +

Accessor TEMPLATE-SPEC

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Syntax:

+ +

+

+  template-spec template
+  => spec
+  
+

+ +

+

+  (setf (template-spec template) spec)
+  => spec
+  
+

+ +

Arguments and Values:

+ +

template---a template object +

spec---a symbol, or a cons + + +

Description:

+ +

The accessor TEMPLATE-SPEC extracts the template + specification spec out of an instance of the class + TEMPLATE or one of its sub-classes. The SETF form sets the + spec.

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

None.

+ + +

See Also:

+ +

TEMPLATE, the "Template Sub-language" section.

+ + +

Notes:

+ +

None.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-10-09
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + diff -rN -u old-cl-unification-1/docs/html/templates.html new-cl-unification-1/docs/html/templates.html --- old-cl-unification-1/docs/html/templates.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/templates.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,208 @@ + + + CL Unification Templates + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Extensions: UNIFICATION TEMPLATES + +
+
+
+
+
  + +
+
+ +

The UNIFICATION TEMPLATES Sub-language

+ +

The unification machinery relies on a template + sub-language to express structural patterns containing + unification variables. The template sub-language comprises + several objects organized in a hierarchy that parallels most of the + standard CL type hierarchy.

+ + +

Unification Variables

+ +

Unification variables are symbols with a #\? as the + first character of the name. This is a rather traditional choice, + although a different one based on quoted symbols is possible. + Therefore, the following are examples of variables. +

+  ?A ?s ?qwe ?42z ?a-variable-with-a-very-long-name ?_
+  
+ There are two special variables, ?_ and _, + which are used as anonymous place holders, they match anything, but + never appear in a substitution.

+ +

Destructuring Template Lambda List

+ +

CL has the concept of destructuring lambda + list which is used in conjunction with the form + DSTRUCTURING-BIND, and, to some extent, with LOOP. The unifier + machinery relies on a related notion dubbed destructuring + template lambda list for lack of a better name.

+ +

A destructuring template lambda list (or just + template lambda list) is just like a regular + destructuring lambda list (ANSI 3.4.5) with a number of + restrictions. The full syntax is the following.

+ +

+

+  template-lambda-list ::= (<reqvars> <optvars> <restvar> <keyvars>)
+                       |   (<reqvars> <optvars> . <template>)
+
+  reqvars ::= <template>*
+
+  optvars ::= [&optional <template>*]
+
+  restvar ::= [&rest <template>]
+
+  keyvars ::= [&key {<template> | ({<template> | (<keyword-name> <template>)})}*
+              [&allow-other-keys]]
+  
+

+ +

Where <template> is either an object with syntax + defined in the next section or it can be a normal + CL object. The remaining non terminal grammar + symbols have the usual CL interpretation.

+ + + +

Unification Templates

+ +

The unification templates are organized in an object + hierachy. There is a standard CLOS class for each + template kind. The hierarchy is shown below.

+ +

+

+ +

The template hierarchy is rooted at the TEMPLATE class. There are + two kinds of templates: type templates, and + expression templates. Type templates are used as patterns + of regular objects. Expression templates are used to unify against + a specific sub-structure of a given object.

+ +

The predefined templates are: +

+ + + + +

Site Map

+ + +

Enjoy!

+ + + +
+

Questions? Queries? Suggestions? Comments? Please direct them + at me. +

+ +
+
+ +
  + +
+
+ + +
+
+ +
 
+ +
+ + diff -rN -u old-cl-unification-1/docs/html/type-template-class.html new-cl-unification-1/docs/html/type-template-class.html --- old-cl-unification-1/docs/html/type-template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/type-template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,132 @@ + + + CL Unification: Class TYPE-TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class TYPE-TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class TYPE-TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ ARRAY-TEMPLATE, NIL-TEMPLATE, NUMBER-TEMPLATE, SEQUENCE-TEMPLATE, + STANDARD-OBJECT-TEMPLATE, STRUCTURE-OBJECT-TEMPLATE, SYMBOL-TEMPLATE. +

+ + +

Slots:

+ +

None.

+ + +

Description:

+ +

The TYPE-TEMPLATE class is the root of the type template sub-hierarchy.

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

None.

+ + +

See Also:

+ +

UNIFY

+ +

Notes:

+ +

None.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-06-11
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/unification-dictionary.html new-cl-unification-1/docs/html/unification-dictionary.html --- old-cl-unification-1/docs/html/unification-dictionary.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/unification-dictionary.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,143 @@ + + + CL Unification Dictionary + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Extensions: UNIFICATION Dictionary + +
+
+
+
+
  + + + +
  + +
+
+ + +
+
+ +
 
+ +
+ + diff -rN -u old-cl-unification-1/docs/html/unify-function.html new-cl-unification-1/docs/html/unify-function.html --- old-cl-unification-1/docs/html/unify-function.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/unify-function.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,400 @@ + + + CL Unification: Standard Generic Function UNIFY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Standard Generic Function UNIFY + +
+
+
+
+
  + +
+
+ +

Generic function UNIFY

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Syntax:

+ +

+

+  unify object1 object2 &optional substitution
+  => substitution
+  
+

+ +

Arguments and Values:

+ +

object1---an object +

object2---an object +

substitution---a substitution + + + + +

Description:

+ +

The generic function UNIFY is the entry point in the unification + machinery. It takes two CL objects, object1 + and object2 and checks whether they can be unified + by constructing a (possibly empty) consistent substitution assigning + appropriate values to the unification variables appearing + each object. The rules by which the unification process is carried + on are dependent on the types of the two objects. The known rules + are described in the "known methods" + section.

+ +

UNIFY takes a substitution as an optional argument. The + default value is a fresh empty substitution obtained by + calling MAKE-EMPTY-ENVIRONMENT.

+ +

Known Methods:

+ +

Note that UNIFY is commutative in its two required arguments. Each + method listed exists also with object1 and object2 + reversed.

+ +

First, the methods defined on standard CL types + are described, and then all the methods involving unification + templates are described.

+ + +

+

    +
  • +

    +

    +  unify (s1 symbol) (s2 symbol) &optional substitution
    +  => substitution
    +  
    +

    + +

    The unification of two symbols depends on whether one (or both) + of them is a unification variable (i.e. either the symbol with name + "_", or a symbol with name starting with the character + #\?.)

    + +

    If neither object is an unification variable, then UNIFY succeds + if and only if the two symbols s1 and s2 are EQ.

    + +

    If s1 is an unification variable, and either s1 is not + bound in substitution, or s1 is bound to s2 + then UNIFY succeds. If s1 was not bound in the + substitution, then a new binding for s1 to s2 + is created.

    + +

    The symmetric case holds if s1 is not an unification + variable but s2 is.

    + +

    Otherwise an error of type UNIFICATION-FAILURE is signaled.

    +
  • + +
  • +

    +

    +  unify (v symbol) (object t) &optional substitution
    +  => substitution
    +  
    +

    + +

    The symbol v must be an unification variable. If not, an + error of type UNIFICATION-FAILURE will be signaled. + Otherwise, the a new binding for the variable v with value + object will be created in the substitution.

    + +

    The creation of the new binding for v in the + substitution is dependent on the occur check + implemented by the generic function OCCURS-IN-P. OCCURS-IN-P is + called by the unification machinery if the variable + *OCCURRENCE-CHECK-P* is non-NIL (the default.) If + *OCCURENCE-CHECK-P* is non-NIL, and if the variable + v occurs in the object (i.e. OCCURS-IN-P + returns a non-NIL value,) then an error of type UNIFICATION-FAILURE + is signaled.

    +
  • + + +
  • +

    +

    +  unify (n1 number) (n2 number) &optional substitution
    +  => substitution
    +  
    +

    + +

    Two numbers unify if and only if they are =, in which case + substitution is returned unmodified. Otherwise, an error of + type UNIFICATION-FAILURE is signaled.

    +
  • + + +
  • +

    +

    +  unify (s1 string) (s2 string) &optional substitution
    +  => substitution
    +  
    +

    + +

    Two strings unify only is they are "equal", under the following + condition. If the variable *UNIFY-STRING-CASE-SENSITIVE-P* is T + (the default) then the two strings s1 and s2 are + compared using STRING=, otherwise they are compared using STRING-EQUAL. +

    + +

    If the two strings s1 and s2 are equal then + substitution is returned unchanged, otherwise an error of type + UNIFICATION-FAILURE is signaled.

    +
  • + +
  • +

    +

    +  unify (v1 vector) (v2 vector) &optional substitution
    +  => substitution
    +  
    +

    + +

    +

    +  unify (l1 list) (l2 list) &optional substitution
    +  => substitution
    +  
    +

    + +

    +

    +  unify (s1 sequence) (s2 sequence) &optional substitution
    +  => substitution
    +  
    +

    + +

    The "sequence" methods (and the specialized ones, mostly for + efficiency) extend the substitution by calling UNIFY + recursively on each element of the two sequences, s1 and + s2 (respectively, l1 and l2, v1 and + v2.) +

    + +

    An error of type UNIFICATION-FAILURE is signaled if the two + sequences are of different LENGTH or if any call to + UNIFY fails.

    +
  • + + +
  • +

    +

    +  unify (a1 array) (a2 array) &optional substitution
    +  => substitution
    +  
    +

    + +

    Two arrays a1 and a2 UNIFY if and only if each of + the respective elements does. The two arrays are traversed using + ROW-MAJOR-AREF. Otherwise an error of type UNIFICATION-FAILURE is + signaled.

    + +

    An error of type UNIFICATION-FAILURE is also signaled if the two + arrays have different total size (as returned by ARRAY-TOTAL-SIZE.)

    +
  • + + +
  • +

    +

    +  unify (object1 t) (object2 t) &optional substitution
    +  => substitution
    +  
    +

    + +

    This is the catch all method that is called as a last resort. + No recursive call to UNIFY is attempted, and the call succeeds if and + only if object1 and object2 are EQUALP. Otherwise, an + error of type UNIFICATION-FAILURE is signaled.

    +
  • + +
+

+ +

The next methods all involve a unification template. + Again all these methods are commutative in their required + arguments.

+ +

+

    +
  • +

    +

    +  unify (s structure-object) (st structure-object-template) &optional substitution
    +  => substitution
    +  
    +

    + +

    This method UNIFYs a s against a STRUCTURE-OBJECT-TEMPLATE + st. st has the following (general) structure.

    +
    +     (<structure-class specifier> [ (<reader> <value>) ]* )
    +  

    + +

    The structure-class specifier is a symbol naming a + structure class, reader is one of the DEFSTRUCT-generated + accessors, and value is a regular CL object, + a unification variable, or a unification template.

    + +

    The class of s must be a subclass of structure-class + specifier. Otherwise, an + error of type UNIFICATION-FAILURE is signaled.

    + +

    UNIFY + is called recursively on each value and the result of + applying reader to s.

    + +

    If all the (recursive) calls to UNIFY succeed, then a possibly + augmented substitution is returned. Otherwise, an + error of type UNIFICATION-FAILURE is signaled.

    +
  • + + +
  • +

    +

    +  unify (s standard-object) (st standard-object-template) &optional substitution
    +  => substitution
    +  
    +

    + +

    This method UNIFYs a s against a STANDARD-OBJECT-TEMPLATE + st. st has the following (general) structure.

    +
    +     (<standard-class specifier> [ ([slot-value | slot-accessor] <slot-spec> <value>) ]* )
    +  

    + +

    The standard-class specifier is a symbol naming a + class, slot-spec is a valid slot accessor when + slot-value is specified, or a valid slot name for the + class, when slot-value is specified, and value + is a regular CL object, + a unification variable, or a unification template.

    + +

    The class of s must be a subclass of standard-class + specifier. Otherwise, an + error of type UNIFICATION-FAILURE is signaled.

    + +

    UNIFY + is called recursively on each value and the result of + extracting the slot value from s using either the accessor + supplied, or SLOT-VALUE.

    + +

    If all the (recursive) calls to UNIFY succeed, then a possibly + augmented substitution is returned. Otherwise, an + error of type UNIFICATION-FAILURE is signaled.

    +
  • + +
+

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

If object1 and object2 cannot be unified, then an + error of type UNIFICATION-FAILURE is signaled.

+ + +

See Also:

+ +

MAKE-EMPTY-ENVIRONMENT, UNIFICATION-FAILURE, + *UNIFY-STRING-CASE-SENSITIVE-P*, OCCURS-IN-P, + *OCCURENCE-CHECK-P*.

+ +

Notes:

+ +

The unification algorithm implemented is very flexible and + provides many hooks for customization. However, it is not + necessarily asymptotically efficient (it has a worst case + exponential time complexity.)

+ +

It would be interesting to reimplement the kernel of the system + using a linear unification algorithm like the one described in

+ +

[MM82] A. Martelli and U. Montanari, An Efficient Unification + Algorithm, ACM Transactions on Programming Languages and + Systems, Vol. 4, No. 2, April 1982, Pages 258--282.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-04-12
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + diff -rN -u old-cl-unification-1/docs/html/unify-package.html new-cl-unification-1/docs/html/unify-package.html --- old-cl-unification-1/docs/html/unify-package.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/unify-package.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,115 @@ + + + CL Unification: Package CL.EXT.DACF.UNIFICATION + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Package CL.EXT.DACF.UNIFICATION + +
+
+
+
+
  + +
+
+ +

Package CL.EXT.DACF.UNIFICATION

+ +

Nicknames:

+ +

UNIFY

+ +

Uses:

+ +

COMMON-LISP

+ + +

Description:

+ +

This package contains all the definitions necessary for the general + Common Lisp unifier to work.

+ +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

None.

+ + +

See Also:

+ +

None.

+ +

Notes:

+ +

None.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-04-12
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + diff -rN -u old-cl-unification-1/docs/html/unifying-substitutions.html new-cl-unification-1/docs/html/unifying-substitutions.html --- old-cl-unification-1/docs/html/unifying-substitutions.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/unifying-substitutions.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,197 @@ + + + CL Unifying Substitutions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Extensions: UNIFYING SUBSTITUTIONS + +
+
+
+
+
  + +
+
+ +

Unifying Substitutions

+ +

The central notion of every unification machinery is that of + unifying substitution. A unifying substitution - or + environment - is a + mapping from variable names (or variables) to + values (which can be variables themselves.)

+ +

The generic function UNIFY, and several other functions and macros + in the package accept unifying substitutions as parameters, and + return them as values.

+ +

There are several notations to describe such unifying + substitutions. The one chosen here is simply the following:

+ +

+

+  {x1 -> y1, x2 -> y2, ..., xk -> yk}
+  
+

+ +

The UNIFY library has a number of functions and data structures + that can be used to construct and manipulate unifying substitutions.

+ +

In order to facilitate the construction of interpreter-like + programs the UNIFICATION library provides data structures + representing bindings, frames, and + environments - i.e. the unifying substitions proper.

+ +
    +
  • Bindings + +

    A binding simply represent the mapping between a variable and a + value.

    + +

    +

    +  binding: variable --> value
    +  
    +

    + +
  • Frames + +

    A frame is simply a collection of bindings.

    + +

    +

    +  frame: {bindingi}
    +  
    +

    + + +
  • Environments + +

    An environment is simply a stack of frames.

    + +

    +

    +  environment: <frame0, frame1, ..., framek>
    +  
    +

    +
+ +

The collection of operators described hereafter manipulates these + opaque data structures.

+ +

Unifying Substitutions Dictionary

+ + + + + +

Notes

+ +

Current Implementation Details

+ +

The current implementation is rather straightforward. A binding + is a CONS, a frame is a wrapper around an A-LIST, and an environment + is a wrapper around a LIST (stack) of frames.

+ + +

Functional Style Unifying Substitutions

+ +

There are very elegant implementations of unification and + substitutions based on curried functions. A typical exercise in + functional programming using ML or a similar language is to write a + simplified Milner Type Checker. Writing the unifying substitution + support can be achieved by using curried functions in that context.

+ + + + +

Site Map

+ + +

Enjoy!

+ + + +
+

Questions? Queries? Suggestions? Comments? Please direct them + at me. +

+ +
+
+ +
  + +
+
+ + +
+
+ +
 
+ +
+ + diff -rN -u old-cl-unification-1/docs/html/usci-variable.html new-cl-unification-1/docs/html/usci-variable.html --- old-cl-unification-1/docs/html/usci-variable.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/usci-variable.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,129 @@ + + + CL Unification: Variable *UNIFY-STRING-CASE-SENSITIVE-P* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Variable *UNIFY-STRING-CASE-SENSITIVE-P* + +
+
+
+
+
  + +
+
+ +

Variable *UNIFY-STRING-CASE-SENSITIVE-P*

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Value Type:

+ +

+ A generalized boolean. +

+ + +

Initial Value:

+ +

+ NIL +

+ + +

Description:

+ +

The value of *UNIFY-STRING-CASE-SENSITIVE-P* controls the + behavior of the UNIFY method with signature (string string). + If T (the default), the method will use STRING= to test for + equality of the two strings. Otherwise, the UNIFY method will use STRING-EQUAL.

+ +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

None.

+ + +

See Also:

+ +

UNIFY

+ +

Notes:

+ +

None.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-06-11
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/docs/html/vector-template-class.html new-cl-unification-1/docs/html/vector-template-class.html --- old-cl-unification-1/docs/html/vector-template-class.html 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/docs/html/vector-template-class.html 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,194 @@ + + + CL Unification: Class VECTOR-TEMPLATE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ CL Unification: Class VECTOR-TEMPLATE + +
+
+
+
+
  + +
+
+ +

Class VECTOR-TEMPLATE

+ +

Package:

+ +

COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION

+ + +

Class Precedence List:

+ +

+ VECTOR-TEMPLATE, SEQUENCE-TEMPLATE, ARRAY-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T. +

+ +

Known Subclasses:

+ +

+ STRING-TEMPLATE. +

+ + +

Slots:

+ +

None.

+ + +

Description:

+ +

The VECTOR-TEMPLATE class denotes those object that are used + to unify against a VECTOR.

+ +

Template Syntax:

+ +

+

+  #T(vector . <destructuring template lambda list>)
+  
+

+ +

+

+  #T(<CL vector type specifier> . <destructuring template lambda list>)
+  
+

+ + +

The VECTOR-TEMPLATE syntax denotes a VECTOR object. A + VECTOR-TEMPLATE must be unified against an VECTOR object. The elements + of the array must be unified against the + <destructuring template lambda list> + + +

Examples:

+ +

+

+  cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(vector 0 1 ?x 3 4 5)))
+  #<ENVIRONMENT xxx>
+  
+  cl-prompt> (find-variable-value '?x e)
+  42
+
+  cl-prompt> (setq e (unify #(0 1 42 3 4 5)  #T(vector 0 1 "FOO" 3 4 5)))
+  --> Error: UNIFICATION-FAILURE
+
+  cl-prompt> (setq e (unify #("foo" "bar" 42)) #T(vector _ _ ?x))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  42
+
+  cl-prompt> (setq e (unify #("foo" "bar" 42) #T(vector _ &rest ?x)))
+  #<ENVIRONMENT xxx>
+
+  cl-prompt> (find-variable-value '?x e)
+  #("bar" 42)
+
+  cl-prompt> (setq e (unify #("foo" "bar" 42) #T((vector fixnum) _ &rest ?x)))
+  --> Error: UNIFICATION-FAILURE
+  
+

+ + +

Affected By:

+ +

None.

+ + +

Exceptional Situations:

+ +

Unifying an VECTOR-TEMPLATE against a non-VECTOR object results in + an UNIFICATION-FAILURE error being signaled.

+ + +

See Also:

+ +

UNIFY

+ + +

Notes:

+ +

ARRAY Structural Properties

+ +

There is no way to "unify" against structural properties of + vectors like fill pointers and displacements.

+ +

Current Implementation Note

+ +

Type checking for templates like + #T((vector fixnum) 1 2 3) + is not yet implemented.

+ +
  + +
+
+ +

News

+ +

News in chronological order, most recent on top. +

+ +
    +
  • 2004-10-30
    + Completed description. +
  • + +
+ +
+
+ +
 
+ +
+ + + + diff -rN -u old-cl-unification-1/lambda-list-parsing.lisp new-cl-unification-1/lambda-list-parsing.lisp --- old-cl-unification-1/lambda-list-parsing.lisp 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/lambda-list-parsing.lisp 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,301 @@ +;;; -*- Mode: Lisp -*- + +;;; lambda-list-parsing.lisp -- + +;;;; See file COPYING for copyright licensing information. + +(in-package "UNIFY") + + +(declaim (inline type-is-t-p)) + +(defun type-is-t-p (type-spec) + (nth-value 0 (and (subtypep type-spec t) (subtypep t type-spec)))) + + +(declaim (inline type-specifier-p)) + +(defun type-specifier-p (x) + (nth-value 0 (ignore-errors (subtypep x t)))) + +(defun normalize-lambda-list (lambda-list) + (mapcar (lambda (lambda-element) + (etypecase lambda-element + (symbol lambda-element) + (cons (first lambda-element)))) + lambda-list)) + + +(defstruct lambda-var-info + (name nil :read-only t) + (type t :read-only t) + ) + +(defstruct (optional-lambda-var-info (:include lambda-var-info)) + (default-value nil :read-only t) + (name-for-supplied-indicator nil :read-only t) + ) + +(defstruct (aux-lambda-var-info (:include optional-lambda-var-info))) + +(defstruct (key-lambda-var-info (:include optional-lambda-var-info)) + (keyword-name nil :read-only t) + ) + +(defstruct (rest-lambda-var-info (:include lambda-var-info) + (:constructor make-rest-lambda-var-info (&key + name + (type 'list) + (element-type t)))) + (element-type t :read-only t) + ) + +;;; The next function is really implementation-dependent, give the +;;; definition of LAMBDA-LIST-KEYWORDS. + + +(define-condition lambda-list-parsing-error (program-error) + ((item :reader lambda-list-parsing-error-item + :initarg :item) + ) + (:report (lambda (llpe stream) + (format stream "Error while parsing an extended lambda-list (at ~S.)" + (lambda-list-parsing-error-item llpe)))) + ) + + +(defun symbol-or-cons-p (x) + (or (symbolp x) (consp x))) + + +(defun parse-extended-ordinary-lambda-list (lambda-list + &key + (ordinary-variable-test #'symbolp) + (optional-variable-test #'symbol-or-cons-p) + (rest-variable-test #'symbolp) + (key-variable-test #'symbol-or-cons-p) + (aux-variable-test #'symbol-or-cons-p) + ) + (let ((vars ()) + (optionals ()) + (keywords ()) + (rest ()) + (auxiliary ()) + ) + (labels ((parse-named-arguments (lambda-list &aux (head (first lambda-list))) + (cond ((null lambda-list) nil) + ((and (symbolp head) + (member head lambda-list-keywords)) + (case head + (&optional (parse-optional-arguments (rest lambda-list))) + (&key (parse-keyword-arguments (rest lambda-list))) + (&aux (parse-auxiliary-arguments (rest lambda-list))) + (&rest (parse-rest-arguments (rest lambda-list))) + (otherwise + (warn "Keyword ~A is implementation dependent.~@ + The parsing may not work properly." + head) + (skip-until-next-lambda-list-keyword (rest lambda-list)) + )) + ) + ((funcall ordinary-variable-test head) + (push head vars) + (parse-named-arguments (rest lambda-list))) + (t (error 'lambda-list-parsing-error :item head)) + )) + + (parse-optional-arguments (lambda-list &aux (head (first lambda-list))) + (cond ((null lambda-list) nil) + ((and (symbolp head) + (member head lambda-list-keywords)) + (case head + (&optional (error 'lambda-list-parsing-error :item head)) + (&key (parse-keyword-arguments (rest lambda-list))) + (&aux (parse-auxiliary-arguments (rest lambda-list))) + (&rest (parse-rest-arguments (rest lambda-list))) + (otherwise + (warn "Keyword ~A is implementation dependent.~@ + The parsing may not work properly." + head) + (skip-until-next-lambda-list-keyword (rest lambda-list)) + )) + ) + ((funcall optional-variable-test head) + (push head optionals) + (parse-optional-arguments (rest lambda-list))) + (t (error 'lambda-list-parsing-error :item head)) + )) + + (parse-keyword-arguments (lambda-list &aux (head (first lambda-list))) + (cond ((null lambda-list) nil) + ((and (symbolp head) + (member head lambda-list-keywords)) + (case head + (&optional (error 'lambda-list-parsing-error :item head)) + (&key (error 'lambda-list-parsing-error :item head)) + (&aux (parse-auxiliary-arguments (rest lambda-list))) + (&rest (parse-rest-arguments (rest lambda-list))) + (&allow-other-keys + (unless (or (null (rest lambda-list)) + (eql (cadr lambda-list) '&aux)) + (error 'lambda-list-parsing-error :item head)) + (skip-until-next-lambda-list-keyword (rest lambda-list))) + (otherwise + (warn "Keyword ~A is implementation dependent.~@ + The parsing may not work properly." + head) + (skip-until-next-lambda-list-keyword (rest lambda-list)) + )) + ) + ((funcall key-variable-test head) + (push head keywords) + (parse-keyword-arguments (rest lambda-list))) + (t (error 'lambda-list-parsing-error :item head)) + )) + + (parse-rest-arguments (lambda-list &aux (head (first lambda-list))) + (cond ((null lambda-list) nil) + ((consp head) + (push head rest) + ;; Error checking here. + (parse-rest-arguments (rest lambda-list))) + ((and (symbolp head) + (member head lambda-list-keywords)) + (case head + (&optional (error 'lambda-list-parsing-error :item head)) + (&key (parse-keyword-arguments (rest lambda-list))) + (&aux (parse-auxiliary-arguments (rest lambda-list))) + (&rest (error 'lambda-list-parsing-error :item head)) + (otherwise + (warn "Keyword ~A is implementation dependent.~@ + The parsing may not work properly." + head) + (skip-until-next-lambda-list-keyword (rest lambda-list)) + )) + ) + ((funcall rest-variable-test head) + (push head rest) + (parse-rest-arguments (rest lambda-list))) + (t (error 'lambda-list-parsing-error :item head)) + )) + + (parse-auxiliary-arguments (lambda-list &aux (head (first lambda-list))) + (cond ((null lambda-list) nil) + ((and (symbolp head) + (member head lambda-list-keywords)) + (case head + (&optional (error 'lambda-list-parsing-error :item head)) + (&key (error 'lambda-list-parsing-error :item head)) + (&aux (error 'lambda-list-parsing-error :item head)) + (&rest (error 'lambda-list-parsing-error :item head)) + (otherwise + (warn "Keyword ~A is implementation dependent.~@ + The parsing may not work properly." + head) + (skip-until-next-lambda-list-keyword (rest lambda-list)) + )) + ) + ((funcall aux-variable-test head) + (push head auxiliary) + (parse-auxiliary-arguments (rest lambda-list))) + (t (error 'lambda-list-parsing-error :item head)) + )) + + (skip-until-next-lambda-list-keyword (lambda-list + &aux (head (first lambda-list))) + (cond ((null lambda-list) nil) + ((and (symbolp head) + (member head lambda-list-keywords)) + (case head + (&optional (parse-optional-arguments (rest lambda-list))) + (&key (parse-keyword-arguments (rest lambda-list))) + (&aux (parse-auxiliary-arguments (rest lambda-list))) + (&rest (parse-rest-arguments (rest lambda-list))) + (otherwise + (warn "Keyword ~A is implementation dependent.~@ + The parsing may not work properly." + head) + (skip-until-next-lambda-list-keyword (rest lambda-list)) + )) + ) + ((symbol-or-cons-p head) + (skip-until-next-lambda-list-keyword (rest lambda-list))) + )) + ) + (parse-named-arguments lambda-list) + (values (nreverse vars) + (nreverse optionals) + (nreverse keywords) + (nreverse rest) + (nreverse auxiliary)) + ))) + + +(defun parse-var-type-info (var) + (etypecase var + (symbol (make-lambda-var-info :name var)) + (cons (make-lambda-var-info :name (first var) :type (second var))))) + + +(defun parse-optional-var-type-info (var) + (etypecase var + (symbol (make-optional-lambda-var-info :name var)) + (cons (etypecase (first var) + (symbol (if (second var) ; special case (foo nil) and (foo) + (make-optional-lambda-var-info + :name (first var) + :type (or (and (constantp (second var)) (type-of (second var))) + t)) + (make-optional-lambda-var-info :name (first var)))) + (cons (make-optional-lambda-var-info + :name (caar var) + :type (cadar var) + :default-value (cadr var))) + )) + )) + + +(defun parse-auxiliary-var-type-info (var) + (parse-optional-var-type-info var)) + +(defun parse-rest-var-type-info (var) ; See the FUNCTION type ANSI spec for an explanation. + (etypecase var + (symbol (make-rest-lambda-var-info :name var)) + (cons (make-rest-lambda-var-info :name (first var) :element-type (second var))))) + + +(defun parse-key-var-type-info (var) + (etypecase var + (symbol (make-key-lambda-var-info :name var)) + (cons (destructuring-bind (var &optional (init-value nil init-value-supplied-p)) + var + (let ((init-value-type + (if init-value-supplied-p + (or (and (constantp init-value) (type-of init-value)) + t) + t)) + ) + (etypecase var + (symbol (make-key-lambda-var-info :name var + :type init-value-type + :default-value init-value)) + + (cons (destructuring-bind (kwd var) + var + (etypecase var + (symbol + (make-key-lambda-var-info :name var + :default-value init-value + :type init-value-type + :keyword-name kwd)) + (cons + (make-key-lambda-var-info :name (first var) + :default-value init-value + :type (second var) + :keyword-name kwd)))) + )) + ))) + )) + + +;;; end of file -- lambda-list-parsing.lisp -- diff -rN -u old-cl-unification-1/lib-dependent/cl-ppcre-template.asd new-cl-unification-1/lib-dependent/cl-ppcre-template.asd --- old-cl-unification-1/lib-dependent/cl-ppcre-template.asd 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/lib-dependent/cl-ppcre-template.asd 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,11 @@ +;;;; -*- Mode: Lisp -*- + +;;;; cl-ppcre-template.asd -- +;;;; ASDF system file. + +(asdf:defsystem cl-ppcre-template + :author "Marco Antoniotti" + :components ((:file "cl-ppcre-template")) + :depends-on (cl-ppcre cl-unification)) + +;;;; end of file -- cl-ppcre-template.asd -- diff -rN -u old-cl-unification-1/lib-dependent/cl-ppcre-template.lisp new-cl-unification-1/lib-dependent/cl-ppcre-template.lisp --- old-cl-unification-1/lib-dependent/cl-ppcre-template.lisp 1970-01-01 00:00:00.000000000 +0000 +++ new-cl-unification-1/lib-dependent/cl-ppcre-template.lisp 2013-07-25 02:26:30.000000000 +0000 @@ -0,0 +1,149 @@ +;;;; -*- Mode: Lisp -*- + +;;;; cl-ppcre-template.lisp -- +;;;; REGEXP template dependent on CL-PPCRE. + +(in-package "CL.EXT.DACF.UNIFICATION") ; DACF = Data And Control Flow. + + +;;;; REGEXP Templates. +;;;; Another extension of the type specifier language. + +;;;; A template can also be +;;;; +;;;;